pytensor 2.16.3__tar.gz → 2.17.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. {pytensor-2.16.3 → pytensor-2.17.1}/PKG-INFO +1 -1
  2. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/_version.py +3 -3
  3. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/random.py +5 -6
  4. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/nlinalg.py +4 -4
  5. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/basic.py +22 -9
  6. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/rewriting/jax.py +5 -5
  7. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/linalg.py +14 -2
  8. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/math.py +58 -56
  9. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/variable.py +1 -1
  10. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor.egg-info/PKG-INFO +1 -1
  11. {pytensor-2.16.3 → pytensor-2.17.1}/LICENSE.txt +0 -0
  12. {pytensor-2.16.3 → pytensor-2.17.1}/MANIFEST.in +0 -0
  13. {pytensor-2.16.3 → pytensor-2.17.1}/README.rst +0 -0
  14. {pytensor-2.16.3 → pytensor-2.17.1}/bin/__init__.py +0 -0
  15. {pytensor-2.16.3 → pytensor-2.17.1}/bin/pytensor-cache +0 -0
  16. {pytensor-2.16.3 → pytensor-2.17.1}/bin/pytensor_cache.py +0 -0
  17. {pytensor-2.16.3 → pytensor-2.17.1}/doc/.templates/PLACEHOLDER +0 -0
  18. {pytensor-2.16.3 → pytensor-2.17.1}/doc/.templates/layout.html +0 -0
  19. {pytensor-2.16.3 → pytensor-2.17.1}/doc/LICENSE.txt +0 -0
  20. {pytensor-2.16.3 → pytensor-2.17.1}/doc/README.md +0 -0
  21. {pytensor-2.16.3 → pytensor-2.17.1}/doc/acknowledgement.rst +0 -0
  22. {pytensor-2.16.3 → pytensor-2.17.1}/doc/bcast.png +0 -0
  23. {pytensor-2.16.3 → pytensor-2.17.1}/doc/bcast.svg +0 -0
  24. {pytensor-2.16.3 → pytensor-2.17.1}/doc/conf.py +0 -0
  25. {pytensor-2.16.3 → pytensor-2.17.1}/doc/core_development_guide.rst +0 -0
  26. {pytensor-2.16.3 → pytensor-2.17.1}/doc/css.inc +0 -0
  27. {pytensor-2.16.3 → pytensor-2.17.1}/doc/dev_start_guide.rst +0 -0
  28. {pytensor-2.16.3 → pytensor-2.17.1}/doc/environment.yml +0 -0
  29. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/apply.png +0 -0
  30. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/apply.svg +0 -0
  31. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/apply2.svg +0 -0
  32. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/creating_a_c_op.rst +0 -0
  33. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  34. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/creating_an_op.rst +0 -0
  35. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/ctype.rst +0 -0
  36. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/extending_faq.rst +0 -0
  37. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/extending_pytensor_solution_1.py +0 -0
  38. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/graph_rewriting.rst +0 -0
  39. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/graphstructures.rst +0 -0
  40. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/index.rst +0 -0
  41. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/inplace.rst +0 -0
  42. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/op.rst +0 -0
  43. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/other_ops.rst +0 -0
  44. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  45. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  46. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/pipeline.rst +0 -0
  47. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/scan.rst +0 -0
  48. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/tips.rst +0 -0
  49. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/type.rst +0 -0
  50. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/unittest.rst +0 -0
  51. {pytensor-2.16.3 → pytensor-2.17.1}/doc/extending/using_params.rst +0 -0
  52. {pytensor-2.16.3 → pytensor-2.17.1}/doc/faq.rst +0 -0
  53. {pytensor-2.16.3 → pytensor-2.17.1}/doc/generate_dtype_tensor_table.py +0 -0
  54. {pytensor-2.16.3 → pytensor-2.17.1}/doc/glossary.rst +0 -0
  55. {pytensor-2.16.3 → pytensor-2.17.1}/doc/images/Elman_srnn.png +0 -0
  56. {pytensor-2.16.3 → pytensor-2.17.1}/doc/images/PyTensor_RGB.svg +0 -0
  57. {pytensor-2.16.3 → pytensor-2.17.1}/doc/images/blocksparse.png +0 -0
  58. {pytensor-2.16.3 → pytensor-2.17.1}/doc/images/lstm.png +0 -0
  59. {pytensor-2.16.3 → pytensor-2.17.1}/doc/images/lstm_memorycell.png +0 -0
  60. {pytensor-2.16.3 → pytensor-2.17.1}/doc/images/talk2010.gif +0 -0
  61. {pytensor-2.16.3 → pytensor-2.17.1}/doc/images/talk2010.png +0 -0
  62. {pytensor-2.16.3 → pytensor-2.17.1}/doc/index.rst +0 -0
  63. {pytensor-2.16.3 → pytensor-2.17.1}/doc/install.rst +0 -0
  64. {pytensor-2.16.3 → pytensor-2.17.1}/doc/internal/how_to_release.rst +0 -0
  65. {pytensor-2.16.3 → pytensor-2.17.1}/doc/internal/index.rst +0 -0
  66. {pytensor-2.16.3 → pytensor-2.17.1}/doc/internal/metadocumentation.rst +0 -0
  67. {pytensor-2.16.3 → pytensor-2.17.1}/doc/introduction.rst +0 -0
  68. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/debugmode.rst +0 -0
  69. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/function.rst +0 -0
  70. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/index.rst +0 -0
  71. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/io.rst +0 -0
  72. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/mode.rst +0 -0
  73. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/nanguardmode.rst +0 -0
  74. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/opfromgraph.rst +0 -0
  75. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/ops.rst +0 -0
  76. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/profilemode.rst +0 -0
  77. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/compile/shared.rst +0 -0
  78. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/config.rst +0 -0
  79. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  80. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  81. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  82. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  83. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  84. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  85. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  86. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/mlp.html +0 -0
  87. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/mlp.png +0 -0
  88. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/mlp2.html +0 -0
  89. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  90. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/mlp2.png +0 -0
  91. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/ofg.html +0 -0
  92. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/examples/ofg2.html +0 -0
  93. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/index.ipynb +0 -0
  94. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/index.rst +0 -0
  95. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  96. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  97. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  98. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  99. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/gradient.rst +0 -0
  100. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/graph/features.rst +0 -0
  101. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/graph/fgraph.rst +0 -0
  102. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/graph/graph.rst +0 -0
  103. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/graph/index.rst +0 -0
  104. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/graph/op.rst +0 -0
  105. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/graph/type.rst +0 -0
  106. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/graph/utils.rst +0 -0
  107. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/index.rst +0 -0
  108. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/misc/pkl_utils.rst +0 -0
  109. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/printing.rst +0 -0
  110. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/sandbox/index.rst +0 -0
  111. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/sandbox/linalg.rst +0 -0
  112. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/scalar/index.rst +0 -0
  113. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/scan.rst +0 -0
  114. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/sparse/index.rst +0 -0
  115. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/sparse/sandbox.rst +0 -0
  116. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/basic.rst +0 -0
  117. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/basic_opt.rst +0 -0
  118. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/bcast.png +0 -0
  119. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/bcast.svg +0 -0
  120. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/conv.rst +0 -0
  121. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/elemwise.rst +0 -0
  122. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/extra_ops.rst +0 -0
  123. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/fft.rst +0 -0
  124. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/index.rst +0 -0
  125. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/io.rst +0 -0
  126. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/math_opt.rst +0 -0
  127. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/nlinalg.rst +0 -0
  128. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/plot_fft.png +0 -0
  129. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/random/basic.rst +0 -0
  130. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/random/index.rst +0 -0
  131. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/random/utils.rst +0 -0
  132. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/slinalg.rst +0 -0
  133. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/tensor/utils.rst +0 -0
  134. {pytensor-2.16.3 → pytensor-2.17.1}/doc/library/typed_list.rst +0 -0
  135. {pytensor-2.16.3 → pytensor-2.17.1}/doc/links.rst +0 -0
  136. {pytensor-2.16.3 → pytensor-2.17.1}/doc/optimizations.rst +0 -0
  137. {pytensor-2.16.3 → pytensor-2.17.1}/doc/pylintrc +0 -0
  138. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/ccodegen.rst +0 -0
  139. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/compilation.rst +0 -0
  140. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/debugging_with_stepmode.rst +0 -0
  141. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/elemwise_compiler.rst +0 -0
  142. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/function.rst +0 -0
  143. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/functional.rst +0 -0
  144. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/how_to_make_ops.rst +0 -0
  145. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/index.rst +0 -0
  146. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/index2.rst +0 -0
  147. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/interactive_debugger.rst +0 -0
  148. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/logistic_regression_example.rst +0 -0
  149. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/performance.rst +0 -0
  150. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/randomnumbers.rst +0 -0
  151. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/rethinkccodegen.rst +0 -0
  152. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/sandbox.rst +0 -0
  153. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/software.rst +0 -0
  154. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/sparse.rst +0 -0
  155. {pytensor-2.16.3 → pytensor-2.17.1}/doc/sandbox/tensoroptools.rst +0 -0
  156. {pytensor-2.16.3 → pytensor-2.17.1}/doc/scripts/docgen.py +0 -0
  157. {pytensor-2.16.3 → pytensor-2.17.1}/doc/troubleshooting.rst +0 -0
  158. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/adding.rst +0 -0
  159. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/adding_solution_1.py +0 -0
  160. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/aliasing.rst +0 -0
  161. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/apply.png +0 -0
  162. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/apply.svg +0 -0
  163. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/bcast.png +0 -0
  164. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/broadcasting.rst +0 -0
  165. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/conditions.rst +0 -0
  166. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/debug_faq.rst +0 -0
  167. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/dlogistic.png +0 -0
  168. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/examples.rst +0 -0
  169. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/faq_tutorial.rst +0 -0
  170. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/gradients.rst +0 -0
  171. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/index.rst +0 -0
  172. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/loading_and_saving.rst +0 -0
  173. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/logistic.gp +0 -0
  174. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/logistic.png +0 -0
  175. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/loop.rst +0 -0
  176. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/loop_solution_1.py +0 -0
  177. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/modes.rst +0 -0
  178. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/modes_solution_1.py +0 -0
  179. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/multi_cores.rst +0 -0
  180. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/nan_tutorial.rst +0 -0
  181. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/pics/d3viz.png +0 -0
  182. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  183. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  184. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  185. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/printing_drawing.rst +0 -0
  186. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/profiling.rst +0 -0
  187. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/profiling_example.py +0 -0
  188. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/profiling_example_out.prof +0 -0
  189. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/shape_info.rst +0 -0
  190. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/sparse.rst +0 -0
  191. {pytensor-2.16.3 → pytensor-2.17.1}/doc/tutorial/symbolic_graphs.rst +0 -0
  192. {pytensor-2.16.3 → pytensor-2.17.1}/doc/user_guide.rst +0 -0
  193. {pytensor-2.16.3 → pytensor-2.17.1}/pyproject.toml +0 -0
  194. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/__init__.py +0 -0
  195. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/bin/__init__.py +0 -0
  196. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/bin/pytensor_cache.py +0 -0
  197. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/breakpoint.py +0 -0
  198. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/__init__.py +0 -0
  199. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/builders.py +0 -0
  200. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/compiledir.py +0 -0
  201. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/compilelock.py +0 -0
  202. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/debugmode.py +0 -0
  203. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/function/__init__.py +0 -0
  204. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/function/pfunc.py +0 -0
  205. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/function/types.py +0 -0
  206. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/io.py +0 -0
  207. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/mode.py +0 -0
  208. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/monitormode.py +0 -0
  209. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/nanguardmode.py +0 -0
  210. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/ops.py +0 -0
  211. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/profiling.py +0 -0
  212. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/compile/sharedvalue.py +0 -0
  213. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/configdefaults.py +0 -0
  214. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/configparser.py +0 -0
  215. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/__init__.py +0 -0
  216. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  217. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/css/d3viz.css +0 -0
  218. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/d3viz.py +0 -0
  219. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/formatting.py +0 -0
  220. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  221. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  222. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/js/d3viz.js +0 -0
  223. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  224. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  225. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/gradient.py +0 -0
  226. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/__init__.py +0 -0
  227. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/basic.py +0 -0
  228. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/destroyhandler.py +0 -0
  229. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/features.py +0 -0
  230. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/fg.py +0 -0
  231. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/null_type.py +0 -0
  232. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/op.py +0 -0
  233. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/replace.py +0 -0
  234. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/rewriting/__init__.py +0 -0
  235. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/rewriting/basic.py +0 -0
  236. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/rewriting/db.py +0 -0
  237. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/rewriting/kanren.py +0 -0
  238. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/rewriting/unify.py +0 -0
  239. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/rewriting/utils.py +0 -0
  240. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/type.py +0 -0
  241. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/graph/utils.py +0 -0
  242. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/ifelse.py +0 -0
  243. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/__init__.py +0 -0
  244. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/basic.py +0 -0
  245. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/__init__.py +0 -0
  246. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/basic.py +0 -0
  247. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  248. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  249. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/cmodule.py +0 -0
  250. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/cutils.py +0 -0
  251. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/cvm.py +0 -0
  252. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/exceptions.py +0 -0
  253. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/interface.py +0 -0
  254. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/lazylinker_c.py +0 -0
  255. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/op.py +0 -0
  256. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/params_type.py +0 -0
  257. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/c/type.py +0 -0
  258. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/__init__.py +0 -0
  259. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/__init__.py +0 -0
  260. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/basic.py +0 -0
  261. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  262. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  263. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
  264. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/scalar.py +0 -0
  265. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/scan.py +0 -0
  266. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/shape.py +0 -0
  267. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/slinalg.py +0 -0
  268. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/sparse.py +0 -0
  269. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  270. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  271. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/jax/linker.py +0 -0
  272. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/__init__.py +0 -0
  273. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/__init__.py +0 -0
  274. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/basic.py +0 -0
  275. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  276. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  277. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/elemwise_codegen.py +0 -0
  278. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  279. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  280. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/random.py +0 -0
  281. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/scalar.py +0 -0
  282. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/scan.py +0 -0
  283. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/slinalg.py +0 -0
  284. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/sparse.py +0 -0
  285. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  286. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/numba/linker.py +0 -0
  287. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/utils.py +0 -0
  288. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/link/vm.py +0 -0
  289. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/__init__.py +0 -0
  290. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/check_blas.py +0 -0
  291. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/check_blas_many.sh +0 -0
  292. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/check_duplicate_key.py +0 -0
  293. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  294. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/elemwise_time_test.py +0 -0
  295. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/frozendict.py +0 -0
  296. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/may_share_memory.py +0 -0
  297. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/ordered_set.py +0 -0
  298. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/pkl_utils.py +0 -0
  299. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/misc/safe_asarray.py +0 -0
  300. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/printing.py +0 -0
  301. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/py.typed +0 -0
  302. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/raise_op.py +0 -0
  303. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/__init__.py +0 -0
  304. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/basic.py +0 -0
  305. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  306. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  307. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/c_code/gamma.c +0 -0
  308. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/loop.py +0 -0
  309. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/math.py +0 -0
  310. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scalar/sharedvar.py +0 -0
  311. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/__init__.py +0 -0
  312. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/basic.py +0 -0
  313. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/checkpoints.py +0 -0
  314. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/op.py +0 -0
  315. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/rewriting.py +0 -0
  316. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/scan_perform.pyx +0 -0
  317. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/scan_perform_ext.py +0 -0
  318. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/utils.py +0 -0
  319. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/scan/views.py +0 -0
  320. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/__init__.py +0 -0
  321. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/basic.py +0 -0
  322. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/rewriting.py +0 -0
  323. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/sandbox/__init__.py +0 -0
  324. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/sandbox/sp.py +0 -0
  325. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/sandbox/sp2.py +0 -0
  326. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/sharedvar.py +0 -0
  327. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/type.py +0 -0
  328. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/sparse/utils.py +0 -0
  329. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/__init__.py +0 -0
  330. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/basic.py +0 -0
  331. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/blas.py +0 -0
  332. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/blas_c.py +0 -0
  333. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/blas_headers.py +0 -0
  334. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/blas_scipy.py +0 -0
  335. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/blockwise.py +0 -0
  336. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  337. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  338. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  339. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/conv/__init__.py +0 -0
  340. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/conv/abstract_conv.py +0 -0
  341. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/elemwise.py +0 -0
  342. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/elemwise_cgen.py +0 -0
  343. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/exceptions.py +0 -0
  344. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/extra_ops.py +0 -0
  345. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/fft.py +0 -0
  346. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/fourier.py +0 -0
  347. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/inplace.py +0 -0
  348. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/io.py +0 -0
  349. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/linalg.py +0 -0
  350. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/math.py +0 -0
  351. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/__init__.py +0 -0
  352. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/op.py +0 -0
  353. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  354. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/rewriting/basic.py +0 -0
  355. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/type.py +0 -0
  356. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/utils.py +0 -0
  357. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/random/var.py +0 -0
  358. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/__init__.py +0 -0
  359. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/basic.py +0 -0
  360. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/blas.py +0 -0
  361. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/blas_c.py +0 -0
  362. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
  363. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/blockwise.py +0 -0
  364. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/elemwise.py +0 -0
  365. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  366. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/jax.py +0 -0
  367. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/shape.py +0 -0
  368. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/special.py +0 -0
  369. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/subtensor.py +0 -0
  370. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  371. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/shape.py +0 -0
  372. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/sharedvar.py +0 -0
  373. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/slinalg.py +0 -0
  374. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/sort.py +0 -0
  375. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/special.py +0 -0
  376. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/subtensor.py +0 -0
  377. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/type.py +0 -0
  378. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/type_other.py +0 -0
  379. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/utils.py +0 -0
  380. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/var.py +0 -0
  381. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/tensor/xlogx.py +0 -0
  382. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/typed_list/__init__.py +0 -0
  383. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/typed_list/basic.py +0 -0
  384. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/typed_list/rewriting.py +0 -0
  385. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/typed_list/type.py +0 -0
  386. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/updates.py +0 -0
  387. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/utils.py +0 -0
  388. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor/version.py +0 -0
  389. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor.egg-info/SOURCES.txt +0 -0
  390. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor.egg-info/dependency_links.txt +0 -0
  391. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor.egg-info/entry_points.txt +0 -0
  392. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor.egg-info/requires.txt +0 -0
  393. {pytensor-2.16.3 → pytensor-2.17.1}/pytensor.egg-info/top_level.txt +0 -0
  394. {pytensor-2.16.3 → pytensor-2.17.1}/scripts/downstream_pr.sh +0 -0
  395. {pytensor-2.16.3 → pytensor-2.17.1}/scripts/mypy-failing.txt +0 -0
  396. {pytensor-2.16.3 → pytensor-2.17.1}/scripts/upstream_pr.sh +0 -0
  397. {pytensor-2.16.3 → pytensor-2.17.1}/setup.cfg +0 -0
  398. {pytensor-2.16.3 → pytensor-2.17.1}/setup.py +0 -0
  399. {pytensor-2.16.3 → pytensor-2.17.1}/tests/link/c/c_code/test_cenum.h +0 -0
  400. {pytensor-2.16.3 → pytensor-2.17.1}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  401. {pytensor-2.16.3 → pytensor-2.17.1}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
  402. {pytensor-2.16.3 → pytensor-2.17.1}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
  403. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_breakpoint.py +0 -0
  404. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_config.py +0 -0
  405. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_gradient.py +0 -0
  406. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_ifelse.py +0 -0
  407. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_printing.py +0 -0
  408. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_raise_op.py +0 -0
  409. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_rop.py +0 -0
  410. {pytensor-2.16.3 → pytensor-2.17.1}/tests/test_updates.py +0 -0
  411. {pytensor-2.16.3 → pytensor-2.17.1}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytensor
3
- Version: 2.16.3
3
+ Version: 2.17.1
4
4
  Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
5
5
  Author-email: pymc-devs <pymc.devs@gmail.com>
6
6
  License: .. _license:
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2023-09-24T14:37:18+0200",
11
+ "date": "2023-10-04T13:04:02+0100",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "2d944072a7cb37e931aa95d97f439f8b21004d4e",
15
- "version": "2.16.3"
14
+ "full-revisionid": "849c3b86553afd56081b0a2bd80701ea286acf02",
15
+ "version": "2.17.1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -216,21 +216,20 @@ def jax_sample_fn_uniform(op):
216
216
 
217
217
  @jax_sample_fn.register(aer.ParetoRV)
218
218
  @jax_sample_fn.register(aer.GammaRV)
219
- def jax_sample_fn_shape_rate(op):
220
- """JAX implementation of random variables in the shape-rate family.
219
+ def jax_sample_fn_shape_scale(op):
220
+ """JAX implementation of random variables in the shape-scale family.
221
221
 
222
222
  JAX only implements the standard version of random variables in the
223
- shape-rate family. We thus need to rescale the results manually.
223
+ shape-scale family. We thus need to rescale the results manually.
224
224
 
225
225
  """
226
226
  name = op.name
227
227
  jax_op = getattr(jax.random, name)
228
228
 
229
- def sample_fn(rng, size, dtype, *parameters):
229
+ def sample_fn(rng, size, dtype, shape, scale):
230
230
  rng_key = rng["jax_state"]
231
231
  rng_key, sampling_key = jax.random.split(rng_key, 2)
232
- (shape, rate) = parameters
233
- sample = jax_op(sampling_key, shape, size, dtype) / rate
232
+ sample = jax_op(sampling_key, shape, size, dtype) * scale
234
233
  rng["jax_state"] = rng_key
235
234
  return (rng, sample)
236
235
 
@@ -541,9 +541,9 @@ class SVD(Op):
541
541
  # See doc in the docstring of the function just after this class.
542
542
  __props__ = ("full_matrices", "compute_uv")
543
543
 
544
- def __init__(self, full_matrices=True, compute_uv=True):
545
- self.full_matrices = full_matrices
546
- self.compute_uv = compute_uv
544
+ def __init__(self, full_matrices: bool = True, compute_uv: bool = True):
545
+ self.full_matrices = bool(full_matrices)
546
+ self.compute_uv = bool(compute_uv)
547
547
 
548
548
  def make_node(self, x):
549
549
  x = as_tensor_variable(x)
@@ -584,7 +584,7 @@ class SVD(Op):
584
584
  return [s_shape]
585
585
 
586
586
 
587
- def svd(a, full_matrices=1, compute_uv=1):
587
+ def svd(a, full_matrices: bool = True, compute_uv: bool = True):
588
588
  """
589
589
  This function performs the SVD on CPU.
590
590
 
@@ -1,4 +1,5 @@
1
1
  import abc
2
+ import warnings
2
3
  from typing import List, Optional, Union
3
4
 
4
5
  import numpy as np
@@ -419,7 +420,7 @@ class LogNormalRV(RandomVariable):
419
420
  lognormal = LogNormalRV()
420
421
 
421
422
 
422
- class GammaRV(ScipyRandomVariable):
423
+ class GammaRV(RandomVariable):
423
424
  r"""A gamma continuous random variable.
424
425
 
425
426
  The probability density function for `gamma` in terms of the shape parameter
@@ -443,7 +444,7 @@ class GammaRV(ScipyRandomVariable):
443
444
  dtype = "floatX"
444
445
  _print_name = ("Gamma", "\\operatorname{Gamma}")
445
446
 
446
- def __call__(self, shape, rate, size=None, **kwargs):
447
+ def __call__(self, shape, scale, size=None, **kwargs):
447
448
  r"""Draw samples from a gamma distribution.
448
449
 
449
450
  Signature
@@ -455,8 +456,8 @@ class GammaRV(ScipyRandomVariable):
455
456
  ----------
456
457
  shape
457
458
  The shape :math:`\alpha` of the gamma distribution. Must be positive.
458
- rate
459
- The rate :math:`\beta` of the gamma distribution. Must be positive.
459
+ scale
460
+ The scale :math:`1/\beta` of the gamma distribution. Must be positive.
460
461
  size
461
462
  Sample shape. If the given size is, e.g. `(m, n, k)` then `m * n * k`
462
463
  independent, identically distributed random variables are
@@ -464,14 +465,26 @@ class GammaRV(ScipyRandomVariable):
464
465
  is returned.
465
466
 
466
467
  """
467
- return super().__call__(shape, 1.0 / rate, size=size, **kwargs)
468
+ return super().__call__(shape, scale, size=size, **kwargs)
468
469
 
469
- @classmethod
470
- def rng_fn_scipy(cls, rng, shape, scale, size):
471
- return stats.gamma.rvs(shape, scale=scale, size=size, random_state=rng)
472
470
 
471
+ _gamma = GammaRV()
472
+
473
+
474
+ def gamma(shape, rate=None, scale=None, **kwargs):
475
+ # TODO: Remove helper when rate is deprecated
476
+ if rate is not None and scale is not None:
477
+ raise ValueError("Cannot specify both rate and scale")
478
+ elif rate is None and scale is None:
479
+ raise ValueError("Must specify scale")
480
+ elif rate is not None:
481
+ warnings.warn(
482
+ "Gamma rate argument is deprecated and will stop working, use scale instead",
483
+ FutureWarning,
484
+ )
485
+ scale = 1.0 / rate
473
486
 
474
- gamma = GammaRV()
487
+ return _gamma(shape, scale, **kwargs)
475
488
 
476
489
 
477
490
  class ChiSquareRV(RandomVariable):
@@ -15,9 +15,9 @@ from pytensor.tensor.random.basic import (
15
15
  LogNormalRV,
16
16
  NegBinomialRV,
17
17
  WaldRV,
18
+ _gamma,
18
19
  beta,
19
20
  binomial,
20
- gamma,
21
21
  normal,
22
22
  poisson,
23
23
  uniform,
@@ -92,7 +92,7 @@ def geometric_from_uniform(fgraph, node):
92
92
  @node_rewriter([NegBinomialRV])
93
93
  def negative_binomial_from_gamma_poisson(fgraph, node):
94
94
  rng, *other_inputs, n, p = node.inputs
95
- next_rng, g = gamma.make_node(rng, *other_inputs, n, p / (1 - p)).outputs
95
+ next_rng, g = _gamma.make_node(rng, *other_inputs, n, (1 - p) / p).outputs
96
96
  next_rng, p = poisson.make_node(next_rng, *other_inputs, g).outputs
97
97
  return [next_rng, p]
98
98
 
@@ -100,21 +100,21 @@ def negative_binomial_from_gamma_poisson(fgraph, node):
100
100
  @node_rewriter([InvGammaRV])
101
101
  def inverse_gamma_from_gamma(fgraph, node):
102
102
  *other_inputs, shape, scale = node.inputs
103
- next_rng, g = gamma.make_node(*other_inputs, shape, scale).outputs
103
+ next_rng, g = _gamma.make_node(*other_inputs, shape, 1 / scale).outputs
104
104
  return [next_rng, reciprocal(g)]
105
105
 
106
106
 
107
107
  @node_rewriter([ChiSquareRV])
108
108
  def chi_square_from_gamma(fgraph, node):
109
109
  *other_inputs, df = node.inputs
110
- next_rng, g = gamma.make_node(*other_inputs, df / 2, 1 / 2).outputs
110
+ next_rng, g = _gamma.make_node(*other_inputs, df / 2, 2).outputs
111
111
  return [next_rng, g]
112
112
 
113
113
 
114
114
  @node_rewriter([GenGammaRV])
115
115
  def generalized_gamma_from_gamma(fgraph, node):
116
116
  *other_inputs, alpha, p, lambd = node.inputs
117
- next_rng, g = gamma.make_node(*other_inputs, alpha / p, ones_like(lambd)).outputs
117
+ next_rng, g = _gamma.make_node(*other_inputs, alpha / p, ones_like(lambd)).outputs
118
118
  g = (g ** reciprocal(p)) * lambd
119
119
  return [next_rng, cast(g, dtype=node.default_output().dtype)]
120
120
 
@@ -6,7 +6,7 @@ from pytensor.tensor.basic import TensorVariable, diagonal, swapaxes
6
6
  from pytensor.tensor.blas import Dot22
7
7
  from pytensor.tensor.blockwise import Blockwise
8
8
  from pytensor.tensor.elemwise import DimShuffle
9
- from pytensor.tensor.math import Dot, Prod, log, prod
9
+ from pytensor.tensor.math import Dot, Prod, _matrix_matrix_matmul, log, prod
10
10
  from pytensor.tensor.nlinalg import MatrixInverse, det
11
11
  from pytensor.tensor.rewriting.basic import (
12
12
  register_canonicalize,
@@ -168,13 +168,25 @@ def cholesky_ldotlt(fgraph, node):
168
168
  rewrite cholesky(dot(L, L.T), lower=True) = L, where L is lower triangular,
169
169
  or cholesky(dot(U.T, U), upper=True) = U where U is upper triangular.
170
170
 
171
+ Also works with matmul.
172
+
171
173
  This utilizes a boolean `lower_triangular` or `upper_triangular` tag on matrices.
172
174
  """
173
175
  if not isinstance(node.op.core_op, Cholesky):
174
176
  return
175
177
 
176
178
  A = node.inputs[0]
177
- if not (A.owner and isinstance(A.owner.op, (Dot, Dot22))):
179
+ if not (
180
+ A.owner is not None
181
+ and (
182
+ (
183
+ isinstance(A.owner.op, (Dot, Dot22))
184
+ # This rewrite only applies to matrix Dot
185
+ and A.owner.inputs[0].type.ndim == 2
186
+ )
187
+ or (A.owner.op == _matrix_matrix_matmul)
188
+ )
189
+ ):
178
190
  return
179
191
 
180
192
  l, r = A.owner.inputs
@@ -2081,63 +2081,65 @@ def local_pow_to_nested_squaring(fgraph, node):
2081
2081
  Note: This sounds like the kind of thing any half-decent compiler can do by itself?
2082
2082
  """
2083
2083
 
2084
- if node.op == at_pow:
2085
- # the idea here is that we have pow(x, y)
2086
- odtype = node.outputs[0].dtype
2087
- xsym = node.inputs[0]
2088
- ysym = node.inputs[1]
2089
- y = get_constant(ysym)
2090
-
2091
- # the next line is needed to fix a strange case that I don't
2092
- # know how to make a separate test.
2093
- # That happen in the `test_log_erfc` test.
2094
- # y is a ndarray with dtype int8 and value 2,4 or 6. This make
2095
- # the abs(y) <= 512 fail!
2096
- # taking the value outside ndarray solve the problem.
2097
- # it could be that in that case, numpy make the comparison
2098
- # into the wrong type(do in int8 that overflow.)
2099
- if isinstance(y, np.ndarray):
2100
- assert y.size == 1
2101
- try:
2102
- y = y[0]
2103
- except IndexError:
2104
- pass
2105
- if (y is not None) and not broadcasted_by(xsym, ysym):
2106
- rval = None
2107
- # 512 is too small for the cpu and too big for some gpu!
2108
- if abs(y) == int(abs(y)) and abs(y) <= 512:
2109
- pow2 = [xsym]
2110
- pow2_scal = [aes.get_scalar_type(xsym.dtype)()]
2111
- y_to_do = abs(y)
2112
- for i in range(int(np.log2(y_to_do))):
2113
- pow2.append(sqr(pow2[i]))
2114
- pow2_scal.append(aes.sqr(pow2_scal[i]))
2115
- rval1 = None
2116
- rval1_scal = None
2117
- while y_to_do > 0:
2118
- log_to_do = int(np.log2(y_to_do))
2119
- if rval1:
2120
- rval1 *= pow2[log_to_do]
2121
- rval1_scal *= pow2_scal[log_to_do]
2122
- else:
2123
- rval1 = pow2[log_to_do]
2124
- rval1_scal = pow2_scal[log_to_do]
2125
- y_to_do -= 2**log_to_do
2126
-
2127
- if abs(y) > 2:
2128
- # We fuse all the pow together here to make
2129
- # compilation faster
2130
- rval1 = Elemwise(
2131
- aes.Composite([pow2_scal[0]], [rval1_scal])
2132
- ).make_node(xsym)
2133
- if y < 0:
2134
- rval = [reciprocal(rval1)]
2084
+ # the idea here is that we have pow(x, y)
2085
+ odtype = node.outputs[0].dtype
2086
+ xsym = node.inputs[0]
2087
+ ysym = node.inputs[1]
2088
+ y = get_constant(ysym)
2089
+
2090
+ # the next line is needed to fix a strange case that I don't
2091
+ # know how to make a separate test.
2092
+ # That happen in the `test_log_erfc` test.
2093
+ # y is a ndarray with dtype int8 and value 2,4 or 6. This make
2094
+ # the abs(y) <= 512 fail!
2095
+ # taking the value outside ndarray solve the problem.
2096
+ # it could be that in that case, numpy make the comparison
2097
+ # into the wrong type(do in int8 that overflow.)
2098
+ if isinstance(y, np.ndarray):
2099
+ assert y.size == 1
2100
+ try:
2101
+ y = y[0]
2102
+ except IndexError:
2103
+ pass
2104
+ if (y is not None) and not broadcasted_by(xsym, ysym):
2105
+ rval = None
2106
+ # 512 is too small for the cpu and too big for some gpu!
2107
+ if abs(y) == int(abs(y)) and abs(y) <= 512:
2108
+ pow2 = [xsym]
2109
+ pow2_scal = [aes.get_scalar_type(xsym.dtype)()]
2110
+ y_to_do = abs(y)
2111
+ for i in range(int(np.log2(y_to_do))):
2112
+ pow2.append(sqr(pow2[i]))
2113
+ pow2_scal.append(aes.sqr(pow2_scal[i]))
2114
+ rval1 = None
2115
+ rval1_scal = None
2116
+ while y_to_do > 0:
2117
+ log_to_do = int(np.log2(y_to_do))
2118
+ if rval1:
2119
+ rval1 *= pow2[log_to_do]
2120
+ rval1_scal *= pow2_scal[log_to_do]
2135
2121
  else:
2136
- rval = [rval1]
2137
- if rval:
2138
- rval[0] = cast(rval[0], odtype)
2139
- assert rval[0].type == node.outputs[0].type, (rval, node.outputs)
2140
- return rval
2122
+ rval1 = pow2[log_to_do]
2123
+ rval1_scal = pow2_scal[log_to_do]
2124
+ y_to_do -= 2**log_to_do
2125
+
2126
+ if abs(y) > 2:
2127
+ # We fuse all the pow together here to make
2128
+ # compilation faster
2129
+ rval1 = Elemwise(aes.Composite([pow2_scal[0]], [rval1_scal])).make_node(
2130
+ xsym
2131
+ )
2132
+ if y < 0:
2133
+ rval = [reciprocal(rval1)]
2134
+ else:
2135
+ rval = [rval1]
2136
+ if rval:
2137
+ rval[0] = cast(rval[0], odtype)
2138
+ # TODO: We can add a specify_broadcastable and/or unbroadcast to make the
2139
+ # output types compatible. Or work on #408 and let TensorType.filter_variable do it.
2140
+ if rval[0].type.broadcastable != node.outputs[0].type.broadcastable:
2141
+ return None
2142
+ return rval
2141
2143
 
2142
2144
 
2143
2145
  @register_specialize
@@ -652,7 +652,7 @@ class _tensor_py_operators:
652
652
  return at.math.matmul(left, right)
653
653
 
654
654
  def __rmatmul__(right, left):
655
- return at.math.matmul(right, left)
655
+ return at.math.matmul(left, right)
656
656
 
657
657
  def sum(self, axis=None, dtype=None, keepdims=False, acc_dtype=None):
658
658
  """See :func:`pytensor.tensor.math.sum`."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytensor
3
- Version: 2.16.3
3
+ Version: 2.17.1
4
4
  Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
5
5
  Author-email: pymc-devs <pymc.devs@gmail.com>
6
6
  License: .. _license:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes