pytensor 2.30.2__tar.gz → 2.31.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. {pytensor-2.30.2/pytensor.egg-info → pytensor-2.31.0}/PKG-INFO +2 -47
  2. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/extending_pytensor_solution_1.py +3 -3
  3. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index.ipynb +1 -1
  4. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index.rst +1 -1
  5. {pytensor-2.30.2 → pytensor-2.31.0}/doc/optimizations.rst +1 -1
  6. {pytensor-2.30.2 → pytensor-2.31.0}/pyproject.toml +3 -3
  7. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/_version.py +3 -3
  8. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/builders.py +2 -3
  9. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/function/types.py +4 -2
  10. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/monitormode.py +1 -4
  11. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/nanguardmode.py +1 -1
  12. pytensor-2.31.0/pytensor/d3viz/html/template.html +101 -0
  13. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/op.py +27 -14
  14. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/ifelse.py +4 -4
  15. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/basic.py +6 -6
  16. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/basic.py +6 -10
  17. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/c_code/lazylinker_c.c +3 -3
  18. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/cmodule.py +143 -134
  19. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/lazylinker_c.py +1 -1
  20. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/op.py +12 -6
  21. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/signal/conv.py +3 -3
  22. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/slinalg.py +46 -0
  23. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/subtensor.py +3 -0
  24. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/linker.py +3 -3
  25. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/basic.py +66 -3
  26. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/cython_support.py +1 -4
  27. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/extra_ops.py +1 -1
  28. pytensor-2.31.0/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +206 -0
  29. pytensor-2.31.0/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +86 -0
  30. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/general.py +2 -112
  31. pytensor-2.31.0/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +132 -0
  32. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/random.py +9 -0
  33. pytensor-2.31.0/pytensor/link/numba/dispatch/signal/conv.py +70 -0
  34. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/slinalg.py +101 -1
  35. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/subtensor.py +9 -9
  36. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/tensor_basic.py +1 -4
  37. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/vectorize_codegen.py +1 -1
  38. pytensor-2.31.0/pytensor/link/numba/linker.py +19 -0
  39. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/subtensor.py +4 -0
  40. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/utils.py +2 -2
  41. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/basic.py +28 -38
  42. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/loop.py +38 -42
  43. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/basic.py +208 -149
  44. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas.py +2 -24
  45. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas_c.py +29 -19
  46. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blockwise.py +160 -93
  47. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/elemwise.py +5 -26
  48. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/basic.py +14 -19
  49. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/jax.py +1 -1
  50. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/type.py +9 -8
  51. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/utils.py +8 -8
  52. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/__init__.py +2 -0
  53. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blockwise.py +31 -3
  54. pytensor-2.31.0/pytensor/tensor/rewriting/conv.py +78 -0
  55. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/elemwise.py +2 -14
  56. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/subtensor.py +36 -401
  57. pytensor-2.31.0/pytensor/tensor/rewriting/subtensor_lift.py +850 -0
  58. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/shape.py +2 -4
  59. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/signal/conv.py +5 -4
  60. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/slinalg.py +420 -2
  61. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/special.py +1 -1
  62. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/subtensor.py +207 -36
  63. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/type.py +16 -7
  64. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/utils.py +23 -0
  65. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/utils.py +9 -25
  66. {pytensor-2.30.2 → pytensor-2.31.0/pytensor.egg-info}/PKG-INFO +2 -47
  67. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/SOURCES.txt +6 -0
  68. pytensor-2.30.2/pytensor/link/numba/dispatch/signal/conv.py +0 -16
  69. pytensor-2.30.2/pytensor/link/numba/linker.py +0 -37
  70. {pytensor-2.30.2 → pytensor-2.31.0}/LICENSE.txt +0 -0
  71. {pytensor-2.30.2 → pytensor-2.31.0}/MANIFEST.in +0 -0
  72. {pytensor-2.30.2 → pytensor-2.31.0}/README.rst +0 -0
  73. {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/PLACEHOLDER +0 -0
  74. {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/layout.html +0 -0
  75. {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/nb-badges.html +0 -0
  76. {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/rendered_citation.html +0 -0
  77. {pytensor-2.30.2 → pytensor-2.31.0}/doc/LICENSE.txt +0 -0
  78. {pytensor-2.30.2 → pytensor-2.31.0}/doc/README.md +0 -0
  79. {pytensor-2.30.2 → pytensor-2.31.0}/doc/acknowledgement.rst +0 -0
  80. {pytensor-2.30.2 → pytensor-2.31.0}/doc/bcast.png +0 -0
  81. {pytensor-2.30.2 → pytensor-2.31.0}/doc/bcast.svg +0 -0
  82. {pytensor-2.30.2 → pytensor-2.31.0}/doc/blog.md +0 -0
  83. {pytensor-2.30.2 → pytensor-2.31.0}/doc/conf.py +0 -0
  84. {pytensor-2.30.2 → pytensor-2.31.0}/doc/core_development_guide.rst +0 -0
  85. {pytensor-2.30.2 → pytensor-2.31.0}/doc/css.inc +0 -0
  86. {pytensor-2.30.2 → pytensor-2.31.0}/doc/dev_start_guide.rst +0 -0
  87. {pytensor-2.30.2 → pytensor-2.31.0}/doc/environment.yml +0 -0
  88. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/apply.png +0 -0
  89. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/apply.svg +0 -0
  90. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/apply2.svg +0 -0
  91. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/creating_a_c_op.rst +0 -0
  92. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  93. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/creating_an_op.rst +0 -0
  94. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/ctype.rst +0 -0
  95. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/extending_faq.rst +0 -0
  96. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/graph_rewriting.rst +0 -0
  97. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/graphstructures.rst +0 -0
  98. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/index.rst +0 -0
  99. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/inplace.rst +0 -0
  100. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/op.rst +0 -0
  101. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/other_ops.rst +0 -0
  102. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  103. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  104. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/pipeline.rst +0 -0
  105. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/scan.rst +0 -0
  106. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/tips.rst +0 -0
  107. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/type.rst +0 -0
  108. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/unittest.rst +0 -0
  109. {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/using_params.rst +0 -0
  110. {pytensor-2.30.2 → pytensor-2.31.0}/doc/faq.rst +0 -0
  111. {pytensor-2.30.2 → pytensor-2.31.0}/doc/gallery/page_footer.md +0 -0
  112. {pytensor-2.30.2 → pytensor-2.31.0}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  113. {pytensor-2.30.2 → pytensor-2.31.0}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  114. {pytensor-2.30.2 → pytensor-2.31.0}/doc/generate_dtype_tensor_table.py +0 -0
  115. {pytensor-2.30.2 → pytensor-2.31.0}/doc/glossary.rst +0 -0
  116. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/Elman_srnn.png +0 -0
  117. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/PyTensor.png +0 -0
  118. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/PyTensor_RGB.svg +0 -0
  119. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/PyTensor_logo.png +0 -0
  120. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/binder.svg +0 -0
  121. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/blocksparse.png +0 -0
  122. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/colab.svg +0 -0
  123. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/github.svg +0 -0
  124. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/lstm.png +0 -0
  125. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/lstm_memorycell.png +0 -0
  126. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/talk2010.gif +0 -0
  127. {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/talk2010.png +0 -0
  128. {pytensor-2.30.2 → pytensor-2.31.0}/doc/index.rst +0 -0
  129. {pytensor-2.30.2 → pytensor-2.31.0}/doc/install.rst +0 -0
  130. {pytensor-2.30.2 → pytensor-2.31.0}/doc/internal/how_to_release.rst +0 -0
  131. {pytensor-2.30.2 → pytensor-2.31.0}/doc/internal/index.rst +0 -0
  132. {pytensor-2.30.2 → pytensor-2.31.0}/doc/internal/metadocumentation.rst +0 -0
  133. {pytensor-2.30.2 → pytensor-2.31.0}/doc/introduction.rst +0 -0
  134. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/debugmode.rst +0 -0
  135. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/function.rst +0 -0
  136. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/index.rst +0 -0
  137. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/io.rst +0 -0
  138. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/mode.rst +0 -0
  139. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/nanguardmode.rst +0 -0
  140. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/opfromgraph.rst +0 -0
  141. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/ops.rst +0 -0
  142. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/profilemode.rst +0 -0
  143. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/shared.rst +0 -0
  144. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/config.rst +0 -0
  145. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  146. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  147. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  148. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  149. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  150. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  151. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  152. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp.html +0 -0
  153. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp.png +0 -0
  154. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp2.html +0 -0
  155. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  156. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp2.png +0 -0
  157. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/ofg.html +0 -0
  158. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/ofg2.html +0 -0
  159. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  160. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  161. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  162. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  163. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/features.rst +0 -0
  164. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/fgraph.rst +0 -0
  165. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/graph.rst +0 -0
  166. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/index.rst +0 -0
  167. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/op.rst +0 -0
  168. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/replace.rst +0 -0
  169. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/type.rst +0 -0
  170. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/utils.rst +0 -0
  171. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/index.rst +0 -0
  172. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/misc/pkl_utils.rst +0 -0
  173. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/printing.rst +0 -0
  174. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/scalar/index.rst +0 -0
  175. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/scan.rst +0 -0
  176. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/sparse/index.rst +0 -0
  177. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/sparse/sandbox.rst +0 -0
  178. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/basic.rst +0 -0
  179. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/basic_opt.rst +0 -0
  180. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/bcast.png +0 -0
  181. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/bcast.svg +0 -0
  182. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/conv.rst +0 -0
  183. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/elemwise.rst +0 -0
  184. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/extra_ops.rst +0 -0
  185. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/fft.rst +0 -0
  186. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/functional.rst +0 -0
  187. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/index.rst +0 -0
  188. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/io.rst +0 -0
  189. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/math_opt.rst +0 -0
  190. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/nlinalg.rst +0 -0
  191. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/plot_fft.png +0 -0
  192. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/random/distributions.rst +0 -0
  193. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/random/index.rst +0 -0
  194. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/slinalg.rst +0 -0
  195. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/utils.rst +0 -0
  196. {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/typed_list.rst +0 -0
  197. {pytensor-2.30.2 → pytensor-2.31.0}/doc/links.rst +0 -0
  198. {pytensor-2.30.2 → pytensor-2.31.0}/doc/pylintrc +0 -0
  199. {pytensor-2.30.2 → pytensor-2.31.0}/doc/robots.txt +0 -0
  200. {pytensor-2.30.2 → pytensor-2.31.0}/doc/troubleshooting.rst +0 -0
  201. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/adding.rst +0 -0
  202. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/adding_solution_1.py +0 -0
  203. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/aliasing.rst +0 -0
  204. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/apply.png +0 -0
  205. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/apply.svg +0 -0
  206. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/bcast.png +0 -0
  207. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/broadcasting.rst +0 -0
  208. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/conditions.rst +0 -0
  209. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/debug_faq.rst +0 -0
  210. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/dlogistic.png +0 -0
  211. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/examples.rst +0 -0
  212. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/faq_tutorial.rst +0 -0
  213. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/gradients.rst +0 -0
  214. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/index.rst +0 -0
  215. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/loading_and_saving.rst +0 -0
  216. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/logistic.gp +0 -0
  217. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/logistic.png +0 -0
  218. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/loop.rst +0 -0
  219. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/loop_solution_1.py +0 -0
  220. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/modes.rst +0 -0
  221. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/modes_solution_1.py +0 -0
  222. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/multi_cores.rst +0 -0
  223. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/nan_tutorial.rst +0 -0
  224. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/d3viz.png +0 -0
  225. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  226. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  227. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  228. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/printing_drawing.rst +0 -0
  229. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/prng.rst +0 -0
  230. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/profiling.rst +0 -0
  231. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/profiling_example.py +0 -0
  232. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/profiling_example_out.prof +0 -0
  233. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/shape_info.rst +0 -0
  234. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/sparse.rst +0 -0
  235. {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/symbolic_graphs.rst +0 -0
  236. {pytensor-2.30.2 → pytensor-2.31.0}/doc/user_guide.rst +0 -0
  237. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/__init__.py +0 -0
  238. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/bin/__init__.py +0 -0
  239. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/bin/pytensor_cache.py +0 -0
  240. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/breakpoint.py +0 -0
  241. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/__init__.py +0 -0
  242. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/compiledir.py +0 -0
  243. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/compilelock.py +0 -0
  244. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/debugmode.py +0 -0
  245. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/function/__init__.py +0 -0
  246. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/function/pfunc.py +0 -0
  247. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/io.py +0 -0
  248. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/mode.py +0 -0
  249. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/ops.py +0 -0
  250. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/profiling.py +0 -0
  251. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/sharedvalue.py +0 -0
  252. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/configdefaults.py +0 -0
  253. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/configparser.py +0 -0
  254. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/__init__.py +0 -0
  255. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  256. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/css/d3viz.css +0 -0
  257. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/d3viz.py +0 -0
  258. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/formatting.py +0 -0
  259. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  260. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  261. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/d3viz.js +0 -0
  262. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  263. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  264. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/gradient.py +0 -0
  265. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/__init__.py +0 -0
  266. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/basic.py +0 -0
  267. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/destroyhandler.py +0 -0
  268. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/features.py +0 -0
  269. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/fg.py +0 -0
  270. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/null_type.py +0 -0
  271. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/replace.py +0 -0
  272. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/__init__.py +0 -0
  273. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/basic.py +0 -0
  274. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/db.py +0 -0
  275. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/kanren.py +0 -0
  276. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/unify.py +0 -0
  277. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/utils.py +0 -0
  278. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/type.py +0 -0
  279. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/utils.py +0 -0
  280. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/__init__.py +0 -0
  281. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/__init__.py +0 -0
  282. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  283. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/cutils.py +0 -0
  284. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/cvm.py +0 -0
  285. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/exceptions.py +0 -0
  286. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/interface.py +0 -0
  287. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/params_type.py +0 -0
  288. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/type.py +0 -0
  289. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/__init__.py +0 -0
  290. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/__init__.py +0 -0
  291. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/basic.py +0 -0
  292. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/blas.py +0 -0
  293. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  294. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/einsum.py +0 -0
  295. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  296. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  297. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/math.py +0 -0
  298. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
  299. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/pad.py +0 -0
  300. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/random.py +0 -0
  301. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/scalar.py +0 -0
  302. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/scan.py +0 -0
  303. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/shape.py +0 -0
  304. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  305. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/sort.py +0 -0
  306. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/sparse.py +0 -0
  307. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  308. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/__init__.py +0 -0
  309. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/__init__.py +0 -0
  310. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  311. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  312. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
  313. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  314. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  315. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  316. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
  317. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
  318. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
  319. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
  320. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
  321. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
  322. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
  323. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
  324. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  325. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  326. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/scalar.py +0 -0
  327. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/scan.py +0 -0
  328. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  329. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/sparse.py +0 -0
  330. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  331. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  332. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  333. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  334. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  335. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  336. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/math.py +0 -0
  337. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
  338. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  339. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  340. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  341. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/linker.py +0 -0
  342. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/vm.py +0 -0
  343. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/__init__.py +0 -0
  344. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/check_blas.py +0 -0
  345. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/check_blas_many.sh +0 -0
  346. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/check_duplicate_key.py +0 -0
  347. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  348. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/elemwise_time_test.py +0 -0
  349. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/frozendict.py +0 -0
  350. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/may_share_memory.py +0 -0
  351. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/ordered_set.py +0 -0
  352. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/pkl_utils.py +0 -0
  353. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/npy_2_compat.py +0 -0
  354. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/printing.py +0 -0
  355. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/py.typed +0 -0
  356. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/raise_op.py +0 -0
  357. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/__init__.py +0 -0
  358. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  359. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  360. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/gamma.c +0 -0
  361. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/incbet.c +0 -0
  362. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/math.py +0 -0
  363. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/sharedvar.py +0 -0
  364. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/__init__.py +0 -0
  365. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/basic.py +0 -0
  366. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/checkpoints.py +0 -0
  367. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/op.py +0 -0
  368. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/rewriting.py +0 -0
  369. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/scan_perform.pyx +0 -0
  370. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/scan_perform_ext.py +0 -0
  371. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/utils.py +0 -0
  372. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/views.py +0 -0
  373. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/__init__.py +0 -0
  374. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/basic.py +0 -0
  375. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/rewriting.py +0 -0
  376. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sandbox/__init__.py +0 -0
  377. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sandbox/sp.py +0 -0
  378. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sandbox/sp2.py +0 -0
  379. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sharedvar.py +0 -0
  380. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/type.py +0 -0
  381. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/utils.py +0 -0
  382. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/__init__.py +0 -0
  383. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas_headers.py +0 -0
  384. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas_scipy.py +0 -0
  385. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  386. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  387. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  388. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/conv/__init__.py +0 -0
  389. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/conv/abstract_conv.py +0 -0
  390. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/einsum.py +0 -0
  391. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/elemwise_cgen.py +0 -0
  392. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/exceptions.py +0 -0
  393. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/extra_ops.py +0 -0
  394. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/fft.py +0 -0
  395. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/fourier.py +0 -0
  396. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/functional.py +0 -0
  397. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/inplace.py +0 -0
  398. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/interpolate.py +0 -0
  399. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/io.py +0 -0
  400. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/linalg.py +0 -0
  401. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/math.py +0 -0
  402. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/nlinalg.py +0 -0
  403. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/pad.py +0 -0
  404. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/__init__.py +0 -0
  405. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/op.py +0 -0
  406. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  407. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/basic.py +0 -0
  408. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/numba.py +0 -0
  409. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/var.py +0 -0
  410. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/basic.py +0 -0
  411. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blas.py +0 -0
  412. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blas_c.py +0 -0
  413. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
  414. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/einsum.py +0 -0
  415. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  416. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/jax.py +0 -0
  417. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/linalg.py +0 -0
  418. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/math.py +0 -0
  419. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/numba.py +0 -0
  420. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/ofg.py +0 -0
  421. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/shape.py +0 -0
  422. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/special.py +0 -0
  423. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  424. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/sharedvar.py +0 -0
  425. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/signal/__init__.py +0 -0
  426. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/sort.py +0 -0
  427. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/type_other.py +0 -0
  428. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/var.py +0 -0
  429. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/variable.py +0 -0
  430. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/xlogx.py +0 -0
  431. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/__init__.py +0 -0
  432. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/basic.py +0 -0
  433. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/rewriting.py +0 -0
  434. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/type.py +0 -0
  435. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/updates.py +0 -0
  436. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/dependency_links.txt +0 -0
  437. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/entry_points.txt +0 -0
  438. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/requires.txt +0 -0
  439. {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/top_level.txt +0 -0
  440. {pytensor-2.30.2 → pytensor-2.31.0}/scripts/mypy-failing.txt +0 -0
  441. {pytensor-2.30.2 → pytensor-2.31.0}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  442. {pytensor-2.30.2 → pytensor-2.31.0}/setup.cfg +0 -0
  443. {pytensor-2.30.2 → pytensor-2.31.0}/setup.py +0 -0
  444. {pytensor-2.30.2 → pytensor-2.31.0}/tests/link/c/c_code/test_cenum.h +0 -0
  445. {pytensor-2.30.2 → pytensor-2.31.0}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  446. {pytensor-2.30.2 → pytensor-2.31.0}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
  447. {pytensor-2.30.2 → pytensor-2.31.0}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
  448. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_breakpoint.py +0 -0
  449. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_config.py +0 -0
  450. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_gradient.py +0 -0
  451. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_ifelse.py +0 -0
  452. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_printing.py +0 -0
  453. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_raise_op.py +0 -0
  454. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_rop.py +0 -0
  455. {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_updates.py +0 -0
@@ -1,53 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 2.30.2
3
+ Version: 2.31.0
4
4
  Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
5
5
  Author-email: pymc-devs <pymc.devs@gmail.com>
6
- License: .. _license:
7
-
8
- LICENSE
9
- =======
10
-
11
- Copyright (c) 2008-2019, Theano Development Team
12
- Copyright (c) 2020-2021, PyMC Development team
13
- Copyright (c) 2021-2022, Aesara Development Team
14
- Copyright (c) 2022, PyMC Development team
15
- All rights reserved.
16
-
17
- Contains code from NumPy, Copyright (c) 2005-2016, NumPy Developers.
18
- Contains code from Aesara, Copyright (c) 2021-2022, Aesara Developers.
19
- All rights reserved.
20
-
21
- theano/scan/*.py[c]: Razvan Pascanu, Frederic Bastien, James Bergstra, Pascal Lamblin, Arnaud Bergeron, PyMC Developers, PyTensor Developers, (c) 2010, Universite de Montreal
22
- theano/tensor/sharedvar.py: James Bergstra, (c) 2010, Universite de Montreal, 3-clause BSD License
23
- theano/gradient.py: James Bergstra, Razvan Pascanu, Arnaud Bergeron, Ian Goodfellow, PyMC Developers, PyTensor Developers, (c) 2011, Universite de Montreal, 3-clause BSD License
24
- theano/compile/monitormode.py: this code was initially copied from the 'pyutools' package by its original author, and re-licensed under Theano's license.
25
-
26
- Contains frozendict code from slezica’s python-frozendict(https://github.com/slezica/python-frozendict/blob/master/frozendict/__init__.py), Copyright (c) 2012 Santiago Lezica. All rights reserved.
27
-
28
- Redistribution and use in source and binary forms, with or without
29
- modification, are permitted provided that the following conditions are met:
30
-
31
- * Redistributions of source code must retain the above copyright
32
- notice, this list of conditions and the following disclaimer.
33
- * Redistributions in binary form must reproduce the above copyright
34
- notice, this list of conditions and the following disclaimer in the
35
- documentation and/or other materials provided with the distribution.
36
- * Neither the name of PyTensor, Theano, nor the names of its contributors may be
37
- used to endorse or promote products derived from this software without
38
- specific prior written permission.
39
-
40
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
41
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
42
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
43
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
44
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
45
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
48
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
49
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50
-
6
+ License-Expression: BSD-3-Clause
51
7
  Project-URL: homepage, https://github.com/pymc-devs/pytensor
52
8
  Project-URL: repository, https://github.com/pymc-devs/pytensor
53
9
  Project-URL: documentation, https://pytensor.readthedocs.io/en/latest/
@@ -56,7 +12,6 @@ Classifier: Development Status :: 6 - Mature
56
12
  Classifier: Intended Audience :: Education
57
13
  Classifier: Intended Audience :: Science/Research
58
14
  Classifier: Intended Audience :: Developers
59
- Classifier: License :: OSI Approved :: BSD License
60
15
  Classifier: Programming Language :: Python
61
16
  Classifier: Topic :: Software Development :: Code Generators
62
17
  Classifier: Topic :: Software Development :: Compilers
@@ -118,7 +118,7 @@ class TestSumDiffOp(utt.InferShapeTester):
118
118
  self.op_class = SumDiffOp
119
119
 
120
120
  def test_perform(self):
121
- rng = np.random.RandomState(43)
121
+ rng = np.random.default_rng(43)
122
122
  x = matrix()
123
123
  y = matrix()
124
124
  f = pytensor.function([x, y], self.op_class()(x, y))
@@ -128,7 +128,7 @@ class TestSumDiffOp(utt.InferShapeTester):
128
128
  assert np.allclose([x_val + y_val, x_val - y_val], out)
129
129
 
130
130
  def test_gradient(self):
131
- rng = np.random.RandomState(43)
131
+ rng = np.random.default_rng(43)
132
132
 
133
133
  def output_0(x, y):
134
134
  return self.op_class()(x, y)[0]
@@ -150,7 +150,7 @@ class TestSumDiffOp(utt.InferShapeTester):
150
150
  )
151
151
 
152
152
  def test_infer_shape(self):
153
- rng = np.random.RandomState(43)
153
+ rng = np.random.default_rng(43)
154
154
 
155
155
  x = dmatrix()
156
156
  y = dmatrix()
@@ -95,7 +95,7 @@
95
95
  "noutputs = 10\n",
96
96
  "nhiddens = 50\n",
97
97
  "\n",
98
- "rng = np.random.RandomState(0)\n",
98
+ "rng = np.random.default_rng(0)\n",
99
99
  "x = pt.dmatrix('x')\n",
100
100
  "wh = pytensor.shared(rng.normal(0, 1, (nfeatures, nhiddens)), borrow=True)\n",
101
101
  "bh = pytensor.shared(np.zeros(nhiddens), borrow=True)\n",
@@ -58,7 +58,7 @@ hidden layer and a softmax output layer.
58
58
  noutputs = 10
59
59
  nhiddens = 50
60
60
 
61
- rng = np.random.RandomState(0)
61
+ rng = np.random.default_rng(0)
62
62
  x = pt.dmatrix('x')
63
63
  wh = pytensor.shared(rng.normal(0, 1, (nfeatures, nhiddens)), borrow=True)
64
64
  bh = pytensor.shared(np.zeros(nhiddens), borrow=True)
@@ -239,7 +239,7 @@ Optimization o4 o3 o2
239
239
  See :func:`insert_inplace_optimizer`
240
240
 
241
241
  inplace_random
242
- Typically when a graph uses random numbers, the RandomState is stored
242
+ Typically when a graph uses random numbers, the random Generator is stored
243
243
  in a shared variable, used once per call and, updated after each function
244
244
  call. In this common case, it makes sense to update the random number generator in-place.
245
245
 
@@ -14,13 +14,13 @@ requires-python = ">=3.10,<3.14"
14
14
  authors = [{ name = "pymc-devs", email = "pymc.devs@gmail.com" }]
15
15
  description = "Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs."
16
16
  readme = "README.rst"
17
- license = { file = "LICENSE.txt" }
17
+ license = "BSD-3-Clause"
18
+ license-files = ["LICENSE.txt"]
18
19
  classifiers = [
19
20
  "Development Status :: 6 - Mature",
20
21
  "Intended Audience :: Education",
21
22
  "Intended Audience :: Science/Research",
22
23
  "Intended Audience :: Developers",
23
- "License :: OSI Approved :: BSD License",
24
24
  "Programming Language :: Python",
25
25
  "Topic :: Software Development :: Code Generators",
26
26
  "Topic :: Software Development :: Compilers",
@@ -130,7 +130,7 @@ exclude = ["doc/", "pytensor/_version.py"]
130
130
  docstring-code-format = true
131
131
 
132
132
  [tool.ruff.lint]
133
- select = ["B905", "C", "E", "F", "I", "UP", "W", "RUF", "PERF", "PTH", "ISC", "T20", "NPY201"]
133
+ select = ["C", "E", "F", "I", "UP", "W", "RUF", "PERF", "PTH", "ISC", "T20", "NPY201"]
134
134
  ignore = ["C408", "C901", "E501", "E741", "RUF012", "PERF203", "ISC001"]
135
135
  unfixable = [
136
136
  # zip-strict: the auto-fix adds `strict=False` but we might want `strict=True` instead
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-04-01T22:32:44+0200",
11
+ "date": "2025-05-19T16:51:53+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "0f5da80c16d5d053f39204d1a728e70e194bef6c",
15
- "version": "2.30.2"
14
+ "full-revisionid": "5ffe17ad7e1d2bc0841b69d0b57cfc9e142771c6",
15
+ "version": "2.31.0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -873,7 +873,6 @@ class OpFromGraph(Op, HasInnerGraph):
873
873
 
874
874
  def perform(self, node, inputs, outputs):
875
875
  variables = self.fn(*inputs)
876
- assert len(variables) == len(outputs)
877
- # strict=False because asserted above
878
- for output, variable in zip(outputs, variables, strict=False):
876
+ # zip strict not specified because we are in a hot loop
877
+ for output, variable in zip(outputs, variables):
879
878
  output[0] = variable
@@ -924,7 +924,8 @@ class Function:
924
924
 
925
925
  # Reinitialize each container's 'provided' counter
926
926
  if trust_input:
927
- for arg_container, arg in zip(input_storage, args, strict=False):
927
+ # zip strict not specified because we are in a hot loop
928
+ for arg_container, arg in zip(input_storage, args):
928
929
  arg_container.storage[0] = arg
929
930
  else:
930
931
  for arg_container in input_storage:
@@ -934,7 +935,8 @@ class Function:
934
935
  raise TypeError("Too many parameter passed to pytensor function")
935
936
 
936
937
  # Set positional arguments
937
- for arg_container, arg in zip(input_storage, args, strict=False):
938
+ # zip strict not specified because we are in a hot loop
939
+ for arg_container, arg in zip(input_storage, args):
938
940
  # See discussion about None as input
939
941
  # https://groups.google.com/group/theano-dev/browse_thread/thread/920a5e904e8a8525/4f1b311a28fc27e5
940
942
  if arg is None:
@@ -104,10 +104,7 @@ def detect_nan(fgraph, i, node, fn):
104
104
  from pytensor.printing import debugprint
105
105
 
106
106
  for output in fn.outputs:
107
- if (
108
- not isinstance(output[0], np.random.RandomState | np.random.Generator)
109
- and np.isnan(output[0]).any()
110
- ):
107
+ if not isinstance(output[0], np.random.Generator) and np.isnan(output[0]).any():
111
108
  print("*** NaN detected ***") # noqa: T201
112
109
  debugprint(node)
113
110
  print(f"Inputs : {[input[0] for input in fn.inputs]}") # noqa: T201
@@ -34,7 +34,7 @@ def _is_numeric_value(arr, var):
34
34
 
35
35
  if isinstance(arr, _cdata_type):
36
36
  return False
37
- elif isinstance(arr, np.random.mtrand.RandomState | np.random.Generator):
37
+ elif isinstance(arr, np.random.Generator):
38
38
  return False
39
39
  elif var is not None and isinstance(var.type, RandomType):
40
40
  return False
@@ -0,0 +1,101 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <link rel="stylesheet" href="%% CSS_DIR %%/d3viz.css"/>
5
+ <link rel="stylesheet" href="%% CSS_DIR %%/d3-context-menu.css"/>
6
+ <script type="text/javascript" src="%% JS_DIR %%/d3viz.js"></script>
7
+ <script type="text/javascript" src="%% JS_DIR %%/d3.v3.min.js"></script>
8
+ <script type="text/javascript" src="%% JS_DIR %%/dagre-d3.min.js"></script>
9
+ <script type="text/javascript" src="%% JS_DIR %%/graphlib-dot.min.js"></script>
10
+ <script type="text/javascript" src="%% JS_DIR %%/d3-context-menu.js"></script>
11
+ </head>
12
+ <body>
13
+ <div id='menu' class='menuBar'>
14
+ <input name="resetNodes"
15
+ type="button"
16
+ value="Reset nodes"
17
+ onclick="resetNodes()"/>
18
+ <input name="releaseNodes"
19
+ type="button"
20
+ value="Release nodes"
21
+ onclick="releaseNodes()"/>
22
+ </div>
23
+
24
+ <script type="text/javascript">
25
+ // Backend graph in DOT format
26
+ var dotGraph = graphlibDot.read(%% DOT_GRAPH %%);
27
+ // Frontend graph for visualization
28
+ var graph = {};
29
+
30
+ var forceLayout;
31
+ var isProfiled = false; // true if profiling information available
32
+ var useProfileColors = false;
33
+ var fixOnInit = true; // fix nodes on initialization
34
+ var maxProfilePer = 0;
35
+ var profileColors = ["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15"];
36
+ var pad = 10;
37
+ var isEditNode = false; // true if node is edited
38
+ var menuItems = [
39
+ {
40
+ title: 'Edit',
41
+ action: function(elm, d, i) { editNode(elm, d); }
42
+ },
43
+ {
44
+ title: 'Release',
45
+ action: function(elm, d, i) { releaseNode(d); }
46
+ }
47
+ ];
48
+
49
+ // Create main panel
50
+ d3.select('body').select('svg').remove();
51
+ var svg = d3.select('body').append('svg')
52
+ .attr('width', '100%')
53
+ .attr('height', '95%');
54
+ var pane = svg.append('g');
55
+
56
+ // Zoom behaviour
57
+ var zoom = d3.behavior.zoom()
58
+ .scaleExtent([0.2, 8])
59
+ .on('zoom', function(d) {
60
+ var trans = d3.event.translate;
61
+ trans[0] += 300;
62
+ trans[1] += 100;
63
+ pane.attr('transform', 'translate(' + trans + ') scale(' + d3.event.scale + ')');
64
+ });
65
+ svg.call(zoom);
66
+ zoom.event(svg);
67
+ svg.on("dblclick.zoom", null);
68
+
69
+ // Edges
70
+ var edgeDiv = d3.select('body').append('div')
71
+ .attr('class', 'edgeTooltip')
72
+ .style('opacity', 0.0);
73
+
74
+ // Div for node details
75
+ var nodeInfo = d3.select('body').append('div')
76
+ .attr('class', 'nodeInfo')
77
+ .style('opacity', 0.0);
78
+
79
+ // Definition head of edges
80
+ var markerData = [
81
+ {'id': 'n', 'color': 'black'},
82
+ {'id': 'r', 'color': 'red'},
83
+ {'id': 'b', 'color': 'dodgerblue'}];
84
+ svg.append("defs").selectAll('marker').data(markerData).enter().append("marker")
85
+ .attr("id", function(d) { return 'edgeArrow_' + d.id;})
86
+ .attr("markerWidth", 4)
87
+ .attr("markerHeight", 4)
88
+ .attr("refX", 2)
89
+ .attr("refY", 2)
90
+ .attr("orient", "auto")
91
+ .append("path")
92
+ .attr("d", "M0,0 L4,2 L0,4 Z")
93
+ .attr('fill', function(d) { return d.color;});
94
+
95
+ // Initialize graph
96
+ processDotGraph(dotGraph);
97
+ graph = frontEndGraph(dotGraph);
98
+ drawGraph();
99
+ </script>
100
+ </body>
101
+ </html>
@@ -502,7 +502,7 @@ class Op(MetaObject):
502
502
  self,
503
503
  node: Apply,
504
504
  storage_map: StorageMapType,
505
- compute_map: ComputeMapType,
505
+ compute_map: ComputeMapType | None,
506
506
  no_recycling: list[Variable],
507
507
  debug: bool = False,
508
508
  ) -> ThunkType:
@@ -513,25 +513,38 @@ class Op(MetaObject):
513
513
  """
514
514
  node_input_storage = [storage_map[r] for r in node.inputs]
515
515
  node_output_storage = [storage_map[r] for r in node.outputs]
516
- node_compute_map = [compute_map[r] for r in node.outputs]
517
516
 
518
517
  if debug and hasattr(self, "debug_perform"):
519
518
  p = node.op.debug_perform
520
519
  else:
521
520
  p = node.op.perform
522
521
 
523
- @is_thunk_type
524
- def rval(
525
- p=p,
526
- i=node_input_storage,
527
- o=node_output_storage,
528
- n=node,
529
- cm=node_compute_map,
530
- ):
531
- r = p(n, [x[0] for x in i], o)
532
- for entry in cm:
533
- entry[0] = True
534
- return r
522
+ if compute_map is None:
523
+
524
+ @is_thunk_type
525
+ def rval(
526
+ p=p,
527
+ i=node_input_storage,
528
+ o=node_output_storage,
529
+ n=node,
530
+ ):
531
+ return p(n, [x[0] for x in i], o)
532
+
533
+ else:
534
+ node_compute_map = [compute_map[r] for r in node.outputs]
535
+
536
+ @is_thunk_type
537
+ def rval(
538
+ p=p,
539
+ i=node_input_storage,
540
+ o=node_output_storage,
541
+ n=node,
542
+ cm=node_compute_map,
543
+ ):
544
+ r = p(n, [x[0] for x in i], o)
545
+ for entry in cm:
546
+ entry[0] = True
547
+ return r
535
548
 
536
549
  rval.inputs = node_input_storage
537
550
  rval.outputs = node_output_storage
@@ -305,8 +305,8 @@ class IfElse(_NoPythonOp):
305
305
  if len(ls) > 0:
306
306
  return ls
307
307
  else:
308
- # strict=False because we are in a hot loop
309
- for out, t in zip(outputs, input_true_branch, strict=False):
308
+ # zip strict not specified because we are in a hot loop
309
+ for out, t in zip(outputs, input_true_branch):
310
310
  compute_map[out][0] = 1
311
311
  val = storage_map[t][0]
312
312
  if self.as_view:
@@ -326,8 +326,8 @@ class IfElse(_NoPythonOp):
326
326
  if len(ls) > 0:
327
327
  return ls
328
328
  else:
329
- # strict=False because we are in a hot loop
330
- for out, f in zip(outputs, inputs_false_branch, strict=False):
329
+ # zip strict not specified because we are in a hot loop
330
+ for out, f in zip(outputs, inputs_false_branch):
331
331
  compute_map[out][0] = 1
332
332
  # can't view both outputs unless destroyhandler
333
333
  # improves
@@ -539,14 +539,14 @@ class WrapLinker(Linker):
539
539
 
540
540
  def f():
541
541
  for inputs in input_lists[1:]:
542
- # strict=False because we are in a hot loop
543
- for input1, input2 in zip(inputs0, inputs, strict=False):
542
+ # zip strict not specified because we are in a hot loop
543
+ for input1, input2 in zip(inputs0, inputs):
544
544
  input2.storage[0] = copy(input1.storage[0])
545
545
  for x in to_reset:
546
546
  x[0] = None
547
547
  pre(self, [input.data for input in input_lists[0]], order, thunk_groups)
548
- # strict=False because we are in a hot loop
549
- for i, (thunks, node) in enumerate(zip(thunk_groups, order, strict=False)):
548
+ # zip strict not specified because we are in a hot loop
549
+ for i, (thunks, node) in enumerate(zip(thunk_groups, order)):
550
550
  try:
551
551
  wrapper(self.fgraph, i, node, *thunks)
552
552
  except Exception:
@@ -668,8 +668,8 @@ class JITLinker(PerformLinker):
668
668
  # since the error may come from any of them?
669
669
  raise_with_op(self.fgraph, output_nodes[0], thunk)
670
670
 
671
- # strict=False because we are in a hot loop
672
- for o_storage, o_val in zip(thunk_outputs, outputs, strict=False):
671
+ # zip strict not specified because we are in a hot loop
672
+ for o_storage, o_val in zip(thunk_outputs, outputs):
673
673
  o_storage[0] = o_val
674
674
 
675
675
  thunk.inputs = thunk_inputs
@@ -1988,27 +1988,23 @@ class DualLinker(Linker):
1988
1988
  )
1989
1989
 
1990
1990
  def f():
1991
- # strict=False because we are in a hot loop
1992
- for input1, input2 in zip(i1, i2, strict=False):
1991
+ # zip strict not specified because we are in a hot loop
1992
+ for input1, input2 in zip(i1, i2):
1993
1993
  # Set the inputs to be the same in both branches.
1994
1994
  # The copy is necessary in order for inplace ops not to
1995
1995
  # interfere.
1996
1996
  input2.storage[0] = copy(input1.storage[0])
1997
- for thunk1, thunk2, node1, node2 in zip(
1998
- thunks1, thunks2, order1, order2, strict=False
1999
- ):
2000
- for output, storage in zip(node1.outputs, thunk1.outputs, strict=False):
1997
+ for thunk1, thunk2, node1, node2 in zip(thunks1, thunks2, order1, order2):
1998
+ for output, storage in zip(node1.outputs, thunk1.outputs):
2001
1999
  if output in no_recycling:
2002
2000
  storage[0] = None
2003
- for output, storage in zip(node2.outputs, thunk2.outputs, strict=False):
2001
+ for output, storage in zip(node2.outputs, thunk2.outputs):
2004
2002
  if output in no_recycling:
2005
2003
  storage[0] = None
2006
2004
  try:
2007
2005
  thunk1()
2008
2006
  thunk2()
2009
- for output1, output2 in zip(
2010
- thunk1.outputs, thunk2.outputs, strict=False
2011
- ):
2007
+ for output1, output2 in zip(thunk1.outputs, thunk2.outputs):
2012
2008
  self.checker(output1, output2)
2013
2009
  except Exception:
2014
2010
  raise_with_op(fgraph, node1)
@@ -477,7 +477,7 @@ static PyObject *pycall(CLazyLinker *self, Py_ssize_t node_idx, int verbose) {
477
477
  double t0 = pytime(NULL);
478
478
  if (verbose)
479
479
  fprintf(stderr, "calling via Python (node %i)\n", (int)node_idx);
480
- rval = PyObject_CallObject(thunk, NULL);
480
+ rval = PyObject_CallNoArgs(thunk);
481
481
  if (rval) {
482
482
  double t1 = pytime(NULL);
483
483
  double ti = PyFloat_AsDouble(PyList_GetItem(self->call_times, node_idx));
@@ -491,7 +491,7 @@ static PyObject *pycall(CLazyLinker *self, Py_ssize_t node_idx, int verbose) {
491
491
  if (verbose) {
492
492
  fprintf(stderr, "calling via Python (node %i)\n", (int)node_idx);
493
493
  }
494
- rval = PyObject_CallObject(thunk, NULL);
494
+ rval = PyObject_CallNoArgs(thunk);
495
495
  }
496
496
  return rval;
497
497
  }
@@ -981,7 +981,7 @@ static PyTypeObject lazylinker_ext_CLazyLinkerType = {
981
981
  };
982
982
 
983
983
  static PyObject *get_version(PyObject *dummy, PyObject *args) {
984
- PyObject *result = PyFloat_FromDouble(0.3);
984
+ PyObject *result = PyFloat_FromDouble(0.31);
985
985
  return result;
986
986
  }
987
987