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.
- {pytensor-2.30.2/pytensor.egg-info → pytensor-2.31.0}/PKG-INFO +2 -47
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/extending_pytensor_solution_1.py +3 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index.ipynb +1 -1
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index.rst +1 -1
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/optimizations.rst +1 -1
- {pytensor-2.30.2 → pytensor-2.31.0}/pyproject.toml +3 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/_version.py +3 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/builders.py +2 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/function/types.py +4 -2
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/monitormode.py +1 -4
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/nanguardmode.py +1 -1
- pytensor-2.31.0/pytensor/d3viz/html/template.html +101 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/op.py +27 -14
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/ifelse.py +4 -4
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/basic.py +6 -6
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/basic.py +6 -10
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/c_code/lazylinker_c.c +3 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/cmodule.py +143 -134
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/lazylinker_c.py +1 -1
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/op.py +12 -6
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/signal/conv.py +3 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/slinalg.py +46 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/subtensor.py +3 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/linker.py +3 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/basic.py +66 -3
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/cython_support.py +1 -4
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/extra_ops.py +1 -1
- pytensor-2.31.0/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +206 -0
- pytensor-2.31.0/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +86 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/general.py +2 -112
- pytensor-2.31.0/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +132 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/random.py +9 -0
- pytensor-2.31.0/pytensor/link/numba/dispatch/signal/conv.py +70 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/slinalg.py +101 -1
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/subtensor.py +9 -9
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/tensor_basic.py +1 -4
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/vectorize_codegen.py +1 -1
- pytensor-2.31.0/pytensor/link/numba/linker.py +19 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/subtensor.py +4 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/utils.py +2 -2
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/basic.py +28 -38
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/loop.py +38 -42
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/basic.py +208 -149
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas.py +2 -24
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas_c.py +29 -19
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blockwise.py +160 -93
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/elemwise.py +5 -26
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/basic.py +14 -19
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/jax.py +1 -1
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/type.py +9 -8
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/utils.py +8 -8
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/__init__.py +2 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blockwise.py +31 -3
- pytensor-2.31.0/pytensor/tensor/rewriting/conv.py +78 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/elemwise.py +2 -14
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/subtensor.py +36 -401
- pytensor-2.31.0/pytensor/tensor/rewriting/subtensor_lift.py +850 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/shape.py +2 -4
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/signal/conv.py +5 -4
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/slinalg.py +420 -2
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/special.py +1 -1
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/subtensor.py +207 -36
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/type.py +16 -7
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/utils.py +23 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/utils.py +9 -25
- {pytensor-2.30.2 → pytensor-2.31.0/pytensor.egg-info}/PKG-INFO +2 -47
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/SOURCES.txt +6 -0
- pytensor-2.30.2/pytensor/link/numba/dispatch/signal/conv.py +0 -16
- pytensor-2.30.2/pytensor/link/numba/linker.py +0 -37
- {pytensor-2.30.2 → pytensor-2.31.0}/LICENSE.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/MANIFEST.in +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/README.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/layout.html +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/nb-badges.html +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/LICENSE.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/README.md +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/acknowledgement.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/bcast.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/bcast.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/blog.md +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/conf.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/core_development_guide.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/css.inc +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/environment.yml +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/apply.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/apply.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/apply2.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/ctype.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/inplace.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/scan.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/tips.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/type.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/unittest.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/extending/using_params.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/faq.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/gallery/page_footer.md +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/glossary.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/PyTensor.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/binder.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/blocksparse.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/colab.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/github.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/lstm.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/talk2010.gif +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/images/talk2010.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/install.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/internal/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/introduction.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/function.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/io.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/config.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/features.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/replace.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/type.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/printing.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/scan.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/functional.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/random/distributions.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/library/typed_list.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/links.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/pylintrc +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/robots.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/troubleshooting.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/apply.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/prng.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/doc/user_guide.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/breakpoint.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/debugmode.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/io.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/mode.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/profiling.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/configdefaults.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/configparser.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/gradient.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/features.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/fg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/replace.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/graph/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/c/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/blockwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/shape.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/link/vm.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/npy_2_compat.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/printing.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/py.typed +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/raise_op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/rewriting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/scan/views.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sandbox/sp.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas_headers.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/conv/abstract_conv.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/einsum.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/inplace.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/io.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/pad.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/linalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/shape.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/signal/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/var.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/variable.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor/updates.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/setup.cfg +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/setup.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_breakpoint.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_config.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_gradient.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_ifelse.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_printing.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_raise_op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.31.0}/tests/test_rop.py +0 -0
- {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.
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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 =
|
|
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 = ["
|
|
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-
|
|
11
|
+
"date": "2025-05-19T16:51:53+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "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
|
-
|
|
877
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
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
|
|
309
|
-
for out, t in zip(outputs, input_true_branch
|
|
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
|
|
330
|
-
for out, f in zip(outputs, inputs_false_branch
|
|
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
|
|
543
|
-
for input1, input2 in zip(inputs0, inputs
|
|
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
|
|
549
|
-
for i, (thunks, node) in enumerate(zip(thunk_groups, order
|
|
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
|
|
672
|
-
for o_storage, o_val in zip(thunk_outputs, outputs
|
|
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
|
|
1992
|
-
for input1, input2 in zip(i1, i2
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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.
|
|
984
|
+
PyObject *result = PyFloat_FromDouble(0.31);
|
|
985
985
|
return result;
|
|
986
986
|
}
|
|
987
987
|
|