pytensor 2.27.1__tar.gz → 2.28.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytensor-2.27.1/pytensor.egg-info → pytensor-2.28.0}/PKG-INFO +4 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/op.rst +0 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/basic.rst +0 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/gradients.rst +16 -5
- {pytensor-2.27.1 → pytensor-2.28.0}/pyproject.toml +12 -4
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/_version.py +3 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/breakpoint.py +8 -8
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/builders.py +12 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/compiledir.py +23 -23
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/debugmode.py +4 -4
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/function/pfunc.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/function/types.py +7 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/mode.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/monitormode.py +3 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/nanguardmode.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/profiling.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/gradient.py +160 -43
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/features.py +11 -11
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/fg.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/rewriting/basic.py +10 -20
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/utils.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/basic.py +7 -12
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/c_code/lazylinker_c.c +19 -34
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/c_code/pytensor_mod_helper.h +1 -7
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/interface.py +3 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/lazylinker_c.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/op.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/random.py +15 -2
- pytensor-2.28.0/pytensor/link/numba/dispatch/_LAPACK.py +392 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/basic.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/elemwise.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/random.py +50 -6
- pytensor-2.28.0/pytensor/link/numba/dispatch/slinalg.py +1187 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/basic.py +37 -7
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/scalar.py +6 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/shape.py +16 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/subtensor.py +15 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/linker.py +3 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/vm.py +1 -1
- pytensor-2.28.0/pytensor/npy_2_compat.py +308 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/printing.py +3 -4
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/basic.py +222 -98
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/loop.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/math.py +34 -172
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/basic.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/op.py +51 -36
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/basic.py +10 -10
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/rewriting.py +47 -47
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/__init__.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/basic.py +140 -94
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/blas.py +7 -7
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/blas_headers.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/blockwise.py +7 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/conv/abstract_conv.py +4 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/einsum.py +6 -5
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/elemwise.py +17 -16
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/extra_ops.py +160 -84
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/inplace.py +0 -5
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/math.py +81 -50
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/nlinalg.py +5 -7
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/basic.py +42 -52
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/op.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/type.py +2 -2
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/blas.py +7 -5
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/elemwise.py +4 -4
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/math.py +13 -13
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/shape.py +246 -171
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/special.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/subtensor.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/shape.py +17 -5
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/slinalg.py +25 -23
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/special.py +43 -23
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/subtensor.py +10 -7
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/type.py +16 -13
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/utils.py +3 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/variable.py +35 -34
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/xlogx.py +2 -10
- {pytensor-2.27.1 → pytensor-2.28.0/pytensor.egg-info}/PKG-INFO +4 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor.egg-info/SOURCES.txt +2 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor.egg-info/requires.txt +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_config.py +1 -1
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_gradient.py +15 -13
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_printing.py +3 -3
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_rop.py +134 -50
- pytensor-2.27.1/doc/library/gradient.rst +0 -76
- pytensor-2.27.1/pytensor/link/numba/dispatch/slinalg.py +0 -431
- {pytensor-2.27.1 → pytensor-2.28.0}/LICENSE.txt +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/MANIFEST.in +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/README.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/.templates/layout.html +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/.templates/nb-badges.html +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/.templates/rendered_citation.html +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/LICENSE.txt +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/README.md +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/acknowledgement.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/bcast.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/bcast.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/blog.md +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/conf.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/core_development_guide.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/css.inc +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/environment.yml +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/apply.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/apply.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/apply2.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/creating_a_numba_jax_op.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/creating_an_op.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/ctype.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/extending_pytensor_solution_1.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/graph_rewriting.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/graphstructures.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/inplace.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/scan.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/tips.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/type.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/unittest.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/extending/using_params.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/faq.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/gallery/page_footer.md +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/glossary.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/PyTensor.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/PyTensor_logo.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/binder.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/blocksparse.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/colab.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/github.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/lstm.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/talk2010.gif +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/images/talk2010.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/install.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/internal/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/introduction.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/debugmode.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/function.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/io.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/nanguardmode.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/config.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/index.ipynb +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/features.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/op.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/replace.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/type.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/printing.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/scan.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/fft.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/functional.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/random/distributions.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/library/typed_list.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/links.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/optimizations.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/pylintrc +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/robots.txt +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/troubleshooting.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/adding.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/aliasing.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/apply.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/broadcasting.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/conditions.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/debug_faq.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/examples.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/index.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/loop.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/loop_solution_1.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/modes.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/modes_solution_1.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/printing_drawing.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/prng.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/doc/user_guide.rst +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/io.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/ops.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/configdefaults.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/configparser.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/op.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/replace.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/rewriting/kanren.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/graph/type.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/ifelse.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/cmodule.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/c/type.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/blas.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/einsum.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/math.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/pad.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/scalar.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/shape.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/sort.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/subtensor.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/blockwise.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/subtensor.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/blas.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/math.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/pytorch/dispatch/sort.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/link/utils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/py.typed +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/raise_op.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/c_code/incbet.c +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/checkpoints.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/rewriting.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/utils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/scan/views.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/sandbox/sp.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/sandbox/sp2.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/type.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/interpolate.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/io.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/pad.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/rewriting/numba.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/blas_c.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/einsum.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/extra_ops.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/jax.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/linalg.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/numba.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/ofg.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/tensor/var.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/typed_list/basic.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/updates.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor/utils.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/setup.cfg +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/setup.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_breakpoint.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_ifelse.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_raise_op.py +0 -0
- {pytensor-2.27.1 → pytensor-2.28.0}/tests/test_updates.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: pytensor
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.28.0
|
|
4
4
|
Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
|
|
5
5
|
Author-email: pymc-devs <pymc.devs@gmail.com>
|
|
6
6
|
License: .. _license:
|
|
@@ -69,12 +69,13 @@ Classifier: Programming Language :: Python :: 3
|
|
|
69
69
|
Classifier: Programming Language :: Python :: 3.10
|
|
70
70
|
Classifier: Programming Language :: Python :: 3.11
|
|
71
71
|
Classifier: Programming Language :: Python :: 3.12
|
|
72
|
-
|
|
72
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
73
|
+
Requires-Python: <3.14,>=3.10
|
|
73
74
|
Description-Content-Type: text/x-rst
|
|
74
75
|
License-File: LICENSE.txt
|
|
75
76
|
Requires-Dist: setuptools>=59.0.0
|
|
76
77
|
Requires-Dist: scipy<2,>=1
|
|
77
|
-
Requires-Dist: numpy
|
|
78
|
+
Requires-Dist: numpy>=1.17.0
|
|
78
79
|
Requires-Dist: filelock>=3.15
|
|
79
80
|
Requires-Dist: etuples
|
|
80
81
|
Requires-Dist: logical-unification
|
|
@@ -86,9 +86,7 @@ of symbolic differentiation).
|
|
|
86
86
|
``i`` of the output list is the gradient of the first argument of
|
|
87
87
|
`pt.grad` with respect to the ``i``-th element of the list given as second argument.
|
|
88
88
|
The first argument of `pt.grad` has to be a scalar (a tensor
|
|
89
|
-
of size 1).
|
|
90
|
-
`pt.grad` and details about the implementation, see
|
|
91
|
-
:ref:`this<libdoc_gradient>` section of the library.
|
|
89
|
+
of size 1).
|
|
92
90
|
|
|
93
91
|
Additional information on the inner workings of differentiation may also be
|
|
94
92
|
found in the more advanced tutorial :ref:`Extending PyTensor<extending>`.
|
|
@@ -204,7 +202,21 @@ you need to do something similar to this:
|
|
|
204
202
|
>>> f([[1, 1], [1, 1]], [[2, 2], [2, 2]], [0,1])
|
|
205
203
|
array([ 2., 2.])
|
|
206
204
|
|
|
207
|
-
|
|
205
|
+
By default, the R-operator is implemented as a double application of the L_operator
|
|
206
|
+
(see `reference <https://j-towns.github.io/2017/06/12/A-new-trick.html>`_).
|
|
207
|
+
In most cases this should be as performant as a specialized implementation of the R-operator.
|
|
208
|
+
However, PyTensor may sometimes fail to prune dead branches or fuse common expressions within composite operators,
|
|
209
|
+
such as Scan and OpFromGraph, that would be more easily avoidable in a direct implentation of the R-operator.
|
|
210
|
+
|
|
211
|
+
When this is a concern, it is possible to force `Rop` to use the specialized `Op.R_op` methods by passing
|
|
212
|
+
`use_op_rop_implementation=True`. Note that this will fail if the graph contains `Op`s that don't implement this method.
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
>>> JV = pytensor.gradient.Rop(y, W, V, use_op_rop_implementation=True)
|
|
216
|
+
>>> f = pytensor.function([W, V, x], JV)
|
|
217
|
+
>>> f([[1, 1], [1, 1]], [[2, 2], [2, 2]], [0,1])
|
|
218
|
+
array([ 2., 2.])
|
|
219
|
+
|
|
208
220
|
|
|
209
221
|
L-operator
|
|
210
222
|
----------
|
|
@@ -234,7 +246,6 @@ array([[ 0., 0.],
|
|
|
234
246
|
as the input parameter, while the result of the R-operator has a shape similar
|
|
235
247
|
to that of the output.
|
|
236
248
|
|
|
237
|
-
:ref:`List of op with r op support <R_op_list>`.
|
|
238
249
|
|
|
239
250
|
Hessian times a Vector
|
|
240
251
|
======================
|
|
@@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta"
|
|
|
10
10
|
[project]
|
|
11
11
|
name = "pytensor"
|
|
12
12
|
dynamic = ['version']
|
|
13
|
-
requires-python = ">=3.10,<3.
|
|
13
|
+
requires-python = ">=3.10,<3.14"
|
|
14
14
|
authors = [{ name = "pymc-devs", email = "pymc.devs@gmail.com" }]
|
|
15
15
|
description = "Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs."
|
|
16
16
|
readme = "README.rst"
|
|
@@ -33,6 +33,7 @@ classifiers = [
|
|
|
33
33
|
"Programming Language :: Python :: 3.10",
|
|
34
34
|
"Programming Language :: Python :: 3.11",
|
|
35
35
|
"Programming Language :: Python :: 3.12",
|
|
36
|
+
"Programming Language :: Python :: 3.13",
|
|
36
37
|
]
|
|
37
38
|
|
|
38
39
|
keywords = [
|
|
@@ -48,7 +49,7 @@ keywords = [
|
|
|
48
49
|
dependencies = [
|
|
49
50
|
"setuptools>=59.0.0",
|
|
50
51
|
"scipy>=1,<2",
|
|
51
|
-
"numpy>=1.17.0
|
|
52
|
+
"numpy>=1.17.0",
|
|
52
53
|
"filelock>=3.15",
|
|
53
54
|
"etuples",
|
|
54
55
|
"logical-unification",
|
|
@@ -129,7 +130,7 @@ exclude = ["doc/", "pytensor/_version.py"]
|
|
|
129
130
|
docstring-code-format = true
|
|
130
131
|
|
|
131
132
|
[tool.ruff.lint]
|
|
132
|
-
select = ["B905", "C", "E", "F", "I", "UP", "W", "RUF", "PERF", "PTH", "ISC"]
|
|
133
|
+
select = ["B905", "C", "E", "F", "I", "UP", "W", "RUF", "PERF", "PTH", "ISC", "T20", "NPY201"]
|
|
133
134
|
ignore = ["C408", "C901", "E501", "E741", "RUF012", "PERF203", "ISC001"]
|
|
134
135
|
unfixable = [
|
|
135
136
|
# zip-strict: the auto-fix adds `strict=False` but we might want `strict=True` instead
|
|
@@ -144,7 +145,12 @@ lines-after-imports = 2
|
|
|
144
145
|
# TODO: Get rid of these:
|
|
145
146
|
"**/__init__.py" = ["F401", "E402", "F403"]
|
|
146
147
|
"pytensor/tensor/linalg.py" = ["F403"]
|
|
147
|
-
"pytensor/link/c/cmodule.py" = ["PTH"]
|
|
148
|
+
"pytensor/link/c/cmodule.py" = ["PTH", "T201"]
|
|
149
|
+
"pytensor/misc/elemwise_time_test.py" = ["T201"]
|
|
150
|
+
"pytensor/misc/elemwise_openmp_speedup.py" = ["T201"]
|
|
151
|
+
"pytensor/misc/check_duplicate_key.py" = ["T201"]
|
|
152
|
+
"pytensor/misc/check_blas.py" = ["T201"]
|
|
153
|
+
"pytensor/bin/pytensor_cache.py" = ["T201"]
|
|
148
154
|
# For the tests we skip because `pytest.importorskip` is used:
|
|
149
155
|
"tests/link/jax/test_scalar.py" = ["E402"]
|
|
150
156
|
"tests/link/jax/test_tensor_basic.py" = ["E402"]
|
|
@@ -158,6 +164,8 @@ lines-after-imports = 2
|
|
|
158
164
|
"tests/sparse/test_sp2.py" = ["E402"]
|
|
159
165
|
"tests/sparse/test_utils.py" = ["E402"]
|
|
160
166
|
"tests/sparse/sandbox/test_sp.py" = ["E402", "F401"]
|
|
167
|
+
"tests/compile/test_monitormode.py" = ["T201"]
|
|
168
|
+
"scripts/run_mypy.py" = ["T201"]
|
|
161
169
|
|
|
162
170
|
|
|
163
171
|
[tool.mypy]
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-02-
|
|
11
|
+
"date": "2025-02-20T16:27:45+0100",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.
|
|
14
|
+
"full-revisionid": "5d4e9e0749aa0d33a9db26080a35fdd579aef23d",
|
|
15
|
+
"version": "2.28.0"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -108,14 +108,14 @@ class PdbBreakpoint(Op):
|
|
|
108
108
|
f"'{self.name}' could not be casted to NumPy arrays"
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
-
print("\n")
|
|
112
|
-
print("-------------------------------------------------")
|
|
113
|
-
print(f"Conditional breakpoint '{self.name}' activated\n")
|
|
114
|
-
print("The monitored variables are stored, in order,")
|
|
115
|
-
print("in the list variable 'monitored' as NumPy arrays.\n")
|
|
116
|
-
print("Their contents can be altered and, when execution")
|
|
117
|
-
print("resumes, the updated values will be used.")
|
|
118
|
-
print("-------------------------------------------------")
|
|
111
|
+
print("\n") # noqa: T201
|
|
112
|
+
print("-------------------------------------------------") # noqa: T201
|
|
113
|
+
print(f"Conditional breakpoint '{self.name}' activated\n") # noqa: T201
|
|
114
|
+
print("The monitored variables are stored, in order,") # noqa: T201
|
|
115
|
+
print("in the list variable 'monitored' as NumPy arrays.\n") # noqa: T201
|
|
116
|
+
print("Their contents can be altered and, when execution") # noqa: T201
|
|
117
|
+
print("resumes, the updated values will be used.") # noqa: T201
|
|
118
|
+
print("-------------------------------------------------") # noqa: T201
|
|
119
119
|
|
|
120
120
|
try:
|
|
121
121
|
import pudb
|
|
@@ -340,6 +340,12 @@ class OpFromGraph(Op, HasInnerGraph):
|
|
|
340
340
|
``None``, this will be used as the connection_pattern for this
|
|
341
341
|
:class:`Op`.
|
|
342
342
|
|
|
343
|
+
.. warning::
|
|
344
|
+
|
|
345
|
+
rop overrides is ignored when `pytensor.gradient.Rop` is called with
|
|
346
|
+
`use_op_rop_implementation=False` (default). In this case the Lop
|
|
347
|
+
is used twice to obtain a mathematically equivalent Rop.
|
|
348
|
+
|
|
343
349
|
strict: bool, default False
|
|
344
350
|
If true, it raises when any variables needed to compute the inner graph
|
|
345
351
|
are not provided as explici inputs. This can only happen for graphs with
|
|
@@ -641,7 +647,12 @@ class OpFromGraph(Op, HasInnerGraph):
|
|
|
641
647
|
return rop_overrides
|
|
642
648
|
|
|
643
649
|
eval_points = [inp_t() for inp_t in self.input_types]
|
|
644
|
-
fn_rop = partial(
|
|
650
|
+
fn_rop = partial(
|
|
651
|
+
Rop,
|
|
652
|
+
wrt=inner_inputs,
|
|
653
|
+
eval_points=eval_points,
|
|
654
|
+
use_op_rop_implementation=True,
|
|
655
|
+
)
|
|
645
656
|
|
|
646
657
|
callable_args = (inner_inputs, eval_points)
|
|
647
658
|
if rop_overrides is None:
|
|
@@ -95,10 +95,10 @@ def cleanup():
|
|
|
95
95
|
def print_title(title, overline="", underline=""):
|
|
96
96
|
len_title = len(title)
|
|
97
97
|
if overline:
|
|
98
|
-
print(str(overline) * len_title)
|
|
99
|
-
print(title)
|
|
98
|
+
print(str(overline) * len_title) # noqa: T201
|
|
99
|
+
print(title) # noqa: T201
|
|
100
100
|
if underline:
|
|
101
|
-
print(str(underline) * len_title)
|
|
101
|
+
print(str(underline) * len_title) # noqa: T201
|
|
102
102
|
|
|
103
103
|
|
|
104
104
|
def print_compiledir_content():
|
|
@@ -159,7 +159,7 @@ def print_compiledir_content():
|
|
|
159
159
|
_logger.error(f"Could not read key file '{filename}'.")
|
|
160
160
|
|
|
161
161
|
print_title(f"PyTensor cache: {compiledir}", overline="=", underline="=")
|
|
162
|
-
print()
|
|
162
|
+
print() # noqa: T201
|
|
163
163
|
|
|
164
164
|
print_title(f"List of {len(table)} compiled individual ops", underline="+")
|
|
165
165
|
print_title(
|
|
@@ -168,9 +168,9 @@ def print_compiledir_content():
|
|
|
168
168
|
)
|
|
169
169
|
table = sorted(table, key=lambda t: str(t[1]))
|
|
170
170
|
for dir, op, types, compile_time in table:
|
|
171
|
-
print(dir, f"{compile_time:.3f}s", op, types)
|
|
171
|
+
print(dir, f"{compile_time:.3f}s", op, types) # noqa: T201
|
|
172
172
|
|
|
173
|
-
print()
|
|
173
|
+
print() # noqa: T201
|
|
174
174
|
print_title(
|
|
175
175
|
f"List of {len(table_multiple_ops)} compiled sets of ops", underline="+"
|
|
176
176
|
)
|
|
@@ -180,9 +180,9 @@ def print_compiledir_content():
|
|
|
180
180
|
)
|
|
181
181
|
table_multiple_ops = sorted(table_multiple_ops, key=lambda t: (t[1], t[2]))
|
|
182
182
|
for dir, ops_to_str, types_to_str, compile_time in table_multiple_ops:
|
|
183
|
-
print(dir, f"{compile_time:.3f}s", ops_to_str, types_to_str)
|
|
183
|
+
print(dir, f"{compile_time:.3f}s", ops_to_str, types_to_str) # noqa: T201
|
|
184
184
|
|
|
185
|
-
print()
|
|
185
|
+
print() # noqa: T201
|
|
186
186
|
print_title(
|
|
187
187
|
(
|
|
188
188
|
f"List of {len(table_op_class)} compiled Op classes and "
|
|
@@ -191,33 +191,33 @@ def print_compiledir_content():
|
|
|
191
191
|
underline="+",
|
|
192
192
|
)
|
|
193
193
|
for op_class, nb in reversed(table_op_class.most_common()):
|
|
194
|
-
print(op_class, nb)
|
|
194
|
+
print(op_class, nb) # noqa: T201
|
|
195
195
|
|
|
196
196
|
if big_key_files:
|
|
197
197
|
big_key_files = sorted(big_key_files, key=lambda t: str(t[1]))
|
|
198
198
|
big_total_size = sum(sz for _, sz, _ in big_key_files)
|
|
199
|
-
print(
|
|
199
|
+
print( # noqa: T201
|
|
200
200
|
f"There are directories with key files bigger than {int(max_key_file_size)} bytes "
|
|
201
201
|
"(they probably contain big tensor constants)"
|
|
202
202
|
)
|
|
203
|
-
print(
|
|
203
|
+
print( # noqa: T201
|
|
204
204
|
f"They use {int(big_total_size)} bytes out of {int(total_key_sizes)} (total size "
|
|
205
205
|
"used by all key files)"
|
|
206
206
|
)
|
|
207
207
|
|
|
208
208
|
for dir, size, ops in big_key_files:
|
|
209
|
-
print(dir, size, ops)
|
|
209
|
+
print(dir, size, ops) # noqa: T201
|
|
210
210
|
|
|
211
211
|
nb_keys = sorted(nb_keys.items())
|
|
212
|
-
print()
|
|
212
|
+
print() # noqa: T201
|
|
213
213
|
print_title("Number of keys for a compiled module", underline="+")
|
|
214
214
|
print_title(
|
|
215
215
|
"number of keys/number of modules with that number of keys", underline="-"
|
|
216
216
|
)
|
|
217
217
|
for n_k, n_m in nb_keys:
|
|
218
|
-
print(n_k, n_m)
|
|
219
|
-
print()
|
|
220
|
-
print(
|
|
218
|
+
print(n_k, n_m) # noqa: T201
|
|
219
|
+
print() # noqa: T201
|
|
220
|
+
print( # noqa: T201
|
|
221
221
|
f"Skipped {int(zeros_op)} files that contained 0 op "
|
|
222
222
|
"(are they always pytensor.scalar ops?)"
|
|
223
223
|
)
|
|
@@ -242,18 +242,18 @@ def basecompiledir_ls():
|
|
|
242
242
|
subdirs = sorted(subdirs)
|
|
243
243
|
others = sorted(others)
|
|
244
244
|
|
|
245
|
-
print(f"Base compile dir is {config.base_compiledir}")
|
|
246
|
-
print("Sub-directories (possible compile caches):")
|
|
245
|
+
print(f"Base compile dir is {config.base_compiledir}") # noqa: T201
|
|
246
|
+
print("Sub-directories (possible compile caches):") # noqa: T201
|
|
247
247
|
for d in subdirs:
|
|
248
|
-
print(f" {d}")
|
|
248
|
+
print(f" {d}") # noqa: T201
|
|
249
249
|
if not subdirs:
|
|
250
|
-
print(" (None)")
|
|
250
|
+
print(" (None)") # noqa: T201
|
|
251
251
|
|
|
252
252
|
if others:
|
|
253
|
-
print()
|
|
254
|
-
print("Other files in base_compiledir:")
|
|
253
|
+
print() # noqa: T201
|
|
254
|
+
print("Other files in base_compiledir:") # noqa: T201
|
|
255
255
|
for f in others:
|
|
256
|
-
print(f" {f}")
|
|
256
|
+
print(f" {f}") # noqa: T201
|
|
257
257
|
|
|
258
258
|
|
|
259
259
|
def basecompiledir_purge():
|
|
@@ -1315,9 +1315,9 @@ class _VariableEquivalenceTracker:
|
|
|
1315
1315
|
|
|
1316
1316
|
def printstuff(self):
|
|
1317
1317
|
for key in self.equiv:
|
|
1318
|
-
print(key)
|
|
1318
|
+
print(key) # noqa: T201
|
|
1319
1319
|
for e in self.equiv[key]:
|
|
1320
|
-
print(" ", e)
|
|
1320
|
+
print(" ", e) # noqa: T201
|
|
1321
1321
|
|
|
1322
1322
|
|
|
1323
1323
|
# List of default version of make thunk.
|
|
@@ -1569,7 +1569,7 @@ class _Linker(LocalLinker):
|
|
|
1569
1569
|
#####
|
|
1570
1570
|
for r, s in storage_map.items():
|
|
1571
1571
|
if s[0] is not None:
|
|
1572
|
-
print(r, s)
|
|
1572
|
+
print(r, s) # noqa: T201
|
|
1573
1573
|
assert s[0] is None
|
|
1574
1574
|
|
|
1575
1575
|
# try:
|
|
@@ -2079,7 +2079,7 @@ class _Maker(FunctionMaker): # inheritance buys a few helper functions
|
|
|
2079
2079
|
raise StochasticOrder(infolog.getvalue())
|
|
2080
2080
|
else:
|
|
2081
2081
|
if self.verbose:
|
|
2082
|
-
print(
|
|
2082
|
+
print( # noqa: T201
|
|
2083
2083
|
"OPTCHECK: optimization",
|
|
2084
2084
|
i,
|
|
2085
2085
|
"of",
|
|
@@ -569,7 +569,7 @@ def construct_pfunc_ins_and_outs(
|
|
|
569
569
|
if not fgraph:
|
|
570
570
|
# Extend the outputs with the updates on input variables so they are
|
|
571
571
|
# also cloned
|
|
572
|
-
additional_outputs = [i.update for i in inputs if i.update]
|
|
572
|
+
additional_outputs = [i.update for i in inputs if i.update is not None]
|
|
573
573
|
if outputs is None:
|
|
574
574
|
out_list = []
|
|
575
575
|
else:
|
|
@@ -608,7 +608,7 @@ def construct_pfunc_ins_and_outs(
|
|
|
608
608
|
new_i.variable = iv
|
|
609
609
|
|
|
610
610
|
# If needed, replace the input's update by its cloned equivalent
|
|
611
|
-
if i.update:
|
|
611
|
+
if i.update is not None:
|
|
612
612
|
new_i.update = clone_d[i.update]
|
|
613
613
|
|
|
614
614
|
new_inputs.append(new_i)
|
|
@@ -198,7 +198,7 @@ def std_fgraph(
|
|
|
198
198
|
update_mapping = {}
|
|
199
199
|
out_idx = len(output_specs)
|
|
200
200
|
for idx, input_spec in enumerate(input_specs):
|
|
201
|
-
if input_spec.update:
|
|
201
|
+
if input_spec.update is not None:
|
|
202
202
|
updates.append(input_spec.update)
|
|
203
203
|
update_mapping[out_idx] = idx
|
|
204
204
|
out_idx += 1
|
|
@@ -1195,7 +1195,7 @@ def insert_deepcopy(fgraph, wrapped_inputs, wrapped_outputs):
|
|
|
1195
1195
|
updated_fgraph_inputs = {
|
|
1196
1196
|
fgraph_i
|
|
1197
1197
|
for i, fgraph_i in zip(wrapped_inputs, fgraph.inputs, strict=True)
|
|
1198
|
-
if getattr(i, "update",
|
|
1198
|
+
if getattr(i, "update", None) is not None
|
|
1199
1199
|
}
|
|
1200
1200
|
|
|
1201
1201
|
# We can't use fgraph.inputs as this don't include Constant Value.
|
|
@@ -1351,7 +1351,11 @@ class FunctionMaker:
|
|
|
1351
1351
|
ancestors(
|
|
1352
1352
|
(
|
|
1353
1353
|
[o.variable for o in outputs]
|
|
1354
|
-
+ [
|
|
1354
|
+
+ [
|
|
1355
|
+
i.update
|
|
1356
|
+
for i in inputs
|
|
1357
|
+
if getattr(i, "update", None) is not None
|
|
1358
|
+
]
|
|
1355
1359
|
),
|
|
1356
1360
|
blockers=[i.variable for i in inputs],
|
|
1357
1361
|
)
|
|
@@ -178,7 +178,7 @@ class PrintCurrentFunctionGraph(GraphRewriter):
|
|
|
178
178
|
def apply(self, fgraph):
|
|
179
179
|
import pytensor.printing
|
|
180
180
|
|
|
181
|
-
print("PrintCurrentFunctionGraph:", self.header)
|
|
181
|
+
print("PrintCurrentFunctionGraph:", self.header) # noqa: T201
|
|
182
182
|
pytensor.printing.debugprint(fgraph.outputs)
|
|
183
183
|
|
|
184
184
|
|
|
@@ -108,8 +108,8 @@ def detect_nan(fgraph, i, node, fn):
|
|
|
108
108
|
not isinstance(output[0], np.random.RandomState | np.random.Generator)
|
|
109
109
|
and np.isnan(output[0]).any()
|
|
110
110
|
):
|
|
111
|
-
print("*** NaN detected ***")
|
|
111
|
+
print("*** NaN detected ***") # noqa: T201
|
|
112
112
|
debugprint(node)
|
|
113
|
-
print(f"Inputs : {[input[0] for input in fn.inputs]}")
|
|
114
|
-
print(f"Outputs: {[output[0] for output in fn.outputs]}")
|
|
113
|
+
print(f"Inputs : {[input[0] for input in fn.inputs]}") # noqa: T201
|
|
114
|
+
print(f"Outputs: {[output[0] for output in fn.outputs]}") # noqa: T201
|
|
115
115
|
break
|
|
@@ -36,7 +36,7 @@ def _is_numeric_value(arr, var):
|
|
|
36
36
|
return False
|
|
37
37
|
elif isinstance(arr, np.random.mtrand.RandomState | np.random.Generator):
|
|
38
38
|
return False
|
|
39
|
-
elif var and isinstance(var.type, RandomType):
|
|
39
|
+
elif var is not None and isinstance(var.type, RandomType):
|
|
40
40
|
return False
|
|
41
41
|
elif isinstance(arr, slice):
|
|
42
42
|
return False
|
|
@@ -236,7 +236,7 @@ class NanGuardMode(Mode):
|
|
|
236
236
|
if config.NanGuardMode__action == "raise":
|
|
237
237
|
raise AssertionError(msg)
|
|
238
238
|
elif config.NanGuardMode__action == "pdb":
|
|
239
|
-
print(msg)
|
|
239
|
+
print(msg) # noqa: T201
|
|
240
240
|
import pdb
|
|
241
241
|
|
|
242
242
|
pdb.set_trace()
|
|
@@ -82,7 +82,7 @@ def _atexit_print_fn():
|
|
|
82
82
|
to_sum.append(ps)
|
|
83
83
|
else:
|
|
84
84
|
# TODO print the name if there is one!
|
|
85
|
-
print("Skipping empty Profile")
|
|
85
|
+
print("Skipping empty Profile") # noqa: T201
|
|
86
86
|
if len(to_sum) > 1:
|
|
87
87
|
# Make a global profile
|
|
88
88
|
cum = copy.copy(to_sum[0])
|
|
@@ -125,7 +125,7 @@ def _atexit_print_fn():
|
|
|
125
125
|
assert len(merge) == len(cum.rewriter_profile[1])
|
|
126
126
|
cum.rewriter_profile = (cum.rewriter_profile[0], merge)
|
|
127
127
|
except Exception as e:
|
|
128
|
-
print(e)
|
|
128
|
+
print(e) # noqa: T201
|
|
129
129
|
cum.rewriter_profile = None
|
|
130
130
|
else:
|
|
131
131
|
cum.rewriter_profile = None
|