pytensor 2.31.6__tar.gz → 2.31.7__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 (489) hide show
  1. {pytensor-2.31.6/pytensor.egg-info → pytensor-2.31.7}/PKG-INFO +1 -1
  2. {pytensor-2.31.6 → pytensor-2.31.7}/doc/conf.py +24 -6
  3. {pytensor-2.31.6 → pytensor-2.31.7}/doc/environment.yml +2 -1
  4. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/index.rst +1 -3
  5. pytensor-2.31.7/doc/library/xtensor/index.md +101 -0
  6. pytensor-2.31.7/doc/library/xtensor/linalg.md +7 -0
  7. pytensor-2.31.7/doc/library/xtensor/math.md +8 -0
  8. pytensor-2.31.7/doc/library/xtensor/module_functions.md +7 -0
  9. pytensor-2.31.7/doc/library/xtensor/random.md +7 -0
  10. pytensor-2.31.7/doc/library/xtensor/type.md +21 -0
  11. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/_version.py +3 -3
  12. pytensor-2.31.7/pytensor/link/jax/dispatch/blockwise.py +21 -0
  13. pytensor-2.31.7/pytensor/link/jax/dispatch/signal/conv.py +24 -0
  14. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/blockwise.py +3 -2
  15. pytensor-2.31.7/pytensor/link/numba/dispatch/signal/conv.py +69 -0
  16. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/math.py +42 -32
  17. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/basic.py +3 -4
  18. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blockwise.py +96 -29
  19. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/__init__.py +0 -1
  20. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blockwise.py +1 -12
  21. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/subtensor_lift.py +5 -5
  22. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/signal/conv.py +54 -56
  23. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/__init__.py +2 -2
  24. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/linalg.py +40 -2
  25. pytensor-2.31.7/pytensor/xtensor/math.py +627 -0
  26. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/random.py +148 -35
  27. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/shape.py +127 -0
  28. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/type.py +39 -2
  29. {pytensor-2.31.6 → pytensor-2.31.7/pytensor.egg-info}/PKG-INFO +1 -1
  30. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/SOURCES.txt +6 -1
  31. pytensor-2.31.6/pytensor/link/jax/dispatch/blockwise.py +0 -29
  32. pytensor-2.31.6/pytensor/link/jax/dispatch/signal/conv.py +0 -14
  33. pytensor-2.31.6/pytensor/link/numba/dispatch/signal/conv.py +0 -70
  34. pytensor-2.31.6/pytensor/tensor/rewriting/conv.py +0 -78
  35. pytensor-2.31.6/pytensor/xtensor/math.py +0 -252
  36. {pytensor-2.31.6 → pytensor-2.31.7}/LICENSE.txt +0 -0
  37. {pytensor-2.31.6 → pytensor-2.31.7}/MANIFEST.in +0 -0
  38. {pytensor-2.31.6 → pytensor-2.31.7}/README.rst +0 -0
  39. {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/PLACEHOLDER +0 -0
  40. {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/layout.html +0 -0
  41. {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/nb-badges.html +0 -0
  42. {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/rendered_citation.html +0 -0
  43. {pytensor-2.31.6 → pytensor-2.31.7}/doc/LICENSE.txt +0 -0
  44. {pytensor-2.31.6 → pytensor-2.31.7}/doc/README.md +0 -0
  45. {pytensor-2.31.6 → pytensor-2.31.7}/doc/acknowledgement.rst +0 -0
  46. {pytensor-2.31.6 → pytensor-2.31.7}/doc/bcast.png +0 -0
  47. {pytensor-2.31.6 → pytensor-2.31.7}/doc/bcast.svg +0 -0
  48. {pytensor-2.31.6 → pytensor-2.31.7}/doc/blog.md +0 -0
  49. {pytensor-2.31.6 → pytensor-2.31.7}/doc/core_development_guide.rst +0 -0
  50. {pytensor-2.31.6 → pytensor-2.31.7}/doc/css.inc +0 -0
  51. {pytensor-2.31.6 → pytensor-2.31.7}/doc/dev_start_guide.rst +0 -0
  52. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/apply.png +0 -0
  53. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/apply.svg +0 -0
  54. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/apply2.svg +0 -0
  55. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/creating_a_c_op.rst +0 -0
  56. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  57. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/creating_an_op.rst +0 -0
  58. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/ctype.rst +0 -0
  59. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/extending_faq.rst +0 -0
  60. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/extending_pytensor_solution_1.py +0 -0
  61. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/graph_rewriting.rst +0 -0
  62. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/graphstructures.rst +0 -0
  63. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/index.rst +0 -0
  64. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/inplace.rst +0 -0
  65. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/op.rst +0 -0
  66. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/other_ops.rst +0 -0
  67. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  68. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  69. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/pipeline.rst +0 -0
  70. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/scan.rst +0 -0
  71. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/tips.rst +0 -0
  72. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/type.rst +0 -0
  73. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/unittest.rst +0 -0
  74. {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/using_params.rst +0 -0
  75. {pytensor-2.31.6 → pytensor-2.31.7}/doc/faq.rst +0 -0
  76. {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/optimize/root.ipynb +0 -0
  77. {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/page_footer.md +0 -0
  78. {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  79. {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  80. {pytensor-2.31.6 → pytensor-2.31.7}/doc/generate_dtype_tensor_table.py +0 -0
  81. {pytensor-2.31.6 → pytensor-2.31.7}/doc/glossary.rst +0 -0
  82. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/Elman_srnn.png +0 -0
  83. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/PyTensor.png +0 -0
  84. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/PyTensor_RGB.svg +0 -0
  85. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/PyTensor_logo.png +0 -0
  86. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/binder.svg +0 -0
  87. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/blocksparse.png +0 -0
  88. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/colab.svg +0 -0
  89. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/github.svg +0 -0
  90. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/lstm.png +0 -0
  91. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/lstm_memorycell.png +0 -0
  92. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/talk2010.gif +0 -0
  93. {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/talk2010.png +0 -0
  94. {pytensor-2.31.6 → pytensor-2.31.7}/doc/index.rst +0 -0
  95. {pytensor-2.31.6 → pytensor-2.31.7}/doc/install.rst +0 -0
  96. {pytensor-2.31.6 → pytensor-2.31.7}/doc/internal/how_to_release.rst +0 -0
  97. {pytensor-2.31.6 → pytensor-2.31.7}/doc/internal/index.rst +0 -0
  98. {pytensor-2.31.6 → pytensor-2.31.7}/doc/internal/metadocumentation.rst +0 -0
  99. {pytensor-2.31.6 → pytensor-2.31.7}/doc/introduction.rst +0 -0
  100. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/debugmode.rst +0 -0
  101. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/function.rst +0 -0
  102. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/index.rst +0 -0
  103. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/io.rst +0 -0
  104. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/mode.rst +0 -0
  105. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/nanguardmode.rst +0 -0
  106. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/opfromgraph.rst +0 -0
  107. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/ops.rst +0 -0
  108. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/profilemode.rst +0 -0
  109. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/shared.rst +0 -0
  110. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/config.rst +0 -0
  111. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  112. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  113. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  114. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  115. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  116. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  117. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  118. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp.html +0 -0
  119. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp.png +0 -0
  120. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp2.html +0 -0
  121. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  122. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp2.png +0 -0
  123. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/ofg.html +0 -0
  124. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/ofg2.html +0 -0
  125. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index.ipynb +0 -0
  126. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index.rst +0 -0
  127. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  128. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  129. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  130. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  131. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/features.rst +0 -0
  132. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/fgraph.rst +0 -0
  133. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/graph.rst +0 -0
  134. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/index.rst +0 -0
  135. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/op.rst +0 -0
  136. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/replace.rst +0 -0
  137. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/type.rst +0 -0
  138. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/utils.rst +0 -0
  139. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/misc/pkl_utils.rst +0 -0
  140. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/printing.rst +0 -0
  141. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/scalar/index.rst +0 -0
  142. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/scan.rst +0 -0
  143. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/sparse/index.rst +0 -0
  144. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/sparse/sandbox.rst +0 -0
  145. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/basic.rst +0 -0
  146. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/basic_opt.rst +0 -0
  147. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/bcast.png +0 -0
  148. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/bcast.svg +0 -0
  149. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/conv.rst +0 -0
  150. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/elemwise.rst +0 -0
  151. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/extra_ops.rst +0 -0
  152. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/fft.rst +0 -0
  153. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/functional.rst +0 -0
  154. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/index.rst +0 -0
  155. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/io.rst +0 -0
  156. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/math_opt.rst +0 -0
  157. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/nlinalg.rst +0 -0
  158. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/optimize.rst +0 -0
  159. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/plot_fft.png +0 -0
  160. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/random/distributions.rst +0 -0
  161. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/random/index.rst +0 -0
  162. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/slinalg.rst +0 -0
  163. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/utils.rst +0 -0
  164. {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/typed_list.rst +0 -0
  165. {pytensor-2.31.6 → pytensor-2.31.7}/doc/links.rst +0 -0
  166. {pytensor-2.31.6 → pytensor-2.31.7}/doc/optimizations.rst +0 -0
  167. {pytensor-2.31.6 → pytensor-2.31.7}/doc/pylintrc +0 -0
  168. {pytensor-2.31.6 → pytensor-2.31.7}/doc/robots.txt +0 -0
  169. {pytensor-2.31.6 → pytensor-2.31.7}/doc/troubleshooting.rst +0 -0
  170. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/adding.rst +0 -0
  171. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/adding_solution_1.py +0 -0
  172. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/aliasing.rst +0 -0
  173. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/apply.png +0 -0
  174. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/apply.svg +0 -0
  175. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/bcast.png +0 -0
  176. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/broadcasting.rst +0 -0
  177. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/conditions.rst +0 -0
  178. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/debug_faq.rst +0 -0
  179. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/dlogistic.png +0 -0
  180. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/examples.rst +0 -0
  181. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/faq_tutorial.rst +0 -0
  182. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/gradients.rst +0 -0
  183. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/index.rst +0 -0
  184. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/loading_and_saving.rst +0 -0
  185. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/logistic.gp +0 -0
  186. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/logistic.png +0 -0
  187. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/loop.rst +0 -0
  188. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/loop_solution_1.py +0 -0
  189. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/modes.rst +0 -0
  190. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/modes_solution_1.py +0 -0
  191. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/multi_cores.rst +0 -0
  192. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/nan_tutorial.rst +0 -0
  193. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/d3viz.png +0 -0
  194. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  195. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  196. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  197. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/printing_drawing.rst +0 -0
  198. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/prng.rst +0 -0
  199. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/profiling.rst +0 -0
  200. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/profiling_example.py +0 -0
  201. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/profiling_example_out.prof +0 -0
  202. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/shape_info.rst +0 -0
  203. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/sparse.rst +0 -0
  204. {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/symbolic_graphs.rst +0 -0
  205. {pytensor-2.31.6 → pytensor-2.31.7}/doc/user_guide.rst +0 -0
  206. {pytensor-2.31.6 → pytensor-2.31.7}/pyproject.toml +0 -0
  207. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/__init__.py +0 -0
  208. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/bin/__init__.py +0 -0
  209. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/bin/pytensor_cache.py +0 -0
  210. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/breakpoint.py +0 -0
  211. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/__init__.py +0 -0
  212. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/builders.py +0 -0
  213. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/compiledir.py +0 -0
  214. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/compilelock.py +0 -0
  215. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/debugmode.py +0 -0
  216. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/function/__init__.py +0 -0
  217. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/function/pfunc.py +0 -0
  218. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/function/types.py +0 -0
  219. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/io.py +0 -0
  220. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/mode.py +0 -0
  221. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/monitormode.py +0 -0
  222. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/nanguardmode.py +0 -0
  223. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/ops.py +0 -0
  224. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/profiling.py +0 -0
  225. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/sharedvalue.py +0 -0
  226. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/configdefaults.py +0 -0
  227. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/configparser.py +0 -0
  228. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/__init__.py +0 -0
  229. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  230. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/css/d3viz.css +0 -0
  231. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/d3viz.py +0 -0
  232. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/formatting.py +0 -0
  233. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/html/template.html +0 -0
  234. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  235. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  236. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/d3viz.js +0 -0
  237. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  238. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  239. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/gradient.py +0 -0
  240. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/__init__.py +0 -0
  241. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/basic.py +0 -0
  242. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/destroyhandler.py +0 -0
  243. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/features.py +0 -0
  244. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/fg.py +0 -0
  245. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/null_type.py +0 -0
  246. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/op.py +0 -0
  247. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/replace.py +0 -0
  248. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/__init__.py +0 -0
  249. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/basic.py +0 -0
  250. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/db.py +0 -0
  251. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/kanren.py +0 -0
  252. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/unify.py +0 -0
  253. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/utils.py +0 -0
  254. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/type.py +0 -0
  255. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/utils.py +0 -0
  256. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/ifelse.py +0 -0
  257. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/ipython.py +0 -0
  258. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/__init__.py +0 -0
  259. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/basic.py +0 -0
  260. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/__init__.py +0 -0
  261. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/basic.py +0 -0
  262. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  263. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  264. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/cmodule.py +0 -0
  265. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/cutils.py +0 -0
  266. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/cvm.py +0 -0
  267. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/exceptions.py +0 -0
  268. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/interface.py +0 -0
  269. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/lazylinker_c.py +0 -0
  270. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/op.py +0 -0
  271. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/params_type.py +0 -0
  272. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/type.py +0 -0
  273. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/__init__.py +0 -0
  274. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/__init__.py +0 -0
  275. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/basic.py +0 -0
  276. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/blas.py +0 -0
  277. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/einsum.py +0 -0
  278. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  279. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  280. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/math.py +0 -0
  281. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
  282. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/pad.py +0 -0
  283. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/random.py +0 -0
  284. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/scalar.py +0 -0
  285. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/scan.py +0 -0
  286. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/shape.py +0 -0
  287. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  288. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/slinalg.py +0 -0
  289. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/sort.py +0 -0
  290. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/sparse.py +0 -0
  291. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  292. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  293. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/linker.py +0 -0
  294. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/__init__.py +0 -0
  295. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/__init__.py +0 -0
  296. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/basic.py +0 -0
  297. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  298. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  299. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  300. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
  301. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  302. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  303. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  304. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
  305. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
  306. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
  307. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
  308. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
  309. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +0 -0
  310. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
  311. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
  312. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
  313. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
  314. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
  315. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
  316. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  317. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  318. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/random.py +0 -0
  319. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/scalar.py +0 -0
  320. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/scan.py +0 -0
  321. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  322. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/slinalg.py +0 -0
  323. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/sparse.py +0 -0
  324. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  325. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  326. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  327. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/linker.py +0 -0
  328. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  329. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  330. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  331. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  332. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  333. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  334. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/math.py +0 -0
  335. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
  336. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  337. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  338. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  339. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  340. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/linker.py +0 -0
  341. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/utils.py +0 -0
  342. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/vm.py +0 -0
  343. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/__init__.py +0 -0
  344. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/check_blas.py +0 -0
  345. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/check_blas_many.sh +0 -0
  346. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/check_duplicate_key.py +0 -0
  347. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  348. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/elemwise_time_test.py +0 -0
  349. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/frozendict.py +0 -0
  350. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/may_share_memory.py +0 -0
  351. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/ordered_set.py +0 -0
  352. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/pkl_utils.py +0 -0
  353. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/npy_2_compat.py +0 -0
  354. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/printing.py +0 -0
  355. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/py.typed +0 -0
  356. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/raise_op.py +0 -0
  357. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/__init__.py +0 -0
  358. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/basic.py +0 -0
  359. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  360. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  361. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/gamma.c +0 -0
  362. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/incbet.c +0 -0
  363. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/loop.py +0 -0
  364. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/sharedvar.py +0 -0
  365. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/__init__.py +0 -0
  366. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/basic.py +0 -0
  367. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/checkpoints.py +0 -0
  368. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/op.py +0 -0
  369. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/rewriting.py +0 -0
  370. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/scan_perform.pyx +0 -0
  371. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/scan_perform_ext.py +0 -0
  372. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/utils.py +0 -0
  373. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/views.py +0 -0
  374. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/__init__.py +0 -0
  375. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/basic.py +0 -0
  376. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/rewriting.py +0 -0
  377. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sandbox/__init__.py +0 -0
  378. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sandbox/sp.py +0 -0
  379. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sandbox/sp2.py +0 -0
  380. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sharedvar.py +0 -0
  381. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/type.py +0 -0
  382. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/utils.py +0 -0
  383. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/__init__.py +0 -0
  384. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/__init__.py +0 -0
  385. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/solve/__init__.py +0 -0
  386. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/solve/rewriting.py +0 -0
  387. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/solve/tridiagonal.py +0 -0
  388. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas.py +0 -0
  389. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas_c.py +0 -0
  390. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas_headers.py +0 -0
  391. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas_scipy.py +0 -0
  392. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  393. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  394. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  395. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/conv/__init__.py +0 -0
  396. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/conv/abstract_conv.py +0 -0
  397. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/einsum.py +0 -0
  398. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/elemwise.py +0 -0
  399. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/elemwise_cgen.py +0 -0
  400. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/exceptions.py +0 -0
  401. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/extra_ops.py +0 -0
  402. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/fft.py +0 -0
  403. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/fourier.py +0 -0
  404. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/functional.py +0 -0
  405. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/inplace.py +0 -0
  406. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/interpolate.py +0 -0
  407. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/io.py +0 -0
  408. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/linalg.py +0 -0
  409. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/math.py +0 -0
  410. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/nlinalg.py +0 -0
  411. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/optimize.py +0 -0
  412. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/pad.py +0 -0
  413. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/__init__.py +0 -0
  414. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/basic.py +0 -0
  415. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/op.py +0 -0
  416. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  417. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/basic.py +0 -0
  418. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/jax.py +0 -0
  419. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/numba.py +0 -0
  420. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/type.py +0 -0
  421. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/utils.py +0 -0
  422. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/var.py +0 -0
  423. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/basic.py +0 -0
  424. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blas.py +0 -0
  425. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blas_c.py +0 -0
  426. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
  427. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/einsum.py +0 -0
  428. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/elemwise.py +0 -0
  429. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  430. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/jax.py +0 -0
  431. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/linalg.py +0 -0
  432. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/math.py +0 -0
  433. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/numba.py +0 -0
  434. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/ofg.py +0 -0
  435. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/shape.py +0 -0
  436. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/special.py +0 -0
  437. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/subtensor.py +0 -0
  438. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  439. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/shape.py +0 -0
  440. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/sharedvar.py +0 -0
  441. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/signal/__init__.py +0 -0
  442. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/slinalg.py +0 -0
  443. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/sort.py +0 -0
  444. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/special.py +0 -0
  445. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/subtensor.py +0 -0
  446. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/type.py +0 -0
  447. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/type_other.py +0 -0
  448. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/utils.py +0 -0
  449. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/var.py +0 -0
  450. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/variable.py +0 -0
  451. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/xlogx.py +0 -0
  452. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/__init__.py +0 -0
  453. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/basic.py +0 -0
  454. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/rewriting.py +0 -0
  455. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/type.py +0 -0
  456. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/updates.py +0 -0
  457. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/utils.py +0 -0
  458. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/basic.py +0 -0
  459. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/indexing.py +0 -0
  460. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/reduction.py +0 -0
  461. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/__init__.py +0 -0
  462. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/basic.py +0 -0
  463. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/indexing.py +0 -0
  464. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/math.py +0 -0
  465. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/reduction.py +0 -0
  466. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/shape.py +0 -0
  467. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/utils.py +0 -0
  468. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/vectorization.py +0 -0
  469. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/vectorization.py +0 -0
  470. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/dependency_links.txt +0 -0
  471. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/entry_points.txt +0 -0
  472. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/requires.txt +0 -0
  473. {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/top_level.txt +0 -0
  474. {pytensor-2.31.6 → pytensor-2.31.7}/scripts/mypy-failing.txt +0 -0
  475. {pytensor-2.31.6 → pytensor-2.31.7}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  476. {pytensor-2.31.6 → pytensor-2.31.7}/setup.cfg +0 -0
  477. {pytensor-2.31.6 → pytensor-2.31.7}/setup.py +0 -0
  478. {pytensor-2.31.6 → pytensor-2.31.7}/tests/link/c/c_code/test_cenum.h +0 -0
  479. {pytensor-2.31.6 → pytensor-2.31.7}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  480. {pytensor-2.31.6 → pytensor-2.31.7}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
  481. {pytensor-2.31.6 → pytensor-2.31.7}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
  482. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_breakpoint.py +0 -0
  483. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_config.py +0 -0
  484. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_gradient.py +0 -0
  485. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_ifelse.py +0 -0
  486. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_printing.py +0 -0
  487. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_raise_op.py +0 -0
  488. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_rop.py +0 -0
  489. {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_updates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 2.31.6
3
+ Version: 2.31.7
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
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import inspect
3
3
  import sys
4
+
4
5
  import pytensor
5
6
  from pathlib import Path
6
7
 
@@ -12,6 +13,7 @@ extensions = [
12
13
  "sphinx.ext.autodoc",
13
14
  "sphinx.ext.todo",
14
15
  "sphinx.ext.doctest",
16
+ "sphinx_copybutton",
15
17
  "sphinx.ext.napoleon",
16
18
  "sphinx.ext.linkcode",
17
19
  "sphinx.ext.mathjax",
@@ -86,8 +88,7 @@ today_fmt = "%B %d, %Y"
86
88
 
87
89
  # List of directories, relative to source directories, that shouldn't be
88
90
  # searched for source files.
89
- exclude_dirs = ["images", "scripts", "sandbox"]
90
- exclude_patterns = ['page_footer.md', '**/*.myst.md']
91
+ exclude_patterns = ["README.md", "images/*", "page_footer.md", "**/*.myst.md"]
91
92
 
92
93
  # The reST default role (used for this markup: `text`) to use for all
93
94
  # documents.
@@ -235,24 +236,41 @@ htmlhelp_basename = "pytensor_doc"
235
236
  # Resolve function
236
237
  # This function is used to populate the (source) links in the API
237
238
  def linkcode_resolve(domain, info):
238
- def find_source():
239
+ def find_obj() -> object:
239
240
  # try to find the file and line number, based on code from numpy:
240
241
  # https://github.com/numpy/numpy/blob/master/doc/source/conf.py#L286
241
242
  obj = sys.modules[info["module"]]
242
243
  for part in info["fullname"].split("."):
243
244
  obj = getattr(obj, part)
245
+ return obj
244
246
 
247
+ def find_source(obj):
245
248
  fn = Path(inspect.getsourcefile(obj))
246
- fn = fn.relative_to(Path(__file__).parent)
249
+ fn = fn.relative_to(Path(pytensor.__file__).parent)
247
250
  source, lineno = inspect.getsourcelines(obj)
248
251
  return fn, lineno, lineno + len(source) - 1
249
252
 
253
+ def fallback_source():
254
+ return info["module"].replace(".", "/") + ".py"
255
+
250
256
  if domain != "py" or not info["module"]:
251
257
  return None
258
+
252
259
  try:
253
- filename = "pytensor/%s#L%d-L%d" % find_source()
260
+ obj = find_obj()
254
261
  except Exception:
255
- filename = info["module"].replace(".", "/") + ".py"
262
+ filename = fallback_source()
263
+ else:
264
+ try:
265
+ filename = "pytensor/%s#L%d-L%d" % find_source(obj)
266
+ except Exception:
267
+ # warnings.warn(f"Could not find source code for {domain}:{info}")
268
+ try:
269
+ filename = obj.__module__.replace(".", "/") + ".py"
270
+ except AttributeError:
271
+ # Some objects do not have a __module__ attribute (?)
272
+ filename = fallback_source()
273
+
256
274
  import subprocess
257
275
 
258
276
  tag = subprocess.Popen(
@@ -13,7 +13,9 @@ dependencies:
13
13
  - mock
14
14
  - pillow
15
15
  - pymc-sphinx-theme
16
+ - sphinx-copybutton
16
17
  - sphinx-design
18
+ - sphinx-sitemap
17
19
  - pygments
18
20
  - pydot
19
21
  - ipython
@@ -23,5 +25,4 @@ dependencies:
23
25
  - ablog
24
26
  - pip
25
27
  - pip:
26
- - sphinx_sitemap
27
28
  - -e ..
@@ -20,14 +20,12 @@ Modules
20
20
  d3viz/index
21
21
  graph/index
22
22
  gradient
23
- misc/pkl_utils
24
23
  printing
25
- scalar/index
26
24
  scan
27
25
  sparse/index
28
- sparse/sandbox
29
26
  tensor/index
30
27
  typed_list
28
+ xtensor/index
31
29
 
32
30
  .. module:: pytensor
33
31
  :platform: Unix, Windows
@@ -0,0 +1,101 @@
1
+ (libdoc_xtensor)=
2
+ # `xtensor` -- XTensor operations
3
+
4
+ This module implements as abstraction layer on regular tensor operations, that behaves like Xarray.
5
+
6
+ A new type {class}`pytensor.xtensor.type.XTensorType`, generalizes the {class}`pytensor.tensor.TensorType`
7
+ with the addition of a `dims` attribute, that labels the dimensions of the tensor.
8
+
9
+ Variables of XTensorType (i.e., {class}`pytensor.xtensor.type.XTensorVariable`s) are the symbolic counterpart
10
+ to xarray DataArray objects.
11
+
12
+ The module implements several PyTensor operations {class}`pytensor.xtensor.basic.XOp`s, whose signature mimics that of
13
+ xarray (and xarray_einstats) DataArray operations. These operations, unlike most regular PyTensor operations, cannot
14
+ be directly evaluated, but require a rewrite (lowering) into a regular tensor graph that can itself be evaluated as usual.
15
+
16
+ Like regular PyTensor, we don't need an Op for every possible method or function in the public API of xarray.
17
+ If the existing XOps can be composed to produce the desired result, then we can use them directly.
18
+
19
+ ## Coordinates
20
+ For now, there's no analogous of xarray coordinates, so you won't be able to do coordinate operations like `.sel`.
21
+ The graphs produced by an xarray program without coords are much more amenable to the numpy-like backend of PyTensor.
22
+ Coords involve aspects of Pandas/database query and joining that are not trivially expressible in PyTensor.
23
+
24
+ ## Example
25
+
26
+
27
+ ```{testcode}
28
+
29
+ import pytensor.tensor as pt
30
+ import pytensor.xtensor as ptx
31
+
32
+ a = pt.tensor("a", shape=(3,))
33
+ b = pt.tensor("b", shape=(4,))
34
+
35
+ ax = ptx.as_xtensor(a, dims=["x"])
36
+ bx = ptx.as_xtensor(b, dims=["y"])
37
+
38
+ zx = ax + bx
39
+ assert zx.type == ptx.type.XTensorType("float64", dims=["x", "y"], shape=(3, 4))
40
+
41
+ z = zx.values
42
+ z.dprint()
43
+ ```
44
+
45
+
46
+ ```{testoutput}
47
+
48
+ TensorFromXTensor [id A]
49
+ └─ XElemwise{scalar_op=Add()} [id B]
50
+ ├─ XTensorFromTensor{dims=('x',)} [id C]
51
+ │ └─ a [id D]
52
+ └─ XTensorFromTensor{dims=('y',)} [id E]
53
+ └─ b [id F]
54
+ ```
55
+
56
+ Once we compile the graph, no XOps are left.
57
+
58
+ ```{testcode}
59
+
60
+ import pytensor
61
+
62
+ with pytensor.config.change_flags(optimizer_verbose=True):
63
+ fn = pytensor.function([a, b], z)
64
+
65
+ ```
66
+
67
+ ```{testoutput}
68
+
69
+ rewriting: rewrite lower_elemwise replaces XElemwise{scalar_op=Add()}.0 of XElemwise{scalar_op=Add()}(XTensorFromTensor{dims=('x',)}.0, XTensorFromTensor{dims=('y',)}.0) with XTensorFromTensor{dims=('x', 'y')}.0 of XTensorFromTensor{dims=('x', 'y')}(Add.0)
70
+ rewriting: rewrite useless_tensor_from_xtensor replaces TensorFromXTensor.0 of TensorFromXTensor(XTensorFromTensor{dims=('x',)}.0) with a of None
71
+ rewriting: rewrite useless_tensor_from_xtensor replaces TensorFromXTensor.0 of TensorFromXTensor(XTensorFromTensor{dims=('y',)}.0) with b of None
72
+ rewriting: rewrite useless_tensor_from_xtensor replaces TensorFromXTensor.0 of TensorFromXTensor(XTensorFromTensor{dims=('x', 'y')}.0) with Add.0 of Add(ExpandDims{axis=1}.0, ExpandDims{axis=0}.0)
73
+
74
+ ```
75
+
76
+ ```{testcode}
77
+
78
+ fn.dprint()
79
+ ```
80
+
81
+ ```{testoutput}
82
+
83
+ Add [id A] 2
84
+ ├─ ExpandDims{axis=1} [id B] 1
85
+ │ └─ a [id C]
86
+ └─ ExpandDims{axis=0} [id D] 0
87
+ └─ b [id E]
88
+ ```
89
+
90
+
91
+ ## Index
92
+
93
+ :::{toctree}
94
+ :maxdepth: 1
95
+
96
+ module_functions
97
+ math
98
+ linalg
99
+ random
100
+ type
101
+ :::
@@ -0,0 +1,7 @@
1
+ (libdoc_xtensor_linalg)=
2
+ # `xtensor.linalg` -- Linear algebra operations
3
+
4
+ ```{eval-rst}
5
+ .. automodule:: pytensor.xtensor.linalg
6
+ :members:
7
+ ```
@@ -0,0 +1,8 @@
1
+ (libdoc_xtensor_math)=
2
+ # `xtensor.math` Mathematical operations
3
+
4
+ ```{eval-rst}
5
+ .. automodule:: pytensor.xtensor.math
6
+ :members:
7
+ :exclude-members: XDot, dot
8
+ ```
@@ -0,0 +1,7 @@
1
+ (libdoc_xtensor_module_function)=
2
+ # `xtensor` -- Module level operations
3
+
4
+ ```{eval-rst}
5
+ .. automodule:: pytensor.xtensor
6
+ :members: broadcast, concat, dot, full_like, ones_like, zeros_like
7
+ ```
@@ -0,0 +1,7 @@
1
+ (libdoc_xtensor_random)=
2
+ # `xtensor.random` Random number generator operations
3
+
4
+ ```{eval-rst}
5
+ .. automodule:: pytensor.xtensor.random
6
+ :members:
7
+ ```
@@ -0,0 +1,21 @@
1
+ (libdoc_xtenor_type)=
2
+
3
+ # `xtensor.type` -- Types and Variables
4
+
5
+ ## XTensorVariable creation functions
6
+
7
+ ```{eval-rst}
8
+ .. automodule:: pytensor.xtensor.type
9
+ :members: xtensor, xtensor_constant, as_xtensor
10
+
11
+ ```
12
+
13
+ ## XTensor Type and Variable classes
14
+
15
+ ```{eval-rst}
16
+ .. automodule:: pytensor.xtensor.type
17
+ :noindex:
18
+ :members: XTensorType, XTensorVariable, XTensorConstant
19
+ ```
20
+
21
+
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-07-02T21:17:39+0200",
11
+ "date": "2025-07-08T17:42:30+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "815671d5f53ab7bf0cabe9ba685b70285da38a27",
15
- "version": "2.31.6"
14
+ "full-revisionid": "4ce092fe4df857a2bf88a6a367b4a1592e10c0ee",
15
+ "version": "2.31.7"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,21 @@
1
+ import jax.numpy as jnp
2
+
3
+ from pytensor.link.jax.dispatch import jax_funcify
4
+ from pytensor.tensor.blockwise import Blockwise
5
+
6
+
7
+ @jax_funcify.register(Blockwise)
8
+ def jax_funcify_Blockwise(op: Blockwise, node, **kwargs):
9
+ signature = op.signature
10
+ core_node = op._create_dummy_core_node(
11
+ node.inputs, propagate_unbatched_core_inputs=True
12
+ )
13
+ core_fn = jax_funcify(core_node.op, node=core_node, **kwargs)
14
+
15
+ vect_fn = jnp.vectorize(core_fn, signature=signature)
16
+
17
+ def blockwise_fn(*inputs):
18
+ op._check_runtime_broadcast(node, inputs)
19
+ return vect_fn(*inputs)
20
+
21
+ return blockwise_fn
@@ -0,0 +1,24 @@
1
+ import jax
2
+
3
+ from pytensor.link.jax.dispatch import jax_funcify
4
+ from pytensor.tensor.basic import get_underlying_scalar_constant_value
5
+ from pytensor.tensor.exceptions import NotScalarConstantError
6
+ from pytensor.tensor.signal.conv import Convolve1d
7
+
8
+
9
+ @jax_funcify.register(Convolve1d)
10
+ def jax_funcify_Convolve1d(op, node, **kwargs):
11
+ _, _, full_mode = node.inputs
12
+ try:
13
+ full_mode = get_underlying_scalar_constant_value(full_mode)
14
+ except NotScalarConstantError:
15
+ raise NotImplementedError(
16
+ "Cannot compile Convolve1D to jax without static mode"
17
+ )
18
+ static_mode = "full" if full_mode else "valid"
19
+
20
+ def conv1d(data, kernel, _runtime_full_mode):
21
+ # _runtime_full_mode is not used, as we only support static mode
22
+ return jax.numpy.convolve(data, kernel, mode=static_mode)
23
+
24
+ return conv1d
@@ -16,7 +16,7 @@ from pytensor.tensor import TensorVariable, get_vector_length
16
16
  from pytensor.tensor.blockwise import Blockwise, BlockwiseWithCoreShape
17
17
 
18
18
 
19
- @numba_funcify.register
19
+ @numba_funcify.register(BlockwiseWithCoreShape)
20
20
  def numba_funcify_Blockwise(op: BlockwiseWithCoreShape, node, **kwargs):
21
21
  [blockwise_node] = op.fgraph.apply_nodes
22
22
  blockwise_op: Blockwise = blockwise_node.op
@@ -26,7 +26,8 @@ def numba_funcify_Blockwise(op: BlockwiseWithCoreShape, node, **kwargs):
26
26
  core_shapes_len = tuple(get_vector_length(sh) for sh in node.inputs[nin:])
27
27
 
28
28
  core_node = blockwise_op._create_dummy_core_node(
29
- cast(tuple[TensorVariable], blockwise_node.inputs)
29
+ cast(tuple[TensorVariable], node.inputs[:nin]),
30
+ propagate_unbatched_core_inputs=True,
30
31
  )
31
32
  core_op_fn = numba_funcify(
32
33
  core_op,
@@ -0,0 +1,69 @@
1
+ import numpy as np
2
+ from numba.np.arraymath import _get_inner_prod
3
+
4
+ from pytensor.link.numba.dispatch import numba_funcify
5
+ from pytensor.link.numba.dispatch.basic import numba_njit
6
+ from pytensor.tensor.signal.conv import Convolve1d
7
+
8
+
9
+ @numba_funcify.register(Convolve1d)
10
+ def numba_funcify_Convolve1d(op, node, **kwargs):
11
+ # This specialized version is faster than the overloaded numba np.convolve
12
+ a_dtype, b_dtype = node.inputs[0].type.dtype, node.inputs[1].type.dtype
13
+ out_dtype = node.outputs[0].type.dtype
14
+ innerprod = _get_inner_prod(a_dtype, b_dtype)
15
+
16
+ @numba_njit
17
+ def valid_convolve1d(x, y):
18
+ nx = len(x)
19
+ ny = len(y)
20
+ if nx < ny:
21
+ x, y = y, x
22
+ nx, ny = ny, nx
23
+ y_flipped = y[::-1]
24
+
25
+ length = nx - ny + 1
26
+ ret = np.empty(length, out_dtype)
27
+
28
+ for i in range(length):
29
+ ret[i] = innerprod(x[i : i + ny], y_flipped)
30
+
31
+ return ret
32
+
33
+ @numba_njit
34
+ def full_convolve1d(x, y):
35
+ nx = len(x)
36
+ ny = len(y)
37
+ if nx < ny:
38
+ x, y = y, x
39
+ nx, ny = ny, nx
40
+ y_flipped = y[::-1]
41
+
42
+ length = nx + ny - 1
43
+ ret = np.empty(length, out_dtype)
44
+ idx = 0
45
+
46
+ for i in range(ny - 1):
47
+ k = i + 1
48
+ ret[idx] = innerprod(x[:k], y_flipped[-k:])
49
+ idx = idx + 1
50
+
51
+ for i in range(nx - ny + 1):
52
+ ret[idx] = innerprod(x[i : i + ny], y_flipped)
53
+ idx = idx + 1
54
+
55
+ for i in range(ny - 1):
56
+ k = ny - i - 1
57
+ ret[idx] = innerprod(x[-k:], y_flipped[:k])
58
+ idx = idx + 1
59
+
60
+ return ret
61
+
62
+ @numba_njit
63
+ def convolve_1d(x, y, mode):
64
+ if mode:
65
+ return full_convolve1d(x, y)
66
+ else:
67
+ return valid_convolve1d(x, y)
68
+
69
+ return convolve_1d
@@ -385,46 +385,56 @@ class Psi(UnaryScalarOp):
385
385
  #define DEVICE
386
386
  #endif
387
387
 
388
- #ifndef ga_double
389
- #define ga_double double
388
+ #ifndef M_PI
389
+ #define M_PI 3.14159265358979323846
390
390
  #endif
391
391
 
392
392
  #ifndef _PSIFUNCDEFINED
393
393
  #define _PSIFUNCDEFINED
394
- DEVICE double _psi(ga_double x) {
395
-
396
- /*taken from
397
- Bernardo, J. M. (1976). Algorithm AS 103:
398
- Psi (Digamma) Function. Applied Statistics. 25 (3), 315-317.
399
- http://www.uv.es/~bernardo/1976AppStatist.pdf */
394
+ DEVICE double _psi(double x) {
395
+
396
+ /*taken from
397
+ Bernardo, J. M. (1976). Algorithm AS 103:
398
+ Psi (Digamma) Function. Applied Statistics. 25 (3), 315-317.
399
+ http://www.uv.es/~bernardo/1976AppStatist.pdf
400
+ */
401
+
402
+ double y, R, psi_ = 0;
403
+ double S = 1.0e-5;
404
+ double C = 8.5;
405
+ double S3 = 8.333333333e-2;
406
+ double S4 = 8.333333333e-3;
407
+ double S5 = 3.968253968e-3;
408
+ double D1 = -0.5772156649;
400
409
 
401
- ga_double y, R, psi_ = 0;
402
- ga_double S = 1.0e-5;
403
- ga_double C = 8.5;
404
- ga_double S3 = 8.333333333e-2;
405
- ga_double S4 = 8.333333333e-3;
406
- ga_double S5 = 3.968253968e-3;
407
- ga_double D1 = -0.5772156649;
408
-
409
- y = x;
410
+ if (x <= 0) {
411
+ // the digamma function approaches infinity from one side and -infinity from the other, around negative integers and zero
412
+ if (x == floor(x)) {
413
+ return INFINITY; // note that scipy returns -INF for 0 and NaN for negative integers
414
+ }
415
+
416
+ // Use reflection formula
417
+ double pi_x = M_PI * x;
418
+ double cot_pi_x = cos(pi_x) / sin(pi_x);
419
+ return _psi(1.0 - x) - M_PI * cot_pi_x;
420
+ }
410
421
 
411
- if (y <= 0.0)
412
- return psi_;
422
+ y = x;
413
423
 
414
- if (y <= S)
415
- return D1 - 1.0/y;
424
+ if (y <= S)
425
+ return D1 - 1.0/y;
416
426
 
417
- while (y < C) {
418
- psi_ = psi_ - 1.0 / y;
419
- y = y + 1;
420
- }
427
+ while (y < C) {
428
+ psi_ = psi_ - 1.0 / y;
429
+ y = y + 1;
430
+ }
421
431
 
422
- R = 1.0 / y;
423
- psi_ = psi_ + log(y) - .5 * R ;
424
- R= R*R;
425
- psi_ = psi_ - R * (S3 - R * (S4 - R * S5));
432
+ R = 1.0 / y;
433
+ psi_ = psi_ + log(y) - .5 * R ;
434
+ R= R*R;
435
+ psi_ = psi_ - R * (S3 - R * (S4 - R * S5));
426
436
 
427
- return psi_;
437
+ return psi_;
428
438
  }
429
439
  #endif
430
440
  """
@@ -433,8 +443,8 @@ class Psi(UnaryScalarOp):
433
443
  (x,) = inp
434
444
  (z,) = out
435
445
  if node.inputs[0].type in float_types:
436
- return f"""{z} =
437
- _psi({x});"""
446
+ dtype = "npy_" + node.outputs[0].dtype
447
+ return f"{z} = ({dtype}) _psi({x});"
438
448
  raise NotImplementedError("only floating point is implemented")
439
449
 
440
450
 
@@ -678,10 +678,9 @@ class ScalarFromTensor(COp):
678
678
  self, [t], [ps.get_scalar_type(dtype=t.type.dtype).make_variable()]
679
679
  )
680
680
 
681
- def perform(self, node, inp, out_):
682
- (s,) = inp
683
- (out,) = out_
684
- out[0] = s.flatten()[0]
681
+ def perform(self, node, inputs, output_storage):
682
+ # not using .item() because that returns a Python scalar, not a numpy scalar
683
+ output_storage[0][0] = inputs[0][()]
685
684
 
686
685
  def infer_shape(self, fgraph, node, in_shapes):
687
686
  return [()]