pytensor 2.24.2__tar.gz → 2.25.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.24.2/pytensor.egg-info → pytensor-2.25.0}/PKG-INFO +2 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/conf.py +5 -6
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/config.rst +0 -104
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/index.rst +2 -3
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/troubleshooting.rst +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pyproject.toml +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/__init__.py +3 -5
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/_version.py +3 -3
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/compiledir.py +16 -22
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/compilelock.py +3 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/debugmode.py +8 -9
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/function/__init__.py +55 -44
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/function/types.py +19 -22
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/profiling.py +7 -9
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/configdefaults.py +36 -105
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/configparser.py +129 -21
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/d3viz.py +15 -18
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/formatting.py +3 -3
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/gradient.py +2 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/basic.py +4 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/destroyhandler.py +3 -4
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/fg.py +88 -89
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/rewriting/basic.py +10 -12
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/rewriting/utils.py +86 -96
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/utils.py +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/basic.py +6 -8
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/cmodule.py +20 -15
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/cutils.py +13 -16
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/lazylinker_c.py +20 -23
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/op.py +26 -24
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/params_type.py +5 -14
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/type.py +4 -6
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/elemwise.py +2 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/random.py +1 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/scalar.py +3 -9
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/scan.py +2 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/tensor_basic.py +4 -8
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/vectorize_codegen.py +2 -4
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/vm.py +5 -8
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/check_duplicate_key.py +10 -17
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/elemwise_openmp_speedup.py +2 -1
- pytensor-2.25.0/pytensor/misc/pkl_utils.py +64 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/printing.py +34 -37
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/raise_op.py +12 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/basic.py +5 -5
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/c_code/incbet.c +5 -3
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/loop.py +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/math.py +13 -29
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/op.py +3 -3
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/rewriting.py +5 -5
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/utils.py +8 -10
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/basic.py +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/basic.py +4 -4
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/blas.py +7 -6
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/blas_headers.py +22 -31
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/blockwise.py +2 -4
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/elemwise.py +27 -42
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/extra_ops.py +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/io.py +4 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/math.py +63 -175
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/basic.py +5 -8
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/utils.py +13 -7
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/elemwise.py +4 -5
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/linalg.py +0 -6
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/math.py +2 -5
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/shape.py +6 -3
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/shape.py +2 -4
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/slinalg.py +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/subtensor.py +3 -5
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/type.py +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/utils.py +31 -14
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/variable.py +4 -6
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/utils.py +22 -50
- {pytensor-2.24.2 → pytensor-2.25.0/pytensor.egg-info}/PKG-INFO +2 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor.egg-info/requires.txt +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_config.py +2 -2
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_raise_op.py +1 -1
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_rop.py +1 -3
- pytensor-2.24.2/pytensor/misc/pkl_utils.py +0 -302
- {pytensor-2.24.2 → pytensor-2.25.0}/LICENSE.txt +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/MANIFEST.in +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/README.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/.templates/layout.html +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/LICENSE.txt +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/README.md +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/acknowledgement.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/bcast.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/bcast.svg +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/core_development_guide.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/css.inc +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/environment.yml +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/apply.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/apply.svg +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/apply2.svg +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/ctype.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/inplace.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/op.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/scan.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/tips.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/type.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/unittest.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/extending/using_params.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/faq.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/glossary.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/images/blocksparse.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/images/lstm.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/images/talk2010.gif +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/images/talk2010.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/install.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/internal/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/introduction.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/function.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/io.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/gradient.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/graph/features.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/graph/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/graph/op.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/graph/type.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/printing.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/sandbox/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/sandbox/linalg.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/scan.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/random/basic.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/random/utils.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/library/typed_list.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/links.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/optimizations.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/pylintrc +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/ccodegen.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/compilation.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/debugging_with_stepmode.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/elemwise_compiler.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/function.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/functional.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/how_to_make_ops.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/index2.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/interactive_debugger.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/logistic_regression_example.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/performance.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/randomnumbers.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/rethinkccodegen.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/sandbox.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/software.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/sparse.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/sandbox/tensoroptools.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/apply.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/index.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/doc/user_guide.rst +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/breakpoint.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/builders.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/io.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/mode.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/ops.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/features.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/op.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/replace.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/graph/type.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/ifelse.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/slinalg.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/link/utils.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/misc/safe_asarray.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/py.typed +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/scan/views.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/sandbox/sp.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/type.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/conv/abstract_conv.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/inplace.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/op.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/subtensor.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/special.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/var.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/updates.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor/version.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor.egg-info/SOURCES.txt +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/setup.cfg +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/setup.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_breakpoint.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_gradient.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_ifelse.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_printing.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/tests/test_updates.py +0 -0
- {pytensor-2.24.2 → pytensor-2.25.0}/versioneer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pytensor
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.25.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
6
|
License: .. _license:
|
|
@@ -75,7 +75,7 @@ License-File: LICENSE.txt
|
|
|
75
75
|
Requires-Dist: setuptools>=59.0.0
|
|
76
76
|
Requires-Dist: scipy<1.14,>=0.14
|
|
77
77
|
Requires-Dist: numpy<2,>=1.17.0
|
|
78
|
-
Requires-Dist: filelock
|
|
78
|
+
Requires-Dist: filelock>=3.15
|
|
79
79
|
Requires-Dist: etuples
|
|
80
80
|
Requires-Dist: logical-unification
|
|
81
81
|
Requires-Dist: miniKanren
|
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
# serve to show the default value.
|
|
13
13
|
|
|
14
14
|
# If your extensions are in another directory, add it here. If the directory
|
|
15
|
-
# is relative to the documentation root, use
|
|
15
|
+
# is relative to the documentation root, use Path.absolute to make it
|
|
16
16
|
# absolute, like shown here.
|
|
17
|
-
# sys.path.append(
|
|
17
|
+
# sys.path.append(str(Path("some/directory").absolute()))
|
|
18
18
|
|
|
19
19
|
import os
|
|
20
|
+
import inspect
|
|
20
21
|
import sys
|
|
21
22
|
import pytensor
|
|
22
23
|
|
|
@@ -236,11 +237,9 @@ def linkcode_resolve(domain, info):
|
|
|
236
237
|
obj = sys.modules[info["module"]]
|
|
237
238
|
for part in info["fullname"].split("."):
|
|
238
239
|
obj = getattr(obj, part)
|
|
239
|
-
import inspect
|
|
240
|
-
import os
|
|
241
240
|
|
|
242
|
-
fn = inspect.getsourcefile(obj)
|
|
243
|
-
fn =
|
|
241
|
+
fn = Path(inspect.getsourcefile(obj))
|
|
242
|
+
fn = fn.relative_to(Path(__file__).parent)
|
|
244
243
|
source, lineno = inspect.getsourcelines(obj)
|
|
245
244
|
return fn, lineno, lineno + len(source) - 1
|
|
246
245
|
|
|
@@ -510,116 +510,12 @@ import ``pytensor`` and print the config variable, as in:
|
|
|
510
510
|
|
|
511
511
|
Removing these asserts can speed up execution.
|
|
512
512
|
|
|
513
|
-
.. attribute:: config.dnn__enabled
|
|
514
|
-
|
|
515
|
-
String value: ``'auto'``, ``'True'``, ``'False'``, ``'no_check'``
|
|
516
|
-
|
|
517
|
-
Default: ``'auto'``
|
|
518
|
-
|
|
519
|
-
If ``'auto'``, automatically detect and use
|
|
520
|
-
`cuDNN <https://developer.nvidia.com/cudnn>`_ when it is available.
|
|
521
|
-
If cuDNN is unavailable, do not raise an error.
|
|
522
|
-
|
|
523
|
-
If ``'True'``, require the use of cuDNN. If cuDNN is unavailable, raise an error.
|
|
524
|
-
|
|
525
|
-
If ``'False'``, neither use cuDNN nor check if it is available.
|
|
526
|
-
|
|
527
|
-
If ``'no_check'``, assume cuDNN is present and that the versions between the
|
|
528
|
-
header and library match.
|
|
529
|
-
|
|
530
|
-
.. attribute:: config.dnn__include_path
|
|
531
|
-
|
|
532
|
-
Default: ``include`` sub-folder in CUDA root directory, or headers paths defined for the compiler.
|
|
533
|
-
|
|
534
|
-
Location of the cuDNN header.
|
|
535
|
-
|
|
536
|
-
.. attribute:: config.dnn__library_path
|
|
537
|
-
|
|
538
|
-
Default: Library sub-folder (``lib64`` on Linux) in CUDA root directory, or
|
|
539
|
-
libraries paths defined for the compiler.
|
|
540
|
-
|
|
541
|
-
Location of the cuDNN library.
|
|
542
|
-
|
|
543
513
|
.. attribute:: config.conv__assert_shape
|
|
544
514
|
|
|
545
515
|
If ``True``, ``AbstractConv*`` :class:`Op`\s will verify that user-provided shapes
|
|
546
516
|
match the run-time shapes. This is a debugging option, and may slow down
|
|
547
517
|
compilation.
|
|
548
518
|
|
|
549
|
-
.. attribute:: config.dnn.conv.workmem
|
|
550
|
-
|
|
551
|
-
Deprecated, use :attr:`config.dnn__conv__algo_fwd`.
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
.. attribute:: config.dnn.conv.workmem_bwd
|
|
555
|
-
|
|
556
|
-
Deprecated, use :attr:`config.dnn__conv__algo_bwd_filter` and
|
|
557
|
-
:attr:`config.dnn__conv__algo_bwd_data` instead.
|
|
558
|
-
|
|
559
|
-
.. attribute:: config.dnn__conv__algo_fwd
|
|
560
|
-
|
|
561
|
-
String value:
|
|
562
|
-
``'small'``, ``'none'``, ``'large'``, ``'fft'``, ``'fft_tiling'``,
|
|
563
|
-
``'winograd'``, ``'winograd_non_fused'``, ``'guess_once'``, ``'guess_on_shape_change'``,
|
|
564
|
-
``'time_once'``, ``'time_on_shape_change'``.
|
|
565
|
-
|
|
566
|
-
Default: ``'small'``
|
|
567
|
-
|
|
568
|
-
3d convolution only support ``'none'``, ``'small'``, ``'fft_tiling'``, ``'guess_once'``,
|
|
569
|
-
``'guess_on_shape_change'``, ``'time_once'``, ``'time_on_shape_change'``.
|
|
570
|
-
|
|
571
|
-
.. attribute:: config.dnn.conv.algo_bwd
|
|
572
|
-
|
|
573
|
-
Deprecated, use :attr:`config.dnn__conv__algo_bwd_filter` and
|
|
574
|
-
:attr:`config.dnn__conv__algo_bwd_data` instead.
|
|
575
|
-
|
|
576
|
-
.. attribute:: config.dnn__conv__algo_bwd_filter
|
|
577
|
-
|
|
578
|
-
String value:
|
|
579
|
-
``'none'``, ``'deterministic'``, ``'fft'``, ``'small'``, ``'winograd_non_fused'``, ``'fft_tiling'``, ``'guess_once'``,
|
|
580
|
-
``'guess_on_shape_change'``, ``'time_once'``, ``'time_on_shape_change'``.
|
|
581
|
-
|
|
582
|
-
Default: ``'none'``
|
|
583
|
-
|
|
584
|
-
3d convolution only supports ``'none'``, ``'small'``, ``'guess_once'``,
|
|
585
|
-
``'guess_on_shape_change'``, ``'time_once'``, ``'time_on_shape_change'``.
|
|
586
|
-
|
|
587
|
-
.. attribute:: config.dnn__conv__algo_bwd_data
|
|
588
|
-
|
|
589
|
-
String value:
|
|
590
|
-
``'none'``, ``'deterministic'``, ``'fft'``, ``'fft_tiling'``, ``'winograd'``,
|
|
591
|
-
``'winograd_non_fused'``, ``'guess_once'``, ``'guess_on_shape_change'``, ``'time_once'``,
|
|
592
|
-
``'time_on_shape_change'``.
|
|
593
|
-
|
|
594
|
-
Default: ``'none'``
|
|
595
|
-
|
|
596
|
-
3d convolution only supports ``'none'``, ``'deterministic'``, ``'fft_tiling'``
|
|
597
|
-
``'guess_once'``, ``'guess_on_shape_change'``, ``'time_once'``,
|
|
598
|
-
``'time_on_shape_change'``.
|
|
599
|
-
|
|
600
|
-
.. attribute:: config.magma__enabled
|
|
601
|
-
|
|
602
|
-
String value: ``'True'``, ``'False'``
|
|
603
|
-
|
|
604
|
-
Default: ``'False'``
|
|
605
|
-
|
|
606
|
-
If ``'True'``, use `magma <http://icl.cs.utk.edu/magma/>`_ for matrix
|
|
607
|
-
computations.
|
|
608
|
-
|
|
609
|
-
If ``'False'``, disable magma.
|
|
610
|
-
|
|
611
|
-
.. attribute:: config.magma__include_path
|
|
612
|
-
|
|
613
|
-
Default: ``''``
|
|
614
|
-
|
|
615
|
-
Location of the magma headers.
|
|
616
|
-
|
|
617
|
-
.. attribute:: config.magma__library_path
|
|
618
|
-
|
|
619
|
-
Default: ``''``
|
|
620
|
-
|
|
621
|
-
Location of the magma library.
|
|
622
|
-
|
|
623
519
|
.. attribute:: config.ctc__root
|
|
624
520
|
|
|
625
521
|
Default: ``''``
|
|
@@ -76,10 +76,9 @@ visualize it with :py:func:`pytensor.printing.pydotprint` as follows:
|
|
|
76
76
|
.. code:: python
|
|
77
77
|
|
|
78
78
|
from pytensor.printing import pydotprint
|
|
79
|
-
import
|
|
79
|
+
from pathlib import Path
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
os.makedirs('examples')
|
|
81
|
+
Path("examples").mkdir(exist_ok=True)
|
|
83
82
|
pydotprint(predict, 'examples/mlp.png')
|
|
84
83
|
|
|
85
84
|
|
|
@@ -259,7 +259,7 @@ PyTensor/BLAS speed test:
|
|
|
259
259
|
|
|
260
260
|
.. code-block:: bash
|
|
261
261
|
|
|
262
|
-
python
|
|
262
|
+
python $(python -c "import pathlib, pytensor; print(pathlib.Path(pytensor.__file__).parent / 'misc/check_blas.py')")
|
|
263
263
|
|
|
264
264
|
This will print a table with different versions of BLAS/numbers of
|
|
265
265
|
threads on multiple CPUs. It will also print some PyTensor/NumPy
|
|
@@ -23,9 +23,9 @@ __docformat__ = "restructuredtext en"
|
|
|
23
23
|
# Set a default logger. It is important to do this before importing some other
|
|
24
24
|
# pytensor code, since this code may want to log some messages.
|
|
25
25
|
import logging
|
|
26
|
-
import os
|
|
27
26
|
import sys
|
|
28
27
|
from functools import singledispatch
|
|
28
|
+
from pathlib import Path
|
|
29
29
|
from typing import Any, NoReturn, Optional
|
|
30
30
|
|
|
31
31
|
from pytensor.version import version as __version__
|
|
@@ -52,10 +52,8 @@ def disable_log_handler(logger=pytensor_logger, handler=logging_default_handler)
|
|
|
52
52
|
|
|
53
53
|
# Raise a meaningful warning/error if the pytensor directory is in the Python
|
|
54
54
|
# path.
|
|
55
|
-
rpath =
|
|
56
|
-
for p in sys.path:
|
|
57
|
-
if os.path.realpath(p) != rpath:
|
|
58
|
-
continue
|
|
55
|
+
rpath = Path(__file__).parent.resolve()
|
|
56
|
+
if any(rpath == Path(p).resolve() for p in sys.path):
|
|
59
57
|
raise RuntimeError("You have the pytensor directory in your Python path.")
|
|
60
58
|
|
|
61
59
|
from pytensor.configdefaults import config
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-07-
|
|
11
|
+
"date": "2024-07-09T17:06:59+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.
|
|
14
|
+
"full-revisionid": "a6e79f28775c39996fb746bf3f369b422c94cfcf",
|
|
15
|
+
"version": "2.25.0"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -4,7 +4,6 @@ It is used by the "pytensor-cache" CLI tool, located in the /bin folder of the r
|
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
import logging
|
|
7
|
-
import os
|
|
8
7
|
import pickle
|
|
9
8
|
import shutil
|
|
10
9
|
from collections import Counter
|
|
@@ -33,12 +32,11 @@ def cleanup():
|
|
|
33
32
|
If there is no key left for a compiled module, we delete the module.
|
|
34
33
|
|
|
35
34
|
"""
|
|
36
|
-
|
|
37
|
-
for directory in os.listdir(compiledir):
|
|
35
|
+
for directory in config.compiledir.iterdir():
|
|
38
36
|
try:
|
|
39
|
-
filename =
|
|
37
|
+
filename = directory / "key.pkl"
|
|
40
38
|
# print file
|
|
41
|
-
with open(
|
|
39
|
+
with filename.open("rb") as file:
|
|
42
40
|
try:
|
|
43
41
|
keydata = pickle.load(file)
|
|
44
42
|
|
|
@@ -79,7 +77,7 @@ def cleanup():
|
|
|
79
77
|
"the directory containing it."
|
|
80
78
|
)
|
|
81
79
|
if len(keydata.keys) == 0:
|
|
82
|
-
shutil.rmtree(
|
|
80
|
+
shutil.rmtree(directory)
|
|
83
81
|
|
|
84
82
|
except (EOFError, AttributeError):
|
|
85
83
|
_logger.error(
|
|
@@ -117,11 +115,11 @@ def print_compiledir_content():
|
|
|
117
115
|
big_key_files = []
|
|
118
116
|
total_key_sizes = 0
|
|
119
117
|
nb_keys = Counter()
|
|
120
|
-
for dir in
|
|
121
|
-
filename =
|
|
122
|
-
if not
|
|
118
|
+
for dir in config.compiledir.iterdir():
|
|
119
|
+
filename = dir / "key.pkl"
|
|
120
|
+
if not filename.exists():
|
|
123
121
|
continue
|
|
124
|
-
with open(
|
|
122
|
+
with filename.open("rb") as file:
|
|
125
123
|
try:
|
|
126
124
|
keydata = pickle.load(file)
|
|
127
125
|
ops = list({x for x in flatten(keydata.keys) if isinstance(x, Op)})
|
|
@@ -134,15 +132,11 @@ def print_compiledir_content():
|
|
|
134
132
|
{x for x in flatten(keydata.keys) if isinstance(x, CType)}
|
|
135
133
|
)
|
|
136
134
|
compile_start = compile_end = float("nan")
|
|
137
|
-
for fn in
|
|
138
|
-
if fn.
|
|
139
|
-
compile_start =
|
|
140
|
-
|
|
141
|
-
)
|
|
142
|
-
elif fn.endswith(".so"):
|
|
143
|
-
compile_end = os.path.getmtime(
|
|
144
|
-
os.path.join(compiledir, dir, fn)
|
|
145
|
-
)
|
|
135
|
+
for fn in dir.iterdir():
|
|
136
|
+
if fn.name == "mod.c":
|
|
137
|
+
compile_start = fn.stat().st_mtime
|
|
138
|
+
elif fn.suffix == ".so":
|
|
139
|
+
compile_end = fn.stat().st_mtime
|
|
146
140
|
compile_time = compile_end - compile_start
|
|
147
141
|
if len(ops) == 1:
|
|
148
142
|
table.append((dir, ops[0], types, compile_time))
|
|
@@ -153,7 +147,7 @@ def print_compiledir_content():
|
|
|
153
147
|
(dir, ops_to_str, types_to_str, compile_time)
|
|
154
148
|
)
|
|
155
149
|
|
|
156
|
-
size =
|
|
150
|
+
size = filename.stat().st_size
|
|
157
151
|
total_key_sizes += size
|
|
158
152
|
if size > max_key_file_size:
|
|
159
153
|
big_key_files.append((dir, size, ops))
|
|
@@ -239,8 +233,8 @@ def basecompiledir_ls():
|
|
|
239
233
|
"""
|
|
240
234
|
subdirs = []
|
|
241
235
|
others = []
|
|
242
|
-
for f in
|
|
243
|
-
if
|
|
236
|
+
for f in config.base_compiledir.iterdir():
|
|
237
|
+
if f.is_dir():
|
|
244
238
|
subdirs.append(f)
|
|
245
239
|
else:
|
|
246
240
|
others.append(f)
|
|
@@ -6,6 +6,7 @@ in the same compilation directory (which can cause crashes).
|
|
|
6
6
|
import os
|
|
7
7
|
import threading
|
|
8
8
|
from contextlib import contextmanager
|
|
9
|
+
from pathlib import Path
|
|
9
10
|
|
|
10
11
|
import filelock
|
|
11
12
|
|
|
@@ -35,7 +36,7 @@ def force_unlock(lock_dir: os.PathLike):
|
|
|
35
36
|
Path to a directory that was locked with `lock_ctx`.
|
|
36
37
|
"""
|
|
37
38
|
|
|
38
|
-
fl = filelock.FileLock(
|
|
39
|
+
fl = filelock.FileLock(Path(lock_dir) / ".lock")
|
|
39
40
|
fl.release(force=True)
|
|
40
41
|
|
|
41
42
|
dir_key = f"{lock_dir}-{os.getpid()}"
|
|
@@ -72,7 +73,7 @@ def lock_ctx(
|
|
|
72
73
|
|
|
73
74
|
if dir_key not in local_mem._locks:
|
|
74
75
|
local_mem._locks[dir_key] = True
|
|
75
|
-
fl = filelock.FileLock(
|
|
76
|
+
fl = filelock.FileLock(Path(lock_dir) / ".lock")
|
|
76
77
|
fl.acquire(timeout=timeout)
|
|
77
78
|
try:
|
|
78
79
|
yield
|
|
@@ -30,6 +30,7 @@ from pytensor.configdefaults import config
|
|
|
30
30
|
from pytensor.graph.basic import Variable, io_toposort
|
|
31
31
|
from pytensor.graph.destroyhandler import DestroyHandler
|
|
32
32
|
from pytensor.graph.features import AlreadyThere, BadOptimization
|
|
33
|
+
from pytensor.graph.fg import Output
|
|
33
34
|
from pytensor.graph.op import HasInnerGraph, Op
|
|
34
35
|
from pytensor.graph.utils import InconsistencyError, MethodNotDefined
|
|
35
36
|
from pytensor.link.basic import Container, LocalLinker
|
|
@@ -628,7 +629,9 @@ def _is_used_in_graph(fgraph, var):
|
|
|
628
629
|
True if `var` is used by another node in the graph.
|
|
629
630
|
|
|
630
631
|
"""
|
|
631
|
-
return
|
|
632
|
+
return any(
|
|
633
|
+
client for client, _ in fgraph.clients[var] if not isinstance(client.op, Output)
|
|
634
|
+
)
|
|
632
635
|
|
|
633
636
|
|
|
634
637
|
def _check_strides_match(a, b, warn_err, op):
|
|
@@ -977,7 +980,7 @@ def _check_preallocated_output(
|
|
|
977
980
|
# disable memory checks in that mode, since they were already run.
|
|
978
981
|
try:
|
|
979
982
|
changed_inner_mode = False
|
|
980
|
-
if isinstance(
|
|
983
|
+
if isinstance(node.op, HasInnerGraph):
|
|
981
984
|
fn = node.op.fn
|
|
982
985
|
if not (fn and hasattr(fn, "maker") and hasattr(fn.maker, "mode")):
|
|
983
986
|
_logger.warning(f"Expected pytensor function not found in {node.op}.fn")
|
|
@@ -1132,18 +1135,14 @@ class _FunctionGraphEvent:
|
|
|
1132
1135
|
|
|
1133
1136
|
def __init__(self, kind, node, idx=None, reason=None):
|
|
1134
1137
|
self.kind = kind
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
self.op = "output"
|
|
1138
|
-
else:
|
|
1139
|
-
self.node = node
|
|
1140
|
-
self.op = node.op
|
|
1138
|
+
self.node = node
|
|
1139
|
+
self.op = node.op
|
|
1141
1140
|
self.idx = idx
|
|
1142
1141
|
self.reason = str(reason)
|
|
1143
1142
|
|
|
1144
1143
|
def __str__(self):
|
|
1145
1144
|
if self.kind == "change":
|
|
1146
|
-
if self.op
|
|
1145
|
+
if not isinstance(self.op, Output):
|
|
1147
1146
|
msg = str(len(self.node.inputs))
|
|
1148
1147
|
else:
|
|
1149
1148
|
msg = ""
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
3
|
import traceback as tb
|
|
4
|
+
from collections.abc import Iterable
|
|
5
|
+
from pathlib import Path
|
|
4
6
|
|
|
7
|
+
import pytensor.misc.pkl_utils
|
|
5
8
|
from pytensor.compile.function.pfunc import pfunc
|
|
6
9
|
from pytensor.compile.function.types import orig_function
|
|
10
|
+
from pytensor.compile.mode import Mode
|
|
11
|
+
from pytensor.compile.profiling import ProfileStats
|
|
12
|
+
from pytensor.graph import Variable
|
|
7
13
|
|
|
8
14
|
|
|
9
15
|
__all__ = ["types", "pfunc"]
|
|
@@ -13,20 +19,24 @@ _logger = logging.getLogger("pytensor.compile.function")
|
|
|
13
19
|
|
|
14
20
|
|
|
15
21
|
def function_dump(
|
|
16
|
-
filename,
|
|
17
|
-
inputs,
|
|
18
|
-
outputs=None,
|
|
19
|
-
mode=None,
|
|
20
|
-
updates
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
filename: str | Path,
|
|
23
|
+
inputs: Iterable[Variable],
|
|
24
|
+
outputs: Variable | Iterable[Variable] | dict[str, Variable] | None = None,
|
|
25
|
+
mode: str | Mode | None = None,
|
|
26
|
+
updates: Iterable[tuple[Variable, Variable]]
|
|
27
|
+
| dict[Variable, Variable]
|
|
28
|
+
| None = None,
|
|
29
|
+
givens: Iterable[tuple[Variable, Variable]]
|
|
30
|
+
| dict[Variable, Variable]
|
|
31
|
+
| None = None,
|
|
32
|
+
no_default_updates: bool = False,
|
|
33
|
+
accept_inplace: bool = False,
|
|
34
|
+
name: str | None = None,
|
|
35
|
+
rebuild_strict: bool = True,
|
|
36
|
+
allow_input_downcast: bool | None = None,
|
|
37
|
+
profile: bool | ProfileStats | None = None,
|
|
38
|
+
on_unused_input: str | None = None,
|
|
39
|
+
extra_tag_to_remove: str | None = None,
|
|
30
40
|
):
|
|
31
41
|
"""
|
|
32
42
|
This is helpful to make a reproducible case for problems during PyTensor
|
|
@@ -59,24 +69,21 @@ def function_dump(
|
|
|
59
69
|
`['annotations', 'replacement_of', 'aggregation_scheme', 'roles']`
|
|
60
70
|
|
|
61
71
|
"""
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
)
|
|
77
|
-
with open(filename, "wb") as f:
|
|
78
|
-
import pytensor.misc.pkl_utils
|
|
79
|
-
|
|
72
|
+
d = {
|
|
73
|
+
"inputs": inputs,
|
|
74
|
+
"outputs": outputs,
|
|
75
|
+
"mode": mode,
|
|
76
|
+
"updates": updates,
|
|
77
|
+
"givens": givens,
|
|
78
|
+
"no_default_updates": no_default_updates,
|
|
79
|
+
"accept_inplace": accept_inplace,
|
|
80
|
+
"name": name,
|
|
81
|
+
"rebuild_strict": rebuild_strict,
|
|
82
|
+
"allow_input_downcast": allow_input_downcast,
|
|
83
|
+
"profile": profile,
|
|
84
|
+
"on_unused_input": on_unused_input,
|
|
85
|
+
}
|
|
86
|
+
with Path(filename).open("wb") as f:
|
|
80
87
|
pickler = pytensor.misc.pkl_utils.StripPickler(
|
|
81
88
|
f, protocol=-1, extra_tag_to_remove=extra_tag_to_remove
|
|
82
89
|
)
|
|
@@ -84,18 +91,22 @@ def function_dump(
|
|
|
84
91
|
|
|
85
92
|
|
|
86
93
|
def function(
|
|
87
|
-
inputs,
|
|
88
|
-
outputs=None,
|
|
89
|
-
mode=None,
|
|
90
|
-
updates
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
inputs: Iterable[Variable],
|
|
95
|
+
outputs: Variable | Iterable[Variable] | dict[str, Variable] | None = None,
|
|
96
|
+
mode: str | Mode | None = None,
|
|
97
|
+
updates: Iterable[tuple[Variable, Variable]]
|
|
98
|
+
| dict[Variable, Variable]
|
|
99
|
+
| None = None,
|
|
100
|
+
givens: Iterable[tuple[Variable, Variable]]
|
|
101
|
+
| dict[Variable, Variable]
|
|
102
|
+
| None = None,
|
|
103
|
+
no_default_updates: bool = False,
|
|
104
|
+
accept_inplace: bool = False,
|
|
105
|
+
name: str | None = None,
|
|
106
|
+
rebuild_strict: bool = True,
|
|
107
|
+
allow_input_downcast: bool | None = None,
|
|
108
|
+
profile: bool | ProfileStats | None = None,
|
|
109
|
+
on_unused_input: str | None = None,
|
|
99
110
|
):
|
|
100
111
|
"""
|
|
101
112
|
Return a :class:`callable object <pytensor.compile.function.types.Function>`
|
|
@@ -78,8 +78,6 @@ def view_tree_set(fgraph, v, treeset):
|
|
|
78
78
|
"""
|
|
79
79
|
treeset.add(v)
|
|
80
80
|
for cl, v_input_pos_to_cl in fgraph.clients[v]:
|
|
81
|
-
if cl == "output":
|
|
82
|
-
continue
|
|
83
81
|
vmap = cl.op.view_map
|
|
84
82
|
dmap = cl.op.destroy_map
|
|
85
83
|
for opos, iposlist in chain(vmap.items(), dmap.items()):
|
|
@@ -661,7 +659,7 @@ class Function:
|
|
|
661
659
|
exist_svs = [i.variable for i in maker.inputs]
|
|
662
660
|
|
|
663
661
|
# Check if given ShareVariables exist
|
|
664
|
-
for sv in swap
|
|
662
|
+
for sv in swap:
|
|
665
663
|
if sv not in exist_svs:
|
|
666
664
|
raise ValueError(f"SharedVariable: {sv.name} not found")
|
|
667
665
|
|
|
@@ -713,9 +711,9 @@ class Function:
|
|
|
713
711
|
# it is well tested, we don't share the part of the storage_map.
|
|
714
712
|
if share_memory:
|
|
715
713
|
i_o_vars = maker.fgraph.inputs + maker.fgraph.outputs
|
|
716
|
-
for key in storage_map.
|
|
714
|
+
for key, val in storage_map.items():
|
|
717
715
|
if key not in i_o_vars:
|
|
718
|
-
new_storage_map[memo[key]] =
|
|
716
|
+
new_storage_map[memo[key]] = val
|
|
719
717
|
|
|
720
718
|
if not name and self.name:
|
|
721
719
|
name = self.name + " copy"
|
|
@@ -1202,8 +1200,11 @@ def insert_deepcopy(fgraph, wrapped_inputs, wrapped_outputs):
|
|
|
1202
1200
|
has_destroyers_attr = hasattr(fgraph, "has_destroyers")
|
|
1203
1201
|
|
|
1204
1202
|
for i in range(len(fgraph.outputs)):
|
|
1203
|
+
original_out = fgraph.outputs[i]
|
|
1204
|
+
output_client = fgraph.get_output_client(i)
|
|
1205
|
+
|
|
1205
1206
|
views_of_output_i = set()
|
|
1206
|
-
view_tree_set(fgraph, alias_root(
|
|
1207
|
+
view_tree_set(fgraph, alias_root(original_out), views_of_output_i)
|
|
1207
1208
|
copied = False
|
|
1208
1209
|
# do not allow outputs to be aliased
|
|
1209
1210
|
for j in range(i + 1, len(fgraph.outputs)):
|
|
@@ -1212,16 +1213,16 @@ def insert_deepcopy(fgraph, wrapped_inputs, wrapped_outputs):
|
|
|
1212
1213
|
if fgraph.outputs[j] in views_of_output_i:
|
|
1213
1214
|
if wrapped_outputs[i].borrow and wrapped_outputs[j].borrow:
|
|
1214
1215
|
fgraph.change_node_input(
|
|
1215
|
-
|
|
1216
|
+
*output_client, view_op(original_out), reason=reason
|
|
1216
1217
|
)
|
|
1217
1218
|
else:
|
|
1218
1219
|
fgraph.change_node_input(
|
|
1219
|
-
|
|
1220
|
+
*output_client, deep_copy_op(original_out), reason=reason
|
|
1220
1221
|
)
|
|
1221
1222
|
copied = True
|
|
1222
1223
|
break
|
|
1223
1224
|
|
|
1224
|
-
if not copied:
|
|
1225
|
+
if not copied: # no-break
|
|
1225
1226
|
for input_j in all_graph_inputs:
|
|
1226
1227
|
# do not allow outputs to be aliased to an inputs (j), unless
|
|
1227
1228
|
# a) that j'th input has been 'destroyed' by
|
|
@@ -1239,33 +1240,29 @@ def insert_deepcopy(fgraph, wrapped_inputs, wrapped_outputs):
|
|
|
1239
1240
|
j = fgraph.inputs.index(input_j)
|
|
1240
1241
|
if wrapped_outputs[i].borrow and wrapped_inputs[j].borrow:
|
|
1241
1242
|
fgraph.change_node_input(
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
view_op(fgraph.outputs[i]),
|
|
1243
|
+
*output_client,
|
|
1244
|
+
view_op(original_out),
|
|
1245
1245
|
reason=reason,
|
|
1246
1246
|
)
|
|
1247
1247
|
break
|
|
1248
1248
|
else:
|
|
1249
1249
|
fgraph.change_node_input(
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
deep_copy_op(fgraph.outputs[i]),
|
|
1250
|
+
*output_client,
|
|
1251
|
+
deep_copy_op(original_out),
|
|
1253
1252
|
reason=reason,
|
|
1254
1253
|
)
|
|
1255
1254
|
break
|
|
1256
1255
|
elif wrapped_outputs[i].borrow:
|
|
1257
1256
|
fgraph.change_node_input(
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
view_op(fgraph.outputs[i]),
|
|
1257
|
+
*output_client,
|
|
1258
|
+
view_op(original_out),
|
|
1261
1259
|
reason=reason,
|
|
1262
1260
|
)
|
|
1263
1261
|
break
|
|
1264
1262
|
else:
|
|
1265
1263
|
fgraph.change_node_input(
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
deep_copy_op(fgraph.outputs[i]),
|
|
1264
|
+
*output_client,
|
|
1265
|
+
deep_copy_op(original_out),
|
|
1269
1266
|
reason=reason,
|
|
1270
1267
|
)
|
|
1271
1268
|
break
|
|
@@ -1449,7 +1446,7 @@ class FunctionMaker:
|
|
|
1449
1446
|
if not hasattr(mode.linker, "accept"):
|
|
1450
1447
|
raise ValueError(
|
|
1451
1448
|
"'linker' parameter of FunctionMaker should be "
|
|
1452
|
-
f"a Linker with an accept method or one of {list(pytensor.compile.mode.predefined_linkers
|
|
1449
|
+
f"a Linker with an accept method or one of {list(pytensor.compile.mode.predefined_linkers)}"
|
|
1453
1450
|
)
|
|
1454
1451
|
|
|
1455
1452
|
def __init__(
|