pytensor 2.18.2__tar.gz → 2.18.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.18.2 → pytensor-2.18.3}/PKG-INFO +1 -1
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/creating_a_numba_jax_op.rst +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/creating_an_op.rst +5 -5
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/extending_pytensor_solution_1.py +13 -17
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/graph_rewriting.rst +14 -14
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/graphstructures.rst +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/tips.rst +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/unittest.rst +6 -6
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/glossary.rst +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/introduction.rst +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/debugmode.rst +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/io.rst +10 -10
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/nanguardmode.rst +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/index.ipynb +19 -19
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/index.rst +19 -19
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/printing.rst +5 -5
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/scan.rst +39 -39
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/basic.rst +50 -50
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/fft.rst +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/logistic_regression_example.rst +10 -10
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/adding.rst +14 -14
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/aliasing.rst +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/broadcasting.rst +4 -4
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/conditions.rst +5 -5
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/debug_faq.rst +14 -14
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/examples.rst +17 -17
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/gradients.rst +40 -40
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/index.rst +1 -1
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/loop.rst +52 -52
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/loop_solution_1.py +11 -11
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/modes.rst +7 -7
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/modes_solution_1.py +7 -7
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/printing_drawing.rst +6 -6
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/_version.py +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/breakpoint.py +4 -4
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/builders.py +8 -8
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/profiling.py +52 -52
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/basic.py +6 -6
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/rewriting/kanren.py +4 -4
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/ifelse.py +13 -13
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/random.py +31 -31
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/scalar.py +8 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/shape.py +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/subtensor.py +6 -6
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/tensor_basic.py +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/random.py +29 -29
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/raise_op.py +5 -5
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/math.py +31 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/basic.py +13 -13
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/checkpoints.py +5 -5
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/op.py +17 -17
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/rewriting.py +21 -21
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/utils.py +6 -6
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/basic.py +63 -63
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/rewriting.py +10 -10
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/sandbox/sp.py +17 -17
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/sandbox/sp2.py +5 -5
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/type.py +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/basic.py +49 -52
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/blas.py +20 -20
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/conv/abstract_conv.py +18 -18
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/elemwise.py +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/extra_ops.py +58 -58
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/inplace.py +5 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/math.py +21 -15
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/nlinalg.py +26 -26
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/op.py +16 -28
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/basic.py +14 -14
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/blas.py +16 -14
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/blas_c.py +3 -3
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/elemwise.py +22 -22
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/extra_ops.py +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/jax.py +4 -4
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/math.py +86 -86
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/shape.py +5 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/special.py +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/subtensor.py +8 -8
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/uncanonicalize.py +2 -2
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/shape.py +19 -19
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/slinalg.py +14 -14
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/subtensor.py +21 -21
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/type.py +17 -17
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/variable.py +124 -124
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/xlogx.py +9 -9
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/typed_list/basic.py +4 -4
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor.egg-info/PKG-INFO +1 -1
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_gradient.py +11 -11
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_ifelse.py +6 -6
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_raise_op.py +10 -10
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_rop.py +12 -12
- {pytensor-2.18.2 → pytensor-2.18.3}/LICENSE.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/MANIFEST.in +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/README.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/bin/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/bin/pytensor-cache +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/bin/pytensor_cache.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/.templates/PLACEHOLDER +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/.templates/layout.html +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/LICENSE.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/README.md +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/acknowledgement.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/bcast.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/bcast.svg +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/conf.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/core_development_guide.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/css.inc +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/dev_start_guide.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/environment.yml +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/apply.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/apply.svg +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/apply2.svg +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/creating_a_c_op.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/ctype.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/extending_faq.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/inplace.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/op.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/other_ops.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/pipeline.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/scan.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/type.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/extending/using_params.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/faq.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/generate_dtype_tensor_table.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/images/Elman_srnn.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/images/PyTensor_RGB.svg +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/images/blocksparse.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/images/lstm.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/images/lstm_memorycell.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/images/talk2010.gif +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/images/talk2010.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/install.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/internal/how_to_release.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/internal/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/internal/metadocumentation.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/function.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/mode.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/opfromgraph.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/ops.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/profilemode.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/compile/shared.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/config.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/mlp.html +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/mlp.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/mlp2.html +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/mlp2.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/ofg.html +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/examples/ofg2.html +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/gradient.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/graph/features.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/graph/fgraph.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/graph/graph.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/graph/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/graph/op.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/graph/type.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/graph/utils.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/misc/pkl_utils.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/sandbox/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/sandbox/linalg.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/scalar/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/sparse/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/sparse/sandbox.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/basic_opt.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/bcast.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/bcast.svg +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/conv.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/elemwise.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/extra_ops.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/io.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/math_opt.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/nlinalg.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/plot_fft.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/random/basic.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/random/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/random/utils.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/slinalg.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/tensor/utils.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/library/typed_list.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/links.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/optimizations.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/pylintrc +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/ccodegen.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/compilation.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/debugging_with_stepmode.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/elemwise_compiler.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/function.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/functional.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/how_to_make_ops.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/index.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/index2.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/interactive_debugger.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/performance.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/randomnumbers.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/rethinkccodegen.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/sandbox.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/software.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/sparse.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/sandbox/tensoroptools.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/scripts/docgen.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/troubleshooting.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/adding_solution_1.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/apply.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/apply.svg +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/bcast.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/dlogistic.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/faq_tutorial.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/loading_and_saving.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/logistic.gp +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/logistic.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/multi_cores.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/nan_tutorial.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/pics/d3viz.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/profiling.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/profiling_example.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/profiling_example_out.prof +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/shape_info.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/sparse.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/tutorial/symbolic_graphs.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/doc/user_guide.rst +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pyproject.toml +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/bin/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/bin/pytensor_cache.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/compiledir.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/compilelock.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/debugmode.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/function/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/function/pfunc.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/function/types.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/io.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/mode.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/monitormode.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/nanguardmode.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/ops.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/compile/sharedvalue.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/configdefaults.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/configparser.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/css/d3viz.css +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/d3viz.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/formatting.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/js/d3viz.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/gradient.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/destroyhandler.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/features.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/fg.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/null_type.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/op.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/replace.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/rewriting/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/rewriting/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/rewriting/db.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/rewriting/unify.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/rewriting/utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/type.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/graph/utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/cmodule.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/cutils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/cvm.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/exceptions.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/interface.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/lazylinker_c.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/op.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/params_type.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/c/type.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/scan.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/slinalg.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/jax/linker.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/elemwise.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/elemwise_codegen.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/scan.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/slinalg.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/sparse.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/numba/linker.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/link/vm.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/check_blas.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/check_blas_many.sh +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/check_duplicate_key.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/elemwise_time_test.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/frozendict.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/may_share_memory.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/ordered_set.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/pkl_utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/misc/safe_asarray.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/printing.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/py.typed +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/c_code/gamma.c +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/loop.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scalar/sharedvar.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/scan_perform.pyx +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/scan_perform_ext.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/scan/views.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/sandbox/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/sharedvar.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/sparse/utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/blas_c.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/blas_headers.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/blas_scipy.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/blockwise.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/conv/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/elemwise_cgen.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/exceptions.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/fft.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/fourier.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/functional.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/io.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/linalg.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/type.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/random/var.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/blockwise.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/rewriting/linalg.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/sharedvar.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/sort.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/special.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/type_other.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/tensor/var.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/typed_list/__init__.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/typed_list/rewriting.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/typed_list/type.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/updates.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/utils.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor/version.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor.egg-info/SOURCES.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor.egg-info/dependency_links.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor.egg-info/entry_points.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor.egg-info/requires.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/pytensor.egg-info/top_level.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/scripts/downstream_pr.sh +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/scripts/mypy-failing.txt +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/scripts/upstream_pr.sh +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/setup.cfg +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/setup.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/link/c/c_code/test_cenum.h +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_breakpoint.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_config.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_printing.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/tests/test_updates.py +0 -0
- {pytensor-2.18.2 → pytensor-2.18.3}/versioneer.py +0 -0
|
@@ -135,16 +135,16 @@ Here's a small example of a test for :class:`Eye`:
|
|
|
135
135
|
|
|
136
136
|
.. code:: python
|
|
137
137
|
|
|
138
|
-
import pytensor.tensor as
|
|
138
|
+
import pytensor.tensor as pt
|
|
139
139
|
|
|
140
140
|
def test_jax_Eye():
|
|
141
141
|
"""Test JAX conversion of the `Eye` `Op`."""
|
|
142
142
|
|
|
143
143
|
# Create a symbolic input for `Eye`
|
|
144
|
-
x_at =
|
|
144
|
+
x_at = pt.scalar()
|
|
145
145
|
|
|
146
146
|
# Create a variable that is the output of an `Eye` `Op`
|
|
147
|
-
eye_var =
|
|
147
|
+
eye_var = pt.eye(x_at)
|
|
148
148
|
|
|
149
149
|
# Create an PyTensor `FunctionGraph`
|
|
150
150
|
out_fg = FunctionGraph(outputs=[eye_var])
|
|
@@ -786,7 +786,7 @@ signature:
|
|
|
786
786
|
.. testcode:: asop
|
|
787
787
|
|
|
788
788
|
import pytensor
|
|
789
|
-
import pytensor.tensor as
|
|
789
|
+
import pytensor.tensor as pt
|
|
790
790
|
import numpy as np
|
|
791
791
|
from pytensor import function
|
|
792
792
|
from pytensor.compile.ops import as_op
|
|
@@ -797,8 +797,8 @@ signature:
|
|
|
797
797
|
return [ashp[:-1] + bshp[-1:]]
|
|
798
798
|
|
|
799
799
|
|
|
800
|
-
@as_op(itypes=[
|
|
801
|
-
otypes=[
|
|
800
|
+
@as_op(itypes=[pt.matrix, pt.matrix],
|
|
801
|
+
otypes=[pt.matrix], infer_shape=infer_shape_numpy_dot)
|
|
802
802
|
def numpy_dot(a, b):
|
|
803
803
|
return np.dot(a, b)
|
|
804
804
|
|
|
@@ -806,8 +806,8 @@ You can try it as follows:
|
|
|
806
806
|
|
|
807
807
|
.. testcode:: asop
|
|
808
808
|
|
|
809
|
-
x =
|
|
810
|
-
y =
|
|
809
|
+
x = pt.matrix()
|
|
810
|
+
y = pt.matrix()
|
|
811
811
|
f = function([x, y], numpy_dot(x, y))
|
|
812
812
|
inp1 = np.random.random_sample((5, 4))
|
|
813
813
|
inp2 = np.random.random_sample((4, 7))
|
|
@@ -14,8 +14,8 @@ from pytensor.tensor.type import TensorType
|
|
|
14
14
|
|
|
15
15
|
class ProdOp(Op):
|
|
16
16
|
def make_node(self, x, y):
|
|
17
|
-
x =
|
|
18
|
-
y =
|
|
17
|
+
x = pt.as_tensor_variable(x)
|
|
18
|
+
y = pt.as_tensor_variable(y)
|
|
19
19
|
outdim = x.type.ndim
|
|
20
20
|
output = TensorType(
|
|
21
21
|
dtype=pytensor.scalar.upcast(x.dtype, y.dtype), shape=(None,) * outdim
|
|
@@ -39,8 +39,8 @@ class ProdOp(Op):
|
|
|
39
39
|
|
|
40
40
|
class SumDiffOp(Op):
|
|
41
41
|
def make_node(self, x, y):
|
|
42
|
-
x =
|
|
43
|
-
y =
|
|
42
|
+
x = pt.as_tensor_variable(x)
|
|
43
|
+
y = pt.as_tensor_variable(y)
|
|
44
44
|
outdim = x.type.ndim
|
|
45
45
|
output1 = TensorType(
|
|
46
46
|
dtype=pytensor.scalar.upcast(x.dtype, y.dtype), shape=(None,) * outdim
|
|
@@ -62,20 +62,16 @@ class SumDiffOp(Op):
|
|
|
62
62
|
def grad(self, inputs, output_grads):
|
|
63
63
|
og1, og2 = output_grads
|
|
64
64
|
if og1 is None:
|
|
65
|
-
og1 =
|
|
65
|
+
og1 = pt.zeros_like(og2)
|
|
66
66
|
if og2 is None:
|
|
67
|
-
og2 =
|
|
67
|
+
og2 = pt.zeros_like(og1)
|
|
68
68
|
return [og1 + og2, og1 - og2]
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
# 3. Testing apparatus
|
|
72
|
-
|
|
73
|
-
import numpy as np
|
|
74
|
-
|
|
75
72
|
from tests import unittest_tools as utt
|
|
76
|
-
from pytensor import tensor as
|
|
73
|
+
from pytensor import tensor as pt
|
|
77
74
|
from pytensor.graph.basic import Apply
|
|
78
|
-
from pytensor.graph.op import Op
|
|
79
75
|
from pytensor.tensor.type import dmatrix, matrix
|
|
80
76
|
|
|
81
77
|
|
|
@@ -182,8 +178,8 @@ def infer_shape_numpy_dot(fgraph, node, input_shapes):
|
|
|
182
178
|
|
|
183
179
|
|
|
184
180
|
@as_op(
|
|
185
|
-
itypes=[
|
|
186
|
-
otypes=[
|
|
181
|
+
itypes=[pt.fmatrix, pt.fmatrix],
|
|
182
|
+
otypes=[pt.fmatrix],
|
|
187
183
|
infer_shape=infer_shape_numpy_dot,
|
|
188
184
|
)
|
|
189
185
|
def numpy_add(a, b):
|
|
@@ -197,8 +193,8 @@ def infer_shape_numpy_add_sub(fgraph, node, input_shapes):
|
|
|
197
193
|
|
|
198
194
|
|
|
199
195
|
@as_op(
|
|
200
|
-
itypes=[
|
|
201
|
-
otypes=[
|
|
196
|
+
itypes=[pt.fmatrix, pt.fmatrix],
|
|
197
|
+
otypes=[pt.fmatrix],
|
|
202
198
|
infer_shape=infer_shape_numpy_add_sub,
|
|
203
199
|
)
|
|
204
200
|
def numpy_add(a, b):
|
|
@@ -206,8 +202,8 @@ def numpy_add(a, b):
|
|
|
206
202
|
|
|
207
203
|
|
|
208
204
|
@as_op(
|
|
209
|
-
itypes=[
|
|
210
|
-
otypes=[
|
|
205
|
+
itypes=[pt.fmatrix, pt.fmatrix],
|
|
206
|
+
otypes=[pt.fmatrix],
|
|
211
207
|
infer_shape=infer_shape_numpy_add_sub,
|
|
212
208
|
)
|
|
213
209
|
def numpy_sub(a, b):
|
|
@@ -443,7 +443,7 @@ The following is an example that distributes dot products across additions.
|
|
|
443
443
|
.. code::
|
|
444
444
|
|
|
445
445
|
import pytensor
|
|
446
|
-
import pytensor.tensor as
|
|
446
|
+
import pytensor.tensor as pt
|
|
447
447
|
from pytensor.graph.rewriting.kanren import KanrenRelationSub
|
|
448
448
|
from pytensor.graph.rewriting.basic import EquilibriumGraphRewriter
|
|
449
449
|
from pytensor.graph.rewriting.utils import rewrite_graph
|
|
@@ -462,7 +462,7 @@ The following is an example that distributes dot products across additions.
|
|
|
462
462
|
)
|
|
463
463
|
|
|
464
464
|
# Tell `kanren` that `add` is associative
|
|
465
|
-
fact(associative,
|
|
465
|
+
fact(associative, pt.add)
|
|
466
466
|
|
|
467
467
|
|
|
468
468
|
def dot_distributeo(in_lv, out_lv):
|
|
@@ -473,13 +473,13 @@ The following is an example that distributes dot products across additions.
|
|
|
473
473
|
# Make sure the input is a `_dot`
|
|
474
474
|
eq(in_lv, etuple(_dot, A_lv, add_term_lv)),
|
|
475
475
|
# Make sure the term being `_dot`ed is an `add`
|
|
476
|
-
heado(
|
|
476
|
+
heado(pt.add, add_term_lv),
|
|
477
477
|
# Flatten the associative pairings of `add` operations
|
|
478
478
|
assoc_flatten(add_term_lv, add_flat_lv),
|
|
479
479
|
# Get the flattened `add` arguments
|
|
480
480
|
tailo(add_cdr_lv, add_flat_lv),
|
|
481
481
|
# Add all the `_dot`ed arguments and set the output
|
|
482
|
-
conso(
|
|
482
|
+
conso(pt.add, dot_cdr_lv, out_lv),
|
|
483
483
|
# Apply the `_dot` to all the flattened `add` arguments
|
|
484
484
|
mapo(lambda x, y: conso(_dot, etuple(A_lv, x), y), add_cdr_lv, dot_cdr_lv),
|
|
485
485
|
)
|
|
@@ -490,10 +490,10 @@ The following is an example that distributes dot products across additions.
|
|
|
490
490
|
|
|
491
491
|
Below, we apply `dot_distribute_rewrite` to a few example graphs. First we create simple test graph:
|
|
492
492
|
|
|
493
|
-
>>> x_at =
|
|
494
|
-
>>> y_at =
|
|
495
|
-
>>> A_at =
|
|
496
|
-
>>> test_at =
|
|
493
|
+
>>> x_at = pt.vector("x")
|
|
494
|
+
>>> y_at = pt.vector("y")
|
|
495
|
+
>>> A_at = pt.matrix("A")
|
|
496
|
+
>>> test_at = A_pt.dot(x_at + y_at)
|
|
497
497
|
>>> print(pytensor.pprint(test_at))
|
|
498
498
|
(A @ (x + y))
|
|
499
499
|
|
|
@@ -506,18 +506,18 @@ Next we apply the rewrite to the graph:
|
|
|
506
506
|
We see that the dot product has been distributed, as desired. Now, let's try a
|
|
507
507
|
few more test cases:
|
|
508
508
|
|
|
509
|
-
>>> z_at =
|
|
510
|
-
>>> w_at =
|
|
511
|
-
>>> test_at =
|
|
509
|
+
>>> z_at = pt.vector("z")
|
|
510
|
+
>>> w_at = pt.vector("w")
|
|
511
|
+
>>> test_at = A_pt.dot((x_at + y_at) + (z_at + w_at))
|
|
512
512
|
>>> print(pytensor.pprint(test_at))
|
|
513
513
|
(A @ ((x + y) + (z + w)))
|
|
514
514
|
>>> res = rewrite_graph(test_at, include=[], custom_rewrite=dot_distribute_rewrite, clone=False)
|
|
515
515
|
>>> print(pytensor.pprint(res))
|
|
516
516
|
(((A @ x) + (A @ y)) + ((A @ z) + (A @ w)))
|
|
517
517
|
|
|
518
|
-
>>> B_at =
|
|
519
|
-
>>> w_at =
|
|
520
|
-
>>> test_at =
|
|
518
|
+
>>> B_at = pt.matrix("B")
|
|
519
|
+
>>> w_at = pt.vector("w")
|
|
520
|
+
>>> test_at = A_pt.dot(x_at + (y_at + B_pt.dot(z_at + w_at)))
|
|
521
521
|
>>> print(pytensor.pprint(test_at))
|
|
522
522
|
(A @ (x + (y + ((B @ z) + (B @ w)))))
|
|
523
523
|
>>> res = rewrite_graph(test_at, include=[], custom_rewrite=dot_distribute_rewrite, clone=False)
|
|
@@ -28,10 +28,10 @@ The following illustrates these elements:
|
|
|
28
28
|
|
|
29
29
|
.. testcode::
|
|
30
30
|
|
|
31
|
-
import pytensor.tensor as
|
|
31
|
+
import pytensor.tensor as pt
|
|
32
32
|
|
|
33
|
-
x =
|
|
34
|
-
y =
|
|
33
|
+
x = pt.dmatrix('x')
|
|
34
|
+
y = pt.dmatrix('y')
|
|
35
35
|
z = x + y
|
|
36
36
|
|
|
37
37
|
**Diagram**
|
|
@@ -20,10 +20,10 @@ simple function:
|
|
|
20
20
|
|
|
21
21
|
.. code::
|
|
22
22
|
|
|
23
|
-
from pytensor import tensor as
|
|
23
|
+
from pytensor import tensor as pt
|
|
24
24
|
|
|
25
25
|
def sum_square_difference(a, b):
|
|
26
|
-
return
|
|
26
|
+
return pt.sum((a - b)**2)
|
|
27
27
|
|
|
28
28
|
Even without taking PyTensor's rewrites into account, it is likely
|
|
29
29
|
to work just as well as a custom implementation. It also supports all
|
|
@@ -98,13 +98,13 @@ Example:
|
|
|
98
98
|
.. code-block:: python
|
|
99
99
|
|
|
100
100
|
import numpy as np
|
|
101
|
-
import pytensor.tensor as
|
|
101
|
+
import pytensor.tensor as pt
|
|
102
102
|
|
|
103
103
|
|
|
104
104
|
def test_dot_validity():
|
|
105
|
-
a =
|
|
106
|
-
b =
|
|
107
|
-
c =
|
|
105
|
+
a = pt.dmatrix('a')
|
|
106
|
+
b = pt.dmatrix('b')
|
|
107
|
+
c = pt.dot(a, b)
|
|
108
108
|
|
|
109
109
|
c_fn = pytensor.function([a, b], [c])
|
|
110
110
|
|
|
@@ -187,7 +187,7 @@ symbolic variable:
|
|
|
187
187
|
|
|
188
188
|
def test_verify_exprgrad():
|
|
189
189
|
def fun(x,y,z):
|
|
190
|
-
return (x +
|
|
190
|
+
return (x + pt.cos(y)) / (4 * z)**2
|
|
191
191
|
|
|
192
192
|
x_val = np.asarray([[1], [1.1], [1.2]])
|
|
193
193
|
y_val = np.asarray([0.1, 0.2])
|
|
@@ -207,7 +207,7 @@ Here is an example showing how to use :func:`verify_grad` on an :class:`Op` inst
|
|
|
207
207
|
"""
|
|
208
208
|
a_val = np.asarray([[0,1,2],[3,4,5]], dtype='float64')
|
|
209
209
|
rng = np.random.default_rng(42)
|
|
210
|
-
pytensor.gradient.verify_grad(
|
|
210
|
+
pytensor.gradient.verify_grad(pt.Flatten(), [a_val], rng=rng)
|
|
211
211
|
|
|
212
212
|
.. note::
|
|
213
213
|
|
|
@@ -6,7 +6,7 @@ Glossary
|
|
|
6
6
|
.. testsetup::
|
|
7
7
|
|
|
8
8
|
import pytensor
|
|
9
|
-
import pytensor.tensor as
|
|
9
|
+
import pytensor.tensor as pt
|
|
10
10
|
|
|
11
11
|
.. glossary::
|
|
12
12
|
|
|
@@ -31,7 +31,7 @@ Glossary
|
|
|
31
31
|
A variable with an immutable value.
|
|
32
32
|
For example, when you type
|
|
33
33
|
|
|
34
|
-
>>> x =
|
|
34
|
+
>>> x = pt.ivector()
|
|
35
35
|
>>> y = x + 3
|
|
36
36
|
|
|
37
37
|
Then a `constant` is created to represent the ``3`` in the graph.
|
|
@@ -151,7 +151,7 @@ Glossary
|
|
|
151
151
|
The the main data structure you work with when using PyTensor.
|
|
152
152
|
For example,
|
|
153
153
|
|
|
154
|
-
>>> x =
|
|
154
|
+
>>> x = pt.ivector()
|
|
155
155
|
>>> y = -x**2
|
|
156
156
|
|
|
157
157
|
``x`` and ``y`` are both :class:`Variable`\s, i.e. instances of the :class:`Variable` class.
|
|
@@ -66,11 +66,11 @@ its features, but it illustrates concretely what PyTensor is.
|
|
|
66
66
|
.. code-block:: python
|
|
67
67
|
|
|
68
68
|
import pytensor
|
|
69
|
-
from pytensor import tensor as
|
|
69
|
+
from pytensor import tensor as pt
|
|
70
70
|
|
|
71
71
|
# declare two symbolic floating-point scalars
|
|
72
|
-
a =
|
|
73
|
-
b =
|
|
72
|
+
a = pt.dscalar()
|
|
73
|
+
b = pt.dscalar()
|
|
74
74
|
|
|
75
75
|
# create a simple expression
|
|
76
76
|
c = a + b
|
|
@@ -28,10 +28,10 @@ a cluster.
|
|
|
28
28
|
.. testcode::
|
|
29
29
|
|
|
30
30
|
import pytensor
|
|
31
|
-
from pytensor import tensor as
|
|
31
|
+
from pytensor import tensor as pt
|
|
32
32
|
from pytensor.compile.debugmode import DebugMode
|
|
33
33
|
|
|
34
|
-
x =
|
|
34
|
+
x = pt.dscalar('x')
|
|
35
35
|
|
|
36
36
|
f = pytensor.function([x], 10*x, mode='DebugMode')
|
|
37
37
|
|
|
@@ -80,10 +80,10 @@ A non-None `value` argument makes an In() instance an optional parameter
|
|
|
80
80
|
of the compiled function. For example, in the following code we are
|
|
81
81
|
defining an arity-2 function ``inc``.
|
|
82
82
|
|
|
83
|
-
>>> import pytensor.tensor as
|
|
83
|
+
>>> import pytensor.tensor as pt
|
|
84
84
|
>>> from pytensor import function
|
|
85
85
|
>>> from pytensor.compile.io import In
|
|
86
|
-
>>> u, x, s =
|
|
86
|
+
>>> u, x, s = pt.scalars('u', 'x', 's')
|
|
87
87
|
>>> inc = function([u, In(x, value=3), In(s, update=(s+x*u), value=10.0)], [])
|
|
88
88
|
|
|
89
89
|
Since we provided a ``value`` for ``s`` and ``x``, we can call it with just a value for ``u`` like this:
|
|
@@ -183,8 +183,8 @@ method to access values by indexing a Function directly by typing
|
|
|
183
183
|
To show some examples of these access methods...
|
|
184
184
|
|
|
185
185
|
|
|
186
|
-
>>> from pytensor import tensor as
|
|
187
|
-
>>> a, b, c =
|
|
186
|
+
>>> from pytensor import tensor as pt, function
|
|
187
|
+
>>> a, b, c = pt.scalars('xys') # set the internal names of graph nodes
|
|
188
188
|
>>> # Note that the name of c is 's', not 'c'!
|
|
189
189
|
>>> fn = function([a, b, ((c, c+a+b), 10.0)], [])
|
|
190
190
|
|
|
@@ -236,12 +236,12 @@ Every element of the inputs list will be upgraded to an In instance if necessary
|
|
|
236
236
|
Example:
|
|
237
237
|
|
|
238
238
|
>>> import pytensor
|
|
239
|
-
>>> from pytensor import tensor as
|
|
239
|
+
>>> from pytensor import tensor as pt
|
|
240
240
|
>>> from pytensor.compile.io import In
|
|
241
|
-
>>> x =
|
|
242
|
-
>>> y =
|
|
243
|
-
>>> z =
|
|
244
|
-
>>> w =
|
|
241
|
+
>>> x = pt.scalar()
|
|
242
|
+
>>> y = pt.scalar('y')
|
|
243
|
+
>>> z = pt.scalar('z')
|
|
244
|
+
>>> w = pt.scalar('w')
|
|
245
245
|
|
|
246
246
|
>>> fn = pytensor.function(inputs=[x, y, In(z, value=42), ((w, w+x), 0)],
|
|
247
247
|
... outputs=x + y + z)
|
|
@@ -308,7 +308,7 @@ If a list of ``Variable`` or ``Out`` instances is given as argument, then the co
|
|
|
308
308
|
|
|
309
309
|
>>> import numpy
|
|
310
310
|
>>> from pytensor.compile.io import Out
|
|
311
|
-
>>> x, y, s =
|
|
311
|
+
>>> x, y, s = pt.matrices('xys')
|
|
312
312
|
|
|
313
313
|
>>> # print a list of 2 ndarrays
|
|
314
314
|
>>> fn1 = pytensor.function([x], [x+x, Out((x+x).T, borrow=True)])
|
|
@@ -25,12 +25,12 @@ of abnormal values: NaNs, Infs, and abnormally big values.
|
|
|
25
25
|
|
|
26
26
|
import numpy as np
|
|
27
27
|
import pytensor
|
|
28
|
-
import pytensor.tensor as
|
|
28
|
+
import pytensor.tensor as pt
|
|
29
29
|
from pytensor.compile.nanguardmode import NanGuardMode
|
|
30
30
|
|
|
31
|
-
x =
|
|
31
|
+
x = pt.matrix()
|
|
32
32
|
w = pytensor.shared(np.random.standard_normal((5, 7)).astype(pytensor.config.floatX))
|
|
33
|
-
y =
|
|
33
|
+
y = pt.dot(x, w)
|
|
34
34
|
fun = pytensor.function(
|
|
35
35
|
[x], y,
|
|
36
36
|
mode=NanGuardMode(nan_is_error=True, inf_is_error=True, big_is_error=True)
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
},
|
|
71
71
|
"outputs": [],
|
|
72
72
|
"source": [
|
|
73
|
-
"import pytensor
|
|
74
|
-
"import pytensor.tensor as
|
|
73
|
+
"import pytensor\n",
|
|
74
|
+
"import pytensor.tensor as pt\n",
|
|
75
75
|
"import numpy as np"
|
|
76
76
|
]
|
|
77
77
|
},
|
|
@@ -96,16 +96,16 @@
|
|
|
96
96
|
"nhiddens = 50\n",
|
|
97
97
|
"\n",
|
|
98
98
|
"rng = np.random.RandomState(0)\n",
|
|
99
|
-
"x =
|
|
100
|
-
"wh =
|
|
101
|
-
"bh =
|
|
102
|
-
"h =
|
|
99
|
+
"x = pt.dmatrix('x')\n",
|
|
100
|
+
"wh = pytensor.shared(rng.normal(0, 1, (nfeatures, nhiddens)), borrow=True)\n",
|
|
101
|
+
"bh = pytensor.shared(np.zeros(nhiddens), borrow=True)\n",
|
|
102
|
+
"h = pt.sigmoid(pt.dot(x, wh) + bh)\n",
|
|
103
103
|
"\n",
|
|
104
|
-
"wy =
|
|
105
|
-
"by =
|
|
106
|
-
"y =
|
|
104
|
+
"wy = pytensor.shared(rng.normal(0, 1, (nhiddens, noutputs)))\n",
|
|
105
|
+
"by = pytensor.shared(np.zeros(noutputs), borrow=True)\n",
|
|
106
|
+
"y = pt.special.softmax(pt.dot(h, wy) + by)\n",
|
|
107
107
|
"\n",
|
|
108
|
-
"predict =
|
|
108
|
+
"predict = pytensor.function([x], y)"
|
|
109
109
|
]
|
|
110
110
|
},
|
|
111
111
|
{
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
},
|
|
277
277
|
"outputs": [],
|
|
278
278
|
"source": [
|
|
279
|
-
"predict_profiled =
|
|
279
|
+
"predict_profiled = pytensor.function([x], y, profile=True)\n",
|
|
280
280
|
"\n",
|
|
281
281
|
"x_val = rng.normal(0, 1, (ninputs, nfeatures))\n",
|
|
282
282
|
"y_val = predict_profiled(x_val)"
|
|
@@ -388,12 +388,12 @@
|
|
|
388
388
|
},
|
|
389
389
|
"outputs": [],
|
|
390
390
|
"source": [
|
|
391
|
-
"x, y, z =
|
|
392
|
-
"e =
|
|
393
|
-
"op =
|
|
391
|
+
"x, y, z = pt.scalars('xyz')\n",
|
|
392
|
+
"e = pt.sigmoid((x + y + z)**2)\n",
|
|
393
|
+
"op = pytensor.compile.builders.OpFromGraph([x, y, z], [e])\n",
|
|
394
394
|
"\n",
|
|
395
395
|
"e2 = op(x, y, z) + op(z, y, x)\n",
|
|
396
|
-
"f =
|
|
396
|
+
"f = pytensor.function([x, y, z], e2)"
|
|
397
397
|
]
|
|
398
398
|
},
|
|
399
399
|
{
|
|
@@ -433,13 +433,13 @@
|
|
|
433
433
|
},
|
|
434
434
|
"outputs": [],
|
|
435
435
|
"source": [
|
|
436
|
-
"x, y, z =
|
|
436
|
+
"x, y, z = pt.scalars('xyz')\n",
|
|
437
437
|
"e = x * y\n",
|
|
438
|
-
"op =
|
|
438
|
+
"op = pytensor.compile.builders.OpFromGraph([x, y], [e])\n",
|
|
439
439
|
"e2 = op(x, y) + z\n",
|
|
440
|
-
"op2 =
|
|
440
|
+
"op2 = pytensor.compile.builders.OpFromGraph([x, y, z], [e2])\n",
|
|
441
441
|
"e3 = op2(x, y, z) + z\n",
|
|
442
|
-
"f =
|
|
442
|
+
"f = pytensor.function([x, y, z], [e3])"
|
|
443
443
|
]
|
|
444
444
|
},
|
|
445
445
|
{
|
|
@@ -49,8 +49,8 @@ hidden layer and a softmax output layer.
|
|
|
49
49
|
|
|
50
50
|
.. code:: python
|
|
51
51
|
|
|
52
|
-
import pytensor
|
|
53
|
-
import pytensor.tensor as
|
|
52
|
+
import pytensor
|
|
53
|
+
import pytensor.tensor as pt
|
|
54
54
|
import numpy as np
|
|
55
55
|
|
|
56
56
|
ninputs = 1000
|
|
@@ -59,16 +59,16 @@ hidden layer and a softmax output layer.
|
|
|
59
59
|
nhiddens = 50
|
|
60
60
|
|
|
61
61
|
rng = np.random.RandomState(0)
|
|
62
|
-
x =
|
|
63
|
-
wh =
|
|
64
|
-
bh =
|
|
65
|
-
h =
|
|
62
|
+
x = pt.dmatrix('x')
|
|
63
|
+
wh = pytensor.shared(rng.normal(0, 1, (nfeatures, nhiddens)), borrow=True)
|
|
64
|
+
bh = pytensor.shared(np.zeros(nhiddens), borrow=True)
|
|
65
|
+
h = pt.sigmoid(pt.dot(x, wh) + bh)
|
|
66
66
|
|
|
67
|
-
wy =
|
|
68
|
-
by =
|
|
69
|
-
y =
|
|
67
|
+
wy = pytensor.shared(rng.normal(0, 1, (nhiddens, noutputs)))
|
|
68
|
+
by = pytensor.shared(np.zeros(noutputs), borrow=True)
|
|
69
|
+
y = pt.special.softmax(pt.dot(h, wy) + by)
|
|
70
70
|
|
|
71
|
-
predict =
|
|
71
|
+
predict = pytensor.function([x], y)
|
|
72
72
|
|
|
73
73
|
The function ``predict`` outputs the probability of 10 classes. You can
|
|
74
74
|
visualize it with :py:func:`pytensor.printing.pydotprint` as follows:
|
|
@@ -151,7 +151,7 @@ random data:
|
|
|
151
151
|
|
|
152
152
|
.. code:: python
|
|
153
153
|
|
|
154
|
-
predict_profiled =
|
|
154
|
+
predict_profiled = pytensor.function([x], y, profile=True)
|
|
155
155
|
|
|
156
156
|
x_val = rng.normal(0, 1, (ninputs, nfeatures))
|
|
157
157
|
y_val = predict_profiled(x_val)
|
|
@@ -209,12 +209,12 @@ node defines a nested graph, which will be visualized accordingly by ``d3viz``.
|
|
|
209
209
|
|
|
210
210
|
.. code:: python
|
|
211
211
|
|
|
212
|
-
x, y, z =
|
|
213
|
-
e =
|
|
214
|
-
op =
|
|
212
|
+
x, y, z = pt.scalars('xyz')
|
|
213
|
+
e = pt.sigmoid((x + y + z)**2)
|
|
214
|
+
op = pytensor.compile.builders.OpFromGraph([x, y, z], [e])
|
|
215
215
|
|
|
216
216
|
e2 = op(x, y, z) + op(z, y, x)
|
|
217
|
-
f =
|
|
217
|
+
f = pytensor.function([x, y, z], e2)
|
|
218
218
|
|
|
219
219
|
.. code:: python
|
|
220
220
|
|
|
@@ -238,13 +238,13 @@ the following example.
|
|
|
238
238
|
|
|
239
239
|
.. code:: python
|
|
240
240
|
|
|
241
|
-
x, y, z =
|
|
241
|
+
x, y, z = pt.scalars('xyz')
|
|
242
242
|
e = x * y
|
|
243
|
-
op =
|
|
243
|
+
op = pytensor.compile.builders.OpFromGraph([x, y], [e])
|
|
244
244
|
e2 = op(x, y) + z
|
|
245
|
-
op2 =
|
|
245
|
+
op2 = pytensor.compile.builders.OpFromGraph([x, y, z], [e2])
|
|
246
246
|
e3 = op2(x, y, z) + z
|
|
247
|
-
f =
|
|
247
|
+
f = pytensor.function([x, y, z], [e3])
|
|
248
248
|
|
|
249
249
|
.. code:: python
|
|
250
250
|
|
|
@@ -23,8 +23,8 @@ Intermediate values in a computation cannot be printed in
|
|
|
23
23
|
the normal python way with the print statement, because PyTensor has no *statements*.
|
|
24
24
|
Instead there is the :class:`Print` Op.
|
|
25
25
|
|
|
26
|
-
>>> from pytensor import tensor as
|
|
27
|
-
>>> x =
|
|
26
|
+
>>> from pytensor import tensor as pt, function, printing
|
|
27
|
+
>>> x = pt.dvector()
|
|
28
28
|
>>> hello_world_op = printing.Print('hello world')
|
|
29
29
|
>>> printed_x = hello_world_op(x)
|
|
30
30
|
>>> f = function([x], printed_x)
|
|
@@ -52,8 +52,8 @@ PyTensor also provides :func:`pytensor.printing.pydotprint` that creates a png i
|
|
|
52
52
|
1) The first is :func:`pytensor.pp`.
|
|
53
53
|
|
|
54
54
|
>>> from pytensor import pp, grad,
|
|
55
|
-
>>> from pytensor import tensor as
|
|
56
|
-
>>> x =
|
|
55
|
+
>>> from pytensor import tensor as pt
|
|
56
|
+
>>> x = pt.dscalar('x')
|
|
57
57
|
>>> y = x ** 2
|
|
58
58
|
>>> gy = grad(y, x)
|
|
59
59
|
>>> pp(gy) # print out the gradient prior to rewriting
|
|
@@ -62,7 +62,7 @@ PyTensor also provides :func:`pytensor.printing.pydotprint` that creates a png i
|
|
|
62
62
|
>>> pp(f.maker.fgraph.outputs[0])
|
|
63
63
|
'(TensorConstant{2.0} * x)'
|
|
64
64
|
|
|
65
|
-
The parameter in
|
|
65
|
+
The parameter in pt.dscalar('x') in the first line is the name of this variable
|
|
66
66
|
in the graph. This name is used when printing the graph to make it more readable.
|
|
67
67
|
If no name is provided the variable x is printed as its type as returned by
|
|
68
68
|
``x.type()``. In this example - ``<TensorType(float64, ())>``.
|