pytensor 2.36.2__tar.gz → 2.36.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-2.36.2/pytensor.egg-info → pytensor-2.36.3}/PKG-INFO +1 -1
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/_version.py +3 -3
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/configdefaults.py +0 -9
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/configparser.py +0 -1
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/gradient.py +2 -5
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/scan.py +7 -2
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/tensor_basic.py +3 -20
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/core.py +0 -18
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/cache.py +49 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/basic.py +0 -34
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/elemwise.py +12 -2
- pytensor-2.36.3/pytensor/link/numba/dispatch/linalg/_LAPACK.py +953 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +72 -80
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +10 -6
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/scan.py +1 -1
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/slinalg.py +84 -28
- pytensor-2.36.3/pytensor/link/numba/dispatch/string_codegen.py +31 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/subtensor.py +1 -1
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/tensor_basic.py +1 -1
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/basic.py +23 -42
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/basic.py +4 -35
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/blockwise.py +15 -4
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/reshape.py +42 -15
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/math.py +7 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/subtensor_lift.py +5 -1
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/signal/conv.py +0 -5
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/type.py +8 -11
- {pytensor-2.36.2 → pytensor-2.36.3/pytensor.egg-info}/PKG-INFO +1 -1
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor.egg-info/SOURCES.txt +2 -6
- pytensor-2.36.2/doc/library/tensor/conv.rst +0 -11
- pytensor-2.36.2/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -557
- pytensor-2.36.2/pytensor/tensor/conv/__init__.py +0 -10
- pytensor-2.36.2/pytensor/tensor/conv/abstract_conv.py +0 -3720
- pytensor-2.36.2/tests/tensor/conv/c_code/corr3d_gemm.c +0 -421
- pytensor-2.36.2/tests/tensor/conv/c_code/corr_gemm.c +0 -570
- {pytensor-2.36.2 → pytensor-2.36.3}/LICENSE.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/MANIFEST.in +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/README.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/.templates/layout.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/.templates/nb-badges.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/LICENSE.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/README.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/acknowledgement.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/bcast.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/bcast.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/blog.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/conf.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/core_development_guide.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/css.inc +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/environment.yml +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/apply.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/apply.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/apply2.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/ctype.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/inplace.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/op.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/scan.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/tips.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/type.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/unittest.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/extending/using_params.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/faq.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/gallery/optimize/root.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/gallery/page_footer.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/glossary.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/PyTensor.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/binder.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/blocksparse.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/colab.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/github.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/lstm.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/talk2010.gif +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/images/talk2010.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/install.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/internal/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/introduction.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/function.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/io.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/config.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/features.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/op.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/replace.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/type.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/printing.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/scan.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/functional.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/optimize.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/random/distributions.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/typed_list.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/xtensor/index.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/xtensor/linalg.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/xtensor/math.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/xtensor/module_functions.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/xtensor/random.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/library/xtensor/type.md +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/links.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/optimizations.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/pylintrc +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/robots.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/troubleshooting.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/apply.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/index.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/prng.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/doc/user_guide.rst +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pyproject.toml +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/breakpoint.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/builders.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/debugmode.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/function/types.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/io.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/mode.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/profiling.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/html/template.html +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/features.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/fg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/op.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/replace.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/traversal.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/graph/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/ifelse.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/ipython.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/cmodule.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/op.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/c/type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/jax/ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/nlinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/slinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/sort.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/dispatch/subtensor.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/mlx/linker.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/blockwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/sort.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/typed_list.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/slinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/link/vm.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/npy_2_compat.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/printing.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/py.typed +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/raise_op.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/loop.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/op.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/rewriting.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/scan/views.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/linalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/sparse/variable.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/_linalg/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/_linalg/solve/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/_linalg/solve/rewriting.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/_linalg/solve/tridiagonal.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/blas.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/blas_headers.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/einsum.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/elemwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/extra_ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/optimize.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/pad.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/op.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/elemwise.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/linalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/reshape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/subtensor.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/signal/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/slinalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/special.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/subtensor.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/var.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/variable.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/updates.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/indexing.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/linalg.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/random.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/reduction.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/__init__.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/basic.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/indexing.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/math.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/reduction.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/utils.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/rewriting/vectorization.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/shape.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/type.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor/xtensor/vectorization.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/setup.cfg +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/setup.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_breakpoint.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_config.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_gradient.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_ifelse.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_printing.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_raise_op.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_rop.py +0 -0
- {pytensor-2.36.2 → pytensor-2.36.3}/tests/test_updates.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-01-
|
|
11
|
+
"date": "2026-01-07T19:04:45+0100",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.36.
|
|
14
|
+
"full-revisionid": "ac11da625fc3155790bc0b4794807232b73de0b8",
|
|
15
|
+
"version": "2.36.3"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -270,15 +270,6 @@ def add_basic_configvars():
|
|
|
270
270
|
in_c_key=False,
|
|
271
271
|
)
|
|
272
272
|
|
|
273
|
-
config.add(
|
|
274
|
-
"conv__assert_shape",
|
|
275
|
-
"If True, AbstractConv* ops will verify that user-provided"
|
|
276
|
-
" shapes match the runtime shapes (debugging option,"
|
|
277
|
-
" may slow down compilation)",
|
|
278
|
-
BoolParam(False),
|
|
279
|
-
in_c_key=False,
|
|
280
|
-
)
|
|
281
|
-
|
|
282
273
|
config.add(
|
|
283
274
|
"print_global_stats",
|
|
284
275
|
"Print some global statistics (time spent) at the end",
|
|
@@ -2104,16 +2104,13 @@ def jacobian(
|
|
|
2104
2104
|
idx, expr, *wrt = args
|
|
2105
2105
|
return grad(expr[idx], wrt, **grad_kwargs)
|
|
2106
2106
|
|
|
2107
|
-
jacobian_matrices
|
|
2107
|
+
jacobian_matrices = pytensor.scan(
|
|
2108
2108
|
inner_function,
|
|
2109
2109
|
sequences=pytensor.tensor.arange(expression.size),
|
|
2110
2110
|
non_sequences=[expression.ravel(), *wrt],
|
|
2111
|
+
return_updates=False,
|
|
2111
2112
|
return_list=True,
|
|
2112
2113
|
)
|
|
2113
|
-
if updates:
|
|
2114
|
-
raise ValueError(
|
|
2115
|
-
"The scan used to build the jacobian matrices returned a list of updates"
|
|
2116
|
-
)
|
|
2117
2114
|
|
|
2118
2115
|
if jacobian_matrices[0].ndim < (expression.ndim + wrt[0].ndim):
|
|
2119
2116
|
# There was some raveling or squeezing done prior to getting the jacobians
|
|
@@ -10,7 +10,7 @@ from pytensor.scan.op import Scan
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
@jax_funcify.register(Scan)
|
|
13
|
-
def jax_funcify_Scan(op: Scan, **kwargs):
|
|
13
|
+
def jax_funcify_Scan(op: Scan, node, **kwargs):
|
|
14
14
|
# Note: This implementation is different from the internal PyTensor Scan op.
|
|
15
15
|
# In particular, we don't make use of the provided buffers for recurring outputs (MIT-SOT, SIT-SOT)
|
|
16
16
|
# These buffers include the initial state and enough space to store as many intermediate results as needed.
|
|
@@ -29,7 +29,10 @@ def jax_funcify_Scan(op: Scan, **kwargs):
|
|
|
29
29
|
|
|
30
30
|
# Optimize inner graph (exclude any defalut rewrites that are incompatible with JAX mode)
|
|
31
31
|
rewriter = (
|
|
32
|
-
get_mode(op.mode)
|
|
32
|
+
get_mode(op.mode)
|
|
33
|
+
.including("jax")
|
|
34
|
+
.excluding("numba", *JAX._optimizer.exclude)
|
|
35
|
+
.optimizer
|
|
33
36
|
)
|
|
34
37
|
rewriter(op.fgraph)
|
|
35
38
|
scan_inner_func = jax_funcify(op.fgraph, **kwargs)
|
|
@@ -216,6 +219,8 @@ def jax_funcify_Scan(op: Scan, **kwargs):
|
|
|
216
219
|
if trace.shape[0] > buffer_size:
|
|
217
220
|
# Trace is longer than buffer, keep just the last `buffer.shape[0]` entries
|
|
218
221
|
partial_trace = trace[-buffer_size:]
|
|
222
|
+
elif trace.shape[0] == buffer_size:
|
|
223
|
+
partial_trace = trace
|
|
219
224
|
else:
|
|
220
225
|
# Trace is shorter than buffer, this happens when we keep the initial_state
|
|
221
226
|
if init_state.ndim < buffer.ndim:
|
|
@@ -17,16 +17,15 @@ from pytensor.tensor.basic import (
|
|
|
17
17
|
ScalarFromTensor,
|
|
18
18
|
Split,
|
|
19
19
|
TensorFromScalar,
|
|
20
|
-
Tri,
|
|
21
20
|
get_scalar_constant_value,
|
|
22
21
|
)
|
|
23
22
|
from pytensor.tensor.exceptions import NotScalarConstantError
|
|
24
23
|
from pytensor.tensor.shape import Shape_i
|
|
25
24
|
|
|
26
25
|
|
|
27
|
-
ARANGE_CONCRETE_VALUE_ERROR = """JAX requires the arguments of `jax.numpy.arange`
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
ARANGE_CONCRETE_VALUE_ERROR = """JAX requires the arguments of `jax.numpy.arange` to be constants.
|
|
27
|
+
The graph that you defined thus cannot be JIT-compiled by JAX.
|
|
28
|
+
An example of a graph that can be compiled to JAX:
|
|
30
29
|
>>> import pytensor.tensor as pt
|
|
31
30
|
>>> pt.arange(1, 10, 2)
|
|
32
31
|
"""
|
|
@@ -185,19 +184,3 @@ def jax_funcify_ScalarFromTensor(op, **kwargs):
|
|
|
185
184
|
return jnp.array(x).flatten()[0]
|
|
186
185
|
|
|
187
186
|
return scalar_from_tensor
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
@jax_funcify.register(Tri)
|
|
191
|
-
def jax_funcify_Tri(op, node, **kwargs):
|
|
192
|
-
# node.inputs is N, M, k
|
|
193
|
-
const_args = [getattr(x, "data", None) for x in node.inputs]
|
|
194
|
-
|
|
195
|
-
def tri(*args):
|
|
196
|
-
# args is N, M, k
|
|
197
|
-
args = [
|
|
198
|
-
x if const_x is None else const_x
|
|
199
|
-
for x, const_x in zip(args, const_args, strict=True)
|
|
200
|
-
]
|
|
201
|
-
return jnp.tri(*args, dtype=op.dtype)
|
|
202
|
-
|
|
203
|
-
return tri
|
|
@@ -13,7 +13,6 @@ from pytensor.tensor.basic import (
|
|
|
13
13
|
ScalarFromTensor,
|
|
14
14
|
Split,
|
|
15
15
|
TensorFromScalar,
|
|
16
|
-
Tri,
|
|
17
16
|
get_scalar_constant_value,
|
|
18
17
|
)
|
|
19
18
|
from pytensor.tensor.exceptions import NotScalarConstantError
|
|
@@ -219,23 +218,6 @@ def mlx_funcify_ScalarFromTensor(op, **kwargs):
|
|
|
219
218
|
return scalar_from_tensor
|
|
220
219
|
|
|
221
220
|
|
|
222
|
-
@mlx_funcify.register(Tri)
|
|
223
|
-
def mlx_funcify_Tri(op, node, **kwargs):
|
|
224
|
-
# node.inputs -> N, M, k
|
|
225
|
-
const_args = [getattr(inp, "data", None) for inp in node.inputs]
|
|
226
|
-
dtype = convert_dtype_to_mlx(op.dtype)
|
|
227
|
-
|
|
228
|
-
def tri(*args):
|
|
229
|
-
# Replace args with compile-time constants when available
|
|
230
|
-
args = [
|
|
231
|
-
arg if const_a is None else const_a
|
|
232
|
-
for arg, const_a in zip(args, const_args, strict=True)
|
|
233
|
-
]
|
|
234
|
-
return mx.tri(*args, dtype=dtype)
|
|
235
|
-
|
|
236
|
-
return tri
|
|
237
|
-
|
|
238
|
-
|
|
239
221
|
@mlx_funcify.register(AllocEmpty)
|
|
240
222
|
def mlx_funcify_AllocEmpty(op, node, **kwargs):
|
|
241
223
|
dtype = convert_dtype_to_mlx(op.dtype)
|
|
@@ -5,6 +5,9 @@ from tempfile import NamedTemporaryFile
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
from weakref import WeakKeyDictionary
|
|
7
7
|
|
|
8
|
+
import numba
|
|
9
|
+
from llvmlite import ir
|
|
10
|
+
from numba.core import cgutils
|
|
8
11
|
from numba.core.caching import CacheImpl, _CacheLocator
|
|
9
12
|
|
|
10
13
|
from pytensor.configdefaults import config
|
|
@@ -127,3 +130,49 @@ def compile_numba_function_src(
|
|
|
127
130
|
CACHED_SRC_FUNCTIONS[res] = cache_key
|
|
128
131
|
|
|
129
132
|
return res # type: ignore
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
@numba.extending.intrinsic(prefer_literal=True)
|
|
136
|
+
def _call_cached_ptr(typingctx, get_ptr_func, func_type_ref, unique_func_name_lit):
|
|
137
|
+
"""
|
|
138
|
+
Enable caching of function pointers returned by `get_ptr_func`.
|
|
139
|
+
|
|
140
|
+
When one of our Numba-dispatched functions depends on a pointer to a compiled function function (e.g. when we call
|
|
141
|
+
cython_lapack routines), numba will refuse to cache the function, because the pointer may change between runs.
|
|
142
|
+
|
|
143
|
+
This intrinsic allows us to cache the pointer ourselves, by storing it in a global variable keyed by a literal
|
|
144
|
+
`unique_func_name_lit`. The first time the intrinsic is called, it will call `get_ptr_func` to get the pointer, store it
|
|
145
|
+
in the global variable, and return it. Subsequent calls will load the pointer from the global variable.
|
|
146
|
+
"""
|
|
147
|
+
func_type = func_type_ref.instance_type
|
|
148
|
+
cache_key = unique_func_name_lit.literal_value
|
|
149
|
+
|
|
150
|
+
def codegen(context, builder, signature, args):
|
|
151
|
+
ptr_ty = ir.PointerType(ir.IntType(8))
|
|
152
|
+
null = ptr_ty(None)
|
|
153
|
+
align = 64
|
|
154
|
+
|
|
155
|
+
mod = builder.module
|
|
156
|
+
var = cgutils.add_global_variable(mod, ptr_ty, f"_ptr_cache_{cache_key}")
|
|
157
|
+
var.align = align
|
|
158
|
+
var.linkage = "private"
|
|
159
|
+
var.initializer = null
|
|
160
|
+
|
|
161
|
+
var_val = builder.load_atomic(var, "acquire", align)
|
|
162
|
+
result_ptr = cgutils.alloca_once_value(builder, var_val)
|
|
163
|
+
|
|
164
|
+
with builder.if_then(builder.icmp_signed("==", var_val, null), likely=False):
|
|
165
|
+
sig = typingctx.resolve_function_type(get_ptr_func, [], {})
|
|
166
|
+
f = context.get_function(get_ptr_func, sig)
|
|
167
|
+
new_ptr = f(builder, [])
|
|
168
|
+
new_ptr = builder.inttoptr(new_ptr, ptr_ty)
|
|
169
|
+
builder.store_atomic(new_ptr, var, "release", align)
|
|
170
|
+
builder.store(new_ptr, result_ptr)
|
|
171
|
+
|
|
172
|
+
sfunc = cgutils.create_struct_proxy(func_type)(context, builder)
|
|
173
|
+
sfunc.c_addr = builder.load(result_ptr)
|
|
174
|
+
|
|
175
|
+
return sfunc._getvalue()
|
|
176
|
+
|
|
177
|
+
sig = func_type(get_ptr_func, func_type_ref, unique_func_name_lit)
|
|
178
|
+
return sig, codegen
|
|
@@ -171,40 +171,6 @@ def create_numba_signature(
|
|
|
171
171
|
return numba.types.void(*input_types)
|
|
172
172
|
|
|
173
173
|
|
|
174
|
-
def create_tuple_creator(f, n):
|
|
175
|
-
"""Construct a compile-time ``tuple``-comprehension-like loop.
|
|
176
|
-
|
|
177
|
-
See https://github.com/numba/numba/issues/2771#issuecomment-414358902
|
|
178
|
-
"""
|
|
179
|
-
warnings.warn(
|
|
180
|
-
"create_tuple_creator is deprecated and will be removed in a future release",
|
|
181
|
-
FutureWarning,
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
assert n > 0
|
|
185
|
-
|
|
186
|
-
f = numba_njit(f)
|
|
187
|
-
|
|
188
|
-
@numba_njit
|
|
189
|
-
def creator(args):
|
|
190
|
-
return (f(0, *args),)
|
|
191
|
-
|
|
192
|
-
for i in range(1, n):
|
|
193
|
-
|
|
194
|
-
@numba_njit
|
|
195
|
-
def creator(args, creator=creator, i=i):
|
|
196
|
-
return (*creator(args), f(i, *args))
|
|
197
|
-
|
|
198
|
-
return numba_njit(lambda *args: creator(args))
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
def create_tuple_string(x):
|
|
202
|
-
if len(x) == 1:
|
|
203
|
-
return f"({x[0]},)"
|
|
204
|
-
else:
|
|
205
|
-
return f"({', '.join(x)})"
|
|
206
|
-
|
|
207
|
-
|
|
208
174
|
@numba.extending.intrinsic
|
|
209
175
|
def direct_cast(typingctx, val, typ):
|
|
210
176
|
if isinstance(typ, numba.types.TypeRef):
|
|
@@ -14,11 +14,11 @@ from pytensor.link.numba.cache import (
|
|
|
14
14
|
)
|
|
15
15
|
from pytensor.link.numba.dispatch import basic as numba_basic
|
|
16
16
|
from pytensor.link.numba.dispatch.basic import (
|
|
17
|
-
create_tuple_string,
|
|
18
17
|
numba_funcify_and_cache_key,
|
|
19
18
|
register_funcify_and_cache_key,
|
|
20
19
|
register_funcify_default_op_cache_key,
|
|
21
20
|
)
|
|
21
|
+
from pytensor.link.numba.dispatch.string_codegen import create_tuple_string
|
|
22
22
|
from pytensor.link.numba.dispatch.vectorize_codegen import (
|
|
23
23
|
_vectorized,
|
|
24
24
|
encode_literals,
|
|
@@ -466,6 +466,16 @@ def numba_funcify_DimShuffle(op: DimShuffle, node, **kwargs):
|
|
|
466
466
|
|
|
467
467
|
return squeeze_to_0d
|
|
468
468
|
|
|
469
|
+
elif op.input_ndim == 0:
|
|
470
|
+
# DimShuffle can only be an expand_dims or a no_op
|
|
471
|
+
# This branch uses asarray in case we get a scalar due to https://github.com/numba/numba/issues/10358
|
|
472
|
+
new_shape = shape_template
|
|
473
|
+
new_strides = strides_template
|
|
474
|
+
|
|
475
|
+
@numba_basic.numba_njit
|
|
476
|
+
def dimshuffle(x):
|
|
477
|
+
return as_strided(np.asarray(x), shape=new_shape, strides=new_strides)
|
|
478
|
+
|
|
469
479
|
else:
|
|
470
480
|
|
|
471
481
|
@numba_basic.numba_njit
|
|
@@ -490,7 +500,7 @@ def numba_funcify_DimShuffle(op: DimShuffle, node, **kwargs):
|
|
|
490
500
|
|
|
491
501
|
return as_strided(x, shape=new_shape, strides=new_strides)
|
|
492
502
|
|
|
493
|
-
cache_version =
|
|
503
|
+
cache_version = 2
|
|
494
504
|
return dimshuffle, cache_version
|
|
495
505
|
|
|
496
506
|
|