pytensor 2.37.0__tar.gz → 2.38.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytensor-2.37.0/pytensor.egg-info → pytensor-2.38.0}/PKG-INFO +1 -1
- pytensor-2.38.0/doc/library/xtensor/signal.md +7 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pyproject.toml +1 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/_version.py +3 -3
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/replace.py +25 -10
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +385 -0
- pytensor-2.38.0/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +1320 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/slinalg.py +99 -0
- pytensor-2.38.0/pytensor/link/numba/dispatch/sparse/basic.py +240 -0
- pytensor-2.38.0/pytensor/link/numba/dispatch/sparse/math.py +649 -0
- pytensor-2.38.0/pytensor/link/numba/dispatch/sparse/variable.py +598 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/basic.py +46 -10
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/math.py +7 -4
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/linear_control.py +144 -53
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/elemwise.py +3 -3
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/extra_ops.py +2 -2
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/nlinalg.py +5 -1
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/optimize.py +2 -1
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/basic.py +7 -3
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/blockwise.py +11 -5
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/math.py +5 -2
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/shape.py +31 -8
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/subtensor.py +1 -1
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/shape.py +1 -1
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/signal/conv.py +5 -4
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/slinalg.py +418 -3
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/subtensor.py +2 -1
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/utils.py +11 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/__init__.py +1 -1
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/basic.py +50 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/indexing.py +48 -2
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/reduction.py +17 -6
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/utils.py +10 -2
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/shape.py +50 -42
- pytensor-2.38.0/pytensor/xtensor/signal.py +74 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/type.py +79 -20
- pytensor-2.38.0/pytensor/xtensor/vectorization.py +664 -0
- {pytensor-2.37.0 → pytensor-2.38.0/pytensor.egg-info}/PKG-INFO +1 -1
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/SOURCES.txt +3 -0
- pytensor-2.37.0/pytensor/link/numba/dispatch/sparse/basic.py +0 -86
- pytensor-2.37.0/pytensor/link/numba/dispatch/sparse/math.py +0 -372
- pytensor-2.37.0/pytensor/link/numba/dispatch/sparse/variable.py +0 -420
- pytensor-2.37.0/pytensor/xtensor/vectorization.py +0 -278
- {pytensor-2.37.0 → pytensor-2.38.0}/LICENSE.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/MANIFEST.in +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/README.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/layout.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/nb-badges.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/LICENSE.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/README.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/acknowledgement.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/bcast.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/bcast.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/blog.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/conf.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/core_development_guide.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/css.inc +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/environment.yml +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/apply.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/apply.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/apply2.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/ctype.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/inplace.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/op.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/scan.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/tips.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/type.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/unittest.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/using_params.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/faq.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/optimize/root.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/page_footer.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/glossary.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/PyTensor.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/binder.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/blocksparse.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/colab.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/github.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/lstm.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/talk2010.gif +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/talk2010.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/install.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/internal/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/introduction.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/function.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/io.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/config.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/features.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/op.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/replace.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/type.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/printing.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/scan.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/functional.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/optimize.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/random/distributions.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/typed_list.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/index.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/linalg.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/math.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/module_functions.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/random.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/type.md +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/links.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/optimizations.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/pylintrc +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/robots.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/troubleshooting.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/apply.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/index.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/prng.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/doc/user_guide.rst +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/breakpoint.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/builders.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/debugmode.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/function/types.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/io.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/mode.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/profiling.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/configdefaults.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/configparser.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/html/template.html +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/gradient.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/features.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/fg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/op.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/traversal.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/ifelse.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/ipython.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/cmodule.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/op.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/core.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/math.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/nlinalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/shape.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/slinalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/sort.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/subtensor.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/linker.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/cache.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/blockwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/linear_control.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/shape.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/sort.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/typed_list.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/shape.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/slinalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/vm.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/npy_2_compat.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/printing.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/py.typed +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/raise_op.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/loop.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/math.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/op.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/rewriting.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/views.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/linalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/variable.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/rewriting.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/tridiagonal.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blas.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blas_headers.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blockwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/einsum.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/math.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/pad.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/op.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/reshape.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/elemwise.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/linalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/reshape.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/subtensor_lift.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/signal/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/special.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/utils.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/var.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/variable.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/updates.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/linalg.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/math.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/random.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/__init__.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/basic.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/indexing.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/math.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/reduction.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/shape.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/vectorization.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/setup.cfg +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/setup.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_breakpoint.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_config.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_gradient.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_ifelse.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_printing.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_raise_op.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_rop.py +0 -0
- {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_updates.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-
|
|
11
|
+
"date": "2026-02-19T15:15:27+0100",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.
|
|
14
|
+
"full-revisionid": "87470065d89190405c9291235daf621d17de17ed",
|
|
15
|
+
"version": "2.38.0"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -208,19 +208,13 @@ def graph_replace(
|
|
|
208
208
|
|
|
209
209
|
|
|
210
210
|
@singledispatch
|
|
211
|
-
def _vectorize_node(op: Op, node: Apply, *batched_inputs) -> Apply:
|
|
211
|
+
def _vectorize_node(op: Op, node: Apply, *batched_inputs) -> Apply | Sequence[Variable]:
|
|
212
212
|
# Default implementation is provided in pytensor.tensor.blockwise
|
|
213
213
|
raise NotImplementedError
|
|
214
214
|
|
|
215
215
|
|
|
216
|
-
def vectorize_node(node: Apply, *batched_inputs) -> Apply:
|
|
217
|
-
"""Returns vectorized version of node with new batched inputs."""
|
|
218
|
-
op = node.op
|
|
219
|
-
return _vectorize_node(op, node, *batched_inputs)
|
|
220
|
-
|
|
221
|
-
|
|
222
216
|
def _vectorize_not_needed(op, node, *batched_inputs):
|
|
223
|
-
return op.make_node(*batched_inputs)
|
|
217
|
+
return op.make_node(*batched_inputs).outputs
|
|
224
218
|
|
|
225
219
|
|
|
226
220
|
@overload
|
|
@@ -289,19 +283,40 @@ def vectorize_graph(
|
|
|
289
283
|
# [array([-10., -11.]), array([10., 11.])]
|
|
290
284
|
|
|
291
285
|
"""
|
|
286
|
+
# TODO: Move this to tensor.vectorize, and make this helper type agnostic.
|
|
287
|
+
#
|
|
288
|
+
# This helper may dispatch to tensor.vectorize_graph or xtensor.vectorize_graph depending on the replacement types
|
|
289
|
+
# The behavior is distinct, because tensor vectorization depends on axis-position while xtensor depends on dimension labels
|
|
290
|
+
#
|
|
291
|
+
# xtensor.vectorize_graph will be able to handle batched inner tensor operations, while tensor.vectorize_graph won't,
|
|
292
|
+
# as it is by design unaware of xtensors and their semantics.
|
|
292
293
|
if isinstance(outputs, Sequence):
|
|
293
294
|
seq_outputs = outputs
|
|
294
295
|
else:
|
|
295
296
|
seq_outputs = [outputs]
|
|
296
297
|
|
|
298
|
+
if not all(
|
|
299
|
+
isinstance(key, Variable) and isinstance(value, Variable)
|
|
300
|
+
for key, value in replace.items()
|
|
301
|
+
):
|
|
302
|
+
raise ValueError(f"Some of the replaced items are not Variables: {replace}")
|
|
303
|
+
|
|
297
304
|
inputs = truncated_graph_inputs(seq_outputs, ancestors_to_include=replace.keys())
|
|
298
305
|
new_inputs = [replace.get(inp, inp) for inp in inputs]
|
|
299
306
|
|
|
300
307
|
vect_vars = dict(zip(inputs, new_inputs, strict=True))
|
|
301
308
|
for node in toposort(seq_outputs, blockers=inputs):
|
|
302
309
|
vect_inputs = [vect_vars.get(inp, inp) for inp in node.inputs]
|
|
303
|
-
|
|
304
|
-
|
|
310
|
+
|
|
311
|
+
vect_node_or_outputs = _vectorize_node(node.op, node, *vect_inputs)
|
|
312
|
+
# Compatibility with the old API
|
|
313
|
+
vect_outputs = (
|
|
314
|
+
vect_node_or_outputs.outputs
|
|
315
|
+
if isinstance(vect_node_or_outputs, Apply)
|
|
316
|
+
else vect_node_or_outputs
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
for output, vect_output in zip(node.outputs, vect_outputs, strict=True):
|
|
305
320
|
if output in vect_vars:
|
|
306
321
|
# This can happen when some outputs of a multi-output node are given a replacement,
|
|
307
322
|
# while some of the remaining outputs are still needed in the graph.
|
|
@@ -946,3 +946,388 @@ class _LAPACK:
|
|
|
946
946
|
fn(TRANA, TRANB, ISGN, M, N, A, LDA, B, LDB, C, LDC, SCALE, INFO)
|
|
947
947
|
|
|
948
948
|
return trsyl
|
|
949
|
+
|
|
950
|
+
@classmethod
|
|
951
|
+
def numba_xgges(cls, dtype):
|
|
952
|
+
"""
|
|
953
|
+
Compute generalized eigenvalues and, optionally, the left and/or right generalized Schur vectors of a pair
|
|
954
|
+
of real nonsymmetric matrices (A,B).
|
|
955
|
+
|
|
956
|
+
Called by scipy.linalg.qz and scipy.linalg.ordqz.
|
|
957
|
+
"""
|
|
958
|
+
kind = get_blas_kind(dtype)
|
|
959
|
+
float_pointer = _get_nb_float_from_dtype(kind)
|
|
960
|
+
unique_func_name = f"scipy.lapack.{kind}gges"
|
|
961
|
+
|
|
962
|
+
@numba_basic.numba_njit
|
|
963
|
+
def get_gges_pointer():
|
|
964
|
+
with numba.objmode(ptr=types.intp):
|
|
965
|
+
ptr = get_lapack_ptr(dtype, "gges")
|
|
966
|
+
return ptr
|
|
967
|
+
|
|
968
|
+
if isinstance(dtype, Complex):
|
|
969
|
+
real_pointer = nb_f64p if dtype is nb_c128 else nb_f32p
|
|
970
|
+
gges_function_type = types.FunctionType(
|
|
971
|
+
types.void(
|
|
972
|
+
nb_i32p, # JOBVSL
|
|
973
|
+
nb_i32p, # JOBVSR
|
|
974
|
+
nb_i32p, # SORT
|
|
975
|
+
nb_i32p, # SELECT
|
|
976
|
+
nb_i32p, # N
|
|
977
|
+
float_pointer, # A
|
|
978
|
+
nb_i32p, # LDA
|
|
979
|
+
float_pointer, # B
|
|
980
|
+
nb_i32p, # LDB
|
|
981
|
+
nb_i32p, # SDIM
|
|
982
|
+
float_pointer, # ALPHA
|
|
983
|
+
float_pointer, # BETA
|
|
984
|
+
float_pointer, # VSL
|
|
985
|
+
nb_i32p, # LDVSL
|
|
986
|
+
float_pointer, # VSR
|
|
987
|
+
nb_i32p, # LDVSR
|
|
988
|
+
float_pointer, # WORK
|
|
989
|
+
nb_i32p, # LWORK
|
|
990
|
+
real_pointer, # RWORK
|
|
991
|
+
nb_i32p, # BWORK
|
|
992
|
+
nb_i32p, # INFO
|
|
993
|
+
)
|
|
994
|
+
)
|
|
995
|
+
|
|
996
|
+
@numba_basic.numba_njit
|
|
997
|
+
def gges(
|
|
998
|
+
JOBVSL,
|
|
999
|
+
JOBVSR,
|
|
1000
|
+
SORT,
|
|
1001
|
+
SELECT,
|
|
1002
|
+
N,
|
|
1003
|
+
A,
|
|
1004
|
+
LDA,
|
|
1005
|
+
B,
|
|
1006
|
+
LDB,
|
|
1007
|
+
SDIM,
|
|
1008
|
+
ALPHA,
|
|
1009
|
+
BETA,
|
|
1010
|
+
VSL,
|
|
1011
|
+
LDVSL,
|
|
1012
|
+
VSR,
|
|
1013
|
+
LDVSR,
|
|
1014
|
+
WORK,
|
|
1015
|
+
LWORK,
|
|
1016
|
+
RWORK,
|
|
1017
|
+
BWORK,
|
|
1018
|
+
INFO,
|
|
1019
|
+
):
|
|
1020
|
+
fn = _call_cached_ptr(
|
|
1021
|
+
get_ptr_func=get_gges_pointer,
|
|
1022
|
+
func_type_ref=gges_function_type,
|
|
1023
|
+
unique_func_name_lit=unique_func_name,
|
|
1024
|
+
)
|
|
1025
|
+
fn(
|
|
1026
|
+
JOBVSL,
|
|
1027
|
+
JOBVSR,
|
|
1028
|
+
SORT,
|
|
1029
|
+
SELECT,
|
|
1030
|
+
N,
|
|
1031
|
+
A,
|
|
1032
|
+
LDA,
|
|
1033
|
+
B,
|
|
1034
|
+
LDB,
|
|
1035
|
+
SDIM,
|
|
1036
|
+
ALPHA,
|
|
1037
|
+
BETA,
|
|
1038
|
+
VSL,
|
|
1039
|
+
LDVSL,
|
|
1040
|
+
VSR,
|
|
1041
|
+
LDVSR,
|
|
1042
|
+
WORK,
|
|
1043
|
+
LWORK,
|
|
1044
|
+
RWORK,
|
|
1045
|
+
BWORK,
|
|
1046
|
+
INFO,
|
|
1047
|
+
)
|
|
1048
|
+
else: # Real case
|
|
1049
|
+
gges_function_type = types.FunctionType(
|
|
1050
|
+
types.void(
|
|
1051
|
+
nb_i32p, # JOBVSL
|
|
1052
|
+
nb_i32p, # JOBVSR
|
|
1053
|
+
nb_i32p, # SORT
|
|
1054
|
+
nb_i32p, # SELECT
|
|
1055
|
+
nb_i32p, # N
|
|
1056
|
+
float_pointer, # A
|
|
1057
|
+
nb_i32p, # LDA
|
|
1058
|
+
float_pointer, # B
|
|
1059
|
+
nb_i32p, # LDB
|
|
1060
|
+
nb_i32p, # SDIM
|
|
1061
|
+
float_pointer, # ALPHAR
|
|
1062
|
+
float_pointer, # ALPHAI
|
|
1063
|
+
float_pointer, # BETA
|
|
1064
|
+
float_pointer, # VSL
|
|
1065
|
+
nb_i32p, # LDVSL
|
|
1066
|
+
float_pointer, # VSR
|
|
1067
|
+
nb_i32p, # LDVSR
|
|
1068
|
+
float_pointer, # WORK
|
|
1069
|
+
nb_i32p, # LWORK
|
|
1070
|
+
nb_i32p, # BWORK
|
|
1071
|
+
nb_i32p, # INFO
|
|
1072
|
+
)
|
|
1073
|
+
)
|
|
1074
|
+
|
|
1075
|
+
@numba_basic.numba_njit
|
|
1076
|
+
def gges(
|
|
1077
|
+
JOBVSL,
|
|
1078
|
+
JOBVSR,
|
|
1079
|
+
SORT,
|
|
1080
|
+
SELECT,
|
|
1081
|
+
N,
|
|
1082
|
+
A,
|
|
1083
|
+
LDA,
|
|
1084
|
+
B,
|
|
1085
|
+
LDB,
|
|
1086
|
+
SDIM,
|
|
1087
|
+
ALPHAR,
|
|
1088
|
+
ALPHAI,
|
|
1089
|
+
BETA,
|
|
1090
|
+
VSL,
|
|
1091
|
+
LDVSL,
|
|
1092
|
+
VSR,
|
|
1093
|
+
LDVSR,
|
|
1094
|
+
WORK,
|
|
1095
|
+
LWORK,
|
|
1096
|
+
BWORK,
|
|
1097
|
+
INFO,
|
|
1098
|
+
):
|
|
1099
|
+
fn = _call_cached_ptr(
|
|
1100
|
+
get_ptr_func=get_gges_pointer,
|
|
1101
|
+
func_type_ref=gges_function_type,
|
|
1102
|
+
unique_func_name_lit=unique_func_name,
|
|
1103
|
+
)
|
|
1104
|
+
fn(
|
|
1105
|
+
JOBVSL,
|
|
1106
|
+
JOBVSR,
|
|
1107
|
+
SORT,
|
|
1108
|
+
SELECT,
|
|
1109
|
+
N,
|
|
1110
|
+
A,
|
|
1111
|
+
LDA,
|
|
1112
|
+
B,
|
|
1113
|
+
LDB,
|
|
1114
|
+
SDIM,
|
|
1115
|
+
ALPHAR,
|
|
1116
|
+
ALPHAI,
|
|
1117
|
+
BETA,
|
|
1118
|
+
VSL,
|
|
1119
|
+
LDVSL,
|
|
1120
|
+
VSR,
|
|
1121
|
+
LDVSR,
|
|
1122
|
+
WORK,
|
|
1123
|
+
LWORK,
|
|
1124
|
+
BWORK,
|
|
1125
|
+
INFO,
|
|
1126
|
+
)
|
|
1127
|
+
|
|
1128
|
+
return gges
|
|
1129
|
+
|
|
1130
|
+
@classmethod
|
|
1131
|
+
def numba_tgsen(cls, dtype):
|
|
1132
|
+
"""
|
|
1133
|
+
Reorders the generalized Schur decomposition of a matrix pair (A, B) by their eigenvalues.
|
|
1134
|
+
|
|
1135
|
+
Output is sorted so that a selected cluster of eigenvalues appears in the leading diagonal blocks of the pair
|
|
1136
|
+
(A,B). The leading columns of Q and Z form unitary bases of the corresponding left and right eigenspaces
|
|
1137
|
+
(deflating subspaces). (A, B) must be in generalized Schur canonical form, that is, A and B are both upper
|
|
1138
|
+
triangular.
|
|
1139
|
+
|
|
1140
|
+
Used by scipy.linalg.ordqz.
|
|
1141
|
+
"""
|
|
1142
|
+
kind = get_blas_kind(dtype)
|
|
1143
|
+
float_pointer = _get_nb_float_from_dtype(kind)
|
|
1144
|
+
unique_func_name = f"scipy.lapack.{kind}tgsen"
|
|
1145
|
+
|
|
1146
|
+
@numba_basic.numba_njit
|
|
1147
|
+
def get_tgsen_pointer():
|
|
1148
|
+
with numba.objmode(ptr=types.intp):
|
|
1149
|
+
ptr = get_lapack_ptr(dtype, "tgsen")
|
|
1150
|
+
return ptr
|
|
1151
|
+
|
|
1152
|
+
if isinstance(dtype, Complex):
|
|
1153
|
+
real_pointer = nb_f64p if dtype is nb_c128 else nb_f32p
|
|
1154
|
+
tgsen_function_type = types.FunctionType(
|
|
1155
|
+
types.void(
|
|
1156
|
+
nb_i32p, # IJOB
|
|
1157
|
+
nb_i32p, # WANTQ
|
|
1158
|
+
nb_i32p, # WANTZ
|
|
1159
|
+
nb_i32p, # SELECT
|
|
1160
|
+
nb_i32p, # N
|
|
1161
|
+
float_pointer, # A
|
|
1162
|
+
nb_i32p, # LDA
|
|
1163
|
+
float_pointer, # B
|
|
1164
|
+
nb_i32p, # LDB
|
|
1165
|
+
float_pointer, # alpha
|
|
1166
|
+
float_pointer, # beta
|
|
1167
|
+
float_pointer, # Q
|
|
1168
|
+
nb_i32p, # LDQ
|
|
1169
|
+
float_pointer, # Z
|
|
1170
|
+
nb_i32p, # LDZ
|
|
1171
|
+
nb_i32p, # M
|
|
1172
|
+
real_pointer, # PL
|
|
1173
|
+
real_pointer, # PR
|
|
1174
|
+
real_pointer, # DIF
|
|
1175
|
+
float_pointer, # WORK
|
|
1176
|
+
nb_i32p, # LWORK
|
|
1177
|
+
nb_i32p, # IWORK
|
|
1178
|
+
nb_i32p, # LIWORK
|
|
1179
|
+
nb_i32p, # INFO
|
|
1180
|
+
)
|
|
1181
|
+
)
|
|
1182
|
+
|
|
1183
|
+
@numba_basic.numba_njit
|
|
1184
|
+
def tgsen(
|
|
1185
|
+
IJOB,
|
|
1186
|
+
WANTQ,
|
|
1187
|
+
WANTZ,
|
|
1188
|
+
SELECT,
|
|
1189
|
+
N,
|
|
1190
|
+
A,
|
|
1191
|
+
LDA,
|
|
1192
|
+
B,
|
|
1193
|
+
LDB,
|
|
1194
|
+
alpha,
|
|
1195
|
+
beta,
|
|
1196
|
+
Q,
|
|
1197
|
+
LDQ,
|
|
1198
|
+
Z,
|
|
1199
|
+
LDZ,
|
|
1200
|
+
M,
|
|
1201
|
+
PL,
|
|
1202
|
+
PR,
|
|
1203
|
+
DIF,
|
|
1204
|
+
WORK,
|
|
1205
|
+
LWORK,
|
|
1206
|
+
IWORK,
|
|
1207
|
+
LIWORK,
|
|
1208
|
+
INFO,
|
|
1209
|
+
):
|
|
1210
|
+
fn = _call_cached_ptr(
|
|
1211
|
+
get_ptr_func=get_tgsen_pointer,
|
|
1212
|
+
func_type_ref=tgsen_function_type,
|
|
1213
|
+
unique_func_name_lit=unique_func_name,
|
|
1214
|
+
)
|
|
1215
|
+
fn(
|
|
1216
|
+
IJOB,
|
|
1217
|
+
WANTQ,
|
|
1218
|
+
WANTZ,
|
|
1219
|
+
SELECT,
|
|
1220
|
+
N,
|
|
1221
|
+
A,
|
|
1222
|
+
LDA,
|
|
1223
|
+
B,
|
|
1224
|
+
LDB,
|
|
1225
|
+
alpha,
|
|
1226
|
+
beta,
|
|
1227
|
+
Q,
|
|
1228
|
+
LDQ,
|
|
1229
|
+
Z,
|
|
1230
|
+
LDZ,
|
|
1231
|
+
M,
|
|
1232
|
+
PL,
|
|
1233
|
+
PR,
|
|
1234
|
+
DIF,
|
|
1235
|
+
WORK,
|
|
1236
|
+
LWORK,
|
|
1237
|
+
IWORK,
|
|
1238
|
+
LIWORK,
|
|
1239
|
+
INFO,
|
|
1240
|
+
)
|
|
1241
|
+
else: # Real case
|
|
1242
|
+
tgsen_function_type = types.FunctionType(
|
|
1243
|
+
types.void(
|
|
1244
|
+
nb_i32p, # IJOB
|
|
1245
|
+
nb_i32p, # WANTQ
|
|
1246
|
+
nb_i32p, # WANTZ
|
|
1247
|
+
nb_i32p, # SELECT
|
|
1248
|
+
nb_i32p, # N
|
|
1249
|
+
float_pointer, # A
|
|
1250
|
+
nb_i32p, # LDA
|
|
1251
|
+
float_pointer, # B
|
|
1252
|
+
nb_i32p, # LDB
|
|
1253
|
+
float_pointer, # ALPHAR
|
|
1254
|
+
float_pointer, # ALPHAI
|
|
1255
|
+
float_pointer, # BETA
|
|
1256
|
+
float_pointer, # Q
|
|
1257
|
+
nb_i32p, # LDQ
|
|
1258
|
+
float_pointer, # Z
|
|
1259
|
+
nb_i32p, # LDZ
|
|
1260
|
+
nb_i32p, # M
|
|
1261
|
+
float_pointer, # PL
|
|
1262
|
+
float_pointer, # PR
|
|
1263
|
+
float_pointer, # DIF
|
|
1264
|
+
float_pointer, # WORK
|
|
1265
|
+
nb_i32p, # LWORK
|
|
1266
|
+
nb_i32p, # IWORK
|
|
1267
|
+
nb_i32p, # LIWORK
|
|
1268
|
+
nb_i32p, # INFO
|
|
1269
|
+
)
|
|
1270
|
+
)
|
|
1271
|
+
|
|
1272
|
+
@numba_basic.numba_njit
|
|
1273
|
+
def tgsen(
|
|
1274
|
+
IJOB,
|
|
1275
|
+
WANTQ,
|
|
1276
|
+
WANTZ,
|
|
1277
|
+
SELECT,
|
|
1278
|
+
N,
|
|
1279
|
+
A,
|
|
1280
|
+
LDA,
|
|
1281
|
+
B,
|
|
1282
|
+
LDB,
|
|
1283
|
+
ALPHAR,
|
|
1284
|
+
ALPHAI,
|
|
1285
|
+
BETA,
|
|
1286
|
+
Q,
|
|
1287
|
+
LDQ,
|
|
1288
|
+
Z,
|
|
1289
|
+
LDZ,
|
|
1290
|
+
M,
|
|
1291
|
+
PL,
|
|
1292
|
+
PR,
|
|
1293
|
+
DIF,
|
|
1294
|
+
WORK,
|
|
1295
|
+
LWORK,
|
|
1296
|
+
IWORK,
|
|
1297
|
+
LIWORK,
|
|
1298
|
+
INFO,
|
|
1299
|
+
):
|
|
1300
|
+
fn = _call_cached_ptr(
|
|
1301
|
+
get_ptr_func=get_tgsen_pointer,
|
|
1302
|
+
func_type_ref=tgsen_function_type,
|
|
1303
|
+
unique_func_name_lit=unique_func_name,
|
|
1304
|
+
)
|
|
1305
|
+
fn(
|
|
1306
|
+
IJOB,
|
|
1307
|
+
WANTQ,
|
|
1308
|
+
WANTZ,
|
|
1309
|
+
SELECT,
|
|
1310
|
+
N,
|
|
1311
|
+
A,
|
|
1312
|
+
LDA,
|
|
1313
|
+
B,
|
|
1314
|
+
LDB,
|
|
1315
|
+
ALPHAR,
|
|
1316
|
+
ALPHAI,
|
|
1317
|
+
BETA,
|
|
1318
|
+
Q,
|
|
1319
|
+
LDQ,
|
|
1320
|
+
Z,
|
|
1321
|
+
LDZ,
|
|
1322
|
+
M,
|
|
1323
|
+
PL,
|
|
1324
|
+
PR,
|
|
1325
|
+
DIF,
|
|
1326
|
+
WORK,
|
|
1327
|
+
LWORK,
|
|
1328
|
+
IWORK,
|
|
1329
|
+
LIWORK,
|
|
1330
|
+
INFO,
|
|
1331
|
+
)
|
|
1332
|
+
|
|
1333
|
+
return tgsen
|