diff --git a/.gitattributes b/.gitattributes
index 96e6adf..de3f538 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1 @@
-toydiff/_version.py export-subst
+avagrad/_version.py export-subst
diff --git a/ALTERNATIVES.md b/ALTERNATIVES.md
index 14ff8db..0db54ac 100644
--- a/ALTERNATIVES.md
+++ b/ALTERNATIVES.md
@@ -6,3 +6,4 @@ Alternatives that do same or very similar stuff:
* [TinyGrad](https://github.com/tinygrad/tinygrad)
* [JAX](https://github.com/google/jax)
* [MyGrad](https://github.com/rsokl/MyGrad)
+* [MXNet](https://github.com/apache/mxnet)
diff --git a/MANIFEST.in b/MANIFEST.in
index 9e2c437..8005b54 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,7 +1,7 @@
include pyproject.toml
include versioneer.py
-include toydiff/_version.py
-include src/toydiff/_version.py
+include avagrad/_version.py
+include src/avagrad/_version.py
# Include the README
# include *.md
diff --git a/README.md b/README.md
index 5f2ebdb..ce13d33 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
-# Toydiff
+
+
+
-`toydiff` is a simple automatic differentiation library that I created to wrap
+`avagrad` is a simple automatic differentiation library that I created to wrap
my head around how autodiff works. It is built using NumPy and SciPy and it has
been tested using PyTorch as a reference.
@@ -10,21 +12,22 @@ networks (WIP, only linear layers for now).
## Installation
Normal user:
```bash
-git clone https://github.com/Xylambda/toydiff.git
-pip install toydiff/.
+git clone https://github.com/Xylambda/avagrad.git
+pip install avagrad/.
```
Developer:
```bash
-git clone https://github.com/Xylambda/toydiff.git
-pip install -e toydiff/. -r toydiff/requirements-dev.txt
+git clone https://github.com/Xylambda/avagrad.git
+
+pip install -e avagrad/. -r avagrad/requirements-dev.txt
```
## Tests
-To run test, you must install the library as a `developer`.
+To run tests you must install the library as a `developer`.
```bash
-cd toydiff/
+cd avagrad/
pytest -v tests/
```
@@ -32,13 +35,13 @@ pytest -v tests/
The use is almost the same as the one you would expect from PyTorch:
```python
->>> import toydiff as tdf
+>>> import avagrad as ag
>>> # use `track_gradient=True` to allow backward to fill the gradients
->>> a = tdf.random.rand((3,3), track_gradient=True)
->>> b = tdf.random.rand((3,3), track_gradient=True)
->>> c = tdf.matmul(a, b)
->>> d = tdf.log(c)
->>> e = tdf.sum(d)
+>>> a = ag.random.rand((3,3), track_gradient=True)
+>>> b = ag.random.rand((3,3), track_gradient=True)
+>>> c = ag.matmul(a, b)
+>>> d = ag.log(c)
+>>> e = ag.sum(d)
```
Variable `e` is a Tensor that allows to backpropagate:
@@ -69,10 +72,10 @@ basic neural networks:
```python
import numpy as np
-import toydiff as tdf
-from toydiff.nn.blocks import Linear
-from toydiff.nn.optim import SGD
-from toydiff.nn.functional import mse_loss
+import avagrad as ag
+from avagrad.nn.blocks import Linear
+from avagrad.nn.optim import SGD
+from avagrad.nn.functional import mse_loss
# generate data
x = np.arange(-1, 1, 0.01).reshape(-1,1)
@@ -82,8 +85,8 @@ y = 2 * x + np.random.normal(size=(len(x), 1), scale=0.3)
model = Linear(1, 1, bias=False)
# wrap your data in Tensors with `track_gradient=True`
-feat = tdf.Tensor(X, track_gradient=True)
-labels = tdf.Tensor(y, track_gradient=True)
+feat = ag.Tensor(X, track_gradient=True)
+labels = ag.Tensor(y, track_gradient=True)
# pass model to optimizer
optimizer = SGD(model)
diff --git a/examples/LinearRegression.ipynb b/examples/LinearRegression.ipynb
index 6a755ad..b9ae741 100644
--- a/examples/LinearRegression.ipynb
+++ b/examples/LinearRegression.ipynb
@@ -9,7 +9,7 @@
"source": [
"import torch\n",
"import numpy as np\n",
- "import toydiff as tdf\n",
+ "import avagrad as ag\n",
"import matplotlib.pyplot as plt"
]
},
@@ -29,7 +29,7 @@
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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\n",
"text/plain": [
""
]
@@ -54,7 +54,7 @@
"metadata": {},
"outputs": [],
"source": [
- "model = tdf.nn.blocks.Linear(1, 1, bias=True)"
+ "model = ag.nn.blocks.Linear(1, 1, bias=True)"
]
},
{
@@ -64,8 +64,8 @@
"metadata": {},
"outputs": [],
"source": [
- "feat = tdf.Tensor(x, track_gradient=True)\n",
- "labels = tdf.Tensor(y, track_gradient=True)"
+ "feat = ag.Tensor(x, track_gradient=True)\n",
+ "labels = ag.Tensor(y, track_gradient=True)"
]
},
{
@@ -75,8 +75,8 @@
"metadata": {},
"outputs": [],
"source": [
- "from toydiff.nn.optim import SGD\n",
- "from toydiff.nn.functional import mse_loss"
+ "from avagrad.nn.optim import SGD\n",
+ "from avagrad.nn.functional import mse_loss"
]
},
{
@@ -110,8 +110,8 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "weight Tensor([[-1.4055386]], dtype=float32, track_gradient=True)\n",
- "bias Tensor([-0.2773763], dtype=float32, track_gradient=True)\n"
+ "weight Tensor([[-0.8846448]], dtype=float32, track_gradient=True)\n",
+ "bias Tensor([0.13022855], dtype=float32, track_gradient=True)\n"
]
}
],
@@ -130,7 +130,11 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "/Users/alejandroperezsanjuan/Git/toydiff/src/toydiff/core.py:590: RuntimeWarning: invalid value encountered in log\n",
+ "/Users/alejandroperezsanjuan/Git/toydiff/src/avagrad/core.py:706: RuntimeWarning: invalid value encountered in log\n",
+ " grad_b = (self.power * np.log(data_a)) * grad_np\n",
+ "/Users/alejandroperezsanjuan/Git/toydiff/src/avagrad/core.py:706: RuntimeWarning: divide by zero encountered in log\n",
+ " grad_b = (self.power * np.log(data_a)) * grad_np\n",
+ "/Users/alejandroperezsanjuan/Git/toydiff/src/avagrad/core.py:706: RuntimeWarning: invalid value encountered in multiply\n",
" grad_b = (self.power * np.log(data_a)) * grad_np\n"
]
}
@@ -160,8 +164,8 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "weight Tensor([[1.8566722]], dtype=float32, track_gradient=True)\n",
- "bias Tensor([[-0.06862488]], dtype=float32, track_gradient=True)\n"
+ "weight Tensor([[1.8257109]], dtype=float32, track_gradient=True)\n",
+ "bias Tensor([[-0.06181113]], dtype=float32, track_gradient=True)\n"
]
}
],
@@ -178,7 +182,7 @@
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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qn3ixAn06NEDABAZGYmgoCCrWvV6Pfbu3WvVb0VFBQ4cOGAZs2nTJpjNZgwfPtwyZtu2bTAajZYxGzZsQJ8+feDj49Nh/V2strYWCoX1nyGlUgmz2QxAfv1erDP76yr/x5uDSGZmJv744w/4+flZvS6nfh944AEcPnzY6u9XSEgI5s6di3Xr1lnqlEu/V0XqM2ilsnz5clGj0YhLly4V09PTxb/+9a+it7e31RUXXdFjjz0menl5iVu2bBELCwstj9raWsuYGTNmiOHh4eKmTZvE5ORkMTExUUxMTLS83nyp67hx48TU1FRx7dq1Yrdu3Vq81HXu3LnisWPHxMWLF0t+aW+zC6+mEUV59btv3z5RpVKJr7zyipiZmSl+++23opubm/jNN99Yxrz66quit7e3+PPPP4uHDx8Wb7/99hYvBY2Pjxf37t0r7tixQ4yOjra6VLCiokIMDAwUH3jgATEtLU1cvny56Obm1umX9k6bNk3s3r275dLen376SfT39xfnzZsnm36rqqrElJQUMSUlRQQgvvXWW2JKSorl6pHO6m/nzp2iSqUS33jjDfHYsWPiiy++2CGXfl6u34aGBvG2224TQ0NDxdTUVKu/YRdeKSKXflty8dU0jtZvR3HaMCKKovj++++L4eHholqtFocNGybu2bNH6pKuCECLjy+++MIypq6uTnz88cdFHx8f0c3NTbzjjjvEwsJCq+2cOnVKnDBhgujq6ir6+/uLTz31lGg0Gq3GbN68WRw0aJCoVqvFnj17Wr2HlC4OI3Lr99dffxX79+8vajQasW/fvuKnn35q9brZbBaff/55MTAwUNRoNOLYsWPFjIwMqzFlZWXilClTRA8PD1Gn04nTp08Xq6qqrMYcOnRIHDVqlKjRaMTu3buLr776aof3djG9Xi8++eSTYnh4uKjVasWePXuKzz77rNUHk6P3u3nz5hZ/Z6dNm9bp/a1YsULs3bu3qFarxX79+om//fZbp/abk5PT6t+wzZs3y67flrQURhyp344iiOIFUx0SERERdTKnPGeEiIiIug6GESIiIpIUwwgRERFJimGEiIiIJMUwQkRERJJiGCEiIiJJMYwQERGRpBhGiIiISFIMI0RERCQphhEiIiKSFMMIERERSer/A4cQSYyYaUevAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
@@ -203,7 +207,7 @@
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGzCAYAAAASZnxRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACd8ElEQVR4nOzdeXwT1doH8N8kbZKuKd1oKdACBaTsu4DsZRMQxVeRVcDLlc0NlEWUVS4giLugqOBlFa+ICIhsssguULYilNICYkuhhe5bZub9I0zInkkySdP0+d5PP9ckkzNzEto8Oec5z2F4nudBCCGEEFIBZBV9AYQQQgipuigQIYQQQkiFoUCEEEIIIRWGAhFCCCGEVBgKRAghhBBSYSgQIYQQQkiFoUCEEEIIIRWGAhFCCCGEVBgKRAghhBBSYSgQIYRUCenp6WAYBmvWrNHdN3fuXDAMI9k5Dhw4AIZhcODAAcnaJMTbUSBCiAusWbMGDMPoflQqFWrUqIE+ffrgk08+QX5+vsNtHz16FHPnzsWDBw+ku2A3GD16tMFrEhwcjObNm+ODDz5AaWlpRV+eXb744guDgIYQ4jgKRAhxofnz52Pt2rVYsWIFXnnlFQDA66+/jqZNm+L8+fMOtXn06FHMmzev0gUiAKBUKrF27VqsXbsW//nPfxAaGoo333wTL774YoVczzvvvIPi4mK7n2cpEOnSpQuKi4vRpUsXCa6OkKrBp6IvgBBv1q9fP7Rp00Z3e+bMmdi/fz8GDBiAp556CpcvX4afn18FXqF7+fj4YMSIEbrbEydORPv27fH9999j+fLlqFGjhslzeJ5HSUmJS14nHx8f+PhI92dQJpNBpVJJ1h4hVQGNiBDiZj169MC7776LGzduYN26dbr7z58/j9GjR6Nu3bpQqVSIiorC2LFjkZ2drTtm7ty5eOuttwAAderU0U1zpKenAwBWr16NHj16IDIyEkqlEgkJCVixYoXNa1q2bBkYhsGNGzdMHps5cyYUCgXu378PAEhJScGzzz6LqKgoqFQq1KxZEy+88AJyc3Ptfi1kMhm6desGALo+xMXFYcCAAfjtt9/Qpk0b+Pn54csvvwQAPHjwAK+//jpq1aoFpVKJ+Ph4LFmyBBzHGbT74MEDjB49Gmq1GiEhIXjxxRfNjiBZyhFZt24d2rVrB39/f1SrVg1dunTB7t27ddd36dIlHDx4UPf6C32wlCPyww8/oHXr1vDz80N4eDhGjBiB27dvGxwzevRoBAYG4vbt23j66acRGBiIiIgIvPnmm2BZ1s5XlpDKg0ZECKkAI0eOxNtvv43du3dj3LhxAIA9e/bg+vXrGDNmDKKionDp0iV89dVXuHTpEo4fPw6GYTB48GBcvXoVGzduxIcffojw8HAAQEREBABgxYoVaNy4MZ566in4+Pjgl19+wcSJE8FxHCZNmmTxep5//nlMmzYNmzdv1gU6gs2bN6N3796oVq0aysrK0KdPH5SWluKVV15BVFQUbt++je3bt+PBgwdQq9V2vxapqakAgLCwMN19V65cwdChQ/Hyyy9j3LhxaNiwIYqKitC1a1fcvn0bL7/8MmrXro2jR49i5syZyMjIwEcffQRAO4IyaNAg/PHHHxg/fjwaNWqEn376SfT0z7x58zB37lx07NgR8+fPh0KhwIkTJ7B//3707t0bH330EV555RUEBgZi1qxZAIDq1atbbG/NmjUYM2YM2rZti0WLFuHOnTv4+OOPceTIEZw9exYhISG6Y1mWRZ8+fdC+fXssW7YMe/fuxQcffIB69ephwoQJdr6yhFQSPCFEcqtXr+YB8KdOnbJ4jFqt5lu2bKm7XVRUZHLMxo0beQD8oUOHdPctXbqUB8CnpaWZHG+ujT59+vB169a1ec0dOnTgW7dubXDfyZMneQD8f//7X57nef7s2bM8AP6HH36w2Z6xF198kQ8ICODv3r3L3717l7927Rr/n//8h2cYhm/WrJnuuNjYWB4Av2vXLoPnL1iwgA8ICOCvXr1qcP+MGTN4uVzO37x5k+d5nt+6dSsPgH///fd1x2g0Gr5z5848AH716tW6++fMmcPr/xlMSUnhZTIZ/8wzz/Asyxqch+M43X83btyY79q1q0kff//9dx4A//vvv/M8z/NlZWV8ZGQk36RJE764uFh33Pbt23kA/OzZsw1eHwD8/PnzDdps2bKlyftCiDehqRlCKkhgYKDB6hn9HIiSkhLcu3cPjz/+OADgzJkzotrUbyM3Nxf37t1D165dcf36dZtTJ0OGDMHp06d1IxQA8P3330OpVGLQoEEAoBvx+O2331BUVCTqmvQVFhYiIiICERERiI+Px9tvv40OHTrgp59+MjiuTp066NOnj8F9P/zwAzp37oxq1arh3r17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\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGzCAYAAAASZnxRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACd0klEQVR4nOzdd3wU5dYH8N+W7G42PSRhQ4QECC2EjiAghhKK0hRfUQERUBQBG3hFVJCiIgpYUEFRgxcExCsiIkYIvSOdEAhJCCCYAEkgve3MvH/EWbbvbC853/fj573ZnZ2ZZxfYk+c55zwijuM4EEIIIYS4gdjdN0AIIYSQ+osCEUIIIYS4DQUihBBCCHEbCkQIIYQQ4jYUiBBCCCHEbSgQIYQQQojbUCBCCCGEELehQIQQQgghbkOBCCGEEELchgIRQki9cPnyZYhEIqxatUrz2Ny5cyESiRx2jd27d0MkEmH37t0OOychvo4CEUKcYNWqVRCJRJr/FAoFGjVqhEGDBuGzzz5DaWmpzec+ePAg5s6dizt37jjuhl1g/PjxOu9JcHAwOnTogCVLlqC6utrdt2eVL7/8UiegIYTYjgIRQpxo/vz5WL16NZYvX44XX3wRAPDKK6+gXbt2OHPmjE3nPHjwIObNm+d1gQgAyOVyrF69GqtXr8b777+P8PBwvPbaa3j66afdcj9vv/02KisrrX6dqUDkgQceQGVlJR544AEH3B0h9YPU3TdAiC978MEH0bVrV83Ps2bNws6dOzF06FAMHz4c58+fh7+/vxvv0LWkUinGjh2r+XnKlCno3r07fvzxRyxduhSNGjUyeA3HcaiqqnLK+ySVSiGVOu6fQbFYDIVC4bDzEVIf0IwIIS7Wr18/zJ49G1euXMGaNWs0j585cwbjx49Hs2bNoFAooFKpMHHiRBQWFmqOmTt3Lv7zn/8AAJo2bapZ5rh8+TIAICUlBf369UNUVBTkcjkSEhKwfPlyi/e0ePFiiEQiXLlyxeC5WbNmQSaT4fbt2wCArKwsPProo1CpVFAoFLjnnnvwxBNPoLi42Or3QiwWo0+fPgCgGUNcXByGDh2KP//8E127doW/vz+++uorAMCdO3fwyiuvoHHjxpDL5YiPj8eiRYvAsqzOee/cuYPx48cjJCQEoaGhePrpp43OIJnKEVmzZg26desGpVKJsLAwPPDAA9i2bZvm/s6dO4c9e/Zo3n9+DKZyRH766Sd06dIF/v7+iIiIwNixY3H9+nWdY8aPH4/AwEBcv34dDz/8MAIDAxEZGYnXXnsNDMNY+c4S4j1oRoQQN3jqqafw5ptvYtu2bZg0aRIAYPv27bh06RImTJgAlUqFc+fO4euvv8a5c+dw+PBhiEQijBw5EhcvXsS6devw8ccfIyIiAgAQGRkJAFi+fDnatm2L4cOHQyqV4rfffsOUKVPAsiymTp1q8n5GjRqF119/HRs2bNAEOrwNGzZg4MCBCAsLQ01NDQYNGoTq6mq8+OKLUKlUuH79OrZs2YI7d+4gJCTE6vciJycHANCgQQPNY5mZmXjyySfx/PPPY9KkSWjVqhUqKiqQlJSE69ev4/nnn0eTJk1w8OBBzJo1C3l5efjkk08A1M2gjBgxAvv378fkyZPRpk0b/PLLL4KXf+bNm4e5c+eiZ8+emD9/PmQyGY4cOYKdO3di4MCB+OSTT/Diiy8iMDAQb731FgCgYcOGJs+3atUqTJgwAffeey8WLlyIGzdu4NNPP8WBAwdw8uRJhIaGao5lGAaDBg1C9+7dsXjxYqSlpWHJkiVo3rw5XnjhBSvfWUK8BEcIcbiUlBQOAPfXX3+ZPCYkJITr1KmT5ueKigqDY9atW8cB4Pbu3at57KOPPuIAcLm5uQbHGzvHoEGDuGbNmlm85x49enBdunTReezo0aMcAO6///0vx3Ecd/LkSQ4A99NPP1k8n76nn36aCwgI4G7dusXdunWLy87O5t5//31OJBJx7du31xwXGxvLAeBSU1N1Xr9gwQIuICCAu3jxos7jb7zxBieRSLirV69yHMdxmzZt4gBwH374oeYYtVrN9e7dmwPApaSkaB5/5513OO1/BrOysjixWMw98sgjHMMwOtdhWVbzv9u2bcslJSUZjHHXrl0cAG7Xrl0cx3FcTU0NFxUVxSUmJnKVlZWa47Zs2cIB4ObMmaPz/gDg5s+fr3POTp06GXwuhPgSWpohxE0CAwN1qme0cyCqqqpQUFCA++67DwBw4sQJQefUPkdxcTEKCgqQlJSES5cuWVw6efzxx3H8+HHNDAUA/Pjjj5DL5RgxYgQAaGY8/vzzT1RUVAi6J23l5eWIjIxEZGQk4uPj8eabb6JHjx745ZdfdI5r2rQpBg0apPPYTz/9hN69eyMsLAwFBQWa/5KTk8EwDPbu3QsA2Lp1K6RSqc4MgkQi0SQLm7Np0yawLIs5c+ZALNb959GWMt9jx47h5s2bmDJlik7uyJAhQ9C6dWv8/vvvBq+ZPHmyzs+9e/fGpUuXrL42Id6CAhFC3KSsrAxBQUGan4uKivDyyy+jYcOG8Pf3R2RkJJo2bQoAgvMvDhw4gOTkZAQEBCA0NBSRkZF48803BZ3jscceg1gsxo8//gigbonjp59+woMPPojg4GAAdQHC9OnT8c033yAiIgKDBg3CF198Ifj+FAoFtm/fju3bt2Pv3r34+++/ceDAATRr1kznOH7c2rKyspCamqoJZPj/kpOTAQA3b94EAFy5cgXR0dEIDAzUeX2rVq0s3l9OTg7EYjESEhIEjccSPufG2LVbt25tkJOjUCg0y2y8sLAwTX4OIb6IckQIcYNr166huLgY8fHxmsdGjRqFgwcP4j//+Q86duyIwMBAsCyLwYMHGyRjGpOTk4P+/fujdevWWLp0KRo3bgyZTIatW7fi448/tniORo0aoXfv3tiwYQPefPNNHD58GFevXsWiRYt0jluyZAnGjx+PX3/9Fdu2bcNLL72EhQsX4vDhw7jnnnvMXkMikWgCB3OMVciwLIsBAwbg9ddfN/qali1bWjyvp5NIJO6+BUJcjgIRQtxg9erVAKBZfrh9+zZ27NiBefPmYc6cOZrjsrKyDF5raongt99+Q3V1NTZv3owmTZpoHt+1a5fg+3r88ccxZcoUZGZm4scff4RSqcSwYcMMjmvXrh3atWuHt99+GwcPHkSvXr2wYsUKvPvuu4KvZa3mzZujrKzMYiATGxuLHTt2oKysTGdWJDMzU9A1WJZFRkYGOnbsaPI4ocs0sbGxmmv369dP57nMzEzN84TUZ7Q0Q4iL7dy5EwsWLEDTpk0xZswYAHd/E+Y4TudYvhJEW0BAAAAYlKMaO0dxcTFSUlIE39ujjz4KiUSCdevW4aeffsLQoUM11wOAkpISqNVqnde0a9cOYrHY6d1RR40ahUOHDuHPP/80eO7OnTua+3rooYegVqt1ypYZhsGyZcssXuPhhx+GWCzG/PnzDWaQtN/XgIAAQQ3lunbtiqioKKxYsULn/fnjjz9w/vx5DBkyxOI5CPF1NCNCiBP98ccfuHDhAtRqNW7cuIGdO3di+/btiI2NxebNmzUJjMHBwXjggQfw4Ycfora2FjExMdi2bRtyc3MNztmlSxcAwFtvvYUnnngCfn5+GDZsGAYOHAiZTIZhw4bh+eefR1lZGVauXImoqCjk5eUJut+oqCj07dsXS5cuRWlpKR5//HGd53fu3Ilp06bhscceQ8uWLaFWq7F69WpIJBI8+uijdr5b5v3nP//B5s2bMXToUIwfPx5dunRBeXk5zp49i//973+4fPkyIiIiMGzYMPTq1QtvvPEGLl++jISEBGzcuFFQHkt8fDzeeustLFiwAL1798bIkSMhl8vx119/oVGjRli4cCGAus9g+fLlePfddxEfH4+oqCiDGQ8A8PPzw6JFizBhwgQkJSXhySef1JTvxsXF4dVXX3X4+0SI13Fv0Q4hvokv3+X/k8lknEql4gYMGMB9+umnXElJicFrrl27xj3yyCNcaGgoFxISwj322GPcP//8wwHg3nnnHZ1jFyxYwMXExHBisVinlHfz5s1c+/btOYVCwcXFxXGLFi3ivvvuO5PlvsasXLmSA8AFBQXplJxyHMddunSJmzhxIte8eXNOoVBw4eHhXN++fbm0tDSL5+XLdy2JjY3lhgwZYvS50tJSbtasWVx8fDwnk8m4iIgIrmfPntzixYu5mpoazXGFhYXcU089xQUHB3MhISHcU089pSk9Nle+y/vuu++4Tp06cXK5nAsLC+OSkpK47du3a57Pz8/nhgwZwgUFBXEANKW8+uW7vB9//FFzvvDwcG7MmDHctWvXBL0/pu6REF8h4ji9uWBCCCGEEBehHBFCCCGEuA0FIoQQQghxGwpECCGEEOI2FIgQQgghxG0oECGEEEKI21AgQgghhBC38eiGZizL4p9//kFQUJBNO18SQgghxPU4jkNpaSkaNWpksJO1Po8ORP755x80btzY3bdBCCGEEBv8/fffFjfD9OhAhN8i/e+//9ZsQ+4oDMMgJycHzZs398kdL319fACN0Rf4+vgAGqMv8PXxAY4fY0lJCRo3bqz5HjfHowMRfjkmODjYKYFIYGAggoODffIPlq+PD6Ax+gJfHx9AY/QFvj4+wHljFJJWQcmqhBBCCHEbCkQIIYQQ4jYUiBBCCCHEbTw6R0QIjuOgVqvBMIxVr2MYBizLoqqqyifX/Hx9fACN0dtIJBJIpVIqxSeE6PDqQKSmpgZ5eXmoqKiw+rV8AHPlyhWf/IfR18cH0Bi9kVKpRHR0NGQymbtvhRDiIbw2EGFZFrm5uZBIJGjUqBFkMplV/1BzHIfq6mrI5XKf+Aden6+PD6AxehOO41BTU4Nbt24hNzcXLVq0sNjkiBBSP3htIFJTUwOWZdG4cWMolUqrX89xHABAoVB49T/wpvj6+AAao7fx9/eHn58frly5gpqaGigUCnffEiHEA3j9ryT0WxUh3oP+vhJC9HntjAghhBBSnzEsh6O5RbhZWoWoIAW6NQ2HROx9M6cUiBBCCCFeJjU9D/N+y0BecZXmsegQBd4ZloDBidFuvDPr0TwpIYQQ4kVS0/PwwpoTOkEIAOQXV+GFNSeQmp7npjuzDQUibjB+/HiIRCKIRCL4+fmhYcOGGDBgAL777juwLCv4PKtWrUJoaKjzbpQQQohHYVgO837LAGfkOf6xeb9lgGGNHeGZKBBB3Qd7KKcQv566jkM5hS75AAcPHoy8vDxcvnwZf/zxB/r27YuXX34ZQ4cOhVqtdvr1CSGEeJ+juUUGMyHaOAB5xVU4mlvkupuyU70PRFLT83H/op14cuVhvLz+FJ5ceRj3L9rp9KktuVwOlUqFmJgYdO7cGW+++SZ+/fVX/PHHH1i1ahUAYOnSpWjXrh0CAgLQuHFjTJkyBWVlZQCA3bt3Y8KECSguLtbMrsydOxcAsHr1atx7772IiopCdHQ0Ro8ejZs3bzp1PIQQQpzvZqnpIMSW4zxBvQ5Etp2/iSk/eM46W79+/dChQwds3LgRQF2p42effYZz587h+++/x86dO/H6668DAHr27IlPPvkEwcHByMvLQ15eHl577TUAQG1tLebPn48jR47gl19+weXLlzF+/HiXjoUQQojjRQUJ678j9DhPUG+rZhiWw8LULJPrbCLUrbMNSFC5tByqdevWOHPmDADglVde0TweFxeHd999F5MnT8aXX34JmUyGkJAQiEQiqFQqnXNMnDgRHMehqqoKCoUCn332Ge69916UlZUhMDDQZWMhhBDiWN2ahiM6RIH84iqj318iAKqQulJeb1FvZ0T+ulyE/JJqk8+7a52N4zhNB820tDT0798fMTExCAoKwlNPPYXCwkKLe+scP34cw4cPR8uWLREcHIykpCQAwNWrV51+/4QQQpxHIhbhnWEJAOqCDm38z+8MS/CqfiL1NhC5aSYI0TnOxets58+fR9OmTXH58mUMHToU7du3x88//4zjx4/jiy++AFDX3t6U8vJyDBo0CMHBwUhJScHRo0fxyy+/WHwdIYQQ7zA4MRrLx3aGKkR3+UUVosDysZ29ro9IvV2aiQqWCzvOhetsO3fuxNmzZ/Hqq6/i+PHjYFkWS5Ys0bTF3rBhg87xMpkMDMPoPHbhwgUUFhZi4cKFiIyMhEKhwPHjx102BkIIIc43ODEaAxJU1FnVm90bFw5VsBw3Sqrdss5WXV2N/Px8MAyDGzduIDU1FQsXLsTQoUMxbtw4pKeno7a2FsuWLcOwYcNw4MABrFixQucccXFxKCsrw44dO9ChQwcolUo0adIEMpkMy5Ytw4QJE5CVlYUFCxY4ZQyEEELcRyIWoUfzBu6+DbvV26UZiViEWYNbAHDPOltqaiqio6MRFxeHwYMHY9euXfjss8/w66+/QiKRoEOHDli6dCkWLVqExMRE/PDDD1i4cKHOOXr27InJkyfj8ccfR2RkJD788ENERkZi1apV+N///ofOnTtj0aJFWLx4sVPGQAghhNhLxPH7jHugkpIShISEoLi4GMHBwTrPVVVVITc3F02bNrVpO3G+qmR39h3M3+Ib/fq1aVfNePv28abQGL2P/t9bhmGQlZWFFi1aQCKRuPv2nILG6P08YXzO3uDO0WM09/2tr94uzfAGJ6owsK1vrLMRQgjxPb60wZ0x9T4QAXxnnY0QQohv4Te401+64BtvemOVjL56myNCCCGEeDJf3ODOGApECCGEEA/kixvcGUOBCCGEEOKBfHGDO2MoR4QQQghxIaEVML64wZ0xFIgQQgghLmJNBYwvbnBnDC3NEEIIIS7AV8Do533wFTCp6Xk6j/viBnfGUCBCCCGEOJmtFTDWbHDHsBwO5RTi11PXcSin0GuqaSgQ8XETJkzAww8/rPm5T58+eOWVV+w6pyPOIdTs2bPx3HPPOfzamzZtQnx8PCQSicvG4izjx4/X+YyFEIlE2LRpk0PvY8WKFRg2bJhDz0mIr7CnAmZwYjT2z+yHdZPuw6dPdMS6Sfdh/8x+OkFIanoe7l+0E0+uPIyX15/CkysP4/5FOw1mWTwR5YgAAMsAVw4CZTeAwIZAbE9A7Lw2vuPHj8f3338PAPDz80OTJk0wbtw4vPnmm5BKnfuRbNy4EX5+foKO3b17N/r27Yvbt28jNDTUpnPYIz8/H59++inOnj3r8HM///zzmDBhAl566SUEBQU5/PzmzJ07F5s2bcKpU6cccr5PP/0U1u7UkJeXh7CwMIdcnzdx4kQsWLAA+/btQ+/evR16bkK8nb0VMOYab3p70zOnzogsXLgQ9957L4KCghAVFYWHH34YmZmZzryk9c5vBj5JBL4fCvz8TN3//yQRyNjs1MsOHjwYeXl5yMrKwowZMzB37lx89NFHRo+tqalx2HXDw8Pt/uJ1xDmE+Oabb9CzZ0/ExsY69LxlZWW4efMmBg0ahEaNGtk8Fkd+LsbU1tYKOi4kJEQnUBRCpVJBLpfbcFemyWQyjB49Gp999plDz0uIL3BWBYwvND1zaiCyZ88eTJ06FYcPH8b27dtRW1uLgQMHory83JmXFUyc+Tuw4Wmg5B/dJ0rygA3jnBqMyOVyqFQqxMbG4oUXXkBycjI2b667Hj/V/t5776FRo0Zo1aoVAODvv//GqFGjEBoaivDwcIwYMQKXL1/WnJNhGEyfPh2hoaGIiIjAW2+9ZfCbsv7SRnV1NWbOnInGjRtDLpcjPj4e3377LS5fvoy+ffsCAMLCwiASiTB+/Hij57h9+zbGjRuHsLAwKJVKPPjgg8jKytI8v2rVKoSGhuLPP/9EmzZtEBgYqAnEzFm/fr3RqX61Wo1p06YhNDQUjRs3xuzZs3XGWV1djddeew0xMTEICAhA9+7dsXv3bgB1szx84NGvXz+IRCLNcz///DPatm0LuVyOuLg4LFmyROe6cXFxWLBgAcaNG4fg4GDNktH+/fvRu3dv+Pv7o3HjxnjppZdM/hlftWoV5s2bh9OnT0MkEkEkEmHVqlUA6pZLli9fjuHDhyMgIADvvfceGIbB5MmT0axZM/j7+6NVq1b49NNPdc6pvzTTp08fvPTSS3j99dcRHh4OlUqFuXPn6rxGe2nm8uXLEIlE2LhxI/r27QulUokOHTrg0KFDOq9ZuXIlGjduDKVSiUceeQRLly41CICGDRuGzZs3o7Ky0uj4Camv+AoYU2mlItRVz1hbAeMLTc+cGoikpqZi/PjxaNu2LTp06IBVq1bh6tWrOH78uDMvKwzLwG/H24C5ODL1jbplGxfw9/fX+Q17x44dyMzMxPbt27FlyxbU1tZi0KBBCAoKwr59+3DgwAHNFzr/uiVLlmDVqlX47rvvsG/fPhQVFeGXX34xe91x48Zh3bp1+Oyzz3D+/Hl89dVXCAwMROPGjfHzzz8DADIzM5GXl2fwBcgbP348jh07hs2bN+PQoUPgOA4PPfSQzm/0FRUVWLx4MVavXo29e/fi6tWreO2110zeV1FRETIyMtC1a1eD577//ntIpVIcOXIEH330ET7++GN88803muenTZuGQ4cOYf369Thz5gwee+wxDB48GFlZWejZs6dmVu7nn39GXl4eevbsiePHj2PUqFF44okncPbsWcydOxezZ8/WBAm8xYsXo0OHDjh58iRmz56NnJwcDB48GI8++ijOnDmDH3/8Efv378e0adOMjuvxxx/HjBkz0LZtW+Tl5SEvLw+PP/645vm5c+fikUcewdmzZzFx4kSwLIuYmBhs2LABGRkZmDNnDt58801s2LDB5HvHv0cBAQE4cuQIPvzwQ8yfPx/bt283+5q33noLr732Gk6dOoWWLVviySefhFqtBgAcOHAAkydPxssvv4xTp05hwIABeO+99wzO0bVrV6jVahw5csTstQipb5xVAeMLTc9cmiNSXFwMoG5q35jq6mpUV1drfi4pKQFQ95s+w+gGBAzDgOM4zX/W4q4chLjU3G/kHFByHdyVA0Ccc9a7+XvfsWMH/vzzT0ybNk0zloCAAKxcuRIymQwAsGbNGrAsi5UrV2q2g//uu+8QFhaGXbt2YeDAgfjkk0/wxhtv4JFHHgHHcVi2bBl27NihuZb+dS9evIgNGzZg27ZtSE5OBgA0bdpUcxyfQxAZGan5zZc/D3+OrKwsbN68Gfv370fPnj0199qkSRP88ssveOyxx8BxHGpra7F8+XI0b94cADB16lQsWLDA5Gd35coVcByH6Ohog2MaN26MpUuXAgBiY2Nx4cIFfPzxx3j22Wdx9epVpKSk4MqVK2jUqBEAYMaMGUhNTcV3332H999/H5GRkZrxNWzYEACwdOlS9O/fH2+//TYAoEWLFjh37hw++ugjPP3005pr9+vXD9OnT9f8/Oyzz2L06NF4+eWXAQDx8fH49NNP0adPH3z55ZdQKHSnWRUKBQICAiCVSjXX1n5fn3zySc3ME//47NmzIZfLIRKJEBcXh4MHD2LDhg147LHHdM6t/T61b98ec+bM0dzT559/jrS0NM3nrP0Z8q+bMWMGHnroIQB1AVFiYiKysrLQunVrLFu2DA8++CBmzJiheX8OHjyILVu26FzX398fISEhuHz5stHPlr8e/3eaYRiwLGvw99uX0Bi9n6PGN6BNFL4c0xHv/X7eoI/IW0PaYECbKKuvERkgg0Rk+Tuwgb+f2XM7+jO05jwuC0RYlsUrr7yCXr16ITEx0egxCxcuxLx58wwez8nJQWBgoMH51Gq1TuBiDcnta5AJOK626BoYlWMjSYZhsGXLFgQFBaG2thYsy+Lxxx/HG2+8gaqqKjAMg7Zt24JlWVRV1V37xIkTyM7ORnBwsM65qqqqcOHCBXTo0AF5eXno1KmT5jUA0KlTJzAMo3mM/4NWVVWFv/76CxKJBN27d9d5DY+faamqqtJ5Xvscp0+fhlQqRYcOHTTHBAQEoEWLFjh79iyGDRuG2tpaKJVKxMTEaI5p0KABbt68afS6wN2glb++9rW7du2q+dzVajW6dOmCpUuXory8HMePHwfDMJrlLF51dTVCQ0N1xlJTU6P53+fOncPQoUN1rnXvvffi008/RXl5OSQSCTiO0xknAJw6dQrp6elYu3at5jGO48CyLC5cuIDWrVsbjE2tVut8ttr0zw8AX375JdasWYNr166hsrISNTU1aN++veY4/gtd+zNOSEjQOU9UVBTy8vJ0HuPHz7+XrVq10jzPB6HXrl1DXFwczp8/j+HDhxv82dqyZYvB/SoUChQXFxsdX3V1NdRqNa5cuQKxWAyWZVFUVITs7GyIxb5ZxEdj9H6OHF9TP+DrETG4frsSFTVqKGVSxIT5QywqRVZWqdXnC+U4jGwuRlmV2uj8Pm/T3mO4cyMS8VHGc+Ic/RmWlZUJPtZlgcjUqVORnp6O/fv3mzxm1qxZOr9tlpSUoHHjxmjevLnRL+ArV65ALpcb/NYpBBd2j6Dj/MLvgZ8N5zdHIpGgb9+++PLLLyGTydCoUSOdahmJRIKgoCCdcVVWVqJLly5Ys2aNwfn43/CBuoRBhUKh+W2U/wPFn0ssFkMikUChUGjeU4VCYbQKhp+NUSgUOveifQ7tYyQSic4xUqlUc24/Pz+dc8jlcnAcZ/Kz42czKisrTV6bHyN/7wqFAjU1NZBIJDh27JjO/QBAYGCgzlj490r/fo2NXyKRQCQSISQkROeYiooKPPfcc3jppZcMxtCkSRPNObRJpVKIxWKjYw8NDdV5fN26dXj77bexePFi9OjRA0FBQfjoo49w9OhRzXESiUTznvBj0f/MjF2THz+ftMq/P0DdzAb/OoVCYfT94f/M6o/j9u3baNSokcnPViqVIjY2FgqFAgzDIDs7W1NK7YtojN7PGeNrZfkQwfqpg/Hi2pMAjCcbAIAILDZduoFloxthYILK4HlHj5Ff0RDCJYHItGnTsGXLFuzduxf33GM6AJDL5UYz+fl/aPUf45P9+KUKq8T2BBsUDVFpPkSmmucGN4Iothdgy/kt4GcNzNEeV5cuXbBhwwY0bNjQICjjRUdH4+jRo0hKSgJQ95v3iRMn0LlzZ51z8e9Z+/btwbIs9u7dqzNlz+M/C5ZlDd5j/hwJCQlQq9U4evSoZmmmsLAQmZmZaNu2rc7no38P+o9pi4+PR3BwMM6fP28wu3H06FGd1x05cgQtWrSAVCpF586dwTAMbt26ZbKEVPva/P9u06YNDh48qHPegwcPomXLljpBov6ft86dO+P8+fMWP0ttcrkcDMMYHbv++Q8ePIj77rsPU6ZM0Tx+6dIlnXHoj8vYecwdY+z90H+sVatWOHbsmM7rjx07ZnDOnJwcVFVVGfyZ07+m9t9pPrj0xS8wHo3R+3ny+B5sF4PPx4gxd/M55JeYXiUQAZi/5QIGtm1kNBfFkWO05hxOnUPjOA7Tpk3DL7/8gp07d+rkH7idWILa/u/++4OJ1KHBHzi1n4g1xowZg4iICIwYMQL79u1Dbm4udu/ejZdeegnXrl0DALz88sv44IMPsGnTJly4cAEvv/wy7ty5Y/KccXFxePrppzFx4kRs2rRJc04+ETI2NhYikQhbtmzBrVu3jE61tWjRAiNGjMCkSZOwf/9+nD59GmPHjkVMTAxGjBhh83jFYjGSk5ONzqBdvXoV06dPR2ZmJjZs2IDPP/9ck6PRsmVLjBkzBuPGjcPGjRuRm5uLo0ePYuHChfj9999NXm/GjBnYsWMHFixYgIsXL+L777/H559/bjahFgBmzpyJgwcPYtq0aTh16hSysrLw66+/mkxWBere99zcXJw6dQoFBQVmlxdbtGiBEydO4M8//8TFixcxe/Zs/PXXX2bvyRlefPFFbN26FUuXLkVWVha++uor/PHHHwbBxr59+9CsWTNNLhAhxDUGJ0ZjyaiOZo/x1AoapwYiU6dOxZo1a7B27VoEBQUhPz8f+fn5HlPax7YaAoz6HgjWa/QS3AgY9V8gYbh7bswIpVKJvXv3okmTJhg5ciTatGmDZ555BlVVVZoZkhkzZuCpp57C008/jZ49eyIoKAiPPPKI2fMuX74c//d//4cpU6agdevWmDRpkqb0NCYmBvPmzcMbb7yBhg0bmvxyTUlJQZcuXTB06FD06NEDHMdh69atdjc9e/bZZ7F+/XqwLKvz+Lhx41BZWYnu3bvj1VdfxUsvvaTTfTUlJQXjxo3DjBkz0KpVKzz88MP466+/0KRJE5PX6ty5MzZs2ID169cjMTERc+bMwfz583USR41p37499uzZg4sXL6J3797o1KkT5syZo1laMubRRx/F4MGD0bdvX0RGRmLdunUmj33++ecxfPhwPPHEE+jevTsKCwsxZcoUs/fkDL169cKKFSuwdOlSdOjQAampqXj11VcNll/WrVuHSZMmufz+CCFAQZmwnElPq6ARcbaUnAg9uYlp95SUFIv/wAN1a0whISEoLi42miOSm5uLpk2b2pYjwnGoqqqCQqGAiGNd2lnVFXTG54SlJVfgOE4TbDz55JNGn/f2MVriyWOcNGkSLly4gH379gGoS/jt168fLl68iJCQEKOv0f97yzAMsrKy0KJFC4+c8nYEGqP385bxHcopxJMrD1s8bt2k+wy6tDp6jOa+v/U5NUfEiTGOY4klQFNqSe1pRCIRvv76a6e0eCfWW7x4MQYMGICAgAD88ccf+P777/Hll19qns/Ly8N///tfk0EIIcS5+KZp+cVVpjIfobKhaZqz0V4zxKN17NgRHTt2dPdtENQlCX/44YcoLS1Fs2bN8Nlnn+HZZ5/VPG8s4ZkQYhuG5XA0twg3S6sQFVQXPFhqdsY3TXthzQmIoFtBY0/TNGejQIQQIoilbq6EEMdITc/DvN8yDJqevTMsweLmdYMTo7F8bGeD14f4+2FCrzgMMFK6626+13mGEEII8VL8Trr6+8fwO+mmppvfowuoC0b2z+yHV5NbItS/rmjgTmUtPk7Lwv2Ldgo6hytRIEIIIYS4EcNyOJRTiF9OXMObv6RbvZMu//pfT13HoZxCMCyH7Rn5+CTtIu5U6u7ibU1A4yq0NEMIIYQ4iaVcD2PLMKZo9wHhq16MvV4VLEeVmjUZ0IhQF9AMSFB5RL4IBSKEEEKIE1jK9eCXYaytL+X7gJh6vbnuqoDxgMadKBAhhBBCHMxkkPDv0sgXozthwe/nrQ5CACAqSAGG5TDvtwybXs/bl5UPkX8OiqoKEKGIQCAXaPlFTkCBCCGEEOJA5oIEfmnk7V/TUVRea+QI07T7gBzNLRK0nGOIhUSZC0lgBr6/fgqrb9R10pZAgoeCHkJfRV8MaDrAhvPajpJVfdyECRPw8MMPa37u06cPXnnlFbvO6YhzCDV79myd9u1CXLhwAffddx8UCoVX9iBZtWoVQkNDrXqNMz6TjIwM3HPPPZqW/4QQYSwFCRxgUxAC3O0DYkubdmlQOgLiF0EZuxLyBgcglur+3S6vLcfre19H2pU0q89tDwpEADAsg7/y/8LWS1vxV/5fYFjGqdcbP368ZhdSmUyG+Ph4zJ8/H2q12qnXBYCNGzdiwYIFgo7dvXs3RCKRwcZ51pzDHvn5+fj000/x1ltvWfW6d955BwEBAcjMzMSOHTts+mK3hqn3yVaPP/44Ll68aNVrnPGZJCQk4L777sPSpUsdel5CfJ0z9nJRhSiwfGxnTR+RqCDrtjaRBp2BImYNRNJis8dx4LDo6CKnfw9qq/dLM2lX0rDor0W4UXFD81hDZUO80e0NJMc6r1Pk4MGDkZKSgurqamzduhVTp06Fn58fZs2aZXBsTU0NZDKZQ64bHm5/a19HnEOIb775Bj179kRsbKxVr8vJycGQIUOsfp0lDMNAJBJBLLYtfhf6Ofr7+8Pf39+qczvrM5kwYQImTZqEWbNmQSqt9/9cEGKUfmVMRKBc0OvCA2S4XV5jMs8jPMAPbz2UgDsVNQgPlCPEXwaG5SARiwS1cw9R+kEuFeG23++QRe6A0O2q8ivyceLmCdyrulfYC+xUr2dEdl3bhRl7ZugEIQBws+Impu+e7tTpKblcDpVKhdjYWLzwwgtITk7G5s2bAdTNmDz88MN477330KhRI7Rq1QoA8Pfff2PUqFEIDQ1FeHg4RowYgcuXL2vOyTAMpk+fjtDQUEREROCtt94y2O9Hfwq/uroaM2fOROPGjSGXyxEfH49vv/0Wly9fRt++fQEAYWFhEIlEmo0K9c9x+/ZtjBs3DmFhYVAqlXjwwQeRlZWleZ6fkfjzzz/Rpk0bBAYGYvDgwcjLM1/Hvn79egwbNkznsdTUVNx///2aMY4cORI5OTma50UiEY4fP4758+dDJBKhT58+mDBhAoqLizWzUHPnztWM/bXXXkNMTAwCAgLQvXt37N692+C+N2/ejISEBMjlcly9elXnfiy9T9OmTcMrr7yCiIgIDBo0CACwdOlStGvXDgEBAWjcuDGmTJmCsrIyg+vy3n33XXTq1AmrV69GXFwcQkJC8MQTT6C0tFRzjP5nEhcXh/fffx8TJ05EUFAQmjRpgq+//lrn3g8ePIiOHTtCoVCga9eu2LRpE0QiEU6dOqU5ZsCAASgqKsKePXvMflaEeDNjfTiEHv9pWhZ6fbATT648jJfXn8KTKw9jxoZTCFWa3n1chLrqmXdHJGp+1n9eBOCxLvdg8bZMLPj9PF79se7cfEMyvp27qdcDLPrfdxqIfRvyKOFBCO9G+U3rXmCHehuIMCyDJSeXgDMSS/KPuXJ6yt/fHzU1NZqfd+zYgczMTGzfvh1btmxBbW0tBg0ahKCgIOzbtw8HDhzQfKHzr1uyZAlWrVqF7777Dvv27UNRURF++eUXs9cdN24c1q1bh88++wznz5/HV199hcDAQDRu3Bg///wzACAzMxN5eXn49NNPjZ5j/PjxOHbsGDZv3oxDhw6B4zg89NBDqK29uwZaUVGBxYsXY/Xq1di7dy+uXr2K1157zeR9FRUVISMjA127dtV5vLy8HNOnT8exY8eQlpYGsViMkSNHgmVZAHUbr7Vt2xYzZsxAXl4eNm/ejE8++QTBwcHIy8tDXl6e5rrTpk3DoUOHsH79epw5cwaPPfYYBg8erBNEVVRUYNGiRfjmm29w7tw5REVF6dyPpffp+++/h0wmw4EDB7BixQoAgFgsxmeffYZz587h+++/x86dO/H666+b/ZxycnKwadMmbNmyBVu2bMGePXvwwQcfmH3NkiVL0LVrV5w8eRJTpkzBCy+8gMzMTAB1O2MOGzYM7dq1w4kTJ7BgwQLMnDnT4BwymQwdO3bU7LBLiK9JTc/D/Yt0Awlz3Uf1j/847SLyS/S6oJZU406F8RwQ7VyPh9rXtWNXhegus6hCFHjugab4em+u2Q6rfDt3/ddHNMxEVOJCbMv7LyrUFVa8G3cV3BE2q+MI9Xau9cTNE7hZaTri48C5ZHqK4zjs2LEDf/75J1588UXN4wEBAfjmm280U/lr1qwBy7L45ptvNNvBp6SkIDQ0FLt378bAgQPxySefYNasWRg5ciQ4jsOyZcuwY8cOk9e+ePEiNmzYgO3bt2s2LGvWrJnmeX66PyoqymSORVZWFjZv3owDBw6gZ8+eAIAffvgBjRs3xqZNm/DYY48BAGpra7FixQo0b94cQF0QMH/+fJP3dvXqVXAch0aNGuk8/uijj+q8dytWrECTJk2QkZGBxMREqFQqSKVSBAYGQqWq21MhJCQEIpFI8zN//pSUFFy9elVzjddeew2pqalISUnB+++/r7nvL7/8Eh06dDB6nxKJxOz71KJFC3z44Yc6j+nPXLz77ruYPHmyzk62+liWxapVqxAUFAQAeOqpp7Bjxw689957Jl/z0EMPYcqUKQCAmTNn4uOPP8auXbvQqlUrrF27FiKRCCtXroRCoUBCQgKuX7+OSZMmGZynUaNGuHLlisnrEOKtLJXYaudkAMC2jHxM+eGUXSWzoUo/LBzZTnPewYnRGJCg0lna6RIbhqSPdglqSKb9+vySchy7/T9s/jsFsPF3aI4DWHUIQsQtbR2i1eptIHKr8paw4yqEHWetLVu2IDAwELW1tWBZFqNHj9YsGQBAu3btdPIJTp8+jezsbM0XEa+qqgo5OTkoLi5GXl4eunfvrnlOKpWia9euBsszvFOnTkEikSApKcnmcZw/fx5SqVTnug0aNECrVq1w/vx5zWNKpVIThABAdHQ0bt40HQhWVlYCABQK3Ug/KysLc+bMwZEjR1BQUKCZCbl69SoSExMF3/fZs2fBMAxattT9y1ZdXY0GDe42+JHJZGjfvr3g8+rr0qWLwWNpaWlYuHAhLly4gJKSEqjValRVVaGiogJKpdLoeeLi4nQ+e0vvHwCd++YDMf41mZmZaN++vc77261bN6Pn8ff3R0WFbb9VEeKphJTY8l/2AMByHN6zse+HNrlUbLDxnEQs0mksdiin0GLVjW5DMhany37C6vOrUVJbYvO98V8V1TeGQRUcYPN5rFVvA5FI/0hhxymFHWetvn37Yvny5ZDJZGjUqJFBImBAgO4fgrKyMnTp0gU//PCD4T1G2naP1iZE2sPPT3e9VCQSmQyQACAiIgJAXf6J9viGDRuG2NhYrFy5EtHR0aisrETXrl11lrWEKCsrg0QiwfHjxyGRSHSeCwy829TH399fMwNlC/3P8fLlyxg6dCheeOEFvPfeewgPD8f+/fvxzDPPoKamxmQgYuz944MwU2x5jTFFRUU6QSQhnsJS+3RzhJTY8l/23eJCcf125b/H29cSPb+k2mJHU6FVN/kl5Vhx+iekpKfYvASjg5Wj6p/RiBR3QbemrilKAOpxINI5qjOi/KNwq/KW0TwREURoqGyIzlGdnXL9gIAAxMfHCz6+c+fO+PHHHxEVFYXg4GCjx0RHR+PIkSN44IEHAABqtRrHjx9H587Gx9CuXTuwLIs9e/Zolma08TMyDGN6jq9NmzZQq9U4cuSIZmmmsLAQmZmZSEhIEDw+fc2bN0dwcDAyMjI0sxb8eVeuXInevXuD4zjs3LnT4rlkMpnBGDp16gSGYXDz5k307t3b5vvkzw+Yf594x48fB8uyWLJkiab6ZsOGDXZd3xatWrXCmjVrUF1dDbm8bi34r7/+Mnpseno6/u///s+Vt0eIRZbap1si9MueP66ixnHtFSxdW0hprjQoHYsy3ke52vYZEKBuFqS2qCe48raoDYsFUyrBO2MSXLoHTb1NVpWIJZjRaQaAuqBDG//zzG4zIRFLDF7rDmPGjEFERARGjBiBffv2ITc3F7t378ZLL72Ea9euAQBefvllfPDBB9i0aRMuXLiAl19+2Wxvi7i4ODz99NOYOHEiNm3apDkn/8UYGxsLkUiELVu24NatWzqVHbwWLVpgxIgRmDRpEvbv34/Tp09j7NixiImJwYgRI2wer1gsRnJyMvbv3695LCwsDA0aNMDXX3+N7Oxs7Ny502iCpbFxlpWVYceOHSgoKEBFRQVatmyJMWPGYNy4cdi4cSNyc3Nx9OhRLFy4EL///rtV9yrkfeLFx8ejtrYWy5Ytw6VLl7B69WpNEqsrjR49GizL4rnnnsP58+fx559/YvHixQCgMwN0+fJlXL9+3WigSoi78Lkd5hI5LRHah4M/Tilz3O/tlq7Nl+aaCgWkQWfgH7PG7iAEHFB1fTSqbw4HU9EMgQo/LBvdSVAg50j1NhABgL739MWSpCWIUupWQjRUNsTSPkud2kfEWkqlEnv37kWTJk0wcuRItGnTBs888wyqqqo0MyQzZszAU089haeffho9e/ZEUFAQHnnkEbPnXb58Of7v//4PU6ZMQevWrTFp0iRNJ82YmBjMmzcPb7zxBho2bIhp06YZPUdKSgq6dOmCoUOHokePHuA4Dlu3bjVYGrDWs88+i/Xr12uWE8RiMdavX4/jx48jMTER06dP1ySVmtOzZ09MnjwZjz/+OCIjIzXJoykpKRg3bhxmzJiBVq1a4eGHH8Zff/2FJk2aWHWfQt8nAOjQoQOWLl2KRYsWITExET/88AMWLlxo1fUcITg4GL/99htOnTqFjh074q233sKcOXMA6OblrFu3DgMHDnR4TxZCbGUptwOoy+2wVIJr6cueL7HllyhiwvzNHi+E/jlNMV6ay0KizIE8ajMUMevsXSECmAA81Ww2Vj/xHD59oiNWT+yOCb2aYqBe/ooriDhzC/VuVlJSgpCQEBQXFxssR1RVVSE3NxdNmzY1SGgUguM4VFVVQaFQgOVYnLh5ArcqbiFSGYnOUZ09ZibEVtrjsyfHwZ04jkP37t3x6quv4sknnzT6vLeP0RJXjvGHH37Q9Fzhy8lbtGiBtWvXolevXg65hv7fW4ZhkJWVhRYtWhjk6vgKGqNjHcopxJMrD1s8bt2k+yzuLMvPrADQCWz4v2l81Qw/vtzaIEz54ZTB8UKJtM4pRGp6Hub+lo4i6Vb4hR+AWFppw1V1sYwMtUUPoLagHwCxwRgd9Rma+/7WV29zRLRJxBKXdZAjwolEInz99dc4e/asu2/FJ/33v/9Fs2bNEBMTg9OnT2PmzJkYNWqUJon56tWrePPNNx0WhBDiCNbmdpjD9+HQzzVRmcg16d+6IV5JbomUA7m4U3m3T0iY0g+3TfQN0fZKckurlj2kQecgjZsHeY35tuxCsGp/1N7uhZp/AxDAsDLIXSgQIR6tY8eOXrlxnTfIz8/HnDlzkJ+fj+joaDz22GM6fUni4+OtSqgmxBWsze2wxFgfD2PVN9k3S/Hspt24dqda81iovx8m9IpDkwYBePXHUxavFRehWxVnrupn2+VtmLFnhqAxmMNxQE1Bsk4AonkOupVB7kKBCCH11Ouvv26xoyshnkbIHisqAXkY2vT7eOjblpGP38/kIa9YDO3kjOLKWnySloVXklsIuo52cGSs6kcVIsNTfRiUik9h7YW1gu/fFKUkGIVXhkNdar7HkjM26bMGBSKEEEK8Bp/I+cKaExDBeG7HO8McV35ao2Yx59dz6BJq+Bzf+Gzd0atQBStwo0RYcGTY0ZWFrMFOlIUfwIqL9ueBKKVKTGg7Ae0CR2JMuvGyfG3W7uTraF5fNePBubaEED3095U4gqk9VlQhCquSQS1JTc/DfQvTUFRuumEih7omZU92q6u2M74B3d3gSL/qRxqUjoAW70IelQaRncmoIojwQocXcPDJg5jccTLuaxZpVWWQu3jtjAhfGlpRUeHSDqGEENvxreLtLe0mRGhuhznmcjS0Zy0kAk4ZF6EUlPiq3dFVGnQGihj7l2B4i5MWY2DcQM3P1sweCejH6DReG4hIJBKEhoZq9s5QKpVWlTdyHIfq6rqkI18s/fT18QE0Rm/CcRwqKipw8+ZNhIaG+mwZK3EtS7kd5pjrzDogQWWyV4kpUUEK9GjewGJwVJePwULWYAdkkTvgiL/WKqUKM7vNNNr7ytrKIHfw2kAEgGY3VUubfxnDcRzUajWkUqlX/wNviq+PD6AxeqPQ0FCdXZAJEcKePWWMsbTr7ivJLczuQ6NNP//DVHDEsAxO3DyBXbe2IqDlbxBLqg2OsUaAXwBGxo9E3yZ9Lfa+csTskTN5dSAiEokQHR2NqKgo1NZaruHWxjAMrly5gtjYWJ/87czXxwfQGL2Nn5+f14+BuJ69e8roE7Lr7ld7L1l1TkvJsWlX0vDB0Q9wo+IGAMCefpkiiDC5w2Q83/55qxpv2jN75GxeHYjwJBKJ1f/AMQwDsVgMhULhk/84+vr4ABojIb7O0syFLYmpQnbdragRljDRIECG9x5JNHsPjuoHwtPPA/EFPhGIEEII8S1CZi74rqDasxGWlnEc1TMjPMAPh2b1h0xqvPiUYRl8deYrrDjtmE0ttfNAHL1U5W4UiBBCCPE4QmYu+K6g/JKDkGUcR/XMeP+RdkaDEIZlsPLsSqSkp6BCXWHXNYzlgTh6qcoTUCBCCCHE41i7p4zQZRxLnVmFmNgrzuiXftqVNMw9OBfFdu4NYyoPxBlLVZ7A6xuaEUII8V4My+FQTiF+PXUdh3IKwbB1X7PW7CljaRkHqFvGYVhO01sDMGw+JpT+JnEMy2DF6RV4dferdgchQF0eyJSOU3SCEGvG6G1oRoQQQohbWOrlIXRPGWuXcUz21giWo0rNorii1uQ1tTuR8sswq8+tRkltiU3vgbZQeSje6fGO0X4gtixVeQsKRAghhLickGUGoV1B0zLyBV1Te7nHVG+N7Rn5Fq8JsFhx2jF5IAAQIgvB2DZjMan9JJMludYuVXkTCkQIIYS4lNCKmP0z+1nsCpqanodvD1wWdF395R5jvTVMzZYEKqRYNroDpEHnkPTjY3YvwXAcUFvUEy/1eASTuw+w2BPEmqUqb0OBCCGE1BOeUvYpdJlh1YFcjO/V1GRXUD6gsUS/+6kl+rMlkQEyhKoL8Lc8Ha/ufk3gKE2M7d/oq+r6aDCl7bFmtx8md7ecrmkpydbaMXoSCkQIIaQe8KSyT6HLBwt+P49v9ueavEdLAQ2Pg+Xup/r42RKGZXA8/zgOZpzBF9e/EPx6k/fCKFGdPxLq0kQAwvM6rNnAzttQ1QwhhPg4Ph9D/0ubz8dITc9z6f1Ys3xg7h6FBjSmym3N4Sthkn5MwnPbn8PZwrPgbC74BVhGhupbySjPelsThPCEjoNfNlKF6L5/qhCF15buAjQjQgghPs3WDqWmzmXP0g7/+vziSoQHyHC7vMbiV7u5exQa0PDlttrXLyqvQXigHKpgw3Ho9wORwPbtFVi1P2pv90JNQT+Y+t3fmsDM0zewswUFIoQQ4sMcUfbJsBw+35mNlAO5uFN5d4NRTaltmyiL92FsaUgoU/doTd6EuetrL1GlXvoT/9lnXx4I74UOU/DfP+Jxo7jG6PO25nV48gZ2tqBAhBBCfJi9ZZ+p6Xl4Y+NZ3Kkw3OGcXzb5ckxHNPUzfW5TpbrW0r9HoXkTfEmuqevnFVdg2saf0CH9Gi5Wpdre6exf2v1AmknzfDKvw5EoR4QQQnyYPWWfqel5mLzmhNEgBLj7xfre7+fBcsa/5hmWw9zNxpeGrMXfo3Y31hB/Gb4YbTpvYkCCyuTSFMBC1iANAS0WwD92JS5W/wGIbL9TpVSJqR2mYveo3ZqmZL6a1+FINCNCCCE+zNayT6GlsfyyyfXblWhl5PnPd2Yhv8S+JluWlliiQxSYPaQNwgLkBnkTh3IKjS7HSIPSIVdthFhqf0MyU3vD8Hwxr8ORKBAhhBAfZmvZp9DSWF5FjdrgsdT0PHyclmX9Tevhy29NLbHkF1dh6tqTWD62M0Z0jNF5ztiSkzToDBQxa+2+L97ipMUYGDfQ7DG+ltfhSLQ0QwghPs6W5QFrW4UrZbq/1wqdURFiYq84s0ss5jZ9iwiUa/3EQtZgOxQxayESASI7JyRUShU+7vOxxSCEmEczIoQQUg9YuzxgTUlpdIgCMWH+Oo9ZO6NiDn/f1lb/pKbn4Z3NZyFR5kASmAG/0GMQS6rtupcAvwCMjB+Jvk36onNUZ4ut2YllFIgQQkg9Yc3ygKXcEp4IwFtD2kAsKtV53BGbr2nnhmw584+g1/DX3XomDy/99l/IG/4GpZ99+8IAADhgUuIkTO40mYIPB6OlGUIIIQb43BLAdDVrmNIPy8d2xsB/G4ZpEzqjMrR9NERGrqGfv2JN9c/WM//g5d9WQRGzBiKp/ZvTcRzQPuwBTO6oG4RoV+8cyik0WBYiwtCMCCGEEKNM7UQb6u+HCb3iMK1fi7rN5xjG4LVCZlRUwXJ8+kQnDG0fbXaHXSHn42dPCssqMX3bYshjdtidAwIAYiYUT7V4Cb2i2uo87kl793g7CkQIIYSYJDS3hOU4HLlUhFvlNZpjLFXrzB3eFhKxyOg1usSG4fiV2/j11HWB52PRo/NxzDrxOuRRxjuZCqUQK9EpfCB6qpIwukMfSEQiZGXdrf4x1aCNb/BG/UGsQ4EIIYQQsyzllmzLyMfOI7nYmJMDhqsLC/jZAWMzKvqzHfrXSE3PQ9JHu4zONuiej4VEmYvgBhchCf4L2/Mr7Eo4MNUPRHvGx5F795A6FIgQQgixWWp6Hl5cexLJMSy0owDt2YH9M/sJrtYRMtuwf2Y/rPhrE9bmfIaS2gKoAahZ+8cipB+II/buIbooECGEEGITa2YHhHwpCz0flGew4sIcu+5dm/beMJbYu3cPMUSBCCGEeCF+S3t3tgznZwckJi5ranbA1L1bnm1gUSj9Da/v2+mQ+w+RhWBsm7GY1H6S4JJce/buIcZRIEIIIV7GUyo2bJkdMHfv1SbXV1jIGuyEX4O9EEtq7NxAT4QxbUajf5P+NjUks3XvHmIa9REhhBAvwudQ6M8c8DkUqel5LrsXa2cHLN375YJyg9dKg9IR0OJdyKPSIJbYUQ3zb9SwJGkx3uj2Bu5V3WtTYzJz/VXM7d1DTKNAhBBCvISlHArA+H4rps5lbzMufnbA1FeuCHWzHd2ahgu693VHr0IVrNCU48oapNU1JZPYv0NuqCLUYfvC2LJ3DzGtfi7NsAxw+QBwowDwuwk07QVQy15CiIdzVMWGo5Z2+NmBaT8ctzg7cCin0OK955dU4+X+zbH81FeQhe+HSGp/wqdSqsSEthOsygMRwtq9e4hp9S8QydgMpM4ESm8CDYcBu38D5AFAq6FA8z5AUDQQ25MCE0KIx3FExYajm3ENTozGstGdsPPIaQB3czz0e4VYvve6PJA1+XMhj7I/ALElEdVa1uzdQ0xzaiCyd+9efPTRRzh+/Djy8vLwyy+/4OGHH3bmJc3L2AxsGAeAA0RaQ68qBk7/UPcfACgbAO0fB1o9REEJIcRj2Fux4axmXAMTVIiVluCRpAidzqra5zB379KgdMhVGyGWVqDGjn4gIogw2o5EVOIeTg1EysvL0aFDB0ycOBEjR4505qUsY5m6mRAh+dYVhcDhL+v+U4TQbAkhxCMI3b/FVMWGM5txiUUidG8WDonE+L+Ppu5dGnQGipi1Vl3LFCENyYjncWog8uCDD+LBBx905iWEu3IQKBG2jbQO/dkS/1Cg+xTggdcoICGEuBSfk2FsvxVelZrF9ox8o8srrmjGZapHiO69sxArcyEJPAdZ+CG7N6ezpiEZ8TwelSNSXV2N6upqzc8lJSUA6vr8G9vd0SqlN3SWYxiRFCzEYERWvgVVZcCeD4FDy4EOTwChjYGASCBQBTS5z2OCE4ZhwLKs/e+bB6Mxej9fHx/g+DEOaBOFL8d0xNub0nGnotbg+bLKGkz74TiWje6EgQkqneciA2SQiCzPCkcGyKy6X36Mf577B+9vzTRIgn1rSBsMTFChX6sGeLTveaT9sxEQ85UwthdvKqVKjEsYh4mJEyERS5z258hVf04ZlsOxy7dxq6wKkYEKdI0Lc1nyq6PHaM15RBzH2dcbRuiFRCKLOSJz587FvHnzDB7/66+/EBgYaN8N3L4CnF6n+ZEViVEU0BLh5Rch5hywSQEA+CmAmHuB2B6AyL2V0SzLoqioCOHh4RCLfbNKm8bo/Tx9fCzH4frtSlTUqKGUSRET5g+xlb++O2OMLMfhu/25KKtWG31eBCBQIcWEXk117pflOKQcyEVZldrk0k6gXIqJ9ze1apwsyyL77zykZpdDvwqYP8u9LdS4UHoY1Uy1weutJZfI0T6iPTo37AyxC/6tdcWf0+ybpdhz8RZKq+5+pkEKKZJaRiI+Ksgp19Tm6DGWlZXh3nvvRXFxMYKDg80e61EzIrNmzcL06dM1P5eUlKBx48Zo3ry5xYFYxDYDDs0ASuua/TAiKbKjgPibv0PCGf/LbJNrPwEnAoD7ptTNkFQUAAFRLp8tYRgG2dnZiI+PN7lm6+1ojN7Pk8e3LSMf7/1+3uRv90I5Y4xHLhXhl0s5MD+bwOKRpAh0b6abL9JPHYwX154EYHxpJ1QpQX91sFVjrKlVY9XBXKRdF2l239UmDUrHobz1hh3AbDC5/WTNDIirOPvP6baMfLzyR/a/n8fdz1QEFr/k3MCy0Y2s+jxs4egx8isaQnhUICKXyyGXyw0el0gk9r8xEgkw+H1gw1Oah8RgIeHUjg1EAKCmGNi7UPcxN+SWiMVix7x3HozG6P08cXyp6XmY8sOpf78Y7n57Xr9TjSk/nLK6xNXRY7xVXmP0C9/YcfrXfLBdDD4fI8YbG88aXdopKldbPcaTl4pQUsWA4cRa98VC8m8eiF/4ITACloTMcXceiLP+nDIsh/lbLkBt4vMUAZi/5QIGtm3k9GUaR47RmnN43lyoMyUMB0atBvzDXH/tyjvA7veB9+8BfpkCnNkA5O6rq+YhhHgMR3YvdRZ7y3gHJKigkBr/orBljLfKtJNb6zqiBrRYAGXsSsgbHITIjiBEKVViaoep2D1qN/o27m93N1hPY00lk69y6oxIWVkZsrOzNT/n5ubi1KlTCA8PR5MmTZx5adMShgOthwB7lgCXLrn++uoKw54l7R4DQpvUJb1SiTAhbuXMEldHsXfjtaO5RcgvcdwYIwPrAh5pUAYUDX+GWGp/S3YRRJjcYTKeb/88JGKJx2z052iuqGTydE4NRI4dO4a+fftqfubzP55++mmsWrXKmZc2TywBHpgBqDIB2WigPB8ovwXc+Rs4uQaoKXXdvVQUAkdW6D5GJcKEuI03fDGYK+MVsvGao8fYNS4M/wsshCJwLRg4ZpZXuyeIo7vBehJ7Z7d8gVMDkT59+sBFRTm2EYmBuF51+SO8Qe8BexcDR5YDlbfdc1/8Ms7BZUCnMTRbQogLecsXA7/xmv4sgX5rdWMcOUaGZfBN+tdg/DMhqrI/H1WlVGFmt5maXBBndYP1FPbObvkCj0pW9QhiCdBnZt1sxJWDdVU2l3YBmX+4PjCpKaXZEkJczJu+GGzdeM3eDq0My+DEzRPYdXUXNmZtRJW6CkmKJJvHEeAXgJHxI9G3SV+D1uzesFRmD3tnt3wBBSKmiCVA0951/7v9qLqk0isHgcytdYmmFQXuuS9+tuTAp0DPF+tmSMpvAYENabaEEAfwti8GWzZes6dDa9qVNHxw9APcqLhx93yw7d8d/TwQY7xhqcxe9sxu+QIKRITiA5OmvYGB7+rOlmT8CtSUu/Z+asuBPR/oPqY9W0IIsVl9+GLgx2iqjLe4otYg/2Lb5W2YsWeGw+5ByN4w3rJUZi9bZ7d8AQUittCfLRn+ufvzSoC7syX7PwHajgTC+wF+N4GmvWimhBArOfuLwdSeLK40IEGFuZszABgGItr5F/1aR+Kb9K+x4vQKg+NsoZ8HYo43LZXZy5bZLV9AgYgj6OeVlN0AlBHA1UPAoWWuny1RVwBn1gMNy4HdvwH+IUD7x4FWD9HyDSFWcNYXg6eUolou42VRKN2C7j+8ATXsW/owlwdijrctlRHrUSDiSNozJQDQvA+Q9Lr7Z0sqCoHDX9b9pwgBWg2tuzeqwiHE5TypFNVcXoU0KB1y1UaIpRWwp/e0kDwQS+rDUll9RoGIsxmrwuF7lpz9yfVJr1XFug3V/EOBbpMp6ZUQOH+5RGgpar/WDXH8ym2nL9sYz6tgIWuwE7LINIdcQ0geiBD1OYfC11Eg4ir6syVAXc8Sd5cIV94xn/RKAQmpJ1yxXCK0FPW+hTtQVF7jtPvg6eZf1AUgfuH7IZbaX4HijL1h6msOha+jQMSdqESYELNcldDpquUSoSWm2kGIM+6DJxGLMHtoK7ySugSyBnshktRYfpEFIbIQjG0zFpPaT3LpDrnEe1Eg4km8rUSY/pEhTuSqhE5Hde4UEjTZWmLqrA6iaVfS8H76XMijiu06D8cBTEVjKIomY+fLz0Impa8WIhz9afFUXlEi/AglvRKncGVCp7WdO40FHNsz8k0GTQPaRGkeE9LRVOh92MsRPUH4HTyq/nkC6uCWuFUgxvErxbR8QqxCgYi38MQSYf1dhKlEmDiAq/cWsaZzp7FZmlCln9GGYHzQ9OWYjmjqV/eYkI6mjrpfY/jW7Duu7MDaC2ttPg+PY5Sozh8JrqwtEMzafX+kfqJAxNtQiTBxM2fnbbh6bxGhyyWXCyrwSdpFg+DBWBAC3A2a3vv9PL4eEaN53FQpaniAH4rKjZ/LlvvVVqNWY97ez7D9n/+hkrF/d3GWkaG26AHUFPQDIIZEdPdd8fYOp8T1KBDxBcZKhMtuAYUccHs3UO3i4MRYiTDllfgEV+RtuHpvESGdOxsGy7Hu6FWbl1Ou365EK63HjZWidokNQ9JHuxzeQfSjfT/hv1mLAUmFlXdviFX7o/Z2L00Aon9/0T7S4ZS4ltjyIcRr8LMl7UcB3ScDLZKB1y4Cfd4E/MPcd198XskHscAfM4FDX9RVBeXuq6sUIl6Bz9vQn63glyBS0/Mcch1X7y3CL5cAhlvY8z8/2a2J2Q6klpRXq3HkUhF+PXUdh3IKwbCcphR1RMcY9GjeADKp2OJ9WNtB9MO9P+L7nPngxLYHIRxX95/4ziC83+Vn1BYkQ2QkCAGAt4a00dwfw3I4lFOoM2ZCjKEZEV9nbLbEXT1LakqBI3p7VdAyjldwZd6GO/YWsdS5s1rN2nX+PVm3sHnbTTBc3XtjahbJER1E+TyQ7ZfTsO7SOojsXDXj80A+HzEOgxOjIZdKjd7fkPYhGJigAuA5LeyJd6BApL4w1bPE3Umv+ss4lPTqkVyZt+GuvUXMde48lFNo17kraxhoT0Cbq/6xtYMowzJYeXYl1mSsQXHNv+W4drxFfB5IeO1DWDIiUXOfRpeVmoTgUk42AM9qYU+8AwUi9RUlvRIruDpvw117i5jq3GlP2a0xlmaRrO0gmnYlDXMPzr0bgNhBBBGGNh6He8NGQRUcYDQI0r8/hqlbYnV1xRPxDRSIkLs8rUTY0mwJcRlX520AnrW3iC1lt5aqYBw1i+SIfiDa7Nkb5tjl2y6teCK+gQIRYshrZkuGAeH9AL+bQNNeNFviRNbmbTiqxNeT9hYxNUtjyogOjZBy8IrF42ydRWJYBl+d+QorTq+wfLAAKqUKM7vNtGtvmFtlrp05I76BAhEijLldhE+uqUtEdaWqYuDMeqBhObD7N0ARSCXCTmRN3oaxRMXwAD880jEGyQkqr94xlZ+lOZxTiKlrT+BOpfEZDxGAX0//I+icEQFyHMopFBS08Ymou67uwsasjShX2zdLKRcrMarVo+jbpC86R3W2e2+YyEDXz5wR70eBCLGOqV2E3T1bwpcIH1wGdBoDhDYBAiIpt8SBhORtmEpULCqvxbcHLuPbA5e9vnpCIhZBLBaZDEKAukCtqLwW4QEylFRUGz1GBCBE6YcZP53WKQ029f6kXUnDB0c/wI2KG3aPgeOAzkGjkPLImw7dmK5rXJjLK56I96NAhNjP00uEqaGaw5jL2zCXqKhNu3pCex8WT2JpaUno0sLDHRvhvwdzjRavcOC7suoGNMaqSxyVB6LZG+b6aDw6ZJzDd8d1V8UT8W4UiBDHMVUinLm1roFZRYF77oufLTnwKdDzxboZkvJbQGBDmi2xgam8DUslvjzt6ol+rSIdf4N2EtIDQ+jSwoAEFe6NC8XOI6cBCOtFovP+tI7EN+lfOywPhFOHoPrGMKhLE522POKuiifivSgQIc7DByZNewMD33X/bEltObDnA93HqETYYaxJQOSrJ45dvg1PmqQX2gPjdnk1xCLAVLNQnSUIjkWstAT3xIrx8Y5sQffBgUWhdAt6rnsD1ax9iZ0sI4f6TleoyxLAVDSFCGKnt2L3pIon4vkoECGuYWq2xBOSXmlfHIew5TfsW2VVCPd3ws3YQGgPDJYFpq49aXEJil+C+LfFBn46/reg+5AGpUOu2gixtALVdjR05TigpqA/agr6g2+m5srlEU+qeCKejQIR4h6U9OpzbGn6FRmoABgX96cxQWj32Ld/TTc7PrEI+PxJ3e6h129X/ntuc1/+LGQNdkIWmWbtrevep1YeiLq0vc5zzlgeYVgORy4V4VZ+CYokRejePIJmPohVKBAhnsOTSoQp6dVq2omKlvBLF13jwnDJzvbpjiJ0aamovMbs8ywHhAXIdB6rqFGbewVkDXbCL3w/xFL7+2vwe8OoSxMB1JVOzx7aFqpgxy+P8Pk0N0sqMSCGxfY/byIq2J9yQYhVKBAhnodmS7yWkKZfnlo94cjkTT6o4WcLCsuMBS//BiAN9kIsMR/cCMGq/VF7uxdqCvpBe1+bovJaqIIVDl8m0c6nkWh9jLSnDLEWBSLEOxgtEd4NFNq3K6pNaLbELO1Exe0Z+dh06h+dWQTt5QF+jxJPIKR7bJiFtu28qCCFwWyBdnCgnQdiD44Daot6Ql3WFkxFU51raHN0J1PaU4Y4EgUixLtoz5a0fRS4mAnIRgNZf1CJsAfhExV7NG+At4YkeEX1hJAeGO+OSMSC389bbNh1u7wGU9cazhYAgDToDBQxa+26V3N5IMY4ulTXlbsxE99HgQjxbiIxENcLaP6AYYlwxq+u36jPWIlwPZ8t8bTqCXPNyoT0wBCLRWaDldlD2mDB7/qzBRwkykuQBJyDLPwQRHbGYfp5IKY4q5Opq3djJr6NAhHiO/RLhId/7v68EuDubMn+T4C2j1DPEjcS0qzMUg8MS8FKiL9M63EWsga7IGsggjJoBxjYtxTFMjLUFj2gyQPRDoZc2cnUHbsxE99FgQjxXfp5JWU3AGUEcPUQcPQr1wcn6grdniXKBkC7xyjp1UWENisDLM/imAtWfj11HcDdPBA/aTVE4iS77t1UIiof/ABwaSdTa3djJsQcCkSI79OvwmneB0h63f2dXisKKenVRZyRXGkqWIkKUujlgdj2OfJ5IDUFyQYBiFImwfMPNMO0fi009+vKTqb6+TTaPLUqinguCkRI/eQt++I07gHcKAL8bgJNe1FwIpB+HgjLcU5PrmRYBidunsCuW2nwj1lnvneZAAHSYFTlPYKawjYGz1XWMPgkLQutVEEGszj82Lec+cepAYn2EtXNkkrN47SnDLEWBSKEAJ67L45ICjQcBuz+DVAE0myJAMbyQEL9/QS91pbkSoZlsPLsSqzJWIPimuK6B+343ldKlZjQdgImJj6LBz7cg2IY3pOpWRwhOTCOxC9RHckpwK3ruRg3qCl1ViVWo0CEEH3eMltSz0uEjTGVB3Kn0nLvD8D65Mq0K2mYe3Du3QDEDiKIMLnDZDzf/nlIxBIcyilEfonwWRxrcmAcSSIWoXuzcGQxhWjRzDNLs4lno0CEEEvMzZZQibDHMJcHYoktyZXbLm/DjD0zbLiacYuTFmNg3EDNz9aUyFKDMeLNKBAhxBpUIuyxLDXZMkVIcqV2zklEoB9OlvyEr89+Zcfd3qVSqjCz20wkxybrPG5NiSw1GCPejAIRQuxhrkT40DLXz5YYKxFu/zjQ6iGfD0qEziCE+vvpLNVYSq5MTc/D3N/Scav2PCSBGfALPQaxpNquew3wC8DI+JHo26QvOkd1hsTI52JNieyWM/8Iui41GCOeiAIRQhzBVImwu2dLKgqBw1/W/acIAVoN9dnZEqEzCF+M7gyxWCSozDU1PQ/Tfv0v5A1/g9LP8Xkg5ghpOc/P4lCDMeLNKBAhxFmMbdRXfgu48zdw9ifXJ71WFevOlviHAt0m+0zSq9AZhPuaNxCUJ8GwHN7evhaKmDUOu0f9PBD96+n3ARHSch6gBmPEu1EgQoiz6c+WAMCg99yf9Fp5x6eSXq2ZQbCEYRnM3vUxqsK+t3tfGAAI9AvER90+woC4AUaft1R2a6lZmSPHToirUSBCiDvUw6RXY7/xO5rQGQTT91jXEyQlPQUV6gq7ghCFWIlO4QPRs+EDuFcZg9ZNWhk9TmjZraUkU3vHToi7UCBCiCcwlfR65TCQk+P6+3Fw0qup3/jnDG2NpsJ6jQkmZAbBGMf1BBHBr2Qgbl1PwjaIsUNUjZHNL6MfE4IH28XoHOnosltbx06IO1EgQogn0V/GiesNRGcC+S2Ao196ZdKrud/4X1x7Ep882BAtWjj2di1tWqeNnwX54tQXDrl25bUnUVraXuexsio1Xlx7Ep+PEevMTDij7NaasRPiCSgQIcTTicTAAzOApBmeUSJsLOnVRF6Jpd/4AWDPxVsY2IODxMUpKXwAsvrcapTUlth9vlB5KKryHkFpqeESDD9W/dkNa5qWEeKrKBAhxFt4aokwn1dycBnQaQwQ2gQIiASConFU3crib/ylVWocu3wbPVtEOvU2+RyV/JJyHLv9P6Tl/YgKdYXd5w2RhWBsm7FoFzgSY775y+RxxmY3qOyWEApECPFu5kqET64Bakpddy81pcCRFToPdfELxouSAfiCeQSs1jb2+m6VOfc3fr4pWZF0K/wa7IVYUmPX+UQQYXSb0ejfpL+mIdmvp64Leq327AaV3RJCgQghvsFUibCbZ0tktSWY4fczJkl/x09MEq5zkSjkgnED4TjKtgZfXBoZ6Lzf+DVNyVQbIZfaPwMCGO8HYsvsBpXdEkKBCCG+y9hsyaVdQOYfLg9MgkVVeEb6p85jtzkltrPdUCQbjK6iDIC9X1A1jrEyYP6LWv+5jo2D8eaupVDEpDpkHKHyULzT4x2DfWEAYbMb0UZmN6jsltR3FIgQ4uv0e5awjEckvYaJKvCodD+y2DBIfngb8A+xWCJsrvEXAK3nWMga7IS8wQEguBL2zicopUpMaDsBk9pPMtma3Z7ZDSq7JfUZBSKE1DeemvRqoUQ4NeOmyTLgyWtO/PtTXQDiiDwQAAiWBeOpNk+ZDUC0mZrdCFRIsWx0B7OzG1R2S+orCkQIIZ6V9AoYlAhz/qG4Wj0YIgwFp5f0ygcm0qB0yFUbIXZQHsjUDlMFByDa9Gc3IgNkCFUXoFVLlUPuixBfQ4EIIeQuD016FVXewXNYjyfkm4wkvbaEtMFuyCLTHHItc3kgQmnPbjAMg6ysQofcGyG+iAIRQohZDMQ42vhZ3Ax5EvEVZ9EmsAzi3N2ozfgdfna3Q7eOdtIrA2BlaDCuBgejVGK6NFgoIXkghBDHo0CEEGKS8eTQCLwzbA6qY2dh3U8/Ill0HI9I96OByDXLN3wAkhIchAoHtGOlAIQQ96JAhBBilKVdYV9JboHDbAIOIwHvM2PQTXwBDVGEXuJ0DJAcR5jI8VU4aUp/zI0IR7EDAhA+EXVi4rM4fqUYW87kU7UKIW5AgQghbmCuF4YnELIr7LqjV6EKVuBGSRVYiHGYrSuh/ZW9H2I1i27iCxihOIUnFIcgqrA/R2Kb0h8zoiLsO8m/AxoR0hfzhi3G9guFSPpoj9FyYOrfQYhrUCBCiIuZ64XhKV9+QnaFzS+pxqvJLfFJ2kWDvhkcxDjCJmD8yLEQJUTZ3FCNAXBCIccOpT/WBgcBIvuCtVCWwTsFRUi+/D1qzv2CkqqO6MYm4oa4rtMrC7Fmxmf52M4e83kQ4ssoECHEhSwtd3jKl5/Q3V7jIpTCuoIaa6hWmgeU3QIKOeD2bqD6bnDC54GsCQ5yyDKMkmUx4U4JJhWXgD+bTF2CUdK9GIW9AIDbXAC+Uw/GF8wj4CA22CmXEOIcLglEvvjiC3z00UfIz89Hhw4dsGzZMnTr1s0VlybEYwhZ7vCULz9r9k3p0byBdV1BtUuEGQbIygIGPwcc+Bg4shxpoirH5YEwDJ4qLtUJQEwJE5Xr7otTFomcHZfRMr6lyU6vhBD7OT0Q+fHHHzF9+nSsWLEC3bt3xyeffIJBgwYhMzMTUVFRzr48IR5DyHKH/jbx7mLtrrB2dwX9t6HatiYdMGPff2w/DwBwdXc89XaxoABEn86+OAfWAAcA+IcC3afUNXyjgIQQh7K/+N6CpUuXYtKkSZgwYQISEhKwYsUKKJVKfPfdd86+NCEeRehyh9DjnInfNwWAwT4tztgVlmEZfHnqS7y273W7zxXKsvj4ZgEm2xCEmFR5B9j9PrCwMbBrIXBpD3D2f0DuvrqlJkKIzZw6I1JTU4Pjx49j1qxZmsfEYjGSk5Nx6NAhg+Orq6tRXV2t+bmkpARAXWdChnHsX3aGYcCyrMPP6yl8fXyA940xMkAGicjY/ILhcfyY3DnGAW2i8OWYjnjv9/MGibVvDWmDAW2i7LovhmVw8sZJpF9Lx3PHn0OJugRiO343UrIsxt0pxcSSugCEETnhnzd1dV2XWW3+ocC9zwP3v2J0tsTb/pzawtfH6OvjAxw/RmvO49RApKCgAAzDoGHDhjqPN2zYEBcuXDA4fuHChZg3b57B4zk5OQgMDHTovbEsi6KiImRnZ0MsdvrEkMv5+vgA7xtjKMdhZHMxyqrUJpc7AhVShKoLNC3BTY2R5Thcv12Jiho1lDIpYsL8IbazosSYpn7A1yNijFyrFFlZtjcwu3TnEvb/sx8VtRWIk8ahs7QzOKnlIM0ojkPXqmp0qa6G2B+45G/zbdkuMwPImgpEtQbC4gBZIBDaGBCJve7PqS18fYy+Pj7A8WMsKysTfKxHVc3MmjUL06dP1/xcUlKCxo0bo3nz5ggODnbotRiGQXZ2NuLj4yFxQFKcp/H18QHeOcZ+6mC8uPYkAOPbxC8b3UFnczRjY9yWkW9ylmJggnM2VmvlwHOlXUnDm5lvAgAkkAAKYF/VPjCw7jexf1NBUP3PKNwql+EY7qAAwegiysRU/22Qqh2z+Z1V8rT+tzIcSHwMTPwgZIc18Ko/p9byxr+L1vD18QGOHyO/oiGEUwORiIgISCQS3LhxQ+fxGzduQKUy/AdTLpdDLpcbPC6RSJzy4YvFYqed2xP4+vgA7xvjg+1i8PkYsVV9RLTHmJqehyk/nPo3iLk7A3L9TjWm/HDKY8p/jWFYBl+d+QorTq8ApxWGceDA/Pt/1mDVIai+MQzq0kQc/PcxEYBLIV3w8n++gmT/Erdu1Ifym8CRL4CjX0Ec83+QXJRC0jwJCIr2ySocb/u7aC1fHx/g2DFacw6nBiIymQxdunTBjh078PDDDwOom/7ZsWMHpk2b5sxLE+Kx9LeJF9pZ1ZvKf7UxLIOVZ1ciJT0FFXbOUrCMHK2U/XHmYgyYiqbgtHJKdJJopVKgz8y6KpcrB4GyG4AyArh6CDj6leuDE3U1cOZ/wOk1dT8rGwDtHgNCmwABkT4bnBAihNOXZqZPn46nn34aXbt2Rbdu3fDJJ5+gvLwcEyZMcPalCfFYtpS7elP5Ly/tShrmHpyLYjt36eU4oKagP2oK+uM/k3qiOLHGchM1QLdnCQA07wMkvW5zp1eHqSgEjqzQfYxKhEk95fRA5PHHH8etW7cwZ84c5Ofno2PHjkhNTTVIYCWEmOeK8l9H7YHDz4J8ceoLm+8FuJsHUnV9NNSl7REdcveebJlVAqAbnGh3es3cCpzZAFQU2HXPNuNLhA98CvR8sW6GpPwWENiQZkuIT3NJsuq0adNoKYYQO1nT7dQWjtgDhw9AVp9bjZJa4clqpnCMEtX5I6EuTQSg27vE7iZqPD4wadobGPiu7mxJxq9AjeN3ETarthzY84HuYzRbQnyYR1XNEEJMs7bbqTXs3QPHkXkgAMCq/VF7uxdqCvqB77v4anJL5yfi6s+WDP+8rm+IO5NegbuzJfs/Ado+UrfERHklxEdQIEKIl+C7nb6w5oTBbrf8gsTsIW1cngTryDyQ2qKeUJe1BVPRFNqNn1XBckzrF2/X+W3yb+t5o0mvh5a5frZEXQGc/qHuP6Au6bX940CrhygoIV6LAhFC3EhITgbLcThyqQi3ymsQFaTAF6M7Y8HvhomawztEY4GR/iKWllZsTYJ1VB4Ir+r6aDCl7Y0GWHOHt3VvJZCppFd3z5ZUFAKHv6z7TxECtBpKsyXE61AgQoibCMnJ2JaRj51HcrExJwcMJ9IcM3tIG4QFyDUBzO3yGkxda9vSirVJsI7OAwHrh7FN30Jil/uFVcJ4Cv3ZktK8uuTSO38DJ9cANbZ3nrVJVbHubAnllRAvQYEIIW4gJCcDAF5cexLJMSy0lynyi6swde1JLB/bGSM6xoBhOdy/aKfNSytCk1sjAv2w4vQKx+WBMDKobyehRt4bK85I8PkYYP/Mfg6p2nEp/dkSABj03t3ZkioXByQ8Pq/k4DKg0xjqWUI8FgUihLiYkJyMuZvPARAJCi6ELq0s2ZaJBgEyhAfKoQq+m9TKshxC/f1wp7LW6OtFACIaZmLmXwvtzgMBdBNRJSIRuBgW0BqPtZUwjio5dijt2ZLcA8C1W0D7e4Hiv4GzP7m2RLim1HjPkm6TqUSYeAQKRAhxMSGBQ35J3S7UEhPfp9p5G0KXVr7cnaPzc6jSDwBwp8J4AALUBSGSoDOoCl+LqhpBlzGprilZsk4lDJ9ya2szNkeUHDuVWALE9QJqs4AWDwMSSd1sibtLhCvvUIkw8RgUiBDiYvY0HDN2Llv7hpgLQAAWEmUughpkgg3cZ3RmxhpKSTAKrwzX9AMxxZr3xt6SY7ehEmFCdFAgQoiL2Ro4mDqXpf4i1mEha7AT8gYHAUmFldvQGVJKlZjQdgLaBY7EmPS/LB5/uUBY7om37rtjFJUIk3qOAhFCXExIY7KGwXIAIhSUVho9h3bzMnP9RawhDUqHXLURYqn9iajBsmA81eYpTGo/CRKxBAzLCQqWPkm7iFaqQIszGd64745FVCJM6imx5UMIIY7EBw7A3T4ZPO2+GXOHmz9Gu9354MRoLB/bGaoQ22ZbpEFnoIhZA5HE/iBkaoep2Pv4XkzuOBmSf7+k+DELCZLm/ZYBhjV/pCv23fEI/GzJf3KAp7cAI1cCg94Hur8AyIJcfz98ifDGScD3Q4GPmgG7F9Xt10OIjWhGhBA34AMHS30zlo3uhJ1HTgNgTR6jfU6+iuZA9i18vks3OdU4FrIGOyCL3AGRnSsYofJQvNPjHSTHJht9fnBiNF5NboGP07JMnkPoTIYj9t3xyGobUyyVCLtrtoTPKzm0HEh8DSjaAQRSiTCxDgUihLiJduBg6stwYIIKsdISPJIUgRul1Sgqr0F4oBwh/jIwLGfwxclvBHe7vBpiEWB8YqEuEVUSmAG/0GMQS6rtGgefB8Ivw5gTFxEg6JyWZjLs3XfH46tthDDWUO3SLiDzD9cHJjWlwPVjwInfAE5d9xhV4RCBKBAhxI2E7CArFolQXFWDD//MFPTFmZqeh6lrTxr9gpYGpUPe8DeI/ezvB1JXjtsfiwa9hofa3SPoNY7aQVjIvjvaS1favLbaxhT9KhyWqQtMMrcCZza4tmeJNn625MCnQM8XqWcJMYkCEUIczNFT/tk3S/HKH9lQc7rnMPbFaa6apC4PZK3N98Hj/j05vzfMgi2ZGNQ2RtAYHbmDsNDlLW0+VW1jCh+YNO0NDHzX/bMlteWGPUso6ZVooUCEEAeydcrfVPDCsBz2XLwl+IvTeDWJ4/JAAIBTh6D6xjBNTxBrqlP0ZzK0WZrJMEbI8pY2n6y2McfUbIm7S4T198WhEuF6jQIRQhzE1il/c8FLsFyK0io1TBW46X9x6uZW1PUE8WuwF2KJfW1RWUYO9Z2uUJclgKloanA/1lSnaM9k3Cy5W55s6wZ3Qpa3rL1Pr6+2MYVKhIkHokCEEAewdcrfUvDyTM9YQdfnvzj53ArH9QQRofpWP9QU9Ie5an9rm7TxMxlHcgpw63ouxg1qiu7NI5y+HOKoHBWfQrsIEzejQIQQG+gvpbAcZ/WUv5Dg5dcz19El1PL98F+cXWJDEB6zGzVBqdYOyaiPHvgI89ZLkQ/7czr0ScQidG8WjiymEC2auaZ01pE5Kj7H00uEaRdhn0WBCCFWMraUEurvJ+i12lP+QvIVispr4R8lMbEP790vzi6xIVhxegVWn1uN2uASg/wLa+n0BBmWZ1N1ijUYlsPRy4VO7+lhT7VNveRpJcLGdhGm2RKvR4EIIVYwtZRyp9LcBnJ3aU/5C81DaN0wCL/llpj44mTRs8sJ9P7xTVSo7e+KGiILwdg2Y3V6gthSnWKN7JuleHbTbly7c7efiTN7ejh7PD7JUolw5R333BeVCPsECkQIEcjcUoolxqb8heYhNIsMxLLRzTF/ywWdL86IhpkQR/4P2/LsW8MXQYTRbUajf5P+6BzVWbM3zKGcuzMUAxJUVlWnCLUtIx+/n8lDXrEY2s3sTZUmO+r61lbbED36JcK5B4BrtwCVEsjY5PoqHGMlwjRb4jUoECFEIEtLKaaYmvIXkq8QHaJATJg/WrVUYWDbRpovzr+rD+OrCymwe3tcAIuTFmNg3EDNz67qOsqwHN77/TwSAw2f00/w3Z6R7/B7sqbahpghlgBxvYDaLOD+h4Hhy9yfVwLcnS3Z/wnQ9hGqwvFgFIjUM161v4YLWPN+CF1KCfX301mqMTXlLyRf4a0hbSAW8TMeLKQBl3C+YAfWXrC/MZl2Hgj/PmzPyMd3By4bHCu066g17ycf2BkLRIC7Cb6f78zGJ2kXfacTqq/TzyvR7lly9CvXByfqCsOeJe0eo6RXD0KBSD3iE/trOJC174fQpZQvRneGWCwS9GVsKV9hQJsoZF4sxsqzK7Hm/BoU19jfml1/bxhj74M+IV1HrX0/hQZ2KQdyfbsTqq8y1bPE3SXCFYWU9OphKBCpJ3xufw072fJ+CC39vK95A01X1KO5Rdhy5h+zAYm5fIXtudux/dx2bCvfBsbOdZhgWTCeavOUTiKqqffBGHNdR215P4UGduYSgX2uE6qv8/QSYVNJr8SpKBCpB+rF/hpWsPX9sKb009rZAWP5Ctsub8Pre19HkiLJ1qFqTO0wVROA8Imo+cWVWPD7eauTb/VnMmx9P/nATgTj1T4iACF6y1xC74l4EU8qETaV9NptKqAa6tp7qUcoEKkH6t3+GhbY834IKf20Z/aJYRmcuHkCO67U5YGIzXQzFUKnHwiML59YS38mw9b3UyIW4a0hbbB5z3GT+85M6BWHj9OyrL4n4oU8eRfhvYuARllAXnMgrgeVCDsYBSL1QL3fX0OPve+HuaUUW2cHGJapywPJcEweCMvIkNxoFJYOfM2mZRhj9EuQ+aWnP9LzBL3e2Ps5MEEF5nY0zpYV6/QR0eTIJKiw/q+/qRNqfWRuF+GMX11fIszUAvs+Avaq7z5GuSUOQYFIPUD7a+hyxPthqvTTltmBtCtpmHtwrkMCEI4Dagr6o6agP55I6qkJQuzpgQIIW3qyxNT7GR8VhJ0zOuH41WKjCb7UCZUYzJYM/9z9eSUAlQg7CAUi9QDtr6HLme+HtbMt2y5vw4w9M6y+jj7u34FUXR8NdWl7qILlOvdvaw8UnpClJ1OEvJ/menpQJ1RiwFyJ8KFlrp8tMVYi3P5xoNVDFJQIQIFIPUD7a+hyxvvBL1Nk3RBWhhgR6IcvT32JFadXWD5YAE4dguobw6AuTQQAVKlZbM/I13xJ27rs9kyvOCQnqAQtPRnjqD9f1AmVGGWqRNjdsyUVhcDhL+v+U4QArYbSbIkZFIj4OH4zsWo1i1eSW2Ld0avIL6HfKh35W7bwZQoWUmUughpcxIwjC1Cutu+3NrlYiZrbXVB+pzWYiqaAVmJrcUWtTmKstctupip8rJ1ZceSfL+qESgQxVoXD9yw5+5Prk16rinVnS/xDgW6TaV8cLRSI+DBjm4mpguV4NbkF4iICfOK3SpbjcORSEW6V11g9Hkf8li10mUIalA55w98g9iuGGoBabeEFZoggwuQOk/Fs4nN44MM9KKkwDAz0E2MtLUcBQHiAH2YPbQtVsOn3QejMyrgesXgwMdrr/3wRL2aqZ4m7k14r79C+OHooEPFRpjYTu1FSjU/SsrB8bGev/+1yW0Y+dh7JxcacHDBc3Rit7RRrz2/ZQpcppEFnoIhZa1Ciait+b5hDOYU6s1v69BNjLS1Hvf9IO4vvm9CZlQcTo73+zxfxQZT06pHsa1JAPBK/mZipElKg7jdlhrW1hsL9UtPz8OLakyit0p1a4Ht1pAosKbWH5WUKFrIG2+F/zzqIRIC9kUhDpQof9/lYs0GdtYmx/HKUKkQ3mFCFKAR31r3bhMw4fqO++pL4TLwcv4zznxzg6S3Ao98CT/0KJL0ByAJcfz980uvGScD3Q4HFLYDUWUDuvrq+Kj6KZkR8kNDNxLy1gZmndIo1HQiwkDXYCb8GeyGW1Nh1DZaRg6lojEmtFmLyfQM15biAbWXI9i5HUeIz8UmWkl6rXLgXjrZ6kvRKgYgP8vUGZnygJTHxXeeqQMtYICANSodctRFiqfG25ULx/UAi1Q9hcM8wPNi9s04QAthehmxv0ieV05J6QTvpNfcAcK0A6P80cO2we0qE9ZNefahEmAIRH+TrDcw8JdDSDQTqZkFkkWkOOfcTsW+if++B6NIkBJdyso0e487ZCSqnJfWGWALE9QJqs4BmLYAWfalE2MEoEPFBQjYT8+YGZp4SaEnEIswe2gqvpC6BLHw/RFL7Ax/9vWEYxvy6sDtnJ6icltRb5kqET64Baly8lGOsRNiLqnAoEPFBQjYT8+Z1fD7QulVSafR5RwdafLMy7d/8ARYrz65ESnoK5FH2LcMAQIgsBGPbjNXskGsNmp0gxE1MlQi7e7aEr8I5uAzoNAYIbQIERHrsbAkFIj7K0mZi3ryOzy9JTPvB9kDLWHBh7HhjzcoiG2ZCHPk/VDB2/tbDAfdHPYyJnYejc5RhDog1aHaCEA9hbLbk0i4g8w/XByY1pcARve7NHriMQ4GID7O0mZg3G5wYjWWjO2HnkdMAWM3jQgItY8GFsf4jxpqVSYPOoDJsLaBGXUmuDbT3hUm90B4jmtwDicqzfkMhhNhJv2cJy3jGvjimkl5bPAhwEa69l39RIOLjfPk35YEJKsRKS/BIUoTgzqqmOqHy/Uf4fhq6JcIsJMpcSALPQRZ+yOYAhMcxSlTnj9TsC+OKUmNCiJt5+r44R74GmowGmGQgcYRLb4ECEeLVxCIRujcLh0RieUbBmv4jdSXCFXX9QMIPQCw1no9iDZaRobboAdQU9IN2L0FTpcYM+2/7+vwSFEmK0L15BAUrhPgST0t6rS4Ffn4GEIuAhOEuuywFIqTesNQJle8/cvjSLWzIXoWAlj/a3ZAMAFi1P2pv9zIIQLTplxrzy0c3SyoxIIbF9j9vIirY3+vzewghRnha0mvqG0DrIS7LHaFAhNQbQvqKSIPS8erh91DJlNr/d5ADqguSzQYgPO1SY+3lI+2mbfrLR4QQH+a22RIOKLled0394MhJKBAhPo+vkMm6Ye4v7t2GZJVq2L0vTKg8FMNjXsIXF5Rmj9MvNfaU9vWEEA/hrtmSshvOOa8RFIgQn2asQkbXv/vChO+H2AENyZRSJSa0naDpB9IuLA9vbDyLOxW1BscaKzUWunzkrfsEEUIcwBUlwoENHXMeASgQIT7LVIVMHcdtTAcAIogwucNkPN/+eZ1+IHyzsc93ZiPlQC7uVN4NSIyVGntK+3pCiBcwVSKcuRU4swGoKLDhpCIgOKauv4iLUCBCfJK5JQ5HbUynbXHSYgyMG2j0OYlYhJeTW2Bav3iLTdQ8pX09IcQL8YFJ097AwHdtny0Z/IFLm5xRIEJ8kqklDmnQGShi1jrsOiqlCjO7zdTsDWOOkJ4utu6oSwghOkzNlmgnvZ79SXfWRB4EPPqtS0t3AQpEiI/SXbpwbEOyAL8AjIwfib5N+trdml2f/o662nxhnyBCiJuYSnrVdHuNAmoigJatXH5rFIgQn1S3dME6tCEZWDle6PQMnm//nEODD33aO+re1NrYzxf2CSKEeBDt4IRhgKwst9wGBSLEJ5VKTiCo5buAxP48EL4h2SeDZmBQ2xiX7HLLJ7keySnAreu5GDeoKXVWJYT4JApEiM/ZdnkbZuyZAdgxacFvTFdTkIzw2ocwd1jdvjD3L9ppcbM8R5GI69rXZzGFaNHMNzYrJIQQfebbPRLiRRiWwZenvsRre16z+1wco0TV9bGoKUjGkv/rBAB4Yc0JgwRYvttpanqe3dckhJD6iGZEiFdjORbHbxzH7mu7sTFrI8rV9m2pbWxjupulVfjwz0zqdkoIIU5AgQjxWjuv7sSu87uwtXQrGDB2nYvjgJqC/qgp6A/9icKi8hrqdkoIIU5CSzPEK227vA3/2fsflNfaNwMCri4Iqbo+GjUFA6D9V0KEuhyQ8EC5oFNRt1NCCLEezYgQr8KwDL468xVWnF4BsQPi6FBZJPJyB4EpTdR5XLtnR4i/TNC5CkqrwbAcLc8QQogVKBAhXoFhGaw8uxIp6SmoUNtXkqvfkGx7xk2DjfG0e3YwLGe22ylvwe/n8c3+XOr1QQghVnBaIPLee+/h999/x6lTpyCTyXDnzh1nXYr4uLQraZh7cC6Ka4rtOo+ljelM9QfR73ZqLhjhq2iWj+1MwQghhAjgtByRmpoaPPbYY3jhhRecdQni4xiWwYrTK/Dq7lftDkKAuo3ppnScYrQrKr8PzIiOMejRvIHB8grf7VQVYn6zOT5ImfdbBhjWXMhCCCEEcOKMyLx58wAAq1atctYliBdjWM7kDAS/DLP63GqU1JbYfa1QeSje6fGOoI3pzOFnTlYdyMWC38+bPI6qaAghRDiPyhGprq5GdXW15ueSkrovIYZhwDD2lWfqYxgGLMs6/LyewpPHty0jH+/9ft6gQ+msh1rib3Yr/nvuv5o8EImZ9qgSSCCCyOQxIbIQPNn6SUxMnAiJWOKw9yIi0A8SkeXZjpslFWCYULuu5cmfoyP4+vgAGqMv8PXxAY4fozXn8ahAZOHChZqZFG05OTkIDAx06LVYlkVRURGys7MhFvteFbOnji/7Zil+P5OHxEAgUesjFcuv4M9zqRCJa3Gv9F5BfzJFECFOGgcoAE4rc6NdRDs0DWmK6IBoiEViXMq55NAxKCsrMCCGFXDcLWRl2dlgzUM/R0fx9fEBNEZf4OvjAxw/xrKyMsHHWhWIvPHGG1i0aJHZY86fP4/WrVtbc1qNWbNmYfr06ZqfS0pK0LhxYzRv3hzBwcE2ndMUhmGQnZ2N+Ph4SCTO20nVXTxxfAzL4dlNu5FXrP2HnIWswW7IAncC1YDIispXCSSAAthXtU/T0GxR70V2L8FY0ozlMG9vkckqGhHqqm4+u7e93aW8nvg5OpKvjw+gMfoCXx8f4Pgx8isaQlgViMyYMQPjx483e0yzZs2sOaUOuVwOudyweZREInHKhy8Wi512biHM50mYfk4od49P39HLhbh2pxp1X9UsZA12wi98P8TSKlieXzCOAwcGDILkQQ7JAxFCIgHeHtoWL6w58e893MV/Qm8PbQuZn2MmHD3tc3Q0Xx8fQGP0Bb4+PsCxY7TmHFb9SxkZGYnIyEirb4gYSk3PM+hdwe/kCsDkc84sCXVE8GNOWkY+NAFIg70QS2rsPqcEUkxuPxmTOkwyWg3jLHwVjbn+I4QQQixzWo7I1atXUVRUhKtXr4JhGJw6dQoAEB8f7/B8D2+Tmp6HF9acMJjWzy+uwuR/f8vW5+z+FOYCI2PXszZo2XomD9+f2YKAFhshltrXkAwAWLU/1HfuhzikHyYmDjIahDg7sLLUf4QQQohlTgtE5syZg++//17zc6dOdVup79q1C3369HHWZT0ew3KY91uGyZ1cTXHmLq/mAiNjwY+1QcvWM//g5d++hyJmrV33yf17gzUFyagp6AeJSIQyOYNjl2+jZwvdmTpr79EYIYEM33+EEEKIbZwWiKxatYp6iBhxNLfI7E6u5jijP4WlwEg/+LEmaGFYBiuObMenh36BPOaQVYmoxnCMEtX5I6HW7AtTdxe3ynTfz61n8jBlreHMkjWzSo4IZAghhFjmUeW79YEjdmh15C6vlgIjPvg5nFMIAHjj57NmZ3Pe/OUsymtqceLO/7D7xkaU1BRDbmfMxDIy1BY9gJqCfjDWDDgy8G63061n/sG0dSdNjkXIrJK1M0SEEEJsR4GIi0UFmW8R7qpz8IQGNVPXnsCdylqLx5WIT2LOydkOyQMJlgWjsqAnbl9/AJyRAEQEIEghRde4MAB1AcSUtcaDEJ6lWSVrZ4gIIYTYxzc7s3iwbk3DER2igC1fYSLULQ90axrusPsRGtQICUKkQWegiFkDkcT+IGRY4wnY9dgevN93OgCxwfvF/5zUMhISsUgTQAhlKgATOkN0NLdI8LUIIYSYRoGIi/E7uQIw+eVq7rl3hiU49DdxewKju1jIGmyHImYtRCLrmpIZnEmtROW1sVi7rRWSPtoDAEY3m1OFKLBsdCfERwUBsD73xlQAJnSGyJHLY4QQUp/R0owbWOpBARj2EXFWfwprtrjXxUKizIUkMAN+occgllRbfom5sxnJA9HOydg/s59BBQs4FllZpQCsCwzMzSoJnSFy5PIYIYTUZxSIuImlHhSu7E9hKjAK9fczuiQjDUqHvOFvEPsVO+DqIviVDETR9SToT9DxQdHczecwIEFlkNOhvaeSNYGBuVklfobIUvt2Ry6PEUJIfUaBiBuZ60Hh6v4UxgIjluMw5psjOsfV5YHY1w8EgCbz87lW72DJJvNBRH5JNT7fmY2Xk1uYPKZb03CoghXILzE9MyIWAZ8/ab7ixdwMkbOWxwghpD6jHBGiwQc/IzrGoEfzBrivWQOt/BHH5YEAQJg8Eh/3+RhNFPcJOv7jtItITc8z+fz2jHxUqc1vO/35k53wUHvLS1v8DJGxvBQq3SWEEMeiGRFikkQswuyhrfBK6hLIGuyFyM69YVhGDvWdrlCXJWD+sIeRHNsEh9SFgl9vqmx2W0Y+pvxwymR+S5jSDwtHtrMqgKD27YQQ4hoUiBCT0q6k4f30uZBH2ZcLwnFATUF/1BT0Bz8JpwoOAHA3J0NIxYux/h8sx+G938+bTbKVS8UYkKCy+r6pfTshhDgfLc0QAwzLYMXpFXh196sorrE9COG4uv+qro9GTcEA8P1AtKtWtMuZhdCvjrl+u9JiEJNfUk19PwghxEPRjAjRYFgGK8+uxOpzq1FSW2L3+fT3hjGV7Dk4MRqvJrfAx2lZFs+pXx1TUaMWdC/U94MQQjwTBSJEE4CkpKegQm1/V9QQWQi6NxiBA8c7orz0bl6JuV4o0/q1wLqjf5usejFVNquUCfsjTH0/CCHEM1EgUk/xW9zv+jsNm69/hnK1fTMgIogwus1o9G/SH52jOkMiloBJ5gQne0rEIswdXlc2Cwgvm40J80d0iALX71RT3w9CCPFCFIjUQ6npeZj7WzqKpFshi0wDYH857uKkxRgYN1DnMWuTPS11nDU2kyIWifDWkDaY8sMp6vtBCCFeiAIRF+FnIOwtBbX3PFvPXsMrqUvgF7Ufcqn9eROh8lC80+MdJMcmO+QebSmbHZigsjqAIYQQ4hkoEHGB1PQ8gy/JaBu+JO05D8My+Or011h+6hvIo+zrBwLU7Q0zIm4MFvR5GRKxxCH3yONnUviAZsuZfywGJEIDGEcFhIQQQhyDAhEnS03PwwtrThjkL2hv6CbkC9qe86RdScPcg3PrSnHtLNhm1f6ovd0LNQX90L1zZ4MgxBFj5c9lbUBjaSnIUQEhIYQQx6E+InoYlsOhnEL8euo6DuUUgmGF70dr7FzzfsswmkTJPzbvtwyL17DnPGlX0hzWD6T6VjLKs2ajpiAZgFinEsVRYwXuBjT6/UH4gMZcq3dXnpMQQoj9aEZEi6N/Yz6aW2S22RYH491CbT3P4ZxCiMUi5JeUo5jJRO2dK/jy+hdW37fB+Y30A9GvRHHUWC0FNCLcbfUulDXnpGUaQghxLQpE/uXIZQWe0CZalo4Tep4pa4+hUvkn/MIPwE9agyRFEjizzc/NYxkZaoseQE1BP/CTZ6YqURw1VmsCmm5xoYKu6aggiRBCiONRIALn/cYstImWpeOEnEcalA61aiPkUr4hmcTs8eYEy4LxVJun0EQyFAu2ZCIPlitRbB2rfvKoqYZm+qzplOqoIIkQQojjUSAC5/3GzG/oll9cZVezLUvnkQadgSJmreD7MurfiGtqh6mY1H6SJgl1UNsYQVUmtozV2FJYeICfoNu1plOqowJCQgghjkfJqnDeb8zaG7rpf3Vb02zL9HlYyBpshyJmLUQi+5qShSpC8XGfjzG542SdShi+EmVExxj0aN7AbGdUa8ZqKnm0qLzW7H3qb5onBB8kmXp7bDknIYQQx6BABM79jZnvFqoK0X2tKkRhkHdirmKHP09UsB8kyhzIon5DQMt5kEftsCsAYRkZ+jUci92jdus0JbOF0LGaWwrTZk/wps1RASEhhBDHo6UZOG4JxVSzLCHNtoRU7EiDzkHW9AMoa27ZPWaOA2oK+qOmoD+eSOqpMwtiDyFjtbQUxgsLkKGoXHfTvNlD2iDEX4ZfT11HZIAMoZywZFxb2scTQghxPgpEcPc35hfWnLB5vxJLgYS5ZltCKnbEgWcxY88Mm8anjf/erro+Gkxpe6csSVhqLCZ0iWv2kDZQhfhrAprb5TVY8Pvd91gi4jCyuRj91MF4sF2MxfPZ0j6eEEKIc9HSzL+sWULRZ0+zLMuNwFjM2rUEr+15TfhgzODUIai6PhZMaXsA7lmSELrEpQrx1+SnFFfWYOpaw/e4rEqNF9eeFNyQTGjOCyGEENegGREttvzGbG/pr+llChayBjvh12Av1BL79oaRi5VgS+5FcWFLMBVNAYjd2trc2qUwoV1bqSEZIYR4HwpE9Fi7db29pb/GlimkQemQqzZCrOkJYrvn2j+H5zs8D0BsMsDSz23pEhuG41duO235wtqlMGpIRgghvosCETswLIcD2QWCjjWVF6G7TFE3CyKLTLPvxv6dihkYOxCD2w/WJKIa+5I2ltsiFgHaW8I4Y/bEmuRRakhGCCG+iwIRGxn7AjfHVF5Et6bhUIXIUCTdCr/w/RBL7f8yZRklam48Cq5plNnjTCXJ6u9LZ0+be3OELoVRQzJCCPFdFIjYwNQXuDHmSn8ZlsHKsytRe8+3kLMOCEDU/qi93Qs1Bf0gFYmw5+ItDOzBQWKkMldoLw/AuRvDCVkKE5JTQg3JCCHEO1HVjJWs+QI3V/qbdiUNST8m4YtTX6DGjiCE44Cawp6ouDIJ5VmzUVOQDEAMDkBplRrHLt82+jqhvTw018HdPAxXo4ZkhBDiuygQsZI1X+DGu6cyWHF6BV7d/SqKa4rtuheOq+sHUn1zOJiK5jD2cd4qM36vtuZTuCsPw1R5daBCimWjO1FDMkII8VK0NGMloV/E0/o2x6sDWmlVptQtw6w+txoltSV230eANBgFl4dDXZpo9rjIQON5E7bmU7gzD0M/pyQyQIZQdQFatVS57Z4IIYTYh2ZErCT0i7hXfCQkYpFmBqTnup744tQXdgchSqkSUztMxd7H9yBS3NXkRm4AoPCTgOU4nT1reJY2gtPnKXkYfE7J0PaNAABZN0px5FKR0TESQgjxfDQjYiVrmnGlXUnD3INz7V6CAYBgWTCeavMUJrWfpCnHNdWLg1dVy+DplKOICvY3KIk118vD2Jj46wHAoZxCt7ZI5yuWbpZUYkAMi+1/3jQ6RkIIIZ6PZkQE4nfG3XLmHzxxbxMA5hMnd1zd7pA8EAD/zoDsxeSOk3U2pzOVN6HPVKt5U6/Xjyv4XBcAuH/RTjy58jBeXn8KT648jPsX7RTcXt0R7GmnTwghxPPQjIgAxnqGhCr9AAB3Kmo1jzUMkeGpPgxOlX+PtcfX2n3dUHko3unxDpJjk00ew+dNHM4pxNS1J3CnstbgGHPlt8Z6eRjrrLo9I9/ixnzOno2wt50+IYQQz0OBiAWmeoYUV9SCA/Bqcgs0aaDAsdv/w54bG7Hiov0zIEqpEhPaTtBZhjFHIhZBLBYZDUJ45tqgG+vlof2zpwQA1OqdEEJ8DwUiZlj+Ambx/fmV8Avfiwq1/fvCGMsDEcqZbdA9JQCgVu+EEOJ7KBAxgWE5rDqQa/ILmN+YrlZagVq1/deb2mGqTQEIz5lt0D0lAKBW74QQ4nsoEDHC0j4y0qAzUMTYnwMCCMsDEcKaah5reUoA4MwxEkIIcY96WTXDsByOXCpCZn6JQQ8KU1UZAAuJMgeyqM1QxKyDSASI7EiH4PuB7B612+4gBHBuG3RLPUdc1WOEWr0TQojvqXczIuZ6UAxIUBnJCWEha7ATfuEHIJZW2n19EUSY3GEynm//vM3LMKbw5bj8+HiqEIVdPTbM9RxxdQDgrDESQghxj3oViGhXwEi0vjP5EtRXklvozITweSBiqf2JqLzFSYsxMG6gw86njy/HPZJTgFvXczFuUFN0bx5hd5CgHQBov0fuCACcNUZCCCGuV28CESElqCkHLmsec2QeCAColCrM7DbTIcswlkjEInRvFo4sphAtmjmu86mxniPu6KwKOG+MhBBCXKveBCJCSlDr+nCwkDXYAVnkDrtyQAAAjAJjEv8P/Zv0Q+eozg5finEHYz1HCCGEEFvVm0DEfGkpC4kyF5LADMhDjwGSaruuxTIy1BY9gJqCfkhK6ol7VfTFTQghhBhTbwIRU6Wl0qAMKKI2Q+xnf0dUjgNqCvqjpqA/+IIkaq5FCCGEmFZvAhFjPSjE8ptQNFoLBoxd5+b+PWHV9dFQl7bXeU4/AGJYziNyLAghhBBPUG8CEd0S1LqSXGkQC1G1YU8Ka3HqEFTfGAZ1aaLmMWPNtYw1Sov2gbJTCq4IIYTYqt4EIkBd1ceUIRX4b9ZiSCTVEImSbD4Xy8ihvtMV6rIEMBVNod0bzlhvDVOb57ly91pn8NXgihBCiGvUq86qaVfS8N9L8wGJ7X1BOA6ovtUf5RffQfXNYWAqmkP/bVSFKHQCC0ulw0Dd7rXaHV71MSyHQzmF+PXUdRzKKTR7rKuY6kLLB1ep6XluujNCCCHeot7MiDAsgw+OfmD3eZ5q9jY25UUgD1pNvYLleLJbE8RFBBhdmrB391pPnHUQ0pdl3m8ZGJCgomUaQgghJtWbQOTEzRO4UXHD5tdrb0732v3W5UTYs3utpy7p2BtcEUIIIUA9CkRuVdyy6XUhshCMbTMWk9pP0jQks7apl62713ryrIM9wRUhhBDCqzeBSKQyUvCxIogwus1o9G/S3+aOqNqVJBEBcqiCFbhRYt329Z4862BrcEUIIYRoqzeBSOeozmiobIibFTfBGQ0H7rJ3YzpjOR2hSj/NLIbQ3Ws9edbBWF8WbaaCK0IIIURbvamakYgleKPbGwDqZjyMCZWH4uM+H9sdhBirJCmuqAUAhCj9dB7Xr7DR5smzDnxfFsCwD4u54IoQQgjR5rRA5PLly3jmmWfQtGlT+Pv7o3nz5njnnXdQU1PjrEtalBybjKV9liJKGaXzeIgsBFM7TMXuUbvt2h1XSE6HQirGD892x6dPdMS6Sfdh/8x+JpNN+VkHU1/lItRVz7hr1mFwYjSWj+0MVYhuIGQuuCKEEEK0OW1p5sKFC2BZFl999RXi4+ORnp6OSZMmoby8HIsXL3bWZS1Kjk1G38Z9cTz/OG5cuYExsWPQRdXFITvjCsnpyC+phlgkwoiOMRbPp9sNVviSjisNTozGgAQVdVYlhBBiE6cFIoMHD8bgwYM1Pzdr1gyZmZlYvny5WwMRoG6ZpkvDLsgqyUKLhi0cEoQAzsnp4Gcd9HNOVB7UvdTaKiJCCCGE59Jk1eLiYoSHm15GqK6uRnV1tebnkpISAADDMGAY+zam08cwDNQMg8PZBSioqEFkoAJd48Ls+k0+MkAGichyx9PLt8p0xsOwHI5dvo1bZVVG72NAmyj0axVp9BhT7wvDMGBZ1uHvmyehMXo/Xx8fQGP0Bb4+PsDxY7TmPCKO41zSKzw7OxtdunTB4sWLMWnSJKPHzJ07F/PmzTN4/K+//kJgYKBD7yfrRgkuX7+B87c58N3SgxRSJLWMRHxUkE3nZDkOKQdyUValNluXIwIwpH004qOCkH2zFHsu3kJplVrzvL33AQAsy6KoqAjh4eEQi30zJ5nG6P18fXwAjdEX+Pr4AMePsaysDPfeey+Ki4sRHBxs9lirA5E33ngDixYtMnvM+fPn0bp1a83P169fR1JSEvr06YNvvvnG5OuMzYg0btwYRUVFFgdijW0Z+Xhl3Qn0b8Qi7R8xGK5u9oGfg1g2uhMGJqhsPve0tSfNHsOXts56sA1eXn/SIGhxxH0wDIPs7GzEx8dDInHM0pOnoTF6P18fH0Bj9AW+Pj7A8WMsKSlBeHi4oEDE6qWZGTNmYPz48WaPadasmeZ///PPP+jbty969uyJr7/+2uzr5HI55HK5weMSicRhHz7Dcpi/5QLUnAgsRGA4kSYQAeqCgPlbLmBg20Y2LdM82C4GL/Uvx8dpWWaPu3anGrM3Z0DNGb+GvfcBAGKx2KHvnSeiMXo/Xx8fQGP0Bb4+PsCxY7TmHFYHIpGRkYiMFNal9Pr16+jbty+6dOmClJQUj5jS4itbJCa+2x3RrTQuIkDQcUXlpkuZaa8WQggh9YHTklWvX7+OPn36IDY2FosXL8atW3f3elGpbFtucARXdCt1ZIMx2quFEEKIL3NaILJ9+3ZkZ2cjOzsb99xzj85zLsqPNcoV3UqFtD8PC/BDUXmtU++DEEII8XROWysZP348OI4z+p87uaJbqZD25++OSPTorqmEEEKIK7g/acPFXLVHiqX25w+1b0R7tRBCCKn36s3uu9oGJ0Zj2ehO2HnkNABW87iju5Vaan8upGsqw3LUPp0QQojPqpeBCAAMTFAhVlqCR5IicKu8xmlf8pban5sLVlLT8wyClGgPau1OCCGE2KveBiIAIBaJ0L1ZuNl6Z1fMSBgLVlLT8/DCmhMGya75xVV4Yc0J2t2WEEKIT6jXgYgl7pqRYFgO837LMFpxw6Euh2TebxkYkKCiZRpCCCFerd4lqwrFz0hoByHA3RmJ1PQ8p12bb7pminazM0IIIcSbUSBihKUZCaBuRoJhnVOK7Iqma4QQQognoEDECHfPSLii6RohhBDiCSgQMcLdMxKuaLpGCCGEeAIKRIxw94yEq5quEUIIIe5GgQjqckIO5RTi11PXcSinEF1iw9w+I2GpMyuV7hJCCPEF9b58d1tGPuZvuWBQoju8QzS+3psLEaCTtOrKGQlLnVkJIYQQb1evA5Hsm6V45Y9sqDndL/b84ip8vTcXzz3QFJtP55lsv+4KljqzEkIIId6s3gYiDMthz8VbZpuGbT6dhz3/6YvjV27TjAQhhBDiBPU2EDl2+TZKq9QwlSbDl+gev3KbZiQIIYQQJ6m3yaq3yqhpGCGEEOJu9TYQiQykpmGEEEKIu9XbQKRrXBiCFFJqGkYIIYS4Ub0NRCRiEZJaRgKgpmGEEEKIu9TbQAQA4qOCsGx0J2oaRgghhLhJva2a4Q1MUGFg20bUNIwQQghxg3ofiADUNIwQQghxl3q9NEMIIYQQ96JAhBBCCCFuQ4EIIYQQQtyGAhFCCCGEuA0FIoQQQghxGwpECCGEEOI2FIgQQgghxG0oECGEEEKI21AgQgghhBC38ejOqhzHAQBKSkocfm6GYVBWVoaSkhJIJBKHn9/dfH18AI3RF/j6+AAaoy/w9fEBjh8j/73Nf4+b49GBSGlpKQCgcePGbr4TQgghhFirtLQUISEhZo8RcULCFTdhWRb//PMPgoKCIBI5dhO6kpISNG7cGH///TeCg4Mdem5P4OvjA2iMvsDXxwfQGH2Br48PcPwYOY5DaWkpGjVqBLHYfBaIR8+IiMVi3HPPPU69RnBwsM/+wQJ8f3wAjdEX+Pr4ABqjL/D18QGOHaOlmRAeJasSQgghxG0oECGEEEKI29TbQEQul+Odd96BXC539604ha+PD6Ax+gJfHx9AY/QFvj4+wL1j9OhkVUIIIYT4tno7I0IIIYQQ96NAhBBCCCFuQ4EIIYQQQtyGAhFCCCGEuA0FIoQQQghxG58NRN577z307NkTSqUSoaGhgl7DcRzmzJmD6Oho+Pv7Izk5GVlZWTrHFBUVYcyYMQgODkZoaCieeeYZlJWVOWEElll7L5cvX4ZIJDL6308//aQ5ztjz69evd8WQdNjyXvfp08fg3idPnqxzzNWrVzFkyBAolUpERUXhP//5D9RqtTOHYpK1YywqKsKLL76IVq1awd/fH02aNMFLL72E4uJinePc+Rl+8cUXiIuLg0KhQPfu3XH06FGzx//0009o3bo1FAoF2rVrh61bt+o8L+TvpatZM8aVK1eid+/eCAsLQ1hYGJKTkw2OHz9+vMHnNXjwYGcPwyRrxrdq1SqDe1coFDrHePtnaOzfFZFIhCFDhmiO8aTPcO/evRg2bBgaNWoEkUiETZs2WXzN7t270blzZ8jlcsTHx2PVqlUGx1j7d1swzkfNmTOHW7p0KTd9+nQuJCRE0Gs++OADLiQkhNu0aRN3+vRpbvjw4VzTpk25yspKzTGDBw/mOnTowB0+fJjbt28fFx8fzz355JNOGoV51t6LWq3m8vLydP6bN28eFxgYyJWWlmqOA8ClpKToHKf9HriKLe91UlISN2nSJJ17Ly4u1jyvVqu5xMRELjk5mTt58iS3detWLiIigps1a5azh2OUtWM8e/YsN3LkSG7z5s1cdnY2t2PHDq5Fixbco48+qnOcuz7D9evXczKZjPvuu++4c+fOcZMmTeJCQ0O5GzduGD3+wIEDnEQi4T788EMuIyODe/vttzk/Pz/u7NmzmmOE/L10JWvHOHr0aO6LL77gTp48yZ0/f54bP348FxISwl27dk1zzNNPP80NHjxY5/MqKipy1ZB0WDu+lJQULjg4WOfe8/PzdY7x9s+wsLBQZ3zp6emcRCLhUlJSNMd40me4detW7q233uI2btzIAeB++eUXs8dfunSJUyqV3PTp07mMjAxu2bJlnEQi4VJTUzXHWPueWcNnAxFeSkqKoECEZVlOpVJxH330keaxO3fucHK5nFu3bh3HcRyXkZHBAeD++usvzTF//PEHJxKJuOvXrzv83s1x1L107NiRmzhxos5jQv7gOput40tKSuJefvllk89v3bqVE4vFOv9QLl++nAsODuaqq6sdcu9COeoz3LBhAyeTybja2lrNY+76DLt168ZNnTpV8zPDMFyjRo24hQsXGj1+1KhR3JAhQ3Qe6969O/f8889zHCfs76WrWTtGfWq1mgsKCuK+//57zWNPP/00N2LECEffqk2sHZ+lf2N98TP8+OOPuaCgIK6srEzzmCd9htqE/Fvw+uuvc23bttV57PHHH+cGDRqk+dne98wcn12asVZubi7y8/ORnJyseSwkJATdu3fHoUOHAACHDh1CaGgounbtqjkmOTkZYrEYR44ccen9OuJejh8/jlOnTuGZZ54xeG7q1KmIiIhAt27d8N1334Fzcd87e8b3ww8/ICIiAomJiZg1axYqKip0ztuuXTs0bNhQ89igQYNQUlKCc+fOOX4gZjjqz1NxcTGCg4MhleruYenqz7CmpgbHjx/X+TskFouRnJys+Tuk79ChQzrHA3WfB3+8kL+XrmTLGPVVVFSgtrYW4eHhOo/v3r0bUVFRaNWqFV544QUUFhY69N6FsHV8ZWVliI2NRePGjTFixAidv0u++Bl+++23eOKJJxAQEKDzuCd8hraw9PfQEe+ZOR69+64r5efnA4DOFxT/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\n",
"text/plain": [
""
]
@@ -224,6 +228,118 @@
"ax.set_title(\"Data vs Prediction\");"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "514cd603",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "class Dataset:\n",
+ " def __init__(self):\n",
+ " pass\n",
+ "\n",
+ " def __getitem__(self, idx):\n",
+ " pass\n",
+ "\n",
+ " def __len__(self):\n",
+ " pass"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "5a938c45",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "class MyDs(Dataset):\n",
+ " def __init__(self, X, y):\n",
+ " self.X = X\n",
+ " self.y = y\n",
+ "\n",
+ " def __getitem__(self, idx):\n",
+ " return self.X[idx], self.y[idx]\n",
+ "\n",
+ " def __len__(self):\n",
+ " return len(self.X)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "c0fd8e8f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = MyDs(feat, labels)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "6fdeb54e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(Tensor([[-0.96],\n",
+ " [-0.93],\n",
+ " [-0.91]], dtype=float32, backward_fn=),\n",
+ " Tensor([[-1.7429105],\n",
+ " [-1.8027095],\n",
+ " [-1.7944833]], dtype=float32, backward_fn=))"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ds[[4, 7, 9]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "70f613e7",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Tensor([[-0.95],\n",
+ " [-0.94],\n",
+ " [-0.93]], dtype=float32, backward_fn=)"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "feat[5:8]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "92607599",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "eca4cde1",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
{
"cell_type": "markdown",
"id": "dad1fb76",
diff --git a/examples/fma.ipynb b/examples/fma.ipynb
new file mode 100644
index 0000000..35b86ce
--- /dev/null
+++ b/examples/fma.ipynb
@@ -0,0 +1,94 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "c3b837b4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import avagrad as ag"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "d3456753",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "a = ag.random.rand((3,3), track_gradient=True)\n",
+ "b = ag.random.rand((3,3), track_gradient=True)\n",
+ "c = ag.random.rand((3,3), track_gradient=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "8041ad56",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Tensor([[1.8777063 , 0.9567863 , 1.2879769 ],\n",
+ " [0.62437826, 1.2251703 , 0.8385898 ],\n",
+ " [0.835547 , 1.1380192 , 1.1682112 ]], dtype=float32, backward_fn=)"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ag.fma(a, b, c)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bf6bbf6a",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "65b5a9c5",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a6f37935",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/img/logo.png b/img/logo.png
new file mode 100644
index 0000000..973f19b
Binary files /dev/null and b/img/logo.png differ
diff --git a/profiling/ops.py b/profiling/ops.py
index 000b24a..dd70d78 100644
--- a/profiling/ops.py
+++ b/profiling/ops.py
@@ -1,6 +1,6 @@
import argparse
import cProfile
-import toydiff as tdf
+import avagrad as ag
from functools import partial
from pathlib import Path
@@ -13,7 +13,7 @@ def prof_func(func: callable, name: str, size: int):
profiler.enable()
func()
profiler.disable()
- version = tdf.__version__
+ version = ag.__version__
folder = PROFS_PATH / version
folder.mkdir(exist_ok=True)
profiler.dump_stats(folder / f"n={name}_s={size}.prof")
@@ -22,10 +22,10 @@ def prof_func(func: callable, name: str, size: int):
# -----------------------------------------------------------------------------
def test_matmul(size: int):
def exec(a, b):
- tdf.matmul(a, b)
+ ag.matmul(a, b)
- a = tdf.rand((size, size))
- b = tdf.rand((size, size))
+ a = ag.rand((size, size))
+ b = ag.rand((size, size))
func = partial(exec, a=a, b=b)
prof_func(func, "MatMul", size)
@@ -34,9 +34,9 @@ def test_matmul_backward(size: int):
def exec(c):
c.backward()
- a = tdf.rand((size, size), track_gradient=True)
- b = tdf.rand((size, size), track_gradient=True)
- c = tdf.matmul(a, b)
+ a = ag.rand((size, size), track_gradient=True)
+ b = ag.rand((size, size), track_gradient=True)
+ c = ag.matmul(a, b)
func = partial(exec, c=c)
prof_func(func, "MatMul.Backward", size)
diff --git a/setup.cfg b/setup.cfg
index 367273d..eeed9ef 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -6,14 +6,14 @@ license_files = LICENSE.txt
[versioneer]
VCS = git
style = pep440
-versionfile_source = src/toydiff/_version.py
-versionfile_build = toydiff/_version.py
+versionfile_source = src/avagrad/_version.py
+versionfile_build = avagrad/_version.py
tag_prefix = v
-parentdir_prefix = toydiff-
+parentdir_prefix = avagrad-
[tool:pytest]
minversion = 4.0.2
-testpaths = toydiff
+testpaths = avagrad
[coverage:run]
diff --git a/setup.py b/setup.py
index 862c078..06d7248 100644
--- a/setup.py
+++ b/setup.py
@@ -8,13 +8,13 @@
long_description = f.read()
setup(
- name='toydiff',
+ name='avagrad',
version=versioneer.get_version(),
cmdclass=versioneer.get_cmdclass(),
description="Tensor automatic differentiation and neural networks library",
long_description=long_description,
long_description_content_type='text/markdown',
- url='https://github.com/Xylambda/toydiff',
+ url='https://github.com/Xylambda/avagrad',
author='Alejandro Pérez-Sanjuán',
classifiers=[
'Development Status :: 3 - Alpha',
@@ -34,7 +34,6 @@
install_requires=[
"numpy",
"scipy",
- #"pyfma", # fused multiply-add
],
extras_require={
"test": [
@@ -44,6 +43,10 @@
"profile": [
"snakeviz",
"perfplot",
+ ],
+ "docs": [
+ "sphinx",
+ "furo",
]
}
)
\ No newline at end of file
diff --git a/src/toydiff/__init__.py b/src/avagrad/__init__.py
similarity index 70%
rename from src/toydiff/__init__.py
rename to src/avagrad/__init__.py
index 620e5cb..6e56351 100644
--- a/src/toydiff/__init__.py
+++ b/src/avagrad/__init__.py
@@ -1,4 +1,4 @@
-""" Small automatic differentiation package for scalars. """
+"""Tensor automatic differentiation and neural networks package. """
# relative subpacackges import
from . import exceptions, nn, random, utils
@@ -7,6 +7,6 @@
__version__ = get_versions()["version"]
del get_versions
-from toydiff.core import *
+from avagrad.core import *
__all__ = ["exceptions", "utils", "nn", "Tensor", "random"]
diff --git a/src/toydiff/_version.py b/src/avagrad/_version.py
similarity index 99%
rename from src/toydiff/_version.py
rename to src/avagrad/_version.py
index f232aca..fcfce20 100644
--- a/src/toydiff/_version.py
+++ b/src/avagrad/_version.py
@@ -42,7 +42,7 @@ def get_config():
cfg.style = "pep440"
cfg.tag_prefix = "v"
cfg.parentdir_prefix = "None"
- cfg.versionfile_source = "toydiff/_version.py"
+ cfg.versionfile_source = "avagrad/_version.py"
cfg.verbose = False
return cfg
diff --git a/src/toydiff/core.py b/src/avagrad/core.py
similarity index 82%
rename from src/toydiff/core.py
rename to src/avagrad/core.py
index 2aac3fb..96a6820 100644
--- a/src/toydiff/core.py
+++ b/src/avagrad/core.py
@@ -1,6 +1,6 @@
"""
-Core of the library toydiff. It contains:
- 1. A set of composable differentiable operations for toydiff.Tensor
+Core of the library avagrad. It contains:
+ 1. A set of composable differentiable operations for avagrad.Tensor
objects.
2. A Tensor class.
@@ -14,11 +14,12 @@
2. Then, a class is defined for each operation. Each class extends the
appropiate base class.
- 3. After each class, a function is created. The function makes use of the
- class and adds the backward function if needed to the result tensor.
+ 3. After each class, a function is created. Using this function will be
+ enough to generate a computational graph from which to obtain the
+ derivatives.
4. The Tensor class is created using the above function and, if possible,
- dunder/magic methods are used to ensure a smooth usage of the library.
+ dunder/magic methods are used to ensure a smooth use of the library.
"""
import warnings
@@ -28,13 +29,13 @@ class and adds the backward function if needed to the result tensor.
import numpy as np
from scipy.special import expit
-from toydiff.exceptions import (
+from avagrad.exceptions import (
GradientShapeError,
InplaceModificationError,
NullBackwardFunctionError,
ZeroGradientError,
)
-from toydiff.utils import gradient_collapse, topological_sort
+from avagrad.utils import gradient_collapse, topological_sort
__UNARY_OPS = [
"log",
@@ -61,6 +62,7 @@ class and adds the backward function if needed to the result tensor.
"maximum",
"minimum",
"divide",
+ "bmm",
]
__REDUCE_OPS = ["max", "min", "sum", "mean", "std"]
@@ -73,10 +75,18 @@ class and adds the backward function if needed to the result tensor.
"zeros_like",
"empty",
"empty_like",
- "fma", # TODO: at some point, we may need to add ternary ops
]
-__all__ = ["Tensor"] + __UNARY_OPS + __BINARY_OPS + __REDUCE_OPS + __OTHER
+__TERNARY = ["fma"]
+
+__all__ = (
+ ["Tensor"]
+ + __UNARY_OPS
+ + __BINARY_OPS
+ + __REDUCE_OPS
+ + __OTHER
+ + __TERNARY
+)
class Operation(ABC):
@@ -88,7 +98,7 @@ class Operation(ABC):
Attributes
----------
- out : toydiff.Tensor
+ out : avagrad.Tensor
"""
__slots__ = ["out", "track_gradient"]
@@ -109,7 +119,7 @@ def check_dtype_and_cast(self, obj: object, cast: bool = True) -> None:
if cast:
return Tensor(obj, is_leaf=True, track_gradient=True)
else:
- msg = "Operations are supported only for toydiff.Tensor instances"
+ msg = "Operations are supported only for avagrad.Tensor instances"
raise TypeError(msg)
else:
return obj
@@ -145,7 +155,7 @@ def forward(self, *args, **kwargs) -> "Tensor":
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
Output tensor.
"""
raise NotImplementedError("Subclasses must override this method")
@@ -159,12 +169,12 @@ def _backward_fn(self, gradient: Optional["Tensor"] = None) -> None:
"""Actual backward call.
This method ensures the passed gradient is not None and then calls
- the backward method that is implement for this operation using the
+ the backward method that is implemented for this operation using the
aforementioned gradient.
Parameters
----------
- gradient : toydiff.Tensor
+ gradient : avagrad.Tensor
"""
if gradient is None:
gradient = self.get_gradient()
@@ -180,7 +190,7 @@ def backward(self, gradient: Optional["Tensor"] = None) -> None:
Parameters
----------
- gradient : toydiff.Tensor, optional, default: None
+ gradient : avagrad.Tensor, optional, default: None
If None, a Tensor of 1's of the same shape as the output tensor of
this operation will be used.
"""
@@ -253,12 +263,12 @@ class BinaryOp(Operation):
Parameters
----------
- tensor_a : toydiff.Tensor
- tensor_b : toydiff.Tensor
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Attributes
----------
- parents : list of toydiff.Tensor
+ parents : list of avagrad.Tensor
"""
__slots__ = ["tensor_a", "tensor_b", "parents"]
@@ -307,6 +317,88 @@ def __init__(self, tensor: "Tensor"):
super().__init__(tensor=tensor)
+class TernaryOp(Operation): # where, fma
+ """Base class to implement ternary operations.
+
+ The method `get_value` will return the NumPy arrays of the `tensor_a`,
+ `tensor_b` and `tensor_c` in the same order they were passed.
+
+ Similarly, the method `_set_gradients` expects the first, second and thrid
+ arguments to be the gradients for the first, second and third tensors
+ passed in the constructors (respectively).
+
+ Parameters
+ ----------
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
+ tensor_c : avagrad.Tensor
+
+ Attributes
+ ----------
+ parents : list of avagrad.Tensor
+ """
+
+ __slots__ = ["tensor_a", "tensor_b", "tensor_c", "parents"]
+
+ def __init__(
+ self, tensor_a: "Tensor", tensor_b: "Tensor", tensor_c: "Tensor"
+ ):
+ tensor_a = self.check_dtype_and_cast(tensor_a)
+ tensor_b = self.check_dtype_and_cast(tensor_b)
+ tensor_c = self.check_dtype_and_cast(tensor_c)
+
+ if (
+ tensor_a.track_gradient
+ or tensor_b.track_gradient
+ or tensor_c.track_gradient
+ ):
+ track_gradient = True
+ else:
+ track_gradient = False
+
+ super().__init__(track_gradient=track_gradient)
+
+ self.tensor_a = tensor_a
+ self.tensor_b = tensor_b
+ self.tensor_c = tensor_c
+
+ self.parents = [self.tensor_a, self.tensor_b, self.tensor_c]
+
+ def get_value(self) -> np.ndarray:
+ return (
+ self.tensor_a.numpy(),
+ self.tensor_b.numpy(),
+ self.tensor_c.numpy(),
+ )
+
+ def _set_gradients(
+ self,
+ gradient_a: "Tensor",
+ gradient_b: "Tensor",
+ gradient_c: "Tensor",
+ ) -> None:
+ if self.tensor_a.track_gradient:
+ self.try_reshape(self.tensor_a, gradient_a)
+ if self.tensor_a.gradient is None:
+ self.tensor_a.gradient = gradient_a
+ else:
+ self.tensor_a.gradient.value += gradient_a.value
+
+ if self.tensor_b.track_gradient:
+ self.try_reshape(self.tensor_b, gradient_b)
+ if self.tensor_b.gradient is None:
+ self.tensor_b.gradient = gradient_b
+ else:
+ self.tensor_b.gradient.value += gradient_b.value
+
+ if self.tensor_c.track_gradient:
+ self.try_reshape(self.tensor_c, gradient_c)
+ if self.tensor_c.gradient is None:
+ self.tensor_c.gradient = gradient_c
+ else:
+ self.tensor_c.gradient.value += gradient_c.value
+
+
class OperationRunner:
"""Operation runner will take care of running an operation appropiately.
@@ -321,17 +413,17 @@ class OperationRunner:
Parameters
----------
- opration : toydiff.Operation
+ opration : avagrad.Operation
Operation to run.
tensors : iterable of tensors
Operands for the operation
Example
-------
- >>> import toydiff as tdf
- >>> tensor = tdf.Tensor([1, 2, 3, 4])
- >>> args, **kwargs = ...
- >>> out = tdf.OperationRunner(tdf.core.Add, tensor).run(*args, **kwargs)
+ >>> from avagrad.core import Sum, OperationRunner, Tensor
+ >>> tensor = ag.Tensor([1, 2, 3, 4])
+ >>> args, kwargs = ...
+ >>> out = OperationRunner(Sum, tensor).run(*args, **kwargs)
"""
__slots__ = ["operation"]
@@ -349,6 +441,83 @@ def run(self, *args, **kwargs) -> "Tensor":
return out
+# -----------------------------------------------------------------------------
+# ----------------------------- TERNARY OPERATIONS ----------------------------
+# -----------------------------------------------------------------------------
+class Where(TernaryOp):
+ def forward(self, *args, **kwargs) -> "Tensor":
+ return super().forward(*args, **kwargs)
+
+ def backward(self, gradient: Optional["Tensor"] = None) -> None:
+ pass
+
+
+# -----------------------------------------------------------------------------
+class FusedMatMulAdd(TernaryOp):
+ __slots__ = ["mm"]
+
+ def __init__(
+ self, tensor_a: "Tensor", tensor_b: "Tensor", tensor_c: "Tensor"
+ ):
+ super().__init__(tensor_a, tensor_b, tensor_c)
+ self.mm = None
+
+ def forward(self) -> "Tensor":
+ data_a, data_b, data_c = self.get_value()
+ self.mm = np.matmul(data_a, data_b)
+ return Tensor(
+ self.mm + data_c,
+ is_leaf=False,
+ track_gradient=self.track_gradient,
+ parents=self.parents,
+ op_name=self.__repr__(),
+ )
+
+ def backward(self, gradient: Optional["Tensor"] = None) -> None:
+ data_a, data_b, data_c = self.get_value()
+ grad_np = gradient.numpy()
+
+ grad_a = Tensor(np.matmul(grad_np, data_b.T))
+ grad_b = Tensor(np.matmul(data_a.T, grad_np))
+
+ # consider a the matmul and b the tensor c
+ _, grad_c = gradient_collapse(self.mm, data_c, self.mm, grad_np)
+ self._set_gradients(grad_a, grad_b, Tensor(grad_c))
+
+ def __repr__(self):
+ return "FusedMatMulAdd(TernaryOp)"
+
+
+def fma(
+ tensor_a: "Tensor", tensor_b: "Tensor", tensor_c: "Tensor"
+) -> "Tensor":
+ """Fused matrix multiplication and addition operator.
+
+ Performs a matrix multiplication of `tensor_a` and `tensor_b` and adds the
+ result to `tensor_c`.
+
+ Parameters
+ ----------
+ tensor_a : avagrad.Tensor
+ Tensor A of the matrix multiplication A x B.
+ tensor_b : avagrad.Tensor
+ Tensor B of the matrix multiplication A x B.
+ tensor_c : avagrad.Tensor
+ Tensor C of the operation (A x B) + C
+
+ Returns
+ -------
+ avagrad.Tensor
+ Output tensor.
+
+ Warning
+ -------
+ Currently, this operation is not performed by fusing the operations but by
+ chaining them in NumPy: np.matmul(a, b) + c
+ """
+ return OperationRunner(FusedMatMulAdd, tensor_a, tensor_b, tensor_c).run()
+
+
# -----------------------------------------------------------------------------
# ----------------------------- BINARY OPERATIONS -----------------------------
# -----------------------------------------------------------------------------
@@ -359,6 +528,7 @@ def forward(self, *args, **kwargs) -> "Tensor":
np.add(data_a, data_b, *args, **kwargs),
parents=self.parents,
is_leaf=False,
+ track_gradient=self.track_gradient,
op_name=self.__repr__(),
)
@@ -381,14 +551,14 @@ def add(tensor_a: "Tensor", tensor_b: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor_a : toydiff.Tensor
+ tensor_a : avagrad.Tensor
Tensor to be added.
- tensor_b : toydiff.Tensor
+ tensor_b : avagrad.Tensor
Tensor to be added.
Returns
-------
- out : toydiff.Tensor
+ out : avagrad.Tensor
The sum of tensor_a and tensor_b, element-wise.
"""
return OperationRunner(Add, tensor_a, tensor_b).run(*args, **kwargs)
@@ -406,14 +576,14 @@ def subtract(
Parameters
----------
- tensor_a : toydiff.Tensor
+ tensor_a : avagrad.Tensor
Tensor to subtract from.
- tensor_b : toydiff.Tensor
+ tensor_b : avagrad.Tensor
Subtracted tensor.
Returns
-------
- out : toydiff.Tensor
+ out : avagrad.Tensor
The difference of tensor_a and tensor_b, element-wise.
"""
return OperationRunner(Add, tensor_a, -tensor_b).run(*args, **kwargs)
@@ -423,7 +593,7 @@ def subtract(
class MatrixMultiplication(BinaryOp):
"""Matrix multiplication operation class.
- It implements the forward and backward passes, but `toydiff.matmul`
+ It implements the forward and backward passes, but `avagrad.matmul`
function should be used to compute the matrix product of two tensors, since
it will take care of making the appropiate checks and set the gradients.
"""
@@ -434,6 +604,7 @@ def forward(self, *args, **kwargs) -> "Tensor":
np.matmul(data_a, data_b, *args, **kwargs),
parents=self.parents,
is_leaf=False,
+ track_gradient=self.track_gradient,
op_name=self.__repr__(),
)
@@ -455,12 +626,12 @@ def matmul(
Parameters
----------
- tensor_a : toydiff.Tensor
- tensor_b : toydiff.Tensor
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Return
------
- out : toydiff.Tensor
+ out : avagrad.Tensor
Matrix product of the input tensors.
"""
return OperationRunner(MatrixMultiplication, tensor_a, tensor_b).run(
@@ -469,33 +640,61 @@ def matmul(
# -----------------------------------------------------------------------------
-# TODO: implement a more low-level operations
-def fma(
- tensor_a: "Tensor", tensor_b: "Tensor", tensor_c: "Tensor"
-) -> "Tensor":
- """Fused matrix multiplication and addition operator.
+class BatchMatrixMultiplication(BinaryOp):
+ def __init__(
+ self, tensor_a: "Tensor", tensor_b: "Tensor", tensor_c: "Tensor"
+ ):
+ if tensor_a.ndim != 3:
+ raise Exception("'tensor_a' must be a 3D tensor")
- Parameters
+ if tensor_b.ndim != 3:
+ raise Exception("'tensor_b' must be a 3D tensor")
+
+ super().__init__(tensor_a, tensor_b, tensor_c)
+
+ def forward(self):
+ data_a, data_b = self.get_value()
+ # np.stack([a[i] @ b[i] for i in range(a.shape[0])])
+ return Tensor(
+ np.eisum("ijk, ikz -> ijz", data_a, data_b),
+ parents=self.parents,
+ is_leaf=False,
+ track_gradient=self.track_gradient,
+ op_name=self.__repr__(),
+ )
+
+ def backward(self, gradient=None):
+ data_a, data_b = self.get_value()
+ grad_np = gradient.numpy()
+ grad_a = np.einsum(
+ "ijk, ikz -> ijz",
+ grad_np,
+ np.transpose(data_b.numpy(), (0, 2, 1)),
+ )
+ grad_b = np.einsum(
+ "ijk, ikz -> ijz", np.transpose(data_a, (0, 2, 1)), grad_np
+ )
+ self._set_gradients(Tensor(grad_a), Tensor(grad_b))
+
+ def __repr__(self):
+ return "BatchMatrixMultiplication(BinaryOp)"
+
+
+def bmm(tensor_a: "Tensor", tensor_b: "Tensor") -> "Tensor":
+ """Batch matrix-matrix product of 2 tensors.
+
+ Both `tensor_a` and `tensor_b` must be 3D tensors.
+
+ Paremeters
----------
- tensor_a : toydiff.Tensor
- Tensor A of the matrix multiplication A x B.
- tensor_b : toydiff.Tensor
- Tensor B of the matrix multiplication A x B.
- tensor_c : toydiff.Tensor
- Tensor C of the operation (A x B) + C
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Returns
-------
- toydiff.Tensor
- Output tensor.
-
- Warning
- -------
- Currently, this operation is not performed by fusing the operations but by
- chaining them. Expect this to change in the future.
+ avagrad.Tensor
"""
- # TODO: https://github.com/nschloe/pyfma
- return add(matmul(tensor_a, tensor_b), tensor_c)
+ return Operation(BatchMatrixMultiplication, tensor_a, tensor_b).run()
# -----------------------------------------------------------------------------
@@ -506,6 +705,7 @@ def forward(self, *args, **kwargs):
np.multiply(data_a, data_b, *args, **kwargs),
parents=self.parents,
is_leaf=False,
+ track_gradient=self.track_gradient,
op_name=self.__repr__(),
)
@@ -530,12 +730,12 @@ def multiply(
Paremeters
----------
- tensor_a : toydiff.Tensor
- tensor_b : toydiff.Tensor
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
"""
return OperationRunner(Multiply, tensor_a, tensor_b).run(*args, **kwargs)
@@ -550,12 +750,12 @@ def divide(
Paremeters
----------
- tensor_a : toydiff.Tensor
- tensor_b : toydiff.Tensor
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
"""
return OperationRunner(Multiply, tensor_a, power(tensor_b, -1)).run(
*args, **kwargs
@@ -601,12 +801,12 @@ def power(tensor_a: "Tensor", tensor_b: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor_a : toydiff.Tensor
- tensor_b : toydiff.Tensor
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Return
------
- out : toydiff.Tensor
+ out : avagrad.Tensor
Power operation of the input tensors.
"""
return OperationRunner(Power, tensor_a, tensor_b).run(*args, **kwargs)
@@ -654,12 +854,12 @@ def maximum(
Paremeters
----------
- tensor_a : toydiff.Tensor
- tensor_b : toydiff.Tensor
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Returns
-------
- out : toydiff.Tensor
+ out : avagrad.Tensor
The maximum of tensor_1 and tensor_b, element-wise.
"""
return OperationRunner(Maximum, tensor_a, tensor_b).run(*args, **kwargs)
@@ -707,12 +907,12 @@ def minimum(
Paremeters
----------
- tensor_a : toydiff.Tensor
- tensor_b : toydiff.Tensor
+ tensor_a : avagrad.Tensor
+ tensor_b : avagrad.Tensor
Returns
-------
- out : toydiff.Tensor
+ out : avagrad.Tensor
The minimum of tensor_1 and tensor_b, element-wise.
"""
return OperationRunner(Minimum, tensor_a, tensor_b).run(*args, **kwargs)
@@ -743,7 +943,7 @@ def log(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
"""
return OperationRunner(Log, tensor).run(*args, **kwargs)
@@ -781,12 +981,12 @@ def sigmoid(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Paremters
---------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Tensor to apply the sigmoid to.
Returns
-------
- out : toydiff.Tensor
+ out : avagrad.Tensor
Logistic sigmoid.
"""
return OperationRunner(Sigmoid, tensor).run(*args, **kwargs)
@@ -817,12 +1017,12 @@ def negative(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Input tensor.
Returns
-------
- out : toydiff.Tensor
+ out : avagrad.Tensor
Returned tensor.
"""
return OperationRunner(Negative, tensor).run(*args, **kwargs)
@@ -853,11 +1053,11 @@ def sin(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Return
------
- out : toydiff.Tensor
+ out : avagrad.Tensor
"""
return OperationRunner(Sin, tensor).run(*args, **kwargs)
@@ -887,11 +1087,11 @@ def cos(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Return
------
- out : toydiff.Tensor
+ out : avagrad.Tensor
"""
return OperationRunner(Cos, tensor).run(*args, **kwargs)
@@ -921,11 +1121,11 @@ def tan(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Return
------
- out : toydiff.Tensor
+ out : avagrad.Tensor
"""
return OperationRunner(Tan, tensor).run(*args, **kwargs)
@@ -936,11 +1136,11 @@ def cosh(tensor: "Tensor") -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Return
------
- out : toydiff.Tensor
+ out : avagrad.Tensor
"""
return (tensor.exp() + (-tensor).exp()) / 2
@@ -950,11 +1150,11 @@ def sinh(tensor: "Tensor") -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Return
------
- out : toydiff.Tensor
+ out : avagrad.Tensor
"""
return (tensor.exp() - (-tensor).exp()) / 2
@@ -964,7 +1164,6 @@ class Reshape(UnaryOp):
def forward(self, newshape, order="C"):
return Tensor(
np.reshape(self.get_value(), newshape=newshape, order=order),
- dtype=self.tensor.dtype,
is_leaf=False,
parents=self.parents,
track_gradient=self.track_gradient,
@@ -994,7 +1193,7 @@ def reshape(
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Tensor to be reshaped.
newshape : int or tuple or ints
The new shape should be compatible with the original shape. If an
@@ -1011,7 +1210,7 @@ def reshape(
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
This will be a new view object if possible; otherwise, it will be a
copy. Note there is no guarantee of the memory layout (C- or Fortran-
contiguous) of the returned tensor.
@@ -1055,7 +1254,6 @@ def forward(self, axes=None):
self.axes = axes
return Tensor(
np.transpose(data, axes=axes),
- dtype=self.tensor.dtype,
is_leaf=False,
track_gradient=self.track_gradient,
parents=self.parents,
@@ -1164,7 +1362,7 @@ def max(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
"""
return OperationRunner(Max, tensor).run(*args, **kwargs)
@@ -1197,7 +1395,7 @@ def min(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
"""
return OperationRunner(Min, tensor).run(*args, **kwargs)
@@ -1227,12 +1425,12 @@ def sum(tensor: "Tensor", *args, **kwargs) -> "Tensor":
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
Elements to sum.
Returns
-------
- out : toydiff.Tensor
+ out : avagrad.Tensor
Added elements.
"""
return OperationRunner(Sum, tensor).run(*args, **kwargs)
@@ -1313,7 +1511,7 @@ def mean(
Parameters
----------
- tensor : toydiff.Tensor
+ tensor : avagrad.Tensor
axis : int, optional, default: None
Axis or axes along which the means are computed. The default is to
compute the mean of the flattened array.
@@ -1349,12 +1547,22 @@ def std(
ddof: int = 0,
keepdims: bool = False,
):
+ """Compute the standard deviation along the specified axis.
+
+ Parameters
+ ----------
+ tensor : avagrad.Tensor
+ axis : int, optional, default: None
+ Axis or axes along which the stds are computed. The default is to
+ compute the std of the flattened array.
+ ddof : int. optional, default: 0
+ Degrees of freedom.
+ keepdims : bool, optional, default: False
+ If this is set to True, the axes which are reduced are left in the
+ result as dimensions with size one. With this option, the result will
+ broadcast correctly against the input array
"""
- return OperationRunner(StandardDeviation, tensor).run(
- axis=axis, keepdims=keepdims, ddof=ddof
- )
- """
- # TODO: much more faster to create a ReduceOp
+ # TODO: it will probably be much faster to create a ReduceOp
return power(
power(tensor - tensor.mean(axis=axis, keepdims=keepdims), 2).sum()
/ (len(tensor) - ddof),
@@ -1423,7 +1631,7 @@ def empty_like(
# ------------------------------- Tensor Class --------------------------------
# -----------------------------------------------------------------------------
class Tensor:
- """A toydiff.Tensor is a multi-dimensional matrix containing elements of a
+ """A avagrad.Tensor is a multi-dimensional matrix containing elements of a
single data type.
Chaining tensors with arbitrary operations will generate a differentiable
@@ -1436,15 +1644,15 @@ class Tensor:
Tensor creation
---------------
You can create a tensor passing an array or an array-wrappable object:
- >>> import toydiff as tdf
+ >>> import avagrad as ag
>>> import numpy as np
- >>> a = tdf.Tensor([1, 2, 3], track_gradient=True)
- >>> b = tdf.Tensor(np.random.rand(3, 3), track_gradient=True)
+ >>> a = ag.Tensor([1, 2, 3], track_gradient=True)
+ >>> b = ag.Tensor(np.random.rand(3, 3), track_gradient=True)
- ToyDiff also supports some functions to generate Tensors with ease:
- >>> tdf.rand((3,3), track_gradient=True)
- >>> tdf.zeros((3,3), track_gradient=True)
- >>> tdf.ones_like(a, track_gradient=True)
+ avagrad also supports some functions to generate Tensors with ease:
+ >>> ag.rand((3,3), track_gradient=True)
+ >>> ag.zeros((3,3), track_gradient=True)
+ >>> ag.ones_like(a, track_gradient=True)
Forward computation
-------------------
@@ -1456,8 +1664,8 @@ class Tensor:
We can add as many operations as we want:
- >>> d = tdf.log(c)
- >>> e = tdf.sum(d)
+ >>> d = ag.log(c)
+ >>> e = ag.sum(d)
Backward computation
--------------------
@@ -1545,7 +1753,7 @@ def detach(self) -> "Tensor":
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
Detached tensor.
"""
return Tensor(self.value.copy(), dtype=self.dtype, is_leaf=True)
@@ -1623,6 +1831,10 @@ def matmul(self, other, *args, **kwargs) -> "Tensor":
"""Matrix multiplication between self and passed tensor"""
return matmul(self, other, *args, **kwargs)
+ def bmm(self, other) -> "Tensor":
+ """Batch matrix multiplication between self and passed tensor"""
+ return bmm(self, other)
+
def max(self, *args, **kwargs) -> "Tensor":
"""Maximum of self tensor along given axis."""
return max(self, *args, **kwargs)
@@ -1652,19 +1864,19 @@ def sum(self, *args, **kwargs) -> "Tensor":
return sum(self, *args, **kwargs)
def log(self, *args, **kwargs) -> "Tensor":
- """Calculate the natural log of all elements in self tensor."""
+ """Compute the natural log of all elements in self tensor."""
return log(self, *args, **kwargs)
def exp(self) -> "Tensor":
- """Calculate the exponential of all elements in self tensor."""
+ """Compute the exponential of all elements in self tensor."""
return exp(self)
def sigmoid(self, *args, **kwargs) -> "Tensor":
- """Calculate sigmoid for all elements in self tensor."""
+ """Compute sigmoid for all elements in self tensor."""
return sigmoid(self, *args, **kwargs)
def abs(self, *args, **kwargs) -> "Tensor":
- """Calculate absolute value for all elements in self tensor."""
+ """Compute absolute value for all elements in self tensor."""
return abs(self, *args, **kwargs)
def __repr__(self):
@@ -1759,14 +1971,14 @@ def backward(self, gradient: Optional["Tensor"] = None) -> None:
Parameters
----------
- gradient : toydiff.Tensor, optional, default: None
+ gradient : avagrad.Tensor, optional, default: None
Starting gradient. If None, a gradient Tensor of 1s and shape equal
to self tensor shape will be passed.
"""
if self.is_leaf:
warn = (
"Calling 'backward' on a leaf tensor will have no effect other"
- " than filling its gradient with ones"
+ " than filling its gradient with ones or passed gradient"
)
warnings.warn(warn)
diff --git a/src/toydiff/exceptions.py b/src/avagrad/exceptions.py
similarity index 75%
rename from src/toydiff/exceptions.py
rename to src/avagrad/exceptions.py
index 50a7b9f..478cb34 100644
--- a/src/toydiff/exceptions.py
+++ b/src/avagrad/exceptions.py
@@ -1,13 +1,13 @@
"""
-Specific exceptions known to the use of ToyDiff.
+Specific exceptions known to the use of AvaGrad.
"""
-class ToyDiffError(Exception):
+class AvaGradError(Exception):
"""Base class for for exception in this module"""
-class NullBackwardFunctionError(ToyDiffError):
+class NullBackwardFunctionError(AvaGradError):
"""Exception raised when a call to a non-existing backward function is
made
"""
@@ -16,7 +16,7 @@ def __init__(self, message) -> None:
self.message = message
-class GradientShapeError(ToyDiffError):
+class GradientShapeError(AvaGradError):
"""Exception raised when a gradient tensor shape does not match the shape
of the tensor it is associated with.
"""
@@ -25,7 +25,7 @@ def __init__(self, message) -> None:
self.message = message
-class InplaceModificationError(ToyDiffError):
+class InplaceModificationError(AvaGradError):
"""Exception raised when user is trying to modify a tensor whose
`backward_fn` has already been called.
"""
@@ -34,7 +34,7 @@ def __init__(self, message) -> None:
self.message = message
-class ZeroGradientError(ToyDiffError):
+class ZeroGradientError(AvaGradError):
"""Exception reaised when is not possible to zero the gradient of a Tensor."""
def __init__(self, message) -> None:
diff --git a/src/toydiff/nn/__init__.py b/src/avagrad/nn/__init__.py
similarity index 100%
rename from src/toydiff/nn/__init__.py
rename to src/avagrad/nn/__init__.py
diff --git a/src/toydiff/nn/blocks.py b/src/avagrad/nn/blocks.py
similarity index 97%
rename from src/toydiff/nn/blocks.py
rename to src/avagrad/nn/blocks.py
index 5df4ade..8893e1c 100644
--- a/src/toydiff/nn/blocks.py
+++ b/src/avagrad/nn/blocks.py
@@ -6,8 +6,8 @@
from itertools import chain
from typing import Dict, Iterator, Optional, Tuple
-from toydiff.core import Tensor, fma, matmul
-from toydiff.random import randn
+from avagrad.core import Tensor, fma, matmul
+from avagrad.random import randn
__all__ = ["Module", "Linear"]
diff --git a/src/toydiff/nn/functional.py b/src/avagrad/nn/functional.py
similarity index 94%
rename from src/toydiff/nn/functional.py
rename to src/avagrad/nn/functional.py
index 9d62746..4355424 100644
--- a/src/toydiff/nn/functional.py
+++ b/src/avagrad/nn/functional.py
@@ -2,7 +2,7 @@
Pool of composed non-optimizable (stateless) functions. Each function is
created using the basic operations implemented in core.py
"""
-from toydiff.core import Tensor, log, maximum
+from avagrad.core import Tensor, log, maximum
__all__ = [
"relu",
@@ -68,14 +68,14 @@ def mse_loss(
Parameters
----------
- output : toydiff.Tensor
+ output : avagrad.Tensor
Predicted tensor.
- target : toydiff.Tensor
+ target : avagrad.Tensor
Real tensor.
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
MSE loss.
"""
if reduction == "mean":
@@ -99,14 +99,14 @@ def mae_loss(
Parameters
----------
- output : toydiff.Tensor
+ output : avagrad.Tensor
Predicted tensor.
- target : toydiff.Tensor
+ target : avagrad.Tensor
Real tensor.
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
MAE loss.
"""
if reduction == "mean":
diff --git a/src/toydiff/nn/init.py b/src/avagrad/nn/init.py
similarity index 95%
rename from src/toydiff/nn/init.py
rename to src/avagrad/nn/init.py
index f3f0ca5..e57ffdf 100644
--- a/src/toydiff/nn/init.py
+++ b/src/avagrad/nn/init.py
@@ -4,7 +4,7 @@
"""
import numpy as np
-from toydiff import Tensor
+from avagrad import Tensor
__all__ = ["kaiming_uniform"]
diff --git a/src/toydiff/nn/optim.py b/src/avagrad/nn/optim.py
similarity index 97%
rename from src/toydiff/nn/optim.py
rename to src/avagrad/nn/optim.py
index 77aff54..5eb6375 100644
--- a/src/toydiff/nn/optim.py
+++ b/src/avagrad/nn/optim.py
@@ -3,7 +3,7 @@
"""
from abc import abstractmethod
-from toydiff.nn.blocks import Module
+from avagrad.nn.blocks import Module
__all__ = ["Optimizer", "SGD"]
diff --git a/src/toydiff/random.py b/src/avagrad/random.py
similarity index 95%
rename from src/toydiff/random.py
rename to src/avagrad/random.py
index 9e94361..c00dd37 100644
--- a/src/toydiff/random.py
+++ b/src/avagrad/random.py
@@ -7,7 +7,7 @@
import numpy as np
-from toydiff.core import Tensor
+from avagrad.core import Tensor
__all__ = ["rand", "randn"]
@@ -27,7 +27,7 @@ def rand(shape: Tuple[int], track_gradient: bool = False) -> Tensor:
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
Generated tensor.
"""
return Tensor(np.random.rand(*shape), track_gradient=track_gradient)
@@ -51,7 +51,7 @@ def randn(shape: Tuple[int], track_gradient: bool = False) -> Tensor:
Returns
-------
- toydiff.Tensor
+ avagrad.Tensor
Generated tensor.
"""
return Tensor(np.random.randn(*shape), track_gradient=track_gradient)
diff --git a/src/toydiff/testing.py b/src/avagrad/testing.py
similarity index 95%
rename from src/toydiff/testing.py
rename to src/avagrad/testing.py
index eedec69..6500722 100644
--- a/src/toydiff/testing.py
+++ b/src/avagrad/testing.py
@@ -4,7 +4,7 @@
import numpy as np
import torch
-import toydiff as tdf
+import avagrad as tdf
def generate_input(shape, n_tensors=1):
diff --git a/src/toydiff/utils.py b/src/avagrad/utils.py
similarity index 98%
rename from src/toydiff/utils.py
rename to src/avagrad/utils.py
index 1d989c5..42c9595 100644
--- a/src/toydiff/utils.py
+++ b/src/avagrad/utils.py
@@ -1,5 +1,5 @@
"""
-Useful utilities for the use of toydiff.
+Useful utilities for the use of avagrad.
"""
from typing import List, Tuple
diff --git a/tests/test_core/test_funcs/test_binary/test_add.py b/tests/test_core/test_funcs/test_binary/test_add.py
index fdc513f..869918d 100644
--- a/tests/test_core/test_funcs/test_binary/test_add.py
+++ b/tests/test_core/test_funcs/test_binary/test_add.py
@@ -1,15 +1,15 @@
-import toydiff as tdf
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
def test_1d():
# test 1d
(t1, t1_torch), (t2, t2_torch) = generate_input((3,))
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -35,7 +35,7 @@ def test_2d():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -62,7 +62,7 @@ def test_2d_2d():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,1))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -89,7 +89,7 @@ def test_3d_1d():
# test 2d
(t1, t1_torch) = generate_input((3,3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -116,7 +116,7 @@ def test_3d_2d():
# test 2d
(t1, t1_torch) = generate_input((3,3,3))[0]
(t2, t2_torch) = generate_input((3,1))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -143,7 +143,7 @@ def test_2d_3d():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,1,3))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -170,7 +170,7 @@ def test_3d_3d():
# test 2d
(t1, t1_torch) = generate_input((4,6,2))[0]
(t2, t2_torch) = generate_input((1,1,1))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -197,7 +197,7 @@ def test_3d_3d_2():
# test 2d
(t1, t1_torch) = generate_input((4,6,2))[0]
(t2, t2_torch) = generate_input((1,1,2))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
@@ -223,7 +223,7 @@ def test_4d_1d():
# test 2d
(t1, t1_torch) = generate_input((4,6,2,7))[0]
(t2, t2_torch) = generate_input((1,))[0]
- out = tdf.add(t1, t2)
+ out = ag.add(t1, t2)
out_torch = torch.add(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_binary/test_divide.py b/tests/test_core/test_funcs/test_binary/test_divide.py
index 9c25fbb..6bbd998 100644
--- a/tests/test_core/test_funcs/test_binary/test_divide.py
+++ b/tests/test_core/test_funcs/test_binary/test_divide.py
@@ -1,15 +1,15 @@
-import toydiff as tdf
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
def test_divide():
# test 1d
(t1, t1_torch), (t2, t2_torch) = generate_input((3,))
- out = tdf.divide(t1, t2)
+ out = ag.divide(t1, t2)
out_torch = torch.divide(t1_torch, t2_torch)
# call backward
@@ -34,7 +34,7 @@ def test_divide():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.divide(t1, t2)
+ out = ag.divide(t1, t2)
out_torch = torch.divide(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_binary/test_matmul.py b/tests/test_core/test_funcs/test_binary/test_matmul.py
index 06520c3..e7c7d4e 100644
--- a/tests/test_core/test_funcs/test_binary/test_matmul.py
+++ b/tests/test_core/test_funcs/test_binary/test_matmul.py
@@ -1,8 +1,8 @@
-import toydiff as tdf
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -10,7 +10,7 @@ def test_matmul():
# test 2d
(t1, t1_torch) = generate_input((5,3))[0]
(t2, t2_torch) = generate_input((3,6))[0]
- out = tdf.matmul(t1, t2)
+ out = ag.matmul(t1, t2)
out_torch = torch.matmul(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_binary/test_maximum.py b/tests/test_core/test_funcs/test_binary/test_maximum.py
index 8ee8e23..eed2030 100644
--- a/tests/test_core/test_funcs/test_binary/test_maximum.py
+++ b/tests/test_core/test_funcs/test_binary/test_maximum.py
@@ -1,15 +1,15 @@
-import toydiff as tdf
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
def test_maximum():
# test 1d
(t1, t1_torch), (t2, t2_torch) = generate_input((3,))
- out = tdf.maximum(t1, t2)
+ out = ag.maximum(t1, t2)
out_torch = torch.maximum(t1_torch, t2_torch)
# call backward
@@ -34,7 +34,7 @@ def test_maximum():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.maximum(t1, t2)
+ out = ag.maximum(t1, t2)
out_torch = torch.maximum(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_binary/test_minimum.py b/tests/test_core/test_funcs/test_binary/test_minimum.py
index 98aaede..3ec5510 100644
--- a/tests/test_core/test_funcs/test_binary/test_minimum.py
+++ b/tests/test_core/test_funcs/test_binary/test_minimum.py
@@ -1,15 +1,15 @@
-import toydiff as tdf
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
def test_minimum():
# test 1d
(t1, t1_torch), (t2, t2_torch) = generate_input((3,))
- out = tdf.minimum(t1, t2)
+ out = ag.minimum(t1, t2)
out_torch = torch.minimum(t1_torch, t2_torch)
# call backward
@@ -34,7 +34,7 @@ def test_minimum():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.minimum(t1, t2)
+ out = ag.minimum(t1, t2)
out_torch = torch.minimum(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_binary/test_multiply.py b/tests/test_core/test_funcs/test_binary/test_multiply.py
index 5e3d408..105f2c2 100644
--- a/tests/test_core/test_funcs/test_binary/test_multiply.py
+++ b/tests/test_core/test_funcs/test_binary/test_multiply.py
@@ -1,15 +1,15 @@
-import toydiff as tdf
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
def test_1d():
# test 1d
(t1, t1_torch), (t2, t2_torch) = generate_input((3,))
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -35,7 +35,7 @@ def test_2d():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -62,7 +62,7 @@ def test_2d_2d():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,1))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -89,7 +89,7 @@ def test_3d_1d():
# test 2d
(t1, t1_torch) = generate_input((3,3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -116,7 +116,7 @@ def test_3d_2d():
# test 2d
(t1, t1_torch) = generate_input((3,3,3))[0]
(t2, t2_torch) = generate_input((3,1))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -143,7 +143,7 @@ def test_2d_3d():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,1,3))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -172,7 +172,7 @@ def test_3d_3d():
# test 2d
(t1, t1_torch) = generate_input((4,6,2))[0]
(t2, t2_torch) = generate_input((1,1,1))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -199,7 +199,7 @@ def test_3d_3d_2():
# test 2d
(t1, t1_torch) = generate_input((4,6,2))[0]
(t2, t2_torch) = generate_input((1,1,2))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
@@ -225,7 +225,7 @@ def test_4d_1d():
# test 2d
(t1, t1_torch) = generate_input((4,6,2,7))[0]
(t2, t2_torch) = generate_input((1,))[0]
- out = tdf.multiply(t1, t2)
+ out = ag.multiply(t1, t2)
out_torch = torch.multiply(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_binary/test_power.py b/tests/test_core/test_funcs/test_binary/test_power.py
index aa5b809..1a096bc 100644
--- a/tests/test_core/test_funcs/test_binary/test_power.py
+++ b/tests/test_core/test_funcs/test_binary/test_power.py
@@ -1,15 +1,15 @@
-import toydiff as tdf
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
def test_power():
# test 1d
(t1, t1_torch), (t2, t2_torch) = generate_input((3,))
- out = tdf.power(t1, t2)
+ out = ag.power(t1, t2)
out_torch = torch.pow(t1_torch, t2_torch)
# call backward
@@ -34,7 +34,7 @@ def test_power():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.power(t1, t2)
+ out = ag.power(t1, t2)
out_torch = torch.pow(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_binary/test_subtract.py b/tests/test_core/test_funcs/test_binary/test_subtract.py
index d2c311e..5bd263f 100644
--- a/tests/test_core/test_funcs/test_binary/test_subtract.py
+++ b/tests/test_core/test_funcs/test_binary/test_subtract.py
@@ -1,15 +1,16 @@
-import toydiff as tdf
+
+import avagrad as ag
import numpy as np
import torch
-from toydiff.testing import generate_input
+from avagrad.testing import generate_input
RTOL = 1e-06
def test_subtract():
# test 1d
(t1, t1_torch), (t2, t2_torch) = generate_input((3,))
- out = tdf.subtract(t1, t2)
+ out = ag.subtract(t1, t2)
out_torch = torch.subtract(t1_torch, t2_torch)
# call backward
@@ -34,7 +35,7 @@ def test_subtract():
# test 2d
(t1, t1_torch) = generate_input((3,3))[0]
(t2, t2_torch) = generate_input((3,))[0]
- out = tdf.subtract(t1, t2)
+ out = ag.subtract(t1, t2)
out_torch = torch.subtract(t1_torch, t2_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_abs.py b/tests/test_core/test_funcs/test_unary/test_abs.py
index d74f895..ee7d922 100644
--- a/tests/test_core/test_funcs/test_unary/test_abs.py
+++ b/tests/test_core/test_funcs/test_unary/test_abs.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_sin():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.abs(tensor)
+ out = ag.abs(tensor)
out_torch = torch.abs(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_sin():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.abs(tensor)
+ out = ag.abs(tensor)
out_torch = torch.abs(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_cos.py b/tests/test_core/test_funcs/test_unary/test_cos.py
index a7997ee..cffb7db 100644
--- a/tests/test_core/test_funcs/test_unary/test_cos.py
+++ b/tests/test_core/test_funcs/test_unary/test_cos.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_cos():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.cos(tensor)
+ out = ag.cos(tensor)
out_torch = torch.cos(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_cos():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.cos(tensor)
+ out = ag.cos(tensor)
out_torch = torch.cos(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_exp.py b/tests/test_core/test_funcs/test_unary/test_exp.py
index 7dcbb16..1026e6a 100644
--- a/tests/test_core/test_funcs/test_unary/test_exp.py
+++ b/tests/test_core/test_funcs/test_unary/test_exp.py
@@ -1,7 +1,8 @@
+
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +12,7 @@ def test_exp():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.exp(tensor)
+ out = ag.exp(tensor)
out_torch = torch.exp(tensor_torch)
# call backward
@@ -31,7 +32,7 @@ def test_exp():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.exp(tensor)
+ out = ag.exp(tensor)
out_torch = torch.exp(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_log.py b/tests/test_core/test_funcs/test_unary/test_log.py
index aab2582..54ee9ee 100644
--- a/tests/test_core/test_funcs/test_unary/test_log.py
+++ b/tests/test_core/test_funcs/test_unary/test_log.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_log():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.log(tensor)
+ out = ag.log(tensor)
out_torch = torch.log(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_log():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.log(tensor)
+ out = ag.log(tensor)
out_torch = torch.log(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_mean.py b/tests/test_core/test_funcs/test_unary/test_mean.py
index 8f2f796..37c8611 100644
--- a/tests/test_core/test_funcs/test_unary/test_mean.py
+++ b/tests/test_core/test_funcs/test_unary/test_mean.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_mean():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.mean(tensor)
+ out = ag.mean(tensor)
out_torch = torch.mean(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_mean():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.mean(tensor)
+ out = ag.mean(tensor)
out_torch = torch.mean(tensor_torch)
# call backward
@@ -51,7 +51,7 @@ def test_mean():
# -------------------------------------------------------------------------
# test 2d (with axis)
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.mean(tensor, axis=0)
+ out = ag.mean(tensor, axis=0)
out_torch = torch.mean(tensor_torch, dim=0)
# call backward
@@ -71,7 +71,7 @@ def test_mean():
# -------------------------------------------------------------------------
# test 2d (with axis)
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.mean(tensor, axis=1)
+ out = ag.mean(tensor, axis=1)
out_torch = torch.mean(tensor_torch, dim=1)
# call backward
@@ -91,7 +91,7 @@ def test_mean():
# -------------------------------------------------------------------------
# test 3d (with axis)
tensor, tensor_torch = generate_input((5, 5, 5))[0]
- out = tdf.mean(tensor, axis=0)
+ out = ag.mean(tensor, axis=0)
out_torch = torch.mean(tensor_torch, dim=0)
# call backward
@@ -111,7 +111,7 @@ def test_mean():
# -------------------------------------------------------------------------
# test 3d (with axis)
tensor, tensor_torch = generate_input((5, 5, 5))[0]
- out = tdf.mean(tensor, axis=1)
+ out = ag.mean(tensor, axis=1)
out_torch = torch.mean(tensor_torch, dim=1)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_negative.py b/tests/test_core/test_funcs/test_unary/test_negative.py
index dab969b..609fe45 100644
--- a/tests/test_core/test_funcs/test_unary/test_negative.py
+++ b/tests/test_core/test_funcs/test_unary/test_negative.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_negative():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.negative(tensor)
+ out = ag.negative(tensor)
out_torch = torch.negative(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_negative():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.negative(tensor)
+ out = ag.negative(tensor)
out_torch = torch.negative(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_reshape.py b/tests/test_core/test_funcs/test_unary/test_reshape.py
index da3eed4..a58a55f 100644
--- a/tests/test_core/test_funcs/test_unary/test_reshape.py
+++ b/tests/test_core/test_funcs/test_unary/test_reshape.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_reshape():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((3, ))[0]
- out = tdf.reshape(tensor, (-1, 1))
+ out = ag.reshape(tensor, (-1, 1))
out_torch = torch.reshape(tensor_torch, (-1, 1))
# call backward
@@ -31,7 +31,7 @@ def test_reshape():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((3, 2))[0]
- out = tdf.reshape(tensor, (2, 3))
+ out = ag.reshape(tensor, (2, 3))
out_torch = torch.reshape(tensor_torch, (2, 3))
# call backward
@@ -51,7 +51,7 @@ def test_reshape():
# -------------------------------------------------------------------------
# test 3d
tensor, tensor_torch = generate_input((3, 2, 3))[0]
- out = tdf.reshape(tensor, (-1, 1, 1))
+ out = ag.reshape(tensor, (-1, 1, 1))
out_torch = torch.reshape(tensor_torch, (-1, 1, 1))
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_sign.py b/tests/test_core/test_funcs/test_unary/test_sign.py
index aff9e63..b2f3c54 100644
--- a/tests/test_core/test_funcs/test_unary/test_sign.py
+++ b/tests/test_core/test_funcs/test_unary/test_sign.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_sign():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.sign(tensor)
+ out = ag.sign(tensor)
out_torch = torch.sign(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_sign():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.sign(tensor)
+ out = ag.sign(tensor)
out_torch = torch.sign(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_sin.py b/tests/test_core/test_funcs/test_unary/test_sin.py
index 7961055..c29ab24 100644
--- a/tests/test_core/test_funcs/test_unary/test_sin.py
+++ b/tests/test_core/test_funcs/test_unary/test_sin.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_sin():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.sin(tensor)
+ out = ag.sin(tensor)
out_torch = torch.sin(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_sin():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.sin(tensor)
+ out = ag.sin(tensor)
out_torch = torch.sin(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_std.py b/tests/test_core/test_funcs/test_unary/test_std.py
index 93dc925..99d09e3 100644
--- a/tests/test_core/test_funcs/test_unary/test_std.py
+++ b/tests/test_core/test_funcs/test_unary/test_std.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
diff --git a/tests/test_core/test_funcs/test_unary/test_tan.py b/tests/test_core/test_funcs/test_unary/test_tan.py
index 9304138..0eb9572 100644
--- a/tests/test_core/test_funcs/test_unary/test_tan.py
+++ b/tests/test_core/test_funcs/test_unary/test_tan.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_tan():
# -------------------------------------------------------------------------
# test 1d
tensor, tensor_torch = generate_input((5, ))[0]
- out = tdf.tan(tensor)
+ out = ag.tan(tensor)
out_torch = torch.tan(tensor_torch)
# call backward
@@ -31,7 +31,7 @@ def test_tan():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.tan(tensor)
+ out = ag.tan(tensor)
out_torch = torch.tan(tensor_torch)
# call backward
diff --git a/tests/test_core/test_funcs/test_unary/test_transpose.py b/tests/test_core/test_funcs/test_unary/test_transpose.py
index 6a07ccb..59a22d9 100644
--- a/tests/test_core/test_funcs/test_unary/test_transpose.py
+++ b/tests/test_core/test_funcs/test_unary/test_transpose.py
@@ -1,7 +1,7 @@
import torch
import numpy as np
-import toydiff as tdf
-from toydiff.testing import generate_input
+import avagrad as ag
+from avagrad.testing import generate_input
RTOL = 1e-06
@@ -11,7 +11,7 @@ def test_transpose():
# -------------------------------------------------------------------------
# test 2d
tensor, tensor_torch = generate_input((5, 5))[0]
- out = tdf.transpose(tensor, (1, 0))
+ out = ag.transpose(tensor, (1, 0))
out_torch = torch.permute(tensor_torch, (1, 0))
# call backward
diff --git a/tests/test_core/test_graphs.py b/tests/test_core/test_graphs.py
index 82aac34..e429419 100644
--- a/tests/test_core/test_graphs.py
+++ b/tests/test_core/test_graphs.py
@@ -3,7 +3,7 @@
"""
import torch
import numpy as np
-import toydiff as tdf
+import avagrad as ag
RTOL = 1e-06
@@ -11,12 +11,12 @@
def test_graph_std():
"""Test graph to compute the standard deviation statistic"""
arr = np.random.rand(5)
- tensor = tdf.Tensor(arr, track_gradient=True)
+ tensor = ag.Tensor(arr, track_gradient=True)
t_tensor = torch.Tensor(arr)
t_tensor.requires_grad = True
- std = tdf.power(
- tdf.power(tensor - tensor.mean(), 2).sum() / len(tensor), 0.5
+ std = ag.power(
+ ag.power(tensor - tensor.mean(), 2).sum() / len(tensor), 0.5
)
std.backward()
@@ -31,15 +31,15 @@ def test_graph_std():
def test_graph_a():
arr = np.random.rand(5, 5)
- tensor_a = tdf.Tensor(arr, track_gradient=True)
- tensor_b = tdf.Tensor(arr * 5, track_gradient=True)
+ tensor_a = ag.Tensor(arr, track_gradient=True)
+ tensor_b = ag.Tensor(arr * 5, track_gradient=True)
t_tensor_a = torch.Tensor(arr)
t_tensor_a.requires_grad = True
t_tensor_b = torch.Tensor(arr * 5)
t_tensor_b.requires_grad = True
- out = tdf.log(tdf.matmul(tensor_a, tensor_b.T)).mean()
+ out = ag.log(ag.matmul(tensor_a, tensor_b.T)).mean()
out_t = torch.log(torch.matmul(t_tensor_a, t_tensor_b.T)).mean()
out.backward()
@@ -54,15 +54,15 @@ def test_graph_a():
def test_graph_b():
arr = np.random.rand(5, 5)
- tensor_a = tdf.Tensor(arr, track_gradient=True)
- tensor_b = tdf.Tensor(arr * 5, track_gradient=True)
+ tensor_a = ag.Tensor(arr, track_gradient=True)
+ tensor_b = ag.Tensor(arr * 5, track_gradient=True)
t_tensor_a = torch.Tensor(arr)
t_tensor_a.requires_grad = True
t_tensor_b = torch.Tensor(arr * 5)
t_tensor_b.requires_grad = True
- out = tdf.exp(tdf.matmul(tensor_a, tensor_b)).sum()
+ out = ag.exp(ag.matmul(tensor_a, tensor_b)).sum()
out_t = torch.exp(torch.matmul(t_tensor_a, t_tensor_b)).sum()
out.backward()
@@ -77,15 +77,15 @@ def test_graph_b():
def test_graph_c():
arr = np.random.rand(5, 5)
- tensor_a = tdf.Tensor(arr, track_gradient=True)
- tensor_b = tdf.Tensor(arr * 5, track_gradient=True)
+ tensor_a = ag.Tensor(arr, track_gradient=True)
+ tensor_b = ag.Tensor(arr * 5, track_gradient=True)
t_tensor_a = torch.Tensor(arr)
t_tensor_a.requires_grad = True
t_tensor_b = torch.Tensor(arr * 5)
t_tensor_b.requires_grad = True
- out = tdf.matmul(tdf.power(tensor_a, 2), tensor_b / -2).mean()
+ out = ag.matmul(ag.power(tensor_a, 2), tensor_b / -2).mean()
out_t = torch.matmul(torch.pow(t_tensor_a, 2), t_tensor_b / -2).mean()
out.backward()
@@ -100,9 +100,9 @@ def test_graph_c():
def test_graph_fma():
arr = np.random.rand(5, 5)
- tensor_a = tdf.Tensor(arr, track_gradient=True)
- tensor_b = tdf.Tensor(arr * 5, track_gradient=True)
- tensor_c = tdf.Tensor(arr[:, [1]], track_gradient=True)
+ tensor_a = ag.Tensor(arr, track_gradient=True)
+ tensor_b = ag.Tensor(arr * 5, track_gradient=True)
+ tensor_c = ag.Tensor(arr[:, [1]], track_gradient=True)
t_tensor_a = torch.Tensor(arr.copy())
t_tensor_a.requires_grad = True
@@ -111,7 +111,7 @@ def test_graph_fma():
t_tensor_c = torch.Tensor(arr[:, [1]])
t_tensor_c.requires_grad = True
- out = tdf.matmul(tensor_a, tensor_b) + tensor_c
+ out = ag.matmul(tensor_a, tensor_b) + tensor_c
out_t = torch.matmul(t_tensor_a, t_tensor_b) + t_tensor_c
out.backward()
@@ -128,9 +128,9 @@ def test_graph_fma():
def test_graph_fma_1d():
arr = np.random.rand(1, 1)
arr_b = np.random.rand(1,)
- tensor_a = tdf.Tensor(arr, track_gradient=True)
- tensor_b = tdf.Tensor(arr * 5, track_gradient=True)
- tensor_c = tdf.Tensor(arr_b, track_gradient=True)
+ tensor_a = ag.Tensor(arr, track_gradient=True)
+ tensor_b = ag.Tensor(arr * 5, track_gradient=True)
+ tensor_c = ag.Tensor(arr_b, track_gradient=True)
t_tensor_a = torch.Tensor(arr.copy())
t_tensor_a.requires_grad = True
@@ -139,7 +139,7 @@ def test_graph_fma_1d():
t_tensor_c = torch.Tensor(arr_b)
t_tensor_c.requires_grad = True
- out = tdf.fma(tensor_a, tensor_b, tensor_c)
+ out = ag.fma(tensor_a, tensor_b, tensor_c)
out_t = torch.matmul(t_tensor_a, t_tensor_b) + t_tensor_c
out.backward()
diff --git a/tests/test_nn/test_functional.py b/tests/test_nn/test_functional.py
index 42d4f1a..5dca5f3 100644
--- a/tests/test_nn/test_functional.py
+++ b/tests/test_nn/test_functional.py
@@ -1,6 +1,6 @@
import torch
-from toydiff.testing import generate_input
-from toydiff.nn.functional import (
+from avagrad.testing import generate_input
+from avagrad.nn.functional import (
relu, sigmoid, softmax, softmin, tanh, mse_loss, mae_loss
)