pytensor 3.1.1__tar.gz → 3.1.3__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-3.1.1/pytensor.egg-info → pytensor-3.1.3}/PKG-INFO +1 -1
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/internal/how_to_release.rst +0 -4
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/config.rst +0 -33
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/_version.py +3 -3
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/builders.py +3 -48
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/profiling.py +1 -59
- pytensor-3.1.3/pytensor/compile/inner_function.py +84 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/maker.py +1 -8
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/mode.py +56 -4
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/configdefaults.py +0 -61
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/configparser.py +0 -3
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/gradient.py +1 -1
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/features.py +1 -26
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/basic.py +1 -1
- pytensor-3.1.3/pytensor/graph/rewriting/utils.py +116 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/type.py +0 -28
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/basic.py +1 -7
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/cmodule.py +1 -40
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/op.py +0 -1
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/elemwise.py +13 -5
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/printing.py +0 -81
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/basic.py +30 -79
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/op.py +31 -69
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/utils.py +0 -32
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/basic.py +12 -2
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/basic.py +1 -1
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/gemm.py +3 -1
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/elemwise.py +7 -6
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/extra_ops.py +0 -65
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/fourier.py +11 -6
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/inverse.py +3 -1
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/optimize.py +56 -110
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/numba.py +9 -4
- pytensor-3.1.3/pytensor/tensor/rewriting/extra_ops.py +64 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/indexed_elemwise.py +119 -47
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/math.py +0 -15
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/optimize.py +2 -2
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/subtensor.py +200 -28
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/subtensor_lift.py +83 -40
- {pytensor-3.1.1 → pytensor-3.1.3/pytensor.egg-info}/PKG-INFO +1 -1
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/SOURCES.txt +1 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_gradient.py +7 -0
- pytensor-3.1.1/pytensor/graph/rewriting/utils.py +0 -272
- pytensor-3.1.1/pytensor/tensor/rewriting/extra_ops.py +0 -118
- {pytensor-3.1.1 → pytensor-3.1.3}/LICENSE.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/MANIFEST.in +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/README.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/layout.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/nb-badges.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/LICENSE.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/README.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/acknowledgement.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/bcast.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/bcast.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/blog.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/conf.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/core_development_guide.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/css.inc +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/dev_start_guide.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/environment.yml +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/apply.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/apply.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/apply2.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/ctype.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/extending_faq.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/graphstructures.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/inplace.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/op.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/other_ops.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/pipeline.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/scan.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/tips.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/type.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/unittest.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/using_params.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/faq.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/applications/tiny_transformer_llm.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/optimize/root.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/page_footer.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/glossary.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/Elman_srnn.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/PyTensor.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/binder.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/blocksparse.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/colab.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/github.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/lstm.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/talk2010.gif +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/talk2010.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/install.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/internal/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/introduction.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/function.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/io.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/mode.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/ops.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/shared.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/features.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/graph.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/op.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/replace.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/type.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/utils.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/printing.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/scalar/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/scan.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/sparse/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/basic.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/bcast.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/fft.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/functional.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/io.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/linalg.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/optimize.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/random.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/utils.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/typed_list.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/index.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/linalg.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/math.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/module_functions.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/random.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/signal.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/type.md +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/links.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/optimizations.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/pylintrc +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/robots.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/troubleshooting.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/adding.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/apply.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/apply.svg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/bcast.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/conditions.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/examples.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/gradients.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/index.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/logistic.gp +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/logistic.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/loop.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/modes.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/prng.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/profiling.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/sparse.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/doc/user_guide.rst +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pyproject.toml +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/_sparse_lazy.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/alloc.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/blockwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/core.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/diagonal.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/dimshuffle.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/dot.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/elemwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/orthogonal.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/permutation.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/positive_definite.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/reshape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/selection.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/specify.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/subtensor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/symmetric.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/triangular.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/bin/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/breakpoint.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/aliasing.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/compiledir.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/compilelock.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/debugmode.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/dump.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/monitormode.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/nanguardmode.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/executor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/io.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/ops.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/rebuild.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/rewriting.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/html/template.html +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/fg.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/null_type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/op.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/replace.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/reachability.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/traversal.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/ifelse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/ipython.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/cutils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/cvm.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/interface.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/params_type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/constructors.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/decomposition.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/products.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/solvers.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/summary.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/linker.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/ops.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/blas.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/einsum.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/decomposition.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/products.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/solvers.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/summary.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/pad.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/scalar.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/sort.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/subtensor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/tensor_basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/linker.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/cache.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/blockwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/constructors.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/dispatch.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/eigen.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/svd.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/products.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/cholesky.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/dispatch.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/general.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/hermitian.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/linear_control.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/lu_solve.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/posdef.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/symmetric.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/triangular.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/tridiagonal.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/summary.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sort.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/variable.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/typed_list.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/linker.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/decomposition.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/products.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/summary.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/vm.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/check_blas.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/frozendict.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/npy_2_compat.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/py.typed +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/raise_op.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/loop.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/db.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/inner_graph.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/inplace.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/io.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/merge.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/push_out.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/trace.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/views.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/linalg.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/variable.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/_core.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/batched.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/blas_c.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/alt_blas_common.h +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/alt_blas_template.c +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/blas_headers.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/codegen.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/gemv.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/ger.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blockwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/einsum.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/fft.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/functional.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/_lazy.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/constructors.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/cholesky.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/eigen.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/lu.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/qr.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/schur.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/svd.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/dtype_utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/products.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/core.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/general.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/linear_control.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/lstsq.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/psd.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/triangular.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/tridiagonal.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/summary.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/pad.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/op.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/variable.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/reshape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/assumptions.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/elemwise.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/decomposition.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/inverse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/products.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/solvers.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/summary.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/reshape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/signal/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/signal/conv.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/slinalg.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/sort.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/special.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/subtensor.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/symbolic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/type_other.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/var.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/variable.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/indexing.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/linalg.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/variable.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/reduction.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/__init__.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/indexing.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/math.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/reduction.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/utils.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/vectorization.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/shape.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/signal.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/type.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/vectorization.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/scripts/mypy-failing.txt +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/setup.cfg +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/setup.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_basic.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_breakpoint.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_config.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_ifelse.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_printing.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_raise_op.py +0 -0
- {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_rop.py +0 -0
|
@@ -13,10 +13,6 @@ Update the version number
|
|
|
13
13
|
|
|
14
14
|
Update the year in the ``PyTensor/LICENSE.txt`` file too, if necessary.
|
|
15
15
|
|
|
16
|
-
Update the code and the documentation for the pytensor flags
|
|
17
|
-
``warn__ignore_bug_before`` to accept the new version. You must modify the
|
|
18
|
-
file ``pytensor/configdefaults.py`` and ``doc/library/config.txt``.
|
|
19
|
-
|
|
20
16
|
Tag the release
|
|
21
17
|
===============
|
|
22
18
|
|
|
@@ -405,31 +405,6 @@ import ``pytensor`` and print the config variable, as in:
|
|
|
405
405
|
raise the exception (i.e. ``'raise'``).
|
|
406
406
|
|
|
407
407
|
|
|
408
|
-
.. attribute:: config.warn__ignore_bug_before
|
|
409
|
-
|
|
410
|
-
String value: ``'None'``, ``'all'``, ``'0.3'``, ``'0.4'``, ``'0.4.1'``,
|
|
411
|
-
``'0.5'``, ``'0.6'``, ``'0.7'``, ``'0.8'``, ``'0.8.1'``, ``'0.8.2'``,
|
|
412
|
-
``'0.9'``, ``'0.10'``, ``'1.0'``, ``'1.0.1'``, ``'1.0.2'``, ``'1.0.3'``,
|
|
413
|
-
``'1.0.4'``,``'1.0.5'``
|
|
414
|
-
|
|
415
|
-
Default: ``'0.9'``
|
|
416
|
-
|
|
417
|
-
When we an PyTensor bug that generated a bad result is fixed, we also make
|
|
418
|
-
PyTensor raise a warning when it encounters the same circumstances again. This
|
|
419
|
-
helps users determine whether or not said bug has affected past runs, since
|
|
420
|
-
one only needs to perform the same runs again with the new version, and one
|
|
421
|
-
does not have to understand the PyTensor internals that triggered the bug.
|
|
422
|
-
|
|
423
|
-
This flag lets users ignore warnings about old bugs that were
|
|
424
|
-
fixed before their first checkout of PyTensor.
|
|
425
|
-
You can set its value to the first version of PyTensor
|
|
426
|
-
that you used (probably 0.3 or higher)
|
|
427
|
-
|
|
428
|
-
``'None'`` means that all warnings will be displayed.
|
|
429
|
-
``'all'`` means all warnings will be ignored.
|
|
430
|
-
|
|
431
|
-
This flag's value cannot be modified during program execution.
|
|
432
|
-
|
|
433
408
|
.. attribute:: base_compiledir
|
|
434
409
|
|
|
435
410
|
Default: On Windows: ``$LOCALAPPDATA\\PyTensor`` if ``$LOCALAPPDATA`` is defined,
|
|
@@ -734,11 +709,3 @@ import ``pytensor`` and print the config variable, as in:
|
|
|
734
709
|
The number of traceback stack levels to keep for variables during PyTensor
|
|
735
710
|
compilation. When this value is greater than zero, it will make PyTensor keep
|
|
736
711
|
internal stack traces.
|
|
737
|
-
|
|
738
|
-
.. attribute:: config.metaopt__verbose
|
|
739
|
-
|
|
740
|
-
Int value, default: 0
|
|
741
|
-
|
|
742
|
-
The verbosity level of the meta-rewriter: ``0`` for silent, ``1`` to only
|
|
743
|
-
warn when PyTensor cannot meta-rewrite an :class:`Op`, ``2`` for full output (e.g.
|
|
744
|
-
timings and the rewrites selected).
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-07-
|
|
11
|
+
"date": "2026-07-10T22:43:47+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "3.1.
|
|
14
|
+
"full-revisionid": "4c7f21181b616d2e05310a518c87cc661ba1b97e",
|
|
15
|
+
"version": "3.1.3"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -8,8 +8,7 @@ from collections.abc import Callable, Sequence
|
|
|
8
8
|
from copy import copy
|
|
9
9
|
from functools import partial
|
|
10
10
|
|
|
11
|
-
from pytensor.compile.
|
|
12
|
-
from pytensor.compile.mode import get_mode
|
|
11
|
+
from pytensor.compile.inner_function import HasInnerFunction
|
|
13
12
|
from pytensor.compile.sharedvalue import SharedVariable
|
|
14
13
|
from pytensor.gradient import DisconnectedType, disconnected_type, grad, pushforward
|
|
15
14
|
from pytensor.graph.basic import (
|
|
@@ -20,7 +19,7 @@ from pytensor.graph.basic import (
|
|
|
20
19
|
)
|
|
21
20
|
from pytensor.graph.fg import FrozenFunctionGraph, FunctionGraph
|
|
22
21
|
from pytensor.graph.null_type import NullType
|
|
23
|
-
from pytensor.graph.op import
|
|
22
|
+
from pytensor.graph.op import Op, io_connection_pattern
|
|
24
23
|
from pytensor.graph.replace import clone_replace
|
|
25
24
|
from pytensor.graph.traversal import graph_inputs
|
|
26
25
|
from pytensor.graph.utils import MissingInputError
|
|
@@ -114,7 +113,7 @@ def construct_nominal_fgraph(
|
|
|
114
113
|
return fgraph
|
|
115
114
|
|
|
116
115
|
|
|
117
|
-
class OpFromGraph(
|
|
116
|
+
class OpFromGraph(HasInnerFunction, Op):
|
|
118
117
|
r"""Create an Op from inputs and outputs lists of variables.
|
|
119
118
|
|
|
120
119
|
The signature is similar to :func:`pytensor.function` and the resulting Op's perform will do
|
|
@@ -840,50 +839,6 @@ class OpFromGraph(Op, HasInnerGraph):
|
|
|
840
839
|
|
|
841
840
|
return ret
|
|
842
841
|
|
|
843
|
-
@property
|
|
844
|
-
def fn(self):
|
|
845
|
-
"""Lazily compile the inner function graph."""
|
|
846
|
-
if getattr(self, "_fn", None) is not None:
|
|
847
|
-
return self._fn
|
|
848
|
-
|
|
849
|
-
# ``op.fgraph`` is already backend-optimized (inplace included): the
|
|
850
|
-
# ``ofg_inner_graph`` rewrite ran the backend optimizer on it during the
|
|
851
|
-
# outer compile. So we only need to link it. The linker forces
|
|
852
|
-
# ``minimum_compile`` back in via its ``required_rewrites``, and (for an
|
|
853
|
-
# inner graph) ``minimum_compile`` *is* that inner-graph rewrite -- so we
|
|
854
|
-
# exclude ``compile_inner_graph`` to stop it re-baking an already-baked
|
|
855
|
-
# graph. ``prepare_fgraph`` still inserts the boundary deepcopies; passing
|
|
856
|
-
# ``fgraph=`` avoids a re-clone. Unused inputs (e.g. rng, size) and
|
|
857
|
-
# internal-only inplace ops are expected and tolerated.
|
|
858
|
-
mode = (
|
|
859
|
-
get_mode(None)
|
|
860
|
-
.clone(optimizer="minimum_compile")
|
|
861
|
-
.excluding("compile_inner_graph")
|
|
862
|
-
)
|
|
863
|
-
unfrozen_fgraph = self.fgraph.unfreeze()
|
|
864
|
-
self._fn = mode.function_maker(
|
|
865
|
-
[In(inp, borrow=True) for inp in unfrozen_fgraph.inputs],
|
|
866
|
-
[Out(out, borrow=True) for out in unfrozen_fgraph.outputs],
|
|
867
|
-
mode,
|
|
868
|
-
fgraph=unfrozen_fgraph,
|
|
869
|
-
accept_inplace=True,
|
|
870
|
-
on_unused_input="ignore",
|
|
871
|
-
).create()
|
|
872
|
-
self._fn.trust_input = True
|
|
873
|
-
|
|
874
|
-
return self._fn
|
|
875
|
-
|
|
876
|
-
@property
|
|
877
|
-
def inner_inputs(self):
|
|
878
|
-
# A list (not the frozen tuple) so callers that concatenate inner
|
|
879
|
-
# inputs/outputs keep list semantics. Read-only views of the immutable
|
|
880
|
-
# graph; manipulating them requires a fresh/unfrozen graph.
|
|
881
|
-
return list(self.fgraph.inputs)
|
|
882
|
-
|
|
883
|
-
@property
|
|
884
|
-
def inner_outputs(self):
|
|
885
|
-
return list(self.fgraph.outputs)
|
|
886
|
-
|
|
887
842
|
def clone(self):
|
|
888
843
|
# The inner graph is immutable (a frozen ``FunctionGraph``), so there is
|
|
889
844
|
# nothing to deep-clone -- mirror ``Composite.clone``.
|
|
@@ -9,7 +9,6 @@ ProfileStats object for runtime and memory profiling.
|
|
|
9
9
|
#
|
|
10
10
|
|
|
11
11
|
import atexit
|
|
12
|
-
import copy
|
|
13
12
|
import logging
|
|
14
13
|
import operator
|
|
15
14
|
import sys
|
|
@@ -54,8 +53,6 @@ _atexit_registered: bool = False
|
|
|
54
53
|
def _atexit_print_fn():
|
|
55
54
|
"""Print `ProfileStat` objects in `_atexit_print_list` to `_atexit_print_file`."""
|
|
56
55
|
if config.profile:
|
|
57
|
-
to_sum = []
|
|
58
|
-
|
|
59
56
|
if config.profiling__destination == "stderr":
|
|
60
57
|
destination_file = "<stderr>"
|
|
61
58
|
elif config.profiling__destination == "stdout":
|
|
@@ -78,64 +75,9 @@ def _atexit_print_fn():
|
|
|
78
75
|
n_ops_to_print=config.profiling__n_ops,
|
|
79
76
|
n_apply_to_print=config.profiling__n_apply,
|
|
80
77
|
)
|
|
81
|
-
|
|
82
|
-
if ps.show_sum:
|
|
83
|
-
to_sum.append(ps)
|
|
84
78
|
else:
|
|
85
79
|
# TODO print the name if there is one!
|
|
86
80
|
print("Skipping empty Profile") # noqa: T201
|
|
87
|
-
if len(to_sum) > 1:
|
|
88
|
-
# Make a global profile
|
|
89
|
-
cum = copy.copy(to_sum[0])
|
|
90
|
-
msg = f"Sum of all({len(to_sum)}) printed profiles at exit."
|
|
91
|
-
cum.message = msg
|
|
92
|
-
for ps in to_sum[1:]:
|
|
93
|
-
for attr in [
|
|
94
|
-
"compile_time",
|
|
95
|
-
"fct_call_time",
|
|
96
|
-
"fct_callcount",
|
|
97
|
-
"vm_call_time",
|
|
98
|
-
"rewriter_time",
|
|
99
|
-
"linker_time",
|
|
100
|
-
"validate_time",
|
|
101
|
-
"import_time",
|
|
102
|
-
"linker_node_make_thunks",
|
|
103
|
-
]:
|
|
104
|
-
setattr(cum, attr, getattr(cum, attr) + getattr(ps, attr))
|
|
105
|
-
|
|
106
|
-
# merge dictionary
|
|
107
|
-
for attr in [
|
|
108
|
-
"apply_time",
|
|
109
|
-
"apply_callcount",
|
|
110
|
-
"apply_cimpl",
|
|
111
|
-
"variable_shape",
|
|
112
|
-
"variable_strides",
|
|
113
|
-
"variable_offset",
|
|
114
|
-
"linker_make_thunk_time",
|
|
115
|
-
]:
|
|
116
|
-
cum_attr = getattr(cum, attr)
|
|
117
|
-
for key, val in getattr(ps, attr.items()):
|
|
118
|
-
assert key not in cum_attr, (key, cum_attr)
|
|
119
|
-
cum_attr[key] = val
|
|
120
|
-
|
|
121
|
-
if cum.rewriter_profile and ps.rewriter_profile:
|
|
122
|
-
try:
|
|
123
|
-
merge = cum.rewriter_profile[0].merge_profile(
|
|
124
|
-
cum.rewriter_profile[1], ps.rewriter_profile[1]
|
|
125
|
-
)
|
|
126
|
-
assert len(merge) == len(cum.rewriter_profile[1])
|
|
127
|
-
cum.rewriter_profile = (cum.rewriter_profile[0], merge)
|
|
128
|
-
except Exception as e:
|
|
129
|
-
print(e) # noqa: T201
|
|
130
|
-
cum.rewriter_profile = None
|
|
131
|
-
else:
|
|
132
|
-
cum.rewriter_profile = None
|
|
133
|
-
|
|
134
|
-
cum.summary(
|
|
135
|
-
file=f,
|
|
136
|
-
n_ops_to_print=config.profiling__n_ops,
|
|
137
|
-
n_apply_to_print=config.profiling__n_apply,
|
|
138
|
-
)
|
|
139
81
|
|
|
140
82
|
if config.print_global_stats:
|
|
141
83
|
print_global_stats()
|
|
@@ -159,7 +101,7 @@ def print_global_stats():
|
|
|
159
101
|
destination_file = config.profiling__destination
|
|
160
102
|
|
|
161
103
|
with extended_open(destination_file, mode="w") as f:
|
|
162
|
-
print("=" * 50, file=
|
|
104
|
+
print("=" * 50, file=f)
|
|
163
105
|
print(
|
|
164
106
|
(
|
|
165
107
|
"Global stats: ",
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Shared machinery for `Op`\\s that execute a lazily linked inner function."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from pytensor.compile.io import In, Out
|
|
6
|
+
from pytensor.compile.mode import Mode
|
|
7
|
+
from pytensor.graph.fg import FrozenFunctionGraph, FunctionGraph
|
|
8
|
+
from pytensor.graph.op import HasInnerGraph
|
|
9
|
+
from pytensor.graph.rewriting.basic import SequentialGraphRewriter
|
|
10
|
+
from pytensor.link.basic import Linker
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from pytensor.compile.function.types import Function
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def link_only_mode(linker: str | Linker) -> Mode:
|
|
18
|
+
"""A `Mode` that links a graph without rewriting it at all.
|
|
19
|
+
|
|
20
|
+
The bare rewriter also bypasses the ``minimum_compile`` pass the linker
|
|
21
|
+
would otherwise force onto a database query.
|
|
22
|
+
"""
|
|
23
|
+
return Mode(linker, SequentialGraphRewriter())
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class HasInnerFunction(HasInnerGraph):
|
|
27
|
+
"""`HasInnerGraph` op whose ``perform`` runs a lazily linked inner function.
|
|
28
|
+
|
|
29
|
+
The frozen inner graph was already baked for the backend by the
|
|
30
|
+
``compile_inner_graph`` rewrites during the outer compile, so linking it
|
|
31
|
+
needs no further rewrites (see `link_only_mode`).
|
|
32
|
+
|
|
33
|
+
The linker never comes from the config default mode: ``perform`` only runs
|
|
34
|
+
under the py/c backend family -- JIT backends (numba/jax/...) funcify
|
|
35
|
+
``op.fgraph`` directly and never call ``perform`` -- so a JIT default must
|
|
36
|
+
not win, and the JIT inner-graph rewrites were never applied to this graph.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
_fn = None
|
|
40
|
+
fgraph: FrozenFunctionGraph
|
|
41
|
+
|
|
42
|
+
def link_mode(self, impl: str | None) -> Mode:
|
|
43
|
+
"""The `Mode` to link the inner function with, given a thunk ``impl``."""
|
|
44
|
+
return link_only_mode("cvm" if impl == "c" else "vm")
|
|
45
|
+
|
|
46
|
+
def link_fgraph(self, fgraph: FunctionGraph, mode: Mode) -> "Function":
|
|
47
|
+
"""Link an already-baked inner ``fgraph`` under ``mode``, no rewrites."""
|
|
48
|
+
fn = mode.function_maker(
|
|
49
|
+
[In(inp) for inp in fgraph.inputs],
|
|
50
|
+
[Out(out) for out in fgraph.outputs],
|
|
51
|
+
mode,
|
|
52
|
+
fgraph=fgraph,
|
|
53
|
+
accept_inplace=True,
|
|
54
|
+
on_unused_input="ignore",
|
|
55
|
+
).create()
|
|
56
|
+
fn.trust_input = True
|
|
57
|
+
return fn
|
|
58
|
+
|
|
59
|
+
def compile_fn(self, mode: Mode) -> "Function":
|
|
60
|
+
"""Build the inner function under ``mode`` (override to massage the graph)."""
|
|
61
|
+
return self.link_fgraph(self.fgraph.unfreeze(), mode)
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def fn(self) -> "Function":
|
|
65
|
+
if self._fn is None:
|
|
66
|
+
self._fn = self.compile_fn(self.link_mode(None))
|
|
67
|
+
return self._fn
|
|
68
|
+
|
|
69
|
+
def make_thunk(self, node, storage_map, compute_map, no_recycling, impl=None):
|
|
70
|
+
if self._fn is None:
|
|
71
|
+
self._fn = self.compile_fn(self.link_mode(impl))
|
|
72
|
+
return super().make_thunk(
|
|
73
|
+
node, storage_map, compute_map, no_recycling, impl=impl
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def inner_inputs(self):
|
|
78
|
+
# Read-only views of the immutable inner graph, as lists so callers
|
|
79
|
+
# that concatenate inputs/outputs keep list semantics.
|
|
80
|
+
return list(self.fgraph.inputs)
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def inner_outputs(self):
|
|
84
|
+
return list(self.fgraph.outputs)
|
|
@@ -469,14 +469,7 @@ class FunctionMaker:
|
|
|
469
469
|
mode=mode,
|
|
470
470
|
traceback__limit=config.traceback__compile_limit,
|
|
471
471
|
):
|
|
472
|
-
|
|
473
|
-
# the active linker's required/incompatible rewrites reliably
|
|
474
|
-
# (``config.mode`` is unreliable across nested compilations).
|
|
475
|
-
fgraph._compile_mode = mode
|
|
476
|
-
try:
|
|
477
|
-
rewriter_profile = rewriter(fgraph)
|
|
478
|
-
finally:
|
|
479
|
-
del fgraph._compile_mode
|
|
472
|
+
rewriter_profile = rewriter(fgraph)
|
|
480
473
|
|
|
481
474
|
end_rewriter = time.perf_counter()
|
|
482
475
|
rewrite_time = end_rewriter - start_rewriter
|
|
@@ -4,6 +4,7 @@ WRITEME
|
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
import logging
|
|
7
|
+
import sys
|
|
7
8
|
import warnings
|
|
8
9
|
from typing import Any
|
|
9
10
|
|
|
@@ -279,6 +280,53 @@ optdb.register("CheckStackTrace", CheckStackTraceRewriter(), *_tags, position=-1
|
|
|
279
280
|
del _tags
|
|
280
281
|
|
|
281
282
|
|
|
283
|
+
class _ActiveModeGraphRewriter(GraphRewriter):
|
|
284
|
+
"""Wrap a mode's optimizer so applying it records the active compile mode.
|
|
285
|
+
|
|
286
|
+
Exposes the compile mode as ``fgraph._compile_mode`` (see ``get_active_mode``)
|
|
287
|
+
so rewrites can make decisions based on the compile target (fusion split rules,
|
|
288
|
+
inner graph specialization, ...). Stamps the mode when the fgraph does not already carry one, and
|
|
289
|
+
restores the previous state after.
|
|
290
|
+
"""
|
|
291
|
+
|
|
292
|
+
def __init__(self, rewriter: GraphRewriter, mode: "Mode"):
|
|
293
|
+
self._rewriter = rewriter
|
|
294
|
+
self._mode = mode
|
|
295
|
+
|
|
296
|
+
def add_requirements(self, fgraph):
|
|
297
|
+
return self._rewriter.add_requirements(fgraph)
|
|
298
|
+
|
|
299
|
+
def apply(self, fgraph, *args, **kwargs):
|
|
300
|
+
# Only stamp when unset, so a mode already established by an outer
|
|
301
|
+
# optimizer run (the outermost compilation, or a nested inner-graph
|
|
302
|
+
# rewrite) wins.
|
|
303
|
+
stamped = getattr(fgraph, "_compile_mode", None) is None
|
|
304
|
+
if stamped:
|
|
305
|
+
fgraph._compile_mode = self._mode
|
|
306
|
+
try:
|
|
307
|
+
return self._rewriter.apply(fgraph, *args, **kwargs)
|
|
308
|
+
finally:
|
|
309
|
+
if stamped:
|
|
310
|
+
del fgraph._compile_mode
|
|
311
|
+
|
|
312
|
+
def print_summary(self, stream=sys.stdout, level=0, depth=-1):
|
|
313
|
+
return self._rewriter.print_summary(stream=stream, level=level, depth=depth)
|
|
314
|
+
|
|
315
|
+
def print_profile(self, stream, prof, level=0):
|
|
316
|
+
# ``GraphRewriter.print_profile`` is a classmethod that raises unless
|
|
317
|
+
# overridden, so delegate to the wrapped rewriter's implementation.
|
|
318
|
+
return self._rewriter.print_profile(stream, prof, level=level)
|
|
319
|
+
|
|
320
|
+
def __getattr__(self, name):
|
|
321
|
+
# Delegate everything else (profiling helpers, query metadata, ...) to the
|
|
322
|
+
# wrapped rewriter. ``__getattr__`` only fires for names not found normally,
|
|
323
|
+
# so the overrides above take precedence. Guard ``_rewriter`` itself to avoid
|
|
324
|
+
# infinite recursion before ``__init__`` has run.
|
|
325
|
+
if name == "_rewriter":
|
|
326
|
+
raise AttributeError(name)
|
|
327
|
+
return getattr(self._rewriter, name)
|
|
328
|
+
|
|
329
|
+
|
|
282
330
|
class Mode:
|
|
283
331
|
"""A class that specifies the rewrites/optimizations used during function compilation.
|
|
284
332
|
|
|
@@ -305,7 +353,7 @@ class Mode:
|
|
|
305
353
|
def __init__(
|
|
306
354
|
self,
|
|
307
355
|
linker: str | Linker | None = None,
|
|
308
|
-
optimizer: str | RewriteDatabaseQuery = "default",
|
|
356
|
+
optimizer: str | RewriteDatabaseQuery | GraphRewriter = "default",
|
|
309
357
|
db: RewriteDatabase = None,
|
|
310
358
|
):
|
|
311
359
|
if linker is None:
|
|
@@ -377,9 +425,13 @@ class Mode:
|
|
|
377
425
|
@property
|
|
378
426
|
def optimizer(self):
|
|
379
427
|
if isinstance(self._optimizer, RewriteDatabaseQuery):
|
|
380
|
-
|
|
428
|
+
rewriter = self.optdb.query(self._optimizer)
|
|
381
429
|
else:
|
|
382
|
-
|
|
430
|
+
rewriter = self._optimizer
|
|
431
|
+
# Stamp this mode as the fgraph's active compile mode while rewriting, so
|
|
432
|
+
# inner-graph rewrites can recover the right linker even when the optimizer
|
|
433
|
+
# is run directly (outside ``FunctionMaker``, e.g. ``mode.optimizer.rewrite(fgraph)``).
|
|
434
|
+
return _ActiveModeGraphRewriter(rewriter, self)
|
|
383
435
|
|
|
384
436
|
def get_linker_optimizer(self, linker, optimizer):
|
|
385
437
|
if isinstance(linker, str) or linker is None:
|
|
@@ -455,7 +507,7 @@ class Mode:
|
|
|
455
507
|
|
|
456
508
|
C = Mode("c", "fast_run")
|
|
457
509
|
CVM = Mode("cvm", "fast_run")
|
|
458
|
-
VM =
|
|
510
|
+
VM = Mode("vm", "fast_run")
|
|
459
511
|
|
|
460
512
|
NUMBA = Mode(
|
|
461
513
|
NumbaLinker(),
|
|
@@ -65,26 +65,6 @@ def _filter_mode(val):
|
|
|
65
65
|
)
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
def _split_version(version):
|
|
69
|
-
"""
|
|
70
|
-
Take version as a dot-separated string, return a tuple of int
|
|
71
|
-
"""
|
|
72
|
-
return tuple(int(i) for i in version.split("."))
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
def _warn_default(version):
|
|
76
|
-
"""
|
|
77
|
-
Return True iff we should warn about bugs fixed after a given version.
|
|
78
|
-
"""
|
|
79
|
-
if config.warn__ignore_bug_before == "None":
|
|
80
|
-
return True
|
|
81
|
-
if config.warn__ignore_bug_before == "all":
|
|
82
|
-
return False
|
|
83
|
-
if _split_version(config.warn__ignore_bug_before) >= _split_version(version):
|
|
84
|
-
return False
|
|
85
|
-
return True
|
|
86
|
-
|
|
87
|
-
|
|
88
68
|
def _is_valid_check_preallocated_output_param(param):
|
|
89
69
|
if not isinstance(param, str):
|
|
90
70
|
return False
|
|
@@ -591,47 +571,6 @@ def add_traceback_configvars():
|
|
|
591
571
|
|
|
592
572
|
|
|
593
573
|
def add_error_and_warning_configvars():
|
|
594
|
-
###
|
|
595
|
-
# To disable some warning about old bug that are fixed now.
|
|
596
|
-
###
|
|
597
|
-
config.add(
|
|
598
|
-
"warn__ignore_bug_before",
|
|
599
|
-
(
|
|
600
|
-
"If 'None', we warn about all PyTensor bugs found by default. "
|
|
601
|
-
"If 'all', we don't warn about PyTensor bugs found by default. "
|
|
602
|
-
"If a version, we print only the warnings relative to PyTensor "
|
|
603
|
-
"bugs found after that version. "
|
|
604
|
-
"Warning for specific bugs can be configured with specific "
|
|
605
|
-
"[warn] flags."
|
|
606
|
-
),
|
|
607
|
-
EnumStr(
|
|
608
|
-
"0.9",
|
|
609
|
-
[
|
|
610
|
-
"None",
|
|
611
|
-
"all",
|
|
612
|
-
"0.3",
|
|
613
|
-
"0.4",
|
|
614
|
-
"0.4.1",
|
|
615
|
-
"0.5",
|
|
616
|
-
"0.6",
|
|
617
|
-
"0.7",
|
|
618
|
-
"0.8",
|
|
619
|
-
"0.8.1",
|
|
620
|
-
"0.8.2",
|
|
621
|
-
"0.9",
|
|
622
|
-
"0.10",
|
|
623
|
-
"1.0",
|
|
624
|
-
"1.0.1",
|
|
625
|
-
"1.0.2",
|
|
626
|
-
"1.0.3",
|
|
627
|
-
"1.0.4",
|
|
628
|
-
"1.0.5",
|
|
629
|
-
],
|
|
630
|
-
mutable=False,
|
|
631
|
-
),
|
|
632
|
-
in_c_key=False,
|
|
633
|
-
)
|
|
634
|
-
|
|
635
574
|
# Note to developers:
|
|
636
575
|
# Generally your exceptions should use an apply node's __str__
|
|
637
576
|
# method when exception_verbosity == 'low'. When exception_verbosity
|
|
@@ -101,7 +101,6 @@ class PyTensorConfigParser:
|
|
|
101
101
|
traceback__limit: int
|
|
102
102
|
traceback__compile_limit: int
|
|
103
103
|
# add_error_and_warning_configvars
|
|
104
|
-
warn__ignore_bug_before: int
|
|
105
104
|
exception_verbosity: str
|
|
106
105
|
# add_testvalue_and_checking_configvars
|
|
107
106
|
check_input: bool
|
|
@@ -138,8 +137,6 @@ class PyTensorConfigParser:
|
|
|
138
137
|
optdb__max_use_ratio: float
|
|
139
138
|
cycle_detection: str
|
|
140
139
|
check_stack_trace: str
|
|
141
|
-
# add_metaopt_configvars
|
|
142
|
-
metaopt__verbose: int
|
|
143
140
|
# add_vm_configvars
|
|
144
141
|
profile: bool
|
|
145
142
|
profile_optimizer: bool
|
|
@@ -139,7 +139,7 @@ class DisconnectedType(Type):
|
|
|
139
139
|
" a symbolic placeholder."
|
|
140
140
|
)
|
|
141
141
|
|
|
142
|
-
def
|
|
142
|
+
def filter_variable(self, other):
|
|
143
143
|
raise AssertionError(
|
|
144
144
|
"If you're assigning to a DisconnectedType you're"
|
|
145
145
|
" doing something wrong. It should only be used as"
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import inspect
|
|
2
1
|
import sys
|
|
3
2
|
import time
|
|
4
3
|
import warnings
|
|
@@ -693,32 +692,8 @@ class Validator(Feature):
|
|
|
693
692
|
)
|
|
694
693
|
|
|
695
694
|
def validate(self, fgraph):
|
|
696
|
-
"""
|
|
697
|
-
If the caller is replace_all_validate, just raise the
|
|
698
|
-
exception. replace_all_validate will print out the
|
|
699
|
-
verbose output. Or it has to be done here before raise.
|
|
700
|
-
"""
|
|
701
695
|
t0 = time.perf_counter()
|
|
702
|
-
|
|
703
|
-
ret = fgraph.execute_callbacks("on_validate")
|
|
704
|
-
except Exception as e:
|
|
705
|
-
cf = inspect.currentframe()
|
|
706
|
-
uf = cf.f_back
|
|
707
|
-
uf_info = inspect.getframeinfo(uf)
|
|
708
|
-
|
|
709
|
-
# If the caller is replace_all_validate, just raise the
|
|
710
|
-
# exception. replace_all_validate will print out the
|
|
711
|
-
# verbose output.
|
|
712
|
-
# Or it has to be done here before raise.
|
|
713
|
-
if uf_info.function == "replace_all_validate":
|
|
714
|
-
raise
|
|
715
|
-
else:
|
|
716
|
-
verbose = uf.f_locals.get("verbose", False)
|
|
717
|
-
if verbose:
|
|
718
|
-
r = uf.f_locals.get("r", "")
|
|
719
|
-
reason = uf_info.function
|
|
720
|
-
print(f"validate failed on node {r}.\n Reason: {reason}, {e}") # noqa: T201
|
|
721
|
-
raise
|
|
696
|
+
ret = fgraph.execute_callbacks("on_validate")
|
|
722
697
|
t1 = time.perf_counter()
|
|
723
698
|
if fgraph.profile:
|
|
724
699
|
fgraph.profile.validate_time += t1 - t0
|
|
@@ -1119,7 +1119,7 @@ class OpToRewriterTracker:
|
|
|
1119
1119
|
else:
|
|
1120
1120
|
# An OpPattern without parameters behaves like a regular tracked_type
|
|
1121
1121
|
self.tracked_types[c.op_type].append(rw)
|
|
1122
|
-
|
|
1122
|
+
elif isinstance(c, type):
|
|
1123
1123
|
self.tracked_types[c].append(rw)
|
|
1124
1124
|
else:
|
|
1125
1125
|
self.tracked_instances[c].append(rw)
|