Skip to content

Commit 24d1f03

Browse files
committed
Update README dprint output
1 parent 98acc6a commit 24d1f03

File tree

1 file changed

+63
-63
lines changed

1 file changed

+63
-63
lines changed

README.rst

+63-63
Original file line numberDiff line numberDiff line change
@@ -22,69 +22,69 @@ Getting started
2222

2323
.. code-block:: python
2424
25-
import pytensor
26-
from pytensor import tensor as pt
27-
28-
# Declare two symbolic floating-point scalars
29-
a = pt.dscalar("a")
30-
b = pt.dscalar("b")
31-
32-
# Create a simple example expression
33-
c = a + b
34-
35-
# Convert the expression into a callable object that takes `(a, b)`
36-
# values as input and computes the value of `c`.
37-
f_c = pytensor.function([a, b], c)
38-
39-
assert f_c(1.5, 2.5) == 4.0
40-
41-
# Compute the gradient of the example expression with respect to `a`
42-
dc = pytensor.grad(c, a)
43-
44-
f_dc = pytensor.function([a, b], dc)
45-
46-
assert f_dc(1.5, 2.5) == 1.0
47-
48-
# Compiling functions with `pytensor.function` also optimizes
49-
# expression graphs by removing unnecessary operations and
50-
# replacing computations with more efficient ones.
51-
52-
v = pt.vector("v")
53-
M = pt.matrix("M")
54-
55-
d = a/a + (M + a).dot(v)
56-
57-
pytensor.dprint(d)
58-
# Elemwise{add,no_inplace} [id A] ''
59-
# |InplaceDimShuffle{x} [id B] ''
60-
# | |Elemwise{true_div,no_inplace} [id C] ''
61-
# | |a [id D]
62-
# | |a [id D]
63-
# |dot [id E] ''
64-
# |Elemwise{add,no_inplace} [id F] ''
65-
# | |M [id G]
66-
# | |InplaceDimShuffle{x,x} [id H] ''
67-
# | |a [id D]
68-
# |v [id I]
69-
70-
f_d = pytensor.function([a, v, M], d)
71-
72-
# `a/a` -> `1` and the dot product is replaced with a BLAS function
73-
# (i.e. CGemv)
74-
pytensor.dprint(f_d)
75-
# Elemwise{Add}[(0, 1)] [id A] '' 5
76-
# |TensorConstant{(1,) of 1.0} [id B]
77-
# |CGemv{inplace} [id C] '' 4
78-
# |AllocEmpty{dtype='float64'} [id D] '' 3
79-
# | |Shape_i{0} [id E] '' 2
80-
# | |M [id F]
81-
# |TensorConstant{1.0} [id G]
82-
# |Elemwise{add,no_inplace} [id H] '' 1
83-
# | |M [id F]
84-
# | |InplaceDimShuffle{x,x} [id I] '' 0
85-
# | |a [id J]
86-
# |v [id K]
87-
# |TensorConstant{0.0} [id L]
25+
import pytensor
26+
from pytensor import tensor as pt
27+
28+
# Declare two symbolic floating-point scalars
29+
a = pt.dscalar("a")
30+
b = pt.dscalar("b")
31+
32+
# Create a simple example expression
33+
c = a + b
34+
35+
# Convert the expression into a callable object that takes `(a, b)`
36+
# values as input and computes the value of `c`.
37+
f_c = pytensor.function([a, b], c)
38+
39+
assert f_c(1.5, 2.5) == 4.0
40+
41+
# Compute the gradient of the example expression with respect to `a`
42+
dc = pytensor.grad(c, a)
43+
44+
f_dc = pytensor.function([a, b], dc)
45+
46+
assert f_dc(1.5, 2.5) == 1.0
47+
48+
# Compiling functions with `pytensor.function` also optimizes
49+
# expression graphs by removing unnecessary operations and
50+
# replacing computations with more efficient ones.
51+
52+
v = pt.vector("v")
53+
M = pt.matrix("M")
54+
55+
d = a/a + (M + a).dot(v)
56+
57+
pytensor.dprint(d)
58+
# Add [id A]
59+
# ├─ ExpandDims{axis=0} [id B]
60+
# │ └─ True_div [id C]
61+
# ├─ a [id D]
62+
# └─ a [id D]
63+
# └─ dot [id E]
64+
# ├─ Add [id F]
65+
# │ ├─ M [id G]
66+
# │ └─ ExpandDims{axes=[0, 1]} [id H]
67+
# │ └─ a [id D]
68+
# └─ v [id I]
69+
70+
f_d = pytensor.function([a, v, M], d)
71+
72+
# `a/a` -> `1` and the dot product is replaced with a BLAS function
73+
# (i.e. CGemv)
74+
pytensor.dprint(f_d)
75+
# Add [id A] 5
76+
# ├─ [1.] [id B]
77+
# └─ CGemv{inplace} [id C] 4
78+
# ├─ AllocEmpty{dtype='float64'} [id D] 3
79+
# │ └─ Shape_i{0} [id E] 2
80+
# │ └─ M [id F]
81+
# ├─ 1.0 [id G]
82+
# ├─ Add [id H] 1
83+
# │ ├─ M [id F]
84+
# │ └─ ExpandDims{axes=[0, 1]} [id I] 0
85+
# │ └─ a [id J]
86+
# ├─ v [id K]
87+
# └─ 0.0 [id L]
8888
8989
See `the PyTensor documentation <https://pytensor.readthedocs.io/en/latest/>`__ for in-depth tutorials.
9090

0 commit comments

Comments
 (0)