{ "cells": [ { "cell_type": "markdown", "id": "1313879b", "metadata": {}, "source": [ "# Multi-Physics Pipeline with End-to-End Gradient Optimization\n", "\n", "In this tutorial, you will learn how to:\n", "\n", "1. Build two independent physics Tesseracts from different domains -- a thermal solver and a structural solver.\n", "2. Compose them into a two-way coupled pipeline with Tesseract-JAX, where each solver feeds back into the other.\n", "3. Compute end-to-end gradients through the coupled iteration with `jax.grad`, and validate them against finite differences.\n", "4. Perform gradient-based optimization of a thermoelastic inverse-design problem using `scipy.optimize`.\n", "5. Switch to implicit differentiation for constant-memory gradients via the implicit function theorem.\n", "\n", "## Context\n", "\n", "Many engineering systems are *multi-physics*: their behaviour emerges from the interaction of several physical processes, each usually modelled by its own specialized solver. A classic example is *thermoelasticity* -- a temperature field makes a material expand, the resulting deformation changes the geometry, and the changed geometry in turn changes how heat flows. Neither solver is correct on its own; the answer lives in the coupling between them.\n", "\n", "Designing such systems means solving inverse problems through the coupled physics: *what inputs produce the behaviour we want, once everything has settled into equilibrium?* Answering that efficiently requires gradients through the full coupled chain. Traditionally this means either a fragile hand-coded adjoint or rewriting every solver into one monolithic codebase.\n", "\n", "Tesseracts offer a different path, and that is what this demo shows:\n", "\n", "- **Separation of solvers** --- each physics component is its own Tesseract, with its own implementation, dependencies, and AD strategy. Teams can develop and ship them independently.\n", "- **Composition with autodiff** --- because each Tesseract exposes its derivatives, Tesseract-JAX wires them into a single differentiable pipeline. `jax.grad` then propagates gradients through the entire two-way coupling automatically --- no manual adjoint, no monolithic rewrite.\n", "- **JAX interoperability** --- the coupled iteration is expressed with `jax.lax.scan`, and standard JAX and optimization tooling applies directly to the composed pipeline.\n", "\n", "We demonstrate this on a thermoelastic inverse-design problem: find the heat-source location and intensity that produce a set of target temperatures, *after* the thermal and structural solvers have reached a coupled equilibrium." ] }, { "cell_type": "code", "execution_count": 1, "id": "06fd4954", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:07:54.103627Z", "iopub.status.busy": "2026-07-28T13:07:54.103564Z", "iopub.status.idle": "2026-07-28T13:07:54.828192Z", "shell.execute_reply": "2026-07-28T13:07:54.827728Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "# Install additional requirements for this notebook\n", "%pip install -r requirements.txt -q" ] }, { "cell_type": "code", "execution_count": 2, "id": "5bb76f54", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:07:54.829637Z", "iopub.status.busy": "2026-07-28T13:07:54.829552Z", "iopub.status.idle": "2026-07-28T13:07:56.515100Z", "shell.execute_reply": "2026-07-28T13:07:56.514708Z" } }, "outputs": [], "source": [ "import jax\n", "import jax.numpy as jnp\n", "import lineax as lx\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import optimistix as optx\n", "from scipy.optimize import minimize\n", "from tesseract_jax import apply_tesseract\n", "\n", "from tesseract_core import Tesseract" ] }, { "cell_type": "markdown", "id": "d5f9d3bd", "metadata": {}, "source": [ "## Step 1: Build and serve the solver Tesseracts\n", "\n", "Each solver is a standalone Tesseract module with its own `tesseract_api.py`:\n", "\n", "- **`thermal_solver`** solves the 2D steady-state heat equation for a Gaussian heat source. When a displacement field is supplied (from the structural solver), it deforms the mesh accordingly --- this is what makes the coupling two-way.\n", "- **`structural_solver`** solves 2D linear thermoelasticity: given a temperature field, it returns the displacement and stress fields produced by thermal expansion.\n", "\n", "We use the `tesseract build` CLI to build each module into a container image. Building can take a few minutes the first time, as the images bundle their dependencies." ] }, { "cell_type": "code", "execution_count": 3, "id": "e7cbfe3c", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:07:56.516631Z", "iopub.status.busy": "2026-07-28T13:07:56.516520Z", "iopub.status.idle": "2026-07-28T13:07:59.508435Z", "shell.execute_reply": "2026-07-28T13:07:59.507765Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[?25l" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[37m⠋\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K \u001b[1;2m[\u001b[0m\u001b[34mi\u001b[0m\u001b[1;2m]\u001b[0m Building image \u001b[33m...\u001b[0m\n", "\u001b[37m⠋\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠙\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠹\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠸\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠼\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠴\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠦\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠧\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠇\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠏\u001b[0m \u001b[37mProcessing\u001b[0m\n", "\u001b[?25h\r", "\u001b[1A\u001b[2K" ] }, { "name": "stderr", "output_type": "stream", "text": [ " \u001b[1;2m[\u001b[0m\u001b[34mi\u001b[0m\u001b[1;2m]\u001b[0m Built image sh\u001b[1;92ma256:8e9a\u001b[0m9f84d5fc, \u001b[1m[\u001b[0m\u001b[32m'thermal" ] }, { "name": "stderr", "output_type": "stream", "text": [ "-solver:0.1.0'\u001b[0m, \u001b[32m'thermal-solver:latest'\u001b[0m\u001b[1m]\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[\"thermal-solver:0.1.0\", \"thermal-solver:latest\"]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[?25l" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[37m⠋\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K \u001b[1;2m[\u001b[0m\u001b[34mi\u001b[0m\u001b[1;2m]\u001b[0m Building image \u001b[33m...\u001b[0m\n", "\u001b[37m⠋\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠙\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠹\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠸\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠼\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠴\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠦\u001b[0m \u001b[37mProcessing\u001b[0m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[2K\u001b[37m⠧\u001b[0m \u001b[37mProcessing\u001b[0m\n", "\u001b[?25h\r", "\u001b[1A\u001b[2K" ] }, { "name": "stderr", "output_type": "stream", "text": [ " \u001b[1;2m[\u001b[0m\u001b[34mi\u001b[0m\u001b[1;2m]\u001b[0m Built image sh\u001b[1;92ma256:040f\u001b[0m246a63c8, \u001b[1m[\u001b[0m\u001b[32m'structu" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ral-solver:0.1.0'\u001b[0m, \u001b[32m'structural-solver:latest'\u001b[0m\u001b[1m]\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[\"structural-solver:0.1.0\", \"structural-solver:latest\"]\n" ] } ], "source": [ "%%bash\n", "# Build both solver Tesseracts into container images\n", "tesseract build thermal_solver/\n", "tesseract build structural_solver/" ] }, { "cell_type": "markdown", "id": "382df23c", "metadata": {}, "source": [ "Next we load the built images and start a server for each one using the Tesseract Python SDK. This gives us two running Tesseract instances we can call from Python. We keep references to both so we can compose them in the following steps." ] }, { "cell_type": "code", "execution_count": 4, "id": "5b94d0e0", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:07:59.510703Z", "iopub.status.busy": "2026-07-28T13:07:59.510589Z", "iopub.status.idle": "2026-07-28T13:08:05.893485Z", "shell.execute_reply": "2026-07-28T13:08:05.892876Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Thermal solver: 2D steady-state heat equation solver with Gaussian source parameterization\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Structural solver: 2D linear thermoelastic stress solver with compliance objective\n" ] } ], "source": [ "# Load the built images and start a server for each Tesseract\n", "thermal = Tesseract.from_image(\"thermal-solver\")\n", "structural = Tesseract.from_image(\"structural-solver\")\n", "\n", "thermal.serve()\n", "structural.serve()\n", "\n", "print(\"Thermal solver:\", thermal.openapi_schema[\"info\"][\"description\"])\n", "print(\"Structural solver:\", structural.openapi_schema[\"info\"][\"description\"])" ] }, { "cell_type": "markdown", "id": "d357b55e", "metadata": {}, "source": [ "## Step 2: Test a forward evaluation with Tesseract-JAX\n", "\n", "Before coupling the solvers, let's verify each one works and visualize the physics. The `apply_tesseract` function from [tesseract-jax](https://github.com/pasteurlabs/tesseract-jax) makes a served Tesseract callable as a JAX-compatible function -- which is what later lets us differentiate through it.\n", "\n", "We run the thermal solver for a centered heat source, then feed its temperature field into the structural solver to obtain the resulting displacement and stress." ] }, { "cell_type": "code", "execution_count": 5, "id": "eb352133", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:08:05.896017Z", "iopub.status.busy": "2026-07-28T13:08:05.895917Z", "iopub.status.idle": "2026-07-28T13:08:07.249306Z", "shell.execute_reply": "2026-07-28T13:08:07.248611Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABWMAAAGPCAYAAAA5ncKaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAm3RJREFUeJzt3Q+8FHW9+P/37J7/cAABFSUUNRQVAwUh0FJvXDFJo1tG1hUio1uJqdxr/knBskJLCX9CkhZq3ytBVpKplyKKzMRLAl61RCv/QCj/RP6dw/m3O7/He3D37Dns4bw/Ozvnz+7r2WPC3fOez87Ozsxn5jOfeX883/d9AQAAAAAAAABEKhZt8QAAAAAAAAAARWMsAAAAAAAAAHQAGmMBAAAAAAAAoAPQGAsAAAAAAAAAHYDGWAAAAAAAAADoADTGAgAAAAAAAEAHoDEWAAAAAAAAADoAjbEAAAAAAAAA0AFojAUAAAAAAACADkBjLAAAAAAAAAB0ABpjAQAAABSFJ598Ui666CI5+uijxfM8WbZsWeSfuXnzZvn3f/936devn1RWVsppp50mzz77bOSfCwAAuiYaYwEAAAAUhZqaGhk+fLgsWLCgQz7vnXfekbPOOktKS0vlf/7nf+Svf/2r3HnnnXLYYYd1yOcDAICux/N93+/shQAAAACAjqQ9Yx955BGZNGlS+r36+nr52te+Jj/5yU9k165dMmzYMLn99tvl3HPPzekzrr/+evnTn/4kf/zjH/O45AAAoDujZywAAAAAiMiMGTNk9erVsmTJEnn++eflkksukQsuuED+9re/5bR+Hn30URk1alRQzhFHHCGnn3663HfffaxrAACKGD1jAQAAAEix94zduHGjHH/88cG/mlM2Zfz48TJ69Gj59re/7fwZFRUVwb8zZ84MGmT//Oc/y1VXXSULFy6UqVOn5vHbAACA7qKksxcAAAAAADrbCy+8IIlEQk488cQW72vqAh18S23YsEFOPvnkQ5Zz3XXXyW233Rb8dzKZDHrGphpytWfsiy++SGMsAABFjMZYAAAAAEVv3759Eo/HZe3atcG/mXr27Bn8qz1nX3rppUOuq1TDrTrqqKPklFNOafF3bcz9+c9/XvTrGwCAYkXOWKCAfPe73w0uEvQCYsSIEcF7gwcPls9+9rM5P753yy23tBunMRoLAN1B1McsPebqsRfF7YEHHgi2s9dff71DPi9MfQ9J91rVnrHbtm2T9773vS2mAQMGBDFlZWUydOjQQ06HH354epWeddZZ8vLLL7dYxa+88ooce+yxrHagwFivnQCAxli0qDws06pVq4p2rX3/+98PLq66ot/85jfy1a9+NTjpv//++3PKawYA3bXBKzVpfkbN9ThhwgT5//6//0/27t3b2YuIDE888URRX6h25fOIYur9+txzzwWTeu2114L/1jyxmp7gM5/5jEyZMkV+8YtfBH9bs2aNzJkzRx5//PGcPu+aa66RZ555Jjgv+/vf/y6LFy+We++9V6644oo8fzOg+7n44oulqqrqkHW17pN6E+Ttt9/u8POKp5566qC/+74vgwYNCv7+kY98RAqBHpfmzZvX2YsBFBXSFCDt//2//9dibfz4xz+WFStWHPR+e3myCv0iqn///l2y58nvfvc7icVi8qMf/Sg4YUnR3hj6PgAUsm984xty3HHHSWNjo2zZsiW4cXj11VfL3Llzg9HM3/e+96Vjb7rpJrn++us7dXmLuTF2wYIFRdEge9lll8mnPvUpKS8v7xbnEcXi2WeflfPOOy/9WgfWUjqYljbC6A3tb37zm/Kf//mfsnnz5uD3ev/7359zo8uZZ54ZDBJ2ww03pI9T2uihDUxAsdP94Fe/+lWwj+hNkNZqa2vll7/8pVxwwQUt0n90BL25q42UZ599dov3//CHP8g///nPFsf2lP3790tJSfdrYtHvqbms9bwJQMfofkcKRObf//3fW7zWu/jaGNv6/UKhdzXr6uqksrKyIJZDH6nTMjIbYlW2EwUAKDQf/vCHg0FyUrThQ29SaQOK9rzRHI+p46xeKHXHiyV0L5oyqHXeUXS+c889Nzj3aktpaal8/etfD6Z80eNQofSgA/JJ6+fq6uqgMTBbY6w2xNbU1HTKzYsLL7xQHn744eApm8xzBl3WkSNHyo4dO7I24BY6vW7V6006+wDh0F0OTnREWL2bf+qppwaVzZFHHin/8R//Ie+8885Becv0pFN7JunFsV4An3baaekUB/rol77WMrQyW79+fYv5tceIDpTw6quvBo+a9ujRI3jsVHsUtD6Bdl2mX//61+ll+sEPfhD8TXtB/Mu//IscccQRQeOlDrRwzz33HDT/X/7yl+BuaOrRFT2hP1T+wWz54g61HLt27QruSOqjL7ocmqPs9ttvD77joehn6HfQk5XUsqUeg8yWQy7Xz1H6uI728tB1fcIJJ6SXHQC6Gj2u33zzzfLGG2/If//3f6ffz3bM1puP2vulT58+Qf1z0kknyY033pj+u9ZfOs/SpUuD9zV/pNZNeiG5adOmdpfljjvukHHjxgU9e/S4r3Xfz372s6yxuqyjR48OHt087LDD5IMf/GCQiibT//zP/8gHPvCBYBn0QnbixIlBHZWtLtXHr7Xe0f8eOHBg0DM1NXK8riMtQ/NX6gVma5b6Qus4XTf6HfXxa60bNFbrij//+c8tlif12ZmpJQ4l7PnE888/H3yu5lPXGP3dPve5z2V93DX1GZn1W7ZtRV/PmDFDli1bJsOGDQu+q56DLF++/JDnAPk6j9DzIO25+Z73vCfYRrSXZ+vf3uX3A4DOosf0f/u3f5OVK1cGHUta03pJ6zita5VeG15yySXSt2/f4PinvdZbpxBJ1dc//elP5Vvf+lZwrNTj+oc+9KEgVYjVpZdeGtQVen6Q0tDQENTdn/70p005YzX9gh6D9fivx2C91vzXf/1XWbduXYv5/vd//zfo/du7d+/ge51zzjnypz/9qUWMtazW2ptP6yFdh3qulKqbUnnvU+tyyZIlwVNFeg6hy7dnz568Lvff/vY3+fjHPx7U0fpb6W+mT5bs3r273d8J6K7oFgIn2sipFwbTpk2Tr3zlK0Eurfnz5wcXP3rg1d4EKVrZaUWl82jvWr1Iu+iii2ThwoXBheyXv/zlIE7zcH3yk5886HF6HUBBD+5ayX7nO98JLnJmz54tTU1NQaNsLsukn6EVq84zffr04GJbacOrXkhpRa93PvVxGV0+vVhJ5fTSBt8rr7wyuJj92te+FrynDb+5yLYc+hiOVmD6SJy+f8wxx8jTTz8d9O566623DpnHR1NJ6AWw5jX74Q9/GLynF/3ZhPkcvXA///zzg4Ep9ERDfwv9TXJdDwDQEY+Ka52jjZl6vM1GG7K0wU9TGWj9ohcLWoe1vqBQemGnFybXXXddcOGox8zx48cHOScP9YTDXXfdFdQx2rtHL+b0wkYvKB977LGgITVFe+Pp8VWP4bos2vtEL3a0l68ef1PHfH2kWm9WasOaHte1HtPGZK37MgcP07pUew1rg67WpQ899FDQkKgNsFqX6fLohbDWzdoraezYscFj1LnUF3rRrBddGqvrSD9Py9aLZ62L9f0333wzawqkQwlzPqGfpZ+v5wh6kae/tdaX+q8+AZRqANX1puccOvK9/ga63nT9Zw7E1PrGpDYE62drQ4H2nNILSW34butR2nydR8yaNStojNVeWzrpBa1uG7pd5au+B4COovXQgw8+GDSeav2UsnPnzqDzil4zaf26devWoG7UY5te8+mxVufTulUbSD/2sY+1KPe2224L6oL/+q//Chr1tE7Sz9I61ULrUq0Tf/KTnwT1aOpGqJalDYV63G/PF7/4xWDZ9HtpZx9t3NX6Q5/WOeOMM4IYrd+1fL2hqNdVusypjkJ//OMfg5uz1rJyWQatj/Q7aeqF733ve8E8Wk9luvXWW4PzEV2X9fX1wX/na7m17tLzGS1X60itq7Xe0vMjvaGoDb1AQfKBNlxxxRXaBTX9+o9//GPw+qGHHmoRt3z58oPeP/bYY4P3nn766fR7v/71r4P3Kisr/TfeeCP9/g9+8IPg/d///vfp96ZOnRq8d+WVV6bfSyaT/sSJE/2ysjJ/+/btOS+T/q212trag96bMGGCf/zxx7d479RTT/XPOeecg2Jnz57dYl2l3H///cH7r732WrvLceutt/o9evTwX3nllRbvX3/99X48Hvc3btzoH4quM52/Nf08/Vsun6PLqd8tZdKkSX5FRUWL3++vf/1rMB+Hk+5v//79/u7du0NNWgbQkVLH2T//+c9txvTu3ds//fTT2zxmf+973wtep+qWbLSO0piBAwf6e/bsSb//05/+NHj/rrvuSr+nx1w99h6qnmloaPCHDRvm/8u//Ev6vb/97W9+LBbzP/axj/mJRKJFvNaBau/evX6fPn386dOnt/j7li1bgu+Z+X6qLv32t7+dfu+dd94J6mHP8/wlS5ak39+wYcNBx3xrfaF1nM7br18/f+fOnem4X/7yl8H7v/rVr9o8t2hP2POJbPX7T37ykyDuySefTL930UUX+VVVVf7mzZtb/B4lJSUHLa++1nORv//97+n3/u///i94/+677z7kOUDY84ht27YFn63nQ6ltQt14441BXK71PTqnzqTeBHy/qanJP+qoo/yxY8e2WB0LFy4Mjmt6zFdXX3118Fqv/1K0TjzuuOP8wYMHp+vNVH198skn+/X19elYraf1/RdeeMF8XjF//ny/uro6XZdccskl/nnnnZeu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BgB0mZyxe/bsaTHV12fvQbZjxw5JJBJy5JFHtnhfX2/Z4tCrPOIyAQDoCmkKHn30URk1apRccsklcsQRR8jpp58u9913Hz8OAKBb6Iz0Pl0VjbEAgLzmjNVeO717905Pc+bMYQ0DAAq3a2yYyeEm5quvvir33HOPDBkyRH7961/Ll770JfnKV74iDz74YMd+bwAAckBjbDMaYwEAebVp0ybZvXt3espMGZCpf//+Eo/HZevWlvm59HVbg3O1J4oyAQCIkvUmZjKZlDPOOEO+/e1vB71iv/CFLwQ50jU3OgAAONiCBQtk8ODBUlFRIWPGjJE1a9bIoTz88MMydOjQIF4HyXziiSfajP3iF78onufJvHnzxBWNsQCAZskQvWLfTVPQq1evFlN5efZBC8rKymTkyJGycuXK5o9PJoPXY8eOzelXiaJMAACyCvuo5buPW1pvYh511FFyyimntHjv5JNPlo0bN/IDAQC6PD/ZnDfWz2ly+7ylS5fKzJkzZfbs2bJu3ToZPny4TJgwQbZtyz6o39NPPy2XXnqpXH755bJ+/XqZNGlSML344osHxT7yyCPyzDPPyNFH2wfMzURjLAAgrzljXWjlqPnu9BHLl156KXjksqamRqZNmxb8fcqUKS0uSnWArueeey6Y9L83b94c/Pff//53c5kAAOSD74efXG5innXWWfLyyy+3eO+VV16RY489lh8UANDldXSagrlz5wZPkOh1oN7M1CdJqqqqZNGiRVnj77rrLrngggvk2muvDW523nrrrcETKfPnz28Rp9egV155pTz00ENSWlracY2xrt18d+3aJVdccUVwN1dPLk488cRDdvUFAHTfnLEuJk+eLHfccYfMmjVLRowYETSsLl++PD0Al/b2eeutt9Lxb775ZvBopk76vs6r//35z3/eXGZnoN4EgMLT0ReV11xzTdALR9MU6E3IxYsXy7333htcZxUS6kwAKEy+Hws9WWnHnbVr18r48ePT78ViseD16tWrs86j72fGK+1JmxmvT11edtllQYPtqaeeKrkqcZ0h1c1XW5S1IVZzI+jC6V1aHdUz2wr413/91+BvP/vZz2TgwIHyxhtvSJ8+fXJeaABA4ZgxY0YwZbNq1aoWr/VGoJ/qSpRjmR2NehMAkA9nnnlm8FikPjHyjW98Q4477rjgWuwzn/lMwaxg6kwAQHt0sMtM2umz9VMlO3bskEQicVCHHH29YcOGrOVu2bIla7y+n3L77bdLSUlJMIBmGM6NsZndfJU2yj7++ONBN9/rr7/+oHh9f+fOnUHuhVT3Xb2YBgB0QTmmG0jPi4NQbwJAgcrI+5rz/I4+8pGPBFOhos4EgMKV9L1gylVqXh34MpPmhL3lllskatrTVlMZaP5ZHbirwxpjU918M/P3tdfN99FHHw0GTdHHZ375y1/K4YcfLp/+9KfluuuuC0a8zqa+vj6Y2mr1bk/2UrNzye5Qkec4VeUQ6/V0CHbpeHy4Q2zLbf7QjneIPergXtXZfcih0JEOse+RaPzTIdZhpPejmgcnOqS92RNTZ7XTHipvRrMtumzjVfvssS77ZEUExw6XY1KnyzHdQHpedHi92Vad6ce9YGqP73ImUNJ+r+SUHmUNprjDSmvNZfaL23f8vjHb56vqmPO9aZO9ySZz7PZEtTn2pf22gQL+/LY9j+Rr2/qZYxt3Z89nGVZp7+btuD3bj3CoMIxfrU+8xlzk4TH7svaJ2WuBCofz+r5+QyT7jss+ad3PtzscO1yOSZZjXBAXpsH0kOU2533NdX50nWtNT2LB1J6Yw5ld0mHTixkzCJY67CSlcfsjvRUOJ6xVcfsd+F5lDsfLHvbjcK9+u8yxVYO2muJKhpiLlOTAE82xiT7Wa1038V32a72SavtAf1ViW1+N9WXmMmtqe5hj39lvbyWpqrOfk1S0cUzIpjRm33dKm0ryvp97nv3zXY5JlmOcS5yzdwfiylmyeeBLzbGeki3Xev/+/YN6YOvWltuzvh4wIHvbi75/qPg//vGPweBfxxxzTPrv2vv2P//zP4MnVV5//XXzV3Faw4fq5pvZbTfTq6++GqQn0Pk0T+zNN98sd955p3zzm99s83PmzJkjvXv3Tk+tW70BAOgOOqLepM4EABQCrjUBABaWgS/Lyspk5MiRsnLlyhb5XvW13sTLRt/PjFcrVqxIx2uu2Oeffz49oLRORx99dJA/9te//rW4iKYrSAb9spovVpPLa6u0rgwdeey73/1u0JU4G70bqnlpM+9W0iALAB2AnrGdzrXepM4EgE6iPVvD9G6lZ2xoXGsCQPeRy+CVmVzn1XbFqVOnyqhRo2T06NFB79Wampp02tUpU6YE41pp5xZ11VVXyTnnnBN0hJk4caIsWbJEnn322eC6TPXr1y+YMmk6Vu05e9JJJ0XXGJtLN9+jjjoqWLjMx0ROPvnkoEeQPoqirdWtZUu+CwDoAOSMzauOqDepMwGgOC4qCx3XmgBQ2Dq63pw8ebJs375dZs2aFVxLjRgxQpYvX55+anHjxo1BOpyUcePGyeLFi+Wmm26SG2+8UYYMGSLLli2TYcOGSb45pSnIpZvvWWedJX//+9+DuJRXXnkluNjM1hALAOhEyYzesa4TA3gdhHoTAIqkd2wuE1qgzgSA4miM9UNMrmbMmCFvvPFGkCv8f//3f2XMmDHpv61atUoeeOCBFvGXXHKJvPzyy0H8iy++KBdeeOEhy9c8sVdffbXzcjln5dVuvvfdd588+OCD8tJLL8mXvvSlg7r5ZiZd17/v3Lkz6O6rjbCPP/64fPvb3w6SrAMAUOioNwEAoM4EACDnnLGu3Xw116smsr3mmmvkfe97X5CPQRtmdYRLAEAXQ5qCvKPeBIDCRJqC/KPOBIDClfRjwZSrMPN2NTkN4KXdfHXKRrv5tqYpDJ555plcPgoA0JEYwCsS1JsAUIAYwCsS1JkAUMA3MZPkWleF06wMAAAAAAAAAIXWMxYAUKDoGQsAgJH27sm9h0+4eQEA6F5I79OMxlgAQDNyxgIAYEOaAgAAzGiM7aaNsfF3J0tcFHkarLFlDmVWOMRKD4fYaofY3g6xfR1iBzjEyqnGuJEOZY5xiH2PRGNgROVusYUN2BbNb9s7om3RYRuv2GePLYtgP3c5dsQjio0EPWOLrsOW77LRlWjLg015vMkU1zNeZy6zOrbfIdbe46zSsx8lmoKdxKbRIXZXwn4AfL22nynutW22OOX9vcoce9hmiUTNQPsyvOZQ7uGVtgrj5Mo3zWU2lr5tji317DtZiUMtUB1LRLLvuOyT1v3c5djhdEzyOrkDKo2xBSX27v/a4zmcBbqcL3rG/T/msEHHHbb9UoeFrYjr3XubypJGc2xVpf1YVdF7rzm2ZIDtuJYceKK5zPrjRpljpfo4iULTYfbasNyh3JK9r5jiKrbbf4OqHfsj2WZctkWXbdxl33HZJ+37ub0ydDsmRXG1a5f0vWDKVZh5uxpyxgIAAAAAAABAB+hWPWMBABGjZywAADbaQydML50C6uEDAEB7SFPQjMZYAEDLRy7tT/u0ZH8KFQCAbs/3D0xh5gcAoFjQGNuMNAUAAAAAAAAA0AHoGQsAaEaaAgAAbBjACwAAMwbwakZjLACgWTJEmoJc5wMAoDsiZywAAI7pfXLPl15I6X1ojAUANKNnLAAAJp5/YMpVmHkBAOhuyBnbjJyxAAAAAAAAANAB6BkLAGhGz1gAAGzIGQsAgFPPWM0bm6swKQ66GhpjAQDNyBkLAIANOWMBADAjTUEzGmMdxI1xpRGU6VxwhUNsD4fYKofYaodYGWCMe49DmS6xg6Xzbc7/+qqO6LftEdG2WBrNvhPZPlmI6BlbMHzPC6b24+xlejF7gsOyuG5M7avwmsxlusSWevZMTHGH2Cbf9r1UwmHl1iTLzbE7620H7Mbd9jIPc6iCjnxmt0Rh6/t7m2PfOTz/68vlN3D5bV24bIsu23hU+5l1P3c5drisWssxziXOGT1jC4onMfG6wZmgLqVV3GHbjzskMXaJLYnbR3gtKW20L0NlgzlWetiO74k+R9jLrD7OHFrV4wSJQq1DbKLPRnNsrMcbef8NXH5bl20mqu3WZd9x2Sc7m/UY50U0MjONsc3IGQsAAAAAAAAAHYCesQCAZnoT1N7xr6VobqACANA10TMWAACzZMicsUlyxgIAChI5YwEAsKExFgAAM9IUNCNNAQAAAAAAAAB0ANIUAACaMYAXAAA2+rhkmEcmC+hxSwAA2kOagmY0xgIAmpGmAAAAEx2Y22Fw7qzzAwBQLHzxgilXYebtamiMBQA0o2csAAA25IwFAMCMnLHNyBkLAAAAAAAAAB2AnrEAgGb0jAUAAAAA5Bk5Y5vRMxYAcHDO2FynHCxYsEAGDx4sFRUVMmbMGFmzZs0h4x9++GEZOnRoEH/aaafJE0880eLv+/btkxkzZsh73vMeqayslFNOOUUWLlzIrwwAyCsvI29sThO/BwCgCNMU+CGmQkFjLACg0yxdulRmzpwps2fPlnXr1snw4cNlwoQJsm3btqzxTz/9tFx66aVy+eWXy/r162XSpEnB9OKLL6ZjtLzly5fLf//3f8tLL70kV199ddA4++ijj3bgNwMAAAAA4GA0xgIAmiUzUhW4Tjn0jJ07d65Mnz5dpk2blu7BWlVVJYsWLcoaf9ddd8kFF1wg1157rZx88sly6623yhlnnCHz589v0WA7depUOffcc4Met1/4wheCRt72etwCAOBEe+iEnQAAKBJJ8dKpCpK5TAX0TAmNsQCAZrk2xOaQa7ahoUHWrl0r48ePb66UYrHg9erVq7POo+9nxivtSZsZP27cuKAX7ObNm8X3ffn9738vr7zyipx//vn80gCA/PHzMAEAUCRIU9CMAbwAAM1C5H5Nzbdnz54Wb5eXlwdTazt27JBEIiFHHnlki/f19YYNG7J+xJYtW7LG6/spd999d9AbVnPGlpSUBA289913n3zwgx/M8YsBAJBF2AZVGmMBAMXWMzZE79YkPWMBAMhu0KBB0rt37/Q0Z86cDl1V2hj7zDPPBL1jteftnXfeKVdccYX89re/5ScDAAAAAHQqesYCAJolQiSweTdNwaZNm6RXr17pt7P1ilX9+/eXeDwuW7dubfG+vh4wYEDWefT9Q8Xv379fbrzxRnnkkUdk4sSJwXvve9/75LnnnpM77rjjoBQHAADkyvMPTGHmBwCgaPhekKogZwWUa52csQCAg9MU5DqJBA2xmVNbjbFlZWUycuRIWblyZfPHJ5PB67Fjx2adR9/PjFcrVqxIxzc2NgaTpibIpI2+WjYAAHlDzlgAAMxCDd7lH5gKBT1jAQB57RnrYubMmTJ16lQZNWqUjB49WubNmyc1NTUybdq04O9TpkyRgQMHplMdXHXVVXLOOecEqQe05+uSJUvk2WeflXvvvTf4uzb+6t+vvfZaqayslGOPPVb+8Ic/yI9//GOZO3cuvzQAIH/IGQsAgL3aDNkz1qcxFgCA8CZPnizbt2+XWbNmBYNwjRgxQpYvX54epGvjxo0termOGzdOFi9eLDfddFOQjmDIkCGybNkyGTZsWDpGG2hvuOEG+cxnPiM7d+4MGmS/9a1vyRe/+EV+MgAAAABAp6JnLACg03rGqhkzZgRTNqtWrTrovUsuuSSY2qL5Y++///7cFgYAACNyxgIAYJeR2S4nhZR0jsZYAEDLRy5zreUYiAQAUEz0cUkGIgEAwFZtkqYgjcbYCDp9NUZQpnPBdQ6xNQ6xtQ6xex1ie20xBv7TodCB0vn+GVHslvz/BrURbTN10WzjLvtOZPsk0IV5vh9M7cfZy/ST9hxPDYm4Ka7Ot5+KuMQ2+vY9P+FHc5897rBye8TqzbF9y20H7NLe9jJrBlaZY7e+v7dEocah2nb5btb15fIbuPy2Lly2xUaH2Dq/PJL9zLqfuxw7XFat5RjnEofi5ktS/G5wJqhLaZVw2PYTvv3RqITDTYimhL3cpsZS+zLsLzPHSs1OU1h81zZzkU2HvRbJZZaTvfZlcPluUmOrDxP7D4vkt3XZZly2RbfYZCT7ZGezHuP0eIho0RgLAGim9XOuOdW7/vULAAD5wwBeAACYJX2dch/AS+cvFDTGAgCa0RgLAIAJOWMBALDzxQumXIWZt6uhMRYAkJ+s6jzNAgAoJvSMBQDATHvFhusZ6xXM2s51zGwAAAAAAAAAgAN6xgIAmpGmAAAAG99twLFs8wMAUFw5Y8PNXyjoGQsAODhNQa4TAADFlqYgzAQAQJHljPVDTK4WLFgggwcPloqKChkzZoysWbPmkPEPP/ywDB06NIg/7bTT5Iknnmjx91tuuSX4e48ePeSwww6T8ePHy//+7/86LxeNsQAAAAAAAAAKxtKlS2XmzJkye/ZsWbdunQwfPlwmTJgg27Ztyxr/9NNPy6WXXiqXX365rF+/XiZNmhRML774YjrmxBNPlPnz58sLL7wgTz31VNDQe/7558v27dudlo3GWABAyzQFYSYAAIoFPWMBAHAewCsZYnIxd+5cmT59ukybNk1OOeUUWbhwoVRVVcmiRYuyxt91111ywQUXyLXXXisnn3yy3HrrrXLGGWcEja8pn/70p4PesMcff7yceuqpwWfs2bNHnn/+eadlozEWAJBRQ4ZoiCVNAQCgiGi+2LATAADFwvfDT0obPzOn+vp6aa2hoUHWrl0bNJymxGKx4PXq1aslG30/M15pT9q24vUz7r33Xundu3fQ69YFjbEAgGbkjAUAAAAA5JnmfE2GmPx3c8YOGjQoaABNTXPmzDnos3bs2CGJREKOPPLIFu/r6y1btmRdPn3fEv/YY49Jz549g7yy3/ve92TFihXSv39/p3VRIt2I9QlYlydlkxHENjiUWecQKzUOsXsdYnc7xO50iM2+fWfX6y/GwAESjc0RlftPh9i1DrF/yf9vsDOibWZvNNu4y77TEMF+7nLsSOQ5lmwAMDEODuO5bFBN9keD6hO2U4x9iQpzmXuTlQ6xtebYCs/lKGFX6jA6T5+4/QA4uOptU9z2I3qay3zNHCnyzuHlEoXS3gf3amjLcUfY1oHL+nL5DVx+20bfvpM1Ohzh9zoMKeyy77jsk9b93OXY4XRMsq4CeqDCIGkcjdR3OAtMOuzTvjE26bBBJxy2/UaHk9u6hL1P1/6mUnNs7X77sapud7U5tnzLLlNcSfVGe5nmSJFEH3u5LuK7sue9zCa22b4MTVsq8v4buPy2LtuMy7boso277Dsu+6R9P09E0sPywHEuf3GdZdOmTdKrV6/06/LyaM5N23LeeefJc889FzT43nffffLJT34yGMTriCOOMJdBz1gAQDNyxgIAYEPOWAAAzHzfCz0pbYjNnLI1xmpP1Xg8Llu3bm3xvr4eMCB7Jz993xLfo0cPee973yvvf//75Uc/+pGUlJQE/7qgMRYA0IzGWAAATMgZCwBA1xzAq6ysTEaOHCkrV65s/vxkMng9duzYrPPo+5nxSlMQtBWfWW62vLUFk6YAABAxfSLFCzEvAADFhBQIAACYq8ww1abvGD9z5kyZOnWqjBo1SkaPHi3z5s2TmpoamTZtWvD3KVOmyMCBA9M5Z6+66io555xz5M4775SJEyfKkiVL5Nlnnw0G6VI677e+9S25+OKL5aijjgrSFCxYsEA2b94sl1xyidOy0RgLAAAAAAAAoGBMnjxZtm/fLrNmzQoG4RoxYoQsX748PUjXxo0bJRZrThgwbtw4Wbx4sdx0001y4403ypAhQ2TZsmUybNiw4O+a9mDDhg3y4IMPBg2x/fr1kzPPPFP++Mc/yqmnnuq0bDTGAgDyMzoYI4sBAIpJR3fxAQCgG3NNNdBaLvPOmDEjmLJZtWrVQe9pD9e2erlWVFTIL37xC8kHGmMBAM1IUwAAgFPO2FyFmRcAgO54qRkms11SCkdOA3hpToTBgwcHrcJjxoyRNWvWmObTfAue58mkSZNy+VgAALol6k0AAKgzAQDIqTF26dKlQRLc2bNny7p162T48OEyYcIE2bZt2yHne/311+W//uu/5AMf+ABrHgC6quS76QZymQrpVmUeUW8CQIGnKQgzoQXqTAAoXL7vhZ6KtjF27ty5Mn369GD0sVNOOUUWLlwoVVVVsmjRojbnSSQS8pnPfEa+/vWvy/HHHx92mQEAUUmEnHAQ6k0AKOw0BWEmtESdCQCFnzM2GWIqysbYhoYGWbt2rYwfP765gFgseL169eo25/vGN74hRxxxhFx++eWmz6mvr5c9e/a0mAAAHZjIJ9cJHV5vUmcCQPH1jL3tttuC9G9XX321FAquNQGgsPFASY4DeO3YsSPo5XrkkUe2eF9fb9iwIes8Tz31lPzoRz+S5557zvw5c+bMCXrR5sqlc1ajQ2xdnuNUrUOsv88e6+1yKHi7Q+wmh9i+DrHVh05zkXbUSodCtzjEDpBouCzDX+yhbxnX16sR/bYu28yuaLZxl32nLoJYl2MHHUaLV0fUm23VmV7CF8/Q7cprErsm+93omoYyU9w7jVXmMt9O9DTH7ozvNcdWeA3m2FLPvg5KHW7eH+6wvCdXvmkL7Ofw+ZX2A/DOevtv5qJvuf3IPrjq7byvL5ffwOW3rfPttUCjb2+d25m07WOu+47LPmndz12OHS7HJD3O5TOuu/jzn/8sP/jBD+R973ufFJLOvtb0JRlM7Uk6nNn5vv1OddKzxTY67CSNSfvn1yXs/bRqHWL3NJSbY3fV9DDH9ni7jzm2tNxWz1fJVnOZJXtfMcfGerwhkaipN4c2bakwx9ZuarkPtmWPw2/g8tu6bDMu22Kdw0WZy77jsk8mjb1X3I4d5lDTMc4lDh08gJfV3r175bLLLpP77rtP+vfvb57vhhtukN27d6enTZtcWokAADkjTUGnyqXepM4EgOLp4rNv374g/ZvWE4cddpgUM641AaB7IU1Bjj1j9cIwHo/L1q0t7xjp6wEDDu5Z+I9//CMYuOuiiy5Kv5d89w5DSUmJvPzyy3LCCSccNF95eXkwAQA6oTE21w5E3EDtlHqTOhMAOkfYvK+peVunZDvUcf2KK66QiRMnBuluvvnNb0oh4VoTAApb2Mx2SSnSnrFlZWUycuRIWblyZYuLRH09duzYg+KHDh0qL7zwQvDYSGq6+OKL5bzzzgv+e9CgQfn5FgAAdEHUmwCA9ug1Ue/evdOTPkafzZIlS2TdunVt/r27o84EABQLp56xaubMmTJ16lQZNWqUjB49WubNmyc1NTUybdq04O9TpkyRgQMHBicJFRUVMmzYsBbz9+lzIK9I6/cBAF0AtyrzjnoTAApUyEG4UvNqSrZevXql387WK1ZjrrrqKlmxYkVwjVWoqDMBoHD5vhdMuQozb7dvjJ08ebJs375dZs2aJVu2bJERI0bI8uXL04nWN27cGIwUDQDopo2xuV5YFtb4KHlDvQkABSpPjbHaEJvZGJvN2rVrZdu2bXLGGWek39PBrp588kmZP3++1NfXB2lxujvqTAAoXH7Ivj++SPE2xqoZM2YEUzarVq065LwPPPBALh8JAOgIWjvmesOxkGrHPKPeBIDCk6+csRYf+tCHgvRvmfTJRE0Ld9111xVEQ2wKdSYAFCZfQvaMlSLuGQsAAAAA6DjV1dUHpXnr0aOH9OvXj/RvAAB0MzTGAgCaJegZCwBAR6YpAACgGCT9A1Ouwszb1dAYCwBoRmMsAABdLk1BLunhAADoSriH2U0bY62Jfl0SAjc4xNYZ42odytwVUexhWxyC+zrE9naIrZL827vNHjvAIbZaorHXIdblN3vVGPc3hzJfd4jdHM33imp/qI1gP3c5diQd20LzWV53sGDBAvnud78bDAo5fPhwufvuu2X06NFtxj/88MNy8803y+uvvy5DhgyR22+/XS688MIWMS+99FKQQ+8Pf/iDNDU1ySmnnCI///nP5ZhjjpFi4SWS4nntby2xRnuZsXr7AJ219WWmuG319gPwmxV9zLH94vvMsRWe/YhSHbPspQe4DGfaL1ZvDy6zHVj7xGvMRZ5c+aY5tiZ58Ejv+dDDYR24fLfD43vz/xs4qPXtLW57k/a8n9sTDvtOo33fcdknrfu5y7HD5Zikx7l8xqG4JfxG8Q3dlX3fvj35Dmdt+vmmOGkyl1nvsKx19upN9jXZ9+ldDbbjhOpR09McW1ZiXw9WjcZjmqrYbr/Qi1e6XDnYJfYfZo6t220/tu9521ZnbH/H3pCww+G3ddlmXLZFl23cZd9x2Set+7nLscPlKYuE2D4/6ed//0Lu1wkAgEKXDDk5Wrp0qcycOVNmz54t69atCxpjJ0yYEIwYnc3TTz8tl156qVx++eWyfv16mTRpUjC9+OKL6Zh//OMfcvbZZweDmmivoeeffz5ovK2oqAizZgAAyN7FJ8wEAECRSPpe6KlQ0BgLAGiWCDk5mjt3rkyfPj0YEVp7ry5cuFCqqqpk0aJFWePvuusuueCCC+Taa6+Vk08+WW699VY544wzZP78+emYr33ta0FP2e985zty+umnywknnCAXX3yxHHHEEfzSAID8oTEWAIAO6/eTLKB1TWMsAKBTGmMbGhpk7dq1Mn78+OZKKRYLXq9evTrrPPp+ZrzSnrSp+GQyKY8//riceOKJwfvaADtmzBhZtmwZvzIAIK+8PEwAABQL3/dCT4WCxlgAQF7t2bOnxVRfnz0P444dOySRSMiRRx7Z4n19rfljs9H3DxWv6Q327dsnt912W9CD9je/+Y187GMfk3/7t38L8scCAAAAANCZutUAXgCAiOUhh92gQYNavNZ8sLfccot0BO0Zqz760Y/KNddcE/z3iBEjglyzmgLhnHPO6ZDlAAAUAYaFBgDALGyqgWQBrWsaYwEAaTmmfk3PqzZt2iS9evVKv19enn3k9f79+0s8HpetW7e2eF9fDxgwIOs8+v6h4rXMkpKSIP9sJs0v+9RTT+X0vQAAyMbzD0y5CjMvAADdje8fmHIVZt6uhjQFAIC8pozVhtjMqa3G2LKyMhk5cqSsXLmyRc9WfT127Nis8+j7mfFqxYoV6Xgt88wzz5SXX365Rcwrr7wixx57LL80ACB/GMALAACzpHihp0JBz1gAQKeZOXOmTJ06VUaNGiWjR4+WefPmSU1NjUybNi34+5QpU2TgwIEyZ86c4PVVV10VpBq48847ZeLEibJkyRJ59tln5d57702Xee2118rkyZPlgx/8oJx33nmyfPly+dWvfiWrVq3qtO8JAAAAAICiMRYAkJc8PrnMp42m27dvl1mzZgWDcGl+V208TQ3StXHjRonFmh/iGDdunCxevFhuuukmufHGG2XIkCGybNkyGTZsWDpGB+zS/LDagPuVr3xFTjrpJPn5z38uZ599Nr80ACC/CuiRSQAAopT0D0y5CjNvV0NjLAAgrzljXc2YMSOYssnWm/WSSy4JpkP53Oc+F0wAAESFnLEAADgImTNWaIztHNZeV40OZdZFELvXoUyX2O0Osb122GPjmxwKrpBo1BrjdjqU2dchtko693u5fjfrb/a6Q5mvRvD52kC3I5ptPKr9rC6CY0djno9zhTSKJKLjNR3IrNSeeIP9rCZeb8/TVLe/zBT3dl0Pc5lbKnqbY/vGa8yxpV6TOVZknzmyyrPfoih3SIF1dLzeFHd4zBanGkvfNscm/GjydcUdRjMqdTgbL41gcRsdLgZq/bg5dkuipzl2c+Nh9nLr7fuOyz5p3c9djh0uxyQ9zuUzDsUtIY3iG44tCb8xms/3bOXWe/az0LqkvX6rabL309rdYB96pjJuL7c0VilRaDB+t5pa+/Gvasd+c2xJaTTbTFNjqTm2dr993e6qsa2HHTX2Omtbnf3zdza4bIv2+qXGoS6o8+37Tn2szuk4Y5H0Xbq5JPJ+nEmKy7kxckHPWABAp6UpAACg2w/gFWZ+AACKRNhBuJIM4AUAKESdkaYAAIDuiDQFAADY+SHTFPgFdBOTnrEAgBa9W3NtVKVnLACgqNAzFgCADnkKs9CuN+3JXgAAAAAAAAAAOaNnLAAgjZyxAADYkKYAAAC7pH9gylWYebsaGmMBAGnkjAUAwIg0BQAAmFFtNiNNAQAAAAAAAAB0AHrGAgDS6BkLAIARXXwAAHBMU+DlvMZIUwAAKEjkjAUAwIacsQAA2Pn+gSlXYebtaugZCwBIo2csAABG9IwFAKBDOv5IyHm7mpLu1khgaQhvcCiz3iG2xhi316HMnQ6xVQ6xPRxiB74h0ahziN1tjHvToczeEa0wiWCjcVkHarsxbrNDmZscYh22mS0RfC3Xfcdln6yJ4NjR4HicK6ZKCNHxmnzx/Pa3lrjDxhzfb3+sqLHWdorxdo29dttc0ccc27PE/sVKvSZzbNx0JnLA4XF7JVDtWfb+A6o82+/QJxY3l1nq2WO7gkbfvr7qjLG1Dt0tan37+tqesJ9kbG48zBy7saGfvdw6+77jsk8mjPt5qcOxI15v/x28RluN6CUKqCsNIpPwm8Q3HOOTfmM0ny+2chs8+5nlfocz1ppEqTl2T6N9ny6NuQxTU2aObEzay61psn23d/bbj3+VJfbtoCQezdl7U8K+DvYb14Ha01BuitvVYP+9djbYm57errd/rz2N9uN7TSIRyb7jsk8mjMePyI4z5s+3rysUQWMsACBapCkAAMDG8/WmV+4NvWHmBQCguyFNQTMaYwEALRpjc70PSo9dAEBRIU0BAABmpCloRmMsACCNnLEAANgwgBcAAG49Y5MM4BVwSeACAAAAAAAAAMgRPWMBAGnkjAUAwIg0BQAAmFFtNqMxFgCQRpoCAABsSFMAAIBdMmSagmQBjXtJmgIAAAAAAAAABWXBggUyePBgqaiokDFjxsiaNWsOGf/www/L0KFDg/jTTjtNnnjiifTfGhsb5brrrgve79Gjhxx99NEyZcoUefPNN52Xi8ZYAMBBPWNznQAAKLrnLcNMAAAU0QBeYScXS5culZkzZ8rs2bNl3bp1Mnz4cJkwYYJs27Yta/zTTz8tl156qVx++eWyfv16mTRpUjC9+OKLwd9ra2uDcm6++ebg31/84hfy8ssvy8UXXyyuaIwFAByUMzbXCQCAYktTEGYCAKBYJDv4enPu3Lkyffp0mTZtmpxyyimycOFCqaqqkkWLFmWNv+uuu+SCCy6Qa6+9Vk4++WS59dZb5YwzzpD58+cHf+/du7esWLFCPvnJT8pJJ50k73//+4O/rV27VjZu3Oi0bDTGAgDS6BkLAIARPWMBAHDOGZsMMak9e/a0mOrr6w/6rIaGhqCRdPz48en3YrFY8Hr16tVZl0/fz4xX2pO2rXi1e/du8TxP+vTpU7gDeGkjgeUGcqNDmXUOsXvzHKfedogtd4gtc4h1ub0w4DV7bNxlRew0xrls39UOsRUSjSg2MLXLGLfFXmRihz3WoVhxyZ6yPaJ9Z28EsS4/rcsxyfKoPz1QYeElEuIZtqiSenvXrJL9njk2VhM3xe3dV2ku883y3ubYyrh9zyv1okmyob+A3T5zZGnMtrwVDh9fIrbfS8W9aO7lJ3z70a3RITFKo/GZtr1J+zrYkuhpjt3ceJg5dmNDf3vs/r7m2Df32fcdl33Sup+X7DcX6XRM0uNcPuNQ3BJ+vSQNx0Lf4Uws6XBca0oe3JiQTUOs1lxmTcx+kVOatDcNxBvtxwlxqF8ak/b6ZX+i1By7u9G2DFV19ivuirj9t41H1A0+4dsr+rqEfd3WGmP3NdnL3N1gX9Y9jfb1tavRfnzf49uv4GpiNebYBr827/t5wm8ylxlzOC9r8m2f7/tdu94cNGhQi9eahuCWW25p8d6OHTskkUjIkUce2eJ9fb1hw4as5W7ZsiVrvL6fTV1dXZBDVlMb9OrVq3AbYwEA0fJDNPbytCUAoNiQagAAAJuw6dL9d//dtGlTi8bP8nKXrov5oYN5aboC3/flnnvucZ6fxlgAQFqYgbi69v1TAADyLJfRRFrPDwBAkchMNZCL1LzaENteT9T+/ftLPB6XrVu3tnhfXw8YMCDrPPq+JT7VEPvGG2/I7373O+desYqcsQAAAAAAAAAKQllZmYwcOVJWrlyZfi+ZTAavx44dm3UefT8zXumAXZnxqYbYv/3tb/Lb3/5W+vXrl9Py0TMWAJBGz1gAAOwpCsKkKSDFAQCgmHT0AyUzZ86UqVOnyqhRo2T06NEyb948qampkWnTpgV/nzJligwcOFDmzJkTvL7qqqvknHPOkTvvvFMmTpwoS5YskWeffVbuvffedEPsJz7xCVm3bp089thjQU7aVD7Zvn37Bg3AVjTGAgDSkiFyxjKwGACgqOQr+R0AAEUgzLWm5DDv5MmTZfv27TJr1qyg0XTEiBGyfPny9CBdGzdulFisOWHAuHHjZPHixXLTTTfJjTfeKEOGDJFly5bJsGHDgr9v3rxZHn300eC/taxMv//97+Xcc881LxuNsQCANHrGAgBg4yUPTLkKMy8AAN2yMTZMzlhxN2PGjGDKZtWqVQe9d8kllwRTNoMHDw4G7MoHcsYCAAAAAAAAQAegZywAII2esQAAGJGmAAAAM6rNZjTGAgDSyBkLAIANA3gBAGCnT/iHydDjF1CudRpjAQBpyXd7x+aC1HcAgKLS0cNCAwDQ3avNkPMXim7VGGu90G90KLPOIbbWGLfLocxyh9hSiUaDQ2yNQ+zhO+yxfYyxXk+HBejRBVZuYzQr19+X/21xezeL3RVRbG0Ex47GPB/nCq3Rc8GCBfLd7343GOFy+PDhcvfdd8vo0aPbjH/44Yfl5ptvltdffz0Y4fL222+XCy+8MGvsF7/4RfnBD34g3/ve9+Tqq6+WYuLVN4kXj7cbF6+3b1EltfZU8yU1nimuYa/9ALyjzH5gL43nelvh0Br9uEOs/TSrsdQeWxffa4rr69tr+OqYfX2VetEMOdDo27fFvQ6jP+xMlpnitieqzWVubjzMHLuxoZ89dn9fe+w++zLs2Gvfd5oc9sky435eYq1cHY9JepwzxSVscShuTcl68bz2j/FJ3+XMzi7h246t9dYLAd2fYvb9OXNE8XyejCYaKsyxdQl7HVvTZF/eCsP5kEucKnVYXXHtRh+BhG87BqtGh9+sLpHfOFXTZF+AmoS94D2+/apsT8x2/qRqPXtsfdK+Tyb8elOcy3HGZUCsmHHkSN+P5jwazRjACwBwUJqCXCdXS5culZkzZ8rs2bNl3bp1QWPshAkTZNu2bVnjn376abn00kvl8ssvl/Xr18ukSZOC6cUXXzwo9pFHHpFnnnlGjj76aH5hAEBkaQrCTAAAFIuw15rJzv4CeURjLADgoAG8cp1czZ07V6ZPny7Tpk2TU045RRYuXChVVVWyaNGirPF33XWXXHDBBXLttdfKySefLLfeequcccYZMn/+/BZxmzdvliuvvFIeeughKS2Nqus7AKCo+XmYAAAoEtqLN+n7ISYpGDTGAgA6RUNDg6xdu1bGjx/f4hE5fb169eqs8+j7mfFKe9JmxieTSbnsssuCBttTTz01wm8AAAAAAEAB54wFAEQr1x6uqXnVnj17WrxfXl4eTK3t2LFDEomEHHnkkS3e19cbNmzI+hmaVzZbvL6fojlkS0pK5Ctf+UqO3wQAgPaFTTVAmgIAQDEJ+1CIL4WDnrEAgLR85PAZNGiQ9O7dOz3NmTOnw9aw9rTVVAYPPPCAeJ59UAMAAHIbFjrkBABAUaUpCDcVCnrGAgDy2jN206ZN0qtXr/T72XrFqv79+0s8HpetW7e2eF9fDxgwIOs8+v6h4v/4xz8Gg38dc8wxzcuVSMh//ud/yrx58+T111/P8dsBANASPWMBALDz3/1frsLMWxA9YxcsWCCDBw+WiooKGTNmjKxZs6bN2Pvuu08+8IEPyGGHHRZMmuvvUPEAgO5NG2Izp7YaY8vKymTkyJGycuXKFvle9fXYsWOzzqPvZ8arFStWpOM1V+zzzz8vzz33XHo6+uijg/yxv/71r6WzUG8CAECdCQBATo2xS5culZkzZ8rs2bNl3bp1Mnz48GDwFO2JlM2qVavk0ksvld///vfBACv6+Or5558fjHQNAOiaPWNznVxpfaI37R588EF56aWX5Etf+pLU1NTItGnTgr9PmTJFbrjhhnT8VVddJcuXL5c777wzyCt7yy23yLPPPiszZswI/t6vXz8ZNmxYi6m0tDToOXvSSSdJZ6DeBIACT34XZkIL1JkAULhIUxCiMXbu3Lkyffr04EL5lFNOkYULF0pVVZUsWrQoa/xDDz0kX/7yl2XEiBEydOhQ+eEPf5ju+QQA6Fr8EPlic7mmnDx5stxxxx0ya9asoJ7Qnqza2JoapGvjxo3y1ltvpePHjRsnixcvlnvvvTe4Gfizn/1Mli1bFjS6dlXUmwBQ2GkKwkxoiToTAApXMk9jlBRdztiGhoZgcJTMXkqxWCxIPaC9Xi1qa2ulsbFR+vbt22ZMfX19MEkbI3MDAAqH9mpN9WzN9nRFa5dcckkwWXVmntiOqDepMwEAhYBrTQBAsXBqjN2xY0cwEEqqx1KKvtbHRS2uu+66IH+fXoi2RUfe/vrXv37Q+/oIrOUGcqPY1TnE1hjjKhzKLJVouKyD5mbv9tU6xO50iO1jjKvaZy+zwiE2LtFIRLQtWn+HXQ5l7o3ot33bIXZXRMuwN4L9vC6i/dGyzSS7+ABe6Nh6s60602tqEi/Z/tGtZL99iyqpsXfjKt3rmeISZfZTkf0l9hq2uT91+xoT9lpgf8Jec++ryJ4vOZud5T3MsUeX2o6W/eL2irA6tt8cW+E1SRTqfPv62pusNMe+nehpinuz0Xo2IrKlvrc5dnOdvdw399nL3bHXvs3s323fd+J7SvK+n7scO1yOSV6jbVv0ktFss6GHdi6kYaHzoLOvNZN+k3iGsyyNi0KTcdP3HB5u3e85PAhr250DyZh9P2102P9qmxzqgYT9WFVuXA+lMfv6ijusr7jnEOwg4dt/h4TD4aYxaSu33uHz6xz2m/0OLRQ1MevVm0itZ78q3O/vNsc2Ju2tJE1J23eL6jhj5Tv8tm7lhhzAyy/yAbxyddttt8mSJUvkkUceCQb/aov2INq9e3d60pG5AQDR47GRrsVSb1JnAkAnIWdsl8K1JgB0baQpyLFnbP/+/SUej8vWrVtbvK+vdXCUQ9GcgFpB/va3v5X3ve99h4zVkbfbGn0bABAdesbmV0fUm9SZANA5tK9bmLyv0fSV67641gSAwkbP2Bx7xpaVlcnIkSNbDL6VGoxr7Nixbc73ne98R2699dZgUJZRo0a5fCQAAN0W9SYAANSZAADk3DNWzZw5U6ZOnRo0qo4ePVrmzZsnNTU1Mm3atODvU6ZMkYEDBwa5eNTtt98ejJKto18PHjxYtmzZErzfs2fPYAIAdB30jM0/6k0AKFCauy5M/roCyn2XL9SZAFC4tNYLk43WlyJujJ08ebJs3749aGDVhtURI0YEPV5TidY3btwYjBSdcs899wQjY37iE59oUc7s2bPllltuycd3AADkOY9PrvPiYNSbAFCYNEVBqDQFhXRVmSfUmQBQuJK+L8kQTarJArqJ6dwYq2bMmBFM2axatarF69dffz23JQMAdDh6xkaDehMACngArzDz4yDUmQBQmPx3/5erMPN265yxAAAAAAAAAIAO7BkLAChMyXd7x+Y6LwAAxcLz/WAKMz8AAMUiTEq8QrvepGcsAOCgCjLXCQCAopHs2IpTB0g+88wzpbq6Wo444giZNGmSvPzyy1F9OwAA8krzxYadCgWNsQAAAADQxf3hD3+QK664Qp555hlZsWKFNDY2yvnnny81NTWdvWgAAKBQ0xRYbx43OJTpcupSaoyLSzQaHWLrHWJrHWJ3OcRWO8RWGeMqHMosi+C3jfI3c9lu6yL4bfd2gdhd3ajcmoh+W8txLsoeqAzgVUAam0Ri7ddI8domc5Fl++w1XFOlLTYZ98xlNjgcrfc32ct9q8F+OrSv3l67vN2jhzl2c0Ufc+ym8r6muMNK7bVAz7i1ZhGp8OzbjIs63+F3SNjPCN5ptJ1lbKu3n7m8XWf/bd+usZ7liOzdV2mObdpr3x/ie+zrtmyXfd8p3WMsc5+95nI5JgXHOYtkU0GkKVi+fHmL1w888EDQQ3bt2rXywQ9+MOflwAGJZIN4Xvt9lfycEzrlR5PvcKXnsKh+zL6fJjz7VU69Q/1S5tvr2HLfXg/EjfVLaZP9WBkTL5JYFy69BF1iG431fELsx9b6mH07aPDsV08Nvv1cpz65zxzbmKyNZJ9M+rZ1lvRdWhLsfD+Z1zhXST9c79ZkAaX36VaNsQCAaIVJN0CaAgBAUdFrwjDXhe/Ou2dPy1bt8vLyYGrP7t27g3/79rXdoAEAoDP57/4vV2Hm7WpIUwAAOKhnbK4TAABFQ3vohJ1EZNCgQdK7d+/0pLlh25NMJuXqq6+Ws846S4YNG9YBXxYAgHDIGduMnrEAAAAA0Ek2bdokvXr1Sr+29IrV3LEvvviiPPXUUxEvHQAAyDcaYwEAaeSMBQDAxvMPTLlKzasNsZmNse2ZMWOGPPbYY/Lkk0/Ke97zntwXAACATugZm6sw83Y1NMYCANLIGQsAgFFGqoGcOM7r+75ceeWV8sgjj8iqVavkuOOOy/2zAQDoYOSMbUZjLAAAAAB0cZqaYPHixfLLX/5SqqurZcuWLcH7mme2srKysxcPAAAY0RgLAGjRMzYRYl4AAIqFlzwwhZnfxT333BP8e+6557Z4//7775fPfvazuS8IAAAd1DM2TKoBnzQFAIBCRM5YAAC6bpoCAAC6q6SXFC/EXcxkAXX/oWcsACCNnLEAABhp22iY9lHaVgEARUR7xXoM4BWIHfgHAAAAAAAAABClku7WY8tyA7nOocwyh9hayT+X3Iwu36vGIbbaIbaHQ2xFBLEVEd1piEs0XH7fZATbQl0X2L72RrSPdfYy1Ee0bhOd3JGGNAWFw29oFD/mtRsXr2k0l1m2x37akCxt/7Ndj9axhLVMkcYG+7I27bfXAu/UlJpj91RVmWPfquxljq0q72eK61HWYC6zPN5kji2L55pZ+tAaEvbfoT5h/31rGmxne7X19rPCuv322EStfVljNfZ1UFZj3x9K9zrE7jGHSsUu29lL2R77NuNyTPIbbNu4n7SX6cLz/WAKMz+6jqRfL14n9lVK+Pl//NZ3eBxYMzlaJTz7PtUQs5/hx8Vex8a9/MfGHH5/L7IryGj4Dlem1kfBE759O0iIQ6xDuU1J+1VZwq+PpNykbz+HSpjLjeZxfF9sy+r7UX2+9o3Nveww83Y13aoxFgAQLdIUAADQNXPGAgDQ3a81w6UpKBykKQAAAAAAAACADkDPWABAGmkKAAAw8kN206FjLACgiCS9pHgO6VNyTaHRHdAYCwBIozEWAAAbcsYCAODWmOqFaFBN0hgLAChEYTr50MEHAFBUtOILlTM2nwsDAEDXRmNsM3LGAgAAAAAAAEAHoDEWAHBQmoJcJwAAiob2ig07AQBQJHxJhp5cLViwQAYPHiwVFRUyZswYWbNmzSHjH374YRk6dGgQf9ppp8kTTzzR4u+/+MUv5Pzzz5d+/fqJ53ny3HPPSS5ojAUApNEYCwCAUTIPEwAARTSAV9jJxdKlS2XmzJkye/ZsWbdunQwfPlwmTJgg27Ztyxr/9NNPy6WXXiqXX365rF+/XiZNmhRML774YjqmpqZGzj77bLn99tslDBpjAQBpXFMCAOA2gFeYCQCAYqE9W8P8z3e8izl37lyZPn26TJs2TU455RRZuHChVFVVyaJFi7LG33XXXXLBBRfItddeKyeffLLceuutcsYZZ8j8+fPTMZdddpnMmjVLxo8fH2pdlEg367HlGeIaHcqsk/xrcIh1WdZah9gKh9jdDrHlES1DmTGutIDvNCQj2G4aItoX6iMqN6rYmgi+W11E+7nlUX8u3WDSUK8tBe2GxfbtN6/QsvJ43ld+rNFeZsN++5G9dJ/ljOGApiqH2Er7MiQq7adZ+8vtNWxNua3G2F7icLRwiPVi0RyF/KT9d5Cm/MfG6u2/bbze/vml++2xJfbdUUocTgxLauy/Wdk++xlJ2R5bgpqy3fYzEpdjktQba23f5YwIxSqZbAweOc0rz35ciXm2OiPpu5xZ2jU5XIy49E5zWd6YZ7/ai3n28wfPt/0OnsvvJfk/J4pS0iGhmO/bfl+XhrGkn4hkm0n4TZGUm4yoXOtVv8vni/H3cuEXwM3ChoYGWbt2rdxwww3p92KxWNCIunr16qzz6PvakzaT9qRdtmxZ3pevu7VXAQAKLE1BPvP4NDY2ynXXXRe836NHDzn66KNlypQp8uabb+a4dAAAtIGcsQAAmPmSCD2pPXv2tJjqs9yc3bFjhyQSCTnyyCNbvK+vt2zZItno+y7xYdAYCwDotDQF+c7jU1tbG5Rz8803B/9qgvWXX35ZLr74Yn5lAEB+0RgLAIBZMg//U4MGDZLevXunpzlz5kh3063SFAAACktmHh+leXwef/zxII/P9ddff8g8Pkrz+KxYsSLI46PzamWsrzPp30aPHi0bN26UY445poO+GQAAAAAg3zZt2iS9evVKvy7Pku6rf//+Eo/HZevWrS3e19cDBgzIWq6+7xIfBj1jAQCdkqYglccnM/m5JY9P62Tp2pO2rXi1e/fuIAdcnz59+KUBAPlDz1gAAMySeRjCS2lDbOaUrTG2rKxMRo4cKStXrky/l0wmg9djx46VbPT9zHilHX3aig+DnrEAgOYKKkTu11SaAs3bk0krx2wV5KHy+GzYsCEveXzq6uqCHLKa2iDz7ikAAKFpxRdmvKf8j7kCAECXdSDva+4VZypnrJWmw5s6daqMGjUqeFJy3rx5UlNTk34qU8cWGThwYDrNwVVXXSXnnHOO3HnnnTJx4kRZsmSJPPvss3Lvvfemy9y5c2fwxGVqTBJNiae096xLD1p6xgIA8poztqvk8NHBvD75yU8Go4Hec889/MoAgLzyfD/0BABAschXzliryZMnyx133CGzZs2SESNGyHPPPSfLly9Pd+7RRtW33norHT9u3DhZvHhx0PiqY5n87Gc/k2XLlsmwYcPSMY8++qicfvrpQWOt+tSnPhW81pR5LugZCwDo8Bw+UefxSTXEvvHGG/K73/2OXrEAAAAAUGRmzJgRTNmsWrXqoPcuueSSYGrLZz/72WAKi56xAIC85oy15PCJMo9PqiH2b3/7m/z2t7+Vfv368QsDAPKPnLEAANirzXezxvohpkJBz1gAQFoixF26XHLN5juPjzbEfuITn5B169bJY489FuSkTeWT7du3b9AADABAXiR9zVUQbn4AAIpEMrhizD1n7IH5CwONsQCATqN5fLZv3x7k8dFGU83l0zqPTywWOyiPz0033SQ33nijDBkypEUen82bNwd5fJSWlen3v/+9nHvuuR36/QAAAAAA6LaNsdYBSxsdyqxxiG0wxlU4lFnvEFvaBWLLIirX2hMv7lCmS2xXkIgg1qUTf2ME+4JruY1dYHnrIvh8l1jLbxZlP5rMgbhymbez8/gMHjw4GLALIsn99ZL02v9V4ntrIjmultdXmuJKauy1RXmV/bSlqdLexztRbo9tKrffzU9kz9CRPbbMvgzJUlus73CW5zv8uH6Y0eMPwaWDoedQaXpNtriYw8E63mBf2Hi9PbbEITZebz/qluy3x8Zrm+yxNbaVFtu331ym53BMSuy31dpJ36UmziFNQZj50WX4emVmOcB59uO15ztcEUV0bI1CzGEdRMVzeJbLMy5vzOFMx+XzuwKXpU1at0WnQ1ii07fFbvUwgm+vt32Xq01juX5EV5xhUw34pCkAABSijk5TAABA9xWyMTbS26sAAHQtST9kmgK/cK44u1XPWABAtDqjZywAAN0SPWMBALBXm/SMTetefesBAAAAAAAAoJuiZywAoEXv1lwf/qBnLACgqAQJCEOkGuhWCQwBAMhHz9jcUw2QMxYAUJDCZPEpnAw+AAAYB0JxGGQl6/wAABQJ309KMkTOWL+A6k16xgIA0sgZCwCAETljAQBw7NkaojG2gJ7FJGcsAAAAAAAAAHQAesYCANJIUwAAgBE5YwEAMPP9RKfO35XQGAsASKMxFgAAI9IUAABgdiBjLGkKFGkKAAAAAAAAAKADlBRLj61DlWnVaIyrj6g1PN4Fyu0Ky9CZZUYp0cllJiMqtyssQxTldubn+xIdBvAqHH59vfhe+1tf4p1d5jJjdXX22D3lprh4WZm5TCm1n7b4LrHlDrFxe+3il9prQr/EITZui/XjDmdNDqG+l++zsXcXQXsZmhfCodyELdhL2I/WXpNDbKNDbMJeu3j1TQ7LYI8Vh1i/ocEWWG8/O07sr3M6zpnifOtZvCPdtFy222zzowtpEt9wMPR8h0voCA6XnsNVTsyzL2vMK40ktsSznQ+ouEO5cSnNe7mewxVszCHW5Tdz4TtckWiPRHu5ttiEuYVEJOE5xDocs5t8e/0SM5wX58L3XdatQ31sLjSKz/cjXFchesY6fNeurls1xgIAokWaAgAAjEhTAABAJDcQopi/K6ExFgDQ4h5orvcb6eADACgqyTDPk6TmBwCgOPjB0yS5130H5i8M5IwFAAAAAAAAgA5Az1gAQFqYBz8K56ERAAAMSFMAAEDe8xFHNX9XQmMsACCNxlgAAIxojAUAwMz39Woz91QDhTSAF2kKAAAAAAAAAKCrNsYuWLBABg8eLBUVFTJmzBhZs2bNIeMffvhhGTp0aBB/2mmnyRNPPJHr8gIAIpQMOSE76k0AKEBJP/yEg1BnAkBh0p6tYaeibYxdunSpzJw5U2bPni3r1q2T4cOHy4QJE2Tbtm1Z459++mm59NJL5fLLL5f169fLpEmTgunFF1/Mx/IDAPIoEXLCwag3AaAwcVGZf9SZAFC4NOdr2KlQeL6vyY7stCfsmWeeKfPnzw9eJ5NJGTRokFx55ZVy/fXXHxQ/efJkqampkcceeyz93vvf/34ZMWKELFy40PSZe/bskd69e0ulLrAhPh5Ra7S13M7+/CjL7QrL0JllRinRyWUmIyq3KyxDFOV25ufrQXu/iOzevVt69eol+ZA6zr43xL6jy/73PC9XIejoejP1W54rH5USr7TdeK+83PxdYpUV5lgxluuVldnLLLWnuvddYssdYuP2PcQvtdeEfolDbNwW68ctZ03vcgj1PYdgB57LKalDqJewBXsJ+9Haa3KIbXSITdhrF6++yWEZ7LHiEOs3NNgC6+vNZSb319k/31huk98oq+SXeaufUsfZD/WZIiWewzHsoOVqkJW7fky92UWuNQ9cvbR/fPMchl3xPIc6NmbblmIOZcaNZR4ot/1zhpSSmH0ZSlyW12EZ4lKa93I9hyvYmEOsF9GVqe9wRZJ0uCKxNngl/EZzmQlxiHUot8m31y9NSYe6yOW7JRscyrUtQ9KhTN9hHfhireP13CmZ93qzNH6keF7u2VL1JmhjYmtB1JtOA3g1NDTI2rVr5YYbbki/F4vFZPz48bJ69eqs8+j72pM2k/akXbZsWZufU19fH0wpuqJdzrtdWpejiI2qrd7rAuVGtQyIpjHWZVskVrrNcSYV43gvDZ2gI+rNturMJj3pNWwinu9w4eEQK0lbjeG5PKabtB8p/UREsQ4XVC6Nlr7DRZ1v/B18n8bYLtEYa/x858bYhENjbNKhMdYh1k8aL1b9hkgugH1jbHA8pN7s8jr7WtN6xua7nNk5nKtZH7916Rnm8kivS8PegUF4bJIO5XoOV5tRxLo0xrp0PfIiaiFw2RaiaIxN+vb6ImluBNRyo9kW3WIj2s+s+7nLsSOSK9MDcVxvdpHG2B07dkgikZAjjzyyxfv6esOGDVnn2bJlS9Z4fb8tc+bMka9//esHvW+/Tw4Ahe/tt99+tydH/iRD3HQpnIdG8qcj6s226synxJif3X4z3S0WAAq93gwulkPcGOWmape61jzwW1p+T4ceaw6x1vtBLh04GskhBaAL1Zth0wz4BXTF6dQY21H0bmjmHc5du3bJscceKxs3bsx7w0N3od269RGdTZs2dfvu2LliHbAO2A6ae3Acc8wx0rdv37zvZ2Gqt8KpGrsX6szsqDNYB2wH7AuR15vJpHY7zn3+AhqIpDuh3jwYdSbrgO2A/aEj6s0DvZNzv4lZSAN4OTXG9u/fX+LxuGzdurXF+/p6wIABWefR913iVXl5eTC1pg2xxdoQmaLfn3XAOmA7YF9IPbqXbzTG5ldH1JvUmYfG8ZJ1wHbAvhBZvUnP2LziWrPzUWeyDtgO2B+ivd48kIs2d4WTps9pzZaVlcnIkSNl5cqV6fc0qbq+Hjt2bNZ59P3MeLVixYo24wEAKBTUmwAAUGcCABAqTYGmD5g6daqMGjVKRo8eLfPmzQtGsJw2bVrw9ylTpsjAgQODXDzqqquuknPOOUfuvPNOmThxoixZskSeffZZuffee10/GgAQsTAPjhTOQyP5Rb0JAIXJTybFD5GmoJAet8wX6kwAKFwH6r3ch4UvpAHFnBtjJ0+eLNu3b5dZs2YFidFHjBghy5cvTydO17yumV2Zx40bJ4sXL5abbrpJbrzxRhkyZEgwuuWwYcPMn6mPYM6ePTtr6oJiwTpgHbAdsC90xPGAxtj86+h6k/qC9cC2wP7AMaGDjoukKcg7rjU7B+cOrAO2A/aHjjgmHBiAK0RjbAGlKfD8QmpaBgDkPHCD5uXWrKS5ZgbSqnXLuwnfiz23NQCg8OvMf6mcLCVeWc7lNPkN8rv9S6k3AQBFUW96XrV4Xriesb6/tyDqTeeesQCAwsUAXgAAWCtNX7u25L666BMDACgq4XrGSgH1jKUxFgCQRpoCAABcGlND3MakMRYAUExC5oyVAqo3aYwFAKRp9ZhrFVc4VSMAAO3zk774IXrGki0OAFBMyBnbLNfUgAAAAAAAAACA7tgYu2DBAhk8eLBUVFTImDFjZM2aNYeMf/jhh2Xo0KFB/GmnnSZPPPGEdHcu6+C+++6TD3zgA3LYYYcF0/jx49tdZ92B63aQsmTJkiAR9KRJk6TY1sGuXbvkiiuukKOOOioY7fDEE0/s9vuD6zqYN2+enHTSSVJZWSmDBg2Sa665Rurq6qS7evLJJ+Wiiy6So48+Otiuly1b1u48q1atkjPOOCPYBt773vfKAw88kHPP2DATOgZ1JnVmrttCCvUm9Wah1JudWWcGj1uGndAhqDepN3PZDlKoM6kzC6XO7PR6M/TVZlIKht8FLFmyxC8rK/MXLVrk/+Uvf/GnT5/u9+nTx9+6dWvW+D/96U9+PB73v/Od7/h//etf/ZtuuskvLS31X3jhBb+7cl0Hn/70p/0FCxb469ev91966SX/s5/9rN+7d2//n//8p18s6yDltdde8wcOHOh/4AMf8D/60Y/63ZnrOqivr/dHjRrlX3jhhf5TTz0VrItVq1b5zz33nF8s6+Chhx7yy8vLg3/1+//617/2jzrqKP+aa67xu6snnnjC/9rXvub/4he/0Gcf/UceeeSQ8a+++qpfVVXlz5w5Mzgm3n333cExcvny5ebP3L17d/BZPUX86hwnnVfL0LIQHepM6sxct4UU6k3qzUKqNzuzzjzX+5g/PvbJnCedn3ozetSb1Ju5bAcp1JnUmYVUZ3Z2vSlS4ntSmvOk8xdKvdklGmNHjx7tX3HFFenXiUTCP/roo/05c+Zkjf/kJz/pT5w4scV7Y8aM8f/jP/7D765c10FrTU1NfnV1tf/ggw/6xbQO9HuPGzfO/+EPf+hPnTq12zfGuq6De+65xz/++OP9hoYGv1C4rgON/Zd/+ZcW72lFcdZZZ/mFwFJBfvWrX/VPPfXUFu9NnjzZnzBhgvlzaIztPqgzqTNz3RYU9Sb1ZiHXmx1dZ9IY2z1Qb1Jv5rIdKOpM6sxCrjM7o96kMbZZp6cpaGhokLVr1waP2afEYrHg9erVq7POo+9nxqsJEya0Gd/V5bIOWqutrZXGxkbp27evFNM6+MY3viFHHHGEXH755dLd5bIOHn30URk7dmyQpuDII4+UYcOGybe//W1JJBJSLOtg3LhxwTypx4xeffXVIE3DhRdeKMUin8fERMgJ0aLOpM4Msy0o6k3qzWKvN/NZZzb59dKUDDH59Xn8ZsiGepN6M9ftQFFnUmcWe52Z//Y3PxjEy89xKqQho0s6ewF27NgRNBxpQ1Imfb1hw4as82zZsiVrvL7fHeWyDlq77rrrgpwfrXeSQl4HTz31lPzoRz+S5557TgpBLutAK4Pf/e538pnPfCaoFP7+97/Ll7/85aBhfvbs2VIM6+DTn/50MN/ZZ58djErc1NQkX/ziF+XGG2+UYtHWMXHPnj2yf//+IL9Re8rKymTAgAGhj6NahpaFaFBnUmeG2RaoN6k3VbHXm/msM5/aEj5HP/VmtKg3qTdz3Q6oM6kzVbHXmV3tWrOQ6s1Ob4xFeLfddluQVFyTKmsy8mKwd+9eueyyy4KBzPr37y/FKplMBj2D7733XonH4zJy5EjZvHmzfPe73+2WjbG50O1eewN///vfDxLxa4P0VVddJbfeeqvcfPPNnb143YYeO1577bWg50AYWjEWy3EI3VMx1pmKevMA6k3qza5UZyrqTXR1xVhvUmceQJ1JnZkv1JtdsDFWG9K0EWnr1q0t3tfX2uKdjb7vEt/V5bIOUu64446ggvztb38r73vf+6S7cl0H//jHP+T1118PRgHMrCxUSUmJvPzyy3LCCSdIoW8HRx11lJSWlgbzpZx88snBHSe9QOhud4xyWQfa4KoN85///OeD16eddprU1NTIF77wBfna174WPIJU6No6Jvbq1ct0pzKzkiyWk+zuijqTOjPXbYF68wDqTepN6sziQr1JvZnLdkCdeQB1JnWmot6MRqe3UmhjkfbmW7lyZYtGNX2tuTCz0fcz49WKFSvajO/qclkH6jvf+U7Q+2/58uUyatQo6c5c18HQoUPlhRdeCFIUpKaLL75YzjvvvOC/Bw0aJMWwHZx11llBT9BUQ7R65ZVXgoqzuzXE5roONF9y6wbXVOP0gZzkha/QjoloG3UmdWau2wL15gHUm9Sb1JnFhXqTejOX7YA68wDqTOpMRb0ZEb8LWLJkiV9eXu4/8MAD/l//+lf/C1/4gt+nTx9/y5Ytwd8vu+wy//rrr0/H/+lPf/JLSkr8O+64w3/ppZf82bNn+6Wlpf4LL7zgd1eu6+C2227zy8rK/J/97Gf+W2+9lZ727t3rF8s6aG3q1Kn+Rz/6Ub87c10HGzdu9Kurq/0ZM2b4L7/8sv/YY4/5RxxxhP/Nb37TL5Z1oPu/roOf/OQn/quvvur/5je/8U844QT/k5/8pN9d6X68fv36YNLD9Ny5c4P/fuONN4K/6/fX9ZCi37uqqsq/9tprg2PiggUL/Hg87i9fvrwTvwWiQp1JnZnrttAa9Sb1ZiHUm9SZaA/1JvVmLttBa9SZ1JmFUGcq6s2uoUs0xqq7777bP+aYY4IGxtGjR/vPPPNM+m/nnHNOcPDL9NOf/tQ/8cQTg/hTTz3Vf/zxx/3uzmUdHHvssUEjTetJG6a6M9ftoNAqyFzWwdNPP+2PGTMmOLk4/vjj/W9961t+U1OTXyzroLGx0b/llluCSrGiosIfNGiQ/+Uvf9l/5513/O7q97//fdb9O/W99V9dD63nGTFiRLDOdDu4//77O2np0RGoM6kzc90WMlFvUm8WQr1JnQkL6k3qzVy2g0zUmdSZhVBnKurNrsHT/4uq1y0AAAAAAAAAoIvkjAUAAAAAAACAYkBjLAAAAAAAAAB0ABpjAQAAAAAAAKAD0BgLAAAAAAAAAB2AxlgAAAAAAAAA6AA0xgIAAAAAAABAB6AxFgAAAAAAAAA6AI2xAAAAAAAAANABaIwFAAAAAAAAgA5AYywAAAAAAAAAdAAaYwEAAAAAAACgA9AYCwAAAAAAAAASvf8fIDVkSUj2HIYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Run the thermal solver for a centered heat source\n", "thermal_out = apply_tesseract(\n", " thermal,\n", " {\n", " \"source_x\": jnp.float32(0.5),\n", " \"source_y\": jnp.float32(0.5),\n", " \"source_intensity\": jnp.float32(10.0),\n", " \"source_width\": np.float32(0.1),\n", " \"displacement\": jnp.zeros((30, 30, 2), dtype=jnp.float32),\n", " \"conductivity\": np.float32(1.0),\n", " \"boundary_temp\": np.float32(0.0),\n", " },\n", ")\n", "temperature = np.asarray(thermal_out[\"temperature\"])\n", "\n", "# Feed the temperature field into the structural solver\n", "structural_out = apply_tesseract(\n", " structural,\n", " {\n", " \"temperature\": thermal_out[\"temperature\"],\n", " \"youngs_modulus\": np.float32(200.0),\n", " \"poissons_ratio\": np.float32(0.3),\n", " \"thermal_expansion\": np.float32(1e-3),\n", " },\n", ")\n", "\n", "fig, axes = plt.subplots(1, 3, figsize=(14, 4))\n", "im0 = axes[0].imshow(temperature.T, origin=\"lower\", extent=[0, 1, 0, 1], cmap=\"hot\")\n", "axes[0].set_title(\"Temperature field\")\n", "plt.colorbar(im0, ax=axes[0])\n", "\n", "disp_mag = np.linalg.norm(np.asarray(structural_out[\"displacement\"]), axis=-1)\n", "im1 = axes[1].imshow(disp_mag.T, origin=\"lower\", extent=[0, 1, 0, 1], cmap=\"viridis\")\n", "axes[1].set_title(\"Displacement magnitude\")\n", "plt.colorbar(im1, ax=axes[1])\n", "\n", "s = np.asarray(structural_out[\"stress\"])\n", "von_mises = np.sqrt(\n", " s[:, :, 0] ** 2 - s[:, :, 0] * s[:, :, 1] + s[:, :, 1] ** 2 + 3 * s[:, :, 2] ** 2\n", ")\n", "im2 = axes[2].imshow(von_mises.T, origin=\"lower\", extent=[0, 1, 0, 1], cmap=\"inferno\")\n", "axes[2].set_title(\"Von Mises stress\")\n", "plt.colorbar(im2, ax=axes[2])\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "d2b18a38", "metadata": {}, "source": [ "## Step 3: Set up the thermoelastic inverse problem\n", "\n", "Now we pose the inverse-design problem: **find the heat-source location and intensity that produce a set of target temperatures at four sensor locations, after the thermoelastic coupling has converged.**\n", "\n", "This cannot be solved with the thermal solver alone. The displacement from thermal expansion deforms the geometry, which changes the temperature field, which changes the displacement, and so on. The two solvers must be iterated to a coupled equilibrium, and the gradients we need run through that entire iteration.\n", "\n", "We express the coupled equilibrium as a fixed-point iteration with `jax.lax.scan`: at each step the thermal solver runs on the current displacement, and the structural solver runs on the resulting temperature. The design variables are the source position $(x, y)$ and the log-intensity $\\log(q)$ (3 parameters), and the objective is the squared temperature error at the sensors:\n", "\n", "$$\\mathcal{L}(\\theta) = \\sum_i \\left(T_{\\text{sensor}_i} - T_{\\text{target}_i}\\right)^2,$$\n", "\n", "evaluated after the coupling has converged." ] }, { "cell_type": "code", "execution_count": 6, "id": "080b7e06", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:08:07.251073Z", "iopub.status.busy": "2026-07-28T13:08:07.250976Z", "iopub.status.idle": "2026-07-28T13:08:07.626813Z", "shell.execute_reply": "2026-07-28T13:08:07.625983Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sensor positions (approx):\n", " (0.26, 0.26) -> T_target = 0.010\n", " (0.26, 0.71) -> T_target = 0.020\n", " (0.71, 0.26) -> T_target = 0.020\n", " (0.71, 0.71) -> T_target = 0.050\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Objective at initial guess: 6.261197e-03\n" ] } ], "source": [ "# Sensor locations (grid indices) and target temperatures\n", "SENSORS = [(8, 8), (8, 22), (22, 8), (22, 22)]\n", "TARGETS = [jnp.float32(0.01), jnp.float32(0.02), jnp.float32(0.02), jnp.float32(0.05)]\n", "\n", "# Approximate physical positions of sensors (for visualization)\n", "sensor_positions = [(i / 31, j / 31) for i, j in SENSORS]\n", "print(\"Sensor positions (approx):\")\n", "for (sx, sy), t in zip(sensor_positions, TARGETS, strict=False):\n", " print(f\" ({sx:.2f}, {sy:.2f}) -> T_target = {float(t):.3f}\")\n", "\n", "N_COUPLING_ITERS = 3\n", "\n", "\n", "def coupled_objective(params):\n", " \"\"\"Two-way coupled thermoelastic inverse problem.\n", "\n", " params: [source_x, source_y, log_intensity]\n", " Returns: sum of squared temperature errors at sensor locations.\n", "\n", " Non-differentiable constants are passed as numpy (np.float32) rather than\n", " JAX arrays. Inside lax.scan, JAX traces all array inputs uniformly and\n", " cannot tell which are constants; keeping them as numpy arrays leaves them\n", " opaque to the tracer, so the backward pass never tries to differentiate them.\n", " \"\"\"\n", " source_x, source_y, log_intensity = params[0], params[1], params[2]\n", " intensity = jnp.exp(log_intensity)\n", "\n", " temp = jnp.zeros((30, 30), dtype=jnp.float32)\n", " disp = jnp.zeros((30, 30, 2), dtype=jnp.float32)\n", "\n", " def coupling_step(carry, _):\n", " _temp, disp = carry\n", " thermal_out = apply_tesseract(\n", " thermal,\n", " {\n", " \"source_x\": source_x,\n", " \"source_y\": source_y,\n", " \"source_intensity\": intensity,\n", " \"source_width\": np.float32(0.15),\n", " \"displacement\": disp,\n", " \"conductivity\": np.float32(1.0),\n", " \"boundary_temp\": np.float32(0.0),\n", " },\n", " )\n", " structural_out = apply_tesseract(\n", " structural,\n", " {\n", " \"temperature\": thermal_out[\"temperature\"],\n", " \"youngs_modulus\": np.float32(200.0),\n", " \"poissons_ratio\": np.float32(0.3),\n", " \"thermal_expansion\": np.float32(1e-3),\n", " },\n", " )\n", " return (thermal_out[\"temperature\"], structural_out[\"displacement\"]), None\n", "\n", " (final_temp, _), _ = jax.lax.scan(\n", " coupling_step, (temp, disp), None, length=N_COUPLING_ITERS\n", " )\n", "\n", " loss = jnp.float32(0.0)\n", " for (si, sj), target in zip(SENSORS, TARGETS, strict=False):\n", " loss = loss + (final_temp[si, sj] - target) ** 2\n", " return loss\n", "\n", "\n", "# Test the forward pass\n", "p0 = jnp.array([0.2, 0.2, jnp.log(5.0)], dtype=jnp.float32)\n", "print(f\"\\nObjective at initial guess: {float(coupled_objective(p0)):.6e}\")" ] }, { "cell_type": "markdown", "id": "f2853978", "metadata": {}, "source": [ "## Step 4: Compute end-to-end gradients\n", "\n", "Because `apply_tesseract` exposes each Tesseract as a native JAX operation, `jax.grad` differentiates through the entire coupled iteration -- through both solvers and through `lax.scan` -- automatically. There is no manual adjoint to derive and no need to merge the solvers into one codebase." ] }, { "cell_type": "code", "execution_count": 7, "id": "0a6ee1ac", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:08:07.628342Z", "iopub.status.busy": "2026-07-28T13:08:07.628203Z", "iopub.status.idle": "2026-07-28T13:08:09.146061Z", "shell.execute_reply": "2026-07-28T13:08:09.145563Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gradients at initial guess:\n", " d(loss)/d(source_x) = 2.470245e-02\n", " d(loss)/d(source_y) = 2.470247e-02\n", " d(loss)/d(log_intensity) = 9.220975e-03\n" ] } ], "source": [ "grad_fn = jax.grad(coupled_objective)\n", "\n", "grads = grad_fn(p0)\n", "print(\"Gradients at initial guess:\")\n", "print(f\" d(loss)/d(source_x) = {float(grads[0]):.6e}\")\n", "print(f\" d(loss)/d(source_y) = {float(grads[1]):.6e}\")\n", "print(f\" d(loss)/d(log_intensity) = {float(grads[2]):.6e}\")" ] }, { "cell_type": "markdown", "id": "4dc02fe9", "metadata": {}, "source": [ "### Validate the gradients against finite differences\n", "\n", "To confirm the end-to-end gradients are correct, we compare them against a central finite-difference approximation of the same objective. The relative error should be small for all three design variables." ] }, { "cell_type": "code", "execution_count": 8, "id": "fb6b7b25", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:08:09.147334Z", "iopub.status.busy": "2026-07-28T13:08:09.147262Z", "iopub.status.idle": "2026-07-28T13:08:10.123950Z", "shell.execute_reply": "2026-07-28T13:08:10.123139Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " AD FD Rel. Error\n", "d(loss)/d(source_x) 2.470245e-02 2.471032e-02 3.18e-04\n", "d(loss)/d(source_y) 2.470247e-02 2.470566e-02 1.29e-04\n", "d(loss)/d(log_intensity) 9.220975e-03 9.220093e-03 9.56e-05\n" ] } ], "source": [ "eps = 1e-4\n", "fd_grads = []\n", "for i in range(3):\n", " p_plus = p0.at[i].add(eps)\n", " p_minus = p0.at[i].add(-eps)\n", " fd_grads.append(\n", " (coupled_objective(p_plus) - coupled_objective(p_minus)) / (2 * eps)\n", " )\n", "\n", "names = [\"d(loss)/d(source_x)\", \"d(loss)/d(source_y)\", \"d(loss)/d(log_intensity)\"]\n", "print(f\"{'':32s} {'AD':>14s} {'FD':>14s} {'Rel. Error':>12s}\")\n", "for name, ad, fd in zip(names, grads, fd_grads, strict=False):\n", " rel_err = abs(float(ad) - float(fd)) / (abs(float(fd)) + 1e-30)\n", " print(f\"{name:32s} {float(ad):14.6e} {float(fd):14.6e} {rel_err:12.2e}\")" ] }, { "cell_type": "markdown", "id": "3a073ba8", "metadata": {}, "source": [ "## Step 5: Optimize the design with gradients\n", "\n", "We now solve the inverse problem with a gradient-based optimizer (L-BFGS-B from `scipy.optimize`), feeding it the end-to-end gradients we just validated. For comparison, we also run a gradient-free optimizer (Nelder-Mead) on the same problem. Both search over the same 3 design variables: source position $(x, y)$ and log-intensity." ] }, { "cell_type": "code", "execution_count": 9, "id": "28581cfa", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:08:10.126095Z", "iopub.status.busy": "2026-07-28T13:08:10.125945Z", "iopub.status.idle": "2026-07-28T13:09:22.563016Z", "shell.execute_reply": "2026-07-28T13:09:22.561576Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running L-BFGS-B (gradient-based)...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Source: (0.686, 0.686)\n", " Intensity: 2.60\n", " Objective: 5.636455e-06\n", " Evaluations: 27\n", "\n", "Running Nelder-Mead (gradient-free)...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Source: (0.686, 0.686)\n", " Intensity: 2.60\n", " Objective: 5.633175e-06\n", " Evaluations: 372\n", "\n", "Speedup: 372/27 = 13.8x fewer evaluations with gradients\n" ] } ], "source": [ "eval_history_grad = []\n", "eval_history_free = []\n", "\n", "\n", "def objective_and_grad(x):\n", " p = jnp.array(x, dtype=jnp.float32)\n", " obj = coupled_objective(p)\n", " g = grad_fn(p)\n", " eval_history_grad.append(float(obj))\n", " return float(obj), np.array([float(g[i]) for i in range(3)])\n", "\n", "\n", "def objective_only(x):\n", " p = jnp.array(x, dtype=jnp.float32)\n", " obj = coupled_objective(p)\n", " eval_history_free.append(float(obj))\n", " return float(obj)\n", "\n", "\n", "x0 = np.array([0.2, 0.2, np.log(5.0)])\n", "bounds = [(0.05, 0.95), (0.05, 0.95), (np.log(1.0), np.log(50.0))]\n", "\n", "print(\"Running L-BFGS-B (gradient-based)...\")\n", "result_grad = minimize(\n", " objective_and_grad,\n", " x0,\n", " method=\"L-BFGS-B\",\n", " jac=True,\n", " bounds=bounds,\n", " options={\"maxiter\": 100},\n", ")\n", "print(f\" Source: ({result_grad.x[0]:.3f}, {result_grad.x[1]:.3f})\")\n", "print(f\" Intensity: {np.exp(result_grad.x[2]):.2f}\")\n", "print(f\" Objective: {result_grad.fun:.6e}\")\n", "print(f\" Evaluations: {len(eval_history_grad)}\")\n", "\n", "print(\"\\nRunning Nelder-Mead (gradient-free)...\")\n", "result_free = minimize(\n", " objective_only,\n", " x0,\n", " method=\"Nelder-Mead\",\n", " options={\"maxiter\": 500, \"xatol\": 1e-6, \"fatol\": 1e-15},\n", ")\n", "print(f\" Source: ({result_free.x[0]:.3f}, {result_free.x[1]:.3f})\")\n", "print(f\" Intensity: {np.exp(result_free.x[2]):.2f}\")\n", "print(f\" Objective: {result_free.fun:.6e}\")\n", "print(f\" Evaluations: {len(eval_history_free)}\")\n", "\n", "print(\n", " f\"\\nSpeedup: {len(eval_history_free)}/{len(eval_history_grad)} \"\n", " f\"= {len(eval_history_free) / max(len(eval_history_grad), 1):.1f}x fewer evaluations with gradients\"\n", ")" ] }, { "cell_type": "code", "execution_count": 10, "id": "0242ec0f", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:09:22.565275Z", "iopub.status.busy": "2026-07-28T13:09:22.565183Z", "iopub.status.idle": "2026-07-28T13:09:22.748682Z", "shell.execute_reply": "2026-07-28T13:09:22.748303Z" } }, "outputs": [ { "data": { "image/png": "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VZlb/K7j9w2vizLOPXv2VH9PjVz9zPqx47WJgp0J//g7uCEiouCGqTK33367WogPuSUUGjBqgnwPXJXHSAkRkTvMsSAiIq9gqocREqQx9QPTb1q3bs3WJCIKU8yxICIir4wYMUIFF5hTjvn2qLKDKlivvPKKQ/lUIiIKHwwsiIjIK0j4xrodWNk4JydHJfZixAIJ7EREFL6YY0FERERERKXGHAsiIiIiIio1BhZERERERFRqzLEoBlaUPXTokFosyJOFn4iIiIiIQgVWpjh79qzUrFlTLc7pDgOLYiCoqFOnji8/HyIiIiKioLJ//36pXbu2230YWBQDIxV6Y6JGuz9GTI4fPy5VqlQpNkoktm0g4DnLtg1GPG/ZrsGG5yzbtbxkZmaqi+x6n9gdBhbF0Kc/IajwV2CBco54bwYWbNtgwHOWbRuMeN6yXYMNz1m2a3nzJCWAl8BdmDx5sqSlpUm7du18/bkQEREREYUcBhYuDBs2TLZu3Spr164t30+EiIiIiCgIMbAgIiIiIqJSY44FERERBbTCwkLJz8/392EEXI4F2gR5mMzBZLuWRnR0tERGRoovMLAgIiKigK2ff+TIETl9+rS/DyUg2wbBBdYX4DpbbNfSqlixolSvXr3U5xIDCyIiIgpIelBRtWpViY+PZwfaLrAoKCiQqKgotosPhVu7apom58+fl2PHjqnHNWrUKNXrMbAgIiKigJz+pAcVF110kb8PJ+CEWwe4vIRju1aoUEF9RXCB37fSTIti8jYREREFHD2nAiMVRFS29N+z0uYyMbAgIiKigBUuV42JQuH3jIEFERERERGVGgMLIiIiIioz//znP+WVV14JiRa+9957pVevXh7t+8wzz8iIESMknDCwICIiIvJDxxM6deqkpqHot2rVqsk//vEP2bt3r2WfPXv22OyDG9auGDhwoM1rff3113L99ddLpUqVVELuJZdcIvfdd59s3LjRJil+/Pjxcumll6p9KleuLFdeeaV8+OGHLo9x8eLFNu+N72vatKlMmTKl2J/v999/l59++kkeeeQRyxz+p59+Wpo3by4JCQlSs2ZNGTBggBw6dMjl+xlva9eulWAxatQomT59uuzevVvCBQMLFyZPnixpaWnSrl278v1EiIiIKKwMHjxYDh8+rDrX3333nezfv1/69+/vsN+CBQvUfvq+b731luU5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+zGwIBvGhG375O25mw9L94lL5ZLnf1Zf8ZiIiIhsxcXFyX/+8x85depUwDcNrmi7UqdOHdUBNzp48KAsXLhQatSoIYHirbfekkGDBqmgQNemTRv5+OOPZdu2bSoY0DRNbrzxRiksLFTP9+nTRw4fPmxz69atm3Ts2FGqVq2q9lm6dKkKLH766SdZv369dO7cWXr27CkbN26UYNKvXz9Zvny5bNmypczfi4EF2SgodL7yNoKIoTM3yF9HzkpuQZFsP3JWPWZwQUREAe30fpFDm6w3PC5jXbt2lerVq8urr77qdj909q699lp1VR2d+EceeUTOnTvncv+dO3eqKT8IXJo2bSoLFixw2Gf//v1y1113ScWKFaVy5crqSv2ePXtsRlR69eolL7/8stSsWVMuueQSl+93yy23SEZGhqxYscKybfr06aqDrne+dbm5uerKeK1atSQhIUGuvPJKWbx4seX5EydOyD333KOej4+Pl+bNm8vnn39u8xr42QcMGCCJiYkqcHnjjTekOMePH5dff/1VdfiNhgwZotoK04Bat24tL730kmobvS3Q5viM9FtkZKR6nfvuu8/yGpiG9tRTT6l828aNG8srr7yivn7//fcl/lz/9a9/qbax17JlSxk3bpy6j2n4CGhSU1MlJSVFBTsbNmxwGxwOHz5ctRnOjXr16tmce5UqVZIOHTrIrFmzpKwxsCA3IxaiInyYuGCnGAdwsRUjupMW7mQLEhFRYEIQ8U4bkSkdrTc8LuPgAp1UdELffvttOXDggNN9/v77b+nevbvccccd8scff8js2bNVhxQdRGeKioqkd+/eamrL6tWr5b333lOdVKP8/Hx11T0pKUmWLVumAgJ00vE+xpEJjDhs375dfvnlF/nhhx9c/hx4L1ztxpV/HUYwjJ1vHY575cqVqvOKn+cf//iHel8EQ5CTk6NGEX788UfZvHmz6vj/85//lDVr1lhe48knn5QlS5bId999J/Pnz1eBibsONaDNEKhcdtllLvdBpx4/Q4MGDVRH35kZM2ao17nzzjtdvg4+g7Nnz6qAzZW/i/lc0Z74mbGfDiMJ2Ldv377qMd5j4MCB6vtWrVqlgpkePXqo7a5GbDAd7IsvvlCf66effqoCKqMrrrhCnRNlLarM34GCinGUAvAw0iSSnnFOBRNGiDl2H3d9ZYWIiMin/ttRJMs8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CVysyM/P18JZcW27b98+FURUrlxZ/S1o1KiR9uSTT2pnzpyxeR22raP77rtP/Z7j/yz83uPvqB5UAM9Z37crz1ffMuGf0ox4EBERERERMceCiIiIiIhKjYEFERERERGVGgMLIiIiIiIqNQYWRERERERUagwsiIiIiIio1BhYEBERERFRqTGwICIiIiKiUmNgQUREREREpcbAgoiI3Kpfv75MnDgxJFrJZDLJnDlzyvx9Fi9erN7r9OnTZf5eRESBgoEFEVGAuPfee1Vn1P62a9eucnn/adOmScWKFR22r127VoYMGVIuxxCMOnXqJI8++qjNtquvvloOHz4sKSkpfjsuIqLyFlXu70hERC51795dPv74Y5ttVapU8WuL+fv9g1FMTIxUr17d34dBRFSuOGJBRBRAYmNjVYfUeIuMjFSjGb169bLZF1fJcbVch/uPPPKIPPXUU1K5cmX1vS+++KLN92BqzoMPPijVqlWTuLg4adasmfzwww9q6s6gQYPkzJkzlpES/Xvtp0Lt27dPbrvtNklMTJTk5GS566675OjRo5bn8X2tWrWSTz75RH0vrtrffffdcvbsWbc/+/Lly+Xaa6+VChUqSJ06ddTPcu7cOfXcv/71L7nyyisdvqdly5Yybtw4y8jKDTfcIKmpqeo9O3bsKBs2bPBqutKmTZvUtj179qjHJ06ckHvuuUdq1aol8fHx0rx5c/n8888t++NzWbJkiUyaNMnSbvheZ6/99ddfS9OmTdVnjHZ54403bI4H21555RW57777JCkpSerWrStTpkyxPJ+XlyfDhw+XGjVqqM+uXr168uqrr7ptUyKi8sTAgogohEyfPl0SEhJk9erV8tprr6lO9y+//KKeKyoqkptuuklWrFghM2fOlK1bt8r48eNV4IKpOwgeEChgCg9uo0aNcnh9vAaCipMnT6oONV579+7d0qdPH5v9/v77b5XLgKAFN+yL93IF+2O05o477pA//vhDZs+erQINdKShX79+smbNGrWfbsuWLWrfvn37qscIXAYOHKi+b9WqVdK4cWPp0aNHsQGNOzk5OdKmTRv58ccfZfPmzWpK2D//+U91LICAon379jJ48GBLuyEosrd+/XoVgCHA+vPPP1XwNXr0aDX9zAjBRtu2bWXjxo3y8MMPy0MPPSTbt29Xz7311lvyv//9T7744gu17dNPP1XBCBFRwNCIiCggDBw4UIuMjNQSEhIstzvvvNPy3G233Waz/8iRI7WOHTtaHuP+NddcY7NPu3bttKefflrdnzdvnhYREaFt377d6ft//PHHWkpKisP2evXqaW+++aa6P3/+fHWM+/btszy/ZcsWDf+drFmzRj1+4YUXtPj4eC0zM9Oyz5NPPqldeeWVLn/2+++/XxsyZIjNtmXLlqnjzc7OVo9btmypjRs3zvL8s88+6/Y1CwsLtaSkJO3777+3bMNxfvvtt+r+okWL1ONTp05Znt+4caPalp6e7vJ1b775Zu2JJ56waXd8Fkb2r923b1/thhtusNkHbZKWlmbTzv3797c8Lioq0qpWraq999576vGIESO066+/Xm0nIgpEHLEgIgognTt3VtNx9BuuUnujRYsWNo8xbebYsWPqPl6vdu3a0qRJkxIf37Zt29QVeeNV+bS0NJX0jed0uJKO6TzOjsOZ33//XV29x/Qq/datWzc1QpKenm4Ztfjss8/UfcQImJKEbTpMx8LIAUYqMBUKoy9ZWVlq6lZJFRYWyr///W81BQrTy3Bc8+bN8/o10TYdOnSw2YbHO3fuVO/h7PPDVCpMZ9PbDdOu8BlecsklaprY/PnzS/xzERGVBSZvExEFEExjatSokcP2iIgI1Zk2ys/Pd9gvOjra5jE6p+icA3IXyou743AGAQByP9BhtodcA0Cuw9NPP63yJrKzs2X//v02U7AwDQo5EZiehPwD5DJgmhJyE5xBm4KxXe3b9PXXX1evh2liCC7w+SC3xdVrlmW7tW7dWgVZP//8syxYsEBNreratat89dVXZXIsRETeYmBBRBQEUJkJc/yNcPXaviPqDq6GHzhwQHbs2OF01AKVjIxXz5257LLLVIceN33UArkaSFLGyEVJodOM13EWVOkw2oKEbOQWILBAonbVqlUtzyN35N1331V5FYBjzMjIKLbaFfIiKlWqZGlTI7wmckr69++vHqOTj/Yz/qyethtey/618Tkgx8VTGIVBMIXbnXfeqfJSkO+C0RQiIn/jVCgioiBw/fXXy7p162TGjBlq+swLL7zgEGgUB53y6667TiVII+lav/o9d+5cy/QljBwsXLhQdcjPnz/v8Bq4Qo4r95iChJEDJDEPGDBAvTaSjksKIxG//fabStZG5x4/43fffWdJ3tbhfWfNmiVffvmlzTQowBQoVKLCtCMkr+N5d6M0CGIQHCGRGu+HBG37Sk14TbQVjg2vi1EVYwUsvd3wfqgGhXZzNjLzxBNPqHbFtCoEJkiyf+edd5wmyLsyYcIENf3rr7/+Uq+BNsBUKWdrjxAR+QMDCyKiIIB8A1QRQinZdu3aqUpH6NB7CyVP8f2YVoSr7ng9/Wo7KkMNHTpUXQ3H1XxUlbKHqTno8OMKP4IUBBoNGzZUVZxKA6MpqByFDjNKzl5++eUyZswYqVmzps1+uEqP6U4IeuzL73700Udy6tQpNfqByk2YVmUc0bCH0R69o473/89//iMvvfSSzT7PP/+8ej20P8r5oiNv/74IDjDqgPZEuznLv8BroJoTgiKU+MXPhopdyJvwFHJW8JkggMNniEDmp59+skzpIiLyNxMyuP19EEREREREFNx4mYOIiIiIiEqNgQUREREREZUaAwsiIiIiIio1BhZERERERFRqDCyIiIiIiKjUGFgQEREREVGpMbAgIiIiIqJSY2BBRERERESlxsCCiIiIiIhKjYEFERERERGVGgMLIiIiIiIqNQYWREREREQkpfX/npx6YzbNvDIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(8, 5))\n", "ax.semilogy(\n", " eval_history_grad,\n", " \"o-\",\n", " label=f\"L-BFGS-B ({len(eval_history_grad)} evals)\",\n", " linewidth=2,\n", " markersize=4,\n", ")\n", "ax.semilogy(\n", " eval_history_free,\n", " \"s-\",\n", " label=f\"Nelder-Mead ({len(eval_history_free)} evals)\",\n", " linewidth=2,\n", " markersize=3,\n", ")\n", "ax.set_xlabel(\"Function evaluations\")\n", "ax.set_ylabel(\"Objective (sensor temperature error)\")\n", "ax.set_title(\"Gradient-based vs gradient-free optimization\")\n", "ax.legend()\n", "ax.grid(True, alpha=0.3)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "7fbd7f5b", "metadata": {}, "source": [ "## Step 6: Visualize the optimized design\n", "\n", "Finally, we run the optimized design through the thermal solver once more and plot the resulting temperature field, overlaying the sensor locations with their achieved and target temperatures and the recovered source position." ] }, { "cell_type": "code", "execution_count": 11, "id": "63e93ffe", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:09:22.750130Z", "iopub.status.busy": "2026-07-28T13:09:22.750041Z", "iopub.status.idle": "2026-07-28T13:09:22.850469Z", "shell.execute_reply": "2026-07-28T13:09:22.849938Z" } }, "outputs": [ { "data": { "image/png": "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4507dzZ98sknCYanypYtm2nixIlqSKThw4dzeCqd3ovx48er4WKWL19uunbtWvwtIiLCWUXKslL7XiTGXv/6vA8XL15UI1/07dvXdOLECdOaNWtMhQsXNn322WdOKlHWldr3Qr4b5L348ccf1RBJGzZsMJUrV06NHENpJ5/vMiSh3CQkmTx5svr/hQsX1OPyHsh7kXh4qg8//FB9Z8uQhq4cnuru3bsmPz+/9IhT1fPI81FCmS5QFTKuWqlSpVTQI0OQ/P333/GPNW7cWH3p2vrpp59MFStWVOvLsBdr167VodSZU2rei9KlS9utvPIFQen7XiTGQFW/92Hnzp1qyDwJqmSoqjFjxqihwyh934v79++bRowYoYJTb29vU8mSJU3vvvuu6fbt23wrNNiyZYvdz33rsZe/8l4k3iYgIEC9b1In5s2b59L3QIJHGabK1TcGqfa5yT9JZVuJiIiIiPSSqdqoEhEREVHmwUCViIiIiAyJgSoRERERGRIDVSIiIiIyJAaqRERERGRIDFSJiIiIyJAYqBIRERGRITFQJSIiIiJDYqBKRERERIbEQJWIiIiIDImBKhFlWCEhIfDz88PYsWPjl+3cuROenp7YvHmzrmUjIiLt3Ewmk8kJ+yEi0sW6devQpk0bFaBWqlQJAQEBeOmllzB58mS+I0REGRwDVSLK8Pr06YNNmzahbt26OHz4MPbs2QMvLy+9i0VERBoxUCWiDO/u3buoVq0aLl26hH379qF69ep6F4mIiJyAbVSJKMM7c+YMrl69iri4OJw/f17v4hARkZMwo0pEGdq9e/dQr1491TZV2qhOmTJFXf4vXLiw3kUjIiKNGKgSUYb24YcfYvny5Th06BBy586Nxo0bw9fXF2vWrNG7aEREpBEv/RNRhrV161aVQV2wYAF8fHzg7u6u/r99+3bMnDlT7+IREZFGzKgSERERkSExo0pEREREhsRAlYiIiIgMiYEqERERERkSA1UiIiIiMiQGqkRERERkSAxUiYiIiMiQGKgSERERkSExUCUiIiIiQ2KgSkRERESGxECViIiIiAyJgSoRERERGRIDVSIiIiKCEf0f51D7FJOqPzAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Run the optimized design through the thermal solver\n", "opt = result_grad.x\n", "thermal_opt = apply_tesseract(\n", " thermal,\n", " {\n", " \"source_x\": jnp.float32(opt[0]),\n", " \"source_y\": jnp.float32(opt[1]),\n", " \"source_intensity\": jnp.float32(np.exp(opt[2])),\n", " \"source_width\": np.float32(0.15),\n", " \"displacement\": jnp.zeros((30, 30, 2), dtype=jnp.float32),\n", " \"conductivity\": np.float32(1.0),\n", " \"boundary_temp\": np.float32(0.0),\n", " },\n", ")\n", "temp_opt = np.asarray(thermal_opt[\"temperature\"])\n", "\n", "fig, ax = plt.subplots(figsize=(7, 6))\n", "im = ax.imshow(temp_opt.T, origin=\"lower\", extent=[0, 1, 0, 1], cmap=\"hot\")\n", "plt.colorbar(im, ax=ax, label=\"Temperature\")\n", "\n", "# Plot sensor locations and achieved vs target temperatures\n", "for (si, sj), target in zip(SENSORS, TARGETS, strict=False):\n", " px, py = si / 31, sj / 31\n", " achieved = float(temp_opt[si, sj])\n", " ax.plot(px, py, \"wo\", markersize=10, markeredgecolor=\"blue\", markeredgewidth=2)\n", " ax.annotate(\n", " f\"T={achieved:.3f}\\n(target={float(target):.3f})\",\n", " xy=(px, py),\n", " xytext=(5, 5),\n", " textcoords=\"offset points\",\n", " fontsize=8,\n", " color=\"white\",\n", " fontweight=\"bold\",\n", " bbox=dict(boxstyle=\"round,pad=0.2\", facecolor=\"black\", alpha=0.7),\n", " )\n", "\n", "# Plot optimized source location\n", "ax.plot(\n", " float(opt[0]),\n", " float(opt[1]),\n", " \"r*\",\n", " markersize=20,\n", " markeredgecolor=\"white\",\n", " markeredgewidth=1,\n", ")\n", "ax.annotate(\n", " f\"Source\\n({float(opt[0]):.2f}, {float(opt[1]):.2f})\\nq={float(np.exp(opt[2])):.1f}\",\n", " xy=(float(opt[0]), float(opt[1])),\n", " xytext=(10, -20),\n", " textcoords=\"offset points\",\n", " fontsize=9,\n", " color=\"red\",\n", " fontweight=\"bold\",\n", " bbox=dict(boxstyle=\"round,pad=0.2\", facecolor=\"white\", alpha=0.8),\n", ")\n", "\n", "ax.set_title(\"Optimized temperature field with sensor locations\")\n", "ax.set_xlabel(\"x\")\n", "ax.set_ylabel(\"y\")\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "afa3d626", "metadata": {}, "source": [ "## Step 7: Constant-memory gradients with implicit differentiation\n", "\n", "The unrolled `lax.scan` above stores every intermediate coupling state for backpropagation, so memory grows as $\\mathcal{O}(N)$ in the number of coupling iterations. For large problems -- fine meshes, many iterations -- that becomes the bottleneck.\n", "\n", "*Implicit differentiation* avoids it. At the converged fixed point $(T^*, D^*) = G(T^*, D^*, \\theta)$, the [implicit function theorem](https://en.wikipedia.org/wiki/Implicit_function_theorem) gives the sensitivity without replaying the iteration: the backward pass solves a single linear system instead of backpropagating through $N$ steps. Concretely, if $v = \\partial \\mathcal{L} / \\partial (T^*, D^*)$ is the loss gradient with respect to the fixed point, then\n", "\n", "$$\\lambda = \\left(I - \\partial G / \\partial (T, D)\\right)^{-T} v, \\qquad \\partial \\mathcal{L} / \\partial \\theta = \\lambda^\\top \\, \\partial G / \\partial \\theta.$$\n", "\n", "This is a standard, solved problem -- see the [JAX tutorial on implicit-function differentiation of iterative implementations](https://docs.jax.dev/en/latest/notebooks/Custom_derivative_rules_for_Python_code.html#example-implicit-function-differentiation-of-iterative-implementations) for how you would hand-code it with `jax.custom_vjp`. Rather than re-derive and hand-solve the adjoint equation ourselves, we let [optimistix](https://docs.kidger.site/optimistix/) do it: `optx.fixed_point` runs the coupling to convergence with `optx.FixedPointIteration`, and its `ImplicitAdjoint` differentiates through the *converged* fixed point via exactly the equation above. We give the adjoint a matrix-free `GMRES` linear solver, so it solves for $\\lambda$ using Jacobian-vector products (one Tesseract call each) without ever forming the Jacobian. The forward pass still composes the two Tesseracts through `apply_tesseract` -- we simply express one coupling step as a map $G$ and hand it to the solver.\n", "\n", "Because the forward solve and the backward (implicit) gradient are decoupled, the same code gets constant-memory gradients for *any* fixed-point solver. `FixedPointIteration` (Picard) is the right default here -- the thermoelastic coupling is strongly contractive, so it converges in a few steps. For a stiffer coupling you could swap in `optx.Newton` or `optx.Chord` (now cheap, since the batched Jacobian endpoint materialises each Tesseract's Jacobian in one call), or Anderson acceleration ([optimistix#217](https://github.com/patrick-kidger/optimistix/pull/217)) -- and the implicit gradient stays correct in every case." ] }, { "cell_type": "code", "execution_count": 12, "id": "ba1d047e", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:09:22.852023Z", "iopub.status.busy": "2026-07-28T13:09:22.851934Z", "iopub.status.idle": "2026-07-28T13:09:23.290916Z", "shell.execute_reply": "2026-07-28T13:09:23.290240Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Forward pass comparison:\n", " Unrolled: 6.2611973844e-03\n", " Implicit: 6.2611973844e-03\n", " Match: True\n" ] } ], "source": [ "def coupling_map(state, args):\n", " \"\"\"One coupling step (temp, disp) -> (temp', disp').\n", "\n", " Everything it needs arrives explicitly: the current fixed-point state and\n", " args = (source_x, source_y, intensity), the differentiable design parameters.\n", " (The served `thermal` and `structural` Tesseracts are module-level handles.)\n", " \"\"\"\n", " _temp, disp = state\n", " source_x, source_y, intensity = args\n", " thermal_out = apply_tesseract(\n", " thermal,\n", " {\n", " \"source_x\": source_x,\n", " \"source_y\": source_y,\n", " \"source_intensity\": intensity,\n", " \"source_width\": np.float32(0.15),\n", " \"displacement\": disp,\n", " \"conductivity\": np.float32(1.0),\n", " \"boundary_temp\": np.float32(0.0),\n", " },\n", " )\n", " structural_out = apply_tesseract(\n", " structural,\n", " {\n", " \"temperature\": thermal_out[\"temperature\"],\n", " \"youngs_modulus\": np.float32(200.0),\n", " \"poissons_ratio\": np.float32(0.3),\n", " \"thermal_expansion\": np.float32(1e-3),\n", " },\n", " )\n", " return (thermal_out[\"temperature\"], structural_out[\"displacement\"])\n", "\n", "\n", "def coupled_objective_implicit(params):\n", " \"\"\"Same inverse problem, but the coupled equilibrium is solved by optimistix.\n", "\n", " Forward pass: `optx.fixed_point` iterates the coupling map G to convergence.\n", " Backward pass: optimistix's `ImplicitAdjoint` differentiates through the converged\n", " fixed point via the implicit function theorem -- it solves the adjoint equation\n", " (I - dG/d(T,D))^T lambda = v instead of backpropagating through the iteration, so\n", " memory is O(1) in the number of coupling steps. We never hand-write the custom_vjp;\n", " optimistix supplies it.\n", " \"\"\"\n", " source_x, source_y, log_intensity = params[0], params[1], params[2]\n", " intensity = jnp.exp(log_intensity)\n", "\n", " # Solve the coupled fixed point. ImplicitAdjoint gives the implicit-function-theorem\n", " # gradient w.r.t. the args (source_x, source_y, intensity); we hand it a matrix-free\n", " # GMRES linear solver so the adjoint system is solved with Jacobian-vector products\n", " # (one Tesseract call each) rather than materializing the full Jacobian.\n", " solver = optx.FixedPointIteration(rtol=1e-6, atol=1e-6)\n", " adjoint = optx.ImplicitAdjoint(linear_solver=lx.GMRES(rtol=1e-6, atol=1e-6))\n", " state0 = (\n", " jnp.zeros((30, 30), dtype=jnp.float32),\n", " jnp.zeros((30, 30, 2), dtype=jnp.float32),\n", " )\n", " sol = optx.fixed_point(\n", " coupling_map,\n", " solver,\n", " state0,\n", " args=(source_x, source_y, intensity),\n", " adjoint=adjoint,\n", " )\n", " final_temp, _final_disp = sol.value\n", "\n", " loss = jnp.float32(0.0)\n", " for (si, sj), target in zip(SENSORS, TARGETS, strict=False):\n", " loss = loss + (final_temp[si, sj] - target) ** 2\n", " return loss\n", "\n", "\n", "# Verify forward pass matches the unrolled version\n", "loss_implicit = coupled_objective_implicit(p0)\n", "loss_unrolled = coupled_objective(p0)\n", "print(\"Forward pass comparison:\")\n", "print(f\" Unrolled: {float(loss_unrolled):.10e}\")\n", "print(f\" Implicit: {float(loss_implicit):.10e}\")\n", "print(f\" Match: {jnp.allclose(loss_unrolled, loss_implicit)}\")" ] }, { "cell_type": "code", "execution_count": 13, "id": "eeed02dd", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:09:23.293478Z", "iopub.status.busy": "2026-07-28T13:09:23.293296Z", "iopub.status.idle": "2026-07-28T13:09:26.819594Z", "shell.execute_reply": "2026-07-28T13:09:26.818412Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Unrolled Implicit FD Impl vs FD\n", "d(loss)/d(source_x) 2.470245e-02 2.470246e-02 2.471032e-02 3.18e-04\n", "d(loss)/d(source_y) 2.470247e-02 2.470247e-02 2.470566e-02 1.29e-04\n", "d(loss)/d(log_intensity) 9.220975e-03 9.220975e-03 9.220093e-03 9.56e-05\n" ] } ], "source": [ "# Compare gradients: implicit vs unrolled vs finite differences\n", "grad_implicit = jax.grad(coupled_objective_implicit)(p0)\n", "grad_unrolled = jax.grad(coupled_objective)(p0)\n", "\n", "# Finite differences as ground truth\n", "eps = 1e-4\n", "fd_grads_check = []\n", "for i in range(3):\n", " p_plus = p0.at[i].add(eps)\n", " p_minus = p0.at[i].add(-eps)\n", " fd_grads_check.append(\n", " (coupled_objective_implicit(p_plus) - coupled_objective_implicit(p_minus))\n", " / (2 * eps)\n", " )\n", "\n", "names = [\"d(loss)/d(source_x)\", \"d(loss)/d(source_y)\", \"d(loss)/d(log_intensity)\"]\n", "print(f\"{'':32s} {'Unrolled':>14s} {'Implicit':>14s} {'FD':>14s} {'Impl vs FD':>12s}\")\n", "for name, u, im, fd in zip(\n", " names, grad_unrolled, grad_implicit, fd_grads_check, strict=False\n", "):\n", " rel_err = abs(float(im) - float(fd)) / (abs(float(fd)) + 1e-30)\n", " print(\n", " f\"{name:32s} {float(u):14.6e} {float(im):14.6e} {float(fd):14.6e} {rel_err:12.2e}\"\n", " )" ] }, { "cell_type": "markdown", "id": "3ffc182c", "metadata": {}, "source": [ "### Why this matters: memory scaling\n", "\n", "With the unrolled approach, JAX stores the full state at every coupling iteration for backpropagation, so memory scales as $\\mathcal{O}(N \\times \\text{state size})$.\n", "\n", "With implicit differentiation, the forward pass runs to convergence and discards the intermediates; the backward pass solves the adjoint equation at the fixed point only, with no replay of the iteration. Memory scales as $\\mathcal{O}(\\text{state size})$, independent of $N$.\n", "\n", "For this 30×30 demo the difference is negligible, but for production-scale problems -- large meshes and many coupling iterations -- it is what keeps the backward pass within the available memory." ] }, { "cell_type": "markdown", "id": "0f1e401b", "metadata": {}, "source": [ "## Takeaways\n", "\n", "In this tutorial, we composed two independent physics Tesseracts into a two-way coupled pipeline and solved a thermoelastic inverse-design problem with end-to-end gradients. The key points:\n", "\n", "1. **Independent solvers, composed.** The thermal and structural solvers are separate Tesseracts -- separate `tesseract_api.py`, separate container, separate dependencies. Tesseract-JAX wires them into one differentiable pipeline with `apply_tesseract`, no monolithic rewrite required.\n", "\n", "2. **Gradients through two-way coupling.** The coupled equilibrium is a `jax.lax.scan` over alternating solver calls. Because each Tesseract exposes its derivatives, `jax.grad` propagates gradients through the entire iteration automatically, and the result matches finite differences.\n", "\n", "3. **Gradients make optimization tractable.** Using the end-to-end gradients, L-BFGS-B solves the inverse problem in far fewer evaluations than the gradient-free Nelder-Mead baseline.\n", "\n", "4. **Implicit differentiation for scale.** Solving the coupled fixed point with `optx.fixed_point` gives constant-memory gradients via the implicit function theorem -- $\\mathcal{O}(1)$ in coupling iterations instead of $\\mathcal{O}(N)$ -- without changing the forward composition or hand-writing an adjoint. Because the forward solver and the implicit backward pass are decoupled, you can swap `FixedPointIteration` for `Newton`/`Chord` on stiffer couplings and keep correct gradients.\n", "\n", "5. **The pattern generalizes.** Wrap each physics component as a Tesseract, compose with `apply_tesseract`, and differentiate with JAX. The same recipe applies to any multi-component, multi-physics differentiable pipeline." ] }, { "cell_type": "markdown", "id": "a5df9f57", "metadata": {}, "source": [ "### What's next\n", "\n", "- **Add more physics.** Introduce a third coupled solver (e.g. a fluid or electromagnetic field) and let the gradients flow through all of them.\n", "- **Scale up.** Increase the mesh resolution and the number of coupling iterations, and run the Tesseracts on a GPU.\n", "- **Swap an implementation.** Because the pipeline composes Tesseracts by reference, you can replace a solver with a different image -- a higher-fidelity model or a learned surrogate -- without touching the optimization code.\n", "- **Explore other demos.** See the [shape optimization](fem-shape-optimization.ipynb) and [data assimilation](data-assimilation.ipynb) demos for other ways to compose Tesseracts with JAX.\n", "\n", "Questions? Feedback? Please reach out through the [Tesseract Community Forum](https://si-tesseract.discourse.group/)." ] }, { "cell_type": "code", "execution_count": 14, "id": "fd545d2b", "metadata": { "execution": { "iopub.execute_input": "2026-07-28T13:09:26.822108Z", "iopub.status.busy": "2026-07-28T13:09:26.822008Z", "iopub.status.idle": "2026-07-28T13:09:27.834952Z", "shell.execute_reply": "2026-07-28T13:09:27.834236Z" } }, "outputs": [], "source": [ "# Shut down the Tesseract servers\n", "thermal.teardown()\n", "structural.teardown()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.12.7" } }, "nbformat": 4, "nbformat_minor": 5 }