pytensor 3.2.0__tar.gz → 3.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytensor-3.2.0/pytensor.egg-info → pytensor-3.2.2}/PKG-INFO +1 -1
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/basic.rst +4 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/_version.py +3 -3
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/scalar.py +11 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/subtensor.py +2 -2
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/tensor_basic.py +4 -1
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/subtensor.py +1 -2
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/subtensor.py +3 -10
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/math.py +34 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/math.py +6 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/subtensor.py +29 -59
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/subtensor_lift.py +5 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/subtensor.py +25 -23
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/math.py +4 -0
- {pytensor-3.2.0 → pytensor-3.2.2/pytensor.egg-info}/PKG-INFO +1 -1
- {pytensor-3.2.0 → pytensor-3.2.2}/LICENSE.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/MANIFEST.in +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/README.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/layout.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/nb-badges.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/LICENSE.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/README.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/acknowledgement.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/bcast.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/bcast.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/blog.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/conf.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/core_development_guide.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/css.inc +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/dev_start_guide.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/environment.yml +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/apply.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/apply.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/apply2.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/ctype.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/extending_faq.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/graphstructures.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/inplace.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/op.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/other_ops.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/pipeline.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/scan.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/tips.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/type.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/unification_kanren.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/unittest.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/using_params.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/faq.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/applications/tiny_transformer_llm.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/optimize/root.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/page_footer.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/glossary.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/Elman_srnn.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/PyTensor.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/binder.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/blocksparse.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/colab.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/github.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/lstm.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/talk2010.gif +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/talk2010.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/install.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/internal/how_to_release.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/internal/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/introduction.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/function.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/io.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/mode.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/ops.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/shared.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/config.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/features.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/graph.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/op.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/replace.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/type.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/utils.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/printing.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/scalar/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/scan.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/sparse/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/bcast.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/fft.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/functional.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/io.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/linalg.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/optimize.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/random.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/utils.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/typed_list.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/index.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/linalg.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/math.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/module_functions.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/random.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/signal.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/type.md +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/links.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/optimizations.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/pylintrc +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/robots.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/troubleshooting.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/adding.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/apply.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/apply.svg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/bcast.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/conditions.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/examples.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/gradients.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/index.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/logistic.gp +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/logistic.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/loop.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/modes.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/prng.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/profiling.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/sparse.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/doc/user_guide.rst +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pyproject.toml +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/_sparse_lazy.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/alloc.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/blockwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/core.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/diagonal.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/dimshuffle.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/dot.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/orthogonal.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/permutation.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/positive_definite.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/reshape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/selection.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/specify.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/subtensor.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/symmetric.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/triangular.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/bin/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/breakpoint.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/aliasing.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/builders.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/compiledir.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/compilelock.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/debugmode.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/dump.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/monitormode.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/nanguardmode.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/profiling.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/executor.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/inner_function.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/io.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/maker.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/mode.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/rebuild.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/rewriting.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/configdefaults.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/configparser.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/html/template.html +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/gradient.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/features.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/fg.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/null_type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/op.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/replace.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/reachability.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/traversal.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/ifelse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/ipython.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/cmodule.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/cutils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/cvm.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/interface.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/op.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/params_type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/constructors.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/decomposition.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/products.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/solvers.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/summary.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/linker.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/blas.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/einsum.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/decomposition.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/products.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/solvers.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/summary.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/math.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/pad.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/scalar.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/sort.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/tensor_basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/linker.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/cache.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/_llvmlite_self_ref.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/_patch_pointer_add.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/blockwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/constructors.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/dispatch.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/eigen.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/svd.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/products.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/cholesky.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/dispatch.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/general.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/hermitian.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/linear_control.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/lu_solve.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/posdef.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/symmetric.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/triangular.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/tridiagonal.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/summary.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sort.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/math.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/variable.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/typed_list.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/linker.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/decomposition.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/inverse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/products.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/summary.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/vm.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/check_blas.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/frozendict.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/npy_2_compat.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/printing.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/py.typed +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/raise_op.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/loop.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/op.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/db.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/inner_graph.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/inplace.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/io.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/merge.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/push_out.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/trace.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/views.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/linalg.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/math.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/variable.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/_core.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/batched.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/blas_c.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/alt_blas_common.h +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/alt_blas_template.c +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/blas_headers.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/codegen.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/gemm.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/gemv.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/ger.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blockwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/einsum.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/extra_ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/fft.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/fourier.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/functional.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/_lazy.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/constructors.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/cholesky.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/eigen.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/lu.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/qr.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/schur.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/svd.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/dtype_utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/inverse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/products.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/core.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/general.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/linear_control.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/lstsq.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/psd.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/triangular.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/tridiagonal.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/summary.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/optimize.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/pad.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/op.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/variable.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/reshape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/assumptions.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/fused_elemwise.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/decomposition.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/inverse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/products.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/solvers.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/summary.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/math.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/optimize.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/reshape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/signal/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/signal/conv.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/slinalg.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/sort.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/special.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/symbolic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/type_other.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/var.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/variable.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/indexing.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/linalg.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/variable.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/reduction.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/__init__.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/indexing.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/math.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/reduction.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/utils.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/vectorization.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/shape.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/signal.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/type.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/vectorization.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/SOURCES.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/scripts/mypy-failing.txt +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/setup.cfg +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/setup.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_basic.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_breakpoint.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_config.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_gradient.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_ifelse.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_printing.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_raise_op.py +0 -0
- {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_rop.py +0 -0
|
@@ -1528,6 +1528,10 @@ Mathematical
|
|
|
1528
1528
|
|
|
1529
1529
|
Returns a variable representing the inverse error function or the inverse complementary error function. `wikipedia <http://en.wikipedia.org/wiki/Error_function#Inverse_functions>`__
|
|
1530
1530
|
|
|
1531
|
+
.. function:: ndtri_exp(a)
|
|
1532
|
+
|
|
1533
|
+
Returns a variable representing the inverse of the standard normal CDF evaluated at the exponent of a, computed accurately even where ``exp(a)`` underflows.
|
|
1534
|
+
|
|
1531
1535
|
.. function:: gamma(a)
|
|
1532
1536
|
|
|
1533
1537
|
Returns a variable representing the gamma function.
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-07-
|
|
11
|
+
"date": "2026-07-19T19:39:04+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "3.2.
|
|
14
|
+
"full-revisionid": "301ed014903acb2d1ed1a34466819cf22f8a3a2b",
|
|
15
|
+
"version": "3.2.2"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -32,6 +32,7 @@ from pytensor.scalar.math import (
|
|
|
32
32
|
Ive,
|
|
33
33
|
Kve,
|
|
34
34
|
Log1mexp,
|
|
35
|
+
NdtriExp,
|
|
35
36
|
Psi,
|
|
36
37
|
TriGamma,
|
|
37
38
|
)
|
|
@@ -270,6 +271,16 @@ def jax_funcify_from_tfp(op, **kwargs):
|
|
|
270
271
|
return tfp_jax_op
|
|
271
272
|
|
|
272
273
|
|
|
274
|
+
@jax_funcify.register(NdtriExp)
|
|
275
|
+
def jax_funcify_NdtriExp(op, **kwargs):
|
|
276
|
+
def ndtri_exp(x):
|
|
277
|
+
# JAX has no ndtri_exp, so this composition loses accuracy where
|
|
278
|
+
# exp(x) underflows
|
|
279
|
+
return jax.scipy.special.ndtri(jnp.exp(x))
|
|
280
|
+
|
|
281
|
+
return ndtri_exp
|
|
282
|
+
|
|
283
|
+
|
|
273
284
|
@jax_funcify.register(Ive)
|
|
274
285
|
def jax_funcify_Ive(op, **kwargs):
|
|
275
286
|
return try_import_tfp_jax_op(op, jax_op_name="bessel_ive")
|
|
@@ -59,8 +59,8 @@ def jax_funcify_IncSubtensor(op, node, **kwargs):
|
|
|
59
59
|
if len(indices) == 1:
|
|
60
60
|
indices = indices[0]
|
|
61
61
|
|
|
62
|
-
if isinstance(op, AdvancedIncSubtensor)
|
|
63
|
-
op.
|
|
62
|
+
if isinstance(op, AdvancedIncSubtensor):
|
|
63
|
+
op._check_runtime_broadcast_of_vector_index(node, x, y, indices)
|
|
64
64
|
|
|
65
65
|
return jax_fn(x, indices, y)
|
|
66
66
|
|
|
@@ -71,7 +71,10 @@ def jax_funcify_ARange(op, node, **kwargs):
|
|
|
71
71
|
case (Subtensor(), shape_var, *_) if isinstance(shape_var.owner_op, Shape):
|
|
72
72
|
constant_args.append(None)
|
|
73
73
|
case _ if isinstance(arg, Constant):
|
|
74
|
-
|
|
74
|
+
# Cast to the Op's dtype: PyTensor types integer literals (e.g. 0/1 arange
|
|
75
|
+
# start/step) as int8, and jnp.arange bounds-checks stop against the argument dtype,
|
|
76
|
+
# overflowing for stop > 127.
|
|
77
|
+
constant_args.append(np.asarray(arg.value, op.dtype))
|
|
75
78
|
case _:
|
|
76
79
|
# TODO: This might be failing without need (e.g., if arg = shape(x)[-1] + 1)!
|
|
77
80
|
raise NotImplementedError(ARANGE_CONCRETE_VALUE_ERROR)
|
|
@@ -97,8 +97,7 @@ def mlx_funcify_AdvancedIncSubtensor(op, node, **kwargs):
|
|
|
97
97
|
return x.at[indices].add(y)
|
|
98
98
|
|
|
99
99
|
def advancedincsubtensor(x, y, *ilist, mlx_fn=mlx_fn):
|
|
100
|
-
|
|
101
|
-
op._check_runtime_broadcasting(node, x, y, ilist[0])
|
|
100
|
+
op._check_runtime_broadcast_of_vector_index(node, x, y, ilist[0])
|
|
102
101
|
|
|
103
102
|
return mlx_fn(x, ilist, y)
|
|
104
103
|
|
|
@@ -63,8 +63,6 @@ def pytorch_funcify_IncSubtensor(op, node, **kwargs):
|
|
|
63
63
|
def set_subtensor(x, y, *flattened_indices):
|
|
64
64
|
indices = indices_from_subtensor(flattened_indices, idx_list)
|
|
65
65
|
check_negative_steps(indices)
|
|
66
|
-
if op.idx_list == (0,):
|
|
67
|
-
op._check_runtime_broadcasting(node, x, y, indices[0])
|
|
68
66
|
if not inplace:
|
|
69
67
|
x = x.clone()
|
|
70
68
|
x[indices] = y
|
|
@@ -77,8 +75,6 @@ def pytorch_funcify_IncSubtensor(op, node, **kwargs):
|
|
|
77
75
|
def inc_subtensor(x, y, *flattened_indices):
|
|
78
76
|
indices = indices_from_subtensor(flattened_indices, idx_list)
|
|
79
77
|
check_negative_steps(indices)
|
|
80
|
-
if op.idx_list == (0,):
|
|
81
|
-
op._check_runtime_broadcasting(node, x, y, indices[0])
|
|
82
78
|
if not inplace:
|
|
83
79
|
x = x.clone()
|
|
84
80
|
x[indices] += y
|
|
@@ -98,8 +94,7 @@ def pytorch_funcify_AdvancedIncSubtensor(op, node, **kwargs):
|
|
|
98
94
|
def adv_set_subtensor(x, y, *flattened_indices):
|
|
99
95
|
indices = indices_from_subtensor(flattened_indices, idx_list)
|
|
100
96
|
check_negative_steps(indices)
|
|
101
|
-
|
|
102
|
-
op._check_runtime_broadcasting(node, x, y, indices[0])
|
|
97
|
+
op._check_runtime_broadcast_of_vector_index(node, x, y, indices[0])
|
|
103
98
|
if not inplace:
|
|
104
99
|
x = x.clone()
|
|
105
100
|
x[indices] = y.type_as(x)
|
|
@@ -112,8 +107,7 @@ def pytorch_funcify_AdvancedIncSubtensor(op, node, **kwargs):
|
|
|
112
107
|
def adv_inc_subtensor_no_duplicates(x, y, *flattened_indices):
|
|
113
108
|
indices = indices_from_subtensor(flattened_indices, idx_list)
|
|
114
109
|
check_negative_steps(indices)
|
|
115
|
-
|
|
116
|
-
op._check_runtime_broadcasting(node, x, y, indices[0])
|
|
110
|
+
op._check_runtime_broadcast_of_vector_index(node, x, y, indices[0])
|
|
117
111
|
if not inplace:
|
|
118
112
|
x = x.clone()
|
|
119
113
|
x[indices] += y.type_as(x)
|
|
@@ -131,8 +125,7 @@ def pytorch_funcify_AdvancedIncSubtensor(op, node, **kwargs):
|
|
|
131
125
|
indices = indices_from_subtensor(flattened_indices, idx_list)
|
|
132
126
|
# Not needed because slices aren't supported in this path
|
|
133
127
|
# check_negative_steps(indices)
|
|
134
|
-
|
|
135
|
-
op._check_runtime_broadcasting(node, x, y, indices[0])
|
|
128
|
+
op._check_runtime_broadcast_of_vector_index(node, x, y, indices[0])
|
|
136
129
|
if not inplace:
|
|
137
130
|
x = x.clone()
|
|
138
131
|
x.index_put_(indices, y.type_as(x), accumulate=True)
|
|
@@ -268,6 +268,40 @@ class Erfcinv(UnaryScalarOp):
|
|
|
268
268
|
erfcinv = Erfcinv(upgrade_to_float_no_complex, name="erfcinv")
|
|
269
269
|
|
|
270
270
|
|
|
271
|
+
class NdtriExp(UnaryScalarOp):
|
|
272
|
+
"""
|
|
273
|
+
Implements the inverse of the standard normal CDF evaluated at the
|
|
274
|
+
exponent of x, `ndtri(exp(x))`, in a way that remains accurate for very
|
|
275
|
+
negative x, where `exp(x)` underflows.
|
|
276
|
+
"""
|
|
277
|
+
|
|
278
|
+
monotonic_increasing = True
|
|
279
|
+
nfunc_spec = ("scipy.special.ndtri_exp", 1, 1)
|
|
280
|
+
|
|
281
|
+
def impl(self, x):
|
|
282
|
+
return special.ndtri_exp(x)
|
|
283
|
+
|
|
284
|
+
def pullback(self, inputs, outputs, grads):
|
|
285
|
+
(x,) = inputs
|
|
286
|
+
(z,) = outputs
|
|
287
|
+
(gz,) = grads
|
|
288
|
+
if x.type in complex_types:
|
|
289
|
+
raise NotImplementedError()
|
|
290
|
+
if z.type in discrete_types:
|
|
291
|
+
if x.type in discrete_types:
|
|
292
|
+
return [x.zeros_like(dtype=config.floatX)]
|
|
293
|
+
else:
|
|
294
|
+
return [x.zeros_like()]
|
|
295
|
+
|
|
296
|
+
# d/dx ndtri(exp(x)) = exp(x) / pdf(z), evaluated as sqrt(2 * pi) * exp(x + z ** 2 / 2)
|
|
297
|
+
# so that the underflowing exp(x) and the overflowing 1 / pdf(z) never appear on their own
|
|
298
|
+
cst = np.asarray(np.sqrt(2 * np.pi), dtype=gz.type.dtype)
|
|
299
|
+
return (gz * cst * exp(x + z**2 / 2),)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
ndtri_exp = NdtriExp(upgrade_to_float_no_complex, name="ndtri_exp")
|
|
303
|
+
|
|
304
|
+
|
|
271
305
|
class Owens_t(BinaryScalarOp):
|
|
272
306
|
nfunc_spec = ("scipy.special.owens_t", 2, 1)
|
|
273
307
|
|
|
@@ -2372,6 +2372,11 @@ def erfcinv(a):
|
|
|
2372
2372
|
"""inverse complementary error function"""
|
|
2373
2373
|
|
|
2374
2374
|
|
|
2375
|
+
@scalar_elemwise
|
|
2376
|
+
def ndtri_exp(a):
|
|
2377
|
+
"""inverse standard normal cdf of the exponent of a"""
|
|
2378
|
+
|
|
2379
|
+
|
|
2375
2380
|
@scalar_elemwise
|
|
2376
2381
|
def owens_t(h, a):
|
|
2377
2382
|
"""owens t function"""
|
|
@@ -4331,6 +4336,7 @@ __all__ = [
|
|
|
4331
4336
|
"mod",
|
|
4332
4337
|
"mul",
|
|
4333
4338
|
"nan_to_num",
|
|
4339
|
+
"ndtri_exp",
|
|
4334
4340
|
"neg",
|
|
4335
4341
|
"neq",
|
|
4336
4342
|
"not_equal",
|
|
@@ -76,7 +76,6 @@ from pytensor.tensor.subtensor import (
|
|
|
76
76
|
_is_provably_non_negative,
|
|
77
77
|
_is_provably_positive,
|
|
78
78
|
_non_consecutive_adv_indexing,
|
|
79
|
-
advanced_inc_subtensor,
|
|
80
79
|
as_index_literal,
|
|
81
80
|
flatten_index_variables,
|
|
82
81
|
get_canonical_form_slice,
|
|
@@ -1104,11 +1103,13 @@ def local_useless_inc_subtensor(fgraph, node):
|
|
|
1104
1103
|
@register_specialize
|
|
1105
1104
|
@node_rewriter([AdvancedIncSubtensor])
|
|
1106
1105
|
def local_set_to_inc_subtensor(fgraph, node):
|
|
1107
|
-
r"""
|
|
1108
|
-
AdvancedIncSubtensor(x, x[ilist]+other, ilist, set_instead_of_inc=True) ->
|
|
1109
|
-
AdvancedIncSubtensor(x, other, ilist, set_instead_of_inc=False)
|
|
1106
|
+
r"""Set of a read at the same indices: ``x[idx].set(x[idx] + other)``.
|
|
1110
1107
|
|
|
1111
|
-
|
|
1108
|
+
.. code::
|
|
1109
|
+
|
|
1110
|
+
x[idx].set(x[idx] + other) -> x[idx].inc(other)
|
|
1111
|
+
|
|
1112
|
+
Only valid when ``idx`` is duplicate-free: a dense set is last-wins while an
|
|
1112
1113
|
inc accumulates, so duplicate indices would over-count.
|
|
1113
1114
|
|
|
1114
1115
|
TODO FIXME: Why doesn't this apply to all `*IncSubtensor*` `Op`\s? If it
|
|
@@ -1136,14 +1137,30 @@ def local_set_to_inc_subtensor(fgraph, node):
|
|
|
1136
1137
|
other = addn.inputs[0]
|
|
1137
1138
|
else:
|
|
1138
1139
|
return
|
|
1139
|
-
|
|
1140
|
+
# The read has to gather exactly the positions the write stores to: same base,
|
|
1141
|
+
# same axes, same indices. `idx_list` must be compared too -- it is what pins
|
|
1142
|
+
# the indices to their axes, so without it a read of ``x[:, i]`` would match a
|
|
1143
|
+
# write to ``x[i]``.
|
|
1144
|
+
if (
|
|
1145
|
+
subn.inputs[0] != node.inputs[0]
|
|
1146
|
+
or subn.op.idx_list != node.op.idx_list
|
|
1147
|
+
or subn.inputs[1:] != node.inputs[2:]
|
|
1148
|
+
):
|
|
1140
1149
|
return
|
|
1141
|
-
# set->inc is only valid when
|
|
1142
|
-
# is last-wins at repeated positions, while
|
|
1143
|
-
# contributions of every occurrence and
|
|
1144
|
-
|
|
1150
|
+
# set->inc is only valid when the written positions are duplicate-free:
|
|
1151
|
+
# ``set(x[idx] + other)`` is last-wins at repeated positions, while
|
|
1152
|
+
# ``inc(other)`` would accumulate the contributions of every occurrence and
|
|
1153
|
+
# over-count them.
|
|
1154
|
+
indices = indices_from_subtensor(node.inputs[2:], node.op.idx_list)
|
|
1155
|
+
if not _advanced_indices_jointly_unique(indices, fgraph):
|
|
1145
1156
|
return
|
|
1146
|
-
|
|
1157
|
+
new_op = type(node.op)(
|
|
1158
|
+
idx_list=node.op.idx_list,
|
|
1159
|
+
inplace=node.op.inplace,
|
|
1160
|
+
set_instead_of_inc=False,
|
|
1161
|
+
ignore_duplicates=node.op.ignore_duplicates,
|
|
1162
|
+
)
|
|
1163
|
+
ret = new_op(node.inputs[0], other, *node.inputs[2:])
|
|
1147
1164
|
|
|
1148
1165
|
copy_stack_trace(node.outputs, ret)
|
|
1149
1166
|
|
|
@@ -1341,52 +1358,6 @@ def local_convert_negative_indices(fgraph, node):
|
|
|
1341
1358
|
return [new_subtensor]
|
|
1342
1359
|
|
|
1343
1360
|
|
|
1344
|
-
@register_canonicalize
|
|
1345
|
-
@register_specialize
|
|
1346
|
-
@node_rewriter([AdvancedSubtensor])
|
|
1347
|
-
def local_useless_AdvancedSubtensor1(fgraph, node):
|
|
1348
|
-
"""Remove a leading-axis vector take that selects the full input.
|
|
1349
|
-
|
|
1350
|
-
The full input is taken when the index is equivalent to
|
|
1351
|
-
``arange(0, input.shape[0], 1)`` using either an explicit list/vector or
|
|
1352
|
-
the `ARange` `Op`.
|
|
1353
|
-
|
|
1354
|
-
"""
|
|
1355
|
-
if node.op.idx_list != (0,):
|
|
1356
|
-
# Only the leading integer-vector take (x[ilist])
|
|
1357
|
-
return
|
|
1358
|
-
|
|
1359
|
-
# This optimization needs ShapeOpt and fgraph.shape_feature
|
|
1360
|
-
if not hasattr(fgraph, "shape_feature"):
|
|
1361
|
-
return
|
|
1362
|
-
|
|
1363
|
-
shape_feature = fgraph.shape_feature
|
|
1364
|
-
|
|
1365
|
-
# get length of the indexed tensor along the first axis
|
|
1366
|
-
try:
|
|
1367
|
-
length = get_scalar_constant_value(
|
|
1368
|
-
shape_feature.get_shape(node.inputs[0], 0), only_process_constants=True
|
|
1369
|
-
)
|
|
1370
|
-
except NotScalarConstantError:
|
|
1371
|
-
return False
|
|
1372
|
-
|
|
1373
|
-
# get index (which must be a vector by definition)
|
|
1374
|
-
idx = node.inputs[1]
|
|
1375
|
-
|
|
1376
|
-
# `idx` must be equivalent to [0,1,...,shape[0] - 1] to qualify for
|
|
1377
|
-
# this optimization
|
|
1378
|
-
if isinstance(idx, Constant):
|
|
1379
|
-
idx = idx.value
|
|
1380
|
-
if len(idx) != length:
|
|
1381
|
-
return False
|
|
1382
|
-
if np.any(idx != np.arange(length)):
|
|
1383
|
-
return False
|
|
1384
|
-
else:
|
|
1385
|
-
return False
|
|
1386
|
-
|
|
1387
|
-
return [node.inputs[0]]
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
1361
|
def _arange_index_to_slice(idx):
|
|
1391
1362
|
"""Return the Python ``slice`` equivalent to ``idx`` if it is a constant or
|
|
1392
1363
|
symbolic arange with non-negative offset, else ``None``.
|
|
@@ -2343,8 +2314,7 @@ def local_write_of_write_same_indices(fgraph, node):
|
|
|
2343
2314
|
base, a, *inner_idx_vars = inner_x.owner.inputs
|
|
2344
2315
|
|
|
2345
2316
|
# Same indices: idx_list (slice specs) must match and all index
|
|
2346
|
-
# variables must be identical.
|
|
2347
|
-
# class-level idx_list = (0,) so the comparison is trivially true.
|
|
2317
|
+
# variables must be identical.
|
|
2348
2318
|
if node.op.idx_list != inner_x.owner.op.idx_list:
|
|
2349
2319
|
return
|
|
2350
2320
|
if not all(o is i for o, i in zip(outer_idx_vars, inner_idx_vars, strict=True)):
|
|
@@ -1062,6 +1062,11 @@ def local_subtensor_make_vector(fgraph, node):
|
|
|
1062
1062
|
except NotScalarConstantError:
|
|
1063
1063
|
pass
|
|
1064
1064
|
elif idx.ndim == 1 and isinstance(idx, Constant):
|
|
1065
|
+
if idx.type.dtype == "bool":
|
|
1066
|
+
# A boolean mask selects the entries it is True at, which is not
|
|
1067
|
+
# what mapping it to positions below would read it as. Leave it
|
|
1068
|
+
# for `bool_idx_to_nonzero` to turn into integer positions.
|
|
1069
|
+
return False
|
|
1065
1070
|
values = list(map(int, list(idx.value)))
|
|
1066
1071
|
if len(values) == 1:
|
|
1067
1072
|
ret = expand_dims(x.owner.inputs[values[0]], axis=0)
|
|
@@ -2445,29 +2445,32 @@ class AdvancedIncSubtensor(BaseSubtensor, COp):
|
|
|
2445
2445
|
def c_code_cache_version(self):
|
|
2446
2446
|
return (2,)
|
|
2447
2447
|
|
|
2448
|
-
def
|
|
2449
|
-
"""Raise if ``y`` would
|
|
2448
|
+
def _check_runtime_broadcast_of_vector_index(self, node, x, y, idx) -> None:
|
|
2449
|
+
"""Raise if ``x[idx] (+)= y`` would broadcast ``y`` at runtime.
|
|
2450
2450
|
|
|
2451
|
-
|
|
2452
|
-
|
|
2451
|
+
Only the single integer vector index form is checked, where the update
|
|
2452
|
+
must have shape ``(idx.shape[0], *x.shape[1:])``. Other index forms
|
|
2453
|
+
(boolean masks, multidimensional or multiple indices) are left to the
|
|
2454
|
+
numpy-like broadcasting of the underlying implementation.
|
|
2453
2455
|
"""
|
|
2454
|
-
if
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
)
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2456
|
+
if self.idx_list != (0,):
|
|
2457
|
+
return
|
|
2458
|
+
idx_type = node.inputs[2].type
|
|
2459
|
+
if idx_type.ndim != 1 or idx_type.dtype == "bool":
|
|
2460
|
+
return
|
|
2461
|
+
|
|
2462
|
+
y_static_bcast = node.inputs[1].type.broadcastable
|
|
2463
|
+
expected_shape = (idx.shape[0], *x.shape[1:])
|
|
2464
|
+
if any(
|
|
2465
|
+
not y_bcast and y_dim == 1 and expected_dim != 1
|
|
2466
|
+
for y_bcast, y_dim, expected_dim in zip(
|
|
2467
|
+
reversed(y_static_bcast),
|
|
2468
|
+
reversed(y.shape),
|
|
2469
|
+
reversed(expected_shape),
|
|
2470
|
+
strict=False,
|
|
2471
|
+
)
|
|
2472
|
+
):
|
|
2473
|
+
raise ValueError(self._runtime_broadcast_error_msg)
|
|
2471
2474
|
|
|
2472
2475
|
def __init__(
|
|
2473
2476
|
self,
|
|
@@ -2510,8 +2513,7 @@ class AdvancedIncSubtensor(BaseSubtensor, COp):
|
|
|
2510
2513
|
def perform(self, node, inputs, out_):
|
|
2511
2514
|
x, y, *index_variables = inputs
|
|
2512
2515
|
|
|
2513
|
-
|
|
2514
|
-
self._check_runtime_broadcasting(node, x, y, index_variables[0])
|
|
2516
|
+
self._check_runtime_broadcast_of_vector_index(node, x, y, index_variables[0])
|
|
2515
2517
|
|
|
2516
2518
|
full_indices = unflatten_index_variables(index_variables, self.idx_list)
|
|
2517
2519
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|