pytensor 2.30.2__tar.gz → 2.30.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytensor-2.30.2/pytensor.egg-info → pytensor-2.30.3}/PKG-INFO +1 -1
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/_version.py +3 -3
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/basic.py +63 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/tensor_basic.py +1 -4
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/vectorize_codegen.py +1 -1
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/basic.py +26 -36
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/loop.py +36 -40
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/basic.py +103 -109
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blockwise.py +4 -3
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blockwise.py +31 -3
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/elemwise.py +2 -14
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/type.py +12 -0
- {pytensor-2.30.2 → pytensor-2.30.3/pytensor.egg-info}/PKG-INFO +1 -1
- {pytensor-2.30.2 → pytensor-2.30.3}/LICENSE.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/MANIFEST.in +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/README.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/layout.html +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/nb-badges.html +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/LICENSE.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/README.md +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/acknowledgement.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/bcast.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/bcast.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/blog.md +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/conf.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/core_development_guide.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/css.inc +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/environment.yml +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/apply.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/apply.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/apply2.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/ctype.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/inplace.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/scan.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/tips.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/type.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/unittest.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/using_params.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/faq.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/gallery/page_footer.md +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/glossary.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/PyTensor.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/binder.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/blocksparse.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/colab.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/github.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/lstm.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/talk2010.gif +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/talk2010.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/install.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/internal/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/introduction.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/function.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/io.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/config.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/features.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/op.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/replace.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/type.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/printing.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/scan.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/basic.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/functional.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/random/distributions.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/typed_list.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/links.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/optimizations.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/pylintrc +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/robots.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/troubleshooting.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/apply.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/gradients.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/index.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/prng.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/doc/user_guide.rst +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pyproject.toml +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/breakpoint.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/builders.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/debugmode.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/function/types.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/io.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/mode.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/profiling.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/configdefaults.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/configparser.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/gradient.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/features.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/fg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/replace.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/ifelse.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/cmodule.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/random.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/blockwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/random.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/slinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/shape.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/linker.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/vm.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/npy_2_compat.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/printing.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/py.typed +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/raise_op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/rewriting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/views.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/rewriting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sandbox/sp.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas_headers.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/conv/abstract_conv.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/einsum.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/elemwise.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/inplace.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/io.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/nlinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/pad.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blas.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/linalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/math.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/shape.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/special.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/subtensor.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/shape.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/signal/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/signal/conv.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/slinalg.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/special.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/subtensor.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/var.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/variable.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/xlogx.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/updates.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/utils.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/SOURCES.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/setup.cfg +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/setup.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_breakpoint.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_config.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_gradient.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_ifelse.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_printing.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_raise_op.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_rop.py +0 -0
- {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_updates.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-04-
|
|
11
|
+
"date": "2025-04-09T15:18:32+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.30.
|
|
14
|
+
"full-revisionid": "0c398e345af91d28c8dee7075d6d10cafe404025",
|
|
15
|
+
"version": "2.30.3"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -38,6 +38,7 @@ from pytensor.tensor.blas import BatchedDot
|
|
|
38
38
|
from pytensor.tensor.math import Dot
|
|
39
39
|
from pytensor.tensor.shape import Reshape, Shape, Shape_i, SpecifyShape
|
|
40
40
|
from pytensor.tensor.slinalg import Solve
|
|
41
|
+
from pytensor.tensor.sort import ArgSortOp, SortOp
|
|
41
42
|
from pytensor.tensor.type import TensorType
|
|
42
43
|
from pytensor.tensor.type_other import MakeSlice, NoneConst
|
|
43
44
|
|
|
@@ -433,6 +434,68 @@ def numba_funcify_Shape_i(op, **kwargs):
|
|
|
433
434
|
return shape_i
|
|
434
435
|
|
|
435
436
|
|
|
437
|
+
@numba_funcify.register(SortOp)
|
|
438
|
+
def numba_funcify_SortOp(op, node, **kwargs):
|
|
439
|
+
@numba_njit
|
|
440
|
+
def sort_f(a, axis):
|
|
441
|
+
axis = axis.item()
|
|
442
|
+
|
|
443
|
+
a_swapped = np.swapaxes(a, axis, -1)
|
|
444
|
+
a_sorted = np.sort(a_swapped)
|
|
445
|
+
a_sorted_swapped = np.swapaxes(a_sorted, -1, axis)
|
|
446
|
+
|
|
447
|
+
return a_sorted_swapped
|
|
448
|
+
|
|
449
|
+
if op.kind != "quicksort":
|
|
450
|
+
warnings.warn(
|
|
451
|
+
(
|
|
452
|
+
f'Numba function sort doesn\'t support kind="{op.kind}"'
|
|
453
|
+
" switching to `quicksort`."
|
|
454
|
+
),
|
|
455
|
+
UserWarning,
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
return sort_f
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
@numba_funcify.register(ArgSortOp)
|
|
462
|
+
def numba_funcify_ArgSortOp(op, node, **kwargs):
|
|
463
|
+
def argsort_f_kind(kind):
|
|
464
|
+
@numba_njit
|
|
465
|
+
def argort_vec(X, axis):
|
|
466
|
+
axis = axis.item()
|
|
467
|
+
|
|
468
|
+
Y = np.swapaxes(X, axis, 0)
|
|
469
|
+
result = np.empty_like(Y)
|
|
470
|
+
|
|
471
|
+
indices = list(np.ndindex(Y.shape[1:]))
|
|
472
|
+
|
|
473
|
+
for idx in indices:
|
|
474
|
+
result[(slice(None), *idx)] = np.argsort(
|
|
475
|
+
Y[(slice(None), *idx)], kind=kind
|
|
476
|
+
)
|
|
477
|
+
|
|
478
|
+
result = np.swapaxes(result, 0, axis)
|
|
479
|
+
|
|
480
|
+
return result
|
|
481
|
+
|
|
482
|
+
return argort_vec
|
|
483
|
+
|
|
484
|
+
kind = op.kind
|
|
485
|
+
|
|
486
|
+
if kind not in ["quicksort", "mergesort"]:
|
|
487
|
+
kind = "quicksort"
|
|
488
|
+
warnings.warn(
|
|
489
|
+
(
|
|
490
|
+
f'Numba function argsort doesn\'t support kind="{op.kind}"'
|
|
491
|
+
" switching to `quicksort`."
|
|
492
|
+
),
|
|
493
|
+
UserWarning,
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
return argsort_f_kind(kind)
|
|
497
|
+
|
|
498
|
+
|
|
436
499
|
@numba.extending.intrinsic
|
|
437
500
|
def direct_cast(typingctx, val, typ):
|
|
438
501
|
if isinstance(typ, numba.types.TypeRef):
|
|
@@ -136,10 +136,7 @@ def numba_funcify_Join(op, **kwargs):
|
|
|
136
136
|
def numba_funcify_Split(op, **kwargs):
|
|
137
137
|
@numba_basic.numba_njit
|
|
138
138
|
def split(tensor, axis, indices):
|
|
139
|
-
|
|
140
|
-
axis = axis % tensor.ndim
|
|
141
|
-
axis = numba_basic.to_scalar(axis)
|
|
142
|
-
return np.split(tensor, np.cumsum(indices)[:-1], axis=axis)
|
|
139
|
+
return np.split(tensor, np.cumsum(indices)[:-1], axis=axis.item())
|
|
143
140
|
|
|
144
141
|
return split
|
|
145
142
|
|
|
@@ -265,7 +265,7 @@ def _vectorized(
|
|
|
265
265
|
ctx.nrt.incref(
|
|
266
266
|
builder,
|
|
267
267
|
sig.return_type.types[inplace_idx],
|
|
268
|
-
outputs[inplace_idx].
|
|
268
|
+
outputs[inplace_idx]._getvalue(),
|
|
269
269
|
)
|
|
270
270
|
return ctx.make_tuple(
|
|
271
271
|
builder, sig.return_type, [out._getvalue() for out in outputs]
|
|
@@ -1302,19 +1302,7 @@ class ScalarOp(COp):
|
|
|
1302
1302
|
def __str__(self):
|
|
1303
1303
|
if hasattr(self, "name") and self.name:
|
|
1304
1304
|
return self.name
|
|
1305
|
-
|
|
1306
|
-
param = [
|
|
1307
|
-
(k, v)
|
|
1308
|
-
for k, v in self.__dict__.items()
|
|
1309
|
-
if k
|
|
1310
|
-
not in ("name", "_op_use_c_code", "bool", "output_types_preference")
|
|
1311
|
-
]
|
|
1312
|
-
if param:
|
|
1313
|
-
classname = self.__class__.__name__
|
|
1314
|
-
args = ", ".join(f"{k}={v}" for k, v in param)
|
|
1315
|
-
return f"{classname}{{{args}}}"
|
|
1316
|
-
else:
|
|
1317
|
-
return self.__class__.__name__
|
|
1305
|
+
return self.__class__.__name__
|
|
1318
1306
|
|
|
1319
1307
|
def c_code_cache_version(self):
|
|
1320
1308
|
return (4,)
|
|
@@ -4102,6 +4090,7 @@ class ScalarInnerGraphOp(ScalarOp, HasInnerGraph):
|
|
|
4102
4090
|
|
|
4103
4091
|
def __init__(self, *args, **kwargs):
|
|
4104
4092
|
self.prepare_node_called = set()
|
|
4093
|
+
super().__init__(*args, **kwargs)
|
|
4105
4094
|
|
|
4106
4095
|
def _cleanup_graph(self, inputs, outputs):
|
|
4107
4096
|
# TODO: We could convert to TensorVariable, optimize graph,
|
|
@@ -4344,9 +4333,9 @@ class Composite(ScalarInnerGraphOp):
|
|
|
4344
4333
|
|
|
4345
4334
|
# Rename internal variables
|
|
4346
4335
|
for i, r in enumerate(self.fgraph.inputs):
|
|
4347
|
-
r.name = f"i{
|
|
4336
|
+
r.name = f"i{i}"
|
|
4348
4337
|
for i, r in enumerate(self.fgraph.outputs):
|
|
4349
|
-
r.name = f"o{
|
|
4338
|
+
r.name = f"o{i}"
|
|
4350
4339
|
io = set(self.fgraph.inputs + self.fgraph.outputs)
|
|
4351
4340
|
for i, r in enumerate(self.fgraph.variables):
|
|
4352
4341
|
if (
|
|
@@ -4354,7 +4343,7 @@ class Composite(ScalarInnerGraphOp):
|
|
|
4354
4343
|
and r not in io
|
|
4355
4344
|
and len(self.fgraph.clients[r]) > 1
|
|
4356
4345
|
):
|
|
4357
|
-
r.name = f"t{
|
|
4346
|
+
r.name = f"t{i}"
|
|
4358
4347
|
|
|
4359
4348
|
if len(self.fgraph.outputs) > 1 or len(self.fgraph.apply_nodes) > 10:
|
|
4360
4349
|
self._name = "Composite{...}"
|
|
@@ -4441,16 +4430,12 @@ class Composite(ScalarInnerGraphOp):
|
|
|
4441
4430
|
if hasattr(self, "_c_code"):
|
|
4442
4431
|
return self._c_code
|
|
4443
4432
|
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
((e, f"%(i{int(i)})s") for i, e in enumerate(self.fgraph.inputs)),
|
|
4447
|
-
((e, f"%(o{int(i)})s") for i, e in enumerate(self.fgraph.outputs)),
|
|
4448
|
-
)
|
|
4449
|
-
)
|
|
4433
|
+
fg = self.fgraph
|
|
4434
|
+
subd = {e: f"%(i{i})s" for i, e in enumerate(fg.inputs)}
|
|
4450
4435
|
|
|
4451
|
-
for var in
|
|
4436
|
+
for var in fg.variables:
|
|
4452
4437
|
if var.owner is None:
|
|
4453
|
-
if var not in
|
|
4438
|
+
if var not in fg.inputs:
|
|
4454
4439
|
# This is an orphan
|
|
4455
4440
|
if isinstance(var, Constant) and isinstance(var.type, CLinkerType):
|
|
4456
4441
|
subd[var] = f"({var.type.c_literal(var.data)})"
|
|
@@ -4465,30 +4450,35 @@ class Composite(ScalarInnerGraphOp):
|
|
|
4465
4450
|
# flag for elemwise ops to check.
|
|
4466
4451
|
self.inner_float16 = True
|
|
4467
4452
|
|
|
4468
|
-
|
|
4469
|
-
self.nodenames = [
|
|
4470
|
-
f"%(nodename)s_subnode{int(j)}"
|
|
4471
|
-
for j, n in enumerate(self.fgraph.toposort())
|
|
4472
|
-
]
|
|
4453
|
+
self.nodenames = nodenames = [] # Used by self.c_support_code_apply
|
|
4473
4454
|
|
|
4455
|
+
_c_code = "{\n"
|
|
4474
4456
|
i = 0
|
|
4475
|
-
for j, node in enumerate(
|
|
4457
|
+
for j, node in enumerate(fg.toposort()):
|
|
4476
4458
|
for output in node.outputs:
|
|
4477
4459
|
if output not in subd:
|
|
4478
4460
|
i += 1
|
|
4479
|
-
name = f"V%(id)s_tmp{
|
|
4461
|
+
name = f"V%(id)s_tmp{i}"
|
|
4480
4462
|
subd[output] = name
|
|
4481
4463
|
_c_code += f"{output.type.dtype_specs()[1]} {name};\n"
|
|
4464
|
+
|
|
4465
|
+
nodename = f"%(nodename)s_subnode{j}"
|
|
4466
|
+
nodenames.append(nodename)
|
|
4467
|
+
|
|
4482
4468
|
s = node.op.c_code(
|
|
4483
4469
|
node,
|
|
4484
|
-
|
|
4470
|
+
nodename,
|
|
4485
4471
|
[subd[input] for input in node.inputs],
|
|
4486
4472
|
[subd[output] for output in node.outputs],
|
|
4487
|
-
dict(fail="%(fail)s", id=f"%(id)s_{
|
|
4473
|
+
dict(fail="%(fail)s", id=f"%(id)s_{j}"),
|
|
4488
4474
|
)
|
|
4489
4475
|
_c_code += s
|
|
4490
4476
|
_c_code += "\n"
|
|
4491
4477
|
|
|
4478
|
+
# Copy the temporary outputs to the real outputs
|
|
4479
|
+
for i, output in enumerate(fg.outputs):
|
|
4480
|
+
_c_code += f"%(o{i})s = {subd[output]};\n"
|
|
4481
|
+
|
|
4492
4482
|
_c_code += "}\n"
|
|
4493
4483
|
|
|
4494
4484
|
self._c_code = _c_code
|
|
@@ -4498,8 +4488,8 @@ class Composite(ScalarInnerGraphOp):
|
|
|
4498
4488
|
def c_code(self, node, nodename, inames, onames, sub):
|
|
4499
4489
|
d = dict(
|
|
4500
4490
|
chain(
|
|
4501
|
-
zip((f"i{
|
|
4502
|
-
zip((f"o{
|
|
4491
|
+
zip((f"i{i}" for i in range(len(inames))), inames, strict=True),
|
|
4492
|
+
zip((f"o{i}" for i in range(len(onames))), onames, strict=True),
|
|
4503
4493
|
),
|
|
4504
4494
|
**sub,
|
|
4505
4495
|
)
|
|
@@ -4512,7 +4502,7 @@ class Composite(ScalarInnerGraphOp):
|
|
|
4512
4502
|
return self.c_code_template % d
|
|
4513
4503
|
|
|
4514
4504
|
def c_code_cache_version_outer(self) -> tuple[int, ...]:
|
|
4515
|
-
return (
|
|
4505
|
+
return (6,)
|
|
4516
4506
|
|
|
4517
4507
|
|
|
4518
4508
|
class Compositef32:
|
|
@@ -55,6 +55,7 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
55
55
|
constant: Sequence[Variable] | None = None,
|
|
56
56
|
until: Variable | None = None,
|
|
57
57
|
name="ScalarLoop",
|
|
58
|
+
**kwargs,
|
|
58
59
|
):
|
|
59
60
|
if constant is None:
|
|
60
61
|
constant = []
|
|
@@ -75,7 +76,7 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
75
76
|
self.nout = len(self.outputs)
|
|
76
77
|
self.name = name
|
|
77
78
|
|
|
78
|
-
super().__init__()
|
|
79
|
+
super().__init__(**kwargs)
|
|
79
80
|
|
|
80
81
|
def output_types(self, input_types):
|
|
81
82
|
return self.outputs_type
|
|
@@ -115,7 +116,7 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
115
116
|
self._fgraph = fgraph
|
|
116
117
|
return self._fgraph
|
|
117
118
|
|
|
118
|
-
def clone(self):
|
|
119
|
+
def clone(self, name=None, **kwargs):
|
|
119
120
|
if self.is_while:
|
|
120
121
|
*update, until = self.outputs
|
|
121
122
|
else:
|
|
@@ -127,7 +128,8 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
127
128
|
update=update,
|
|
128
129
|
constant=constant,
|
|
129
130
|
until=until,
|
|
130
|
-
name=self.name,
|
|
131
|
+
name=self.name if name is None else name,
|
|
132
|
+
**kwargs,
|
|
131
133
|
)
|
|
132
134
|
|
|
133
135
|
@property
|
|
@@ -135,20 +137,7 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
135
137
|
raise NotImplementedError
|
|
136
138
|
|
|
137
139
|
def make_new_inplace(self, output_types_preference=None, name=None):
|
|
138
|
-
|
|
139
|
-
This op.__init__ fct don't have the same parameter as other scalar op.
|
|
140
|
-
This break the insert_inplace_optimizer optimization.
|
|
141
|
-
This fct allow fix patch this.
|
|
142
|
-
|
|
143
|
-
"""
|
|
144
|
-
d = {k: getattr(self, k) for k in self.init_param}
|
|
145
|
-
out = self.__class__(**d)
|
|
146
|
-
if name:
|
|
147
|
-
out.name = name
|
|
148
|
-
else:
|
|
149
|
-
name = out.name
|
|
150
|
-
super(ScalarLoop, out).__init__(output_types_preference, name)
|
|
151
|
-
return out
|
|
140
|
+
return self.clone(output_types_preference=output_types_preference, name=name)
|
|
152
141
|
|
|
153
142
|
def make_node(self, n_steps, *inputs):
|
|
154
143
|
assert len(inputs) == self.nin - 1
|
|
@@ -223,17 +212,15 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
223
212
|
# The first input is `n_steps` so we skip it in the mapping dictionary
|
|
224
213
|
n_update = len(self.outputs) - (1 if self.is_while else 0)
|
|
225
214
|
carry_subd = {
|
|
226
|
-
c: f"%(i{
|
|
215
|
+
c: f"%(i{i})s" for i, c in enumerate(fgraph.inputs[:n_update], start=1)
|
|
227
216
|
}
|
|
228
217
|
constant_subd = {
|
|
229
|
-
c: f"%(i{
|
|
218
|
+
c: f"%(i{i})s"
|
|
230
219
|
for i, c in enumerate(fgraph.inputs[n_update:], start=n_update + 1)
|
|
231
220
|
}
|
|
232
|
-
|
|
233
|
-
u: f"%(o{int(i)})s" for i, u in enumerate(fgraph.outputs[:n_update])
|
|
234
|
-
}
|
|
221
|
+
out_subd = {u: f"%(o{i})s" for i, u in enumerate(fgraph.outputs[:n_update])}
|
|
235
222
|
until_subd = {u: "until" for u in fgraph.outputs[n_update:]}
|
|
236
|
-
subd = {**carry_subd, **constant_subd, **
|
|
223
|
+
subd = {**carry_subd, **constant_subd, **until_subd}
|
|
237
224
|
|
|
238
225
|
for var in fgraph.variables:
|
|
239
226
|
if var.owner is None:
|
|
@@ -257,11 +244,11 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
257
244
|
_c_code += "bool until = 1;\n\n"
|
|
258
245
|
|
|
259
246
|
# Copy carried inputs
|
|
260
|
-
for i, (var, name) in enumerate(carry_subd.items()):
|
|
261
|
-
|
|
262
|
-
_c_code += f"{var.type.dtype_specs()[1]} {
|
|
263
|
-
carry_subd[var] =
|
|
264
|
-
subd[var] =
|
|
247
|
+
for i, (var, name) in enumerate(carry_subd.items(), start=1):
|
|
248
|
+
carry_var_name = f"{name}_carry{i}"
|
|
249
|
+
_c_code += f"{var.type.dtype_specs()[1]} {carry_var_name} = {name};\n"
|
|
250
|
+
carry_subd[var] = carry_var_name
|
|
251
|
+
subd[var] = carry_var_name
|
|
265
252
|
|
|
266
253
|
# _c_code += 'printf("inputs=[");'
|
|
267
254
|
# for i in range(1, len(fgraph.inputs)):
|
|
@@ -270,34 +257,39 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
270
257
|
|
|
271
258
|
_c_code += "\nfor(%(n_steps_dtype)s i = 0; i < %(n_steps)s; i++){\n"
|
|
272
259
|
|
|
273
|
-
self.
|
|
274
|
-
|
|
275
|
-
]
|
|
260
|
+
# Used by self.c_support_code_apply
|
|
261
|
+
self.nodenames = nodenames = []
|
|
276
262
|
|
|
277
263
|
i = 0
|
|
278
264
|
for j, node in enumerate(fgraph.toposort()):
|
|
279
265
|
for output in node.outputs:
|
|
280
266
|
if output not in subd:
|
|
281
267
|
i += 1
|
|
282
|
-
name = f"V%(id)s_tmp{
|
|
268
|
+
name = f"V%(id)s_tmp{i}"
|
|
283
269
|
subd[output] = name
|
|
284
270
|
_c_code += f"{output.type.dtype_specs()[1]} {name};\n"
|
|
271
|
+
|
|
272
|
+
nodename = f"%(nodename)s_subnode{j}"
|
|
273
|
+
nodenames.append(nodename)
|
|
274
|
+
|
|
285
275
|
s = node.op.c_code(
|
|
286
276
|
node,
|
|
287
|
-
|
|
277
|
+
nodename,
|
|
288
278
|
# Any node that depended on `init` will depend on `update` instead
|
|
289
279
|
# The initial value of `update` was set to `init` before the loop
|
|
290
280
|
[subd[input] for input in node.inputs],
|
|
291
281
|
[subd[output] for output in node.outputs],
|
|
292
|
-
dict(fail="%(fail)s", id=f"%(id)s_{
|
|
282
|
+
dict(fail="%(fail)s", id=f"%(id)s_{j}"),
|
|
293
283
|
)
|
|
294
284
|
_c_code += s
|
|
295
285
|
_c_code += "\n"
|
|
296
286
|
|
|
297
|
-
#
|
|
287
|
+
# Update the carry variables to the output variables
|
|
298
288
|
_c_code += "\n"
|
|
299
|
-
for
|
|
300
|
-
|
|
289
|
+
for carry, out in zip(
|
|
290
|
+
carry_subd.values(), fgraph.outputs[:n_update], strict=True
|
|
291
|
+
):
|
|
292
|
+
_c_code += f"{carry} = {subd[out]};\n"
|
|
301
293
|
|
|
302
294
|
# _c_code += 'printf("%%ld\\n", i);\n'
|
|
303
295
|
# for carry in range(1, 10):
|
|
@@ -309,6 +301,10 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
309
301
|
# End of the loop
|
|
310
302
|
_c_code += "}\n"
|
|
311
303
|
|
|
304
|
+
# Assign the carry variables to the outputs
|
|
305
|
+
for out, carry in zip(out_subd.values(), carry_subd.values(), strict=True):
|
|
306
|
+
_c_code += f"{out} = {carry};\n"
|
|
307
|
+
|
|
312
308
|
# Output until flag
|
|
313
309
|
if self.is_while:
|
|
314
310
|
_c_code += f"%(o{len(fgraph.outputs)-1})s = until;\n"
|
|
@@ -322,8 +318,8 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
322
318
|
def c_code(self, node, nodename, inames, onames, sub):
|
|
323
319
|
d = dict(
|
|
324
320
|
chain(
|
|
325
|
-
zip((f"i{
|
|
326
|
-
zip((f"o{
|
|
321
|
+
zip((f"i{i}" for i in range(len(inames))), inames, strict=True),
|
|
322
|
+
zip((f"o{i}" for i in range(len(onames))), onames, strict=True),
|
|
327
323
|
),
|
|
328
324
|
**sub,
|
|
329
325
|
)
|
|
@@ -343,4 +339,4 @@ class ScalarLoop(ScalarInnerGraphOp):
|
|
|
343
339
|
return res
|
|
344
340
|
|
|
345
341
|
def c_code_cache_version_outer(self):
|
|
346
|
-
return (
|
|
342
|
+
return (4,)
|