pytensor 2.25.1__tar.gz → 2.25.2__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.25.1 → pytensor-2.25.2}/MANIFEST.in +0 -1
- {pytensor-2.25.1/pytensor.egg-info → pytensor-2.25.2}/PKG-INFO +3 -3
- {pytensor-2.25.1 → pytensor-2.25.2}/README.rst +2 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/generate_dtype_tensor_table.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pyproject.toml +4 -9
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/__init__.py +4 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/_version.py +3 -3
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/bin/pytensor_cache.py +1 -3
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/builders.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/debugmode.py +12 -23
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/function/types.py +2 -6
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/monitormode.py +2 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/profiling.py +6 -9
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/configdefaults.py +4 -4
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/configparser.py +5 -6
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/gradient.py +6 -6
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/basic.py +9 -5
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/destroyhandler.py +2 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/basic.py +5 -8
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/db.py +4 -4
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/utils.py +3 -4
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/basic.py +2 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/basic.py +45 -47
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/cmodule.py +9 -11
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/interface.py +4 -8
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/lazylinker_c.py +4 -23
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/op.py +25 -57
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/params_type.py +26 -42
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/type.py +52 -64
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/__init__.py +10 -8
- pytensor-2.25.2/pytensor/link/jax/dispatch/blas.py +14 -0
- pytensor-2.25.2/pytensor/link/jax/dispatch/math.py +60 -0
- pytensor-2.25.2/pytensor/link/jax/dispatch/nlinalg.py +93 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/slinalg.py +4 -5
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/__init__.py +1 -0
- pytensor-2.25.2/pytensor/link/pytorch/dispatch/extra_ops.py +58 -0
- pytensor-2.25.2/pytensor/link/pytorch/dispatch/sort.py +25 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/utils.py +6 -10
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/vm.py +7 -11
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/check_blas.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/check_duplicate_key.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/elemwise_openmp_speedup.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/elemwise_time_test.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/pkl_utils.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/printing.py +3 -5
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/basic.py +33 -37
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/math.py +10 -10
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/op.py +1 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/rewriting.py +1 -3
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/utils.py +2 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/basic.py +8 -6
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/rewriting.py +29 -20
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/basic.py +18 -24
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas.py +12 -19
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas_c.py +2 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas_headers.py +2 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/conv/abstract_conv.py +6 -5
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/elemwise.py +20 -27
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/elemwise_cgen.py +5 -5
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/extra_ops.py +8 -9
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/fft.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/math.py +28 -31
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/linalg.py +29 -26
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/math.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/shape.py +2 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/slinalg.py +9 -12
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/subtensor.py +26 -37
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/type.py +17 -15
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/basic.py +20 -21
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/type.py +7 -6
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/utils.py +1 -1
- {pytensor-2.25.1 → pytensor-2.25.2/pytensor.egg-info}/PKG-INFO +3 -3
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/SOURCES.txt +3 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/scripts/mypy-failing.txt +1 -3
- {pytensor-2.25.1 → pytensor-2.25.2}/setup.py +1 -2
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_config.py +13 -0
- pytensor-2.25.1/pytensor/link/jax/dispatch/nlinalg.py +0 -161
- pytensor-2.25.1/pytensor/link/pytorch/dispatch/extra_ops.py +0 -23
- pytensor-2.25.1/pytensor/version.py +0 -28
- pytensor-2.25.1/versioneer.py +0 -2201
- {pytensor-2.25.1 → pytensor-2.25.2}/LICENSE.txt +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/.templates/layout.html +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/LICENSE.txt +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/README.md +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/acknowledgement.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/bcast.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/bcast.svg +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/conf.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/core_development_guide.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/css.inc +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/environment.yml +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/apply.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/apply.svg +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/apply2.svg +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/ctype.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/inplace.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/op.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/scan.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/tips.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/type.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/unittest.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/using_params.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/faq.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/glossary.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/blocksparse.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/lstm.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/talk2010.gif +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/talk2010.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/install.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/internal/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/introduction.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/function.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/io.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/config.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/gradient.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/features.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/op.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/type.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/printing.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sandbox/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sandbox/linalg.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/scan.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/random/basic.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/random/utils.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/typed_list.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/links.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/optimizations.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/pylintrc +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/ccodegen.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/compilation.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/debugging_with_stepmode.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/elemwise_compiler.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/function.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/functional.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/how_to_make_ops.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/index2.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/interactive_debugger.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/logistic_regression_example.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/performance.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/randomnumbers.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/rethinkccodegen.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/sandbox.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/software.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/sparse.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/tensoroptools.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/troubleshooting.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/apply.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/index.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/doc/user_guide.rst +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/breakpoint.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/io.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/mode.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/ops.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/features.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/fg.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/op.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/replace.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/type.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/ifelse.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/safe_asarray.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/py.typed +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/raise_op.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/loop.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/views.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sandbox/sp.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/type.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blockwise.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/inplace.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/io.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/op.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/elemwise.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/shape.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/subtensor.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/special.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/utils.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/var.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/variable.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/updates.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/setup.cfg +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_breakpoint.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_gradient.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_ifelse.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_printing.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_raise_op.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_rop.py +0 -0
- {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_updates.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pytensor
|
|
3
|
-
Version: 2.25.
|
|
3
|
+
Version: 2.25.2
|
|
4
4
|
Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
|
|
5
5
|
Author-email: pymc-devs <pymc.devs@gmail.com>
|
|
6
6
|
License: .. _license:
|
|
@@ -243,7 +243,7 @@ A good place to start contributing is by looking through the issues
|
|
|
243
243
|
|
|
244
244
|
|
|
245
245
|
.. |Project Name| replace:: PyTensor
|
|
246
|
-
.. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg
|
|
247
|
-
:target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests
|
|
246
|
+
.. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg?branch=main
|
|
247
|
+
:target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests+branch%3Amain
|
|
248
248
|
.. |Coverage| image:: https://codecov.io/gh/pymc-devs/pytensor/branch/main/graph/badge.svg?token=WVwr8nZYmc
|
|
249
249
|
:target: https://codecov.io/gh/pymc-devs/pytensor
|
|
@@ -133,7 +133,7 @@ A good place to start contributing is by looking through the issues
|
|
|
133
133
|
|
|
134
134
|
|
|
135
135
|
.. |Project Name| replace:: PyTensor
|
|
136
|
-
.. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg
|
|
137
|
-
:target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests
|
|
136
|
+
.. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg?branch=main
|
|
137
|
+
:target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests+branch%3Amain
|
|
138
138
|
.. |Coverage| image:: https://codecov.io/gh/pymc-devs/pytensor/branch/main/graph/badge.svg?token=WVwr8nZYmc
|
|
139
139
|
:target: https://codecov.io/gh/pymc-devs/pytensor
|
|
@@ -31,7 +31,7 @@ for letter in letters:
|
|
|
31
31
|
if len(shape[1]) < 6 or len(set(shape[1])) > 1:
|
|
32
32
|
broadcastable_str = str(shape[1])
|
|
33
33
|
else:
|
|
34
|
-
broadcastable_str = '(
|
|
34
|
+
broadcastable_str = f'({shape[1][0]},) * {len(shape[1])}'
|
|
35
35
|
print('%s%-10s %-10s %-4s %-15s %-20s' %(
|
|
36
36
|
letter[0], shape[0], letter[1], len(shape[1]), s, broadcastable_str
|
|
37
37
|
))
|
|
@@ -3,7 +3,7 @@ requires = [
|
|
|
3
3
|
"setuptools>=59.0.0",
|
|
4
4
|
"cython",
|
|
5
5
|
"numpy>=1.17.0",
|
|
6
|
-
"versioneer[toml]
|
|
6
|
+
"versioneer[toml]==0.29",
|
|
7
7
|
]
|
|
8
8
|
build-backend = "setuptools.build_meta"
|
|
9
9
|
|
|
@@ -125,8 +125,8 @@ line-length = 88
|
|
|
125
125
|
exclude = ["doc/", "pytensor/_version.py"]
|
|
126
126
|
|
|
127
127
|
[tool.ruff.lint]
|
|
128
|
-
select = ["C", "E", "F", "I", "UP", "W", "RUF"]
|
|
129
|
-
ignore = ["C408", "C901", "E501", "E741", "RUF012"]
|
|
128
|
+
select = ["C", "E", "F", "I", "UP", "W", "RUF", "PERF", "PTH", "ISC"]
|
|
129
|
+
ignore = ["C408", "C901", "E501", "E741", "RUF012", "PERF203", "ISC001"]
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
[tool.ruff.lint.isort]
|
|
@@ -136,6 +136,7 @@ lines-after-imports = 2
|
|
|
136
136
|
# TODO: Get rid of these:
|
|
137
137
|
"**/__init__.py" = ["F401", "E402", "F403"]
|
|
138
138
|
"pytensor/tensor/linalg.py" = ["F403"]
|
|
139
|
+
"pytensor/link/c/cmodule.py" = ["PTH"]
|
|
139
140
|
# For the tests we skip because `pytest.importorskip` is used:
|
|
140
141
|
"tests/link/jax/test_scalar.py" = ["E402"]
|
|
141
142
|
"tests/link/jax/test_tensor_basic.py" = ["E402"]
|
|
@@ -149,23 +150,17 @@ lines-after-imports = 2
|
|
|
149
150
|
"tests/sparse/test_sp2.py" = ["E402"]
|
|
150
151
|
"tests/sparse/test_utils.py" = ["E402"]
|
|
151
152
|
"tests/sparse/sandbox/test_sp.py" = ["E402", "F401"]
|
|
152
|
-
"versioneer.py" = ["I"]
|
|
153
153
|
|
|
154
154
|
|
|
155
155
|
[tool.mypy]
|
|
156
156
|
python_version = "3.10"
|
|
157
157
|
ignore_missing_imports = true
|
|
158
|
-
no_implicit_optional = true
|
|
159
|
-
check_untyped_defs = false
|
|
160
158
|
strict_equality = true
|
|
161
159
|
warn_redundant_casts = true
|
|
162
160
|
warn_unused_configs = true
|
|
163
161
|
warn_unused_ignores = true
|
|
164
162
|
warn_return_any = true
|
|
165
|
-
warn_no_return = false
|
|
166
163
|
warn_unreachable = true
|
|
167
|
-
show_error_codes = true
|
|
168
|
-
allow_redefinition = false
|
|
169
164
|
files = ["pytensor", "tests"]
|
|
170
165
|
plugins = ["numpy.typing.mypy_plugin"]
|
|
171
166
|
|
|
@@ -28,7 +28,10 @@ from functools import singledispatch
|
|
|
28
28
|
from pathlib import Path
|
|
29
29
|
from typing import Any, NoReturn, Optional
|
|
30
30
|
|
|
31
|
-
from pytensor
|
|
31
|
+
from pytensor import _version
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
__version__: str = _version.get_versions()["version"]
|
|
32
35
|
|
|
33
36
|
|
|
34
37
|
pytensor_logger = logging.getLogger("pytensor")
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-07-
|
|
11
|
+
"date": "2024-07-15T13:39:05+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.25.
|
|
14
|
+
"full-revisionid": "72c6a816917b5ae1700fa469248278206a3bdf00",
|
|
15
|
+
"version": "2.25.2"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -30,9 +30,7 @@ def print_help(exit_status):
|
|
|
30
30
|
print('Type "pytensor-cache clear" to erase the cache')
|
|
31
31
|
print('Type "pytensor-cache list" to print the cache content')
|
|
32
32
|
print('Type "pytensor-cache unlock" to unlock the cache directory')
|
|
33
|
-
print(
|
|
34
|
-
'Type "pytensor-cache cleanup" to delete keys in the old ' "format/code version"
|
|
35
|
-
)
|
|
33
|
+
print('Type "pytensor-cache cleanup" to delete keys in the old format/code version')
|
|
36
34
|
print('Type "pytensor-cache purge" to force deletion of the cache directory')
|
|
37
35
|
print(
|
|
38
36
|
'Type "pytensor-cache basecompiledir" '
|
|
@@ -434,7 +434,7 @@ class OpFromGraph(Op, HasInnerGraph):
|
|
|
434
434
|
def __str__(self):
|
|
435
435
|
name = self.__class__.__name__ if self.name is None else self.name
|
|
436
436
|
is_inline = self.is_inline
|
|
437
|
-
return "{name}{{inline={is_inline}}}"
|
|
437
|
+
return f"{name}{{inline={is_inline}}}"
|
|
438
438
|
|
|
439
439
|
def _combine_list_overrides(self, default_outs, custom_outs, callable_args):
|
|
440
440
|
"""Combines default and custom overrides into a single list of outputs."""
|
|
@@ -478,7 +478,7 @@ def _check_inputs(
|
|
|
478
478
|
"""
|
|
479
479
|
destroyed_idx_list = []
|
|
480
480
|
destroy_map = node.op.destroy_map
|
|
481
|
-
for
|
|
481
|
+
for i_pos_list in destroy_map.values():
|
|
482
482
|
destroyed_idx_list.extend(i_pos_list)
|
|
483
483
|
destroyed_res_list = [node.inputs[i] for i in destroyed_idx_list]
|
|
484
484
|
|
|
@@ -598,7 +598,7 @@ def _check_viewmap(fgraph, node, storage_map):
|
|
|
598
598
|
# TODO: make sure this is correct
|
|
599
599
|
# According to OB, duplicate inputs are rejected on build graph time
|
|
600
600
|
# if they cause problems. So if they are here it should be ok.
|
|
601
|
-
for key
|
|
601
|
+
for key in good_alias:
|
|
602
602
|
bad_alias.pop(key, None)
|
|
603
603
|
if bad_alias:
|
|
604
604
|
raise BadViewMap(node, oi, outstorage, list(bad_alias.values()))
|
|
@@ -756,10 +756,7 @@ def _get_preallocated_maps(
|
|
|
756
756
|
# TODO: Sparse? Scalar does not really make sense.
|
|
757
757
|
|
|
758
758
|
# Do not preallocate memory for outputs that actually work inplace
|
|
759
|
-
considered_outputs = []
|
|
760
|
-
for r in node.outputs:
|
|
761
|
-
if r not in inplace_outs:
|
|
762
|
-
considered_outputs.append(r)
|
|
759
|
+
considered_outputs = [r for r in node.outputs if r not in inplace_outs]
|
|
763
760
|
|
|
764
761
|
# Output storage that was initially present in the storage_map
|
|
765
762
|
if "initial" in prealloc_modes or "ALL" in prealloc_modes:
|
|
@@ -1617,14 +1614,10 @@ class _Linker(LocalLinker):
|
|
|
1617
1614
|
opt = str(reason[0][0])
|
|
1618
1615
|
msg = (
|
|
1619
1616
|
f"An optimization (probably {opt}) inserted an "
|
|
1620
|
-
"apply node that raise an error
|
|
1621
|
-
|
|
1622
|
-
"
|
|
1623
|
-
|
|
1624
|
-
+ "\n"
|
|
1625
|
-
+ reason[0][2]
|
|
1626
|
-
+ "\n\nThe original exception: \n"
|
|
1627
|
-
+ str(e)
|
|
1617
|
+
"apply node that raise an error.\n"
|
|
1618
|
+
"The information we have about this optimization is:"
|
|
1619
|
+
f"{reason[0][1]}\n{reason[0][2]}\n"
|
|
1620
|
+
f"\nThe original exception: \n{e}"
|
|
1628
1621
|
)
|
|
1629
1622
|
new_e = e.__class__(msg)
|
|
1630
1623
|
exc_type, exc_value, exc_trace = sys.exc_info()
|
|
@@ -1728,15 +1721,11 @@ class _Linker(LocalLinker):
|
|
|
1728
1721
|
raise
|
|
1729
1722
|
opt = str(reason[0][0])
|
|
1730
1723
|
msg = (
|
|
1731
|
-
f"An optimization (probably {opt}) inserted "
|
|
1732
|
-
"
|
|
1733
|
-
|
|
1734
|
-
"
|
|
1735
|
-
|
|
1736
|
-
+ "\n"
|
|
1737
|
-
+ reason[0][2]
|
|
1738
|
-
+ "\n\nThe original exception: \n"
|
|
1739
|
-
+ str(e)
|
|
1724
|
+
f"An optimization (probably {opt}) inserted an "
|
|
1725
|
+
"apply node that raise an error.\n"
|
|
1726
|
+
"The information we have about this optimization is:"
|
|
1727
|
+
f"{reason[0][1]}\n{reason[0][2]}\n"
|
|
1728
|
+
f"\nThe original exception: \n{e}"
|
|
1740
1729
|
)
|
|
1741
1730
|
new_e = e.__class__(msg)
|
|
1742
1731
|
exc_type, exc_value, exc_trace = sys.exc_info()
|
|
@@ -1067,7 +1067,7 @@ class Function:
|
|
|
1067
1067
|
container = property(
|
|
1068
1068
|
lambda self: self._container,
|
|
1069
1069
|
None, # this property itself is not settable
|
|
1070
|
-
doc=("dictionary-like access to the containers associated with
|
|
1070
|
+
doc=("dictionary-like access to the containers associated with Variables"),
|
|
1071
1071
|
)
|
|
1072
1072
|
|
|
1073
1073
|
def free(self):
|
|
@@ -1890,11 +1890,7 @@ def get_info_on_inputs(named_inputs, n_unnamed_inputs):
|
|
|
1890
1890
|
)
|
|
1891
1891
|
else:
|
|
1892
1892
|
if n_unnamed_inputs == 0:
|
|
1893
|
-
msg = "The function has {} named input{} ({})."
|
|
1894
|
-
n_named_inputs,
|
|
1895
|
-
get_plural(n_named_inputs),
|
|
1896
|
-
", ".join(named_inputs),
|
|
1897
|
-
)
|
|
1893
|
+
msg = f"The function has {n_named_inputs} named input{get_plural(n_named_inputs)} ({', '.join(named_inputs)})."
|
|
1898
1894
|
else:
|
|
1899
1895
|
msg = (
|
|
1900
1896
|
f"The function has {n_named_inputs} named input{get_plural(n_named_inputs)} ({', '.join(named_inputs)}), and {n_unnamed_inputs} unnamed "
|
|
@@ -110,6 +110,6 @@ def detect_nan(fgraph, i, node, fn):
|
|
|
110
110
|
):
|
|
111
111
|
print("*** NaN detected ***")
|
|
112
112
|
debugprint(node)
|
|
113
|
-
print("Inputs :
|
|
114
|
-
print("Outputs:
|
|
113
|
+
print(f"Inputs : {[input[0] for input in fn.inputs]}")
|
|
114
|
+
print(f"Outputs: {[output[0] for output in fn.outputs]}")
|
|
115
115
|
break
|
|
@@ -753,14 +753,11 @@ class ProfileStats:
|
|
|
753
753
|
)
|
|
754
754
|
# Same as before, this I've sacrificed some information making
|
|
755
755
|
# the output more readable
|
|
756
|
+
percent = sum(f for f, t, a, nd_id, nb_call in atimes[N:])
|
|
757
|
+
duration = sum(t for f, t, a, nd_id, nb_call in atimes[N:])
|
|
756
758
|
print(
|
|
757
|
-
" ... (remaining
|
|
758
|
-
"
|
|
759
|
-
% (
|
|
760
|
-
max(0, len(atimes) - N),
|
|
761
|
-
sum(f for f, t, a, nd_id, nb_call in atimes[N:]),
|
|
762
|
-
sum(t for f, t, a, nd_id, nb_call in atimes[N:]),
|
|
763
|
-
),
|
|
759
|
+
f" ... (remaining {max(0, len(atimes) - N)} Apply instances account for "
|
|
760
|
+
f"{percent:.2f}%%({duration:.2f}s) of the runtime)",
|
|
764
761
|
file=file,
|
|
765
762
|
)
|
|
766
763
|
print("", file=file)
|
|
@@ -1380,9 +1377,9 @@ class ProfileStats:
|
|
|
1380
1377
|
items.sort(key=lambda a: a[1], reverse=True)
|
|
1381
1378
|
for idx, ((fgraph, node), node_outputs_size) in enumerate(items[:N]):
|
|
1382
1379
|
code = ["c"] * len(node.outputs)
|
|
1383
|
-
for out
|
|
1380
|
+
for out in node.op.destroy_map:
|
|
1384
1381
|
code[out] = "i"
|
|
1385
|
-
for out
|
|
1382
|
+
for out in node.op.view_map:
|
|
1386
1383
|
code[out] = "v"
|
|
1387
1384
|
shapes = str(fct_shapes[fgraph][node])
|
|
1388
1385
|
|
|
@@ -1155,14 +1155,14 @@ def _default_compiledirname() -> str:
|
|
|
1155
1155
|
return safe
|
|
1156
1156
|
|
|
1157
1157
|
|
|
1158
|
-
def _filter_base_compiledir(path: Path) -> Path:
|
|
1158
|
+
def _filter_base_compiledir(path: str | Path) -> Path:
|
|
1159
1159
|
# Expand '~' in path
|
|
1160
|
-
return path.expanduser()
|
|
1160
|
+
return Path(path).expanduser()
|
|
1161
1161
|
|
|
1162
1162
|
|
|
1163
|
-
def _filter_compiledir(path: Path) -> Path:
|
|
1163
|
+
def _filter_compiledir(path: str | Path) -> Path:
|
|
1164
1164
|
# Expand '~' in path
|
|
1165
|
-
path = path.expanduser()
|
|
1165
|
+
path = Path(path).expanduser()
|
|
1166
1166
|
# Turn path into the 'real' path. This ensures that:
|
|
1167
1167
|
# 1. There is no relative path, which would fail e.g. when trying to
|
|
1168
1168
|
# import modules from the compile dir.
|
|
@@ -533,12 +533,11 @@ class DeviceParam(ConfigParam):
|
|
|
533
533
|
)
|
|
534
534
|
elif val == self.default:
|
|
535
535
|
return val
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
)
|
|
536
|
+
raise ValueError(
|
|
537
|
+
f'Invalid value ("{val}") for configuration '
|
|
538
|
+
f'variable "{self.name}". Valid options start with '
|
|
539
|
+
'one of "cpu".'
|
|
540
|
+
)
|
|
542
541
|
|
|
543
542
|
def __str__(self):
|
|
544
543
|
return f"{self.name} ({self.default})"
|
|
@@ -802,20 +802,20 @@ def _node_to_pattern(node):
|
|
|
802
802
|
if not isinstance(connection_pattern, list):
|
|
803
803
|
raise TypeError(
|
|
804
804
|
"Op.connection_pattern should return "
|
|
805
|
-
|
|
806
|
-
|
|
805
|
+
f"list of list of bool, but for Op={node.op}"
|
|
806
|
+
f"got {connection_pattern} with type {type(connection_pattern)}."
|
|
807
807
|
)
|
|
808
808
|
if len(connection_pattern) != len(node.inputs):
|
|
809
809
|
raise ValueError(
|
|
810
810
|
f"{node.op}.connection_pattern should have {len(node.inputs)}"
|
|
811
|
-
|
|
811
|
+
f" rows but has {len(connection_pattern)}."
|
|
812
812
|
)
|
|
813
813
|
for ii, output_pattern in enumerate(connection_pattern):
|
|
814
814
|
if not isinstance(output_pattern, list):
|
|
815
815
|
raise TypeError(
|
|
816
816
|
f"{node.op}.connection_pattern should return"
|
|
817
|
-
|
|
818
|
-
|
|
817
|
+
f" a list of lists, but element {int(ii)}"
|
|
818
|
+
f"is {output_pattern} of type {type(output_pattern)}."
|
|
819
819
|
)
|
|
820
820
|
else:
|
|
821
821
|
connection_pattern = [[True for output in node.outputs] for ipt in node.inputs]
|
|
@@ -1328,7 +1328,7 @@ def _populate_grad_dict(var_to_app_to_idx, grad_dict, wrt, cost_name=None):
|
|
|
1328
1328
|
elif connected and not actually_connected:
|
|
1329
1329
|
msg = f"{node.op}.grad returned DisconnectedType for input {i}."
|
|
1330
1330
|
if hasattr(node.op, "connection_pattern"):
|
|
1331
|
-
msg += " Its connection_pattern method does not
|
|
1331
|
+
msg += " Its connection_pattern method does not allow this."
|
|
1332
1332
|
raise TypeError(msg)
|
|
1333
1333
|
else:
|
|
1334
1334
|
msg += (
|
|
@@ -909,6 +909,7 @@ def ancestors(
|
|
|
909
909
|
def expand(r: Variable) -> Iterator[Variable] | None:
|
|
910
910
|
if r.owner and (not blockers or r not in blockers):
|
|
911
911
|
return reversed(r.owner.inputs)
|
|
912
|
+
return None
|
|
912
913
|
|
|
913
914
|
yield from cast(Generator[Variable, None, None], walk(graphs, expand, False))
|
|
914
915
|
|
|
@@ -1011,6 +1012,7 @@ def vars_between(
|
|
|
1011
1012
|
def expand(r: Variable) -> Iterable[Variable] | None:
|
|
1012
1013
|
if r.owner and r not in ins:
|
|
1013
1014
|
return reversed(r.owner.inputs + r.owner.outputs)
|
|
1015
|
+
return None
|
|
1014
1016
|
|
|
1015
1017
|
yield from cast(Generator[Variable, None, None], walk(outs, expand))
|
|
1016
1018
|
|
|
@@ -2039,13 +2041,15 @@ def get_var_by_name(
|
|
|
2039
2041
|
from pytensor.graph.op import HasInnerGraph
|
|
2040
2042
|
|
|
2041
2043
|
def expand(r) -> list[Variable] | None:
|
|
2042
|
-
if r.owner:
|
|
2043
|
-
|
|
2044
|
+
if not r.owner:
|
|
2045
|
+
return None
|
|
2046
|
+
|
|
2047
|
+
res = list(r.owner.inputs)
|
|
2044
2048
|
|
|
2045
|
-
|
|
2046
|
-
|
|
2049
|
+
if isinstance(r.owner.op, HasInnerGraph):
|
|
2050
|
+
res.extend(r.owner.op.inner_outputs)
|
|
2047
2051
|
|
|
2048
|
-
|
|
2052
|
+
return res
|
|
2049
2053
|
|
|
2050
2054
|
results: tuple[Variable, ...] = ()
|
|
2051
2055
|
for var in walk(graphs, expand, False):
|
|
@@ -182,7 +182,7 @@ def _build_droot_impact(destroy_handler):
|
|
|
182
182
|
root_destroyer = {} # root -> destroyer apply
|
|
183
183
|
|
|
184
184
|
for app in destroy_handler.destroyers:
|
|
185
|
-
for
|
|
185
|
+
for input_idx_list in app.op.destroy_map.values():
|
|
186
186
|
if len(input_idx_list) != 1:
|
|
187
187
|
raise NotImplementedError()
|
|
188
188
|
input_idx = input_idx_list[0]
|
|
@@ -698,7 +698,7 @@ class DestroyHandler(Bookkeeper):
|
|
|
698
698
|
# keep track of clients that should run before the current Apply
|
|
699
699
|
root_clients = set_type()
|
|
700
700
|
# for each destroyed input...
|
|
701
|
-
for
|
|
701
|
+
for input_idx_list in app.op.destroy_map.values():
|
|
702
702
|
destroyed_idx = input_idx_list[0]
|
|
703
703
|
destroyed_variable = app.inputs[destroyed_idx]
|
|
704
704
|
root = droot[destroyed_variable]
|
|
@@ -1664,15 +1664,12 @@ class PatternNodeRewriter(NodeRewriter):
|
|
|
1664
1664
|
|
|
1665
1665
|
def pattern_to_str(pattern):
|
|
1666
1666
|
if isinstance(pattern, list | tuple):
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
", ".join(pattern_to_str(p) for p in pattern[1:]),
|
|
1670
|
-
)
|
|
1667
|
+
args = ", ".join(pattern_to_str(p) for p in pattern[1:])
|
|
1668
|
+
return f"{pattern[0]!s}({args})"
|
|
1671
1669
|
elif isinstance(pattern, dict):
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
)
|
|
1670
|
+
a = pattern_to_str(pattern["pattern"])
|
|
1671
|
+
b = pattern.get("constraint", "no conditions")
|
|
1672
|
+
return f"{a} subject to {b}"
|
|
1676
1673
|
else:
|
|
1677
1674
|
return str(pattern)
|
|
1678
1675
|
|
|
@@ -229,10 +229,10 @@ class RewriteDatabaseQuery:
|
|
|
229
229
|
def __str__(self):
|
|
230
230
|
return (
|
|
231
231
|
"RewriteDatabaseQuery("
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
232
|
+
f"inc={self.include},ex={self.exclude},"
|
|
233
|
+
f"require={self.require},subquery={self.subquery},"
|
|
234
|
+
f"position_cutoff={self.position_cutoff},"
|
|
235
|
+
f"extra_rewrites={self.extra_rewrites})"
|
|
236
236
|
)
|
|
237
237
|
|
|
238
238
|
def __setstate__(self, state):
|
|
@@ -245,10 +245,9 @@ class MetaType(ABCMeta):
|
|
|
245
245
|
else:
|
|
246
246
|
|
|
247
247
|
def __str__(self):
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
)
|
|
248
|
+
classname = self.__class__.__name__
|
|
249
|
+
args = ", ".join(f"{p}={getattr(self, p)!r}" for p in props)
|
|
250
|
+
return f"{classname}{{{args}}}"
|
|
252
251
|
|
|
253
252
|
dct["__str__"] = __str__
|
|
254
253
|
|
|
@@ -322,7 +322,7 @@ class PerformLinker(LocalLinker):
|
|
|
322
322
|
output_storage=None,
|
|
323
323
|
storage_map=None,
|
|
324
324
|
):
|
|
325
|
-
fgraph
|
|
325
|
+
fgraph = self.fgraph
|
|
326
326
|
order = self.schedule(fgraph)
|
|
327
327
|
no_recycling = self.no_recycling
|
|
328
328
|
|
|
@@ -347,7 +347,7 @@ class PerformLinker(LocalLinker):
|
|
|
347
347
|
thunks[-1].outputs = [storage_map[v] for v in node.outputs]
|
|
348
348
|
|
|
349
349
|
computed, last_user = gc_helper(order)
|
|
350
|
-
post_thunk_old_storage
|
|
350
|
+
post_thunk_old_storage = [] if self.allow_gc else None
|
|
351
351
|
|
|
352
352
|
for node in order:
|
|
353
353
|
if self.allow_gc:
|