pytensor 2.31.6__tar.gz → 2.31.7__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.31.6/pytensor.egg-info → pytensor-2.31.7}/PKG-INFO +1 -1
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/conf.py +24 -6
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/environment.yml +2 -1
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/index.rst +1 -3
- pytensor-2.31.7/doc/library/xtensor/index.md +101 -0
- pytensor-2.31.7/doc/library/xtensor/linalg.md +7 -0
- pytensor-2.31.7/doc/library/xtensor/math.md +8 -0
- pytensor-2.31.7/doc/library/xtensor/module_functions.md +7 -0
- pytensor-2.31.7/doc/library/xtensor/random.md +7 -0
- pytensor-2.31.7/doc/library/xtensor/type.md +21 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/_version.py +3 -3
- pytensor-2.31.7/pytensor/link/jax/dispatch/blockwise.py +21 -0
- pytensor-2.31.7/pytensor/link/jax/dispatch/signal/conv.py +24 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/blockwise.py +3 -2
- pytensor-2.31.7/pytensor/link/numba/dispatch/signal/conv.py +69 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/math.py +42 -32
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/basic.py +3 -4
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blockwise.py +96 -29
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/__init__.py +0 -1
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blockwise.py +1 -12
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/subtensor_lift.py +5 -5
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/signal/conv.py +54 -56
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/__init__.py +2 -2
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/linalg.py +40 -2
- pytensor-2.31.7/pytensor/xtensor/math.py +627 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/random.py +148 -35
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/shape.py +127 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/type.py +39 -2
- {pytensor-2.31.6 → pytensor-2.31.7/pytensor.egg-info}/PKG-INFO +1 -1
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/SOURCES.txt +6 -1
- pytensor-2.31.6/pytensor/link/jax/dispatch/blockwise.py +0 -29
- pytensor-2.31.6/pytensor/link/jax/dispatch/signal/conv.py +0 -14
- pytensor-2.31.6/pytensor/link/numba/dispatch/signal/conv.py +0 -70
- pytensor-2.31.6/pytensor/tensor/rewriting/conv.py +0 -78
- pytensor-2.31.6/pytensor/xtensor/math.py +0 -252
- {pytensor-2.31.6 → pytensor-2.31.7}/LICENSE.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/MANIFEST.in +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/README.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/layout.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/nb-badges.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/LICENSE.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/README.md +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/acknowledgement.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/bcast.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/bcast.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/blog.md +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/core_development_guide.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/css.inc +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/apply.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/apply.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/apply2.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/ctype.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/inplace.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/op.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/scan.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/tips.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/type.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/unittest.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/extending/using_params.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/faq.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/optimize/root.ipynb +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/page_footer.md +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/glossary.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/PyTensor.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/binder.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/blocksparse.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/colab.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/github.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/lstm.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/talk2010.gif +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/images/talk2010.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/install.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/internal/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/introduction.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/function.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/io.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/config.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/features.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/op.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/replace.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/type.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/printing.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/scan.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/functional.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/optimize.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/random/distributions.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/library/typed_list.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/links.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/optimizations.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/pylintrc +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/robots.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/troubleshooting.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/apply.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/index.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/prng.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/doc/user_guide.rst +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pyproject.toml +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/breakpoint.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/builders.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/debugmode.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/function/types.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/io.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/mode.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/ops.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/profiling.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/configdefaults.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/configparser.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/html/template.html +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/gradient.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/features.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/fg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/op.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/replace.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/graph/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/ifelse.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/ipython.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/cmodule.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/op.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/c/type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/slinalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/shape.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/link/vm.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/npy_2_compat.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/printing.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/py.typed +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/raise_op.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/loop.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/op.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/rewriting.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/scan/views.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sandbox/sp.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/solve/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/solve/rewriting.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/_linalg/solve/tridiagonal.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas_headers.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/conv/abstract_conv.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/einsum.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/elemwise.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/extra_ops.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/inplace.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/io.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/math.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/optimize.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/pad.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/op.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/elemwise.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/linalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/math.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/shape.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/subtensor.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/shape.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/signal/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/slinalg.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/special.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/subtensor.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/var.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/variable.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/updates.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/indexing.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/reduction.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/__init__.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/basic.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/indexing.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/math.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/reduction.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/shape.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/utils.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/rewriting/vectorization.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor/xtensor/vectorization.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/setup.cfg +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/setup.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_breakpoint.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_config.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_gradient.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_ifelse.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_printing.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_raise_op.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_rop.py +0 -0
- {pytensor-2.31.6 → pytensor-2.31.7}/tests/test_updates.py +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import inspect
|
|
3
3
|
import sys
|
|
4
|
+
|
|
4
5
|
import pytensor
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
|
|
@@ -12,6 +13,7 @@ extensions = [
|
|
|
12
13
|
"sphinx.ext.autodoc",
|
|
13
14
|
"sphinx.ext.todo",
|
|
14
15
|
"sphinx.ext.doctest",
|
|
16
|
+
"sphinx_copybutton",
|
|
15
17
|
"sphinx.ext.napoleon",
|
|
16
18
|
"sphinx.ext.linkcode",
|
|
17
19
|
"sphinx.ext.mathjax",
|
|
@@ -86,8 +88,7 @@ today_fmt = "%B %d, %Y"
|
|
|
86
88
|
|
|
87
89
|
# List of directories, relative to source directories, that shouldn't be
|
|
88
90
|
# searched for source files.
|
|
89
|
-
|
|
90
|
-
exclude_patterns = ['page_footer.md', '**/*.myst.md']
|
|
91
|
+
exclude_patterns = ["README.md", "images/*", "page_footer.md", "**/*.myst.md"]
|
|
91
92
|
|
|
92
93
|
# The reST default role (used for this markup: `text`) to use for all
|
|
93
94
|
# documents.
|
|
@@ -235,24 +236,41 @@ htmlhelp_basename = "pytensor_doc"
|
|
|
235
236
|
# Resolve function
|
|
236
237
|
# This function is used to populate the (source) links in the API
|
|
237
238
|
def linkcode_resolve(domain, info):
|
|
238
|
-
def
|
|
239
|
+
def find_obj() -> object:
|
|
239
240
|
# try to find the file and line number, based on code from numpy:
|
|
240
241
|
# https://github.com/numpy/numpy/blob/master/doc/source/conf.py#L286
|
|
241
242
|
obj = sys.modules[info["module"]]
|
|
242
243
|
for part in info["fullname"].split("."):
|
|
243
244
|
obj = getattr(obj, part)
|
|
245
|
+
return obj
|
|
244
246
|
|
|
247
|
+
def find_source(obj):
|
|
245
248
|
fn = Path(inspect.getsourcefile(obj))
|
|
246
|
-
fn = fn.relative_to(Path(__file__).parent)
|
|
249
|
+
fn = fn.relative_to(Path(pytensor.__file__).parent)
|
|
247
250
|
source, lineno = inspect.getsourcelines(obj)
|
|
248
251
|
return fn, lineno, lineno + len(source) - 1
|
|
249
252
|
|
|
253
|
+
def fallback_source():
|
|
254
|
+
return info["module"].replace(".", "/") + ".py"
|
|
255
|
+
|
|
250
256
|
if domain != "py" or not info["module"]:
|
|
251
257
|
return None
|
|
258
|
+
|
|
252
259
|
try:
|
|
253
|
-
|
|
260
|
+
obj = find_obj()
|
|
254
261
|
except Exception:
|
|
255
|
-
filename =
|
|
262
|
+
filename = fallback_source()
|
|
263
|
+
else:
|
|
264
|
+
try:
|
|
265
|
+
filename = "pytensor/%s#L%d-L%d" % find_source(obj)
|
|
266
|
+
except Exception:
|
|
267
|
+
# warnings.warn(f"Could not find source code for {domain}:{info}")
|
|
268
|
+
try:
|
|
269
|
+
filename = obj.__module__.replace(".", "/") + ".py"
|
|
270
|
+
except AttributeError:
|
|
271
|
+
# Some objects do not have a __module__ attribute (?)
|
|
272
|
+
filename = fallback_source()
|
|
273
|
+
|
|
256
274
|
import subprocess
|
|
257
275
|
|
|
258
276
|
tag = subprocess.Popen(
|
|
@@ -13,7 +13,9 @@ dependencies:
|
|
|
13
13
|
- mock
|
|
14
14
|
- pillow
|
|
15
15
|
- pymc-sphinx-theme
|
|
16
|
+
- sphinx-copybutton
|
|
16
17
|
- sphinx-design
|
|
18
|
+
- sphinx-sitemap
|
|
17
19
|
- pygments
|
|
18
20
|
- pydot
|
|
19
21
|
- ipython
|
|
@@ -23,5 +25,4 @@ dependencies:
|
|
|
23
25
|
- ablog
|
|
24
26
|
- pip
|
|
25
27
|
- pip:
|
|
26
|
-
- sphinx_sitemap
|
|
27
28
|
- -e ..
|
|
@@ -20,14 +20,12 @@ Modules
|
|
|
20
20
|
d3viz/index
|
|
21
21
|
graph/index
|
|
22
22
|
gradient
|
|
23
|
-
misc/pkl_utils
|
|
24
23
|
printing
|
|
25
|
-
scalar/index
|
|
26
24
|
scan
|
|
27
25
|
sparse/index
|
|
28
|
-
sparse/sandbox
|
|
29
26
|
tensor/index
|
|
30
27
|
typed_list
|
|
28
|
+
xtensor/index
|
|
31
29
|
|
|
32
30
|
.. module:: pytensor
|
|
33
31
|
:platform: Unix, Windows
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
(libdoc_xtensor)=
|
|
2
|
+
# `xtensor` -- XTensor operations
|
|
3
|
+
|
|
4
|
+
This module implements as abstraction layer on regular tensor operations, that behaves like Xarray.
|
|
5
|
+
|
|
6
|
+
A new type {class}`pytensor.xtensor.type.XTensorType`, generalizes the {class}`pytensor.tensor.TensorType`
|
|
7
|
+
with the addition of a `dims` attribute, that labels the dimensions of the tensor.
|
|
8
|
+
|
|
9
|
+
Variables of XTensorType (i.e., {class}`pytensor.xtensor.type.XTensorVariable`s) are the symbolic counterpart
|
|
10
|
+
to xarray DataArray objects.
|
|
11
|
+
|
|
12
|
+
The module implements several PyTensor operations {class}`pytensor.xtensor.basic.XOp`s, whose signature mimics that of
|
|
13
|
+
xarray (and xarray_einstats) DataArray operations. These operations, unlike most regular PyTensor operations, cannot
|
|
14
|
+
be directly evaluated, but require a rewrite (lowering) into a regular tensor graph that can itself be evaluated as usual.
|
|
15
|
+
|
|
16
|
+
Like regular PyTensor, we don't need an Op for every possible method or function in the public API of xarray.
|
|
17
|
+
If the existing XOps can be composed to produce the desired result, then we can use them directly.
|
|
18
|
+
|
|
19
|
+
## Coordinates
|
|
20
|
+
For now, there's no analogous of xarray coordinates, so you won't be able to do coordinate operations like `.sel`.
|
|
21
|
+
The graphs produced by an xarray program without coords are much more amenable to the numpy-like backend of PyTensor.
|
|
22
|
+
Coords involve aspects of Pandas/database query and joining that are not trivially expressible in PyTensor.
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
```{testcode}
|
|
28
|
+
|
|
29
|
+
import pytensor.tensor as pt
|
|
30
|
+
import pytensor.xtensor as ptx
|
|
31
|
+
|
|
32
|
+
a = pt.tensor("a", shape=(3,))
|
|
33
|
+
b = pt.tensor("b", shape=(4,))
|
|
34
|
+
|
|
35
|
+
ax = ptx.as_xtensor(a, dims=["x"])
|
|
36
|
+
bx = ptx.as_xtensor(b, dims=["y"])
|
|
37
|
+
|
|
38
|
+
zx = ax + bx
|
|
39
|
+
assert zx.type == ptx.type.XTensorType("float64", dims=["x", "y"], shape=(3, 4))
|
|
40
|
+
|
|
41
|
+
z = zx.values
|
|
42
|
+
z.dprint()
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
```{testoutput}
|
|
47
|
+
|
|
48
|
+
TensorFromXTensor [id A]
|
|
49
|
+
└─ XElemwise{scalar_op=Add()} [id B]
|
|
50
|
+
├─ XTensorFromTensor{dims=('x',)} [id C]
|
|
51
|
+
│ └─ a [id D]
|
|
52
|
+
└─ XTensorFromTensor{dims=('y',)} [id E]
|
|
53
|
+
└─ b [id F]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Once we compile the graph, no XOps are left.
|
|
57
|
+
|
|
58
|
+
```{testcode}
|
|
59
|
+
|
|
60
|
+
import pytensor
|
|
61
|
+
|
|
62
|
+
with pytensor.config.change_flags(optimizer_verbose=True):
|
|
63
|
+
fn = pytensor.function([a, b], z)
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```{testoutput}
|
|
68
|
+
|
|
69
|
+
rewriting: rewrite lower_elemwise replaces XElemwise{scalar_op=Add()}.0 of XElemwise{scalar_op=Add()}(XTensorFromTensor{dims=('x',)}.0, XTensorFromTensor{dims=('y',)}.0) with XTensorFromTensor{dims=('x', 'y')}.0 of XTensorFromTensor{dims=('x', 'y')}(Add.0)
|
|
70
|
+
rewriting: rewrite useless_tensor_from_xtensor replaces TensorFromXTensor.0 of TensorFromXTensor(XTensorFromTensor{dims=('x',)}.0) with a of None
|
|
71
|
+
rewriting: rewrite useless_tensor_from_xtensor replaces TensorFromXTensor.0 of TensorFromXTensor(XTensorFromTensor{dims=('y',)}.0) with b of None
|
|
72
|
+
rewriting: rewrite useless_tensor_from_xtensor replaces TensorFromXTensor.0 of TensorFromXTensor(XTensorFromTensor{dims=('x', 'y')}.0) with Add.0 of Add(ExpandDims{axis=1}.0, ExpandDims{axis=0}.0)
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```{testcode}
|
|
77
|
+
|
|
78
|
+
fn.dprint()
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```{testoutput}
|
|
82
|
+
|
|
83
|
+
Add [id A] 2
|
|
84
|
+
├─ ExpandDims{axis=1} [id B] 1
|
|
85
|
+
│ └─ a [id C]
|
|
86
|
+
└─ ExpandDims{axis=0} [id D] 0
|
|
87
|
+
└─ b [id E]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
## Index
|
|
92
|
+
|
|
93
|
+
:::{toctree}
|
|
94
|
+
:maxdepth: 1
|
|
95
|
+
|
|
96
|
+
module_functions
|
|
97
|
+
math
|
|
98
|
+
linalg
|
|
99
|
+
random
|
|
100
|
+
type
|
|
101
|
+
:::
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
(libdoc_xtenor_type)=
|
|
2
|
+
|
|
3
|
+
# `xtensor.type` -- Types and Variables
|
|
4
|
+
|
|
5
|
+
## XTensorVariable creation functions
|
|
6
|
+
|
|
7
|
+
```{eval-rst}
|
|
8
|
+
.. automodule:: pytensor.xtensor.type
|
|
9
|
+
:members: xtensor, xtensor_constant, as_xtensor
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## XTensor Type and Variable classes
|
|
14
|
+
|
|
15
|
+
```{eval-rst}
|
|
16
|
+
.. automodule:: pytensor.xtensor.type
|
|
17
|
+
:noindex:
|
|
18
|
+
:members: XTensorType, XTensorVariable, XTensorConstant
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-07-
|
|
11
|
+
"date": "2025-07-08T17:42:30+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.31.
|
|
14
|
+
"full-revisionid": "4ce092fe4df857a2bf88a6a367b4a1592e10c0ee",
|
|
15
|
+
"version": "2.31.7"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import jax.numpy as jnp
|
|
2
|
+
|
|
3
|
+
from pytensor.link.jax.dispatch import jax_funcify
|
|
4
|
+
from pytensor.tensor.blockwise import Blockwise
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@jax_funcify.register(Blockwise)
|
|
8
|
+
def jax_funcify_Blockwise(op: Blockwise, node, **kwargs):
|
|
9
|
+
signature = op.signature
|
|
10
|
+
core_node = op._create_dummy_core_node(
|
|
11
|
+
node.inputs, propagate_unbatched_core_inputs=True
|
|
12
|
+
)
|
|
13
|
+
core_fn = jax_funcify(core_node.op, node=core_node, **kwargs)
|
|
14
|
+
|
|
15
|
+
vect_fn = jnp.vectorize(core_fn, signature=signature)
|
|
16
|
+
|
|
17
|
+
def blockwise_fn(*inputs):
|
|
18
|
+
op._check_runtime_broadcast(node, inputs)
|
|
19
|
+
return vect_fn(*inputs)
|
|
20
|
+
|
|
21
|
+
return blockwise_fn
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import jax
|
|
2
|
+
|
|
3
|
+
from pytensor.link.jax.dispatch import jax_funcify
|
|
4
|
+
from pytensor.tensor.basic import get_underlying_scalar_constant_value
|
|
5
|
+
from pytensor.tensor.exceptions import NotScalarConstantError
|
|
6
|
+
from pytensor.tensor.signal.conv import Convolve1d
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@jax_funcify.register(Convolve1d)
|
|
10
|
+
def jax_funcify_Convolve1d(op, node, **kwargs):
|
|
11
|
+
_, _, full_mode = node.inputs
|
|
12
|
+
try:
|
|
13
|
+
full_mode = get_underlying_scalar_constant_value(full_mode)
|
|
14
|
+
except NotScalarConstantError:
|
|
15
|
+
raise NotImplementedError(
|
|
16
|
+
"Cannot compile Convolve1D to jax without static mode"
|
|
17
|
+
)
|
|
18
|
+
static_mode = "full" if full_mode else "valid"
|
|
19
|
+
|
|
20
|
+
def conv1d(data, kernel, _runtime_full_mode):
|
|
21
|
+
# _runtime_full_mode is not used, as we only support static mode
|
|
22
|
+
return jax.numpy.convolve(data, kernel, mode=static_mode)
|
|
23
|
+
|
|
24
|
+
return conv1d
|
|
@@ -16,7 +16,7 @@ from pytensor.tensor import TensorVariable, get_vector_length
|
|
|
16
16
|
from pytensor.tensor.blockwise import Blockwise, BlockwiseWithCoreShape
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
@numba_funcify.register
|
|
19
|
+
@numba_funcify.register(BlockwiseWithCoreShape)
|
|
20
20
|
def numba_funcify_Blockwise(op: BlockwiseWithCoreShape, node, **kwargs):
|
|
21
21
|
[blockwise_node] = op.fgraph.apply_nodes
|
|
22
22
|
blockwise_op: Blockwise = blockwise_node.op
|
|
@@ -26,7 +26,8 @@ def numba_funcify_Blockwise(op: BlockwiseWithCoreShape, node, **kwargs):
|
|
|
26
26
|
core_shapes_len = tuple(get_vector_length(sh) for sh in node.inputs[nin:])
|
|
27
27
|
|
|
28
28
|
core_node = blockwise_op._create_dummy_core_node(
|
|
29
|
-
cast(tuple[TensorVariable],
|
|
29
|
+
cast(tuple[TensorVariable], node.inputs[:nin]),
|
|
30
|
+
propagate_unbatched_core_inputs=True,
|
|
30
31
|
)
|
|
31
32
|
core_op_fn = numba_funcify(
|
|
32
33
|
core_op,
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from numba.np.arraymath import _get_inner_prod
|
|
3
|
+
|
|
4
|
+
from pytensor.link.numba.dispatch import numba_funcify
|
|
5
|
+
from pytensor.link.numba.dispatch.basic import numba_njit
|
|
6
|
+
from pytensor.tensor.signal.conv import Convolve1d
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@numba_funcify.register(Convolve1d)
|
|
10
|
+
def numba_funcify_Convolve1d(op, node, **kwargs):
|
|
11
|
+
# This specialized version is faster than the overloaded numba np.convolve
|
|
12
|
+
a_dtype, b_dtype = node.inputs[0].type.dtype, node.inputs[1].type.dtype
|
|
13
|
+
out_dtype = node.outputs[0].type.dtype
|
|
14
|
+
innerprod = _get_inner_prod(a_dtype, b_dtype)
|
|
15
|
+
|
|
16
|
+
@numba_njit
|
|
17
|
+
def valid_convolve1d(x, y):
|
|
18
|
+
nx = len(x)
|
|
19
|
+
ny = len(y)
|
|
20
|
+
if nx < ny:
|
|
21
|
+
x, y = y, x
|
|
22
|
+
nx, ny = ny, nx
|
|
23
|
+
y_flipped = y[::-1]
|
|
24
|
+
|
|
25
|
+
length = nx - ny + 1
|
|
26
|
+
ret = np.empty(length, out_dtype)
|
|
27
|
+
|
|
28
|
+
for i in range(length):
|
|
29
|
+
ret[i] = innerprod(x[i : i + ny], y_flipped)
|
|
30
|
+
|
|
31
|
+
return ret
|
|
32
|
+
|
|
33
|
+
@numba_njit
|
|
34
|
+
def full_convolve1d(x, y):
|
|
35
|
+
nx = len(x)
|
|
36
|
+
ny = len(y)
|
|
37
|
+
if nx < ny:
|
|
38
|
+
x, y = y, x
|
|
39
|
+
nx, ny = ny, nx
|
|
40
|
+
y_flipped = y[::-1]
|
|
41
|
+
|
|
42
|
+
length = nx + ny - 1
|
|
43
|
+
ret = np.empty(length, out_dtype)
|
|
44
|
+
idx = 0
|
|
45
|
+
|
|
46
|
+
for i in range(ny - 1):
|
|
47
|
+
k = i + 1
|
|
48
|
+
ret[idx] = innerprod(x[:k], y_flipped[-k:])
|
|
49
|
+
idx = idx + 1
|
|
50
|
+
|
|
51
|
+
for i in range(nx - ny + 1):
|
|
52
|
+
ret[idx] = innerprod(x[i : i + ny], y_flipped)
|
|
53
|
+
idx = idx + 1
|
|
54
|
+
|
|
55
|
+
for i in range(ny - 1):
|
|
56
|
+
k = ny - i - 1
|
|
57
|
+
ret[idx] = innerprod(x[-k:], y_flipped[:k])
|
|
58
|
+
idx = idx + 1
|
|
59
|
+
|
|
60
|
+
return ret
|
|
61
|
+
|
|
62
|
+
@numba_njit
|
|
63
|
+
def convolve_1d(x, y, mode):
|
|
64
|
+
if mode:
|
|
65
|
+
return full_convolve1d(x, y)
|
|
66
|
+
else:
|
|
67
|
+
return valid_convolve1d(x, y)
|
|
68
|
+
|
|
69
|
+
return convolve_1d
|
|
@@ -385,46 +385,56 @@ class Psi(UnaryScalarOp):
|
|
|
385
385
|
#define DEVICE
|
|
386
386
|
#endif
|
|
387
387
|
|
|
388
|
-
#ifndef
|
|
389
|
-
#define
|
|
388
|
+
#ifndef M_PI
|
|
389
|
+
#define M_PI 3.14159265358979323846
|
|
390
390
|
#endif
|
|
391
391
|
|
|
392
392
|
#ifndef _PSIFUNCDEFINED
|
|
393
393
|
#define _PSIFUNCDEFINED
|
|
394
|
-
DEVICE double _psi(
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
394
|
+
DEVICE double _psi(double x) {
|
|
395
|
+
|
|
396
|
+
/*taken from
|
|
397
|
+
Bernardo, J. M. (1976). Algorithm AS 103:
|
|
398
|
+
Psi (Digamma) Function. Applied Statistics. 25 (3), 315-317.
|
|
399
|
+
http://www.uv.es/~bernardo/1976AppStatist.pdf
|
|
400
|
+
*/
|
|
401
|
+
|
|
402
|
+
double y, R, psi_ = 0;
|
|
403
|
+
double S = 1.0e-5;
|
|
404
|
+
double C = 8.5;
|
|
405
|
+
double S3 = 8.333333333e-2;
|
|
406
|
+
double S4 = 8.333333333e-3;
|
|
407
|
+
double S5 = 3.968253968e-3;
|
|
408
|
+
double D1 = -0.5772156649;
|
|
400
409
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
+
if (x <= 0) {
|
|
411
|
+
// the digamma function approaches infinity from one side and -infinity from the other, around negative integers and zero
|
|
412
|
+
if (x == floor(x)) {
|
|
413
|
+
return INFINITY; // note that scipy returns -INF for 0 and NaN for negative integers
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// Use reflection formula
|
|
417
|
+
double pi_x = M_PI * x;
|
|
418
|
+
double cot_pi_x = cos(pi_x) / sin(pi_x);
|
|
419
|
+
return _psi(1.0 - x) - M_PI * cot_pi_x;
|
|
420
|
+
}
|
|
410
421
|
|
|
411
|
-
|
|
412
|
-
return psi_;
|
|
422
|
+
y = x;
|
|
413
423
|
|
|
414
|
-
|
|
415
|
-
|
|
424
|
+
if (y <= S)
|
|
425
|
+
return D1 - 1.0/y;
|
|
416
426
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
427
|
+
while (y < C) {
|
|
428
|
+
psi_ = psi_ - 1.0 / y;
|
|
429
|
+
y = y + 1;
|
|
430
|
+
}
|
|
421
431
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
432
|
+
R = 1.0 / y;
|
|
433
|
+
psi_ = psi_ + log(y) - .5 * R ;
|
|
434
|
+
R= R*R;
|
|
435
|
+
psi_ = psi_ - R * (S3 - R * (S4 - R * S5));
|
|
426
436
|
|
|
427
|
-
|
|
437
|
+
return psi_;
|
|
428
438
|
}
|
|
429
439
|
#endif
|
|
430
440
|
"""
|
|
@@ -433,8 +443,8 @@ class Psi(UnaryScalarOp):
|
|
|
433
443
|
(x,) = inp
|
|
434
444
|
(z,) = out
|
|
435
445
|
if node.inputs[0].type in float_types:
|
|
436
|
-
|
|
437
|
-
|
|
446
|
+
dtype = "npy_" + node.outputs[0].dtype
|
|
447
|
+
return f"{z} = ({dtype}) _psi({x});"
|
|
438
448
|
raise NotImplementedError("only floating point is implemented")
|
|
439
449
|
|
|
440
450
|
|
|
@@ -678,10 +678,9 @@ class ScalarFromTensor(COp):
|
|
|
678
678
|
self, [t], [ps.get_scalar_type(dtype=t.type.dtype).make_variable()]
|
|
679
679
|
)
|
|
680
680
|
|
|
681
|
-
def perform(self, node,
|
|
682
|
-
(
|
|
683
|
-
|
|
684
|
-
out[0] = s.flatten()[0]
|
|
681
|
+
def perform(self, node, inputs, output_storage):
|
|
682
|
+
# not using .item() because that returns a Python scalar, not a numpy scalar
|
|
683
|
+
output_storage[0][0] = inputs[0][()]
|
|
685
684
|
|
|
686
685
|
def infer_shape(self, fgraph, node, in_shapes):
|
|
687
686
|
return [()]
|