From 0bccd934cc45f0e14ac9001a7d80c69f3cc8c32b Mon Sep 17 00:00:00 2001 From: NT Date: Thu, 16 Sep 2021 18:15:49 +0200 Subject: [PATCH] replaced phiflow >> op calls with .at() --- diffphys-code-ns.ipynb | 576 ++++++++++++++++++++--------------------- overview-ns-forw.ipynb | 3 +- 2 files changed, 289 insertions(+), 290 deletions(-) diff --git a/diffphys-code-ns.ipynb b/diffphys-code-ns.ipynb index 7704eea..737cf7a 100644 --- a/diffphys-code-ns.ipynb +++ b/diffphys-code-ns.ipynb @@ -2,9 +2,6 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "id": "o4JZ84moBKMr" - }, "source": [ "# Differentiable Fluid Simulations\n", "\n", @@ -31,13 +28,13 @@ " \\frac{\\partial s}{\\partial{t}} + \\mathbf{u} \\cdot \\nabla s &= 0 \n", "\\end{aligned}$$\n", "\n" - ] + ], + "metadata": { + "id": "o4JZ84moBKMr" + } }, { "cell_type": "markdown", - "metadata": { - "id": "pwmMK-LW_trZ" - }, "source": [ "## Formulation\n", "\n", @@ -60,50 +57,50 @@ "Hence, the optimization can only change $\\mathbf{u}_0$ to align $y_{t_e,i}$ with the references $y^*_{t_e,i}$ as closely as possible.\n", "\n", "\n" - ] + ], + "metadata": { + "id": "pwmMK-LW_trZ" + } }, { "cell_type": "markdown", - "metadata": { - "id": "omVCYK5f_tra" - }, "source": [ "## Starting the Implementation\n", "\n", "First, let's get the loading of python modules out of the way. By importing `phi.torch.flow`, we get fluid simulation functions that work within pytorch graphs and can provide gradients (`phi.tf.flow` would be the alternative for tensorflow).\n", "\n" - ] + ], + "metadata": { + "id": "omVCYK5f_tra" + } }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "da1uZcDXdVcF", - "outputId": "66973d88-ec2c-4137-ed5b-1696848be36f" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [] - } - ], "source": [ "#!pip install --upgrade --quiet phiflow\n", "!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@develop\n", "\n", "from phi.torch.flow import * \n", "import pylab # for visualizations later on\n" - ] + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [] + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "da1uZcDXdVcF", + "outputId": "66973d88-ec2c-4137-ed5b-1696848be36f" + } }, { "cell_type": "markdown", - "metadata": { - "id": "rdSTbMoaS0Uz" - }, "source": [ "## Batched simulations\n", "\n", @@ -111,32 +108,14 @@ "\n", "The `Domain` object is allocated just like before, but the `INFLOW_LOCATION` tensor now receives a string\n", "`'inflow_loc,vector'` that indicates the names of the two dimensions. This leads to the creation of an `inflow_loc` dimensions in addition to the two spatial dimensions (the `vector` part).\n" - ] + ], + "metadata": { + "id": "rdSTbMoaS0Uz" + } }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "mphMP0sYIOz-", - "outputId": "0c3cea02-a1b2-4d88-e756-afbaef0544b0" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(inflow_locᵇ=4, xˢ=32, yˢ=40)" - ] - }, - "execution_count": 2, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - } - ], "source": [ "# closed domain\n", "INFLOW_LOCATION = tensor([(12, 4), (13, 6), (14, 5), (16, 5)], batch('inflow_loc'), channel('vector'))\n", @@ -149,61 +128,59 @@ "#BND = extrapolation.BOUNDARY # open boundaries \n", "\n", "INFLOW.shape" - ] + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(inflow_locᵇ=4, xˢ=32, yˢ=40)" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 2 + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mphMP0sYIOz-", + "outputId": "0c3cea02-a1b2-4d88-e756-afbaef0544b0" + } }, { "cell_type": "markdown", - "metadata": { - "id": "VSisaefX_trh" - }, "source": [ "The last statement verifies that our `INFLOW` grid likewise has an `inflow_loc` dimension in addition to the spatial dimensions `x` and `y`. You can test for the existence of a tensor dimension in phiflow with the `.exists` boolean, which can be evaluated for any dimension name. E.g., above `INFLOW.inflow_loc.exists` will give `True`, while `INFLOW.some_unknown_dim.exists` will give `False`. The $^b$ superscript indicates that `inflow_loc` is a batch dimension.\n", "\n", "Phiflow tensors are automatically broadcast to new dimensions via their names, and hence typically no-reshaping operations are required. E.g., you can easily add or multiply tensors with differing dimensions. Below we'll multiply a staggered grid with a tensor of ones along the `inflow_loc` dimension to get a staggered velocity that has `x,y,inflow_loc` as dimensions via `StaggeredGrid(...) * math.ones(batch(inflow_loc=4))`." - ] + ], + "metadata": { + "id": "VSisaefX_trh" + } }, { "cell_type": "markdown", - "metadata": { - "id": "SDmFUYlI_tri" - }, "source": [ "We can easily simulate a few steps now starting with these different initial conditions. Thanks to the broadcasting, the exact same code we used for the single forward simulation in the overview chapter will produce four simulations with different smoke inflow positions." - ] + ], + "metadata": { + "id": "SDmFUYlI_tri" + } }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 263 - }, - "id": "2PccI2r5_trj", - "outputId": "8dc97fa4-6c27-4406-e0c1-cdfb9c95b5e5" - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light", - "tags": [] - }, - "output_type": "display_data" - } - ], "source": [ "smoke = CenteredGrid(0, extrapolation.BOUNDARY, x=32, y=40, bounds=Box[0:32, 0:40]) # sampled at cell centers\n", "velocity = StaggeredGrid(0, BND, x=32, y=40, bounds=Box[0:32, 0:40]) # sampled in staggered form at face centers \n", "\n", "def step(smoke, velocity):\n", " smoke = advect.mac_cormack(smoke, velocity, dt=1) + INFLOW\n", - " buoyancy_force = smoke * (0, 1) >> velocity\n", + " buoyancy_force = (smoke * (0, 1)).at(velocity)\n", " velocity = advect.semi_lagrangian(velocity, velocity, dt=1) + buoyancy_force\n", " velocity, _ = fluid.make_incompressible(velocity)\n", " return smoke, velocity\n", @@ -218,24 +195,44 @@ " axes[i].imshow(smoke_final.values.numpy('inflow_loc,y,x')[i,...], origin='lower', cmap='magma')\n", " axes[i].set_title(f\"Inflow {INFLOW_LOCATION.numpy('inflow_loc,vector')[i]}\" + (\", Reference\" if i==3 else \"\"))\n", "pylab.tight_layout()\n" - ] + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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" + }, + "metadata": { + "needs_background": "light", + "tags": [] + } + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 263 + }, + "id": "2PccI2r5_trj", + "outputId": "8dc97fa4-6c27-4406-e0c1-cdfb9c95b5e5" + } }, { "cell_type": "markdown", - "metadata": { - "id": "V1tfVLqJ_trj" - }, "source": [ "The last image shows the state of the advected smoke fields after 20 simulation steps. The final smoke shape of simulation `[3]` with an inflow at `(16,5)`, with the straight plume on the far right, will be our **reference state** below. The initial velocity of the other three will be modified in the optimization procedure below to match this reference.\n", "\n", "(As a small side note: phiflow tensors will keep track of their chain of operations using the backend they were created for. E.g. a tensor created with NumPy will keep using NumPy/SciPy operations unless a PyTorch or TensorFlow tensor is also passed to the same operation. Thus, it is a good idea to verify that tensors are using the right backend once in a while, e.g., via `GRID.values.default_backend`.)\n" - ] + ], + "metadata": { + "id": "V1tfVLqJ_trj" + } }, { "cell_type": "markdown", - "metadata": { - "id": "vjIJq_Uz_trk" - }, "source": [ "## Gradients\n", "\n", @@ -250,27 +247,14 @@ "It is important that our initial velocity has the `inflow_loc` dimension before we record the gradients, such that we have the full \"mini-batch\" of four versions of our velocity (three of which will be updated via gradients in our optimization later on). To get the appropriate velocity tensor, we initialize a `StaggeredGrid` with a tensor of zeros along the `inflow_loc` batch dimension. As the staggered grid already has `y,x` and `vector` dimensions, this gives the desired four dimensions, as verified by the print statement below.\n", "\n", "Phiflow provides a unified API for gradients across different platforms by using functions that need to return a loss values, in addition to optional state values. It uses a loss function based interface, for which we define the `simulate` function below. `simulate` computes the $L^2$ error outlined above and returns the evolved `smoke` and `velocity` states after 20 simulation steps.\n" - ] + ], + "metadata": { + "id": "vjIJq_Uz_trk" + } }, { "cell_type": "code", "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "_j7fUGvQ_trl", - "outputId": "f06dea67-cc48-4af1-a963-46500f90d138" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Velocity dimensions: (inflow_locᵇ=4, xˢ=32, yˢ=40, vectorᵛ=2)\n" - ] - } - ], "source": [ "initial_smoke = CenteredGrid(0, extrapolation.BOUNDARY, x=32, y=40, bounds=Box[0:32, 0:40])\n", "initial_velocity = StaggeredGrid(math.zeros(batch(inflow_loc=4)), BND, x=32, y=40, bounds=Box[0:32, 0:40])\n", @@ -285,84 +269,97 @@ " #loss = field.l2_loss(diffuse.explicit(smoke - field.stop_gradient(smoke.inflow_loc[-1]), 1, 1, 10))\n", " \n", " return loss, smoke, velocity\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "pjqeVedM_trm" - }, - "source": [ - "Phiflow's `field.functional_gradient()` function is the central function to compute gradients. Next, we'll use it to obtain the gradient with respect to the initial velocity. Since the velocity is the second argument of the `simulate()` function, we pass `wrt=[1]`. (Phiflow also has a `field.spatial_gradient` function which instead computes derivatives of tensors along spatial dimensions, like `x,y`.)\n", - "\n", - "`functional_gradient` generates a gradient function. As a demonstration, the next cell evaluates the gradient once with the initial states for smoke and velocity. The last statement prints a summary of a part of the resulting gradient tensor.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Velocity dimensions: (inflow_locᵇ=4, xˢ=32, yˢ=40, vectorᵛ=2)\n" + ] + } + ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "grYi0l-g_trn", - "outputId": "93dae39b-1b31-429a-cf81-f615e23bbf7d" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Some gradient info: StaggeredGrid[(inflow_locᵇ=4, xˢ=32, yˢ=40, vectorᵛ=2), size=(32, 40), extrapolation=0]\n", - "(xˢ=31, yˢ=40) float32 -17.366662979125977 < ... < 14.014090538024902\n" - ] - } + "id": "_j7fUGvQ_trl", + "outputId": "f06dea67-cc48-4af1-a963-46500f90d138" + } + }, + { + "cell_type": "markdown", + "source": [ + "Phiflow's `field.functional_gradient()` function is the central function to compute gradients. Next, we'll use it to obtain the gradient with respect to the initial velocity. Since the velocity is the second argument of the `simulate()` function, we pass `wrt=[1]`. (Phiflow also has a `field.spatial_gradient` function which instead computes derivatives of tensors along spatial dimensions, like `x,y`.)\n", + "\n", + "`functional_gradient` generates a gradient function. As a demonstration, the next cell evaluates the gradient once with the initial states for smoke and velocity. The last statement prints a summary of a part of the resulting gradient tensor.\n" ], + "metadata": { + "id": "pjqeVedM_trm" + } + }, + { + "cell_type": "code", + "execution_count": 5, "source": [ "sim_grad = field.functional_gradient(simulate, wrt=[1], get_output=False)\n", "(velocity_grad,) = sim_grad(initial_smoke, initial_velocity)\n", "\n", "print(\"Some gradient info: \" + format(velocity_grad))\n", "print(format(velocity_grad.values.inflow_loc[0].vector[0])) # one example, location 0, x component, automatically prints size & content range\n" - ] + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Some gradient info: StaggeredGrid[(inflow_locᵇ=4, xˢ=32, yˢ=40, vectorᵛ=2), size=(32, 40), extrapolation=0]\n", + "(xˢ=31, yˢ=40) float32 -17.366662979125977 < ... < 14.014090538024902\n" + ] + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "grYi0l-g_trn", + "outputId": "93dae39b-1b31-429a-cf81-f615e23bbf7d" + } }, { "cell_type": "markdown", - "metadata": { - "id": "-drJBAe2_tro" - }, "source": [ "The last two lines just print some information about the resulting gradient field. Naturally, it has the same shape as the velocity itself: it's a staggered grid with four inflow locations. The last line shows how to access the x-components of one of the gradients.\n", "\n", "We could use this to take a look at the content of the computed gradient with regular plotting functions, e.g., by converting the x component of one of the simulations to a numpy array via `velocity_grad.values.inflow_loc[0].vector[0].numpy('y,x')`. However, below we'll use phiflow's `view()` function instead. It automatically analyzes the grid content and provides UI buttons to choose different viewing modes. You can use them to show arrows, single components of the 2-dimensional velocity vectors, or their magnitudes. (Because of its interactive nature, the corresponding image won't show up outside of Jupyter, though.)\n" - ] + ], + "metadata": { + "id": "-drJBAe2_tro" + } }, { "cell_type": "code", "execution_count": null, - "metadata": { - "id": "2LTHHjtZ_tro" - }, - "outputs": [], "source": [ "# neat phiflow helper function:\n", "view(velocity_grad)\n" - ] + ], + "outputs": [], + "metadata": { + "id": "2LTHHjtZ_tro" + } }, { "cell_type": "markdown", - "metadata": { - "id": "J7IgFG4o_trp" - }, "source": [ "Not surprisingly, the fourth gradient on the left is zero (it's already matching the reference). The other three gradients have detected variations for the initial round inflow positions shown as positive and negative regions around the circular shape of the inflow. The ones for the larger distances on the left are also noticeably larger." - ] + ], + "metadata": { + "id": "J7IgFG4o_trp" + } }, { "cell_type": "markdown", - "metadata": { - "id": "3mpyowRYUSS4" - }, "source": [ "\n", "\n", @@ -375,22 +372,27 @@ "The following cell implements a simple steepest gradient descent optimization: it re-evaluates the gradient function, and iterates several times to optimize $\\mathbf{u}_0$ with a learning rate (step size) `LR`.\n", "\n", "`field.functional_gradient` has a parameter `get_output` that determines whether the original results of the function (`simulate()` in our case) are returned, or only the gradient. As it's interesting to track how the loss evolves over the course of the iterations, let's redefine the gradient function with `get_output=True`. \n" - ] + ], + "metadata": { + "id": "3mpyowRYUSS4" + } }, { "cell_type": "code", "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "0U8h7_-b_trq", - "outputId": "11df5469-5c45-41b4-ba21-81114d2a3431" - }, + "source": [ + "sim_grad_wloss = field.functional_gradient(simulate, wrt=[1], get_output=True) # if we need outputs...\n", + "\n", + "LR = 1e-03 \n", + "for optim_step in range(80): \n", + " (loss, _smoke, _velocity), (velocity_grad,) = sim_grad_wloss(initial_smoke, initial_velocity)\n", + " initial_velocity = initial_velocity - LR * velocity_grad\n", + " if optim_step<3 or optim_step%10==9: print('Optimization step %d, loss: %f' % (optim_step, np.sum(loss.numpy()) ))\n" + ], "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "Optimization step 0, loss: 1193.145020\n", "Optimization step 1, loss: 1165.816650\n", @@ -405,53 +407,28 @@ ] } ], - "source": [ - "sim_grad_wloss = field.functional_gradient(simulate, wrt=[1], get_output=True) # if we need outputs...\n", - "\n", - "LR = 1e-03 \n", - "for optim_step in range(80): \n", - " (loss, _smoke, _velocity), (velocity_grad,) = sim_grad_wloss(initial_smoke, initial_velocity)\n", - " initial_velocity = initial_velocity - LR * velocity_grad\n", - " if optim_step<3 or optim_step%10==9: print('Optimization step %d, loss: %f' % (optim_step, np.sum(loss.numpy()) ))\n" - ] + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0U8h7_-b_trq", + "outputId": "11df5469-5c45-41b4-ba21-81114d2a3431" + } }, { "cell_type": "markdown", - "metadata": { - "id": "PI3xY-7m_trr" - }, "source": [ "The loss should have gone down significantly, from above 1100 to below 700, and now we can also visualize the initial velocities that were obtained in the optimization. \n", "\n", "The following images show the resulting three initial velocities in terms of their x (first set), and y components (second set of images). We're skipping the fourth set with `inflow_loc[0]` because it only contains zeros.\n" - ] + ], + "metadata": { + "id": "PI3xY-7m_trr" + } }, { "cell_type": "code", "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 316 - }, - "id": "FdL_orrX_trr", - "outputId": "b716256c-9b8a-40d9-fc01-d75e261a728c" - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light", - "tags": [] - }, - "output_type": "display_data" - } - ], "source": [ "fig, axes = pylab.subplots(1, 3, figsize=(10, 4))\n", "for i in range(INFLOW.shape.get_size('inflow_loc')-1):\n", @@ -459,34 +436,34 @@ " axes[i].set_title(f\"Ini. vel. X {INFLOW_LOCATION.numpy('inflow_loc,vector')[i]}\")\n", " pylab.colorbar(im,ax=axes[i])\n", "pylab.tight_layout()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 318 - }, - "id": "mLhwxsZd_trs", - "outputId": "5bb43835-6e21-4d97-bb07-17b17215bbc8" - }, + ], "outputs": [ { + "output_type": "display_data", "data": { - "image/png": "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\n", "text/plain": [ "
" - ] + ], + "image/png": "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" }, "metadata": { "needs_background": "light", "tags": [] - }, - "output_type": "display_data" + } } ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 316 + }, + "id": "FdL_orrX_trr", + "outputId": "b716256c-9b8a-40d9-fc01-d75e261a728c" + } + }, + { + "cell_type": "code", + "execution_count": 9, "source": [ "fig, axes = pylab.subplots(1, 3, figsize=(10, 4))\n", "for i in range(INFLOW.shape.get_size('inflow_loc')-1):\n", @@ -494,47 +471,47 @@ " axes[i].set_title(f\"Ini. vel. Y {INFLOW_LOCATION.numpy('inflow_loc,vector')[i]}\")\n", " pylab.colorbar(im,ax=axes[i])\n", "pylab.tight_layout()\n" - ] + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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" + }, + "metadata": { + "needs_background": "light", + "tags": [] + } + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 318 + }, + "id": "mLhwxsZd_trs", + "outputId": "5bb43835-6e21-4d97-bb07-17b17215bbc8" + } }, { "cell_type": "markdown", - "metadata": { - "id": "3mitRMPx_trt" - }, "source": [ "## Re-simulation\n", "\n", "We can also visualize how the full simulation over the course of 20 steps turns out, given the new initial velocity conditions for each of the inflow locations. This is what happened internally at optimization time for every gradient calculation, and what was measured by our loss function. Hence, it's good to get an intuition for which solutions the optimization has found.\n", "\n", "Below, we re-run the forward simulation with the new initial conditions from `initial_velocity`:\n" - ] + ], + "metadata": { + "id": "3mitRMPx_trt" + } }, { "cell_type": "code", "execution_count": 10, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 263 - }, - "id": "OINe99pf_trt", - "outputId": "a7c9ade3-3685-40e6-a5f1-97a5084deec9" - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light", - "tags": [] - }, - "output_type": "display_data" - } - ], "source": [ "smoke = initial_smoke \n", "velocity = initial_velocity\n", @@ -547,45 +524,45 @@ " axes[i].imshow(smoke_final.values.numpy('inflow_loc,y,x')[i,...], origin='lower', cmap='magma')\n", " axes[i].set_title(f\"Inflow {INFLOW_LOCATION.numpy('inflow_loc,vector')[i]}\" + (\", Reference\" if i==3 else \"\"))\n", "pylab.tight_layout()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ootUIrQq_tru" - }, - "source": [ - "Naturally, the image on the right is the same (this is the reference), and the other three simulations now exhibit a shift towards the right. As the differences are a bit subtle, let's visualize the difference between the target configuration and the different final states.\n", - "\n", - "The following images contain the difference between the evolved simulated and target density. Hence, dark regions indicate where the target should be, but isn't. The top row shows the original states with the initial velocity being zero, while the bottom row shows the versions after the optimization has tuned the initial velocities. Hence, in each column you can compare before (top) and after (bottom): \n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 410 - }, - "id": "7lm9Rrel640-", - "outputId": "6ef7914a-8f63-49af-9a1a-fde1aed37682" - }, + ], "outputs": [ { + "output_type": "display_data", "data": { - "image/png": "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\n", "text/plain": [ - "
" - ] + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr4AAADiCAYAAACoVMTQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxcVfk/8M8nadJ93yhtaSkUS2UptLKJiALKoqIIyirgUvSrX0QRvxUBRQFRqbgCwg9olU1WQUSwAgVLodACXeje0tI93dKmafY8vz/uDeTcM+1MJjPJ3NzP+/XKqzknz733ZPrM5Myds9DMICIiIiLS0RW1dwNERERERNqCOr4iIiIikgjq+IqIiIhIIqjjKyIiIiKJoI6viIiIiCSCOr4iIiIikgjq+IqIiEiskBxM8mWSFSQnk/wpyfvyeL0TSTaS3EXy1HxdpwXteYFkNckZbXS9G0huIbmxLa6XT+r47oWeWG37xJLcUN5yCskqkmvbuy2SOeUtV5CszefvXOhIriJ5cobhEwFsAdDLzK7MY7OaW29mPczsWQAgOYTkUyTXkzSSI6MHkDyZ5JskK0muJfmlTC4Uyc+mr4ubfm5mnwTwzUwbHj6f6sLzlJOcSfLYDI/dD8CVAMaa2T6ZXrNQJa7j29GeWCRvIbks/GOxmORXsrkoyXvC8x/YVNfSJ5bkTwfM21+RXENyJ8nVJK9uycVIDiT5AMkdJLeTvL/pZ2Z2CYDTWv8rSWt1tLxtQrIfyc0tuSlA8hKSDZGOzIlNPzezAwDc1LpfJ1FGAFho7bsLVyOAZwF8MdUPSY4F8ACAHwPoDeBwAHNacP6m/Gz6mtrK9v7NzHoAGADgRQCPZHjcfgC2mllZSy/IQEH1NQuqMQWo4J9YACoBfBbBk+piAL8jeVxLLkDyeAAHtKaRUlDikLd3AxhjZr0AHAfgApJnteD8jwPYiOAFeRCAW1rRVikMccjbJr8EsCiL878a6chMz+IciRC+UZgR3tzZTvJdkqeFP5uC4O/dD8M3EN6bK5KfI/lOeHdzOsmDw/pLSf6jWdwyko80K68hOS6TNprZJjO7DcAbewi5BsCfzexfZlZvZlvNbEWmj0G+mFk9gPsBDCU5EABI9iZ5N8kNJNcxGNpQHD620wDsGz7WU8L4Y8K7xuUk5zZ/Exc+3jeSfAXAbgCjSI4hOY3kNpJLmt/5ZvAp3Z9I/jO8iTeL5AHNfv7hZsduarpRQrKI5CQGn5ZsJfkwyX7pfv9Ed3w7whPLzH5iZovNrNHMZgH4L4CMPr4I29IJwB8A/G+mx0j76iB5u8TMKptVNQI4MFVsivZ/CsBwAFeZ2Q4zqzOztzI5VtpPR8jb8HzHATgEwL2Z/ebSCkcDWILgDuWvANxNkuGnOvcD+FX4BuI/zQ8ieRCABwFcAWAggGcA/INkKYCXAHws7DTtC6AU4d9MkqMA9AAwL0ftPyY87/ywQ3lfJh2zZgaFHb13Sd5KsnsuGhU+Dl8BsBXA9rB6CoB6BK/DRwD4FICvh4/tafjg7vMlJIcC+CeAGwD0A/ADAI81daJDFyH4FKcngM0IOs8PILhRcS6A2xjcEW9yLoDrAfQFsBzAjWFbewL4D4I3pPuG7Xs+POZ/AXwewMfDn20H8Kd0v3+iO76huD+xmrepK4CPAHinBYd9D8DLZpbz9khexT5vw3fquwCsBdAdwYtiJo5B8LtPDd/lv0Hy47lql+RVrPOWZDGAPwL4DoBs7kwfwWCC0FKS14Y3HmTPVpvZXWbWAGAqgCEABmdw3JcB/NPMpplZHYJPhLoCOM7MVgKoADAOwAkAngOwnuQYBB2o/5pZY47aPwxBB/CLAEaHbfhDhscuDts4BMAnAYwH8JtWtudLJMsBVAH4BoCzzaye5GAApwO4wswqwyENtyLojKZyIYBnzOyZ8KbbNACzw3M0mWJm74R3l08FsMrM7g3vfL8F4DEA5zSLf8LMXm92N7rpzepnAGw0s8lmVm1mFeFNPiAYivljM1trZjUAfgrg7HTPK3V84//Eau4OAHPD66VFcjiAywBcl4e2SH7FPm/N7GYEdwOOBPBXADsyPHQYgrsRLwLYB8BkAE+SHJCrtknexD1vLwcwy8xaMk6zycsI7hQPQtAROg/AVTlqV0f1/goCZrY7/LZHBsftC2B1s2MbAawBMDSsegnAiQjy5SUA0xHkysfDcq5UAbjXzJaa2S4EY7hPT3NMU5s3mtnCsGP5LoAfIv0QnHQeNrM+CJ5zCxB0poFgmFEJgA3hJyrlAP6MIFdTGQHgnKbYMP54BM/nJmsi8UdH4i9A8PrdpPlqEbvxwf/zcAB7Gh4yAsATzc65CEAD0rym6N1m5IlFEsjyiUUy1RPrwPD7cgRPqmOR2ycWAIDkrxG8qH6iBWPkfgvgZ2aWaYdDCkeHyNswV98i+WkEH3N9P4PDqhDcPbg7LD9E8scAPgrgyVy3UXIqtnkb3k2+HB90Flok7KA3mU/yZwg6vr/IQfPEtR7AoU0FBok2HMC6sOolBHNj9kfQGW3qiB2L4I5+rsyD+8lAa8avG3J0s9LMtpCcCGA2yQcQdFJrAAwI77imswbAX83sG3u7TCT+JTM7JYvmrsGe7zyvAfBVM3ulJSfUHd/srUfwbgPAHp9YJwL4WPj9S8jPO0qQvB7BGJxPmdnOFhx6EoBfk9zID9bme5Xk+blsnxSUgsnbiE7IfIJl9I8JUpSlYymEvD0KwR2theHr5e8AHBW+fhZncT4DwBy1TVwPAziD5EkkSxAsxVUDYGb485cAfAJAVzNbi2BuzKkA+gNo0XwBkl0AdA6LncNyk3sBXEpyFMluACYBeDrD836C5AgGhgO4GWne2DNYReWSTM5vZksQfDryQzPbAODfACaT7BUOGzpgL0PI7gPwWZKfZjABrguD5deG7SH+aQAHkbyIZEn49RGG4/TTeBrAEJJXkOxMsifJo8Of3QHgRpIjwt9/IMkz051QHd/sFcQTi+SPAJwP4GQz29rC3+EgBMurjMMH42k+C+CJFp5H4qPd8zZ8Ub2MZN/wRf0oAN/GBxMW0nkCQF+SF4cvumcjGP7Qonf9EivtnrcA/gVgJD54vbwuPPe4cOhGuvOeFo6lRDgM41roE4q8CDt1FyIYT7sFwd+1z5pZbfjzpQB2IcgThDeMVgJ4JZP/y4iq8FxAMC63qlk77gHwFwCzEHxiUYPgU4NMHIEgvyvDf+fv7dhwvHt/AK+1oO2/BjCR5CAEk91KASxEMEnsUbhDF95nZmsAnAngagQT19Yg+PQiZZ/SzCoQDE87F8Gb2I0IVkbpnCo+xbGnIPg/3AhgGYLnOhC8+XwKwL9JViD43Y9OdZ7mNNQhS2a2hGTTE2sogLcReWIxmLjz/hOL5EoAm7N8YjVZHP7bdKfgJgC1AJaHHxsCwE1mlnY9SIusyRcev8XMqlIfIXFXQHn7BQQf8ZYieCH8AzKc9GFm20h+DsBtCGbwLgZwppltaWH7JCYKIW/DyTPvD9UguQNAnZllupPVSQCmkOwBYBOCu2Zat7cZMxvZ7PspCFYaaP5zNvv+ksjPfhopP4G93MQxsyGR8oQ0zWsE0D8cS/plM3su2qY9XOcnAH6S5typjvsN9jKZjeQ0BBN9Xw+rjgLwtJktThUffXzCulkIJhY3+Vb4FY2bjuDmQvTYlHeEzezEFHVLAJyxh/hL9nY9M1uA4PkTPa4RwWPUokl/zHw4qOQbyaaJGTVo9sRqx/a8/8QyMy/pRICCzNu7EcwWLjOzjJZIk+QpwLxdgqBT/7CZfbU92yLSkanjKyIiIiKJoDG+IiIiIpII6viKiIiISCKo4ysiIiIiidCmqzqQ1IBiyVq62bP5oryV1lDeShwpbyWmtpjZwL0FtMNyZtms8y3S0hWJck15K9lQ3kocKW8lrhpWp4vQUAcRERERSQR1fEVEREQkEdTxFREREZFEUMdXRERERBJBHV8RERERSQR1fEVEREQkEdTxFREREZFEUMdXRERERBJBHV8RERERSQR1fEVEREQkEdTxFREREZFEUMdXRERERBJBHV8RERERSQR1fEVEREQkEdJ2fEl2Ifk6ybkk3yF5fVg/heS7JN8Ov8blv7kimVHeShwpbyWOlLcSJ50yiKkB8Ekz20WyBMAMkv8Kf3aVmT2av+aJZE15K3GkvJU4Ut5KbKTt+JqZAdgVFkvCL8tno0RaS3krcaS8lThS3kqcZDTGl2QxybcBlAGYZmazwh/dSHIeyVtJds5bK0WyoLyVOFLeShwpbyUuMur4mlmDmY0DMAzAUSQPAfAjAGMAfARAPwD/l+pYkhNJziY5O0dtFsmI8lbiSHkrcaS8lbhg8AlFCw4grwOw28xuaVZ3IoAfmNln0hxrQHE27ZTEa4CZMdujlbfSPpS3EkfKW4mrhjlmNmFvEZms6jCQZJ/w+64ATgGwmOSQsI4APg9gQesbLJIbyluJI+WtxJHyVuIkk1UdhgCYSrIYQUf5YTN7muQLJAcCIIC3AXwzj+0UaSnlrcSR8lbiSHkrsdHioQ6tupg+wpCste6jt9ZQ3kr2lLcSR8pbiascDHUQEREREekI1PEVERERkURQx1dEREREEkEdXxERERFJBHV8RURERCQR1PEVERERkURQx1dEREREEkEdXxERERFJBHV8RURERCQR1PEVERERkURQx1dEREREEqFTezdARPKvtGSQV7dP93FOuRENXszO2rVOuWL3Ci/GUN/K1om0BjOIsby3QiT3ijOI8V+3Ze90x1dEREREEkEdXxERERFJhLQdX5JdSL5Oci7Jd0heH9bvT3IWyeUk/0ayNP/NFcmM8lbiSHkrcaXclbig2d7HPpEkgO5mtotkCYAZAL4L4PsAHjezh0jeAWCumd2e5lyW2ZiVQuKOHysq6poixn3/YI3VXoTGQbZWA8wsk8F8AJKVt52K+3h1Z/b5llP+n4PqvJijD3fH7zbW+Q9v2bqeTvmFdf5Y4TvXbHLK8yqf9GJq68q8umRQ3rZGqj7S8N4nOuXDeYQXU9vojnt8t2iVF7Nq18vuMYnN0VRalrdA7nK3I+RtJrp2HubVHdLlDKc8psuAtOdZXL3Fq1tQ/U+nXFWz1ovpuBrmmNmEvUWkveNrgV1hsST8MgCfBPBoWD8VwOdb0VKRnFLeShwpbyWulLsSFxmN8SVZTPJtAGUApgFYAaDczJpuY64FMHQPx04kOZvk7Fw0WCRTyluJI+WtxFW2uau8lbaUUcfXzBrMbByAYQCOAjAm0wuY2Z1mNiHdrWeRXFPeShwpbyWuss1d5a20pRat6mBm5QBeBHAsgD4km9YBHgZgXY7bJpITyluJI+WtxJVyVwpZ2g0sSA4EUGdm5SS7AjgFwC8RJPXZAB4CcDEAf0ZLzKQabH5R/0ud8iWjKryY6gZ3IP7s7d29mIc3bnDKc3b81Ysx8yfFSXY6St4yxVP0mN6XOeX7jqv1Ykac5k44Yz8/J9l3/7TX77Gj0imPwk4v5tKVbt7+958XeTHfXeROHJpf7ue/dJy8zUSqiWuj+pzmlK/b7xAv5qxj3E1Uun/anzhsu93nRN38Ei9m3qvnOeXfLurhxfyj8mGnXLF7uRejzTECScpdnzsPsHuXkV7EmT3Pd8pXjvVfSw85fqtTLjmqd9or173u90kWzPiCU568sJcX82TFA065snpVirN3zNzOZOe2IQCmkixGcIf4YTN7muRCAA+RvAHAWwDuzmM7RVpKeStxpLyVuFLuSiyk7fia2TwA3noxZrYSwRgekYKjvJU4Ut5KXCl3JS60c5uIiIiIJELaDSxyerF2XJia7OLVfbLX/zjlBz+12YsZ8O3RTtkG9U9/rYpKr65x1mKnPPMhf9OByxeWO+W5O+7zYsz88ZzJ0PIF1XOlLfM2OqZ3fJ9LvZiXLnTHdHX52tH+eda34WL8VTVuubM/drP84fec8hlP9fViXtt5l1PuGLmejLzNRHSjlatGXO7FXH+RO3630/GjcnNxprjHY41u8T3/9f/NqW4uXzB/vRezdPujXl38KW9bYmCvjzjl+w4+0Ys56cJtTrlo5MB8NsnRuMrP7efv6+eUL1w03YvZvPONfDUpj3KwgYWIiIiISEegjq+IiIiIJII6viIiIiKSCOr4ioiIiEgidODJbe64/IsGX+1FTP2dOwnNDhvtxbSluqkznPLJd/iD32fs+FOkpiGPLSokyZhsMabvl5zynPP896adf32hU+aaNV6MPfu6G9PVX8DfU+r/juycyXGRVRFTTG6Lapjvb9506K/dSXKLtz/sxcRPMvI2qrRkkFd33f7fdMpX37TLi7Ejxjplzlvin3zfPE0KSjEpOap86jKv7uR/dHPKb5VP8WIM/iYbhS2ZeZua+zAM6/NJL+LZ8R9yymOv8DeM8PTs5lVZT3+joWx4E+wrdqc9ZuFv/Q01Tp3jPv/Wlr+Q4shC2+RCk9tERERERACo4ysiIiIiCaGOr4iIiIgkQtoti+Mguug/AHy893ec8r1X+WMK7eBx7nnWbEh7Ldu8I32DjhyTPiaFkouPd8rTB/qLR5/x8+855ed23JriTEkZ9xtvqTZV+eWB+zvlzr/+mH9g+XanWHPHS15Ibbn7nrakW5UXU7qfOxa3sdIfh1gVGT7c4zB//G7RPpHxbLUpxjNGxrMVHzrUC7npALf8xTn+42NW7Z9bCoA7JvP8/hO9iKtvcDdesSM+nP60dSlyqcYdC26L/DHuURx3YPprZaDPVw7w6p7e5W7OMuY5P2bn7hRjlSUWiot7OuXJo/zdl8f+IDIcur7Ri4m+BqYaz8v17kYTtS+vTtu+0hNGeHUWGQefcrB2ZNzv2B/4m2pN/rH7u54/1++TNDT4Y4MLne74ioiIiEgiqOMrIiIiIomQtuNLcjjJF0kuJPkOye+G9T8luY7k2+HX6flvrkhmlLcSR8pbiSPlrcRJJmN86wFcaWZvkuwJYA7JaeHPbjWzW/LXPJGsKW8ljpS3EkfKW4mNtB1fM9sAYEP4fQXJRQD8mSntqLRkgFd3+1HuJBieMs6LwdzlTnHNw/4EoB49a7y6tP75qlfV54y+bsWHR/nHRRb+5+kf8ULufcXdmGDk0/29mNq6sgwa2bEVZt66UwwO7vMFL+KM6ZHJbJX+ovprJ053yiu2DfNiahrcD3OO+dBaL6bLvu6ktOLoRhQAOu3rXn/hI/6GFgP7lTvlHgNqvZhuJ0Q2NEixePvnr65zysdd+nUv5pUdt0dqOtZEzsLM2/S6d9nPKf/prOVejI0/2Slz+SovZtu9bt3Onf4Ex4HD3UnI3a4+1Yvh2wud8qZfvuPFdO7qTpzrfbyfkxy9b6TC/5B08HXu35YzZ/rPx/t2/9Ipx29Di72La976/GlgH+p1hlM+59pU/3fu66KVlXsRFY+5kyDXvOdPJjvw8G1OufMXD91TQ99X89h8r275XHfC2fD9/Pb0/Jj7+s99+3kx0d/1+q+e4cUs3P5QpKbQNrTwtWiML8mRAI4AMCus+g7JeSTvIdl3jweKtCPlrcSR8lbiSHkrhS7jji/JHgAeA3CFme0EcDuAAwCMQ/BOb/IejptIcjbJ2Tlor0iLKG8ljpS3EkfKW4mDjDq+JEsQJPP9ZvY4AJjZJjNrMLNGAHcB8Be3C+LuNLMJ6fZOFsk15a3EkfJW4kh5K3GRdowvSQK4G8AiM/tNs/oh4bgeAPgCgAX5aWLKVjmlI7t90Ys46JbRbsXby7yYX9zojo9dt9sfm/KDQzc65f0+6i+gXzTcHStTv3ibF/OfP7hj1TbXbPZivnDcSqfc5Tv+5gX7THIXfT9t+hAv5qny3zhlM3/MZUdXmHnrvs88s+9oL8I6u3lSMfFBL+bORe4C+Wsr/cXSx/d3nyMnDfNzu+bNLU65emv698H9evkbWPz8NXcB9eMH+uNuj1rt5vvI8/w280B3POXZQ/0x969WdHbKjY27vZg4K8y8dZF+DpzT5wKn3OXKkf5xs+Y55ccm+wv4P7/R3cBldC8vBOcUu5sRdXnwBT+o0c33fh/2c/L559yxuLsX+/l/2AB3PPGBl/rjgNHfHav5u5NXeSHP/uMIp7x5p78RQJzFIW8zUVoy0Ku7ZqSbk/CHnaPu5Xed8l1P+RumLCh3z31Uf/81cGiZu0EW/5H+4aoqK/bq3tjijij50xJ/LtAhkRT8xuf8cfklJ7i/u/dYALhkl/t7xWGOUSarOnwUwEUA5pN8O6y7GsB5JMchGMm8CsBleWmhSHaUtxJHyluJI+WtxEYmqzrMQOod757JfXNEckN5K3GkvJU4Ut5KnGjnNhERERFJBHV8RURERCQRMhnjW3CKiro65UkH9fCDIguNz7rLX3j/trLpTrlriiUGr2jYxylvet1/yLoscAekz37XX8D890vcT4Fm1j/lxfxn4+ed8m8qXvFi+nzHXSz9mkP9yT3TZrkT3nbXrPZipD24kxm+P+FdL4KVRzrlV5b6ufTstvVOeUn1815M5+ILnfI7r/qbvBx6urvI+YYl/qSliTN7uufB617Mxh1TnPL95Yd4MddUu5t1fP2FFV5Mr8jkttOH+ZMkrlzsVUkbKy7yJ3hdM879v7Leh3sxy6e4mwFdu3KjF7Omyp1xM2D3h7yYynp3YYBJ4/1cWjDdXYx/xmZ/s4CtNe5r8vXLf+bFnNrnKqd8XWWdF3PM5e7GBL1/4C9McOjT7gYuLyDVql2Fv/B/R9e32wFe3bnXRjax6u1PFFsw0319/fO6VV7M/PK/ujHr/VlyT6/9nlO+cqw/mT5q8kL/PE9sd1eNM/PPc2jlRU752Jn+34gjPuv2rc69dqsX871L3cds047Cn9ymO74iIiIikgjq+IqIiIhIIqjjKyIiIiKJENMxvu6YlpPG+2NYucUdB/zm9p5ezMad7jir7l2GejGvbXLHK372MH9cZkkXd2zW5Uv9mKXlj3p1UTNLxjjlJ+f549suLnfHZY6/eR8vpudp7lhJjfEtDJ06uWPI+3/eH1PeWOVu2rBklz/u9t16d5xtZbWfb8/snuGU7zgvxWYZ57rjbkeUPunFPP+v33h16fQv8cfJFUcWOtq51R+X1qvYfTkadYI/fr34BXd8aUfbwCIOGlNsiDPqh+5rDpb5425fWO8udF9hS72YaC7vrtngxRw40h0HX3z+CV5Mr9fmOOWrVz7gxeyq8tsYNadxulN+q/xUL2bCQnfjoeLR+3kxfTtF813jeeOi8Th3zHbR/IVezKYqt79RzXVeTFSqcbfzbYlTPmbq6WnPM3+Cv2JcqnNHVbPSKW+q8jfDQqX79yj6WARmpr1WodEdXxERERFJBHV8RURERCQR1PEVERERkURQx1dEREREEiGWk9u6lroLSHe78NC0xxzca5dXZ1bvlCt2L/NizjrGnQDR/XR/4kLNy2uc8tLt6Sey9enhL/J/Xv+xTvnsY/zJH+h5mFsu9v8Ld1RpMlsh6tXVzR077CAvhpHJbR8fuMOLeWK9O5lnJv1dHdaVv+hWdPfzrWjay065bmuNFzO497FOedOOV72YE3tf4ZTPGepPJD3rIHeR/0E3H+fFNPZzNx2ovP1tLyb63K+r3+LFSH717/Fhr872918Xo0Z02+aUu6XYMMg7b4pJOptqit2Kaj9vR33XXYy/yyu9vZjoX4SRff2JRKd2G++UTxjkL+DfaYw7aa9xiD/h+NhB7u/++DZ/0qqlmDQo+ebm0nh+LP0h3bt6VT06uRPFxnc62Iup7etOjFy9/VkvZnv9Krei3H/9T3tMCiP6+pMyo23s0anKi0F3f+MX7zyRx+yZFJscAQ1pz9OWdMdXRERERBIhbceX5HCSL5JcSPIdkt8N6/uRnEZyWfhv+rfvIm1EeStxpLyVOFLeSpxkcse3HsCVZjYWwDEAvk1yLIBJAJ43s9EAng/LIoVCeStxpLyVOFLeSmykHeNrZhsAbAi/ryC5CMBQAGcCODEMmwpgOoD/y30T6dUcUBoZh1Ppj02xte7Yv8OGV3oxQxYd45TXl7/sxZT2c69vo0d4MX//afqh0v16jnPKk4Z+zov5/jfdscJFE/yxy9YnMlatk3/t4d3d32tZ7RMpWtSxF1Bv/7z19Sge5JS5Zr0X07h8k1MePqjOizlvmJuDS9cc7sVs3vmGU979UvqxsLdO9ze52LTDX/g/qijyHB3SxW9z5+5uXeOjM7wYXvwpp7xs5QAvpqKDj18vxLyNvgbvUzRmD3HNjljnbzxx8mnuov7f3z3Wi4lul7Js++NezEsb3Vz61v3+uPOyhe44zC0Vb+6pqe/7TI/xXt1lo90xvWO/XO/FYP+Rac8d3cCF7FhjfAszb9Mj3TG+Q7r6/y+e98q8qo8c675un1vr9xNqVx7hlFfDH+Pr5ensVBtGpDkmhfE8wqs7d4Q77vYjx/rPWbzX6JZH7e+FRB8z7ij2YsxiPMaX5EgARwCYBWBwmOwAsBHA4Jy2TCRHlLcSR8pbiSPlrRS6jFd1INkDwGMArjCzneQHb2HNzEimvIVIciKAia1tqEg2lLcSR8pbiSPlrcRBRnd8SZYgSOb7zazps6dNJIeEPx8CwL//D8DM7jSzCWaW/p69SA4pbyWOlLcSR8pbiYtMVnUggLsBLDKz5kOwngJwcfj9xQCezH3zRLKjvJU4Ut5KHClvJU4yGerwUQAXAZhPsmlF+asB3AzgYZJfA7AawJfy00S/b/6hTu4C4XXTV3gxkx5wJ+oc3KvRi2mw5WmvXl/hfjJT/J85Xsx5b92T9jy7qt2JTEt2+O15ZOoQp7z1Ln/x9s+MdAeyD/+M//hsrotufNGxJ7LtQTvnra+81p2YZe+N9GIevNvN7Te3+xMFtlS7EwW27Hwr7bU3r+vu1Y34/VFO+Wf3/DDteVJ5ceftTvmtxf7GHINXuBOiPjfjQC/mxqJpTvm+VSO9GDN/s4IOpuDyNvr60UB/ghffdTcoefmanV7Mpmp3k4vdDf7E5bLaRWlbc0R/dzLNyjn+IvuPrh7o1aXzVMUsr67zCnei8OBb/eOOH+C+th/zU38i9Wtl7nO2sYFjeOgAABPOSURBVNHfUCnmCjBv0zNzJ0qWVfsTc4tmua+v99/sv5aurHT7G2sr/b+5/65KP1E46sZb/M1QsvHvqoe9uv7rz3fKc5/yJzePet7N2wu6+n9ryqojCwCY/xgWmkxWdZiBVEsrBE7KbXNEckN5K3GkvJU4Ut5KnGjnNhERERFJBHV8RURERCQRMl7OrP34Y2Hfq9vhlOf8118a8NbVP3PKPbv541cqdi9Le/UZbwx3yj3eTrGAeQZq69zJrHdvuMGLmVrmjlUr7dTbi+lXeoFTnvB3f2OCnbtXZdFCybeKqned8q7XjvRi5u9wx3T9dvVNXoyh5Tk4dPxur65xv5FOub6hvMXnBQAzdyz69l3zvJjKko1O+dAR/vNx2uPu737PlgdTXa3lDZScWrrzX15d/UvuPZS/vTfKi7ln011OuaZuoxeTiS+NdF9LD/zX2V7M3QNvafF53yv/t1c3OVJXXNzLi7m86gqnPGaq/3dlWs3CFrdH2oL7evJawwteRNW0A5zyU2v83H50283uWXO0GcmPLn43bcx116Q/z64qfx7UXVU/d8qpNlU5u98PnPJZ097zYl5riJ678F+jdcdXRERERBJBHV8RERERSQR1fEVEREQkEWIwxtcfL1JDdy3PZRX+Oo5RmYznLS0Z5NV99Ig1TrnzH7/uH9gpxeKOWahvcMcu79NzvBdTWuSOef7FXL/NjY1VOWmP5FZRURenvOa9vl7M6UPc9T1/9W52Y8q9a1/zFb/S3Fw6pfeVXsi0HZNbfK1UY8W6d3bH7z6/0V/56KFt9znl6tr1Xoy0P0sx72LFzJ5OeYw/FBY1a7Mb0xu1qbKbU/ZXhAaYp3s6qc57aG93rdOb/uu3aFvF3/LSHsmt7ZV+P+HR/37KKV+wf4MX88jW3IzpjeL3vpw+6Jq/5uRaqcYlX7C/+1x/9L8HeDHbK5/NyfXbku74ioiIiEgiqOMrIiIiIomgjq+IiIiIJII6viIiIiKSCDGY3OYrimwJ3rvEH2ye1XnpPxzRyWys3OXF5EpxsTtBpC/29WKuWPGGU95YMSfFmXLzeEhuNTRUOOVfzPcnt31phDuZrW+Pw7yYVBtEpFP85HN+ZSf3fe+ksf6Es2mvtvhSYIrnUbTNU3a9k+JIf9KUFJ7GBn8zlL+scCfZnjzYj+nUqZ9Trq/fltX1+3dxN0xBo583r500wCnv82hWl0JRkTuRrnOJ/5z922p3svW0ittSnEmvyXGQahOfS+a5E3y/PewqL6ZPj0OccnnK17f0GztE861o3oIWHwMAjY3+88/nvt736fFhL+I/m0qc8p/W/tqLiW5gFAe64ysiIiIiiaCOr4iIiIgkQtqOL8l7SJaRXNCs7qck15F8O/w6Pb/NFGkZ5a3ElXJX4kh5K3GRyRjfKQD+COAvkfpbzeyWnLcoA7vobvSwu2GgFxMdG5nJuMgilqSN4er30sbkypr6t7w6M3esWHTTC3nfFBRY3kbHeN1fdpMXcX+ZG9Oz2+gU5ymOlNOPH7Qqf3Fy2+mOzXp169C058lEZuPLNOZxL6ag4HL3AwZ/U5WbV7q5vK5ykhczoPtYp7xxR6oB5OnzYsT+251y8fPTvZjufevSnicTZu7vurtmgxfzXHV0A6PE5vYUFHDeZsvMzaU/rvFft7t1HpaTa5V2imzG9W76TXy8YwBU12byGuyqravw6lL9rh1B2ju+ZvYygOxmIYi0E+WtxJVyV+JIeStx0Zoxvt8hOS/8eMOf6hoiOZHkbJKzW3EtkVxR3kpcpc1d5a0UIOWtFJRsO763AzgAwDgAGwBM3lOgmd1pZhPMbEKW1xLJFeWtxFVGuau8lQKjvJWCk1XH18w2mVmDmTUCuAvAUbltlkjuKW8lrpS7EkfKWylEWW1gQXKImTWN8v8CgPSrLOfQ8p3/dspvl4/xYsYUf8wpv4r5Kc7kTiSqb6zyIrhls1su25phK1suusHBzt0rvRhrjE5SSr8otgTaO2+zkWrCQTaTZ5bf709I6t3LnbQxo8zPfykMhZ67FsnJv1c84sXsrt3s1WWjvtq9X2Pr/WGli5YM8uqyYea+3pKlOTlvUhR63mYm/ettVW100mN2f5erayOT2Qb2bvkxGXPb6P8OQEedqJm240vyQQAnAhhAci2AnwA4keQ4BI/cKgCX5bGNIi2mvJW4Uu5KHClvJS7SdnzN7LwU1XfnoS0iOaO8lbhS7kocKW8lLrRzm4iIiIgkQlZjfNtbfUO5U/79uv/nxfTrdqBTZorNKaLjt2rryryYouXuONv6mSsybmfLuWNuMtsIQOIr/TiwmrqNObnSkOE7vbquf/6aU9444IGcXEuSyM3lnbuXpIhp+cYrqWze3MMp8yU/t59Ye6BXlwvRvxkiQO7yok+PQ5zy45PSb8QSPQYAyne1fCh1knJbd3xFREREJBHU8RURERGRRFDHV0REREQSQR1fEREREUmEWE5ui0q1gPOGWneimsFfwD8Ty372nlN+c/N+XkxJpwFOua5+S1bXEsmXbr88y6uLTq1789HhXkzRyXlqkCRQbhbDX1fhTm4b9cw5XkzZ8Ok5uZZIWzqs+CSnfNZV1WmP+f1lJ3l1L8dxn5A2pDu+IiIiIpII6viKiIiISCKo4ysiIiIiidAhxvimku2Y3qgD/3ikUx69fYcXc/7R5V6dSCEpWrDIq7N+fZxy49iD2qo5Iln72Jmb08bcseZEp3x3pxvy1BqR3GmMzLxoOPuz6Y+57Kl8NafD0h1fEREREUkEdXxFREREJBHSdnxJ3kOyjOSCZnX9SE4juSz8t29+mynScspdiSPlrcSR8lbiIpM7vlMAnBqpmwTgeTMbDeD5sCxSaKZAuSvxMwXKW4mfKVDeSgykndxmZi+THBmpPhPAieH3UwFMB/B/OWxXwWgcdYBT5k5/cluuJtJJbiU9d5uz98q8Oq53N1qxjW+2VXNkL5S3e8dS934NV6/yYmzAAK9O8kt523pH93EnHBctX9biYwBght9NkWayHeM72Mw2hN9vBDA4R+0RyTflrsSR8lbiSHkrBafVy5mZmZGM7n76PpITAUxs7XVEcm1vuau8lUKlvJU4Ut5Kocj2ju8mkkMAIPzX/xw1ZGZ3mtkEM5uQ5bVEcimj3FXeSoFR3kocKW+l4GR7x/cpABcDuDn898mctajAFC1d4pStXz8vpuH2bzjl4m/dldc2SaskJnebe+G2Ll7dcRPWOuXqrf7LweF9LnbKc8un5rZhkqlE5m0qdWuqnXLpq3O9GFbVtlVzZO+Uty1wWJ8Gp8yN6TdriR4DAFidqxZ1TJksZ/YggFcBfIjkWpJfQ5DEp5BcBuDksCxSUJS7EkfKW4kj5a3ERSarOpy3hx+dlOO2iOSUclfiSHkrcaS8lbjQzm0iIiIikgjq+IqIiIhIIrR6ObMOb/Yip8hxB3khSx7TwyiF5ZO9v+eUP/HscV6M9ejllEtTnOeNm6a4Mde1tmUirbNmoZu3I7ps8WJ2LHdfk78y+Bov5i+bbshtw0RaaZ8u7qTMDb9dl8ExA/PVnA5Ld3xFREREJBHU8RURERGRRFDHV0REREQSQYNTm+nWeYRXN/PPJU559JDZXsz8bUPz1iaRbPz8ULdcNO8dL8b69XUrSku8mNWvuRtfnD/wx17MA5tvbHkDRbI06sFPO2Xr1duLiWQ27rntAS/mL5fnslUirXfybfs45cbDP72HyGbHzPU3cMH4XLWoY9IdXxERERFJBHV8RURERCQR1PEVERERkURQx1dEREREEkGT25r5Ut+LvLpjHznYKdugwV7MOf94zikfdts3vZiDp93RytaJZK66odgpN85ekfaYmuXVXl3v3u5LRF2jta5hIi3wxw9f69UVvfCKU7bxh/gHNjY6xbLpDV7IBYPciZr3l2mSprSdbw71c7txmjtRrahnj7TniR6T6tx3rPt5C1vXsemOr4iIiIgkgjq+IiIiIpIIrRrqQHIVgAoADQDqzWxCLholkm/KXYkj5a3EkfJWCkkuxvh+wsy25OA87e7zw+q9uqLX3nTKjccc6R/YrbNTXLDNf1hP7/NDp/xM+a+yaKHkWIfJ3aiKOjcHd75V68V06euOgyzZx8/bmgo3psE0xrcAdNi8japLkW6NG3Y4ZT77qhdTv7bSKXfqVOzF1DYol9tYYvI2E6mmSzRsrXMr/j4z7Xm8Y/ZwbvmAhjqIiIiISCK0tuNrAP5Ncg7JiakCSE4kOZukv9evSPvZa+4qb6VAKW8ljpS3UjBaO9TheDNbR3IQgGkkF5vZy80DzOxOAHcCAEndgJdCsdfcVd5KgVLeShwpb6VgtOqOr5mtC/8tA/AEgKNy0SiRfFPuShwpbyWOlLdSSLK+40uyO4AiM6sIv/8UgJ/lrGXtYEedPwGiYfE6p1xcPcuL2fr37ZGaYV5MnfkLqEv76Ii5G7V0V6lT7rp0qBdTUuROXOvXpcaLuXdFP6c8pk+Ki21refuk5ZKQt1Gp7szsmOnmac+D/BuERd3d13IW+TG1kU0uJD+SmLeZKPW7G9i23H3dHtDdn3Cf7pg9nVs+0JqhDoMBPEGy6TwPmNmzOWmVSH4pdyWOlLcSR8pbKShZd3zNbCWAw3PYFpE2odyVOFLeShwpb6XQaDkzEREREUmEXGxg0WGU1/nvAyoWuWNze3WrSHue/qX+ZgEibemHi90hdDccdJ0XUx5J07rG7l7Mft3dsZFXLvp56xsnkqHqRnp1r63Y1ykPWlftxXQtccdGPvDuAC8mOl79yehUDZE8GtTFz+3Hl+7nlI/dVp72PK9u8SdepDq3fEB3fEVEREQkEdTxFREREZFEUMdXRERERBJBHV8RERERSQSatd3ugMFWhIW7svI1B/gTgD4xaLdTHt5rpxdT3+D+Tr9f5E+kWLHLPc+0HZOzaWKCNcDM2mXEfqHnrRQy5W2u3Tr2WqdcUec/vNG/al1TPAzRCaDSnPK2PURze2eK3I7qVeL34b63MMmTkBvmmNmEvUXojq+IiIiIJII6viIiIiKSCOr4ioiIiEgiaIxvGpMPdsfc9OjkP141kUXWZ2/xY/6y6YbcNixxNOZM4kh5K3GkvJW40hhfEREREREA6viKiIiISEK0quNL8lSSS0guJzkpV40SySflrcSVclfiSHkrhSTrji/JYgB/AnAagLEAziM5NlcNE8kH5a3ElXJX4kh5K4WmUyuOPQrAcjNbCQAkHwJwJoCFuWhYobhyUZIXgu6QEpG30iEpdyWOlLdSUFoz1GEogDXNymvDOpFCpryVuFLuShwpb6WgtOaOb0ZITgQwMd/XEckl5a3EkfJW4kh5K22pNR3fdQCGNysPC+scZnYngDuBpvX5RNqV8lbiKm3uKm+lAClvpaC0puP7BoDRJPdHkMTnAjg/zTFbgIbVAAYE38eK2px/e2vviBxdQ3lb+DpSm3OVt0DLc1d527Y6UpsLIW/31r5CFbf2Ah2vzWlzN+uOr5nVk/wOgOcQbLNyj5m9k+aYgQBAcna6nTUKjdqcf23RXuVt4VObU2tp7ipv25banFq2edtW7culuLUXSGabWzXG18yeAfBMa84h0taUtxJXyl2JI+WtFBLt3CYiIiIiidBeHd872+m6raE251+ht7fQ25eK2tw2CrnNhdy2PVGb20aht7nQ2xcVt/YCCWwzzTSBUkREREQ6Pg11EBEREZFEaPOOL8lTSS4huZzkpLa+fiZI3kOyjOSCZnX9SE4juSz8t297trE5ksNJvkhyIcl3SH43rC/kNnch+TrJuWGbrw/r9yc5K8yPv5Esbe+2AsrbfFDe5p/yNveUt/mnvM095W0zZtZmXwiWMlkBYBSAUgBzAYxtyzZk2M4TABwJYEGzul8BmBR+PwnAL9u7nc3aNgTAkeH3PQEsBTC2wNtMAD3C70sAzAJwDICHAZwb1t8B4FsF0FblbX7aq7zNb1uVt/lpr/I2v21V3uanvcrbpvO28S9xLIDnmpV/BOBH7f3g7qGtIyMJvQTAkGYJtKS927iXtj8J4JS4tBlANwBvAjgawaLUnVLlSzu2T3nbNm1X3ua2fcrbtmm78ja37VPetk3bE5u3bT3UYSiANc3Ka8O6OBhsZhvC7zcCGNyejdkTkiMBHIHgnVFBt5lkMcm3AZQBmIbgXX65mdWHIYWSH8rbPFPe5oXyNs+Ut3mhvM2zpOetJrdlwYK3GQW3HAbJHgAeA3CFme1s/rNCbLOZNZjZOAR7tx8FYEw7N6lDK8QcAJS3sneFmAOA8lb2rhBzAFDeAm3f8V0HYHiz8rCwLg42kRwCAOG/Ze3cHgfJEgTJfL+ZPR5WF3Sbm5hZOYAXEXxk0Ydk046ChZIfyts8Ud7mlfI2T5S3eaW8zRPlbaCtO75vABgdzsgrBXAugKfauA3ZegrAxeH3FyMYH1MQSBLA3QAWmdlvmv2okNs8kGSf8PuuCMYaLUKQ2GeHYYXSZuVtHihv8055mwfK27xT3uaB8raZdhigfDqC2YQrAPy4vQdM76GNDwLYAKAOwfiRrwHoD+B5AMsA/AdAv/ZuZ7P2Ho/g44l5AN4Ov04v8DYfBuCtsM0LAFwX1o8C8DqA5QAeAdC5vdsatkt5m/v2Km/z317lbe7bq7zNf3uVt7lvr/I2/NLObSIiIiKSCJrcJiIiIiKJoI6viIiIiCSCOr4iIiIikgjq+IqIiIhIIqjjKyIiIiKJoI6viIiIiCSCOr4iIiIikgjq+IqIiIhIIvx/PGtb5437pkwAAAAASUVORK5CYII=" }, "metadata": { "needs_background": "light", "tags": [] - }, - "output_type": "display_data" + } } ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 263 + }, + "id": "OINe99pf_trt", + "outputId": "a7c9ade3-3685-40e6-a5f1-97a5084deec9" + } + }, + { + "cell_type": "markdown", + "source": [ + "Naturally, the image on the right is the same (this is the reference), and the other three simulations now exhibit a shift towards the right. As the differences are a bit subtle, let's visualize the difference between the target configuration and the different final states.\n", + "\n", + "The following images contain the difference between the evolved simulated and target density. Hence, dark regions indicate where the target should be, but isn't. The top row shows the original states with the initial velocity being zero, while the bottom row shows the versions after the optimization has tuned the initial velocities. Hence, in each column you can compare before (top) and after (bottom): \n" + ], + "metadata": { + "id": "ootUIrQq_tru" + } + }, + { + "cell_type": "code", + "execution_count": 14, "source": [ "fig, axes = pylab.subplots(2, 3, figsize=(10, 6))\n", "for i in range(INFLOW.shape.get_size('inflow_loc')-1):\n", @@ -596,24 +573,44 @@ " axes[1,i].imshow(smoke.values.numpy('inflow_loc,y,x')[i,...] - smoke_final.values.numpy('inflow_loc,y,x')[3,...], origin='lower', cmap='magma')\n", " axes[1,i].set_title(f\"Result {INFLOW_LOCATION.numpy('inflow_loc,vector')[i]}\")\n", " pylab.colorbar(im,ax=axes[1,i])" - ] + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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" + }, + "metadata": { + "needs_background": "light", + "tags": [] + } + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 410 + }, + "id": "7lm9Rrel640-", + "outputId": "6ef7914a-8f63-49af-9a1a-fde1aed37682" + } }, { "cell_type": "markdown", - "metadata": { - "id": "cuGIjhGx_trw" - }, "source": [ "These difference images clearly show that the optimization managed to align the upper region of the plumes very well. Each original image (at the top) shows a clear misalignment in terms of a black halo, while the states after optimization largely overlap the target smoke configuration of the reference, and exhibit differences closer to zero for the front of each smoke cloud.\n", "\n", "Note that all three simulations need to \"work\" with a fixed inflow, hence they cannot simply \"produce\" marker density out of the blue to match the target. Also each simulation needs to take into account how the non-linear model equations change the state of the system over the course of 20 time steps. So the optimization goal is quite difficult, and it is not possible to exactly satisfy the constraints to match the reference simulation in this scenario. E.g., this is noticeable at the stems of the smoke plumes, which still show a black halo after the optimization. The optimization was not able to shift the inflow position, and hence needs to focus on aligning the upper regions of the plumes.\n" - ] + ], + "metadata": { + "id": "cuGIjhGx_trw" + } }, { "cell_type": "markdown", - "metadata": { - "id": "jHdQureE_trx" - }, "source": [ "## Conclusions\n", "\n", @@ -621,13 +618,13 @@ "complex PDEs. Above, we've optimized for a mini-batch of 20 steps of a full Navier-Stokes solver.\n", "\n", "This is a powerful basis to bring NNs into the picture. As you might have noticed, our degrees of freedom were still a regular grid, and we've jointly solved a single inverse problem. There were three cases to solve as a mini-batch, of course, but nonetheless the setup still represents a direct optimization. Thus, in line with the PINN example of {doc}`physicalloss-code` we've not really dealt with a _machine learning_ task here. However, that will be the topic of the next chapters.\n" - ] + ], + "metadata": { + "id": "jHdQureE_trx" + } }, { "cell_type": "markdown", - "metadata": { - "id": "ffaDxZ3x_try" - }, "source": [ "## Next steps\n", "\n", @@ -636,7 +633,10 @@ "- Modify the setup of the simulation to differ more strongly across the four instances, run longer, or use a finer spatial discretization (i.e. larger grid size). Note that this will make the optimization problem tougher, and hence might not converge directly with this simple setup.\n", "\n", "- As a larger change, add a multi-resolution optimization to handle cases with larger differences. I.e., first solve with a coarse discretization, and then uses this solution as an initial guess for a finer discretization. \n" - ] + ], + "metadata": { + "id": "ffaDxZ3x_try" + } } ], "metadata": { @@ -665,4 +665,4 @@ }, "nbformat": 4, "nbformat_minor": 1 -} +} \ No newline at end of file diff --git a/overview-ns-forw.ipynb b/overview-ns-forw.ipynb index 824d674..eedbe79 100644 --- a/overview-ns-forw.ipynb +++ b/overview-ns-forw.ipynb @@ -174,8 +174,7 @@ "source": [ "A lot has happened in this `step()` call: we've advected the smoke field, added an upwards force via a Boussinesq model, advected the velocity field, and finally made it divergence free via a pressure solve.\n", "\n", - "The Boussinesq model uses a multiplication by a tuple `(0, buoyancy_factor)` to turn the smoke field into a staggered, 2 component force field, sampled at the locations of the velocity components via the `>>` operator. \n", - "This operator makes sure the individual force components are correctly interpolated for the velocity components of the staggered velocity. `>>` could be rewritten via the sampling function `at()` as `(smoke*(0,buoyancy_factor)).at(velocity)`. However, `>>` also directly ensure the boundary conditions of the original grid are kept. Hence, it internally also does `StaggeredGrid(..., extrapolation.ZERO,...)` for the force grid. Long story short: the `>>` operator does the same thing, and typically produces shorter and more readable code.\n", + "The Boussinesq model uses a multiplication by a tuple `(0, buoyancy_factor)` to turn the smoke field into a staggered, 2 component force field, sampled at the locations of the velocity components via the `at()` function. This function makes sure the individual force components are correctly interpolated for the velocity components of the staggered velocity. Note that this also directly ensure the boundary conditions of the original grid are kept. It internally also does `StaggeredGrid(..., extrapolation.ZERO,...)` for the resulting force grid. \n", "\n", "The pressure projection step in `make_incompressible` is typically the computationally most expensive step in the sequence above. It solves a Poisson equation for the boundary conditions of the domain, and updates the velocity field with the gradient of the computed pressure.\n", "\n",