tensor-sensor

Форк
0
/
demo.ipynb 
1632 строки · 117.5 Кб
1
{
2
 "cells": [
3
  {
4
   "cell_type": "markdown",
5
   "id": "f3e2c8ee-c34d-4a47-8212-fc7871a74cc3",
6
   "metadata": {},
7
   "source": [
8
    "# Talk demo intro"
9
   ]
10
  },
11
  {
12
   "cell_type": "code",
13
   "execution_count": 1,
14
   "id": "4d46818c-204e-426c-b22f-6c2e7a651ca1",
15
   "metadata": {},
16
   "outputs": [],
17
   "source": [
18
    "! pip install -q torch\n",
19
    "! pip install -q tensor-sensor"
20
   ]
21
  },
22
  {
23
   "cell_type": "markdown",
24
   "id": "e672e0c2-b516-492c-9616-781db12f9397",
25
   "metadata": {},
26
   "source": [
27
    "## Simulated GRU matrix algebra with dimension issue"
28
   ]
29
  },
30
  {
31
   "cell_type": "code",
32
   "execution_count": 1,
33
   "id": "43b79890-6f82-4261-b834-0b53f46d518d",
34
   "metadata": {},
35
   "outputs": [
36
    {
37
     "ename": "RuntimeError",
38
     "evalue": "mat1 and mat2 shapes cannot be multiplied (764x256 and 764x200)",
39
     "output_type": "error",
40
     "traceback": [
41
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
42
      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
43
      "\u001b[0;32m<ipython-input-1-df89bdeb6ec1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     14\u001b[0m \u001b[0;31m# Following code raises an exception\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtanh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mWhh\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mUxh\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mbh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
44
      "\u001b[0;31mRuntimeError\u001b[0m: mat1 and mat2 shapes cannot be multiplied (764x256 and 764x200)"
45
     ]
46
    }
47
   ],
48
   "source": [
49
    "import torch\n",
50
    "\n",
51
    "n = 200         # number of instances\n",
52
    "d = 764         # number of instance features\n",
53
    "nhidden = 256\n",
54
    "\n",
55
    "Whh = torch.eye(nhidden, nhidden)   # Identity matrix\n",
56
    "Uxh = torch.randn(d, nhidden)\n",
57
    "bh  = torch.zeros(nhidden, 1)\n",
58
    "h = torch.randn(nhidden, 1)         # fake previous hidden state h\n",
59
    "r = torch.randn(nhidden, 1)         # fake this computation\n",
60
    "X = torch.rand(n,d)                 # fake input\n",
61
    "\n",
62
    "# Following code raises an exception\n",
63
    "h = torch.tanh(Whh @ (r*h) + Uxh @ X.T + bh)"
64
   ]
65
  },
66
  {
67
   "cell_type": "markdown",
68
   "id": "208a643d-2a07-40ce-9060-1ab5a80286fa",
69
   "metadata": {},
70
   "source": [
71
    "## TensorSensor traps, clarifies, and visualizes issues"
72
   ]
73
  },
74
  {
75
   "cell_type": "code",
76
   "execution_count": 3,
77
   "id": "83dbfd70-c784-44c5-a023-8ffa1c7f18df",
78
   "metadata": {},
79
   "outputs": [
80
    {
81
     "data": {
82
      "image/svg+xml": [
83
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" height=\"45.995716pt\" version=\"1.1\" viewBox=\"0 0 294.852769 45.995716\" width=\"294.852769pt\">\n",
84
       " <metadata>\n",
85
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
86
       "   <cc:Work>\n",
87
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
88
       "    <dc:date>2021-09-29T16:50:29.562933</dc:date>\n",
89
       "    <dc:format>image/svg+xml</dc:format>\n",
90
       "    <dc:creator>\n",
91
       "     <cc:Agent>\n",
92
       "      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n",
93
       "     </cc:Agent>\n",
94
       "    </dc:creator>\n",
95
       "   </cc:Work>\n",
96
       "  </rdf:RDF>\n",
97
       " </metadata>\n",
98
       " <defs>\n",
99
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
100
       " </defs>\n",
101
       " <g id=\"figure_1\">\n",
102
       "  <g id=\"patch_1\">\n",
103
       "   <path d=\"M 0 45.995716  L 294.852769 45.995716  L 294.852769 0  L 0 0  z \" style=\"fill:none;\"/>\n",
104
       "  </g>\n",
105
       "  <g id=\"axes_1\">\n",
106
       "   <g id=\"patch_2\">\n",
107
       "    <path clip-path=\"url(#p2cf69eb1e8)\" d=\"M 194.67225 45.180316  L 217.52235 45.180316  L 217.52235 22.919896  L 194.67225 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
108
       "   </g>\n",
109
       "   <g id=\"patch_3\">\n",
110
       "    <path clip-path=\"url(#p2cf69eb1e8)\" d=\"M 233.84385 45.180316  L 256.69395 45.180316  L 256.69395 22.919896  L 233.84385 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
111
       "   </g>\n",
112
       "   <g id=\"line2d_1\">\n",
113
       "    <path clip-path=\"url(#p2cf69eb1e8)\" d=\"M 195.65154 13.192653  L 216.54306 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
114
       "   </g>\n",
115
       "   <g id=\"line2d_2\">\n",
116
       "    <path clip-path=\"url(#p2cf69eb1e8)\" d=\"M 234.82314 13.192653  L 255.71466 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
117
       "   </g>\n",
118
       "   <g id=\"text_1\">\n",
119
       "    <!-- h -->\n",
120
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(6.975 9.451406)scale(0.13 -0.13)\">\n",
121
       "     <defs>\n",
122
       "      <path d=\"M 47.21875 0  L 38.71875 0  L 38.71875 31.296875  Q 38.71875 36.96875 36.59375 39.765625  Q 34.46875 42.578125 30.515625 42.578125  Q 28.8125 42.578125 27.3125 42.109375  Q 25.828125 41.65625 24.21875 40.5  Q 22.609375 39.359375 20.703125 37.40625  Q 18.796875 35.453125 16.3125 32.515625  L 16.3125 0  L 7.8125 0  L 7.8125 69  L 16.3125 69  L 16.3125 49.03125  L 16.015625 41.3125  Q 18.015625 43.703125 19.9375 45.328125  Q 21.875 46.96875 23.796875 48  Q 25.734375 49.03125 27.734375 49.46875  Q 29.734375 49.90625 31.890625 49.90625  Q 39.203125 49.90625 43.203125 45.4375  Q 47.21875 40.96875 47.21875 31.984375  z \" id=\"Consolas-104\"/>\n",
123
       "     </defs>\n",
124
       "     <use xlink:href=\"#Consolas-104\"/>\n",
125
       "    </g>\n",
126
       "   </g>\n",
127
       "   <g id=\"text_2\">\n",
128
       "    <!--   -->\n",
129
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(13.5036 9.451406)scale(0.13 -0.13)\">\n",
130
       "     <defs>\n",
131
       "      <path id=\"Consolas-32\"/>\n",
132
       "     </defs>\n",
133
       "     <use xlink:href=\"#Consolas-32\"/>\n",
134
       "    </g>\n",
135
       "   </g>\n",
136
       "   <g id=\"text_3\">\n",
137
       "    <!-- = -->\n",
138
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(20.0322 9.451406)scale(0.13 -0.13)\">\n",
139
       "     <defs>\n",
140
       "      <path d=\"M 48.484375 31.546875  L 6.5 31.546875  L 6.5 38.71875  L 48.484375 38.71875  z M 48.484375 14.546875  L 6.5 14.546875  L 6.5 21.734375  L 48.484375 21.734375  z \" id=\"Consolas-61\"/>\n",
141
       "     </defs>\n",
142
       "     <use xlink:href=\"#Consolas-61\"/>\n",
143
       "    </g>\n",
144
       "   </g>\n",
145
       "   <g id=\"text_4\">\n",
146
       "    <!--   -->\n",
147
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(26.5608 9.451406)scale(0.13 -0.13)\">\n",
148
       "     <use xlink:href=\"#Consolas-32\"/>\n",
149
       "    </g>\n",
150
       "   </g>\n",
151
       "   <g id=\"text_5\">\n",
152
       "    <!-- t -->\n",
153
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(33.0894 9.451406)scale(0.13 -0.13)\">\n",
154
       "     <defs>\n",
155
       "      <path d=\"M 47.3125 0.6875  Q 44.4375 -0.046875 41.359375 -0.359375  Q 38.28125 -0.6875 35.109375 -0.6875  Q 25.875 -0.6875 21.328125 3.484375  Q 16.796875 7.671875 16.796875 16.3125  L 16.796875 41.890625  L 3.078125 41.890625  L 3.078125 49.03125  L 16.796875 49.03125  L 16.796875 62.5  L 25.296875 64.703125  L 25.296875 49.03125  L 47.3125 49.03125  L 47.3125 41.890625  L 25.296875 41.890625  L 25.296875 17  Q 25.296875 11.71875 28.09375 9.109375  Q 30.90625 6.5 36.375 6.5  Q 38.71875 6.5 41.5 6.859375  Q 44.28125 7.234375 47.3125 8.015625  z \" id=\"Consolas-116\"/>\n",
156
       "     </defs>\n",
157
       "     <use xlink:href=\"#Consolas-116\"/>\n",
158
       "    </g>\n",
159
       "   </g>\n",
160
       "   <g id=\"text_6\">\n",
161
       "    <!-- o -->\n",
162
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(39.618 9.451406)scale(0.13 -0.13)\">\n",
163
       "     <defs>\n",
164
       "      <path d=\"M 50.484375 24.90625  Q 50.484375 19.1875 48.875 14.421875  Q 47.265625 9.671875 44.234375 6.265625  Q 41.21875 2.875 36.859375 1  Q 32.515625 -0.875 27 -0.875  Q 21.734375 -0.875 17.546875 0.75  Q 13.375 2.390625 10.46875 5.5625  Q 7.5625 8.734375 6.03125 13.421875  Q 4.5 18.109375 4.5 24.21875  Q 4.5 29.9375 6.109375 34.640625  Q 7.71875 39.359375 10.734375 42.75  Q 13.765625 46.140625 18.109375 48.015625  Q 22.46875 49.90625 27.984375 49.90625  Q 33.25 49.90625 37.421875 48.265625  Q 41.609375 46.625 44.5 43.46875  Q 47.40625 40.328125 48.9375 35.640625  Q 50.484375 30.953125 50.484375 24.90625  z M 41.796875 24.515625  Q 41.796875 29.046875 40.796875 32.4375  Q 39.796875 35.84375 37.9375 38.109375  Q 36.078125 40.375 33.421875 41.515625  Q 30.765625 42.671875 27.484375 42.671875  Q 23.6875 42.671875 20.96875 41.1875  Q 18.265625 39.703125 16.53125 37.203125  Q 14.796875 34.71875 13.984375 31.421875  Q 13.1875 28.125 13.1875 24.515625  Q 13.1875 19.96875 14.1875 16.546875  Q 15.1875 13.140625 17.03125 10.859375  Q 18.890625 8.59375 21.53125 7.4375  Q 24.171875 6.296875 27.484375 6.296875  Q 31.296875 6.296875 34 7.78125  Q 36.71875 9.28125 38.453125 11.765625  Q 40.1875 14.265625 40.984375 17.546875  Q 41.796875 20.84375 41.796875 24.515625  z \" id=\"Consolas-111\"/>\n",
165
       "     </defs>\n",
166
       "     <use xlink:href=\"#Consolas-111\"/>\n",
167
       "    </g>\n",
168
       "   </g>\n",
169
       "   <g id=\"text_7\">\n",
170
       "    <!-- r -->\n",
171
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(46.1466 9.451406)scale(0.13 -0.13)\">\n",
172
       "     <defs>\n",
173
       "      <path d=\"M 9.8125 49.03125  L 17.578125 49.03125  L 17.828125 39.984375  Q 22.171875 45.21875 26.390625 47.5625  Q 30.609375 49.90625 34.90625 49.90625  Q 42.53125 49.90625 46.453125 44.96875  Q 50.390625 40.046875 50.09375 30.328125  L 41.5 30.328125  Q 41.65625 36.765625 39.625 39.671875  Q 37.59375 42.578125 33.6875 42.578125  Q 31.984375 42.578125 30.25 41.96875  Q 28.515625 41.359375 26.6875 40.015625  Q 24.859375 38.671875 22.796875 36.5625  Q 20.75 34.46875 18.40625 31.5  L 18.40625 0  L 9.8125 0  z \" id=\"Consolas-114\"/>\n",
174
       "     </defs>\n",
175
       "     <use xlink:href=\"#Consolas-114\"/>\n",
176
       "    </g>\n",
177
       "   </g>\n",
178
       "   <g id=\"text_8\">\n",
179
       "    <!-- c -->\n",
180
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(52.6752 9.451406)scale(0.13 -0.13)\">\n",
181
       "     <defs>\n",
182
       "      <path d=\"M 45.90625 1.8125  Q 42.578125 0.53125 39.078125 -0.078125  Q 35.59375 -0.6875 31.890625 -0.6875  Q 20.265625 -0.6875 13.984375 5.609375  Q 7.71875 11.921875 7.71875 24.03125  Q 7.71875 29.828125 9.515625 34.5625  Q 11.328125 39.3125 14.59375 42.671875  Q 17.875 46.046875 22.40625 47.875  Q 26.953125 49.703125 32.421875 49.703125  Q 36.234375 49.703125 39.546875 49.171875  Q 42.875 48.640625 45.90625 47.40625  L 45.90625 39.3125  Q 42.71875 40.96875 39.421875 41.71875  Q 36.140625 42.484375 32.625 42.484375  Q 29.34375 42.484375 26.4375 41.234375  Q 23.53125 39.984375 21.328125 37.640625  Q 19.140625 35.296875 17.875 31.921875  Q 16.609375 28.5625 16.609375 24.3125  Q 16.609375 15.4375 20.921875 11.015625  Q 25.25 6.59375 32.90625 6.59375  Q 36.375 6.59375 39.625 7.375  Q 42.875 8.15625 45.90625 9.71875  z \" id=\"Consolas-99\"/>\n",
183
       "     </defs>\n",
184
       "     <use xlink:href=\"#Consolas-99\"/>\n",
185
       "    </g>\n",
186
       "   </g>\n",
187
       "   <g id=\"text_9\">\n",
188
       "    <!-- h -->\n",
189
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(59.2038 9.451406)scale(0.13 -0.13)\">\n",
190
       "     <use xlink:href=\"#Consolas-104\"/>\n",
191
       "    </g>\n",
192
       "   </g>\n",
193
       "   <g id=\"text_10\">\n",
194
       "    <!-- . -->\n",
195
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(65.7324 9.451406)scale(0.13 -0.13)\">\n",
196
       "     <defs>\n",
197
       "      <path d=\"M 27.09375 15.375  Q 28.765625 15.375 30.25 14.734375  Q 31.734375 14.109375 32.828125 12.984375  Q 33.9375 11.859375 34.5625 10.375  Q 35.203125 8.890625 35.203125 7.171875  Q 35.203125 5.515625 34.5625 4.046875  Q 33.9375 2.59375 32.828125 1.484375  Q 31.734375 0.390625 30.25 -0.234375  Q 28.765625 -0.875 27.09375 -0.875  Q 25.390625 -0.875 23.921875 -0.234375  Q 22.46875 0.390625 21.359375 1.484375  Q 20.265625 2.59375 19.625 4.046875  Q 19 5.515625 19 7.171875  Q 19 8.890625 19.625 10.375  Q 20.265625 11.859375 21.359375 12.984375  Q 22.46875 14.109375 23.921875 14.734375  Q 25.390625 15.375 27.09375 15.375  z \" id=\"Consolas-46\"/>\n",
198
       "     </defs>\n",
199
       "     <use xlink:href=\"#Consolas-46\"/>\n",
200
       "    </g>\n",
201
       "   </g>\n",
202
       "   <g id=\"text_11\">\n",
203
       "    <!-- t -->\n",
204
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(72.261 9.451406)scale(0.13 -0.13)\">\n",
205
       "     <use xlink:href=\"#Consolas-116\"/>\n",
206
       "    </g>\n",
207
       "   </g>\n",
208
       "   <g id=\"text_12\">\n",
209
       "    <!-- a -->\n",
210
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(78.7896 9.451406)scale(0.13 -0.13)\">\n",
211
       "     <defs>\n",
212
       "      <path d=\"M 39.3125 0  L 39.109375 6.59375  Q 35.109375 2.640625 30.984375 0.875  Q 26.859375 -0.875 22.3125 -0.875  Q 18.109375 -0.875 15.125 0.1875  Q 12.15625 1.265625 10.21875 3.140625  Q 8.296875 5.03125 7.390625 7.5625  Q 6.5 10.109375 6.5 13.09375  Q 6.5 20.453125 11.984375 24.625  Q 17.484375 28.8125 28.21875 28.8125  L 38.375 28.8125  L 38.375 33.109375  Q 38.375 37.453125 35.59375 40.0625  Q 32.8125 42.671875 27.09375 42.671875  Q 22.953125 42.671875 18.921875 41.75  Q 14.890625 40.828125 10.59375 39.109375  L 10.59375 46.78125  Q 12.203125 47.359375 14.171875 47.921875  Q 16.15625 48.484375 18.359375 48.921875  Q 20.5625 49.359375 22.953125 49.625  Q 25.34375 49.90625 27.78125 49.90625  Q 32.234375 49.90625 35.796875 48.921875  Q 39.359375 47.953125 41.8125 45.953125  Q 44.28125 43.953125 45.59375 40.921875  Q 46.921875 37.890625 46.921875 33.796875  L 46.921875 0  z M 38.375 22.3125  L 27.59375 22.3125  Q 24.421875 22.3125 22.125 21.671875  Q 19.828125 21.046875 18.359375 19.875  Q 16.890625 18.703125 16.1875 17.0625  Q 15.484375 15.4375 15.484375 13.375  Q 15.484375 11.96875 15.921875 10.671875  Q 16.359375 9.375 17.328125 8.375  Q 18.3125 7.375 19.875 6.78125  Q 21.4375 6.203125 23.6875 6.203125  Q 26.609375 6.203125 30.390625 7.984375  Q 34.1875 9.765625 38.375 13.625  z \" id=\"Consolas-97\"/>\n",
213
       "     </defs>\n",
214
       "     <use xlink:href=\"#Consolas-97\"/>\n",
215
       "    </g>\n",
216
       "   </g>\n",
217
       "   <g id=\"text_13\">\n",
218
       "    <!-- n -->\n",
219
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(85.3182 9.451406)scale(0.13 -0.13)\">\n",
220
       "     <defs>\n",
221
       "      <path d=\"M 7.8125 49.03125  L 15.375 49.03125  L 15.71875 41.109375  Q 17.875 43.65625 19.875 45.328125  Q 21.875 47.015625 23.796875 48.046875  Q 25.734375 49.078125 27.734375 49.484375  Q 29.734375 49.90625 31.890625 49.90625  Q 39.453125 49.90625 43.328125 45.4375  Q 47.21875 40.96875 47.21875 31.984375  L 47.21875 0  L 38.71875 0  L 38.71875 31.296875  Q 38.71875 37.0625 36.5625 39.8125  Q 34.421875 42.578125 30.171875 42.578125  Q 28.609375 42.578125 27.125 42.109375  Q 25.640625 41.65625 24.015625 40.5  Q 22.40625 39.359375 20.53125 37.40625  Q 18.65625 35.453125 16.3125 32.515625  L 16.3125 0  L 7.8125 0  z \" id=\"Consolas-110\"/>\n",
222
       "     </defs>\n",
223
       "     <use xlink:href=\"#Consolas-110\"/>\n",
224
       "    </g>\n",
225
       "   </g>\n",
226
       "   <g id=\"text_14\">\n",
227
       "    <!-- h -->\n",
228
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(91.8468 9.451406)scale(0.13 -0.13)\">\n",
229
       "     <use xlink:href=\"#Consolas-104\"/>\n",
230
       "    </g>\n",
231
       "   </g>\n",
232
       "   <g id=\"text_15\">\n",
233
       "    <!-- ( -->\n",
234
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(98.3754 9.451406)scale(0.13 -0.13)\">\n",
235
       "     <defs>\n",
236
       "      <path d=\"M 37.15625 -20.515625  Q 14.65625 0.34375 14.65625 25.59375  Q 14.65625 31.5 15.84375 37.375  Q 17.046875 43.265625 19.703125 49.171875  Q 22.359375 55.078125 26.734375 60.984375  Q 31.109375 66.890625 37.359375 72.703125  L 42.28125 67.671875  Q 23.34375 48.96875 23.34375 26.21875  Q 23.34375 14.890625 28.125 4.4375  Q 32.90625 -6 42.28125 -15.28125  z \" id=\"Consolas-40\"/>\n",
237
       "     </defs>\n",
238
       "     <use xlink:href=\"#Consolas-40\"/>\n",
239
       "    </g>\n",
240
       "   </g>\n",
241
       "   <g id=\"text_16\">\n",
242
       "    <!-- W -->\n",
243
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(104.904 9.451406)scale(0.13 -0.13)\">\n",
244
       "     <defs>\n",
245
       "      <path d=\"M 52.78125 63.8125  L 48.484375 0  L 37.203125 0  L 29.296875 22.703125  L 27.09375 29.984375  L 24.8125 22.125  L 17.484375 0  L 6.59375 0  L 2.203125 63.8125  L 10.40625 63.8125  L 12.890625 20.40625  L 13.625 8.5  L 16.703125 18.609375  L 24.421875 42.28125  L 30.421875 42.28125  L 39.3125 16.890625  L 42.28125 8.5  L 42.484375 17.28125  L 45.015625 63.8125  z \" id=\"Consolas-87\"/>\n",
246
       "     </defs>\n",
247
       "     <use xlink:href=\"#Consolas-87\"/>\n",
248
       "    </g>\n",
249
       "   </g>\n",
250
       "   <g id=\"text_17\">\n",
251
       "    <!-- h -->\n",
252
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(111.4326 9.451406)scale(0.13 -0.13)\">\n",
253
       "     <use xlink:href=\"#Consolas-104\"/>\n",
254
       "    </g>\n",
255
       "   </g>\n",
256
       "   <g id=\"text_18\">\n",
257
       "    <!-- h -->\n",
258
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(117.9612 9.451406)scale(0.13 -0.13)\">\n",
259
       "     <use xlink:href=\"#Consolas-104\"/>\n",
260
       "    </g>\n",
261
       "   </g>\n",
262
       "   <g id=\"text_19\">\n",
263
       "    <!--   -->\n",
264
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(124.4898 9.451406)scale(0.13 -0.13)\">\n",
265
       "     <use xlink:href=\"#Consolas-32\"/>\n",
266
       "    </g>\n",
267
       "   </g>\n",
268
       "   <g id=\"text_20\">\n",
269
       "    <!-- @ -->\n",
270
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(131.0184 9.451406)scale(0.13 -0.13)\">\n",
271
       "     <defs>\n",
272
       "      <path d=\"M 38.09375 19.921875  Q 37.640625 16.796875 37.59375 14.75  Q 37.546875 12.703125 37.859375 11.53125  Q 38.1875 10.359375 38.859375 9.890625  Q 39.546875 9.421875 40.578125 9.421875  Q 41.9375 9.421875 43.15625 10.859375  Q 44.390625 12.3125 45.34375 15.3125  Q 46.296875 18.3125 46.84375 22.890625  Q 47.40625 27.484375 47.40625 33.796875  Q 47.40625 40.828125 46.53125 46.34375  Q 45.65625 51.859375 43.75 55.71875  Q 41.84375 59.578125 38.796875 61.59375  Q 35.75 63.625 31.390625 63.625  Q 28.078125 63.625 24.96875 61.9375  Q 21.875 60.25 19.203125 57.203125  Q 16.546875 54.15625 14.375 49.875  Q 12.203125 45.609375 10.65625 40.421875  Q 9.125 35.25 8.265625 29.296875  Q 7.421875 23.34375 7.421875 16.890625  Q 7.421875 1.171875 12.15625 -6.5625  Q 16.890625 -14.3125 25.484375 -14.3125  Q 29.828125 -14.3125 33.59375 -13.3125  Q 37.359375 -12.3125 41.40625 -10.296875  L 41.40625 -16.609375  Q 37.40625 -18.453125 33.390625 -19.375  Q 29.390625 -20.3125 25 -20.3125  Q 12.546875 -20.3125 6.5625 -10.984375  Q 0.59375 -1.65625 0.484375 16.796875  Q 0.4375 24.171875 1.453125 30.9375  Q 2.484375 37.703125 4.40625 43.5625  Q 6.34375 49.421875 9.09375 54.21875  Q 11.859375 59.03125 15.34375 62.421875  Q 18.84375 65.828125 22.9375 67.703125  Q 27.046875 69.578125 31.6875 69.578125  Q 37.5 69.578125 41.765625 67.203125  Q 46.046875 64.84375 48.828125 60.375  Q 51.609375 55.90625 52.953125 49.40625  Q 54.296875 42.921875 54.296875 34.625  Q 54.25 26.21875 53.203125 20.234375  Q 52.15625 14.265625 50.25 10.453125  Q 48.34375 6.640625 45.625 4.859375  Q 42.921875 3.078125 39.59375 3.078125  Q 35.796875 3.078125 33.9375 5.03125  Q 32.078125 6.984375 32.078125 10.296875  Q 30.21875 6.546875 28.0625 4.8125  Q 25.921875 3.078125 22.90625 3.078125  Q 18.3125 3.078125 16.015625 6.515625  Q 13.71875 9.96875 13.71875 17.390625  Q 13.71875 20.0625 14.03125 23.140625  Q 14.359375 26.21875 15.109375 29.3125  Q 15.875 32.421875 17.09375 35.28125  Q 18.3125 38.140625 20.09375 40.3125  Q 21.875 42.484375 24.3125 43.796875  Q 26.765625 45.125 29.890625 45.125  Q 31.734375 45.125 33.34375 44.671875  Q 34.96875 44.234375 35.6875 43.796875  L 42 45.3125  z M 33.109375 37.3125  Q 32.671875 37.890625 31.765625 38.34375  Q 30.859375 38.8125 29.5 38.8125  Q 28.03125 38.8125 26.859375 37.78125  Q 25.6875 36.765625 24.78125 35.046875  Q 23.875 33.34375 23.265625 31.171875  Q 22.65625 29 22.234375 26.703125  Q 21.828125 24.421875 21.65625 22.1875  Q 21.484375 19.96875 21.484375 18.21875  Q 21.484375 13.53125 22.0625 11.46875  Q 22.65625 9.421875 24.3125 9.421875  Q 24.90625 9.421875 25.484375 9.65625  Q 26.078125 9.90625 26.734375 10.609375  Q 27.390625 11.328125 28.171875 12.59375  Q 28.953125 13.875 29.890625 15.921875  z \" id=\"Consolas-64\"/>\n",
273
       "     </defs>\n",
274
       "     <use xlink:href=\"#Consolas-64\"/>\n",
275
       "    </g>\n",
276
       "   </g>\n",
277
       "   <g id=\"text_21\">\n",
278
       "    <!--   -->\n",
279
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(137.547 9.451406)scale(0.13 -0.13)\">\n",
280
       "     <use xlink:href=\"#Consolas-32\"/>\n",
281
       "    </g>\n",
282
       "   </g>\n",
283
       "   <g id=\"text_22\">\n",
284
       "    <!-- ( -->\n",
285
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(144.0756 9.451406)scale(0.13 -0.13)\">\n",
286
       "     <use xlink:href=\"#Consolas-40\"/>\n",
287
       "    </g>\n",
288
       "   </g>\n",
289
       "   <g id=\"text_23\">\n",
290
       "    <!-- r -->\n",
291
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(150.6042 9.451406)scale(0.13 -0.13)\">\n",
292
       "     <use xlink:href=\"#Consolas-114\"/>\n",
293
       "    </g>\n",
294
       "   </g>\n",
295
       "   <g id=\"text_24\">\n",
296
       "    <!-- * -->\n",
297
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(157.1328 9.451406)scale(0.13 -0.13)\">\n",
298
       "     <defs>\n",
299
       "      <path d=\"M 46.921875 41.015625  L 43.609375 35.203125  L 29.890625 44.28125  L 31 27.59375  L 24.03125 27.59375  L 25.09375 44.28125  L 11.078125 35.203125  L 8.015625 40.921875  L 23 48.296875  L 8.015625 55.8125  L 11.375 61.53125  L 25.203125 52.296875  L 24.03125 69  L 31 69  L 29.78125 52.296875  L 43.609375 61.625  L 47.015625 55.609375  L 31.984375 48.1875  z \" id=\"Consolas-42\"/>\n",
300
       "     </defs>\n",
301
       "     <use xlink:href=\"#Consolas-42\"/>\n",
302
       "    </g>\n",
303
       "   </g>\n",
304
       "   <g id=\"text_25\">\n",
305
       "    <!-- h -->\n",
306
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(163.6614 9.451406)scale(0.13 -0.13)\">\n",
307
       "     <use xlink:href=\"#Consolas-104\"/>\n",
308
       "    </g>\n",
309
       "   </g>\n",
310
       "   <g id=\"text_26\">\n",
311
       "    <!-- ) -->\n",
312
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(170.19 9.451406)scale(0.13 -0.13)\">\n",
313
       "     <defs>\n",
314
       "      <path d=\"M 17.828125 72.703125  Q 40.328125 51.859375 40.328125 26.3125  Q 40.328125 21.046875 39.25 15.375  Q 38.1875 9.71875 35.59375 3.78125  Q 33.015625 -2.15625 28.640625 -8.25  Q 24.265625 -14.359375 17.625 -20.515625  L 12.703125 -15.484375  Q 22.21875 -6.0625 26.90625 4.1875  Q 31.59375 14.453125 31.59375 25.6875  Q 31.59375 48.921875 12.703125 67.484375  z \" id=\"Consolas-41\"/>\n",
315
       "     </defs>\n",
316
       "     <use xlink:href=\"#Consolas-41\"/>\n",
317
       "    </g>\n",
318
       "   </g>\n",
319
       "   <g id=\"text_27\">\n",
320
       "    <!--   -->\n",
321
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(176.7186 9.451406)scale(0.13 -0.13)\">\n",
322
       "     <use xlink:href=\"#Consolas-32\"/>\n",
323
       "    </g>\n",
324
       "   </g>\n",
325
       "   <g id=\"text_28\">\n",
326
       "    <!-- + -->\n",
327
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(183.2472 9.451406)scale(0.13 -0.13)\">\n",
328
       "     <defs>\n",
329
       "      <path d=\"M 50.875 22.90625  L 31.6875 22.90625  L 31.6875 2.984375  L 23.296875 2.984375  L 23.296875 22.90625  L 4.109375 22.90625  L 4.109375 30.328125  L 23.296875 30.328125  L 23.296875 50.09375  L 31.6875 50.09375  L 31.6875 30.328125  L 50.875 30.328125  z \" id=\"Consolas-43\"/>\n",
330
       "     </defs>\n",
331
       "     <use xlink:href=\"#Consolas-43\"/>\n",
332
       "    </g>\n",
333
       "   </g>\n",
334
       "   <g id=\"text_29\">\n",
335
       "    <!--   -->\n",
336
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(189.7758 9.451406)scale(0.13 -0.13)\">\n",
337
       "     <use xlink:href=\"#Consolas-32\"/>\n",
338
       "    </g>\n",
339
       "   </g>\n",
340
       "   <g id=\"text_30\">\n",
341
       "    <!-- U -->\n",
342
       "    <g style=\"fill:#444443;\" transform=\"translate(196.3044 9.451406)scale(0.13 -0.13)\">\n",
343
       "     <defs>\n",
344
       "      <path d=\"M 49.703125 22.21875  Q 49.703125 16.9375 48.21875 12.671875  Q 46.734375 8.40625 43.84375 5.390625  Q 40.96875 2.390625 36.796875 0.75  Q 32.625 -0.875 27.203125 -0.875  Q 21.234375 -0.875 17.078125 0.6875  Q 12.9375 2.25 10.328125 5.09375  Q 7.71875 7.953125 6.515625 11.953125  Q 5.328125 15.96875 5.328125 20.90625  L 5.328125 63.8125  L 14.015625 63.8125  L 14.015625 21.578125  Q 14.015625 17.828125 14.71875 14.984375  Q 15.4375 12.15625 17.046875 10.25  Q 18.65625 8.34375 21.21875 7.359375  Q 23.78125 6.390625 27.484375 6.390625  Q 34.421875 6.390625 37.71875 10.390625  Q 41.015625 14.40625 41.015625 21.6875  L 41.015625 63.8125  L 49.703125 63.8125  z \" id=\"Consolas-85\"/>\n",
345
       "     </defs>\n",
346
       "     <use xlink:href=\"#Consolas-85\"/>\n",
347
       "    </g>\n",
348
       "   </g>\n",
349
       "   <g id=\"text_31\">\n",
350
       "    <!-- x -->\n",
351
       "    <g style=\"fill:#444443;\" transform=\"translate(202.833 9.451406)scale(0.13 -0.13)\">\n",
352
       "     <defs>\n",
353
       "      <path d=\"M 52 0  L 40.71875 0  L 27.484375 18.703125  L 14.40625 0  L 3.421875 0  L 22.40625 24.609375  L 4.296875 49.03125  L 15.1875 49.03125  L 28.078125 30.171875  L 40.71875 49.03125  L 51.21875 49.03125  L 32.8125 24.421875  z \" id=\"Consolas-120\"/>\n",
354
       "     </defs>\n",
355
       "     <use xlink:href=\"#Consolas-120\"/>\n",
356
       "    </g>\n",
357
       "   </g>\n",
358
       "   <g id=\"text_32\">\n",
359
       "    <!-- h -->\n",
360
       "    <g style=\"fill:#444443;\" transform=\"translate(209.3616 9.451406)scale(0.13 -0.13)\">\n",
361
       "     <use xlink:href=\"#Consolas-104\"/>\n",
362
       "    </g>\n",
363
       "   </g>\n",
364
       "   <g id=\"text_33\">\n",
365
       "    <!--   -->\n",
366
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(215.8902 9.451406)scale(0.13 -0.13)\">\n",
367
       "     <use xlink:href=\"#Consolas-32\"/>\n",
368
       "    </g>\n",
369
       "   </g>\n",
370
       "   <g id=\"text_34\">\n",
371
       "    <!-- @ -->\n",
372
       "    <g style=\"fill:#a40227;\" transform=\"translate(222.4188 9.451406)scale(0.13 -0.13)\">\n",
373
       "     <use xlink:href=\"#Consolas-64\"/>\n",
374
       "    </g>\n",
375
       "   </g>\n",
376
       "   <g id=\"text_35\">\n",
377
       "    <!--   -->\n",
378
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(228.9474 9.451406)scale(0.13 -0.13)\">\n",
379
       "     <use xlink:href=\"#Consolas-32\"/>\n",
380
       "    </g>\n",
381
       "   </g>\n",
382
       "   <g id=\"text_36\">\n",
383
       "    <!-- X -->\n",
384
       "    <g style=\"fill:#444443;\" transform=\"translate(235.476 9.451406)scale(0.13 -0.13)\">\n",
385
       "     <defs>\n",
386
       "      <path d=\"M 53.8125 0  L 42.828125 0  L 27.296875 25.78125  L 11.71875 0  L 0.875 0  L 22.125 32.625  L 2.59375 63.8125  L 12.890625 63.8125  L 27.484375 39.796875  L 42.1875 63.8125  L 52.203125 63.8125  L 32.625 33.015625  z \" id=\"Consolas-88\"/>\n",
387
       "     </defs>\n",
388
       "     <use xlink:href=\"#Consolas-88\"/>\n",
389
       "    </g>\n",
390
       "   </g>\n",
391
       "   <g id=\"text_37\">\n",
392
       "    <!-- . -->\n",
393
       "    <g style=\"fill:#444443;\" transform=\"translate(242.0046 9.451406)scale(0.13 -0.13)\">\n",
394
       "     <use xlink:href=\"#Consolas-46\"/>\n",
395
       "    </g>\n",
396
       "   </g>\n",
397
       "   <g id=\"text_38\">\n",
398
       "    <!-- T -->\n",
399
       "    <g style=\"fill:#444443;\" transform=\"translate(248.5332 9.451406)scale(0.13 -0.13)\">\n",
400
       "     <defs>\n",
401
       "      <path d=\"M 50.78125 56.390625  L 31.890625 56.390625  L 31.890625 0  L 23.09375 0  L 23.09375 56.390625  L 4.203125 56.390625  L 4.203125 63.8125  L 50.78125 63.8125  z \" id=\"Consolas-84\"/>\n",
402
       "     </defs>\n",
403
       "     <use xlink:href=\"#Consolas-84\"/>\n",
404
       "    </g>\n",
405
       "   </g>\n",
406
       "   <g id=\"text_39\">\n",
407
       "    <!--   -->\n",
408
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(255.0618 9.451406)scale(0.13 -0.13)\">\n",
409
       "     <use xlink:href=\"#Consolas-32\"/>\n",
410
       "    </g>\n",
411
       "   </g>\n",
412
       "   <g id=\"text_40\">\n",
413
       "    <!-- + -->\n",
414
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(261.5904 9.451406)scale(0.13 -0.13)\">\n",
415
       "     <use xlink:href=\"#Consolas-43\"/>\n",
416
       "    </g>\n",
417
       "   </g>\n",
418
       "   <g id=\"text_41\">\n",
419
       "    <!--   -->\n",
420
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(268.119 9.451406)scale(0.13 -0.13)\">\n",
421
       "     <use xlink:href=\"#Consolas-32\"/>\n",
422
       "    </g>\n",
423
       "   </g>\n",
424
       "   <g id=\"text_42\">\n",
425
       "    <!-- b -->\n",
426
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(274.6476 9.451406)scale(0.13 -0.13)\">\n",
427
       "     <defs>\n",
428
       "      <path d=\"M 49.703125 25.390625  Q 49.703125 19.28125 48.015625 14.46875  Q 46.34375 9.671875 43.234375 6.328125  Q 40.140625 2.984375 35.6875 1.1875  Q 31.25 -0.59375 25.6875 -0.59375  Q 21.34375 -0.59375 16.796875 0.234375  Q 12.25 1.078125 7.8125 2.875  L 7.8125 69  L 16.3125 69  L 16.3125 50  L 15.921875 40.921875  Q 19.578125 45.84375 23.75 47.875  Q 27.9375 49.90625 32.71875 49.90625  Q 36.921875 49.90625 40.09375 48.140625  Q 43.265625 46.390625 45.40625 43.1875  Q 47.5625 39.984375 48.625 35.46875  Q 49.703125 30.953125 49.703125 25.390625  z M 41.015625 25  Q 41.015625 28.859375 40.453125 32.078125  Q 39.890625 35.296875 38.671875 37.59375  Q 37.453125 39.890625 35.546875 41.1875  Q 33.640625 42.484375 31 42.484375  Q 29.390625 42.484375 27.734375 41.96875  Q 26.078125 41.453125 24.296875 40.25  Q 22.515625 39.0625 20.53125 37.078125  Q 18.5625 35.109375 16.3125 32.171875  L 16.3125 8.40625  Q 18.796875 7.421875 21.375 6.859375  Q 23.96875 6.296875 26.3125 6.296875  Q 29.25 6.296875 31.90625 7.21875  Q 34.578125 8.15625 36.59375 10.328125  Q 38.625 12.5 39.8125 16.078125  Q 41.015625 19.671875 41.015625 25  z \" id=\"Consolas-98\"/>\n",
429
       "     </defs>\n",
430
       "     <use xlink:href=\"#Consolas-98\"/>\n",
431
       "    </g>\n",
432
       "   </g>\n",
433
       "   <g id=\"text_43\">\n",
434
       "    <!-- h -->\n",
435
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(281.1762 9.451406)scale(0.13 -0.13)\">\n",
436
       "     <use xlink:href=\"#Consolas-104\"/>\n",
437
       "    </g>\n",
438
       "   </g>\n",
439
       "   <g id=\"text_44\">\n",
440
       "    <!-- ) -->\n",
441
       "    <g style=\"fill:#b4b4b4;\" transform=\"translate(287.7048 9.451406)scale(0.13 -0.13)\">\n",
442
       "     <use xlink:href=\"#Consolas-41\"/>\n",
443
       "    </g>\n",
444
       "   </g>\n",
445
       "   <g id=\"text_45\">\n",
446
       "    <!-- 764 -->\n",
447
       "    <g transform=\"translate(192.8835 41.557371)rotate(-90)scale(0.09 -0.09)\">\n",
448
       "     <defs>\n",
449
       "      <path d=\"M 4.734375 62.203125  L 4.734375 70.65625  L 51.078125 70.65625  L 51.078125 63.8125  Q 44.234375 56.546875 37.515625 44.484375  Q 30.8125 32.421875 27.15625 19.671875  Q 24.515625 10.6875 23.78125 0  L 14.75 0  Q 14.890625 8.453125 18.0625 20.40625  Q 21.234375 32.375 27.171875 43.484375  Q 33.109375 54.59375 39.796875 62.203125  z \" id=\"ArialMT-55\"/>\n",
450
       "      <path d=\"M 49.75 54.046875  L 41.015625 53.375  Q 39.84375 58.546875 37.703125 60.890625  Q 34.125 64.65625 28.90625 64.65625  Q 24.703125 64.65625 21.53125 62.3125  Q 17.390625 59.28125 14.984375 53.46875  Q 12.59375 47.65625 12.5 36.921875  Q 15.671875 41.75 20.265625 44.09375  Q 24.859375 46.4375 29.890625 46.4375  Q 38.671875 46.4375 44.84375 39.96875  Q 51.03125 33.5 51.03125 23.25  Q 51.03125 16.5 48.125 10.71875  Q 45.21875 4.9375 40.140625 1.859375  Q 35.0625 -1.21875 28.609375 -1.21875  Q 17.625 -1.21875 10.6875 6.859375  Q 3.765625 14.9375 3.765625 33.5  Q 3.765625 54.25 11.421875 63.671875  Q 18.109375 71.875 29.4375 71.875  Q 37.890625 71.875 43.28125 67.140625  Q 48.6875 62.40625 49.75 54.046875  z M 13.875 23.1875  Q 13.875 18.65625 15.796875 14.5  Q 17.71875 10.359375 21.1875 8.171875  Q 24.65625 6 28.46875 6  Q 34.03125 6 38.03125 10.484375  Q 42.046875 14.984375 42.046875 22.703125  Q 42.046875 30.125 38.078125 34.390625  Q 34.125 38.671875 28.125 38.671875  Q 22.171875 38.671875 18.015625 34.390625  Q 13.875 30.125 13.875 23.1875  z \" id=\"ArialMT-54\"/>\n",
451
       "      <path d=\"M 32.328125 0  L 32.328125 17.140625  L 1.265625 17.140625  L 1.265625 25.203125  L 33.9375 71.578125  L 41.109375 71.578125  L 41.109375 25.203125  L 50.78125 25.203125  L 50.78125 17.140625  L 41.109375 17.140625  L 41.109375 0  z M 32.328125 25.203125  L 32.328125 57.46875  L 9.90625 25.203125  z \" id=\"ArialMT-52\"/>\n",
452
       "     </defs>\n",
453
       "     <use xlink:href=\"#ArialMT-55\"/>\n",
454
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-54\"/>\n",
455
       "     <use x=\"111.230469\" xlink:href=\"#ArialMT-52\"/>\n",
456
       "    </g>\n",
457
       "   </g>\n",
458
       "   <g id=\"text_46\">\n",
459
       "    <!-- 256 -->\n",
460
       "    <g transform=\"translate(198.590034 21.560896)scale(0.09 -0.09)\">\n",
461
       "     <defs>\n",
462
       "      <path d=\"M 50.34375 8.453125  L 50.34375 0  L 3.03125 0  Q 2.9375 3.171875 4.046875 6.109375  Q 5.859375 10.9375 9.828125 15.625  Q 13.8125 20.3125 21.34375 26.46875  Q 33.015625 36.03125 37.109375 41.625  Q 41.21875 47.21875 41.21875 52.203125  Q 41.21875 57.421875 37.46875 61  Q 33.734375 64.59375 27.734375 64.59375  Q 21.390625 64.59375 17.578125 60.78125  Q 13.765625 56.984375 13.71875 50.25  L 4.6875 51.171875  Q 5.609375 61.28125 11.65625 66.578125  Q 17.71875 71.875 27.9375 71.875  Q 38.234375 71.875 44.234375 66.15625  Q 50.25 60.453125 50.25 52  Q 50.25 47.703125 48.484375 43.546875  Q 46.734375 39.40625 42.65625 34.8125  Q 38.578125 30.21875 29.109375 22.21875  Q 21.1875 15.578125 18.9375 13.203125  Q 16.703125 10.84375 15.234375 8.453125  z \" id=\"ArialMT-50\"/>\n",
463
       "      <path d=\"M 4.15625 18.75  L 13.375 19.53125  Q 14.40625 12.796875 18.140625 9.390625  Q 21.875 6 27.15625 6  Q 33.5 6 37.890625 10.78125  Q 42.28125 15.578125 42.28125 23.484375  Q 42.28125 31 38.0625 35.34375  Q 33.84375 39.703125 27 39.703125  Q 22.75 39.703125 19.328125 37.765625  Q 15.921875 35.84375 13.96875 32.765625  L 5.71875 33.84375  L 12.640625 70.609375  L 48.25 70.609375  L 48.25 62.203125  L 19.671875 62.203125  L 15.828125 42.96875  Q 22.265625 47.46875 29.34375 47.46875  Q 38.71875 47.46875 45.15625 40.96875  Q 51.609375 34.46875 51.609375 24.265625  Q 51.609375 14.546875 45.953125 7.46875  Q 39.0625 -1.21875 27.15625 -1.21875  Q 17.390625 -1.21875 11.203125 4.25  Q 5.03125 9.71875 4.15625 18.75  z \" id=\"ArialMT-53\"/>\n",
464
       "     </defs>\n",
465
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
466
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-53\"/>\n",
467
       "     <use x=\"111.230469\" xlink:href=\"#ArialMT-54\"/>\n",
468
       "    </g>\n",
469
       "   </g>\n",
470
       "   <g id=\"text_47\">\n",
471
       "    <!-- 764 -->\n",
472
       "    <g transform=\"translate(232.0551 41.557371)rotate(-90)scale(0.09 -0.09)\">\n",
473
       "     <use xlink:href=\"#ArialMT-55\"/>\n",
474
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-54\"/>\n",
475
       "     <use x=\"111.230469\" xlink:href=\"#ArialMT-52\"/>\n",
476
       "    </g>\n",
477
       "   </g>\n",
478
       "   <g id=\"text_48\">\n",
479
       "    <!-- 200 -->\n",
480
       "    <g transform=\"translate(237.761634 21.560896)scale(0.09 -0.09)\">\n",
481
       "     <defs>\n",
482
       "      <path d=\"M 4.15625 35.296875  Q 4.15625 48 6.765625 55.734375  Q 9.375 63.484375 14.515625 67.671875  Q 19.671875 71.875 27.484375 71.875  Q 33.25 71.875 37.59375 69.546875  Q 41.9375 67.234375 44.765625 62.859375  Q 47.609375 58.5 49.21875 52.21875  Q 50.828125 45.953125 50.828125 35.296875  Q 50.828125 22.703125 48.234375 14.96875  Q 45.65625 7.234375 40.5 3  Q 35.359375 -1.21875 27.484375 -1.21875  Q 17.140625 -1.21875 11.234375 6.203125  Q 4.15625 15.140625 4.15625 35.296875  z M 13.1875 35.296875  Q 13.1875 17.671875 17.3125 11.828125  Q 21.4375 6 27.484375 6  Q 33.546875 6 37.671875 11.859375  Q 41.796875 17.71875 41.796875 35.296875  Q 41.796875 52.984375 37.671875 58.78125  Q 33.546875 64.59375 27.390625 64.59375  Q 21.34375 64.59375 17.71875 59.46875  Q 13.1875 52.9375 13.1875 35.296875  z \" id=\"ArialMT-48\"/>\n",
483
       "     </defs>\n",
484
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
485
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-48\"/>\n",
486
       "     <use x=\"111.230469\" xlink:href=\"#ArialMT-48\"/>\n",
487
       "    </g>\n",
488
       "   </g>\n",
489
       "  </g>\n",
490
       " </g>\n",
491
       " <defs>\n",
492
       "  <clipPath id=\"p2cf69eb1e8\">\n",
493
       "   <rect height=\"41.491069\" width=\"294.2334\" x=\"0\" y=\"4.504646\"/>\n",
494
       "  </clipPath>\n",
495
       " </defs>\n",
496
       "</svg>"
497
      ],
498
      "text/plain": [
499
       "<IPython.core.display.SVG object>"
500
      ]
501
     },
502
     "metadata": {},
503
     "output_type": "display_data"
504
    },
505
    {
506
     "ename": "RuntimeError",
507
     "evalue": "mat1 and mat2 shapes cannot be multiplied (764x256 and 764x200)\nCause: @ on tensor operand Uxh w/shape [764, 256] and operand X.T w/shape [764, 200]",
508
     "output_type": "error",
509
     "traceback": [
510
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
511
      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
512
      "\u001b[0;32m<ipython-input-3-b9a515efa8ef>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtsensor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclarify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m     \u001b[0mh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtanh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mWhh\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mUxh\u001b[0m \u001b[0;34m@\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mbh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
513
      "\u001b[0;31mRuntimeError\u001b[0m: mat1 and mat2 shapes cannot be multiplied (764x256 and 764x200)\nCause: @ on tensor operand Uxh w/shape [764, 256] and operand X.T w/shape [764, 200]"
514
     ]
515
    }
516
   ],
517
   "source": [
518
    "import tsensor\n",
519
    "\n",
520
    "with tsensor.clarify():\n",
521
    "    h = torch.tanh(Whh @ (r*h) + Uxh @ X.T + bh)"
522
   ]
523
  },
524
  {
525
   "cell_type": "markdown",
526
   "id": "9ce7ac3e-c01a-493e-97f6-2b6305dbd4f3",
527
   "metadata": {},
528
   "source": [
529
    "TensorSensor has augmented the exception object's message with:\n",
530
    "\n",
531
    "```\n",
532
    "Cause: @ on tensor operand Uxh w/shape [764, 256] and operand X.T w/shape [764, 200]\n",
533
    "```"
534
   ]
535
  },
536
  {
537
   "cell_type": "markdown",
538
   "id": "8a451d9c-8fcd-41d0-b140-a7affdb0a1fa",
539
   "metadata": {},
540
   "source": [
541
    "## Fix error and clarify() does nothing"
542
   ]
543
  },
544
  {
545
   "cell_type": "code",
546
   "execution_count": 4,
547
   "id": "0d0b044c-dce0-4a3c-9a4b-de0c4bd1e27f",
548
   "metadata": {},
549
   "outputs": [],
550
   "source": [
551
    "Uxh = torch.randn(nhidden, d)\n",
552
    "with tsensor.clarify():\n",
553
    "    h = torch.tanh(Whh @ (r*h) + Uxh @ X.T + bh)  # state vector update equation"
554
   ]
555
  },
556
  {
557
   "cell_type": "markdown",
558
   "id": "96b5ed0f-e9a5-4270-be5e-deadc5d35fbd",
559
   "metadata": {},
560
   "source": [
561
    "## Explaining code w/o errors"
562
   ]
563
  },
564
  {
565
   "cell_type": "code",
566
   "execution_count": 5,
567
   "id": "37c4e6ba-2d59-486d-836d-c81b0f026e8a",
568
   "metadata": {},
569
   "outputs": [
570
    {
571
     "data": {
572
      "image/svg+xml": [
573
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" height=\"45.995716pt\" version=\"1.1\" viewBox=\"0 0 119.18349 45.995716\" width=\"119.18349pt\">\n",
574
       " <metadata>\n",
575
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
576
       "   <cc:Work>\n",
577
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
578
       "    <dc:date>2021-09-29T16:51:10.175346</dc:date>\n",
579
       "    <dc:format>image/svg+xml</dc:format>\n",
580
       "    <dc:creator>\n",
581
       "     <cc:Agent>\n",
582
       "      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n",
583
       "     </cc:Agent>\n",
584
       "    </dc:creator>\n",
585
       "   </cc:Work>\n",
586
       "  </rdf:RDF>\n",
587
       " </metadata>\n",
588
       " <defs>\n",
589
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
590
       " </defs>\n",
591
       " <g id=\"figure_1\">\n",
592
       "  <g id=\"patch_1\">\n",
593
       "   <path d=\"M 0 45.995716  L 119.18349 45.995716  L 119.18349 0  L 0 0  z \" style=\"fill:none;\"/>\n",
594
       "  </g>\n",
595
       "  <g id=\"axes_1\">\n",
596
       "   <g id=\"patch_2\">\n",
597
       "    <path clip-path=\"url(#pf600d03959)\" d=\"M 8.230781 45.180316  L 13.453661 45.180316  L 13.453661 22.919896  L 8.230781 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
598
       "   </g>\n",
599
       "   <g id=\"patch_3\">\n",
600
       "    <path clip-path=\"url(#pf600d03959)\" d=\"M 106.159781 45.180316  L 111.382661 45.180316  L 111.382661 22.919896  L 106.159781 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
601
       "   </g>\n",
602
       "   <g id=\"line2d_1\">\n",
603
       "    <path clip-path=\"url(#pf600d03959)\" d=\"M 6.925061 13.192653  L 14.759381 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
604
       "   </g>\n",
605
       "   <g id=\"line2d_2\">\n",
606
       "    <path clip-path=\"url(#pf600d03959)\" d=\"M 104.854061 13.192653  L 112.688381 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
607
       "   </g>\n",
608
       "   <g id=\"text_1\">\n",
609
       "    <!-- a -->\n",
610
       "    <g style=\"fill:#444443;\" transform=\"translate(7.577921 9.451406)scale(0.13 -0.13)\">\n",
611
       "     <defs>\n",
612
       "      <path d=\"M 39.3125 0  L 39.109375 6.59375  Q 35.109375 2.640625 30.984375 0.875  Q 26.859375 -0.875 22.3125 -0.875  Q 18.109375 -0.875 15.125 0.1875  Q 12.15625 1.265625 10.21875 3.140625  Q 8.296875 5.03125 7.390625 7.5625  Q 6.5 10.109375 6.5 13.09375  Q 6.5 20.453125 11.984375 24.625  Q 17.484375 28.8125 28.21875 28.8125  L 38.375 28.8125  L 38.375 33.109375  Q 38.375 37.453125 35.59375 40.0625  Q 32.8125 42.671875 27.09375 42.671875  Q 22.953125 42.671875 18.921875 41.75  Q 14.890625 40.828125 10.59375 39.109375  L 10.59375 46.78125  Q 12.203125 47.359375 14.171875 47.921875  Q 16.15625 48.484375 18.359375 48.921875  Q 20.5625 49.359375 22.953125 49.625  Q 25.34375 49.90625 27.78125 49.90625  Q 32.234375 49.90625 35.796875 48.921875  Q 39.359375 47.953125 41.8125 45.953125  Q 44.28125 43.953125 45.59375 40.921875  Q 46.921875 37.890625 46.921875 33.796875  L 46.921875 0  z M 38.375 22.3125  L 27.59375 22.3125  Q 24.421875 22.3125 22.125 21.671875  Q 19.828125 21.046875 18.359375 19.875  Q 16.890625 18.703125 16.1875 17.0625  Q 15.484375 15.4375 15.484375 13.375  Q 15.484375 11.96875 15.921875 10.671875  Q 16.359375 9.375 17.328125 8.375  Q 18.3125 7.375 19.875 6.78125  Q 21.4375 6.203125 23.6875 6.203125  Q 26.609375 6.203125 30.390625 7.984375  Q 34.1875 9.765625 38.375 13.625  z \" id=\"Consolas-97\"/>\n",
613
       "     </defs>\n",
614
       "     <use xlink:href=\"#Consolas-97\"/>\n",
615
       "    </g>\n",
616
       "   </g>\n",
617
       "   <g id=\"text_2\">\n",
618
       "    <!--   -->\n",
619
       "    <g style=\"fill:#444443;\" transform=\"translate(14.106521 9.451406)scale(0.13 -0.13)\">\n",
620
       "     <defs>\n",
621
       "      <path id=\"Consolas-32\"/>\n",
622
       "     </defs>\n",
623
       "     <use xlink:href=\"#Consolas-32\"/>\n",
624
       "    </g>\n",
625
       "   </g>\n",
626
       "   <g id=\"text_3\">\n",
627
       "    <!-- = -->\n",
628
       "    <g style=\"fill:#444443;\" transform=\"translate(20.635121 9.451406)scale(0.13 -0.13)\">\n",
629
       "     <defs>\n",
630
       "      <path d=\"M 48.484375 31.546875  L 6.5 31.546875  L 6.5 38.71875  L 48.484375 38.71875  z M 48.484375 14.546875  L 6.5 14.546875  L 6.5 21.734375  L 48.484375 21.734375  z \" id=\"Consolas-61\"/>\n",
631
       "     </defs>\n",
632
       "     <use xlink:href=\"#Consolas-61\"/>\n",
633
       "    </g>\n",
634
       "   </g>\n",
635
       "   <g id=\"text_4\">\n",
636
       "    <!--   -->\n",
637
       "    <g style=\"fill:#444443;\" transform=\"translate(27.163721 9.451406)scale(0.13 -0.13)\">\n",
638
       "     <use xlink:href=\"#Consolas-32\"/>\n",
639
       "    </g>\n",
640
       "   </g>\n",
641
       "   <g id=\"text_5\">\n",
642
       "    <!-- t -->\n",
643
       "    <g style=\"fill:#444443;\" transform=\"translate(33.692321 9.451406)scale(0.13 -0.13)\">\n",
644
       "     <defs>\n",
645
       "      <path d=\"M 47.3125 0.6875  Q 44.4375 -0.046875 41.359375 -0.359375  Q 38.28125 -0.6875 35.109375 -0.6875  Q 25.875 -0.6875 21.328125 3.484375  Q 16.796875 7.671875 16.796875 16.3125  L 16.796875 41.890625  L 3.078125 41.890625  L 3.078125 49.03125  L 16.796875 49.03125  L 16.796875 62.5  L 25.296875 64.703125  L 25.296875 49.03125  L 47.3125 49.03125  L 47.3125 41.890625  L 25.296875 41.890625  L 25.296875 17  Q 25.296875 11.71875 28.09375 9.109375  Q 30.90625 6.5 36.375 6.5  Q 38.71875 6.5 41.5 6.859375  Q 44.28125 7.234375 47.3125 8.015625  z \" id=\"Consolas-116\"/>\n",
646
       "     </defs>\n",
647
       "     <use xlink:href=\"#Consolas-116\"/>\n",
648
       "    </g>\n",
649
       "   </g>\n",
650
       "   <g id=\"text_6\">\n",
651
       "    <!-- o -->\n",
652
       "    <g style=\"fill:#444443;\" transform=\"translate(40.220921 9.451406)scale(0.13 -0.13)\">\n",
653
       "     <defs>\n",
654
       "      <path d=\"M 50.484375 24.90625  Q 50.484375 19.1875 48.875 14.421875  Q 47.265625 9.671875 44.234375 6.265625  Q 41.21875 2.875 36.859375 1  Q 32.515625 -0.875 27 -0.875  Q 21.734375 -0.875 17.546875 0.75  Q 13.375 2.390625 10.46875 5.5625  Q 7.5625 8.734375 6.03125 13.421875  Q 4.5 18.109375 4.5 24.21875  Q 4.5 29.9375 6.109375 34.640625  Q 7.71875 39.359375 10.734375 42.75  Q 13.765625 46.140625 18.109375 48.015625  Q 22.46875 49.90625 27.984375 49.90625  Q 33.25 49.90625 37.421875 48.265625  Q 41.609375 46.625 44.5 43.46875  Q 47.40625 40.328125 48.9375 35.640625  Q 50.484375 30.953125 50.484375 24.90625  z M 41.796875 24.515625  Q 41.796875 29.046875 40.796875 32.4375  Q 39.796875 35.84375 37.9375 38.109375  Q 36.078125 40.375 33.421875 41.515625  Q 30.765625 42.671875 27.484375 42.671875  Q 23.6875 42.671875 20.96875 41.1875  Q 18.265625 39.703125 16.53125 37.203125  Q 14.796875 34.71875 13.984375 31.421875  Q 13.1875 28.125 13.1875 24.515625  Q 13.1875 19.96875 14.1875 16.546875  Q 15.1875 13.140625 17.03125 10.859375  Q 18.890625 8.59375 21.53125 7.4375  Q 24.171875 6.296875 27.484375 6.296875  Q 31.296875 6.296875 34 7.78125  Q 36.71875 9.28125 38.453125 11.765625  Q 40.1875 14.265625 40.984375 17.546875  Q 41.796875 20.84375 41.796875 24.515625  z \" id=\"Consolas-111\"/>\n",
655
       "     </defs>\n",
656
       "     <use xlink:href=\"#Consolas-111\"/>\n",
657
       "    </g>\n",
658
       "   </g>\n",
659
       "   <g id=\"text_7\">\n",
660
       "    <!-- r -->\n",
661
       "    <g style=\"fill:#444443;\" transform=\"translate(46.749521 9.451406)scale(0.13 -0.13)\">\n",
662
       "     <defs>\n",
663
       "      <path d=\"M 9.8125 49.03125  L 17.578125 49.03125  L 17.828125 39.984375  Q 22.171875 45.21875 26.390625 47.5625  Q 30.609375 49.90625 34.90625 49.90625  Q 42.53125 49.90625 46.453125 44.96875  Q 50.390625 40.046875 50.09375 30.328125  L 41.5 30.328125  Q 41.65625 36.765625 39.625 39.671875  Q 37.59375 42.578125 33.6875 42.578125  Q 31.984375 42.578125 30.25 41.96875  Q 28.515625 41.359375 26.6875 40.015625  Q 24.859375 38.671875 22.796875 36.5625  Q 20.75 34.46875 18.40625 31.5  L 18.40625 0  L 9.8125 0  z \" id=\"Consolas-114\"/>\n",
664
       "     </defs>\n",
665
       "     <use xlink:href=\"#Consolas-114\"/>\n",
666
       "    </g>\n",
667
       "   </g>\n",
668
       "   <g id=\"text_8\">\n",
669
       "    <!-- c -->\n",
670
       "    <g style=\"fill:#444443;\" transform=\"translate(53.278121 9.451406)scale(0.13 -0.13)\">\n",
671
       "     <defs>\n",
672
       "      <path d=\"M 45.90625 1.8125  Q 42.578125 0.53125 39.078125 -0.078125  Q 35.59375 -0.6875 31.890625 -0.6875  Q 20.265625 -0.6875 13.984375 5.609375  Q 7.71875 11.921875 7.71875 24.03125  Q 7.71875 29.828125 9.515625 34.5625  Q 11.328125 39.3125 14.59375 42.671875  Q 17.875 46.046875 22.40625 47.875  Q 26.953125 49.703125 32.421875 49.703125  Q 36.234375 49.703125 39.546875 49.171875  Q 42.875 48.640625 45.90625 47.40625  L 45.90625 39.3125  Q 42.71875 40.96875 39.421875 41.71875  Q 36.140625 42.484375 32.625 42.484375  Q 29.34375 42.484375 26.4375 41.234375  Q 23.53125 39.984375 21.328125 37.640625  Q 19.140625 35.296875 17.875 31.921875  Q 16.609375 28.5625 16.609375 24.3125  Q 16.609375 15.4375 20.921875 11.015625  Q 25.25 6.59375 32.90625 6.59375  Q 36.375 6.59375 39.625 7.375  Q 42.875 8.15625 45.90625 9.71875  z \" id=\"Consolas-99\"/>\n",
673
       "     </defs>\n",
674
       "     <use xlink:href=\"#Consolas-99\"/>\n",
675
       "    </g>\n",
676
       "   </g>\n",
677
       "   <g id=\"text_9\">\n",
678
       "    <!-- h -->\n",
679
       "    <g style=\"fill:#444443;\" transform=\"translate(59.806721 9.451406)scale(0.13 -0.13)\">\n",
680
       "     <defs>\n",
681
       "      <path d=\"M 47.21875 0  L 38.71875 0  L 38.71875 31.296875  Q 38.71875 36.96875 36.59375 39.765625  Q 34.46875 42.578125 30.515625 42.578125  Q 28.8125 42.578125 27.3125 42.109375  Q 25.828125 41.65625 24.21875 40.5  Q 22.609375 39.359375 20.703125 37.40625  Q 18.796875 35.453125 16.3125 32.515625  L 16.3125 0  L 7.8125 0  L 7.8125 69  L 16.3125 69  L 16.3125 49.03125  L 16.015625 41.3125  Q 18.015625 43.703125 19.9375 45.328125  Q 21.875 46.96875 23.796875 48  Q 25.734375 49.03125 27.734375 49.46875  Q 29.734375 49.90625 31.890625 49.90625  Q 39.203125 49.90625 43.203125 45.4375  Q 47.21875 40.96875 47.21875 31.984375  z \" id=\"Consolas-104\"/>\n",
682
       "     </defs>\n",
683
       "     <use xlink:href=\"#Consolas-104\"/>\n",
684
       "    </g>\n",
685
       "   </g>\n",
686
       "   <g id=\"text_10\">\n",
687
       "    <!-- . -->\n",
688
       "    <g style=\"fill:#444443;\" transform=\"translate(66.335321 9.451406)scale(0.13 -0.13)\">\n",
689
       "     <defs>\n",
690
       "      <path d=\"M 27.09375 15.375  Q 28.765625 15.375 30.25 14.734375  Q 31.734375 14.109375 32.828125 12.984375  Q 33.9375 11.859375 34.5625 10.375  Q 35.203125 8.890625 35.203125 7.171875  Q 35.203125 5.515625 34.5625 4.046875  Q 33.9375 2.59375 32.828125 1.484375  Q 31.734375 0.390625 30.25 -0.234375  Q 28.765625 -0.875 27.09375 -0.875  Q 25.390625 -0.875 23.921875 -0.234375  Q 22.46875 0.390625 21.359375 1.484375  Q 20.265625 2.59375 19.625 4.046875  Q 19 5.515625 19 7.171875  Q 19 8.890625 19.625 10.375  Q 20.265625 11.859375 21.359375 12.984375  Q 22.46875 14.109375 23.921875 14.734375  Q 25.390625 15.375 27.09375 15.375  z \" id=\"Consolas-46\"/>\n",
691
       "     </defs>\n",
692
       "     <use xlink:href=\"#Consolas-46\"/>\n",
693
       "    </g>\n",
694
       "   </g>\n",
695
       "   <g id=\"text_11\">\n",
696
       "    <!-- r -->\n",
697
       "    <g style=\"fill:#444443;\" transform=\"translate(72.863921 9.451406)scale(0.13 -0.13)\">\n",
698
       "     <use xlink:href=\"#Consolas-114\"/>\n",
699
       "    </g>\n",
700
       "   </g>\n",
701
       "   <g id=\"text_12\">\n",
702
       "    <!-- e -->\n",
703
       "    <g style=\"fill:#444443;\" transform=\"translate(79.392521 9.451406)scale(0.13 -0.13)\">\n",
704
       "     <defs>\n",
705
       "      <path d=\"M 49.21875 27.09375  Q 49.21875 25.296875 49.171875 24.078125  Q 49.125 22.859375 49.03125 21.78125  L 14.59375 21.78125  Q 14.59375 14.265625 18.796875 10.234375  Q 23 6.203125 30.90625 6.203125  Q 33.0625 6.203125 35.203125 6.375  Q 37.359375 6.546875 39.359375 6.828125  Q 41.359375 7.125 43.1875 7.484375  Q 45.015625 7.859375 46.578125 8.296875  L 46.578125 1.3125  Q 43.109375 0.34375 38.734375 -0.265625  Q 34.375 -0.875 29.6875 -0.875  Q 23.390625 -0.875 18.84375 0.828125  Q 14.3125 2.546875 11.40625 5.78125  Q 8.5 9.03125 7.109375 13.734375  Q 5.71875 18.453125 5.71875 24.421875  Q 5.71875 29.59375 7.203125 34.203125  Q 8.6875 38.8125 11.546875 42.296875  Q 14.40625 45.796875 18.546875 47.84375  Q 22.703125 49.90625 27.984375 49.90625  Q 33.109375 49.90625 37.0625 48.296875  Q 41.015625 46.6875 43.71875 43.71875  Q 46.4375 40.765625 47.828125 36.546875  Q 49.21875 32.328125 49.21875 27.09375  z M 40.375 28.328125  Q 40.53125 31.59375 39.75 34.296875  Q 38.96875 37.015625 37.328125 38.96875  Q 35.6875 40.921875 33.25 42.015625  Q 30.8125 43.109375 27.59375 43.109375  Q 24.8125 43.109375 22.515625 42.03125  Q 20.21875 40.96875 18.546875 39.015625  Q 16.890625 37.0625 15.859375 34.328125  Q 14.84375 31.59375 14.59375 28.328125  z \" id=\"Consolas-101\"/>\n",
706
       "     </defs>\n",
707
       "     <use xlink:href=\"#Consolas-101\"/>\n",
708
       "    </g>\n",
709
       "   </g>\n",
710
       "   <g id=\"text_13\">\n",
711
       "    <!-- l -->\n",
712
       "    <g style=\"fill:#444443;\" transform=\"translate(85.921121 9.451406)scale(0.13 -0.13)\">\n",
713
       "     <defs>\n",
714
       "      <path d=\"M 24.515625 62.015625  L 10.015625 62.015625  L 10.015625 69  L 33.109375 69  L 33.109375 7.078125  L 47.703125 7.078125  L 47.703125 0  L 8.40625 0  L 8.40625 7.078125  L 24.515625 7.078125  z \" id=\"Consolas-108\"/>\n",
715
       "     </defs>\n",
716
       "     <use xlink:href=\"#Consolas-108\"/>\n",
717
       "    </g>\n",
718
       "   </g>\n",
719
       "   <g id=\"text_14\">\n",
720
       "    <!-- u -->\n",
721
       "    <g style=\"fill:#444443;\" transform=\"translate(92.449721 9.451406)scale(0.13 -0.13)\">\n",
722
       "     <defs>\n",
723
       "      <path d=\"M 47.21875 0  L 39.59375 0  L 39.3125 7.90625  Q 37.109375 5.375 35.125 3.6875  Q 33.15625 2 31.203125 0.96875  Q 29.25 -0.046875 27.265625 -0.453125  Q 25.296875 -0.875 23.09375 -0.875  Q 15.53125 -0.875 11.671875 3.5625  Q 7.8125 8.015625 7.8125 17  L 7.8125 49.03125  L 16.3125 49.03125  L 16.3125 17.671875  Q 16.3125 6.390625 24.8125 6.390625  Q 26.375 6.390625 27.859375 6.859375  Q 29.34375 7.328125 30.984375 8.46875  Q 32.625 9.625 34.5 11.578125  Q 36.375 13.53125 38.71875 16.5  L 38.71875 49.03125  L 47.21875 49.03125  z \" id=\"Consolas-117\"/>\n",
724
       "     </defs>\n",
725
       "     <use xlink:href=\"#Consolas-117\"/>\n",
726
       "    </g>\n",
727
       "   </g>\n",
728
       "   <g id=\"text_15\">\n",
729
       "    <!-- ( -->\n",
730
       "    <g style=\"fill:#444443;\" transform=\"translate(98.978321 9.451406)scale(0.13 -0.13)\">\n",
731
       "     <defs>\n",
732
       "      <path d=\"M 37.15625 -20.515625  Q 14.65625 0.34375 14.65625 25.59375  Q 14.65625 31.5 15.84375 37.375  Q 17.046875 43.265625 19.703125 49.171875  Q 22.359375 55.078125 26.734375 60.984375  Q 31.109375 66.890625 37.359375 72.703125  L 42.28125 67.671875  Q 23.34375 48.96875 23.34375 26.21875  Q 23.34375 14.890625 28.125 4.4375  Q 32.90625 -6 42.28125 -15.28125  z \" id=\"Consolas-40\"/>\n",
733
       "     </defs>\n",
734
       "     <use xlink:href=\"#Consolas-40\"/>\n",
735
       "    </g>\n",
736
       "   </g>\n",
737
       "   <g id=\"text_16\">\n",
738
       "    <!-- x -->\n",
739
       "    <g style=\"fill:#444443;\" transform=\"translate(105.506921 9.451406)scale(0.13 -0.13)\">\n",
740
       "     <defs>\n",
741
       "      <path d=\"M 52 0  L 40.71875 0  L 27.484375 18.703125  L 14.40625 0  L 3.421875 0  L 22.40625 24.609375  L 4.296875 49.03125  L 15.1875 49.03125  L 28.078125 30.171875  L 40.71875 49.03125  L 51.21875 49.03125  L 32.8125 24.421875  z \" id=\"Consolas-120\"/>\n",
742
       "     </defs>\n",
743
       "     <use xlink:href=\"#Consolas-120\"/>\n",
744
       "    </g>\n",
745
       "   </g>\n",
746
       "   <g id=\"text_17\">\n",
747
       "    <!-- ) -->\n",
748
       "    <g style=\"fill:#444443;\" transform=\"translate(112.035521 9.451406)scale(0.13 -0.13)\">\n",
749
       "     <defs>\n",
750
       "      <path d=\"M 17.828125 72.703125  Q 40.328125 51.859375 40.328125 26.3125  Q 40.328125 21.046875 39.25 15.375  Q 38.1875 9.71875 35.59375 3.78125  Q 33.015625 -2.15625 28.640625 -8.25  Q 24.265625 -14.359375 17.625 -20.515625  L 12.703125 -15.484375  Q 22.21875 -6.0625 26.90625 4.1875  Q 31.59375 14.453125 31.59375 25.6875  Q 31.59375 48.921875 12.703125 67.484375  z \" id=\"Consolas-41\"/>\n",
751
       "     </defs>\n",
752
       "     <use xlink:href=\"#Consolas-41\"/>\n",
753
       "    </g>\n",
754
       "   </g>\n",
755
       "   <g id=\"text_18\">\n",
756
       "    <!-- 2k -->\n",
757
       "    <g transform=\"translate(6.442031 38.802528)rotate(-90)scale(0.09 -0.09)\">\n",
758
       "     <defs>\n",
759
       "      <path d=\"M 50.34375 8.453125  L 50.34375 0  L 3.03125 0  Q 2.9375 3.171875 4.046875 6.109375  Q 5.859375 10.9375 9.828125 15.625  Q 13.8125 20.3125 21.34375 26.46875  Q 33.015625 36.03125 37.109375 41.625  Q 41.21875 47.21875 41.21875 52.203125  Q 41.21875 57.421875 37.46875 61  Q 33.734375 64.59375 27.734375 64.59375  Q 21.390625 64.59375 17.578125 60.78125  Q 13.765625 56.984375 13.71875 50.25  L 4.6875 51.171875  Q 5.609375 61.28125 11.65625 66.578125  Q 17.71875 71.875 27.9375 71.875  Q 38.234375 71.875 44.234375 66.15625  Q 50.25 60.453125 50.25 52  Q 50.25 47.703125 48.484375 43.546875  Q 46.734375 39.40625 42.65625 34.8125  Q 38.578125 30.21875 29.109375 22.21875  Q 21.1875 15.578125 18.9375 13.203125  Q 16.703125 10.84375 15.234375 8.453125  z \" id=\"ArialMT-50\"/>\n",
760
       "      <path d=\"M 6.640625 0  L 6.640625 71.578125  L 15.4375 71.578125  L 15.4375 30.765625  L 36.234375 51.859375  L 47.609375 51.859375  L 27.78125 32.625  L 49.609375 0  L 38.765625 0  L 21.625 26.515625  L 15.4375 20.5625  L 15.4375 0  z \" id=\"ArialMT-107\"/>\n",
761
       "     </defs>\n",
762
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
763
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-107\"/>\n",
764
       "    </g>\n",
765
       "   </g>\n",
766
       "   <g id=\"text_19\">\n",
767
       "    <!-- 1 -->\n",
768
       "    <g transform=\"translate(8.339799 21.560896)scale(0.09 -0.09)\">\n",
769
       "     <defs>\n",
770
       "      <path d=\"M 37.25 0  L 28.46875 0  L 28.46875 56  Q 25.296875 52.984375 20.140625 49.953125  Q 14.984375 46.921875 10.890625 45.40625  L 10.890625 53.90625  Q 18.265625 57.375 23.78125 62.296875  Q 29.296875 67.234375 31.59375 71.875  L 37.25 71.875  z \" id=\"ArialMT-49\"/>\n",
771
       "     </defs>\n",
772
       "     <use xlink:href=\"#ArialMT-49\"/>\n",
773
       "    </g>\n",
774
       "   </g>\n",
775
       "   <g id=\"text_20\">\n",
776
       "    <!-- 2k -->\n",
777
       "    <g transform=\"translate(104.371031 38.802528)rotate(-90)scale(0.09 -0.09)\">\n",
778
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
779
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-107\"/>\n",
780
       "    </g>\n",
781
       "   </g>\n",
782
       "   <g id=\"text_21\">\n",
783
       "    <!-- 1 -->\n",
784
       "    <g transform=\"translate(106.268799 21.560896)scale(0.09 -0.09)\">\n",
785
       "     <use xlink:href=\"#ArialMT-49\"/>\n",
786
       "    </g>\n",
787
       "   </g>\n",
788
       "  </g>\n",
789
       " </g>\n",
790
       " <defs>\n",
791
       "  <clipPath id=\"pf600d03959\">\n",
792
       "   <rect height=\"41.491069\" width=\"117.9612\" x=\"0.602921\" y=\"4.504646\"/>\n",
793
       "  </clipPath>\n",
794
       " </defs>\n",
795
       "</svg>"
796
      ],
797
      "text/plain": [
798
       "<IPython.core.display.SVG object>"
799
      ]
800
     },
801
     "metadata": {},
802
     "output_type": "display_data"
803
    },
804
    {
805
     "data": {
806
      "image/svg+xml": [
807
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" height=\"45.995716pt\" version=\"1.1\" viewBox=\"0 0 239.96259 45.995716\" width=\"239.96259pt\">\n",
808
       " <metadata>\n",
809
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
810
       "   <cc:Work>\n",
811
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
812
       "    <dc:date>2021-09-29T16:51:10.302494</dc:date>\n",
813
       "    <dc:format>image/svg+xml</dc:format>\n",
814
       "    <dc:creator>\n",
815
       "     <cc:Agent>\n",
816
       "      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n",
817
       "     </cc:Agent>\n",
818
       "    </dc:creator>\n",
819
       "   </cc:Work>\n",
820
       "  </rdf:RDF>\n",
821
       " </metadata>\n",
822
       " <defs>\n",
823
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
824
       " </defs>\n",
825
       " <g id=\"figure_1\">\n",
826
       "  <g id=\"patch_1\">\n",
827
       "   <path d=\"M 0 45.995716  L 239.96259 45.995716  L 239.96259 0  L 0 0  z \" style=\"fill:none;\"/>\n",
828
       "  </g>\n",
829
       "  <g id=\"axes_1\">\n",
830
       "   <g id=\"patch_2\">\n",
831
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 8.230781 45.180316  L 13.453661 45.180316  L 13.453661 22.919896  L 8.230781 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
832
       "   </g>\n",
833
       "   <g id=\"patch_3\">\n",
834
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 33.692321 45.180316  L 56.542421 45.180316  L 56.542421 22.919896  L 33.692321 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
835
       "   </g>\n",
836
       "   <g id=\"patch_4\">\n",
837
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 76.781081 45.180316  L 82.003961 45.180316  L 82.003961 22.919896  L 76.781081 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
838
       "   </g>\n",
839
       "   <g id=\"patch_5\">\n",
840
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 102.895481 45.180316  L 108.118361 45.180316  L 108.118361 22.919896  L 102.895481 22.919896  z \" style=\"fill:#cfe2d4;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
841
       "   </g>\n",
842
       "   <g id=\"patch_6\">\n",
843
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 154.471421 28.007992  L 177.321521 28.007992  L 177.321521 22.919896  L 154.471421 22.919896  z \" style=\"fill:#fefecd;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
844
       "   </g>\n",
845
       "   <g id=\"patch_7\">\n",
846
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 209.964521 28.007992  L 232.814621 28.007992  L 232.814621 22.919896  L 209.964521 22.919896  z \" style=\"fill:#fefecd;stroke:#808080;stroke-linejoin:miter;stroke-width:0.7;\"/>\n",
847
       "   </g>\n",
848
       "   <g id=\"line2d_1\">\n",
849
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 6.925061 13.192653  L 14.759381 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
850
       "   </g>\n",
851
       "   <g id=\"line2d_2\">\n",
852
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 41.200211 13.192653  L 49.034531 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
853
       "   </g>\n",
854
       "   <g id=\"line2d_3\">\n",
855
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 75.475361 13.192653  L 83.309681 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
856
       "   </g>\n",
857
       "   <g id=\"line2d_4\">\n",
858
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 101.589761 13.192653  L 109.424081 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
859
       "   </g>\n",
860
       "   <g id=\"line2d_5\">\n",
861
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 161.979311 13.192653  L 169.813631 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
862
       "   </g>\n",
863
       "   <g id=\"line2d_6\">\n",
864
       "    <path clip-path=\"url(#pd89de14d64)\" d=\"M 217.472411 13.192653  L 225.306731 13.192653  \" style=\"fill:none;stroke:#c2c2c2;stroke-linecap:square;stroke-width:0.5;\"/>\n",
865
       "   </g>\n",
866
       "   <g id=\"text_1\">\n",
867
       "    <!-- b -->\n",
868
       "    <g style=\"fill:#444443;\" transform=\"translate(7.577921 9.451406)scale(0.13 -0.13)\">\n",
869
       "     <defs>\n",
870
       "      <path d=\"M 49.703125 25.390625  Q 49.703125 19.28125 48.015625 14.46875  Q 46.34375 9.671875 43.234375 6.328125  Q 40.140625 2.984375 35.6875 1.1875  Q 31.25 -0.59375 25.6875 -0.59375  Q 21.34375 -0.59375 16.796875 0.234375  Q 12.25 1.078125 7.8125 2.875  L 7.8125 69  L 16.3125 69  L 16.3125 50  L 15.921875 40.921875  Q 19.578125 45.84375 23.75 47.875  Q 27.9375 49.90625 32.71875 49.90625  Q 36.921875 49.90625 40.09375 48.140625  Q 43.265625 46.390625 45.40625 43.1875  Q 47.5625 39.984375 48.625 35.46875  Q 49.703125 30.953125 49.703125 25.390625  z M 41.015625 25  Q 41.015625 28.859375 40.453125 32.078125  Q 39.890625 35.296875 38.671875 37.59375  Q 37.453125 39.890625 35.546875 41.1875  Q 33.640625 42.484375 31 42.484375  Q 29.390625 42.484375 27.734375 41.96875  Q 26.078125 41.453125 24.296875 40.25  Q 22.515625 39.0625 20.53125 37.078125  Q 18.5625 35.109375 16.3125 32.171875  L 16.3125 8.40625  Q 18.796875 7.421875 21.375 6.859375  Q 23.96875 6.296875 26.3125 6.296875  Q 29.25 6.296875 31.90625 7.21875  Q 34.578125 8.15625 36.59375 10.328125  Q 38.625 12.5 39.8125 16.078125  Q 41.015625 19.671875 41.015625 25  z \" id=\"Consolas-98\"/>\n",
871
       "     </defs>\n",
872
       "     <use xlink:href=\"#Consolas-98\"/>\n",
873
       "    </g>\n",
874
       "   </g>\n",
875
       "   <g id=\"text_2\">\n",
876
       "    <!--   -->\n",
877
       "    <g style=\"fill:#444443;\" transform=\"translate(14.106521 9.451406)scale(0.13 -0.13)\">\n",
878
       "     <defs>\n",
879
       "      <path id=\"Consolas-32\"/>\n",
880
       "     </defs>\n",
881
       "     <use xlink:href=\"#Consolas-32\"/>\n",
882
       "    </g>\n",
883
       "   </g>\n",
884
       "   <g id=\"text_3\">\n",
885
       "    <!-- = -->\n",
886
       "    <g style=\"fill:#444443;\" transform=\"translate(20.635121 9.451406)scale(0.13 -0.13)\">\n",
887
       "     <defs>\n",
888
       "      <path d=\"M 48.484375 31.546875  L 6.5 31.546875  L 6.5 38.71875  L 48.484375 38.71875  z M 48.484375 14.546875  L 6.5 14.546875  L 6.5 21.734375  L 48.484375 21.734375  z \" id=\"Consolas-61\"/>\n",
889
       "     </defs>\n",
890
       "     <use xlink:href=\"#Consolas-61\"/>\n",
891
       "    </g>\n",
892
       "   </g>\n",
893
       "   <g id=\"text_4\">\n",
894
       "    <!--   -->\n",
895
       "    <g style=\"fill:#444443;\" transform=\"translate(27.163721 9.451406)scale(0.13 -0.13)\">\n",
896
       "     <use xlink:href=\"#Consolas-32\"/>\n",
897
       "    </g>\n",
898
       "   </g>\n",
899
       "   <g id=\"text_5\">\n",
900
       "    <!-- W -->\n",
901
       "    <g style=\"fill:#444443;\" transform=\"translate(41.853071 9.451406)scale(0.13 -0.13)\">\n",
902
       "     <defs>\n",
903
       "      <path d=\"M 52.78125 63.8125  L 48.484375 0  L 37.203125 0  L 29.296875 22.703125  L 27.09375 29.984375  L 24.8125 22.125  L 17.484375 0  L 6.59375 0  L 2.203125 63.8125  L 10.40625 63.8125  L 12.890625 20.40625  L 13.625 8.5  L 16.703125 18.609375  L 24.421875 42.28125  L 30.421875 42.28125  L 39.3125 16.890625  L 42.28125 8.5  L 42.484375 17.28125  L 45.015625 63.8125  z \" id=\"Consolas-87\"/>\n",
904
       "     </defs>\n",
905
       "     <use xlink:href=\"#Consolas-87\"/>\n",
906
       "    </g>\n",
907
       "   </g>\n",
908
       "   <g id=\"text_6\">\n",
909
       "    <!--   -->\n",
910
       "    <g style=\"fill:#444443;\" transform=\"translate(56.542421 9.451406)scale(0.13 -0.13)\">\n",
911
       "     <use xlink:href=\"#Consolas-32\"/>\n",
912
       "    </g>\n",
913
       "   </g>\n",
914
       "   <g id=\"text_7\">\n",
915
       "    <!-- @ -->\n",
916
       "    <g style=\"fill:#444443;\" transform=\"translate(63.071021 9.451406)scale(0.13 -0.13)\">\n",
917
       "     <defs>\n",
918
       "      <path d=\"M 38.09375 19.921875  Q 37.640625 16.796875 37.59375 14.75  Q 37.546875 12.703125 37.859375 11.53125  Q 38.1875 10.359375 38.859375 9.890625  Q 39.546875 9.421875 40.578125 9.421875  Q 41.9375 9.421875 43.15625 10.859375  Q 44.390625 12.3125 45.34375 15.3125  Q 46.296875 18.3125 46.84375 22.890625  Q 47.40625 27.484375 47.40625 33.796875  Q 47.40625 40.828125 46.53125 46.34375  Q 45.65625 51.859375 43.75 55.71875  Q 41.84375 59.578125 38.796875 61.59375  Q 35.75 63.625 31.390625 63.625  Q 28.078125 63.625 24.96875 61.9375  Q 21.875 60.25 19.203125 57.203125  Q 16.546875 54.15625 14.375 49.875  Q 12.203125 45.609375 10.65625 40.421875  Q 9.125 35.25 8.265625 29.296875  Q 7.421875 23.34375 7.421875 16.890625  Q 7.421875 1.171875 12.15625 -6.5625  Q 16.890625 -14.3125 25.484375 -14.3125  Q 29.828125 -14.3125 33.59375 -13.3125  Q 37.359375 -12.3125 41.40625 -10.296875  L 41.40625 -16.609375  Q 37.40625 -18.453125 33.390625 -19.375  Q 29.390625 -20.3125 25 -20.3125  Q 12.546875 -20.3125 6.5625 -10.984375  Q 0.59375 -1.65625 0.484375 16.796875  Q 0.4375 24.171875 1.453125 30.9375  Q 2.484375 37.703125 4.40625 43.5625  Q 6.34375 49.421875 9.09375 54.21875  Q 11.859375 59.03125 15.34375 62.421875  Q 18.84375 65.828125 22.9375 67.703125  Q 27.046875 69.578125 31.6875 69.578125  Q 37.5 69.578125 41.765625 67.203125  Q 46.046875 64.84375 48.828125 60.375  Q 51.609375 55.90625 52.953125 49.40625  Q 54.296875 42.921875 54.296875 34.625  Q 54.25 26.21875 53.203125 20.234375  Q 52.15625 14.265625 50.25 10.453125  Q 48.34375 6.640625 45.625 4.859375  Q 42.921875 3.078125 39.59375 3.078125  Q 35.796875 3.078125 33.9375 5.03125  Q 32.078125 6.984375 32.078125 10.296875  Q 30.21875 6.546875 28.0625 4.8125  Q 25.921875 3.078125 22.90625 3.078125  Q 18.3125 3.078125 16.015625 6.515625  Q 13.71875 9.96875 13.71875 17.390625  Q 13.71875 20.0625 14.03125 23.140625  Q 14.359375 26.21875 15.109375 29.3125  Q 15.875 32.421875 17.09375 35.28125  Q 18.3125 38.140625 20.09375 40.3125  Q 21.875 42.484375 24.3125 43.796875  Q 26.765625 45.125 29.890625 45.125  Q 31.734375 45.125 33.34375 44.671875  Q 34.96875 44.234375 35.6875 43.796875  L 42 45.3125  z M 33.109375 37.3125  Q 32.671875 37.890625 31.765625 38.34375  Q 30.859375 38.8125 29.5 38.8125  Q 28.03125 38.8125 26.859375 37.78125  Q 25.6875 36.765625 24.78125 35.046875  Q 23.875 33.34375 23.265625 31.171875  Q 22.65625 29 22.234375 26.703125  Q 21.828125 24.421875 21.65625 22.1875  Q 21.484375 19.96875 21.484375 18.21875  Q 21.484375 13.53125 22.0625 11.46875  Q 22.65625 9.421875 24.3125 9.421875  Q 24.90625 9.421875 25.484375 9.65625  Q 26.078125 9.90625 26.734375 10.609375  Q 27.390625 11.328125 28.171875 12.59375  Q 28.953125 13.875 29.890625 15.921875  z \" id=\"Consolas-64\"/>\n",
919
       "     </defs>\n",
920
       "     <use xlink:href=\"#Consolas-64\"/>\n",
921
       "    </g>\n",
922
       "   </g>\n",
923
       "   <g id=\"text_8\">\n",
924
       "    <!--   -->\n",
925
       "    <g style=\"fill:#444443;\" transform=\"translate(69.599621 9.451406)scale(0.13 -0.13)\">\n",
926
       "     <use xlink:href=\"#Consolas-32\"/>\n",
927
       "    </g>\n",
928
       "   </g>\n",
929
       "   <g id=\"text_9\">\n",
930
       "    <!-- b -->\n",
931
       "    <g style=\"fill:#444443;\" transform=\"translate(76.128221 9.451406)scale(0.13 -0.13)\">\n",
932
       "     <use xlink:href=\"#Consolas-98\"/>\n",
933
       "    </g>\n",
934
       "   </g>\n",
935
       "   <g id=\"text_10\">\n",
936
       "    <!--   -->\n",
937
       "    <g style=\"fill:#444443;\" transform=\"translate(82.656821 9.451406)scale(0.13 -0.13)\">\n",
938
       "     <use xlink:href=\"#Consolas-32\"/>\n",
939
       "    </g>\n",
940
       "   </g>\n",
941
       "   <g id=\"text_11\">\n",
942
       "    <!-- + -->\n",
943
       "    <g style=\"fill:#444443;\" transform=\"translate(89.185421 9.451406)scale(0.13 -0.13)\">\n",
944
       "     <defs>\n",
945
       "      <path d=\"M 50.875 22.90625  L 31.6875 22.90625  L 31.6875 2.984375  L 23.296875 2.984375  L 23.296875 22.90625  L 4.109375 22.90625  L 4.109375 30.328125  L 23.296875 30.328125  L 23.296875 50.09375  L 31.6875 50.09375  L 31.6875 30.328125  L 50.875 30.328125  z \" id=\"Consolas-43\"/>\n",
946
       "     </defs>\n",
947
       "     <use xlink:href=\"#Consolas-43\"/>\n",
948
       "    </g>\n",
949
       "   </g>\n",
950
       "   <g id=\"text_12\">\n",
951
       "    <!--   -->\n",
952
       "    <g style=\"fill:#444443;\" transform=\"translate(95.714021 9.451406)scale(0.13 -0.13)\">\n",
953
       "     <use xlink:href=\"#Consolas-32\"/>\n",
954
       "    </g>\n",
955
       "   </g>\n",
956
       "   <g id=\"text_13\">\n",
957
       "    <!-- x -->\n",
958
       "    <g style=\"fill:#444443;\" transform=\"translate(102.242621 9.451406)scale(0.13 -0.13)\">\n",
959
       "     <defs>\n",
960
       "      <path d=\"M 52 0  L 40.71875 0  L 27.484375 18.703125  L 14.40625 0  L 3.421875 0  L 22.40625 24.609375  L 4.296875 49.03125  L 15.1875 49.03125  L 28.078125 30.171875  L 40.71875 49.03125  L 51.21875 49.03125  L 32.8125 24.421875  z \" id=\"Consolas-120\"/>\n",
961
       "     </defs>\n",
962
       "     <use xlink:href=\"#Consolas-120\"/>\n",
963
       "    </g>\n",
964
       "   </g>\n",
965
       "   <g id=\"text_14\">\n",
966
       "    <!--   -->\n",
967
       "    <g style=\"fill:#444443;\" transform=\"translate(108.771221 9.451406)scale(0.13 -0.13)\">\n",
968
       "     <use xlink:href=\"#Consolas-32\"/>\n",
969
       "    </g>\n",
970
       "   </g>\n",
971
       "   <g id=\"text_15\">\n",
972
       "    <!-- * -->\n",
973
       "    <g style=\"fill:#444443;\" transform=\"translate(115.299821 9.451406)scale(0.13 -0.13)\">\n",
974
       "     <defs>\n",
975
       "      <path d=\"M 46.921875 41.015625  L 43.609375 35.203125  L 29.890625 44.28125  L 31 27.59375  L 24.03125 27.59375  L 25.09375 44.28125  L 11.078125 35.203125  L 8.015625 40.921875  L 23 48.296875  L 8.015625 55.8125  L 11.375 61.53125  L 25.203125 52.296875  L 24.03125 69  L 31 69  L 29.78125 52.296875  L 43.609375 61.625  L 47.015625 55.609375  L 31.984375 48.1875  z \" id=\"Consolas-42\"/>\n",
976
       "     </defs>\n",
977
       "     <use xlink:href=\"#Consolas-42\"/>\n",
978
       "    </g>\n",
979
       "   </g>\n",
980
       "   <g id=\"text_16\">\n",
981
       "    <!--   -->\n",
982
       "    <g style=\"fill:#444443;\" transform=\"translate(121.828421 9.451406)scale(0.13 -0.13)\">\n",
983
       "     <use xlink:href=\"#Consolas-32\"/>\n",
984
       "    </g>\n",
985
       "   </g>\n",
986
       "   <g id=\"text_17\">\n",
987
       "    <!-- 3 -->\n",
988
       "    <g style=\"fill:#444443;\" transform=\"translate(128.357021 9.451406)scale(0.13 -0.13)\">\n",
989
       "     <defs>\n",
990
       "      <path d=\"M 48 19.390625  Q 48 15.1875 46.28125 11.5  Q 44.578125 7.8125 41.15625 5.046875  Q 37.75 2.296875 32.5625 0.703125  Q 27.390625 -0.875 20.515625 -0.875  Q 16.703125 -0.875 13.671875 -0.625  Q 10.640625 -0.390625 8.015625 0  L 8.015625 7.625  Q 11.03125 7.078125 14.40625 6.78125  Q 17.78125 6.5 21.296875 6.5  Q 26.078125 6.5 29.46875 7.34375  Q 32.859375 8.203125 35 9.8125  Q 37.15625 11.421875 38.125 13.71875  Q 39.109375 16.015625 39.109375 18.890625  Q 39.109375 21.53125 37.9375 23.484375  Q 36.765625 25.4375 34.640625 26.75  Q 32.515625 28.078125 29.5625 28.734375  Q 26.609375 29.390625 23.09375 29.390625  L 15.828125 29.390625  L 15.828125 36.375  L 23.1875 36.375  Q 26.078125 36.375 28.4375 37.125  Q 30.8125 37.890625 32.5 39.296875  Q 34.1875 40.71875 35.078125 42.796875  Q 35.984375 44.875 35.984375 47.515625  Q 35.984375 52.640625 32.859375 54.984375  Q 29.734375 57.328125 23.6875 57.328125  Q 20.453125 57.328125 17.03125 56.6875  Q 13.625 56.0625 9.71875 54.78125  L 9.71875 62.203125  Q 11.375 62.796875 13.25 63.25  Q 15.140625 63.71875 17.015625 64.03125  Q 18.890625 64.359375 20.75 64.53125  Q 22.609375 64.703125 24.3125 64.703125  Q 29.390625 64.703125 33.25 63.59375  Q 37.109375 62.5 39.6875 60.453125  Q 42.28125 58.40625 43.59375 55.46875  Q 44.921875 52.546875 44.921875 48.875  Q 44.921875 43.40625 42.109375 39.6875  Q 39.3125 35.984375 34.421875 33.796875  Q 36.921875 33.40625 39.328125 32.234375  Q 41.75 31.0625 43.671875 29.21875  Q 45.609375 27.390625 46.796875 24.890625  Q 48 22.40625 48 19.390625  z \" id=\"Consolas-51\"/>\n",
991
       "     </defs>\n",
992
       "     <use xlink:href=\"#Consolas-51\"/>\n",
993
       "    </g>\n",
994
       "   </g>\n",
995
       "   <g id=\"text_18\">\n",
996
       "    <!--   -->\n",
997
       "    <g style=\"fill:#444443;\" transform=\"translate(134.885621 9.451406)scale(0.13 -0.13)\">\n",
998
       "     <use xlink:href=\"#Consolas-32\"/>\n",
999
       "    </g>\n",
1000
       "   </g>\n",
1001
       "   <g id=\"text_19\">\n",
1002
       "    <!-- + -->\n",
1003
       "    <g style=\"fill:#444443;\" transform=\"translate(141.414221 9.451406)scale(0.13 -0.13)\">\n",
1004
       "     <use xlink:href=\"#Consolas-43\"/>\n",
1005
       "    </g>\n",
1006
       "   </g>\n",
1007
       "   <g id=\"text_20\">\n",
1008
       "    <!--   -->\n",
1009
       "    <g style=\"fill:#444443;\" transform=\"translate(147.942821 9.451406)scale(0.13 -0.13)\">\n",
1010
       "     <use xlink:href=\"#Consolas-32\"/>\n",
1011
       "    </g>\n",
1012
       "   </g>\n",
1013
       "   <g id=\"text_21\">\n",
1014
       "    <!-- h -->\n",
1015
       "    <g style=\"fill:#444443;\" transform=\"translate(162.632171 9.451406)scale(0.13 -0.13)\">\n",
1016
       "     <defs>\n",
1017
       "      <path d=\"M 47.21875 0  L 38.71875 0  L 38.71875 31.296875  Q 38.71875 36.96875 36.59375 39.765625  Q 34.46875 42.578125 30.515625 42.578125  Q 28.8125 42.578125 27.3125 42.109375  Q 25.828125 41.65625 24.21875 40.5  Q 22.609375 39.359375 20.703125 37.40625  Q 18.796875 35.453125 16.3125 32.515625  L 16.3125 0  L 7.8125 0  L 7.8125 69  L 16.3125 69  L 16.3125 49.03125  L 16.015625 41.3125  Q 18.015625 43.703125 19.9375 45.328125  Q 21.875 46.96875 23.796875 48  Q 25.734375 49.03125 27.734375 49.46875  Q 29.734375 49.90625 31.890625 49.90625  Q 39.203125 49.90625 43.203125 45.4375  Q 47.21875 40.96875 47.21875 31.984375  z \" id=\"Consolas-104\"/>\n",
1018
       "     </defs>\n",
1019
       "     <use xlink:href=\"#Consolas-104\"/>\n",
1020
       "    </g>\n",
1021
       "   </g>\n",
1022
       "   <g id=\"text_22\">\n",
1023
       "    <!-- . -->\n",
1024
       "    <g style=\"fill:#444443;\" transform=\"translate(177.321521 9.451406)scale(0.13 -0.13)\">\n",
1025
       "     <defs>\n",
1026
       "      <path d=\"M 27.09375 15.375  Q 28.765625 15.375 30.25 14.734375  Q 31.734375 14.109375 32.828125 12.984375  Q 33.9375 11.859375 34.5625 10.375  Q 35.203125 8.890625 35.203125 7.171875  Q 35.203125 5.515625 34.5625 4.046875  Q 33.9375 2.59375 32.828125 1.484375  Q 31.734375 0.390625 30.25 -0.234375  Q 28.765625 -0.875 27.09375 -0.875  Q 25.390625 -0.875 23.921875 -0.234375  Q 22.46875 0.390625 21.359375 1.484375  Q 20.265625 2.59375 19.625 4.046875  Q 19 5.515625 19 7.171875  Q 19 8.890625 19.625 10.375  Q 20.265625 11.859375 21.359375 12.984375  Q 22.46875 14.109375 23.921875 14.734375  Q 25.390625 15.375 27.09375 15.375  z \" id=\"Consolas-46\"/>\n",
1027
       "     </defs>\n",
1028
       "     <use xlink:href=\"#Consolas-46\"/>\n",
1029
       "    </g>\n",
1030
       "   </g>\n",
1031
       "   <g id=\"text_23\">\n",
1032
       "    <!-- d -->\n",
1033
       "    <g style=\"fill:#444443;\" transform=\"translate(183.850121 9.451406)scale(0.13 -0.13)\">\n",
1034
       "     <defs>\n",
1035
       "      <path d=\"M 5.328125 23.484375  Q 5.328125 29.734375 7.03125 34.59375  Q 8.734375 39.453125 11.890625 42.796875  Q 15.046875 46.140625 19.453125 47.875  Q 23.875 49.609375 29.296875 49.609375  Q 31.640625 49.609375 33.90625 49.3125  Q 36.1875 49.03125 38.375 48.390625  L 38.375 69  L 46.921875 69  L 46.921875 0  L 39.3125 0  L 39.015625 9.28125  Q 35.453125 4.109375 31.296875 1.609375  Q 27.15625 -0.875 22.3125 -0.875  Q 18.109375 -0.875 14.90625 0.875  Q 11.71875 2.640625 9.59375 5.828125  Q 7.46875 9.03125 6.390625 13.515625  Q 5.328125 18.015625 5.328125 23.484375  z M 14.015625 24.03125  Q 14.015625 15.140625 16.625 10.765625  Q 19.234375 6.390625 24.03125 6.390625  Q 27.25 6.390625 30.828125 9.265625  Q 34.421875 12.15625 38.375 17.828125  L 38.375 40.578125  Q 36.28125 41.546875 33.734375 42.0625  Q 31.203125 42.578125 28.71875 42.578125  Q 21.78125 42.578125 17.890625 38.078125  Q 14.015625 33.59375 14.015625 24.03125  z \" id=\"Consolas-100\"/>\n",
1036
       "     </defs>\n",
1037
       "     <use xlink:href=\"#Consolas-100\"/>\n",
1038
       "    </g>\n",
1039
       "   </g>\n",
1040
       "   <g id=\"text_24\">\n",
1041
       "    <!-- o -->\n",
1042
       "    <g style=\"fill:#444443;\" transform=\"translate(190.378721 9.451406)scale(0.13 -0.13)\">\n",
1043
       "     <defs>\n",
1044
       "      <path d=\"M 50.484375 24.90625  Q 50.484375 19.1875 48.875 14.421875  Q 47.265625 9.671875 44.234375 6.265625  Q 41.21875 2.875 36.859375 1  Q 32.515625 -0.875 27 -0.875  Q 21.734375 -0.875 17.546875 0.75  Q 13.375 2.390625 10.46875 5.5625  Q 7.5625 8.734375 6.03125 13.421875  Q 4.5 18.109375 4.5 24.21875  Q 4.5 29.9375 6.109375 34.640625  Q 7.71875 39.359375 10.734375 42.75  Q 13.765625 46.140625 18.109375 48.015625  Q 22.46875 49.90625 27.984375 49.90625  Q 33.25 49.90625 37.421875 48.265625  Q 41.609375 46.625 44.5 43.46875  Q 47.40625 40.328125 48.9375 35.640625  Q 50.484375 30.953125 50.484375 24.90625  z M 41.796875 24.515625  Q 41.796875 29.046875 40.796875 32.4375  Q 39.796875 35.84375 37.9375 38.109375  Q 36.078125 40.375 33.421875 41.515625  Q 30.765625 42.671875 27.484375 42.671875  Q 23.6875 42.671875 20.96875 41.1875  Q 18.265625 39.703125 16.53125 37.203125  Q 14.796875 34.71875 13.984375 31.421875  Q 13.1875 28.125 13.1875 24.515625  Q 13.1875 19.96875 14.1875 16.546875  Q 15.1875 13.140625 17.03125 10.859375  Q 18.890625 8.59375 21.53125 7.4375  Q 24.171875 6.296875 27.484375 6.296875  Q 31.296875 6.296875 34 7.78125  Q 36.71875 9.28125 38.453125 11.765625  Q 40.1875 14.265625 40.984375 17.546875  Q 41.796875 20.84375 41.796875 24.515625  z \" id=\"Consolas-111\"/>\n",
1045
       "     </defs>\n",
1046
       "     <use xlink:href=\"#Consolas-111\"/>\n",
1047
       "    </g>\n",
1048
       "   </g>\n",
1049
       "   <g id=\"text_25\">\n",
1050
       "    <!-- t -->\n",
1051
       "    <g style=\"fill:#444443;\" transform=\"translate(196.907321 9.451406)scale(0.13 -0.13)\">\n",
1052
       "     <defs>\n",
1053
       "      <path d=\"M 47.3125 0.6875  Q 44.4375 -0.046875 41.359375 -0.359375  Q 38.28125 -0.6875 35.109375 -0.6875  Q 25.875 -0.6875 21.328125 3.484375  Q 16.796875 7.671875 16.796875 16.3125  L 16.796875 41.890625  L 3.078125 41.890625  L 3.078125 49.03125  L 16.796875 49.03125  L 16.796875 62.5  L 25.296875 64.703125  L 25.296875 49.03125  L 47.3125 49.03125  L 47.3125 41.890625  L 25.296875 41.890625  L 25.296875 17  Q 25.296875 11.71875 28.09375 9.109375  Q 30.90625 6.5 36.375 6.5  Q 38.71875 6.5 41.5 6.859375  Q 44.28125 7.234375 47.3125 8.015625  z \" id=\"Consolas-116\"/>\n",
1054
       "     </defs>\n",
1055
       "     <use xlink:href=\"#Consolas-116\"/>\n",
1056
       "    </g>\n",
1057
       "   </g>\n",
1058
       "   <g id=\"text_26\">\n",
1059
       "    <!-- ( -->\n",
1060
       "    <g style=\"fill:#444443;\" transform=\"translate(203.435921 9.451406)scale(0.13 -0.13)\">\n",
1061
       "     <defs>\n",
1062
       "      <path d=\"M 37.15625 -20.515625  Q 14.65625 0.34375 14.65625 25.59375  Q 14.65625 31.5 15.84375 37.375  Q 17.046875 43.265625 19.703125 49.171875  Q 22.359375 55.078125 26.734375 60.984375  Q 31.109375 66.890625 37.359375 72.703125  L 42.28125 67.671875  Q 23.34375 48.96875 23.34375 26.21875  Q 23.34375 14.890625 28.125 4.4375  Q 32.90625 -6 42.28125 -15.28125  z \" id=\"Consolas-40\"/>\n",
1063
       "     </defs>\n",
1064
       "     <use xlink:href=\"#Consolas-40\"/>\n",
1065
       "    </g>\n",
1066
       "   </g>\n",
1067
       "   <g id=\"text_27\">\n",
1068
       "    <!-- h -->\n",
1069
       "    <g style=\"fill:#444443;\" transform=\"translate(218.125271 9.451406)scale(0.13 -0.13)\">\n",
1070
       "     <use xlink:href=\"#Consolas-104\"/>\n",
1071
       "    </g>\n",
1072
       "   </g>\n",
1073
       "   <g id=\"text_28\">\n",
1074
       "    <!-- ) -->\n",
1075
       "    <g style=\"fill:#444443;\" transform=\"translate(232.814621 9.451406)scale(0.13 -0.13)\">\n",
1076
       "     <defs>\n",
1077
       "      <path d=\"M 17.828125 72.703125  Q 40.328125 51.859375 40.328125 26.3125  Q 40.328125 21.046875 39.25 15.375  Q 38.1875 9.71875 35.59375 3.78125  Q 33.015625 -2.15625 28.640625 -8.25  Q 24.265625 -14.359375 17.625 -20.515625  L 12.703125 -15.484375  Q 22.21875 -6.0625 26.90625 4.1875  Q 31.59375 14.453125 31.59375 25.6875  Q 31.59375 48.921875 12.703125 67.484375  z \" id=\"Consolas-41\"/>\n",
1078
       "     </defs>\n",
1079
       "     <use xlink:href=\"#Consolas-41\"/>\n",
1080
       "    </g>\n",
1081
       "   </g>\n",
1082
       "   <g id=\"text_29\">\n",
1083
       "    <!-- 2k -->\n",
1084
       "    <g transform=\"translate(6.442031 38.802528)rotate(-90)scale(0.09 -0.09)\">\n",
1085
       "     <defs>\n",
1086
       "      <path d=\"M 50.34375 8.453125  L 50.34375 0  L 3.03125 0  Q 2.9375 3.171875 4.046875 6.109375  Q 5.859375 10.9375 9.828125 15.625  Q 13.8125 20.3125 21.34375 26.46875  Q 33.015625 36.03125 37.109375 41.625  Q 41.21875 47.21875 41.21875 52.203125  Q 41.21875 57.421875 37.46875 61  Q 33.734375 64.59375 27.734375 64.59375  Q 21.390625 64.59375 17.578125 60.78125  Q 13.765625 56.984375 13.71875 50.25  L 4.6875 51.171875  Q 5.609375 61.28125 11.65625 66.578125  Q 17.71875 71.875 27.9375 71.875  Q 38.234375 71.875 44.234375 66.15625  Q 50.25 60.453125 50.25 52  Q 50.25 47.703125 48.484375 43.546875  Q 46.734375 39.40625 42.65625 34.8125  Q 38.578125 30.21875 29.109375 22.21875  Q 21.1875 15.578125 18.9375 13.203125  Q 16.703125 10.84375 15.234375 8.453125  z \" id=\"ArialMT-50\"/>\n",
1087
       "      <path d=\"M 6.640625 0  L 6.640625 71.578125  L 15.4375 71.578125  L 15.4375 30.765625  L 36.234375 51.859375  L 47.609375 51.859375  L 27.78125 32.625  L 49.609375 0  L 38.765625 0  L 21.625 26.515625  L 15.4375 20.5625  L 15.4375 0  z \" id=\"ArialMT-107\"/>\n",
1088
       "     </defs>\n",
1089
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
1090
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-107\"/>\n",
1091
       "    </g>\n",
1092
       "   </g>\n",
1093
       "   <g id=\"text_30\">\n",
1094
       "    <!-- 1 -->\n",
1095
       "    <g transform=\"translate(8.339799 21.560896)scale(0.09 -0.09)\">\n",
1096
       "     <defs>\n",
1097
       "      <path d=\"M 37.25 0  L 28.46875 0  L 28.46875 56  Q 25.296875 52.984375 20.140625 49.953125  Q 14.984375 46.921875 10.890625 45.40625  L 10.890625 53.90625  Q 18.265625 57.375 23.78125 62.296875  Q 29.296875 67.234375 31.59375 71.875  L 37.25 71.875  z \" id=\"ArialMT-49\"/>\n",
1098
       "     </defs>\n",
1099
       "     <use xlink:href=\"#ArialMT-49\"/>\n",
1100
       "    </g>\n",
1101
       "   </g>\n",
1102
       "   <g id=\"text_31\">\n",
1103
       "    <!-- 2k -->\n",
1104
       "    <g transform=\"translate(31.903571 38.802528)rotate(-90)scale(0.09 -0.09)\">\n",
1105
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
1106
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-107\"/>\n",
1107
       "    </g>\n",
1108
       "   </g>\n",
1109
       "   <g id=\"text_32\">\n",
1110
       "    <!-- 2k -->\n",
1111
       "    <g transform=\"translate(40.364949 21.560896)scale(0.09 -0.09)\">\n",
1112
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
1113
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-107\"/>\n",
1114
       "    </g>\n",
1115
       "   </g>\n",
1116
       "   <g id=\"text_33\">\n",
1117
       "    <!-- 2k -->\n",
1118
       "    <g transform=\"translate(74.992331 38.802528)rotate(-90)scale(0.09 -0.09)\">\n",
1119
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
1120
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-107\"/>\n",
1121
       "    </g>\n",
1122
       "   </g>\n",
1123
       "   <g id=\"text_34\">\n",
1124
       "    <!-- 1 -->\n",
1125
       "    <g transform=\"translate(76.890099 21.560896)scale(0.09 -0.09)\">\n",
1126
       "     <use xlink:href=\"#ArialMT-49\"/>\n",
1127
       "    </g>\n",
1128
       "   </g>\n",
1129
       "   <g id=\"text_35\">\n",
1130
       "    <!-- 2k -->\n",
1131
       "    <g transform=\"translate(101.106731 38.802528)rotate(-90)scale(0.09 -0.09)\">\n",
1132
       "     <use xlink:href=\"#ArialMT-50\"/>\n",
1133
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-107\"/>\n",
1134
       "    </g>\n",
1135
       "   </g>\n",
1136
       "   <g id=\"text_36\">\n",
1137
       "    <!-- 1 -->\n",
1138
       "    <g transform=\"translate(103.004499 21.560896)scale(0.09 -0.09)\">\n",
1139
       "     <use xlink:href=\"#ArialMT-49\"/>\n",
1140
       "    </g>\n",
1141
       "   </g>\n",
1142
       "   <g id=\"text_37\">\n",
1143
       "    <!-- 1m -->\n",
1144
       "    <g transform=\"translate(159.64569 21.560896)scale(0.09 -0.09)\">\n",
1145
       "     <defs>\n",
1146
       "      <path d=\"M 6.59375 0  L 6.59375 51.859375  L 14.453125 51.859375  L 14.453125 44.578125  Q 16.890625 48.390625 20.9375 50.703125  Q 25 53.03125 30.171875 53.03125  Q 35.9375 53.03125 39.625 50.640625  Q 43.3125 48.25 44.828125 43.953125  Q 50.984375 53.03125 60.84375 53.03125  Q 68.5625 53.03125 72.703125 48.75  Q 76.859375 44.484375 76.859375 35.59375  L 76.859375 0  L 68.109375 0  L 68.109375 32.671875  Q 68.109375 37.9375 67.25 40.25  Q 66.40625 42.578125 64.15625 43.984375  Q 61.921875 45.40625 58.890625 45.40625  Q 53.421875 45.40625 49.796875 41.765625  Q 46.1875 38.140625 46.1875 30.125  L 46.1875 0  L 37.40625 0  L 37.40625 33.6875  Q 37.40625 39.546875 35.25 42.46875  Q 33.109375 45.40625 28.21875 45.40625  Q 24.515625 45.40625 21.359375 43.453125  Q 18.21875 41.5 16.796875 37.734375  Q 15.375 33.984375 15.375 26.90625  L 15.375 0  z \" id=\"ArialMT-109\"/>\n",
1147
       "     </defs>\n",
1148
       "     <use xlink:href=\"#ArialMT-49\"/>\n",
1149
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-109\"/>\n",
1150
       "    </g>\n",
1151
       "   </g>\n",
1152
       "   <g id=\"text_38\">\n",
1153
       "    <!-- 1m -->\n",
1154
       "    <g transform=\"translate(215.13879 21.560896)scale(0.09 -0.09)\">\n",
1155
       "     <use xlink:href=\"#ArialMT-49\"/>\n",
1156
       "     <use x=\"55.615234\" xlink:href=\"#ArialMT-109\"/>\n",
1157
       "    </g>\n",
1158
       "   </g>\n",
1159
       "  </g>\n",
1160
       " </g>\n",
1161
       " <defs>\n",
1162
       "  <clipPath id=\"pd89de14d64\">\n",
1163
       "   <rect height=\"41.491069\" width=\"238.7403\" x=\"0.602921\" y=\"4.504646\"/>\n",
1164
       "  </clipPath>\n",
1165
       " </defs>\n",
1166
       "</svg>"
1167
      ],
1168
      "text/plain": [
1169
       "<IPython.core.display.SVG object>"
1170
      ]
1171
     },
1172
     "metadata": {},
1173
     "output_type": "display_data"
1174
    }
1175
   ],
1176
   "source": [
1177
    "W = torch.rand(size=(2000,2000))\n",
1178
    "b = torch.rand(size=(2000,1))\n",
1179
    "h = torch.rand(size=(1_000_000,))\n",
1180
    "x = torch.rand(size=(2000,1))\n",
1181
    "\n",
1182
    "with tsensor.explain():\n",
1183
    "    a = torch.relu(x)\n",
1184
    "    b = W @ b + x * 3 + h.dot(h)"
1185
   ]
1186
  },
1187
  {
1188
   "cell_type": "markdown",
1189
   "id": "8339f350-8eef-4dd4-9356-685b1192df25",
1190
   "metadata": {},
1191
   "source": [
1192
    "## Abstract syntax tree (AST) with operand shapes"
1193
   ]
1194
  },
1195
  {
1196
   "cell_type": "code",
1197
   "execution_count": 7,
1198
   "id": "3adf24ee-a9c2-4cf5-bfa5-2b8cf245d00d",
1199
   "metadata": {},
1200
   "outputs": [
1201
    {
1202
     "data": {
1203
      "image/svg+xml": [
1204
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
1205
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
1206
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
1207
       "<!-- Generated by graphviz version 2.49.1 (20210923.0004)\n",
1208
       " -->\n",
1209
       "<!-- Title: G Pages: 1 -->\n",
1210
       "<svg width=\"343pt\" height=\"302pt\"\n",
1211
       " viewBox=\"0.00 0.00 343.00 302.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
1212
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 298)\">\n",
1213
       "<title>G</title>\n",
1214
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-298 339,-298 339,4 -4,4\"/>\n",
1215
       "<!-- leaf140484086217408 -->\n",
1216
       "<g id=\"node1\" class=\"node\">\n",
1217
       "<title>leaf140484086217408</title>\n",
1218
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"7,-294 0,-294 0,-258 7,-258 7,-294\"/>\n",
1219
       "<text text-anchor=\"start\" x=\"0\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">h</text>\n",
1220
       "</g>\n",
1221
       "<!-- leaf140484086218128 -->\n",
1222
       "<g id=\"node2\" class=\"node\">\n",
1223
       "<title>leaf140484086218128</title>\n",
1224
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"26.5,-294 8.5,-294 8.5,-258 26.5,-258 26.5,-294\"/>\n",
1225
       "<text text-anchor=\"start\" x=\"14\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">=</text>\n",
1226
       "</g>\n",
1227
       "<!-- leaf140484086217408&#45;&gt;leaf140484086218128 -->\n",
1228
       "<!-- leaf140484086218416 -->\n",
1229
       "<g id=\"node3\" class=\"node\">\n",
1230
       "<title>leaf140484086218416</title>\n",
1231
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"61,-294 28,-294 28,-258 61,-258 61,-294\"/>\n",
1232
       "<text text-anchor=\"start\" x=\"28\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">torch</text>\n",
1233
       "</g>\n",
1234
       "<!-- leaf140484086218128&#45;&gt;leaf140484086218416 -->\n",
1235
       "<!-- leaf140484086218464 -->\n",
1236
       "<g id=\"node4\" class=\"node\">\n",
1237
       "<title>leaf140484086218464</title>\n",
1238
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"69,-294 62,-294 62,-258 69,-258 69,-294\"/>\n",
1239
       "<text text-anchor=\"start\" x=\"62\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">.</text>\n",
1240
       "</g>\n",
1241
       "<!-- leaf140484086218416&#45;&gt;leaf140484086218464 -->\n",
1242
       "<!-- leaf140484086218224 -->\n",
1243
       "<g id=\"node5\" class=\"node\">\n",
1244
       "<title>leaf140484086218224</title>\n",
1245
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"97,-294 70,-294 70,-258 97,-258 97,-294\"/>\n",
1246
       "<text text-anchor=\"start\" x=\"70\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">tanh</text>\n",
1247
       "</g>\n",
1248
       "<!-- leaf140484086218464&#45;&gt;leaf140484086218224 -->\n",
1249
       "<!-- leaf140484086218512 -->\n",
1250
       "<g id=\"node6\" class=\"node\">\n",
1251
       "<title>leaf140484086218512</title>\n",
1252
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"105,-294 98,-294 98,-258 105,-258 105,-294\"/>\n",
1253
       "<text text-anchor=\"start\" x=\"98\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">(</text>\n",
1254
       "</g>\n",
1255
       "<!-- leaf140484086218224&#45;&gt;leaf140484086218512 -->\n",
1256
       "<!-- leaf140484086217456 -->\n",
1257
       "<g id=\"node7\" class=\"node\">\n",
1258
       "<title>leaf140484086217456</title>\n",
1259
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"126.5,-294 106.5,-294 106.5,-258 126.5,-258 126.5,-294\"/>\n",
1260
       "<text text-anchor=\"start\" x=\"106.5\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">Whh</text>\n",
1261
       "</g>\n",
1262
       "<!-- leaf140484086218512&#45;&gt;leaf140484086217456 -->\n",
1263
       "<!-- leaf140484086218608 -->\n",
1264
       "<g id=\"node8\" class=\"node\">\n",
1265
       "<title>leaf140484086218608</title>\n",
1266
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"141.5,-294 127.5,-294 127.5,-258 141.5,-258 141.5,-294\"/>\n",
1267
       "<text text-anchor=\"start\" x=\"131\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">@</text>\n",
1268
       "</g>\n",
1269
       "<!-- leaf140484086217456&#45;&gt;leaf140484086218608 -->\n",
1270
       "<!-- leaf140484086217168 -->\n",
1271
       "<g id=\"node9\" class=\"node\">\n",
1272
       "<title>leaf140484086217168</title>\n",
1273
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"150,-294 143,-294 143,-258 150,-258 150,-294\"/>\n",
1274
       "<text text-anchor=\"start\" x=\"143\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">(</text>\n",
1275
       "</g>\n",
1276
       "<!-- leaf140484086218608&#45;&gt;leaf140484086217168 -->\n",
1277
       "<!-- leaf140484086218272 -->\n",
1278
       "<g id=\"node10\" class=\"node\">\n",
1279
       "<title>leaf140484086218272</title>\n",
1280
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"158,-294 151,-294 151,-258 158,-258 158,-294\"/>\n",
1281
       "<text text-anchor=\"start\" x=\"151\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">r</text>\n",
1282
       "</g>\n",
1283
       "<!-- leaf140484086217168&#45;&gt;leaf140484086218272 -->\n",
1284
       "<!-- leaf140484086218704 -->\n",
1285
       "<g id=\"node11\" class=\"node\">\n",
1286
       "<title>leaf140484086218704</title>\n",
1287
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"173.5,-294 159.5,-294 159.5,-258 173.5,-258 173.5,-294\"/>\n",
1288
       "<text text-anchor=\"start\" x=\"163\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">*</text>\n",
1289
       "</g>\n",
1290
       "<!-- leaf140484086218272&#45;&gt;leaf140484086218704 -->\n",
1291
       "<!-- leaf140484086217552 -->\n",
1292
       "<g id=\"node12\" class=\"node\">\n",
1293
       "<title>leaf140484086217552</title>\n",
1294
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"182,-294 175,-294 175,-258 182,-258 182,-294\"/>\n",
1295
       "<text text-anchor=\"start\" x=\"175\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">h</text>\n",
1296
       "</g>\n",
1297
       "<!-- leaf140484086218704&#45;&gt;leaf140484086217552 -->\n",
1298
       "<!-- leaf140484086217648 -->\n",
1299
       "<g id=\"node13\" class=\"node\">\n",
1300
       "<title>leaf140484086217648</title>\n",
1301
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"190,-294 183,-294 183,-258 190,-258 190,-294\"/>\n",
1302
       "<text text-anchor=\"start\" x=\"183\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">)</text>\n",
1303
       "</g>\n",
1304
       "<!-- leaf140484086217552&#45;&gt;leaf140484086217648 -->\n",
1305
       "<!-- leaf140484086217504 -->\n",
1306
       "<g id=\"node14\" class=\"node\">\n",
1307
       "<title>leaf140484086217504</title>\n",
1308
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"220,-294 191,-294 191,-258 220,-258 220,-294\"/>\n",
1309
       "<text text-anchor=\"start\" x=\"202\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">+</text>\n",
1310
       "</g>\n",
1311
       "<!-- leaf140484086217648&#45;&gt;leaf140484086217504 -->\n",
1312
       "<!-- leaf140484086217792 -->\n",
1313
       "<g id=\"node15\" class=\"node\">\n",
1314
       "<title>leaf140484086217792</title>\n",
1315
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"241.5,-294 221.5,-294 221.5,-258 241.5,-258 241.5,-294\"/>\n",
1316
       "<text text-anchor=\"start\" x=\"221.5\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">Uxh</text>\n",
1317
       "</g>\n",
1318
       "<!-- leaf140484086217504&#45;&gt;leaf140484086217792 -->\n",
1319
       "<!-- leaf140484086216976 -->\n",
1320
       "<g id=\"node16\" class=\"node\">\n",
1321
       "<title>leaf140484086216976</title>\n",
1322
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"256.5,-294 242.5,-294 242.5,-258 256.5,-258 256.5,-294\"/>\n",
1323
       "<text text-anchor=\"start\" x=\"246\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">@</text>\n",
1324
       "</g>\n",
1325
       "<!-- leaf140484086217792&#45;&gt;leaf140484086216976 -->\n",
1326
       "<!-- leaf140484086214864 -->\n",
1327
       "<g id=\"node17\" class=\"node\">\n",
1328
       "<title>leaf140484086214864</title>\n",
1329
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"265,-294 258,-294 258,-258 265,-258 265,-294\"/>\n",
1330
       "<text text-anchor=\"start\" x=\"258\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">X</text>\n",
1331
       "</g>\n",
1332
       "<!-- leaf140484086216976&#45;&gt;leaf140484086214864 -->\n",
1333
       "<!-- leaf140484086217072 -->\n",
1334
       "<g id=\"node18\" class=\"node\">\n",
1335
       "<title>leaf140484086217072</title>\n",
1336
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"273,-294 266,-294 266,-258 273,-258 273,-294\"/>\n",
1337
       "<text text-anchor=\"start\" x=\"266\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">.</text>\n",
1338
       "</g>\n",
1339
       "<!-- leaf140484086214864&#45;&gt;leaf140484086217072 -->\n",
1340
       "<!-- leaf140484086217024 -->\n",
1341
       "<g id=\"node19\" class=\"node\">\n",
1342
       "<title>leaf140484086217024</title>\n",
1343
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"281,-294 274,-294 274,-258 281,-258 281,-294\"/>\n",
1344
       "<text text-anchor=\"start\" x=\"274\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">T</text>\n",
1345
       "</g>\n",
1346
       "<!-- leaf140484086217072&#45;&gt;leaf140484086217024 -->\n",
1347
       "<!-- leaf140484086218176 -->\n",
1348
       "<g id=\"node20\" class=\"node\">\n",
1349
       "<title>leaf140484086218176</title>\n",
1350
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"311,-294 282,-294 282,-258 311,-258 311,-294\"/>\n",
1351
       "<text text-anchor=\"start\" x=\"293\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">+</text>\n",
1352
       "</g>\n",
1353
       "<!-- leaf140484086217024&#45;&gt;leaf140484086218176 -->\n",
1354
       "<!-- leaf140484086215008 -->\n",
1355
       "<g id=\"node21\" class=\"node\">\n",
1356
       "<title>leaf140484086215008</title>\n",
1357
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"326.5,-294 312.5,-294 312.5,-258 326.5,-258 326.5,-294\"/>\n",
1358
       "<text text-anchor=\"start\" x=\"312.5\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">bh</text>\n",
1359
       "</g>\n",
1360
       "<!-- leaf140484086218176&#45;&gt;leaf140484086215008 -->\n",
1361
       "<!-- leaf140484086217888 -->\n",
1362
       "<g id=\"node22\" class=\"node\">\n",
1363
       "<title>leaf140484086217888</title>\n",
1364
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"335,-294 328,-294 328,-258 335,-258 335,-294\"/>\n",
1365
       "<text text-anchor=\"start\" x=\"328\" y=\"-272.9\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">)</text>\n",
1366
       "</g>\n",
1367
       "<!-- leaf140484086215008&#45;&gt;leaf140484086217888 -->\n",
1368
       "<!-- node140484086217360 -->\n",
1369
       "<g id=\"node23\" class=\"node\">\n",
1370
       "<title>node140484086217360</title>\n",
1371
       "<polygon fill=\"none\" stroke=\"black\" stroke-width=\"0\" points=\"78.5,-232.5 60.5,-232.5 60.5,-218.5 78.5,-218.5 78.5,-232.5\"/>\n",
1372
       "<text text-anchor=\"start\" x=\"66\" y=\"-222.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#000000\">.</text>\n",
1373
       "</g>\n",
1374
       "<!-- node140484086217360&#45;&gt;leaf140484086218416 -->\n",
1375
       "<g id=\"edge22\" class=\"edge\">\n",
1376
       "<title>node140484086217360&#45;&gt;leaf140484086218416</title>\n",
1377
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M64.77,-235.68C61.58,-241.86 57.29,-250.19 53.47,-257.59\"/>\n",
1378
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"65.79,-235.99 66.23,-232.84 63.92,-235.03 65.79,-235.99\"/>\n",
1379
       "</g>\n",
1380
       "<!-- node140484086217360&#45;&gt;leaf140484086218224 -->\n",
1381
       "<g id=\"edge23\" class=\"edge\">\n",
1382
       "<title>node140484086217360&#45;&gt;leaf140484086218224</title>\n",
1383
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M72.25,-236.02C74.02,-242.16 76.38,-250.32 78.47,-257.59\"/>\n",
1384
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"73.17,-235.43 71.33,-232.84 71.15,-236.01 73.17,-235.43\"/>\n",
1385
       "</g>\n",
1386
       "<!-- node140484086217744 -->\n",
1387
       "<g id=\"node24\" class=\"node\">\n",
1388
       "<title>node140484086217744</title>\n",
1389
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"176.5,-236 156.5,-236 156.5,-215 176.5,-215 176.5,-236\"/>\n",
1390
       "<text text-anchor=\"start\" x=\"163\" y=\"-227.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">*</text>\n",
1391
       "<text text-anchor=\"start\" x=\"156.5\" y=\"-217.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">1kx1</text>\n",
1392
       "</g>\n",
1393
       "<!-- node140484086217744&#45;&gt;leaf140484086218272 -->\n",
1394
       "<g id=\"edge24\" class=\"edge\">\n",
1395
       "<title>node140484086217744&#45;&gt;leaf140484086218272</title>\n",
1396
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M163.31,-239.39C161.69,-245.92 159.73,-253.87 158.06,-260.6\"/>\n",
1397
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"164.37,-239.48 164.07,-236.31 162.33,-238.97 164.37,-239.48\"/>\n",
1398
       "</g>\n",
1399
       "<!-- node140484086217744&#45;&gt;leaf140484086217552 -->\n",
1400
       "<g id=\"edge25\" class=\"edge\">\n",
1401
       "<title>node140484086217744&#45;&gt;leaf140484086217552</title>\n",
1402
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M169.69,-239.39C171.31,-245.92 173.27,-253.87 174.94,-260.6\"/>\n",
1403
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"170.67,-238.97 168.93,-236.31 168.63,-239.48 170.67,-238.97\"/>\n",
1404
       "</g>\n",
1405
       "<!-- node140484086215824 -->\n",
1406
       "<g id=\"node25\" class=\"node\">\n",
1407
       "<title>node140484086215824</title>\n",
1408
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"176.5,-193 156.5,-193 156.5,-172 176.5,-172 176.5,-193\"/>\n",
1409
       "<text text-anchor=\"start\" x=\"163\" y=\"-184.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">@</text>\n",
1410
       "<text text-anchor=\"start\" x=\"156.5\" y=\"-174.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">1kx1</text>\n",
1411
       "</g>\n",
1412
       "<!-- node140484086215824&#45;&gt;leaf140484086217456 -->\n",
1413
       "<g id=\"edge26\" class=\"edge\">\n",
1414
       "<title>node140484086215824&#45;&gt;leaf140484086217456</title>\n",
1415
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M159.7,-195.95C150.96,-211.95 135.73,-239.81 125.89,-257.82\"/>\n",
1416
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"160.63,-196.43 161.15,-193.29 158.79,-195.42 160.63,-196.43\"/>\n",
1417
       "</g>\n",
1418
       "<!-- node140484086215824&#45;&gt;node140484086217744 -->\n",
1419
       "<g id=\"edge27\" class=\"edge\">\n",
1420
       "<title>node140484086215824&#45;&gt;node140484086217744</title>\n",
1421
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M166.5,-196.21C166.5,-202.19 166.5,-209.21 166.5,-214.76\"/>\n",
1422
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"167.55,-196.01 166.5,-193.01 165.45,-196.01 167.55,-196.01\"/>\n",
1423
       "</g>\n",
1424
       "<!-- node140484086218656 -->\n",
1425
       "<g id=\"node26\" class=\"node\">\n",
1426
       "<title>node140484086218656</title>\n",
1427
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"279,-236 244,-236 244,-215 279,-215 279,-236\"/>\n",
1428
       "<text text-anchor=\"start\" x=\"258\" y=\"-227.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">.</text>\n",
1429
       "<text text-anchor=\"start\" x=\"244\" y=\"-217.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">764x200</text>\n",
1430
       "</g>\n",
1431
       "<!-- node140484086218656&#45;&gt;leaf140484086214864 -->\n",
1432
       "<g id=\"edge28\" class=\"edge\">\n",
1433
       "<title>node140484086218656&#45;&gt;leaf140484086214864</title>\n",
1434
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M261.5,-239.35C261.5,-245.05 261.5,-251.83 261.5,-257.93\"/>\n",
1435
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"262.55,-239.31 261.5,-236.31 260.45,-239.31 262.55,-239.31\"/>\n",
1436
       "</g>\n",
1437
       "<!-- node140484086218656&#45;&gt;leaf140484086217024 -->\n",
1438
       "<g id=\"edge29\" class=\"edge\">\n",
1439
       "<title>node140484086218656&#45;&gt;leaf140484086217024</title>\n",
1440
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M265.79,-239.49C268.33,-247.21 271.52,-256.89 273.93,-264.19\"/>\n",
1441
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"266.67,-238.83 264.74,-236.31 264.68,-239.49 266.67,-238.83\"/>\n",
1442
       "</g>\n",
1443
       "<!-- node140484086218320 -->\n",
1444
       "<g id=\"node27\" class=\"node\">\n",
1445
       "<title>node140484086218320</title>\n",
1446
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"246.5,-193 216.5,-193 216.5,-172 246.5,-172 246.5,-193\"/>\n",
1447
       "<text text-anchor=\"start\" x=\"228\" y=\"-184.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">@</text>\n",
1448
       "<text text-anchor=\"start\" x=\"216.5\" y=\"-174.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">1kx200</text>\n",
1449
       "</g>\n",
1450
       "<!-- node140484086218320&#45;&gt;leaf140484086217792 -->\n",
1451
       "<g id=\"edge30\" class=\"edge\">\n",
1452
       "<title>node140484086218320&#45;&gt;leaf140484086217792</title>\n",
1453
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M231.5,-196.35C231.5,-212.41 231.5,-239.96 231.5,-257.82\"/>\n",
1454
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"232.55,-196.29 231.5,-193.29 230.45,-196.29 232.55,-196.29\"/>\n",
1455
       "</g>\n",
1456
       "<!-- node140484086218320&#45;&gt;node140484086218656 -->\n",
1457
       "<g id=\"edge31\" class=\"edge\">\n",
1458
       "<title>node140484086218320&#45;&gt;node140484086218656</title>\n",
1459
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M240.32,-195.55C244.79,-201.67 250.16,-209 254.37,-214.76\"/>\n",
1460
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"241.08,-194.81 238.46,-193.01 239.38,-196.05 241.08,-194.81\"/>\n",
1461
       "</g>\n",
1462
       "<!-- node140484630812608 -->\n",
1463
       "<g id=\"node28\" class=\"node\">\n",
1464
       "<title>node140484630812608</title>\n",
1465
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"219.5,-150 189.5,-150 189.5,-129 219.5,-129 219.5,-150\"/>\n",
1466
       "<text text-anchor=\"start\" x=\"201\" y=\"-141.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">+</text>\n",
1467
       "<text text-anchor=\"start\" x=\"189.5\" y=\"-131.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">1kx200</text>\n",
1468
       "</g>\n",
1469
       "<!-- node140484630812608&#45;&gt;node140484086215824 -->\n",
1470
       "<g id=\"edge32\" class=\"edge\">\n",
1471
       "<title>node140484630812608&#45;&gt;node140484086215824</title>\n",
1472
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M193.64,-152.22C187.91,-158.4 180.96,-165.9 175.53,-171.76\"/>\n",
1473
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"194.42,-152.92 195.69,-150.01 192.88,-151.5 194.42,-152.92\"/>\n",
1474
       "</g>\n",
1475
       "<!-- node140484630812608&#45;&gt;node140484086218320 -->\n",
1476
       "<g id=\"edge33\" class=\"edge\">\n",
1477
       "<title>node140484630812608&#45;&gt;node140484086218320</title>\n",
1478
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M212.43,-152.55C216.46,-158.67 221.29,-166 225.08,-171.76\"/>\n",
1479
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"213.29,-151.94 210.76,-150.01 211.54,-153.09 213.29,-151.94\"/>\n",
1480
       "</g>\n",
1481
       "<!-- node140484630812512 -->\n",
1482
       "<g id=\"node29\" class=\"node\">\n",
1483
       "<title>node140484630812512</title>\n",
1484
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"219.5,-107 189.5,-107 189.5,-86 219.5,-86 219.5,-107\"/>\n",
1485
       "<text text-anchor=\"start\" x=\"201\" y=\"-98.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">+</text>\n",
1486
       "<text text-anchor=\"start\" x=\"189.5\" y=\"-88.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">1kx200</text>\n",
1487
       "</g>\n",
1488
       "<!-- node140484630812512&#45;&gt;leaf140484086215008 -->\n",
1489
       "<g id=\"edge35\" class=\"edge\">\n",
1490
       "<title>node140484630812512&#45;&gt;leaf140484086215008</title>\n",
1491
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M212.39,-109.68C233.69,-142.55 292.1,-232.71 312.42,-264.07\"/>\n",
1492
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"213.2,-108.99 210.68,-107.04 211.43,-110.13 213.2,-108.99\"/>\n",
1493
       "</g>\n",
1494
       "<!-- node140484630812512&#45;&gt;node140484630812608 -->\n",
1495
       "<g id=\"edge34\" class=\"edge\">\n",
1496
       "<title>node140484630812512&#45;&gt;node140484630812608</title>\n",
1497
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M204.5,-110.21C204.5,-116.19 204.5,-123.21 204.5,-128.76\"/>\n",
1498
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"205.55,-110.01 204.5,-107.01 203.45,-110.01 205.55,-110.01\"/>\n",
1499
       "</g>\n",
1500
       "<!-- node140484630811792 -->\n",
1501
       "<g id=\"node30\" class=\"node\">\n",
1502
       "<title>node140484630811792</title>\n",
1503
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"89.5,-64 49.5,-64 49.5,-43 89.5,-43 89.5,-64\"/>\n",
1504
       "<text text-anchor=\"start\" x=\"49.5\" y=\"-55.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">tanh()</text>\n",
1505
       "<text text-anchor=\"start\" x=\"54.5\" y=\"-45.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">1kx200</text>\n",
1506
       "</g>\n",
1507
       "<!-- node140484630811792&#45;&gt;node140484086217360 -->\n",
1508
       "<g id=\"edge36\" class=\"edge\">\n",
1509
       "<title>node140484630811792&#45;&gt;node140484086217360</title>\n",
1510
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M69.5,-67.24C69.5,-101.35 69.5,-193.81 69.5,-218.42\"/>\n",
1511
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"70.55,-67.13 69.5,-64.13 68.45,-67.13 70.55,-67.13\"/>\n",
1512
       "</g>\n",
1513
       "<!-- node140484630811792&#45;&gt;node140484630812512 -->\n",
1514
       "<g id=\"edge37\" class=\"edge\">\n",
1515
       "<title>node140484630811792&#45;&gt;node140484630812512</title>\n",
1516
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M92.66,-61.53C120.26,-69.92 165.61,-83.69 189.19,-90.85\"/>\n",
1517
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"92.89,-60.51 89.71,-60.64 92.28,-62.51 92.89,-60.51\"/>\n",
1518
       "</g>\n",
1519
       "<!-- node140484630812848 -->\n",
1520
       "<g id=\"node31\" class=\"node\">\n",
1521
       "<title>node140484630812848</title>\n",
1522
       "<polygon fill=\"#cfe2d4\" stroke=\"black\" stroke-width=\"0\" points=\"44.5,-21 14.5,-21 14.5,0 44.5,0 44.5,-21\"/>\n",
1523
       "<text text-anchor=\"start\" x=\"26\" y=\"-12.4\" font-family=\"Consolas\" font-size=\"12.00\" fill=\"#444443\">=</text>\n",
1524
       "<text text-anchor=\"start\" x=\"14.5\" y=\"-2.8\" font-family=\"Arial\" font-size=\"9.00\" fill=\"#444443\">1kx200</text>\n",
1525
       "</g>\n",
1526
       "<!-- node140484630812848&#45;&gt;leaf140484086217408 -->\n",
1527
       "<g id=\"edge38\" class=\"edge\">\n",
1528
       "<title>node140484630812848&#45;&gt;leaf140484086217408</title>\n",
1529
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M26.75,-24.38C23.49,-40.81 18.5,-70.13 18.5,-95.5 18.5,-95.5 18.5,-95.5 18.5,-183.5 18.5,-211.67 11.49,-244.08 7.05,-261.78\"/>\n",
1530
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"27.82,-24.42 27.38,-21.27 25.76,-24.01 27.82,-24.42\"/>\n",
1531
       "</g>\n",
1532
       "<!-- node140484630812848&#45;&gt;node140484630811792 -->\n",
1533
       "<g id=\"edge39\" class=\"edge\">\n",
1534
       "<title>node140484630812848&#45;&gt;node140484630811792</title>\n",
1535
       "<path fill=\"none\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" d=\"M40.94,-23.22C46.97,-29.4 54.28,-36.9 60,-42.76\"/>\n",
1536
       "<polygon fill=\"#6b6b6b\" stroke=\"#6b6b6b\" stroke-width=\"0.5\" points=\"41.62,-22.42 38.78,-21.01 40.12,-23.89 41.62,-22.42\"/>\n",
1537
       "</g>\n",
1538
       "</g>\n",
1539
       "</svg>\n"
1540
      ],
1541
      "text/plain": [
1542
       "<tsensor.viz.QuietGraphvizWrapper at 0x7fc56056cca0>"
1543
      ]
1544
     },
1545
     "execution_count": 7,
1546
     "metadata": {},
1547
     "output_type": "execute_result"
1548
    }
1549
   ],
1550
   "source": [
1551
    "n = 200         # number of instances\n",
1552
    "d = 764         # number of instance features\n",
1553
    "nhidden = 1000\n",
1554
    "\n",
1555
    "Whh = torch.eye(nhidden, nhidden)   # Identity matrix\n",
1556
    "Uxh = torch.randn(nhidden, d)\n",
1557
    "bh  = torch.zeros(nhidden, 1)\n",
1558
    "h = torch.randn(nhidden, 1)         # fake previous hidden state h\n",
1559
    "r = torch.randn(nhidden, 1)         # fake this computation\n",
1560
    "X = torch.rand(n,d)                 # fake input\n",
1561
    "\n",
1562
    "tsensor.astviz(\"h = torch.tanh(Whh @ (r*h) + Uxh @ X.T + bh)\")"
1563
   ]
1564
  },
1565
  {
1566
   "cell_type": "markdown",
1567
   "id": "be09d055-2ab1-422f-a5ab-6559c029a613",
1568
   "metadata": {},
1569
   "source": [
1570
    "## For slides"
1571
   ]
1572
  },
1573
  {
1574
   "cell_type": "markdown",
1575
   "id": "dec46212-54af-46ac-8c5a-57023b86b6ca",
1576
   "metadata": {},
1577
   "source": [
1578
    "### Try print statements"
1579
   ]
1580
  },
1581
  {
1582
   "cell_type": "code",
1583
   "execution_count": null,
1584
   "id": "c85c7bde-ecaf-4d2c-b542-6bdcfe23f1ea",
1585
   "metadata": {},
1586
   "outputs": [],
1587
   "source": [
1588
    "import torch\n",
1589
    "\n",
1590
    "n = 200         # number of instances\n",
1591
    "d = 764         # number of instance features\n",
1592
    "nhidden = 256\n",
1593
    "\n",
1594
    "Whh = torch.eye(nhidden, nhidden)   # Identity matrix\n",
1595
    "Uxh = torch.randn(d, nhidden)\n",
1596
    "bh  = torch.zeros(nhidden, 1)\n",
1597
    "h = torch.randn(nhidden, 1)         # fake previous hidden state h\n",
1598
    "r = torch.randn(nhidden, 1)         # fake this computation\n",
1599
    "X = torch.rand(n,d)                 # fake input\n",
1600
    "\n",
1601
    "print(Whh.shape, r.shape, h.shape, Uxh.shape, X.shape, bh.shape)\n",
1602
    "print((r*h).shape)\n",
1603
    "print((Whh@(r*h)).shape)\n",
1604
    "print((Uxh@X.T).shape) # <-- exception!\n",
1605
    "print((Whh@(r*h)+Uxh@X.T).shape)\n",
1606
    "print((Whh@(r*h)+Uxh@X.T+bh).shape)\n",
1607
    "h = torch.tanh(Whh @ (r*h) + Uxh @ X.T + bh)"
1608
   ]
1609
  }
1610
 ],
1611
 "metadata": {
1612
  "kernelspec": {
1613
   "display_name": "Python 3",
1614
   "language": "python",
1615
   "name": "python3"
1616
  },
1617
  "language_info": {
1618
   "codemirror_mode": {
1619
    "name": "ipython",
1620
    "version": 3
1621
   },
1622
   "file_extension": ".py",
1623
   "mimetype": "text/x-python",
1624
   "name": "python",
1625
   "nbconvert_exporter": "python",
1626
   "pygments_lexer": "ipython3",
1627
   "version": "3.8.8"
1628
  }
1629
 },
1630
 "nbformat": 4,
1631
 "nbformat_minor": 5
1632
}
1633

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.