pytensor 2.24.1__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.1/pytensor.egg-info → pytensor-2.25.0}/PKG-INFO +3 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/conf.py +5 -6
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/config.rst +0 -104
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/index.rst +2 -3
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/troubleshooting.rst +1 -1
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/gradients.rst +10 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pyproject.toml +3 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/__init__.py +3 -5
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/_version.py +3 -3
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/compiledir.py +16 -22
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/compilelock.py +3 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/debugmode.py +8 -9
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/function/__init__.py +55 -44
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/function/types.py +19 -22
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/profiling.py +7 -9
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/configdefaults.py +36 -105
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/configparser.py +129 -21
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/d3viz.py +15 -18
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/formatting.py +3 -3
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/gradient.py +82 -3
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/basic.py +8 -3
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/destroyhandler.py +3 -4
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/fg.py +88 -89
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/rewriting/basic.py +10 -12
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/rewriting/utils.py +86 -96
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/utils.py +1 -1
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/basic.py +6 -8
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/cmodule.py +20 -15
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/cutils.py +13 -16
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/lazylinker_c.py +20 -23
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/op.py +26 -24
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/params_type.py +5 -14
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/type.py +4 -6
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/nlinalg.py +5 -6
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/elemwise.py +2 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/random.py +1 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/scalar.py +3 -9
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/scan.py +2 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/tensor_basic.py +4 -8
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/vectorize_codegen.py +2 -4
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/basic.py +17 -1
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/vm.py +5 -8
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/check_duplicate_key.py +10 -17
- {pytensor-2.24.1 → 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.1 → pytensor-2.25.0}/pytensor/printing.py +34 -37
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/raise_op.py +12 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/basic.py +6 -5
- pytensor-2.25.0/pytensor/scalar/c_code/incbet.c +313 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/loop.py +1 -1
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/math.py +28 -27
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/op.py +3 -3
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/rewriting.py +5 -5
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/utils.py +8 -10
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/basic.py +12 -9
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/basic.py +77 -52
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/blas.py +7 -6
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/blas_headers.py +22 -31
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/blockwise.py +2 -4
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/elemwise.py +27 -42
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/extra_ops.py +4 -4
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/io.py +4 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/math.py +149 -186
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/op.py +4 -5
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/basic.py +9 -9
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/utils.py +24 -14
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/elemwise.py +4 -5
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/linalg.py +0 -6
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/math.py +4 -7
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/shape.py +37 -8
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/subtensor.py +109 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/shape.py +6 -8
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/slinalg.py +5 -5
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/subtensor.py +11 -8
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/type.py +1 -1
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/utils.py +34 -16
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/variable.py +8 -8
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/utils.py +22 -50
- {pytensor-2.24.1 → pytensor-2.25.0/pytensor.egg-info}/PKG-INFO +3 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor.egg-info/SOURCES.txt +1 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor.egg-info/requires.txt +2 -1
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_config.py +2 -2
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_gradient.py +39 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_raise_op.py +1 -1
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_rop.py +1 -3
- pytensor-2.24.1/pytensor/misc/pkl_utils.py +0 -302
- {pytensor-2.24.1 → pytensor-2.25.0}/LICENSE.txt +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/MANIFEST.in +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/README.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/.templates/layout.html +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/LICENSE.txt +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/README.md +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/acknowledgement.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/bcast.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/bcast.svg +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/core_development_guide.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/css.inc +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/environment.yml +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/apply.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/apply.svg +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/apply2.svg +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/ctype.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/inplace.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/op.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/scan.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/tips.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/type.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/unittest.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/extending/using_params.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/faq.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/glossary.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/images/blocksparse.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/images/lstm.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/images/talk2010.gif +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/images/talk2010.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/install.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/internal/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/introduction.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/function.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/io.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/gradient.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/graph/features.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/graph/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/graph/op.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/graph/type.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/printing.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/sandbox/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/sandbox/linalg.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/scan.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/random/basic.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/random/utils.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/library/typed_list.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/links.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/optimizations.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/pylintrc +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/ccodegen.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/compilation.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/debugging_with_stepmode.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/elemwise_compiler.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/function.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/functional.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/how_to_make_ops.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/index2.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/interactive_debugger.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/logistic_regression_example.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/performance.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/randomnumbers.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/rethinkccodegen.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/sandbox.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/software.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/sparse.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/sandbox/tensoroptools.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/apply.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/index.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/doc/user_guide.rst +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/breakpoint.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/builders.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/io.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/mode.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/ops.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/features.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/op.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/replace.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/graph/type.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/ifelse.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/slinalg.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/link/utils.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/misc/safe_asarray.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/py.typed +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/scan/views.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/sandbox/sp.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/type.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/conv/abstract_conv.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/inplace.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/special.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/var.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/updates.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor/version.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/setup.cfg +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/setup.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_breakpoint.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_ifelse.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_printing.py +0 -0
- {pytensor-2.24.1 → pytensor-2.25.0}/tests/test_updates.py +0 -0
- {pytensor-2.24.1 → 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
|
|
@@ -94,6 +94,7 @@ Requires-Dist: pytest-cov>=2.6.1; extra == "tests"
|
|
|
94
94
|
Requires-Dist: coverage>=5.1; extra == "tests"
|
|
95
95
|
Requires-Dist: pytest-benchmark; extra == "tests"
|
|
96
96
|
Requires-Dist: pytest-mock; extra == "tests"
|
|
97
|
+
Requires-Dist: pytest-sphinx; extra == "tests"
|
|
97
98
|
Provides-Extra: rtd
|
|
98
99
|
Requires-Dist: sphinx<6,>=5.1.0; extra == "rtd"
|
|
99
100
|
Requires-Dist: pygments; extra == "rtd"
|
|
@@ -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
|
|
@@ -267,6 +267,16 @@ or, making use of the R-operator:
|
|
|
267
267
|
>>> f([4, 4], [2, 2])
|
|
268
268
|
array([ 4., 4.])
|
|
269
269
|
|
|
270
|
+
There is a builtin helper that uses the first method
|
|
271
|
+
|
|
272
|
+
>>> x = pt.dvector('x')
|
|
273
|
+
>>> v = pt.dvector('v')
|
|
274
|
+
>>> y = pt.sum(x ** 2)
|
|
275
|
+
>>> Hv = pytensor.gradient.hessian_vector_product(y, x, v)
|
|
276
|
+
>>> f = pytensor.function([x, v], Hv)
|
|
277
|
+
>>> f([4, 4], [2, 2])
|
|
278
|
+
array([ 4., 4.])
|
|
279
|
+
|
|
270
280
|
|
|
271
281
|
Final Pointers
|
|
272
282
|
==============
|
|
@@ -49,7 +49,7 @@ dependencies = [
|
|
|
49
49
|
"setuptools>=59.0.0",
|
|
50
50
|
"scipy>=0.14,<1.14",
|
|
51
51
|
"numpy>=1.17.0,<2",
|
|
52
|
-
"filelock",
|
|
52
|
+
"filelock>=3.15",
|
|
53
53
|
"etuples",
|
|
54
54
|
"logical-unification",
|
|
55
55
|
"miniKanren",
|
|
@@ -75,6 +75,7 @@ tests = [
|
|
|
75
75
|
"coverage>=5.1",
|
|
76
76
|
"pytest-benchmark",
|
|
77
77
|
"pytest-mock",
|
|
78
|
+
"pytest-sphinx",
|
|
78
79
|
]
|
|
79
80
|
rtd = ["sphinx>=5.1.0,<6", "pygments", "pydot", "pydot2", "pydot-ng"]
|
|
80
81
|
jax = ["jax", "jaxlib"]
|
|
@@ -116,7 +117,7 @@ versionfile_build = "pytensor/_version.py"
|
|
|
116
117
|
tag_prefix = "rel-"
|
|
117
118
|
|
|
118
119
|
[tool.pytest]
|
|
119
|
-
addopts = "--durations=50"
|
|
120
|
+
addopts = "--durations=50 --doctest-modules pytensor --ignore=pytensor/misc/check_duplicate_key.py --ignore=pytensor/link"
|
|
120
121
|
testpaths = "tests/"
|
|
121
122
|
|
|
122
123
|
[tool.ruff]
|
|
@@ -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>`
|