pytensor 2.25.5__tar.gz → 2.26.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytensor-2.25.5/pytensor.egg-info → pytensor-2.26.1}/PKG-INFO +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/graph/graph.rst +0 -7
- pytensor-2.26.1/doc/library/graph/index.rst +21 -0
- pytensor-2.26.1/doc/library/graph/op.rst +8 -0
- pytensor-2.26.1/doc/library/graph/replace.rst +8 -0
- pytensor-2.26.1/doc/library/tensor/functional.rst +2 -0
- pytensor-2.26.1/doc/library/tensor/index.rst +33 -0
- pytensor-2.26.1/doc/library/tensor/random/distributions.rst +8 -0
- pytensor-2.25.5/doc/library/tensor/random/utils.rst → pytensor-2.26.1/doc/library/tensor/random/index.rst +41 -16
- {pytensor-2.25.5 → pytensor-2.26.1}/pyproject.toml +4 -3
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/_version.py +3 -3
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/function/types.py +122 -127
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/gradient.py +0 -3
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/null_type.py +0 -3
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/op.py +16 -3
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/type.py +1 -4
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/ifelse.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/cmodule.py +40 -6
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/__init__.py +1 -0
- pytensor-2.26.1/pytensor/link/pytorch/dispatch/blockwise.py +32 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/scalar.py +11 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/shape.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/subtensor.py +7 -2
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/basic.py +42 -41
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/loop.py +2 -2
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/rewriting.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/basic.py +11 -12
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/rewriting.py +5 -5
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/sandbox/sp.py +2 -3
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/basic.py +7 -8
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/blas.py +32 -10
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/blockwise.py +46 -27
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/elemwise.py +67 -97
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/extra_ops.py +40 -67
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/fft.py +5 -4
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/inplace.py +2 -2
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/math.py +83 -31
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/nlinalg.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/op.py +5 -13
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/rewriting/basic.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/rewriting/jax.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/basic.py +24 -14
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/blas.py +12 -8
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/blas_scipy.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/blockwise.py +82 -4
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/elemwise.py +4 -7
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/jax.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/linalg.py +290 -2
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/math.py +159 -236
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/shape.py +2 -7
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/subtensor.py +72 -41
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/shape.py +2 -13
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/sharedvar.py +1 -2
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/slinalg.py +296 -101
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/sort.py +1 -2
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/subtensor.py +18 -9
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/type.py +5 -6
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/type_other.py +0 -6
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/variable.py +9 -7
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/typed_list/rewriting.py +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1/pytensor.egg-info}/PKG-INFO +1 -1
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor.egg-info/SOURCES.txt +4 -3
- pytensor-2.25.5/doc/library/graph/index.rst +0 -21
- pytensor-2.25.5/doc/library/graph/op.rst +0 -12
- pytensor-2.25.5/doc/library/tensor/index.rst +0 -31
- pytensor-2.25.5/doc/library/tensor/random/basic.rst +0 -161
- pytensor-2.25.5/doc/library/tensor/random/index.rst +0 -21
- pytensor-2.25.5/pytensor/misc/safe_asarray.py +0 -57
- {pytensor-2.25.5 → pytensor-2.26.1}/LICENSE.txt +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/MANIFEST.in +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/README.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/.templates/layout.html +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/LICENSE.txt +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/README.md +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/acknowledgement.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/bcast.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/bcast.svg +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/conf.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/core_development_guide.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/css.inc +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/environment.yml +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/apply.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/apply.svg +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/apply2.svg +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/ctype.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/inplace.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/op.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/scan.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/tips.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/type.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/unittest.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/extending/using_params.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/faq.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/glossary.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/images/blocksparse.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/images/lstm.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/images/talk2010.gif +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/images/talk2010.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/install.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/internal/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/introduction.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/function.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/io.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/config.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/gradient.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/graph/features.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/graph/type.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/printing.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/sandbox/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/sandbox/linalg.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/scan.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/library/typed_list.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/links.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/optimizations.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/pylintrc +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/troubleshooting.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/apply.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/index.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/prng.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/doc/user_guide.rst +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/breakpoint.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/builders.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/debugmode.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/io.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/mode.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/ops.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/profiling.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/configdefaults.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/configparser.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/features.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/fg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/replace.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/graph/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/op.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/c/type.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/slinalg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/link/vm.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/printing.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/py.typed +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/raise_op.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/math.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/op.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/scan/views.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/type.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/blas_headers.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/conv/abstract_conv.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/einsum.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/io.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/pad.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/special.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/var.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/updates.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor/utils.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/setup.cfg +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/setup.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_breakpoint.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_config.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_gradient.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_ifelse.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_printing.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_raise_op.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_rop.py +0 -0
- {pytensor-2.25.5 → pytensor-2.26.1}/tests/test_updates.py +0 -0
|
@@ -4,12 +4,5 @@
|
|
|
4
4
|
:mod:`graph` -- Interface for the PyTensor graph
|
|
5
5
|
================================================
|
|
6
6
|
|
|
7
|
-
---------
|
|
8
|
-
Reference
|
|
9
|
-
---------
|
|
10
|
-
|
|
11
7
|
.. automodule:: pytensor.graph.basic
|
|
12
|
-
:platform: Unix, Windows
|
|
13
|
-
:synopsis: Interface for types of symbolic variables
|
|
14
8
|
:members:
|
|
15
|
-
.. moduleauthor:: LISA
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
.. _libdoc_graph:
|
|
3
|
+
|
|
4
|
+
========================================
|
|
5
|
+
:mod:`graph` -- PyTensor Graph Internals
|
|
6
|
+
========================================
|
|
7
|
+
|
|
8
|
+
.. module:: graph
|
|
9
|
+
|
|
10
|
+
.. moduleauthor:: LISA
|
|
11
|
+
|
|
12
|
+
.. toctree::
|
|
13
|
+
:maxdepth: 1
|
|
14
|
+
|
|
15
|
+
graph
|
|
16
|
+
fgraph
|
|
17
|
+
replace
|
|
18
|
+
features
|
|
19
|
+
op
|
|
20
|
+
type
|
|
21
|
+
utils
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
.. _libdoc_tensor:
|
|
2
|
+
|
|
3
|
+
===============================================
|
|
4
|
+
:mod:`tensor` -- Tensor operations in PyTensor
|
|
5
|
+
===============================================
|
|
6
|
+
|
|
7
|
+
.. module:: tensor
|
|
8
|
+
|
|
9
|
+
PyTensor's strength is in expressing symbolic calculations involving tensors.
|
|
10
|
+
|
|
11
|
+
PyTensor tries to emulate the numpy interface as much as possible in the tensor module.
|
|
12
|
+
This means that once TensorVariables are created, it should be possibly to define
|
|
13
|
+
symbolic expressions using calls that look just like numpy calls, such as
|
|
14
|
+
`pt.exp(x).transpose(0, 1)[:, None]`
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
.. toctree::
|
|
19
|
+
:maxdepth: 1
|
|
20
|
+
|
|
21
|
+
basic
|
|
22
|
+
random/index
|
|
23
|
+
utils
|
|
24
|
+
elemwise
|
|
25
|
+
extra_ops
|
|
26
|
+
io
|
|
27
|
+
slinalg
|
|
28
|
+
nlinalg
|
|
29
|
+
fft
|
|
30
|
+
conv
|
|
31
|
+
math_opt
|
|
32
|
+
basic_opt
|
|
33
|
+
functional
|
|
@@ -1,36 +1,37 @@
|
|
|
1
|
-
.. _libdoc_tensor_random_utils:
|
|
2
1
|
|
|
3
|
-
|
|
4
|
-
:mod:`utils` -- Friendly random numbers
|
|
5
|
-
======================================================
|
|
2
|
+
.. _libdoc_tensor_random_basic:
|
|
6
3
|
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
=============================================
|
|
5
|
+
:mod:`random` -- Random number functionality
|
|
6
|
+
=============================================
|
|
7
|
+
|
|
8
|
+
.. module:: pytensor.tensor.random
|
|
9
9
|
:synopsis: symbolic random variables
|
|
10
|
-
.. moduleauthor:: LISA
|
|
11
10
|
|
|
12
|
-
Guide
|
|
13
|
-
=====
|
|
14
11
|
|
|
15
|
-
|
|
12
|
+
The :mod:`pytensor.tensor.random` module provides random-number drawing functionality
|
|
13
|
+
that closely resembles the :mod:`numpy.random` module.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
High-level API
|
|
17
|
+
==============
|
|
18
|
+
|
|
19
|
+
PyTensor assigns NumPy RNG states (i.e. `Generator` objects) to
|
|
16
20
|
each `RandomVariable`. The combination of an RNG state, a specific
|
|
17
21
|
`RandomVariable` type (e.g. `NormalRV`), and a set of distribution parameters
|
|
18
22
|
uniquely defines the `RandomVariable` instances in a graph.
|
|
19
23
|
|
|
20
24
|
This means that a "stream" of distinct RNG states is required in order to
|
|
21
|
-
produce distinct random variables of the same kind.
|
|
25
|
+
produce distinct random variables of the same kind. `RandomStream` provides a
|
|
22
26
|
means of generating distinct random variables in a fully reproducible way.
|
|
23
27
|
|
|
24
28
|
`RandomStream` is also designed to produce simpler graphs and work with more
|
|
25
|
-
sophisticated `Op`\s like `Scan`, which makes it
|
|
29
|
+
sophisticated `Op`\s like `Scan`, which makes it a user-friendly random variable
|
|
26
30
|
interface in PyTensor.
|
|
27
31
|
|
|
28
32
|
For an example of how to use random numbers, see :ref:`Using Random Numbers <using_random_numbers>`.
|
|
29
33
|
|
|
30
34
|
|
|
31
|
-
Reference
|
|
32
|
-
=========
|
|
33
|
-
|
|
34
35
|
.. class:: RandomStream()
|
|
35
36
|
|
|
36
37
|
This is a symbolic stand-in for `numpy.random.Generator`.
|
|
@@ -61,4 +62,28 @@ Reference
|
|
|
61
62
|
|
|
62
63
|
.. method:: uniform, normal, binomial, multinomial, random_integers, ...
|
|
63
64
|
|
|
64
|
-
See :
|
|
65
|
+
See :ref: Available distributions `<_libdoc_tensor_random_distributions>`.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
.. testcode:: constructors
|
|
69
|
+
|
|
70
|
+
from pytensor.tensor.random.utils import RandomStream
|
|
71
|
+
|
|
72
|
+
rng = RandomStream()
|
|
73
|
+
sample = rng.normal(0, 1, size=(2, 2))
|
|
74
|
+
|
|
75
|
+
fn = pytensor.function([], sample)
|
|
76
|
+
print(fn(), fn()) # different numbers due to default updates
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
Low-level objects
|
|
80
|
+
=================
|
|
81
|
+
|
|
82
|
+
.. automodule:: pytensor.tensor.random.op
|
|
83
|
+
:members: RandomVariable, default_rng
|
|
84
|
+
|
|
85
|
+
..automodule:: pytensor.tensor.random.type
|
|
86
|
+
:members: RandomType, RandomGeneratorType, random_generator_type
|
|
87
|
+
|
|
88
|
+
.. automodule:: pytensor.tensor.random.var
|
|
89
|
+
:members: RandomGeneratorSharedVariable
|
|
@@ -116,9 +116,10 @@ versionfile_source = "pytensor/_version.py"
|
|
|
116
116
|
versionfile_build = "pytensor/_version.py"
|
|
117
117
|
tag_prefix = "rel-"
|
|
118
118
|
|
|
119
|
-
[tool.pytest]
|
|
120
|
-
addopts = "--durations=50
|
|
121
|
-
testpaths = "tests/"
|
|
119
|
+
[tool.pytest.ini_options]
|
|
120
|
+
addopts = "--durations=50 --doctest-modules --ignore=pytensor/link --ignore=pytensor/misc/check_duplicate_key.py"
|
|
121
|
+
testpaths = ["pytensor/", "tests/"]
|
|
122
|
+
xfail_strict = true
|
|
122
123
|
|
|
123
124
|
[tool.ruff]
|
|
124
125
|
line-length = 88
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-
|
|
11
|
+
"date": "2024-11-11T09:09:00+0100",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.
|
|
14
|
+
"full-revisionid": "f2ad711ff22c4d56d210e4bd67c1e727481fd818",
|
|
15
|
+
"version": "2.26.1"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -326,8 +326,8 @@ class Function:
|
|
|
326
326
|
def __init__(
|
|
327
327
|
self,
|
|
328
328
|
vm: "VM",
|
|
329
|
-
input_storage,
|
|
330
|
-
output_storage,
|
|
329
|
+
input_storage: list[Container],
|
|
330
|
+
output_storage: list[Container],
|
|
331
331
|
indices,
|
|
332
332
|
outputs,
|
|
333
333
|
defaults,
|
|
@@ -372,7 +372,6 @@ class Function:
|
|
|
372
372
|
name
|
|
373
373
|
A string name.
|
|
374
374
|
"""
|
|
375
|
-
# TODO: Rename to `vm`
|
|
376
375
|
self.vm = vm
|
|
377
376
|
self.input_storage = input_storage
|
|
378
377
|
self.output_storage = output_storage
|
|
@@ -388,31 +387,52 @@ class Function:
|
|
|
388
387
|
self.nodes_with_inner_function = []
|
|
389
388
|
self.output_keys = output_keys
|
|
390
389
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
390
|
+
if self.output_keys is not None:
|
|
391
|
+
warnings.warn("output_keys is deprecated.", FutureWarning)
|
|
392
|
+
|
|
393
|
+
assert len(self.input_storage) == len(self.maker.fgraph.inputs)
|
|
394
|
+
assert len(self.output_storage) == len(self.maker.fgraph.outputs)
|
|
395
|
+
|
|
396
|
+
# Group indexes of inputs that are potentially aliased to each other
|
|
397
|
+
# Note: Historically, we only worried about aliasing inputs if they belonged to the same type,
|
|
398
|
+
# even though there could be two distinct types that use the same kinds of underlying objects.
|
|
399
|
+
potential_aliased_input_groups = []
|
|
400
|
+
for inp in maker.inputs:
|
|
401
|
+
# If the input is a shared variable, the memory region is under PyTensor control
|
|
402
|
+
# and can't be aliased.
|
|
403
|
+
if not (
|
|
404
|
+
isinstance(inp, In)
|
|
405
|
+
and inp.borrow
|
|
406
|
+
and not inp.shared
|
|
407
|
+
and hasattr(inp.variable.type, "may_share_memory")
|
|
402
408
|
):
|
|
403
|
-
|
|
404
|
-
|
|
409
|
+
continue
|
|
410
|
+
|
|
411
|
+
for group in potential_aliased_input_groups:
|
|
412
|
+
# If one is super of the other, that means one could be replaced by the other
|
|
413
|
+
if any(
|
|
414
|
+
inp.variable.type.is_super(other_inp.variable.type)
|
|
415
|
+
or other_inp.variable.type.is_super(inp.variable.type)
|
|
416
|
+
for other_inp in group
|
|
417
|
+
):
|
|
418
|
+
group.append(inp)
|
|
419
|
+
break
|
|
420
|
+
else: # no break
|
|
421
|
+
# Input makes a new group
|
|
422
|
+
potential_aliased_input_groups.append([inp])
|
|
423
|
+
|
|
424
|
+
# Potential aliased inputs are those that belong to the same group
|
|
425
|
+
self._potential_aliased_input_groups: tuple[tuple[int, ...], ...] = tuple(
|
|
426
|
+
tuple(maker.inputs.index(inp) for inp in group)
|
|
427
|
+
for group in potential_aliased_input_groups
|
|
428
|
+
if len(group) > 1
|
|
429
|
+
)
|
|
405
430
|
|
|
406
431
|
# We will be popping stuff off this `containers` object. It is a copy.
|
|
407
432
|
containers = list(self.input_storage)
|
|
408
433
|
finder = {}
|
|
409
434
|
inv_finder = {}
|
|
410
435
|
|
|
411
|
-
def distribute(indices, cs, value):
|
|
412
|
-
input.distribute(value, indices, cs)
|
|
413
|
-
for c in cs:
|
|
414
|
-
c.provided += 1
|
|
415
|
-
|
|
416
436
|
# Store the list of names of named inputs.
|
|
417
437
|
named_inputs = []
|
|
418
438
|
# Count the number of un-named inputs.
|
|
@@ -777,6 +797,13 @@ class Function:
|
|
|
777
797
|
f_cpy.maker.fgraph.name = name
|
|
778
798
|
return f_cpy
|
|
779
799
|
|
|
800
|
+
def _restore_defaults(self):
|
|
801
|
+
for i, (required, refeed, value) in enumerate(self.defaults):
|
|
802
|
+
if refeed:
|
|
803
|
+
if isinstance(value, Container):
|
|
804
|
+
value = value.storage[0]
|
|
805
|
+
self[i] = value
|
|
806
|
+
|
|
780
807
|
def __call__(self, *args, **kwargs):
|
|
781
808
|
"""
|
|
782
809
|
Evaluates value of a function on given arguments.
|
|
@@ -805,52 +832,45 @@ class Function:
|
|
|
805
832
|
List of outputs on indices/keys from ``output_subset`` or all of them,
|
|
806
833
|
if ``output_subset`` is not passed.
|
|
807
834
|
"""
|
|
808
|
-
|
|
809
|
-
def restore_defaults():
|
|
810
|
-
for i, (required, refeed, value) in enumerate(self.defaults):
|
|
811
|
-
if refeed:
|
|
812
|
-
if isinstance(value, Container):
|
|
813
|
-
value = value.storage[0]
|
|
814
|
-
self[i] = value
|
|
815
|
-
|
|
835
|
+
input_storage = self.input_storage
|
|
816
836
|
profile = self.profile
|
|
817
|
-
|
|
837
|
+
|
|
838
|
+
if profile:
|
|
839
|
+
t0 = time.perf_counter()
|
|
818
840
|
|
|
819
841
|
output_subset = kwargs.pop("output_subset", None)
|
|
820
|
-
if output_subset is not None
|
|
821
|
-
output_subset
|
|
842
|
+
if output_subset is not None:
|
|
843
|
+
warnings.warn("output_subset is deprecated.", FutureWarning)
|
|
844
|
+
if self.output_keys is not None:
|
|
845
|
+
output_subset = [self.output_keys.index(key) for key in output_subset]
|
|
822
846
|
|
|
823
847
|
# Reinitialize each container's 'provided' counter
|
|
824
848
|
if self.trust_input:
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
s = self.input_storage[i]
|
|
828
|
-
s.storage[0] = arg
|
|
829
|
-
i += 1
|
|
849
|
+
for arg_container, arg in zip(input_storage, args, strict=False):
|
|
850
|
+
arg_container.storage[0] = arg
|
|
830
851
|
else:
|
|
831
|
-
for
|
|
832
|
-
|
|
852
|
+
for arg_container in input_storage:
|
|
853
|
+
arg_container.provided = 0
|
|
833
854
|
|
|
834
|
-
if len(args) + len(kwargs) > len(
|
|
855
|
+
if len(args) + len(kwargs) > len(input_storage):
|
|
835
856
|
raise TypeError("Too many parameter passed to pytensor function")
|
|
836
857
|
|
|
837
858
|
# Set positional arguments
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
# TODO: provide a option for skipping the filter if we really
|
|
841
|
-
# want speed.
|
|
842
|
-
s = self.input_storage[i]
|
|
843
|
-
# see this emails for a discuation about None as input
|
|
859
|
+
for arg_container, arg in zip(input_storage, args, strict=False):
|
|
860
|
+
# See discussion about None as input
|
|
844
861
|
# https://groups.google.com/group/theano-dev/browse_thread/thread/920a5e904e8a8525/4f1b311a28fc27e5
|
|
845
862
|
if arg is None:
|
|
846
|
-
|
|
863
|
+
arg_container.storage[0] = arg
|
|
847
864
|
else:
|
|
848
865
|
try:
|
|
849
|
-
|
|
850
|
-
arg,
|
|
866
|
+
arg_container.storage[0] = arg_container.type.filter(
|
|
867
|
+
arg,
|
|
868
|
+
strict=arg_container.strict,
|
|
869
|
+
allow_downcast=arg_container.allow_downcast,
|
|
851
870
|
)
|
|
852
871
|
|
|
853
872
|
except Exception as e:
|
|
873
|
+
i = input_storage.index(arg_container)
|
|
854
874
|
function_name = "pytensor function"
|
|
855
875
|
argument_name = "argument"
|
|
856
876
|
if self.name:
|
|
@@ -875,85 +895,66 @@ class Function:
|
|
|
875
895
|
+ function_name
|
|
876
896
|
+ f" at index {int(i)} (0-based). {where}"
|
|
877
897
|
) + e.args
|
|
878
|
-
|
|
898
|
+
self._restore_defaults()
|
|
879
899
|
raise
|
|
880
|
-
|
|
881
|
-
i += 1
|
|
900
|
+
arg_container.provided += 1
|
|
882
901
|
|
|
883
902
|
# Set keyword arguments
|
|
884
903
|
if kwargs: # for speed, skip the items for empty kwargs
|
|
885
904
|
for k, arg in kwargs.items():
|
|
886
905
|
self[k] = arg
|
|
887
906
|
|
|
888
|
-
if
|
|
889
|
-
not self.trust_input
|
|
890
|
-
and
|
|
891
|
-
# The getattr is only needed for old pickle
|
|
892
|
-
getattr(self, "_check_for_aliased_inputs", True)
|
|
893
|
-
):
|
|
907
|
+
if not self.trust_input:
|
|
894
908
|
# Collect aliased inputs among the storage space
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
[
|
|
904
|
-
self.maker.inputs[k].variable
|
|
905
|
-
for k in args_share_memory[j]
|
|
906
|
-
],
|
|
907
|
-
[
|
|
908
|
-
self.input_storage[k].storage[0]
|
|
909
|
-
for k in args_share_memory[j]
|
|
910
|
-
],
|
|
911
|
-
)
|
|
909
|
+
for potential_group in self._potential_aliased_input_groups:
|
|
910
|
+
args_share_memory: list[list[int]] = []
|
|
911
|
+
for i in potential_group:
|
|
912
|
+
i_type = self.maker.inputs[i].variable.type
|
|
913
|
+
i_val = input_storage[i].storage[0]
|
|
914
|
+
|
|
915
|
+
# Check if value is aliased with any of the values in one of the groups
|
|
916
|
+
for j_group in args_share_memory:
|
|
912
917
|
if any(
|
|
913
|
-
(
|
|
914
|
-
|
|
915
|
-
and var.type.may_share_memory(val, i_val)
|
|
916
|
-
)
|
|
917
|
-
for (var, val) in group_j
|
|
918
|
+
i_type.may_share_memory(input_storage[j].storage[0], i_val)
|
|
919
|
+
for j in j_group
|
|
918
920
|
):
|
|
919
|
-
|
|
920
|
-
args_share_memory[j].append(i)
|
|
921
|
+
j_group.append(i)
|
|
921
922
|
break
|
|
922
|
-
|
|
923
|
-
|
|
923
|
+
else: # no break
|
|
924
|
+
# Create a new group
|
|
924
925
|
args_share_memory.append([i])
|
|
925
926
|
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
927
|
+
# Check for groups of more than one argument that share memory
|
|
928
|
+
for group in args_share_memory:
|
|
929
|
+
if len(group) > 1:
|
|
930
|
+
# copy all but the first
|
|
931
|
+
for i in group[1:]:
|
|
932
|
+
input_storage[i].storage[0] = copy.copy(
|
|
933
|
+
input_storage[i].storage[0]
|
|
934
|
+
)
|
|
934
935
|
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
restore_defaults()
|
|
936
|
+
# Check if inputs are missing, or if inputs were set more than once, or
|
|
937
|
+
# if we tried to provide inputs that are supposed to be implicit.
|
|
938
|
+
for arg_container in input_storage:
|
|
939
|
+
if arg_container.required and not arg_container.provided:
|
|
940
|
+
self._restore_defaults()
|
|
941
941
|
raise TypeError(
|
|
942
|
-
f"Missing required input: {getattr(self.inv_finder[
|
|
942
|
+
f"Missing required input: {getattr(self.inv_finder[arg_container], 'variable', self.inv_finder[arg_container])}"
|
|
943
943
|
)
|
|
944
|
-
if
|
|
945
|
-
|
|
944
|
+
if arg_container.provided > 1:
|
|
945
|
+
self._restore_defaults()
|
|
946
946
|
raise TypeError(
|
|
947
|
-
f"Multiple values for input: {getattr(self.inv_finder[
|
|
947
|
+
f"Multiple values for input: {getattr(self.inv_finder[arg_container], 'variable', self.inv_finder[arg_container])}"
|
|
948
948
|
)
|
|
949
|
-
if
|
|
950
|
-
|
|
949
|
+
if arg_container.implicit and arg_container.provided > 0:
|
|
950
|
+
self._restore_defaults()
|
|
951
951
|
raise TypeError(
|
|
952
|
-
f"Tried to provide value for implicit input: {getattr(self.inv_finder[
|
|
952
|
+
f"Tried to provide value for implicit input: {getattr(self.inv_finder[arg_container], 'variable', self.inv_finder[arg_container])}"
|
|
953
953
|
)
|
|
954
954
|
|
|
955
955
|
# Do the actual work
|
|
956
|
-
|
|
956
|
+
if profile:
|
|
957
|
+
t0_fn = time.perf_counter()
|
|
957
958
|
try:
|
|
958
959
|
outputs = (
|
|
959
960
|
self.vm()
|
|
@@ -961,7 +962,7 @@ class Function:
|
|
|
961
962
|
else self.vm(output_subset=output_subset)
|
|
962
963
|
)
|
|
963
964
|
except Exception:
|
|
964
|
-
|
|
965
|
+
self._restore_defaults()
|
|
965
966
|
if hasattr(self.vm, "position_of_error"):
|
|
966
967
|
# this is a new vm-provided function or c linker
|
|
967
968
|
# they need this because the exception manipulation
|
|
@@ -979,26 +980,24 @@ class Function:
|
|
|
979
980
|
# old-style linkers raise their own exceptions
|
|
980
981
|
raise
|
|
981
982
|
|
|
982
|
-
dt_fn = time.perf_counter() - t0_fn
|
|
983
|
-
self.maker.mode.fn_time += dt_fn
|
|
984
983
|
if profile:
|
|
984
|
+
dt_fn = time.perf_counter() - t0_fn
|
|
985
|
+
self.maker.mode.fn_time += dt_fn
|
|
985
986
|
profile.vm_call_time += dt_fn
|
|
986
987
|
|
|
987
988
|
# Retrieve the values that were computed
|
|
988
989
|
if outputs is None:
|
|
989
990
|
outputs = [x.data for x in self.output_storage]
|
|
990
|
-
assert len(outputs) == len(self.output_storage)
|
|
991
991
|
|
|
992
992
|
# Remove internal references to required inputs.
|
|
993
993
|
# These cannot be re-used anyway.
|
|
994
|
-
for
|
|
995
|
-
if
|
|
996
|
-
|
|
994
|
+
for arg_container in input_storage:
|
|
995
|
+
if arg_container.required:
|
|
996
|
+
arg_container.storage[0] = None
|
|
997
997
|
|
|
998
998
|
# if we are allowing garbage collection, remove the
|
|
999
999
|
# output reference from the internal storage cells
|
|
1000
1000
|
if getattr(self.vm, "allow_gc", False):
|
|
1001
|
-
assert len(self.output_storage) == len(self.maker.fgraph.outputs)
|
|
1002
1001
|
for o_container, o_variable in zip(
|
|
1003
1002
|
self.output_storage, self.maker.fgraph.outputs
|
|
1004
1003
|
):
|
|
@@ -1007,12 +1006,10 @@ class Function:
|
|
|
1007
1006
|
# WARNING: This circumvents the 'readonly' attribute in x
|
|
1008
1007
|
o_container.storage[0] = None
|
|
1009
1008
|
|
|
1010
|
-
# TODO: Get rid of this and `expanded_inputs`, since all the VMs now
|
|
1011
|
-
# perform the updates themselves
|
|
1012
1009
|
if getattr(self.vm, "need_update_inputs", True):
|
|
1013
1010
|
# Update the inputs that have an update function
|
|
1014
1011
|
for input, storage in reversed(
|
|
1015
|
-
list(zip(self.maker.expanded_inputs,
|
|
1012
|
+
list(zip(self.maker.expanded_inputs, input_storage))
|
|
1016
1013
|
):
|
|
1017
1014
|
if input.update is not None:
|
|
1018
1015
|
storage.data = outputs.pop()
|
|
@@ -1020,17 +1017,12 @@ class Function:
|
|
|
1020
1017
|
outputs = outputs[: self.n_returned_outputs]
|
|
1021
1018
|
|
|
1022
1019
|
# Put default values back in the storage
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
# NOTE: This logic needs to be replicated in
|
|
1026
|
-
# scan.
|
|
1027
|
-
# grep for 'PROFILE_CODE'
|
|
1028
|
-
#
|
|
1029
|
-
|
|
1030
|
-
dt_call = time.perf_counter() - t0
|
|
1031
|
-
pytensor.compile.profiling.total_fct_exec_time += dt_call
|
|
1032
|
-
self.maker.mode.call_time += dt_call
|
|
1020
|
+
self._restore_defaults()
|
|
1021
|
+
|
|
1033
1022
|
if profile:
|
|
1023
|
+
dt_call = time.perf_counter() - t0
|
|
1024
|
+
pytensor.compile.profiling.total_fct_exec_time += dt_call
|
|
1025
|
+
self.maker.mode.call_time += dt_call
|
|
1034
1026
|
profile.fct_callcount += 1
|
|
1035
1027
|
profile.fct_call_time += dt_call
|
|
1036
1028
|
if hasattr(self.vm, "update_profile"):
|
|
@@ -1038,6 +1030,7 @@ class Function:
|
|
|
1038
1030
|
if profile.ignore_first_call:
|
|
1039
1031
|
profile.reset()
|
|
1040
1032
|
profile.ignore_first_call = False
|
|
1033
|
+
|
|
1041
1034
|
if self.return_none:
|
|
1042
1035
|
return None
|
|
1043
1036
|
elif self.unpack_single and len(outputs) == 1 and output_subset is None:
|
|
@@ -1572,6 +1565,8 @@ class FunctionMaker:
|
|
|
1572
1565
|
)
|
|
1573
1566
|
for i in self.inputs
|
|
1574
1567
|
]
|
|
1568
|
+
if any(self.refeed):
|
|
1569
|
+
warnings.warn("Inputs with default values are deprecated.", FutureWarning)
|
|
1575
1570
|
|
|
1576
1571
|
def create(self, input_storage=None, storage_map=None):
|
|
1577
1572
|
"""
|
|
@@ -128,9 +128,6 @@ class DisconnectedType(Type):
|
|
|
128
128
|
" a symbolic placeholder."
|
|
129
129
|
)
|
|
130
130
|
|
|
131
|
-
def may_share_memory(a, b):
|
|
132
|
-
return False
|
|
133
|
-
|
|
134
131
|
def value_eq(a, b, force_same_dtype=True):
|
|
135
132
|
raise AssertionError(
|
|
136
133
|
"If you're assigning to a DisconnectedType you're"
|
|
@@ -26,9 +26,6 @@ class NullType(Type):
|
|
|
26
26
|
def filter_variable(self, other, allow_convert=True):
|
|
27
27
|
raise ValueError("No values may be assigned to a NullType")
|
|
28
28
|
|
|
29
|
-
def may_share_memory(a, b):
|
|
30
|
-
return False
|
|
31
|
-
|
|
32
29
|
def values_eq(self, a, b, force_same_dtype=True):
|
|
33
30
|
raise ValueError("NullType has no values to compare")
|
|
34
31
|
|