<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Michael G. Lerner</title>
<link>https://mglerner.com/blog/</link>
<atom:link href="https://mglerner.com/blog/index.xml" rel="self" type="application/rss+xml"/>
<description>Computational biophysicist — Smith College</description>
<generator>quarto-1.9.38</generator>
<lastBuildDate>Sat, 21 Mar 2020 00:12:03 GMT</lastBuildDate>
<item>
  <title>Social Distancing and Hospital Capacity for Coronavirus</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/</link>
  <description><![CDATA[ 




<section id="social-distancing-and-hospital-capacity-for-coronavirus" class="level1">
<h1>Social Distancing and Hospital Capacity for coronavirus</h1>
<p>There was a <strong>great</strong> Washington Post <a href="https://www.washingtonpost.com/graphics/2020/world/corona-simulator/">article</a> on social distancing. It comes with simulations to show you the effect of different measures, and I think it’s fantastic #SciCom. I want to talk it over with my kids, but I want to be ready for them to ask questions like “what if we did (some cool other idea) for social distancing?” I also <a href="https://twitter.com/mglerner/status/1239740748062511106">thought this would be useful for classes</a> like intro physics, data science, computational modeling, etc., especially if those classes can team up with humanities, arts, etc. So, I want to have some Python code to replicate it and play with.</p>
<p>I put the Python code on <a href="https://github.com/mglerner/covid">github</a> so that it’s easy to grab and play with. I like having notebooks as standalone things, so all of the relevant code from when I wrote this up is also at the end of the notebook. I tried to make the code basic enough that it’s easy to add different models yourself; please do so!</p>
<p>After poking at this, my main thought is that we’d be best off flattening the curve for as long as society can stand, <em>while pushing hard at capacity and cures</em>.</p>
<p>I’m no epidemiologist, but I think the results below make sense. The b</p>
<!-- TEASER_END -->
<div id="cell-2" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> HTML</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> imp</span></code></pre></div></div>
</div>
<div id="cell-3" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> covid <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> social_distancing</span>
<span id="cb2-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> covid.social_distancing <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Universe, getanim, draw_stacked_plot</span></code></pre></div></div>
</div>
<p>This is all based on a classic model called the SIR model, in which people can either be “succeptible” to getting the disease (S), “infected” (I), or “recovered” (R). Recovered people are considered immune from the disease</p>
<p>There are lots of modifications you can make to that model, and you can google for them.</p>
<p>Let’s start with a model like the one in the Washington Post article: a town of about 200 people that starts with one or two sick people. How long does it take for everyone to get infected? How long for everyone to recover?</p>
<p>Here’s a first pass at it. Each person is represented by a dot. The blue dots are healthy (S for “succeptible”) people. The red dots are sick people (I), and the green dots are recovered (R) people.</p>
<p>We’ll make one change from the Washington Post model right from the beginning: if you get sick, there’s a chance you’ll die. Figuring out that chance is tricky, but it seems like 2% is a good estimate. So the dots will turn dark blue when people die.</p>
<div id="cell-5" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">npeople, nsteps <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">400</span></span>
<span id="cb3-2">initial_infection_chance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span></span></code></pre></div></div>
</div>
<div id="cell-6" class="cell" data-execution_count="71">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>capture</span>
<span id="cb4-2">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople,</span>
<span id="cb4-3">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb4-4">            )</span>
<span id="cb4-5">u.run(nsteps)</span>
<span id="cb4-6">anim0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getanim(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<div id="cell-7" class="cell" data-execution_count="72">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1">u.data.i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],u.data.d[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="72">
<pre><code>(2.0, array([5., 5., 5., 5., 5., 5., 5., 5., 5., 5.]))</code></pre>
</div>
</div>
<div id="cell-8" class="cell" data-execution_count="73">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1">HTML(anim0.to_html5_video())</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="73">
<iframe src="embed-7-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>(In case it’s not obvious in your browser, that thing above is a movie. If you hover over it, you should have a button to play it. All of the plots that look like it below are also movies.)</p>
<p>You probably notice two things:</p>
<section id="basically-everyone-gets-infected." class="level3">
<h3 class="anchored" data-anchor-id="basically-everyone-gets-infected.">Basically everyone gets infected.</h3>
<p>That red shape is the curve people talk about when they say #FlattenTheCurve.</p>
</section>
<section id="it-doesnt-look-like-a-lot-of-people-died." class="level3">
<h3 class="anchored" data-anchor-id="it-doesnt-look-like-a-lot-of-people-died.">It doesn’t look like a lot of people died.</h3>
<p>You can barely see the dark blue bit showing up at the top of the plot. If you look at the dots, you might not even have noticed the five dots that turned dark blue and stopped moving. But those five dots represent 2.5% of the population. If we scale this model up to the US population of 330 million, 2.5% is 8.5 million people dead!</p>
<p>Luckily, this model probably doesn’t scale up perfectly to the whole US. But that’s a worst case scenario of “what if we did nothing” and it’s terrible.</p>
</section>
<section id="social-distancing" class="level2">
<h2 class="anchored" data-anchor-id="social-distancing">Social Distancing</h2>
<p>So what can we do? One idea is social distancing or social isolation. That’s the idea that you just stay at home and don’t interact with people. How much can that help? Let’s follow the Washington Post article and see what happens if 25% of people isolate.</p>
<div id="cell-11" class="cell" data-execution_count="80">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>capture</span>
<span id="cb8-2">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>,</span>
<span id="cb8-3">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb8-4">            )</span>
<span id="cb8-5">u.run(nsteps)</span>
<span id="cb8-6">anim25 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getanim(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<div id="cell-12" class="cell" data-execution_count="81">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">u.data.i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],u.data.d[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="81">
<pre><code>(1.0, array([5., 5., 5., 5., 5., 5., 5., 5., 5., 5.]))</code></pre>
</div>
</div>
<div id="cell-13" class="cell" data-execution_count="82">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1">HTML(anim25.to_html5_video())</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="82">
<iframe src="embed-12-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>That made almost no perceptible difference!</p>
<p>A bit about models like this: you should look at the general trends. Here, you can see that the shape of the red curve is about the same. The model uses a lot of randomness, so running it 100 times will give 100 different results. Looking for exact values of small numbers (e.g.&nbsp;the exact number of deaths) isn’t going to be as informative. For better estimates of that, you want to run this with a larger population, and you want to run it for longer. We’ll stick to qualitative results.</p>
<section id="what-if-50-of-people-distance" class="level3">
<h3 class="anchored" data-anchor-id="what-if-50-of-people-distance">What if 50% of people distance?</h3>
<div id="cell-15" class="cell" data-execution_count="83">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>capture</span>
<span id="cb12-2">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,</span>
<span id="cb12-3">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb12-4">            )</span>
<span id="cb12-5">u.run(nsteps)</span>
<span id="cb12-6">anim50 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getanim(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<div id="cell-16" class="cell" data-execution_count="84">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1">u.data.i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],u.data.d[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="84">
<pre><code>(4.0, array([5., 5., 5., 5., 5., 5., 5., 5., 5., 5.]))</code></pre>
</div>
</div>
<div id="cell-17" class="cell" data-execution_count="85">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1">HTML(anim50.to_html5_video())</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="85">
<iframe src="embed-16-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>Oof. Again, it’s about the same, though you can see some difference in that some people are not actually getting infected!</p>
</section>
<section id="what-if-75-of-people-distance" class="level3">
<h3 class="anchored" data-anchor-id="what-if-75-of-people-distance">What if 75% of people distance?</h3>
<p>This has got to be better, right?</p>
<div id="cell-19" class="cell" data-execution_count="101">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>capture</span>
<span id="cb16-2">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,</span>
<span id="cb16-3">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb16-4">            )</span>
<span id="cb16-5">u.run(nsteps)</span>
<span id="cb16-6">anim75 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getanim(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<div id="cell-20" class="cell" data-execution_count="102">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb17-1">u.data.i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],u.data.d[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="102">
<pre><code>(2.0, array([2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]))</code></pre>
</div>
</div>
<div id="cell-21" class="cell" data-execution_count="103">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb19-1">HTML(anim75.to_html5_video())</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="103">
<iframe src="embed-20-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>That’s definitely better, but not perfect. What if we had really extreme distancing?</p>
</section>
<section id="what-if-90-of-people-distance" class="level3">
<h3 class="anchored" data-anchor-id="what-if-90-of-people-distance">What if 90% of people distance?</h3>
<div id="cell-23" class="cell" data-execution_count="159">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>capture</span>
<span id="cb20-2">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb20-3">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb20-4">            )</span>
<span id="cb20-5">u.run(nsteps)</span>
<span id="cb20-6">anim <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getanim(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<div id="cell-24" class="cell" data-execution_count="160">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb21-1">u.data.i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],u.data.i[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:],u.data.d[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="160">
<pre><code>(2.0,
 array([15., 15., 15., 15., 14., 14., 14., 14., 14., 14.]),
 array([2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]))</code></pre>
</div>
</div>
<div id="cell-25" class="cell" data-execution_count="161">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb23-1">HTML(anim.to_html5_video())</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="161">
<video width="432" height="432" controls="" autoplay="">
  <source type="video/mp4" src="data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAIKGG1kYXQAAAKuBgX//6rcRem9
5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTU1IHIyOTE3IDBhODRkOTggLSBILjI2NC9NUEVHLTQg
QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE4IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv
eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9
MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm
PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6
b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r
YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj
ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh
bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl
aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MjUgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz
aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx
cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAB+lZYiE
AC///vau/MsrRwuVLh1Ze7NR8uhJcv2IMH1oAAADAADVaekIE7tkLHBWD/VpAk7/Dgu3Sn6qnWJQ
1gTpOF6arbJznJKc/wgeHFnk+oyQ9ND7ra7RJSHjQbEvAgb1jWDvH4+5bc4VJXy00Adh5QsrJVxd
MH4LuoVhiK3CjogRZ+15PS3VC3dZb2qNnnPbjOG9iH4EgIiQq85mV2Xt4J3wb1/vQ8ohEJHpJy94
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
ZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAABL3c3RibAAAALNzdHNkAAAAAAAAAAEAAACj
YXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAGwAbAASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAADFhdmNDAWQAHv/hABhnZAAerNlBsN6EAAADAAQA
AAMBkDxYtlgBAAZo6+PLIsAAAAAcdXVpZGtoQPJfJE/FujmlG88DI/MAAAAAAAAAGHN0dHMAAAAA
AAAAAQAAAZAAAAEAAAAAGHN0c3MAAAAAAAAAAgAAAAEAAAD7AAALiGN0dHMAAAAAAAABbwAAAAEA
AAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAA
AAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAABQAAAAABAAAC
AAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMA
AAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAA
AAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAA
AAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAA
AQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAAC
AAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEA
AAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAADAAAAAAEAAAEAAAAABAAA
AgAAAAABAAADAAAAAAEAAAEAAAAAAgAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAAC
AAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEA
AAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAA
AAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAA
AAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAA
AQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAE
AAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEA
AAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAA
BQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAF
AAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAAFAAAAAAEAAAIA
AAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAA
AAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAA
AAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAA
AQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAAB
AAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEA
AAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAA
AQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAF
AAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEA
AAAAAQAAAwAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAQAAAAAAgAAAQAA
AAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAA
AAEAAAMAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAA
AQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAB
AAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEA
AAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAQAAAAAAgAA
AQAAAAABAAADAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAAB
AAAAAAEAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEA
AAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAA
AAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAA
AAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAA
AQAAAQAAAAACAAACAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAAB
AAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEA
AAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAA
AwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAAB
AAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEA
AAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAA
AAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAA
AAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAA
AQAABAAAAAACAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAIAAAIAAAAAAQAABQAAAAAB
AAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEA
AAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAA
BQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAABQAAAAABAAAC
AAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIA
AAAAAQAAAAAAAAABAAABAAAAAAIAAAIAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAGQAAAAAQAABlRz
dHN6AAAAAAAAAAAAAAGQAAAiWwAAAmYAAADqAAAAqQAAAJcAAAHVAAAA4AAAAI8AAACaAAABQQAA
AKIAAAF3AAAAwAAAAJYAAAHrAAAA+AAAAKQAAACbAAABzAAAAMcAAACTAAAAkQAAAVgAAACIAAAB
vAAAAIsAAAGHAAAAkgAAAfEAAAEVAAAAnQAAAIgAAAEbAAABvQAAAO4AAACPAAAAnwAAAZAAAACS
AAABnwAAAIgAAAHTAAAA8wAAAJEAAACUAAABDAAAASwAAAB1AAABKwAAAXUAAACIAAABCQAAAOAA
AAG0AAAA3gAAAJEAAABrAAABvwAAANwAAACEAAAAcQAAAdgAAACvAAAAegAAANwAAADmAAABUgAA
AH0AAAESAAABAgAAANYAAAEmAAABhgAAAH8AAAFDAAABKgAAAVsAAACLAAACEwAAAP0AAAB3AAAA
qAAAAdAAAACJAAABDgAAAVcAAAB3AAABZQAAAOcAAAB/AAAAmAAAAWQAAAHaAAAApAAAAWwAAACH
AAAB5QAAAPIAAACMAAAAjAAAAR4AAAHNAAAA1QAAAIoAAAB2AAAA0gAAAOMAAAHKAAAAxwAAAJYA
AACbAAABAwAAAS4AAACBAAABdwAAAJoAAADjAAAA+AAAARAAAADvAAABrQAAAJ4AAAG9AAAAuQAA
AXoAAACnAAABWgAAAJUAAAESAAABOQAAAeMAAAECAAAAjgAAAKAAAAGoAAABBgAAAJcAAACfAAAB
fwAAAJQAAAFHAAABpgAAANkAAACSAAAAmAAAAZIAAADAAAAApAAAAYQAAAD2AAAAlgAAAKIAAAH4
AAAA/gAAALoAAACRAAACTwAAAQ8AAAChAAAAowAAAVsAAACxAAABiAAAAIgAAAG2AAAAvAAAAJIA
AAF8AAAAlQAAAfQAAADpAAAAmgAAAIwAAAHlAAAA9AAAAI4AAACUAAABNQAAAnIAAACfAAACPQAA
ARoAAACPAAAAkQAAAg0AAAD7AAAAoQAAAKMAAAGPAAAAugAAAeoAAAD6AAAAkQAAAKcAAAIJAAAB
AgAAAJYAAACcAAABdAAAAKQAAAIbAAABDAAAAJcAAACNAAABswAAAK0AAAG4AAAAugAAAKQAAAE5
AAAAigAAAPIAAAFZAAAAxgAAAJgAAAImAAAA3AAAAKAAAAHTAAAAqgAAAXgAAAK/AAAA+AAAALMA
AAC2AAACKQAAAMgAAAHpAAAA3gAAAJQAAAI5AAABFQAAAKAAAACjAAACAQAAAMwAAAIYAAABKgAA
AK0AAAC7AAABxgAAALIAAAIiAAABFgAAAJ8AAAC2AAACtgAAAS4AAADCAAAAqAAAKRoAAAHOAAAA
0QAAAlwAAAD7AAAA3QAAAaYAAADPAAABnAAAAWUAAAJ0AAABKwAAALIAAADNAAABggAAAjMAAAD8
AAAAugAAAksAAAEgAAAArAAAANQAAAFdAAACEQAAAKoAAAHJAAAAtQAAAWMAAAIlAAAA+wAAALAA
AACkAAABtQAAAL4AAAJZAAABIgAAAKsAAADAAAACuAAAAPUAAAC7AAAAqgAAAjAAAADKAAABNAAA
AUUAAAGzAAAAvAAAAYYAAAEuAAACTQAAAQoAAADlAAAAsgAAAkIAAAEZAAAAywAAAM4AAAJ9AAAB
DQAAAL8AAADKAAAB9QAAAPoAAACoAAABlAAAAKcAAAF4AAAAwwAAArUAAAEJAAAAvQAAALkAAAIf
AAAA2gAAAhUAAAD3AAAAyQAAAg0AAADCAAABjAAAAkMAAADsAAAAsQAAAZUAAAEfAAACUQAAAPUA
AAC0AAAAtQAAAioAAADoAAAAuAAAAUgAAAGyAAAApQAAAngAAAERAAAAuAAAAOwAAAIgAAAAugAA
AjoAAAECAAAArwAAAKMAAAFSAAAB+gAAAOAAAAC8AAABiQAAAeoAAACmAAABYwAAAQkAAAIjAAAA
/gAAALgAAADUAAACIAAAARsAAAC5AAAAswAAAUEAAAJ1AAABKQAAAMUAAADFAAABzQAAAL8AAAHD
AAABHgAAAKcAAAC0AAABzwAAAOYAAAC1AAACYgAAAScAAADLAAAAtgAAATAAAAFPAAAArgAAAcQA
AAEeAAAApQAAALUAAAFSAAAA0gAAABRzdGNvAAAAAAAAAAEAAAAsAAAAYnVkdGEAAABabWV0YQAA
AAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAtaWxzdAAAACWpdG9vAAAAHWRh
dGEAAAABAAAAAExhdmY1OC4yOS4xMDA=
">
  Your browser does not support the video tag.
</video>
</div>
</div>
<p>That flattens the curve for a lot longer, and gives people a lot longer to deal with things.</p>
<p>But we’re also clearly not done with the pandemic, as there are still infected people in the population. What if we run that for longer?</p>
<div id="cell-27" class="cell" data-execution_count="210">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb24" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb24-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>capture</span>
<span id="cb24-2">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb24-3">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb24-4">            )</span>
<span id="cb24-5">u.run(nsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb24-6">anim <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getanim(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<div id="cell-28" class="cell" data-execution_count="211">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb25" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb25-1">u.data.i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],u.data.i[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:],u.data.d[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="211">
<pre><code>(4.0,
 array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),
 array([4., 4., 4., 4., 4., 4., 4., 4., 4., 4.]))</code></pre>
</div>
</div>
<div id="cell-29" class="cell" data-execution_count="212">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb27" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb27-1">HTML(anim.to_html5_video())</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="212">
<iframe src="embed-28-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>So, if we could do an essentially perfect job of social distancing until the disease was eradicated, we win. That’s a tough sell, though, because I’m reading estimates that the time required for complete eradication could be much longer than 3-4 months. Like 12-18 months. And we haven’t even thought about hospital capacity.</p>
</section>
</section>
<section id="what-about-hospital-capacity" class="level2">
<h2 class="anchored" data-anchor-id="what-about-hospital-capacity">What about hospital capacity?</h2>
<p>What if we run out of hospital beds? In that case, obviously more people are going to die. The estimates of mortality rates when we have hospital capacity seem to range quite a bit, but 2% seems like a good estimate (I’m not linking to any sources here because things keep changing. Feel encouraged to download the code and re-run things yourself if you want a different estimate!).</p>
<p>The overall mortality rate <em>without</em> hospitals seems more like 5%. That’s not a factor of 10 or anything, but it’s quite a bit. And it becomes a bigger difference if hospitals get better at treating patients.</p>
<p><strong>What’s our capacity?</strong> Googling around, it looks like we have a hospital capacity of around 3 beds per 1000 people in the US.</p>
<p><strong>Bigger population:</strong> in order to see this, we’re going to want a bigger population! Both in terms of having a large enough population to see the capacity matter, and so differences of 1-2 people don’t make such a difference. That means things will take longer to compute. Drawing the awesome animation actually takes a long time, so <strong>I’m just going to show the charts you saw on top of those figures, pre-drawn, with no animations for the rest of this.</strong> Hopefully that makes sense at this point, since you’ve seen several animations.</p>
<p>So here’s the nobody-does-anything plot, original size. The dashed line at the bottom is the hospital capacity. In this case, here are the exact numbers: * with 3 beds per 1000 people, that’s 0.6 beds for our 200 people. * We expect 5% of sick people to need beds. That means that, out of 20 sick people, one of them is expected to need a bed. So, if we’re just talking about corona virus, we need one bed for every 20 sick people. One bed means we can handle 20 sick people. Two beds means we can handle 40 sick people. 0.6 beds means we can handle 20*0.6 = 12 sick people. So the dashed line in the chart below is at 12 people</p>
<div id="cell-31" class="cell" data-execution_count="214">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb28" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb28-1">npeople <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span></span>
<span id="cb28-2">initial_infection_chance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span></span></code></pre></div></div>
</div>
<div id="cell-32" class="cell" data-execution_count="215">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb29" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb29-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,</span>
<span id="cb29-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb29-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span>,</span>
<span id="cb29-4">            )</span>
<span id="cb29-5">u.run(nsteps)</span>
<span id="cb29-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>4.0% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-24-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p><strong>NOTE</strong> if you want to know the percentage of people who died in the above simulation, you can see it in text right below the <code>Python</code> code/right above the figure. This one says “4% of people died in the figure below”. You’ll see a similar bit of text on all of the next figures, but it’s kind of hard to see, and I’m not great at text formatting.</p>
<p>And now with 1000 people</p>
<div id="cell-34" class="cell" data-execution_count="216">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb31" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb31-1">npeople <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span></span>
<span id="cb31-2">initial_infection_chance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span></span></code></pre></div></div>
</div>
<div id="cell-35" class="cell" data-execution_count="217">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb32" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb32-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,</span>
<span id="cb32-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb32-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span>,</span>
<span id="cb32-4">            )</span>
<span id="cb32-5">u.run(nsteps)</span>
<span id="cb32-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>5.6% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-26-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>You can see the awful trend there: the number of deaths starts going up dramatically once everyone is sick and the hospitals are over capacity. This only becomes more pronounced when hospitals get better at treating people!</p>
<p>Let’s say we start a bit later, with 5% of the population infected. That’s probably not a terrible guess. Given our lack of testing, it could even be higher than that.</p>
<div id="cell-37" class="cell" data-execution_count="218">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb34" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb34-1">initial_infection_chance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span></span></code></pre></div></div>
</div>
<div id="cell-38" class="cell" data-execution_count="219">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb35" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb35-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,</span>
<span id="cb35-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb35-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span>,</span>
<span id="cb35-4">            )</span>
<span id="cb35-5">u.run(nsteps)</span>
<span id="cb35-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>5.0% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-28-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>That’s bad.</p>
<section id="does-distancing-help" class="level3">
<h3 class="anchored" data-anchor-id="does-distancing-help">Does distancing help?</h3>
<p>What if we have moderate social distance of 50%?</p>
<div id="cell-40" class="cell" data-execution_count="220">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb37" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb37-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,</span>
<span id="cb37-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb37-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span>,</span>
<span id="cb37-4">            )</span>
<span id="cb37-5">u.run(nsteps)</span>
<span id="cb37-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>4.1% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-29-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>And what if we have extreme distancing of 90%?</p>
<div id="cell-42" class="cell" data-execution_count="221">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb39" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb39-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb39-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb39-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span>,</span>
<span id="cb39-4">            )</span>
<span id="cb39-5">u.run(nsteps)</span>
<span id="cb39-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>3.5% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-30-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>And, just as a reminder, 5% of the US population is 16 <em>million</em> people. If pure social distancing saves 1%, that’s about 3 <em>million</em> people we would save. As a side note, I think the numbers from my simulations are higher than the ones I’m seeing because I’m modeling lots of worst-case scenarios.</p>
</section>
</section>
<section id="what-if-we-build-more-beds" class="level2">
<h2 class="anchored" data-anchor-id="what-if-we-build-more-beds">What if we build more beds</h2>
<p>We could certainly do something like mobilize the Army Corps of Engineers to build a bunch of hospitals. That’s what other countries did a <em>while</em> ago. What if we increased our hospital capacity by a factor of 5? I’m guessing that’s reasonable because we don’t need great multi-purpose hospitals. We need temporary stuff for one particular purpose. Maybe this includes the navy hospitals? Maybe it includes repurposed dorm rooms? I’m hoping. But I’m not a civil engineer; I could be wrong here.</p>
<div id="cell-44" class="cell" data-execution_count="222">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb41" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb41-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb41-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb41-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,</span>
<span id="cb41-4">            )</span>
<span id="cb41-5">u.run(nsteps)</span>
<span id="cb41-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>2.2% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-31-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>So that’s <strong>way</strong> better. Not perfect, but way better.</p>
</section>
<section id="what-if-people-stop-distancing" class="level2">
<h2 class="anchored" data-anchor-id="what-if-people-stop-distancing">What if people stop distancing?</h2>
<section id="with-5x-the-capacity" class="level3">
<h3 class="anchored" data-anchor-id="with-5x-the-capacity">With 5x the capacity</h3>
<p>The above assumes we keep distancing until basically everyone’s recovered. What if we build these beds, and people stop distancing when it looks like the curve is going down?</p>
<div id="cell-46" class="cell" data-execution_count="223">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb43" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb43-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb43-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb43-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,</span>
<span id="cb43-4">            )</span>
<span id="cb43-5">u.run(nsteps,stop_distancing_at <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(nsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>))</span>
<span id="cb43-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>3.7% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-32-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>So that’s bad, it’s still an improvement ofer not distancing, but it’s bad.</p>
</section>
<section id="with-2x-the-capacity" class="level3">
<h3 class="anchored" data-anchor-id="with-2x-the-capacity">With 2x the capacity</h3>
<p>What if we don’t get a 5x extra capacity? What if we do something (still seemingly awesome), like double our capacity instead?</p>
<p><strong>Here’s with no distancing</strong></p>
<div id="cell-48" class="cell" data-execution_count="224">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb45" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb45-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>,</span>
<span id="cb45-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb45-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,</span>
<span id="cb45-4">            )</span>
<span id="cb45-5">u.run(nsteps,stop_distancing_at <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(nsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>))</span>
<span id="cb45-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>5.9% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-33-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p><strong>Here’s with extreme distancing</strong></p>
<div id="cell-50" class="cell" data-execution_count="225">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb47" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb47-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb47-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb47-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,</span>
<span id="cb47-4">            )</span>
<span id="cb47-5">u.run(nsteps)</span>
<span id="cb47-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>3.4% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-34-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>And here’s with extreme distancing that stops early</p>
<div id="cell-52" class="cell" data-execution_count="228">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb49" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb49-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb49-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb49-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,</span>
<span id="cb49-4">            )</span>
<span id="cb49-5">u.run(nsteps,stop_distancing_at<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>nsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb49-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>3.6% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-35-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>Again, now we’ve flattened the curve, and we need to run for longer. You can’t quite tell, because I’m not showing time on the x-axis, but here’s running that for twice as long.</p>
<div id="cell-54" class="cell" data-execution_count="229">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb51" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb51-1">u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Universe(npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>npeople,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,</span>
<span id="cb51-2">             initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>initial_infection_chance,</span>
<span id="cb51-3">             hospital_beds_fraction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.003</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,</span>
<span id="cb51-4">            )</span>
<span id="cb51-5">u.run(nsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,stop_distancing_at<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>nsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb51-6">draw_stacked_plot(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>4.9% of people died in the figure below</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/index_files/figure-html/cell-36-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>In the first of those simulations, we happened to stop distancing after we were actually under capacity. That seems to make a noticeable distance. But either way, it’s not great.</p>
</section>
</section>
<section id="conclusions" class="level2">
<h2 class="anchored" data-anchor-id="conclusions">Conclusions</h2>
<p>Can I make any conclusions from this? Even though this isn’t a quantitatively correct model, I think a few things are probably true:</p>
<ol type="1">
<li>We need to increase our hospital capacity. This means mobilizing the Army Corps of Engineers, using the navy hospital ships, maybe repurposing college dorms, etc. It also means obtaining more personal protective equipment, so that our health care workers can continue to work with proper protection! If they get sick, our capacity decreases hugely!</li>
<li>We need to look aggressively for cures or vaccines. I see reports that some malaria drugs might treat coronavirus within a few days in a hospital setting. That’s huge.</li>
<li>#FlattenTheCurve, by itself, is only a complete solution if you can do it <em>super</em> aggressively, and basically forever (until everyone has been exposed). But flattening the curve <em>now</em> while we do things like building more beds and looking for cures is a huge win!</li>
</ol>
<p>Seems like we’d be best off flattening the curve for as long as society can stand, while pushing hard at capacity and cures.</p>
<hr>
<p><br> <br></p>
</section>
<section id="running-it-yourself" class="level2">
<h2 class="anchored" data-anchor-id="running-it-yourself">Running it yourself</h2>
<p>If you want to run it yourself, here’s the code. Instead of</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb53" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb53-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> covid <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> social_distancing</span>
<span id="cb53-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> covid.social_distancing <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Universe, getanim, draw_stacked_plot</span></code></pre></div></div>
<p>up top, just run the cell below.</p>
<p>If you’re playing around with the code, here are some things to note:</p>
<ul>
<li>Generating the animation is much slower than generating the data. So maybe just make the stacked plots if you’re looking for trends.</li>
<li>Units and parameterization are tricky. I made very little effort to get the physical distances/movement right.</li>
<li>I had to re-run the cells a bunch to get similar starting conditions. That’s what you get with randomness. You could think about modifying things so that we had a fixed number of infected people at the beginning. Or a fixed number of days those folks had been infected. You could also explicitly seed the random number generator for consistency.</li>
<li>One that you might want make if you play around with the model is letting people transition from R back to S, since there have been some reports of people getting <em>reinfected</em> with the disease. Eek!</li>
</ul>
<div id="cell-58" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb54" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb54-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np, scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sp, pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb54-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb54-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.metrics.pairwise <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> euclidean_distances</span>
<span id="cb54-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> animation</span>
<span id="cb54-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> HTML</span>
<span id="cb54-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> itertools <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> combinations</span>
<span id="cb54-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> collections <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> namedtuple</span>
<span id="cb54-8"></span>
<span id="cb54-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""</span></span>
<span id="cb54-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">Units: time is measured in 12 hour chunks, but there's no strict correspondence to units here.</span></span>
<span id="cb54-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""</span></span>
<span id="cb54-12"></span>
<span id="cb54-13"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> EffectiveArea:</span>
<span id="cb54-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Tells us the boundaries of the area that people can live in.</span></span>
<span id="cb54-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">    """</span></span>
<span id="cb54-16">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,):</span>
<span id="cb54-17">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.xmin, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.xmax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span></span>
<span id="cb54-18">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ymin, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ymax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span></span>
<span id="cb54-19"></span>
<span id="cb54-20"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> Person:</span>
<span id="cb54-21">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""</span></span>
<span id="cb54-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">    In this version, after 14 days, you either recover or die</span></span>
<span id="cb54-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">    """</span></span>
<span id="cb54-24">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,effectivearea,state<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'succeptible'</span>,distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>):</span>
<span id="cb54-25">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.r <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.15</span></span>
<span id="cb54-26">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.days_infected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb54-27">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._typical_recovery_days <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">14</span></span>
<span id="cb54-28">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.mortality_rate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>:<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>,<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>:<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.02</span>} <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># index is whether we're over capacity</span></span>
<span id="cb54-29">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distancing <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> distancing</span>
<span id="cb54-30">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distancing:</span>
<span id="cb54-31">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.m <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span></span>
<span id="cb54-32">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb54-33">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.m <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb54-34">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> state</span>
<span id="cb54-35">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span>:</span>
<span id="cb54-36">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.days_infected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.randint(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._typical_recovery_days)</span>
<span id="cb54-37">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> effectivearea</span>
<span id="cb54-38">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.x, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.uniform(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.xmin,<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.xmax), np.random.uniform(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.ymin,<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.ymax)</span>
<span id="cb54-39">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distancing:</span>
<span id="cb54-40">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distance(force<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb54-41">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb54-42">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.undistance(force<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb54-43">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> distance(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,force<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>):</span>
<span id="cb54-44">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> force <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">not</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distancing:</span>
<span id="cb54-45">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.m <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span></span>
<span id="cb54-46">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vx, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vy <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb54-47">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span></span>
<span id="cb54-48">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> undistance(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,force<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>):</span>
<span id="cb54-49">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> force <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distancing:</span>
<span id="cb54-50">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.m <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb54-51">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vx, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vy <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.normal(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Maxwell Boltzmann?</span></span>
<span id="cb54-52">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.distancing <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span></span>
<span id="cb54-53">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> move(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,dt,ea,overcapacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>):</span>
<span id="cb54-54">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.x, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vx<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>dt, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vy<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>dt</span>
<span id="cb54-55">        </span>
<span id="cb54-56">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""People don't recover instantly. Once it's been two weeks, </span></span>
<span id="cb54-57"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        they start getting a chance to recover. We could also give </span></span>
<span id="cb54-58"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        them a chance to die here.</span></span>
<span id="cb54-59"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        """</span></span>
<span id="cb54-60">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span>:</span>
<span id="cb54-61">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.days_infected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._typical_recovery_days:</span>
<span id="cb54-62">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.days_infected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> dt</span>
<span id="cb54-63">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb54-64">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> np.random.uniform() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.mortality_rate[overcapacity]:</span>
<span id="cb54-65">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dead'</span></span>
<span id="cb54-66">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.m <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span></span>
<span id="cb54-67">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vx, <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.vy <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb54-68">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb54-69">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.days_infected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb54-70">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'recovered'</span></span>
<span id="cb54-71">    </span>
<span id="cb54-72"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> collide(p1,p2):</span>
<span id="cb54-73">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""This is the 2D elastic collision problem from your intro physics book.</span></span>
<span id="cb54-74"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">    """</span></span>
<span id="cb54-75">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> p1.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">and</span> p2.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'succeptible'</span>:</span>
<span id="cb54-76">        p2.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span></span>
<span id="cb54-77">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> p2.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">and</span> p1.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'succeptible'</span>:</span>
<span id="cb54-78">        p1.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span></span>
<span id="cb54-79"></span>
<span id="cb54-80">    m1, m2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> p1.m, p2.m</span>
<span id="cb54-81">    r1, r2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([p1.x,p1.y]), np.array([p2.x,p2.y])</span>
<span id="cb54-82">    v1, v2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([p1.vx,p1.vy]), np.array([p2.vx,p2.vy])</span>
<span id="cb54-83">    M <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> m1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> m2</span>
<span id="cb54-84">    d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linalg.norm(r1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> r2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb54-85">    u1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> v1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>m2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> M <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.dot(v1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>v2, r1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>r2) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (r1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> r2)</span>
<span id="cb54-86">    u2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> v2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>m1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> M <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.dot(v2<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>v1, r2<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>r1) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (r2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> r1)</span>
<span id="cb54-87">    p1.vx,p1.vy <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> u1</span>
<span id="cb54-88">    p2.vx,p2.vy <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> u2</span>
<span id="cb54-89"></span>
<span id="cb54-90">    </span>
<span id="cb54-91"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> Universe:</span>
<span id="cb54-92">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,</span>
<span id="cb54-93">                 npeople, <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># How many people there are in the world</span></span>
<span id="cb54-94">                 initial_infection_chance<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Initial fraction of population which is infected</span></span>
<span id="cb54-95">                 distancing<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>, <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fraction of population which practices distancing</span></span>
<span id="cb54-96">                 hospital_beds_fraction <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Better is 0.003 which is closer to reality</span></span>
<span id="cb54-97">                ):</span>
<span id="cb54-98">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.npeople <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> npeople</span>
<span id="cb54-99">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> EffectiveArea()</span>
<span id="cb54-100">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.dt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span></span>
<span id="cb54-101">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.hospital_beds_fraction <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> hospital_beds_fraction</span>
<span id="cb54-102">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.hospital_beds <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> npeople<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>hospital_beds_fraction</span>
<span id="cb54-103">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># gets set in self.run</span></span>
<span id="cb54-104">        <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _state():</span>
<span id="cb54-105">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> np.random.uniform() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> initial_infection_chance:</span>
<span id="cb54-106">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span></span>
<span id="cb54-107">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'succeptible'</span></span>
<span id="cb54-108">        <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _distancing():</span>
<span id="cb54-109">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> np.random.uniform() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> distancing</span>
<span id="cb54-110">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [Person(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea,_state(),_distancing()) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.npeople)]</span>
<span id="cb54-111">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># self.color = {'succeptible':0.5,'infected':0.0,'recovered':0.7} # old color scheme</span></span>
<span id="cb54-112">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.color <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'succeptible'</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'lightblue'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'red'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'recovered'</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dead'</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'midnightblue'</span>}</span>
<span id="cb54-113">        </span>
<span id="cb54-114">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> _step(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>):</span>
<span id="cb54-115">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""iterate through one timestep</span></span>
<span id="cb54-116"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        """</span></span>
<span id="cb54-117">        points <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">zip</span>([p.x <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people],[p.y <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people]))</span>
<span id="cb54-118">        dists <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> euclidean_distances(points,points)</span>
<span id="cb54-119">        close <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> dists <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>].r</span>
<span id="cb54-120">        close <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> close.tolist()</span>
<span id="cb54-121">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> (i,j) <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> combinations(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.npeople),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>):</span>
<span id="cb54-122">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> close[i][j]: <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># a bit faster than numpy indexing once things get big.</span></span>
<span id="cb54-123">                collide(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people[i],<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people[j])</span>
<span id="cb54-124">                </span>
<span id="cb54-125">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Are we over capacity?</span></span>
<span id="cb54-126">        ninfected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>([p <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> p.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span>])</span>
<span id="cb54-127">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># about 5% need hospitalization</span></span>
<span id="cb54-128">        overcapacity <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> ninfected <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.hospital_beds</span>
<span id="cb54-129">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people:</span>
<span id="cb54-130">            p.move(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.dt,<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea,overcapacity)</span>
<span id="cb54-131">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> p.x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.xmin <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> p.x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.xmax: </span>
<span id="cb54-132">                p.vx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>p.vx</span>
<span id="cb54-133">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> p.y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.ymin <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> p.y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.ea.ymax:</span>
<span id="cb54-134">                p.vy <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>p.vy</span>
<span id="cb54-135">    </span>
<span id="cb54-136">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> run(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,steps,stop_distancing_at <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>):</span>
<span id="cb54-137">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""Run a simulation</span></span>
<span id="cb54-138"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        </span></span>
<span id="cb54-139"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        Internal data looks like</span></span>
<span id="cb54-140"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        </span></span>
<span id="cb54-141"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        ```</span></span>
<span id="cb54-142"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        x_coords[frame,particle_number]</span></span>
<span id="cb54-143"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        ```</span></span>
<span id="cb54-144"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        """</span></span>
<span id="cb54-145">        x_coords <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros((steps,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people)))</span>
<span id="cb54-146">        y_coords <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros((steps,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people)))</span>
<span id="cb54-147">        state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros((steps,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people)),dtype<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'object'</span>)</span>
<span id="cb54-148">        </span>
<span id="cb54-149">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># SIR model. `i` is a questionable variable name TBH</span></span>
<span id="cb54-150">        s,i,r,d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros(steps),np.zeros(steps),np.zeros(steps),np.zeros(steps)</span>
<span id="cb54-151">        <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> pop_count(people):</span>
<span id="cb54-152">            s,i,r,d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb54-153">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> people:</span>
<span id="cb54-154">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> p.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'succeptible'</span>:</span>
<span id="cb54-155">                    s <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb54-156">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> p.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span>:</span>
<span id="cb54-157">                    i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb54-158">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> p.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'recovered'</span>:</span>
<span id="cb54-159">                    r <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb54-160">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> p.state <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dead'</span>:</span>
<span id="cb54-161">                    d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb54-162">                    </span>
<span id="cb54-163">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> s,i,r,d</span>
<span id="cb54-164">        s[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],r[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],d[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pop_count(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people)</span>
<span id="cb54-165">        x_coords[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [p.x <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people]</span>
<span id="cb54-166">        y_coords[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [p.y <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people]</span>
<span id="cb54-167">        state[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [p.state <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people]</span>
<span id="cb54-168">        </span>
<span id="cb54-169">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> step <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,steps):</span>
<span id="cb54-170">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> step <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> stop_distancing_at:</span>
<span id="cb54-171">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people:</span>
<span id="cb54-172">                    p.undistance()</span>
<span id="cb54-173">            <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._step()</span>
<span id="cb54-174">            s[step],i[step],r[step],d[step] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pop_count(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people)</span>
<span id="cb54-175">            x_coords[step] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [p.x <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people]</span>
<span id="cb54-176">            y_coords[step] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [p.y <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people]</span>
<span id="cb54-177">            state[step] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [p.state <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people]</span>
<span id="cb54-178">        dtype <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> namedtuple(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'RunData'</span>,[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'x'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'state'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'s'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'i'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'r'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'d'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'steps'</span>])</span>
<span id="cb54-179">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> dtype(x_coords,y_coords,state,s,i,r,d,steps)</span>
<span id="cb54-180">        </span>
<span id="cb54-181">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> draw(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>,ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>):</span>
<span id="cb54-182">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">"""</span></span>
<span id="cb54-183"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        A very simple method to draw the current state. Better graphing comes in the</span></span>
<span id="cb54-184"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        animation functions.</span></span>
<span id="cb54-185"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">        """</span></span>
<span id="cb54-186">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> ax <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>:</span>
<span id="cb54-187">            fig,ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>))</span>
<span id="cb54-188">        scat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.scatter([p.x <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people],[p.y <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people],</span>
<span id="cb54-189">                   c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.color[p.state] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> p <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.people],</span>
<span id="cb54-190">                   marker<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.'</span>)</span>
<span id="cb54-191">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> scat,</span>
<span id="cb54-192"></span>
<span id="cb54-193"></span>
<span id="cb54-194"></span>
<span id="cb54-195"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getanim(u,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>):</span>
<span id="cb54-196">    fig,ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>))</span>
<span id="cb54-197">    ax.axis(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'off'</span>)</span>
<span id="cb54-198"></span>
<span id="cb54-199">    left, width <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.85</span></span>
<span id="cb54-200">    bottom, height <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.65</span></span>
<span id="cb54-201">    spacing <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.02</span></span>
<span id="cb54-202"></span>
<span id="cb54-203">    rect_universe <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [left, bottom, width, height]</span>
<span id="cb54-204">    rect_trend <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [left, bottom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> height <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> spacing, width, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>]</span>
<span id="cb54-205"></span>
<span id="cb54-206">    ax_universe <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.axes(rect_universe)</span>
<span id="cb54-207">    ax_trend <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.axes(rect_trend)</span>
<span id="cb54-208">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#ax_universe.axis('off') # I want the box around it.</span></span>
<span id="cb54-209">    ax_universe.axes.get_xaxis().set_ticks([])</span>
<span id="cb54-210">    ax_universe.axes.get_yaxis().set_ticks([])    </span>
<span id="cb54-211">    ax_trend.axis(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'off'</span>)</span>
<span id="cb54-212"></span>
<span id="cb54-213">    s,i,r,d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> u.data.s,u.data.i,u.data.r,u.data.d</span>
<span id="cb54-214"></span>
<span id="cb54-215">    line, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> draw_stacked_plot(u,ax_trend,show_time<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>show_capacity)</span>
<span id="cb54-216"></span>
<span id="cb54-217">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#ax_trend.stackplot(range(len(s)), i, s, r, d, labels=['sick','healthy','recovered','dead'],</span></span>
<span id="cb54-218">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#                   colors=[u.color['infected'],u.color['succeptible'],u.color['recovered'],u.color['dead']])</span></span>
<span id="cb54-219"></span>
<span id="cb54-220">    scat, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> u.draw(ax_universe)</span>
<span id="cb54-221">    </span>
<span id="cb54-222">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> drawframe(i):</span>
<span id="cb54-223">        data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.column_stack(([u.data.x[i],u.data.y[i]]))</span>
<span id="cb54-224">        scat.set_offsets(data)</span>
<span id="cb54-225">        colors <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([u.color[_] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> _ <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> u.data.state[i]])</span>
<span id="cb54-226">        scat.set_color(colors)</span>
<span id="cb54-227"></span>
<span id="cb54-228">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#_s,_i,_r = np.zeros(len(u.data.s)),np.zeros(len(u.data.s)),np.zeros(len(u.data.s))</span></span>
<span id="cb54-229">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#_s[:i],_i[:i],_r[:i] = u.data.s[:i],u.data.i[:i],u.data.r[:i]</span></span>
<span id="cb54-230">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#ax_trend.stackplot(range(len(_s)), _s, _i, _r, labels=['s','i','r'],colors=['blue','green','yellow'])</span></span>
<span id="cb54-231">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#ax_trend.legend(loc='upper left')</span></span>
<span id="cb54-232">        line.set_data([i,i],[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,u.npeople])</span>
<span id="cb54-233"></span>
<span id="cb54-234">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> scat,line</span>
<span id="cb54-235"></span>
<span id="cb54-236"></span>
<span id="cb54-237">    anim <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> animation.FuncAnimation(fig, drawframe, frames<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>u.data.steps,</span>
<span id="cb54-238">                                  interval<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, blit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>, repeat<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb54-239">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> anim</span>
<span id="cb54-240"></span>
<span id="cb54-241"></span>
<span id="cb54-242"></span>
<span id="cb54-243"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> draw_stacked_plot(u,ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,show_time<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,show_capacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,print_description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>):</span>
<span id="cb54-244">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> ax <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>:</span>
<span id="cb54-245">        fig,ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots()</span>
<span id="cb54-246">        ax.axis(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'off'</span>)</span>
<span id="cb54-247">    s,i,r,d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> u.data.s,u.data.i,u.data.r,u.data.d</span>
<span id="cb54-248">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> print_description:</span>
<span id="cb54-249">        <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>u<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>npeople<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">% of people died in the figure below'</span>)</span>
<span id="cb54-250">    ax.stackplot(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(s)), i, s, r, d, labels<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sick'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'healthy'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'recovered'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dead'</span>],</span>
<span id="cb54-251">                     colors<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[u.color[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'infected'</span>],u.color[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'succeptible'</span>],u.color[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'recovered'</span>],u.color[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dead'</span>]])</span>
<span id="cb54-252">    ax.legend(loc<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'center left'</span>)</span>
<span id="cb54-253">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> show_capacity:</span>
<span id="cb54-254">        ax.hlines(y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>u.hospital_beds<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>,xmin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,xmax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(s),linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>)</span>
<span id="cb54-255">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> show_time <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>:</span>
<span id="cb54-256">        line, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,s[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>i[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>r[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>d[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]],linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)</span>
<span id="cb54-257">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> line,</span>
<span id="cb54-258">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span></span></code></pre></div></div>
</div>


</section>
</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/social-distancing-and-hospital-capacity-for-coronavirus/</guid>
  <pubDate>Sat, 21 Mar 2020 00:12:03 GMT</pubDate>
</item>
<item>
  <title>Starting my sabbatical</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/starting-my-sabbatical/</link>
  <description><![CDATA[ 




<p>Super exciting news: I’m starting my sabbatical. Through a combination of luck, timing, and hard work on the setup, I’ll be spending the time working on computational oncology. Specifically, I’ll be joining an existing collaboration between two fantastic labs at Johns Hopkins. It turns out that my statistical physics, computer science/programming, mathematics, and biophysics backgrounds are an excellent fit.</p>
<p>So now it’s time to catch up on the science from a different field. I’m starting with a few Coursera courses.</p>
<!-- more -->
<p>The computational side involves learning some modern data science. Excellent. I’ve been meaning to update my formal knowledge here for a while. The Johns Hopkins Data Science courses on Coursera came highly recommended by several people, especially the courses by Brian Caffo and Jeff Leek. So, which ones to check out?</p>
<p>Given the instructors and my goals, there are two specializations (groups of courses)</p>
<p><a href="https://www.coursera.org/specializations/genomic-data-science">Genomic Data Science Specialization</a></p>
<ul>
<li>Has Jeff Leek</li>
<li>Is mostly based in Python</li>
</ul>
<p><a href="https://www.coursera.org/specializations/jhu-data-science">Data Science Specialization</a></p>
<ul>
<li>Has Jeff Leek</li>
<li>Has Brian Caffo</li>
<li>Is mostly based in R</li>
</ul>
<p>So, it looks like the right thing to do is to do the Genomic Data Science Specialization, and then pick and choose courses from the Data Science Specialization to supplement. I thought about trying to get the certificate, but I don’t see any real benefit to doing that for either of these … I think I’m at the point in my career where knowledge and skills trump official certifications. Just to make some notes for myself for later, here are courses that sound particularly interesting from the Data Science Specialization</p>
<ul>
<li><a href="https://www.coursera.org/learn/practical-machine-learning">Practical Machine Learning</a> … an alternative to this might be <a href="https://www.fast.ai/">fast.ai</a>’s ML courses. I’ve heard that their stuff is quite good.</li>
<li><a href="https://www.coursera.org/learn/exploratory-data-analysis">Exploratory Data Analysis</a> has got to be worth a quick look through. Interesting stuff can be done in Python, I’m sure.</li>
<li><a href="https://www.coursera.org/learn/statistical-inference">Statistical Inference</a></li>
</ul>
<p>I started with Course 3, Python for Genomic Data Science. I did the whole thing in about a day. The final project was interesting, and reminded me of a few things</p>
<ul>
<li><strong>It’s important to have a good set of test data.</strong> In this case, I wrote some buggy code that got cleared up much more easily when I just started writing sample FASTA files.</li>
<li><strong>You need to become comfortable with the data formats.</strong> Similar to the above, I spent a few tens of minutes trying to use pre-written data files because there was some weird mental hurdle keeping me from just playing with the files directly. As I know from lots of previous research experience, being afraid to play with data directly is just going to hurt.</li>
<li><strong>Writing lots of small functions that you tie together makes it easier to play with data.</strong> In the final project, they described the types of questions you’d be expected to answer. I wrote some not-so-well-factored code that answered their example questions for their example data set. Then their actual questions were a bit different … and my answers weren’t quite right. Refactoring everything into small, reusable pieces made it easier to poke at the actual buggy parts. This is likely going to be an extremely important lesson as I move into bigger data sets.</li>
<li><strong>I hate “gotcha” questions.</strong> I skimmed the first few lectures, took the first quiz, and then quickly moved on to the final. That was fun. I’m vaguely tempted to get the certification, but it looks like I have to answer all of the quizzes to do so. One of the quizzes was (I think) just trying to get you to debug code, but a lot of the time, that comes across as “gotcha” style questions, which are less fun when you’re already competent at the language.</li>
</ul>
<p>My original plan was to have enough self respect that I got 100% on everything. I’m happy with my 100% on the final. I’m going to be fine with missing a couple of gotcha questions on the way to the certification :). It’s possible that I missed something by skipping the lectures, but I like the flexibility here. I can just get what I want/need, and go back for more if necessary.</p>
<p>Anyway, I hope everyone is very impressed that I now have a super official Coursera Certification!</p>



 ]]></description>
  <guid>https://mglerner.com/blog/posts/starting-my-sabbatical/</guid>
  <pubDate>Wed, 14 Aug 2019 17:45:35 GMT</pubDate>
</item>
<item>
  <title>Orienting</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/orienting/</link>
  <description><![CDATA[ 




<p>(You can download this post as a notebook <a href="https://github.com/mglerner/mglerner.github.io/blob/master/posts/orienting.ipynb">here</a>.)</p>
<section id="orienting" class="level1">
<h1>Orienting</h1>
<p>We’re in New Zealand for a semester. Recently, <a href="http://www.whanganuirivertours.co.nz/ki-tai-team/">Ash Patea</a> was telling us some Māori lore about local mountains. We’re based in Whanganui, learning about the mountains Tongariro, Taranaki, and Ruapehu, all of which are to our north. Ash starts all of these sessions off by telling us that we’re learning <em>his</em> <a href="https://maoridictionary.co.nz/search?&amp;keywords=iwi">iwi</a>’s stories, but that they’re not the only stories. That other stories are different, and none is “right.” We then get to the part where we learn that the name “Tongariro” tells you it’s a mountain to the south, and Ash says that’s how they know the story we’re learning isn’t <em>their</em> story, and all of a sudden I have to write a little math post.</p>
<p>I don’t want to spoil the punchline too much (yes I do), but there’s a really neat connection between Ash’s language and mathematics, about how you orient yourself in the world, and about how things <em>can’t</em> always be consistent.</p>
<!-- TEASER_END -->
<p>Math time. A “chart” is essentially your local set of coordinates, or how you tell yourself how to move around in the world. You can think of it like a street map in a city, or the idea of north, south, east, and west.</p>
<div id="cell-3" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1">makeone()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/orienting/index_files/figure-html/cell-2-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>You could describe different regions with different charts. You need to “glue” them together in the areas where they overlap.</p>
<div id="cell-5" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">makethree()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/orienting/index_files/figure-html/cell-3-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>When you glue all of those charts together to cover an object, the result is called an “atlas”</p>
<div id="cell-7" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">makelots()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/orienting/index_files/figure-html/cell-4-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>So, obviously, the connection I want point out is that each of these charts is like the stories of an individual iwi. They tell that iwi how to understand the world; how to get around in the world; how to orient themselves in the world. Understanding the local map tells you where you are; and knowing how to glue those local maps together tells you how to get around.</p>
<p>Sometimes, you can glue everything together into one consistent set of coordinates. Like in the above pictures, we could just have called the same direction “north” everywhere. Or, maybe every iwi has the same stories. Back to math language, maybe you can just have one chart to make up your whole atlas.</p>
<section id="but-the-thing-that-really-struck-me-is-that-sometimes-you-cant-do-that" class="level3">
<h3 class="anchored" data-anchor-id="but-the-thing-that-really-struck-me-is-that-sometimes-you-cant-do-that">But the thing that really struck me is that sometimes you <strong>can’t</strong> do that!</h3>
<p>The most common example on the math side of things is coordinates on a sphere. You already know this: you know how latitude and longitude don’t really work on at the North Pole or the South Pole? Well, it turns out that’s because you can’t cover a sphere with one chart!</p>
<p>Here’s one example</p>
<div id="cell-9" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">make_half_sphere_chart()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/orienting/index_files/figure-html/cell-5-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>where you can see a chart in red mapping the top half of the sphere … but obviously not the bottom half. Like I said, though, it turns out that you simply <em>can’t</em> have one chart that covers the whole sphere. Kind of like how, when we say “north” we don’t mean the direction that goes through the inside of the earth straight towards the North Pole. We mean the direction we’d draw on the ground. And that direction is pointing somewhere different for someone in New Zealand vs.&nbsp;someone in the US.</p>
<div id="cell-11" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1">make_north_example()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/orienting/index_files/figure-html/cell-6-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>This turns out to be related to the <a href="https://en.wikipedia.org/wiki/Hairy_ball_theorem">Hairy Ball Theorem</a>. That one says that, if you have a ball covered with hair (like my head, or a basketball), you can’t comb it without at least one cowlick. To be specific, the hairs are pointing in some direction along the head, and you’re fundamentally stuck with at least one place where your local directions don’t agree!</p>
</section>
<section id="anyway-thats-a-bit-of-a-digression.-back-to-what-we-were-learning-from-ash." class="level3">
<h3 class="anchored" data-anchor-id="anyway-thats-a-bit-of-a-digression.-back-to-what-we-were-learning-from-ash.">Anyway, that’s a bit of a digression. Back to what we were learning from Ash.</h3>
<p>We were learning Māori legends, and they’re different in different geographical regions. They often conflict if you get far enough away. The specific example that came up was talking about stories of the histories of the mountains nearby. The story Ash told us was about a mountain called Tongariro. Skipping lots of details, but Tongariro is a mountain to our north. But if you understand the Māori meaning of “Tongariro” it tells you that the mountain is to the south!</p>
<p>Back to the math language, you’re clearly looking at two different charts, and they don’t match up! You have to be very careful about how you translate (“glue”) between them, because they don’t agree.</p>
</section>
<section id="and-in-a-really-fundamental-way-there-is-no-single-global-set-of-coordinates-to-use-when-youre-understanding-the-world-via-these-legends." class="level3">
<h3 class="anchored" data-anchor-id="and-in-a-really-fundamental-way-there-is-no-single-global-set-of-coordinates-to-use-when-youre-understanding-the-world-via-these-legends.">And, in a really fundamental way, there is no single “global” set of coordinates to use when you’re understanding the world via these legends.</h3>
</section>
<section id="i-think-thats-the-coolest-thing-that-the-way-māori-stitch-together-culture-is-exactly-the-way-mathematicians-stitch-together-coordinates" class="level2">
<h2 class="anchored" data-anchor-id="i-think-thats-the-coolest-thing-that-the-way-māori-stitch-together-culture-is-exactly-the-way-mathematicians-stitch-together-coordinates">I think that’s the coolest thing! That the way Māori stitch together culture is exactly the way mathematicians stitch together coordinates!</h2>
<p>You just have to understand that they’re different in different places, and you have to use that context to understand what’s going on.</p>
<p>Pākehā (non-Māori folks) often try to say “this is THE one Māori legend” i.e.&nbsp;to impose some global coordinates. A really powerful example of this is the <a href="https://en.wikipedia.org/wiki/Moriori">Moriori</a>.</p>
<p>In the early 19th century, a couple of pākehā ethnologists were trying to knit together Māori stories into a global whole. They kept finding pieces that didn’t match up. Often, these were stories of people who had been in Aotearoa/New Zealand before. It seems clear now that these were simply stories of other Māori groups, and stories of fighting between different iwi. The ethnologists, however, invented the “Moriori myth”: they claimed that the Moriori were here when Māori came to Aotearoa/New Zealand. The truth is that the Māori came to New Zealand, and then some of them left to go to the Chatham Islands. The group that left became the Moriori.</p>
<p>The Moriori myth led to direct material harm: the idea that “the Māori did it to the Moriori first” was used by colonizers to justify ignoring <a href="https://en.wikipedia.org/wiki/Treaty_of_Waitangi">the Treaty of Waitangi</a> for a hundred years!</p>
<p>Back to the math for a second. It also turns out that, for most surfaces, you <strong>can’t</strong> have one global set of coordinates. You have to understand the local charts, and then you have to understand how to glue them together into an atlas. Maybe we should take something socially from that.</p>
<p>And maybe I had to come all the way to the other side of the globe, to Aotearoa/New Zealand to figure out how to start piecing together local views of the world, to glue my charts into an atlas without just stretching one chart past its relevance.</p>
<p><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br> Edits: I made my own versions of all of the images, made an image for the “north” example, cleaned up some of the language, added a bit more about Moriori, and moved the “orientable” punchline to the endnotes. <br><br> Endnotes: <br> (1) Māori talk about how these stories are how they <em>orient</em> themselves in the world. “Orient” has a meaning in math as well, and it essentially means that you don’t just know how to define north/south/east/west, you also know how to define “up” and “down.” A non-orientable surface is effectively one where you can have local definitions of “up” and “down” everywhere, but there is fundamentally no way to define a global coordinate system, to define “up” and “down.”</p>
<p>And it turns out that most surfaces are non-orientable. Again, maybe we should take something from that. <br> (2) For the math folks, when I say surface above, I really mean <a href="https://en.wikipedia.org/wiki/Manifold">Manifold</a>. <br> (3) We learned the Moriori history from Jillian Wychel and David James, and I don’t have a great website/link for them. The history of Māori and Moriori is not a simple one, and there’s a lot of ugliness, especially as the Moriori were almost completely wiped out in the 1800s. <br> (4) If you’re curious about the code that produced those plots, here it is!</p>
<div id="cell-13" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib.patches <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Rectangle</span>
<span id="cb6-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib.path <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Path</span>
<span id="cb6-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.patches <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> patches</span>
<span id="cb6-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np, matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb6-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> mpl_toolkits.mplot3d <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Axes3D</span>
<span id="cb6-6">plt.xkcd()</span>
<span id="cb6-7"></span>
<span id="cb6-8"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plt1(ax,offsetx<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,offsety<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'orange'</span>,text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>):</span>
<span id="cb6-9">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Mostly taken from</span></span>
<span id="cb6-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># https://matplotlib.org/users/path_tutorial.html</span></span>
<span id="cb6-11">    verts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [</span>
<span id="cb6-12">        (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsetx, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsety), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># left, bottom</span></span>
<span id="cb6-13">        (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsetx, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsety), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># left, top</span></span>
<span id="cb6-14">        (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsetx, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsety), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># right, top</span></span>
<span id="cb6-15">        (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsetx, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsety), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># right, bottom</span></span>
<span id="cb6-16">        (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsetx, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsety), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ignored</span></span>
<span id="cb6-17">        ]</span>
<span id="cb6-18"></span>
<span id="cb6-19">    codes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [Path.MOVETO,</span>
<span id="cb6-20">             Path.LINETO,</span>
<span id="cb6-21">             Path.LINETO,</span>
<span id="cb6-22">             Path.LINETO,</span>
<span id="cb6-23">             Path.CLOSEPOLY,</span>
<span id="cb6-24">             ]</span>
<span id="cb6-25"></span>
<span id="cb6-26">    path <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Path(verts, codes)</span>
<span id="cb6-27"></span>
<span id="cb6-28">    patch <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> patches.PathPatch(path, facecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>color, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb6-29">    ax.add_patch(patch)</span>
<span id="cb6-30"></span>
<span id="cb6-31">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#arrow( x, y, dx, dy, **kwargs )</span></span>
<span id="cb6-32">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> text:</span>
<span id="cb6-33">        alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb6-34">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb6-35">        alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span></span>
<span id="cb6-36">    plt.arrow( <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsetx, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsety, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>, fc<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"k"</span>, ec<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"k"</span>,head_width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>, head_length<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alpha)</span>
<span id="cb6-37">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> text:</span>
<span id="cb6-38">        plt.text(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsetx,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsety,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'North'</span>)</span>
<span id="cb6-39">    ax.set_xlim(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb6-40">    ax.set_ylim(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb6-41">    ax.set_yticklabels([])</span>
<span id="cb6-42">    ax.set_xticklabels([])</span>
<span id="cb6-43">    </span>
<span id="cb6-44"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> makeone():</span>
<span id="cb6-45">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.figure()</span>
<span id="cb6-46">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.add_subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">111</span>)</span>
<span id="cb6-47"></span>
<span id="cb6-48">    plt1(ax)</span>
<span id="cb6-49">    </span>
<span id="cb6-50"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> makethree():</span>
<span id="cb6-51">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.figure()</span>
<span id="cb6-52">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.add_subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">111</span>)</span>
<span id="cb6-53"></span>
<span id="cb6-54">    plt1(ax)</span>
<span id="cb6-55">    plt1(ax,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>)</span>
<span id="cb6-56">    plt1(ax,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)    </span>
<span id="cb6-57"></span>
<span id="cb6-58"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> makelots():</span>
<span id="cb6-59">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.figure()</span>
<span id="cb6-60">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.add_subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">111</span>)</span>
<span id="cb6-61"></span>
<span id="cb6-62">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> np.arange(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.8</span>):</span>
<span id="cb6-63">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> np.arange(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.8</span>):</span>
<span id="cb6-64">            plt1(ax,i,j,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>,text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb6-65"></span>
<span id="cb6-66">    plt1(ax)</span>
<span id="cb6-67">    plt1(ax,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>)</span>
<span id="cb6-68">    plt1(ax,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)</span>
<span id="cb6-69">    </span>
<span id="cb6-70"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plot_top(ax,n_theta,n_phi,r,fixz<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>):</span>
<span id="cb6-71">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Largely taken from</span></span>
<span id="cb6-72">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># https://stackoverflow.com/questions/41105754/heat-map-half-sphere-plot</span></span>
<span id="cb6-73">    </span>
<span id="cb6-74">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#theta inclination angle</span></span>
<span id="cb6-75">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#phi azimuthal angle</span></span>
<span id="cb6-76"></span>
<span id="cb6-77">    theta, phi <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.mgrid[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>:<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi:n_theta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">1j</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>:<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi:n_phi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">1j</span>]</span>
<span id="cb6-78"></span>
<span id="cb6-79">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(theta)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(phi)</span>
<span id="cb6-80">    y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(theta)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(phi)</span>
<span id="cb6-81">    z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(theta)</span>
<span id="cb6-82">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> fixz:</span>
<span id="cb6-83">        z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.ones_like(z)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb6-84"></span>
<span id="cb6-85">    ax.plot_surface(</span>
<span id="cb6-86">        x,y,z,  rstride<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, cstride<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, </span>
<span id="cb6-87">        color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'red'</span>,</span>
<span id="cb6-88">        alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alpha, linewidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) </span>
<span id="cb6-89"></span>
<span id="cb6-90"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plot_bottom(ax,n_theta,n_phi,r,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>):</span>
<span id="cb6-91">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Largely taken from</span></span>
<span id="cb6-92">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># https://stackoverflow.com/questions/41105754/heat-map-half-sphere-plot</span></span>
<span id="cb6-93">    </span>
<span id="cb6-94">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#theta inclination angle</span></span>
<span id="cb6-95">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#phi azimuthal angle</span></span>
<span id="cb6-96"></span>
<span id="cb6-97">    theta, phi <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.mgrid[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>:<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi:n_theta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">1j</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>:<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi:n_phi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">1j</span>]</span>
<span id="cb6-98"></span>
<span id="cb6-99">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(theta)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(phi)</span>
<span id="cb6-100">    y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(theta)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(phi)</span>
<span id="cb6-101">    z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(theta)</span>
<span id="cb6-102"></span>
<span id="cb6-103">    ax.plot_surface(</span>
<span id="cb6-104">        x,y,z,  rstride<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, cstride<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, </span>
<span id="cb6-105">        color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>,</span>
<span id="cb6-106">        alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alpha, linewidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) </span>
<span id="cb6-107"></span>
<span id="cb6-108"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plot_circles(ax,includetop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>):</span>
<span id="cb6-109">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Largely taken from</span></span>
<span id="cb6-110">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># https://stackoverflow.com/questions/32424670/python-matplotlib-drawing-3d-sphere-with-circumferences</span></span>
<span id="cb6-111">    u <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.pi, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb6-112">    v <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, np.pi, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb6-113"></span>
<span id="cb6-114">    elev <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">10.0</span></span>
<span id="cb6-115">    rot <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">80.0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.pi</span>
<span id="cb6-116"></span>
<span id="cb6-117">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#calculate vectors for "vertical" circle</span></span>
<span id="cb6-118">    a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>np.sin(elev <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.pi), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, np.cos(elev <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.pi)])</span>
<span id="cb6-119">    b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>])</span>
<span id="cb6-120">    b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.cos(rot) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> np.cross(a, b) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.sin(rot) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.dot(a, b) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> np.cos(rot))</span>
<span id="cb6-121">    horiz_front <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, np.pi, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb6-122">    ax.plot(np.sin(u),np.cos(u),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>color, linestyle <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>)</span>
<span id="cb6-123">    ax.plot(np.sin(horiz_front),np.cos(horiz_front),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>color)</span>
<span id="cb6-124"></span>
<span id="cb6-125">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> includetop:</span>
<span id="cb6-126">        ax.plot(np.sin(u),np.cos(u),<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>color, linestyle <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>)</span>
<span id="cb6-127">        ax.plot(np.sin(horiz_front),np.cos(horiz_front),<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>color)</span>
<span id="cb6-128"></span>
<span id="cb6-129">    </span>
<span id="cb6-130">    vert_front <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(np.pi <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.pi <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb6-131">    ax.plot(a[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.sin(u) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> b[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.cos(u), b[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.cos(u), a[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.sin(u) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> b[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.cos(u),</span>
<span id="cb6-132">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>color, linestyle <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>)</span>
<span id="cb6-133">    ax.plot(a[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.sin(vert_front) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> b[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.cos(vert_front), </span>
<span id="cb6-134">            b[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.cos(vert_front), a[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.sin(vert_front) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> b[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.cos(vert_front),</span>
<span id="cb6-135">            color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>color)</span>
<span id="cb6-136"></span>
<span id="cb6-137"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plot_lines(ax):</span>
<span id="cb6-138">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span>)</span>
<span id="cb6-139">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span>)</span>
<span id="cb6-140"></span>
<span id="cb6-141">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.65</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>)</span>
<span id="cb6-142">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.65</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb6-143">    </span>
<span id="cb6-144">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span>)</span>
<span id="cb6-145">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb6-146">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb6-147"></span>
<span id="cb6-148">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span>)</span>
<span id="cb6-149">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb6-150">    ax.plot(xs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],ys<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],zs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dashed'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb6-151">    </span>
<span id="cb6-152"></span>
<span id="cb6-153"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> make_half_sphere_chart():</span>
<span id="cb6-154">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.figure(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>))</span>
<span id="cb6-155">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.add_subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">111</span>, projection<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3d'</span>)</span>
<span id="cb6-156"></span>
<span id="cb6-157"></span>
<span id="cb6-158">    plot_top(ax,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>)</span>
<span id="cb6-159">    plot_bottom(ax,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>)</span>
<span id="cb6-160">    plot_circles(ax,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'darkgrey'</span>)</span>
<span id="cb6-161">    plot_top(ax,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,fixz<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>)</span>
<span id="cb6-162">    plot_lines(ax)</span>
<span id="cb6-163"></span>
<span id="cb6-164">    ax.set_xlim([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>])</span>
<span id="cb6-165">    ax.set_ylim([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>])</span>
<span id="cb6-166">    ax.set_zlim([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>])</span>
<span id="cb6-167"></span>
<span id="cb6-168">    ax.set_aspect(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'equal'</span>)</span>
<span id="cb6-169">    ax.view_init(elev <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, azim <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb6-170">    ax.set_yticklabels([])</span>
<span id="cb6-171">    ax.set_xticklabels([])</span>
<span id="cb6-172">    ax.set_zticklabels([])</span>
<span id="cb6-173"></span>
<span id="cb6-174"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> make_north_example():</span>
<span id="cb6-175">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.figure(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>))</span>
<span id="cb6-176">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.add_subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">111</span>, projection<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3d'</span>)</span>
<span id="cb6-177"></span>
<span id="cb6-178"></span>
<span id="cb6-179">    plot_top(ax,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>)</span>
<span id="cb6-180">    plot_bottom(ax,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>)</span>
<span id="cb6-181">    plot_circles(ax,includetop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'darkgrey'</span>)</span>
<span id="cb6-182"></span>
<span id="cb6-183">    offsetx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb6-184">    offsety <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb6-185">    alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span></span>
<span id="cb6-186">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># These arrows aren't mathematically correct ... but they look reasonable!</span></span>
<span id="cb6-187">    ax.quiver([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.13</span>],[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>],[ <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.1</span>],[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>)</span>
<span id="cb6-188">    ax.text(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'North'</span>,fontsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">18</span>)</span>
<span id="cb6-189">    </span>
<span id="cb6-190">    ax.quiver([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.16</span>],[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>], [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.1</span>],[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>],color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>)</span>
<span id="cb6-191">    ax.text(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'North'</span>,fontsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">18</span>)</span>
<span id="cb6-192">    </span>
<span id="cb6-193"></span>
<span id="cb6-194">    ax.set_xlim([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>])</span>
<span id="cb6-195">    ax.set_ylim([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>])</span>
<span id="cb6-196">    ax.set_zlim([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>])</span>
<span id="cb6-197"></span>
<span id="cb6-198">    ax.set_aspect(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'equal'</span>)</span>
<span id="cb6-199">    ax.view_init(elev <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, azim <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb6-200">    ax.set_yticklabels([])</span>
<span id="cb6-201">    ax.set_xticklabels([])</span>
<span id="cb6-202">    ax.set_zticklabels([])    </span></code></pre></div></div>
</div>


</section>
</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/orienting/</guid>
  <pubDate>Sun, 10 Feb 2019 10:09:33 GMT</pubDate>
</item>
<item>
  <title>Chromebooks for the kids</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/chromebooks-for-the-kids/</link>
  <description><![CDATA[ 




<section id="chromebook-for-the-kids" class="level1">
<h1>Chromebook for the kids</h1>
<p>My oldest daughter is 9, and the twins are 6, so it’s probably time to get them involved in computer things. I could have done this earlier, but I definitely screwed up with the kids by introducing tech/books/etc. before they were ready, so I decided to wait. The kids are definitely ready, so here are the goals:</p>
<ul>
<li>Programming
<ul>
<li>Minecraft seems to be the best for this, but I want more than 2GB of RAM. Preferably 8GB.</li>
<li><a href="https://scratch.mit.edu">Scratch</a> also seems to get a ton of great recs.</li>
</ul></li>
<li>Access to the internet</li>
<li>Having an office suite around. The 9yo will be writing papers at school next year, etc.</li>
</ul>
<p>My original thought was that I’d get a cheap desktop: either a Windows box or a refurbished Mac. I was leaning against Linux because I’m old and it seems like there’s a big barrier to entry for Linux. I want this to just work for the kids. Then someone pointed out that we’ll be traveling out of the country next year, so a desktop is a bad idea. The cheapo version of a laptop is a Chromebook, but I wanted one capable of running Minecraft. I find a really nice <a href="https://platypusplatypus.com/chromebooks/play-minecraft-chromebook/">guide to setting up Minecraft on a Chromebook</a>. Of all things, the answer is to install Linux via <a href="https://github.com/dnschneid/crouton">crouton</a>. Who knew. So, I’ll give that a try. The site also has a nice guide to Minecraft-capable Chromebooks. On the high end, the Pixel has all of the stats I could want … but $1k seems like quite a bit to spend on a “cheapo” laptop. There were some nice $200 models, but I settled on the Asus Flip 2 (Intel Core m3, 4GB of RAM … not quite the 8GB I wanted). I think the kids will really like the touchscreen and flipscreen. Hopefully they won’t fight too much over the single computer.</p>
<p>So, as per the <a href="https://platypusplatypus.com/chromebooks/play-minecraft-chromebook/">guide</a>,</p>
<ul>
<li>Be prepared to <a href="https://platypusplatypus.com/chromebooks/powerwash-chromebook-full-recovery/">Powerwash</a>/revert to factory settings. (In fact, I had to do this because apparently I screwed up a root password in the next step.)</li>
<li>Enable <a href="https://platypusplatypus.com/chromebooks/enable-developer-mode-chromebook/">Developer Mode</a>.</li>
<li>Install <a href="https://github.com/dnschneid/crouton">crouton</a> and the crouton Chrome extension (link on crouton page).</li>
<li>Install Linux
<ul>
<li>“Ctrl + Alt + T” gives you a command terminal in Chrome</li>
<li><code>shell</code> gives you a shell</li>
<li><code>sudo sh -e ~/Downloads/crouton -t touch,kde-desktop</code></li>
</ul></li>
<li>Switch back to the Chromebook side (shift+ctrl+alt+left arrow at the top of the keyboard).</li>
<li>Download the Linux Java version of Minecraft from minecraft.net</li>
<li>Switch back to the linux side (shift+ctrl+alt+right arrow at the top of the keyboard).</li>
<li>Put Minecraft in a stable place
<ul>
<li><code>mkdir ~/Games</code></li>
<li><code>mv ~/Downloads/Minecraft.jar ~/Games</code></li>
</ul></li>
<li>You can launch via the command line: <code>java -jar ~/Games/Minecraft.jar</code></li>
<li>You can make a KDE shortcut to launch it. It’s very particular.
<ul>
<li>Open up <code>kmenuedit</code> and make a new item under Games.</li>
<li>Call it Minecraft.</li>
<li>Make the command <code>java -jar ./Minecraft.jar</code></li>
<li>Under Advanced, make the Work path <code>~/Games</code> and select <code>Run in terminal</code></li>
</ul></li>
<li>You can also go into <code>~/Games</code>, open it up in the file browser via <code>xdg-open .</code> then drag the Minecraft jar file onto the desktop. That gives you an icon which, when double-clicked, will launch Minecraft.</li>
</ul>
<p>Be aware that exiting developer mode will erase all of the Linux setup from above. Reinstalling it takes about 5 minutes of typing and 45 minutes of letting the computer churn.</p>
<p>So far, the kids seem more than happy with this setup. The crouton Linux install seems to be shared no matter who logs in on the Chromebook, so they can all log in individually on the ChromeOS side, but share the same Linux side. They don’t seem to have a problem opening up a command terminal and sudo-launching kde, which is either cool or disturbing. Not sure which :).</p>


</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/chromebooks-for-the-kids/</guid>
  <pubDate>Sun, 31 Dec 2017 22:58:37 GMT</pubDate>
</item>
<item>
  <title>Coin Flipping and Entropy</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/coin-flipping-and-entropy/</link>
  <description><![CDATA[ 




<p>You can download this whole post as a Jupyter notebook <a href="https://github.com/mglerner/mglerner.github.io/blob/master/posts/coin-flipping-and-entropy.ipynb">here</a> # Some useful interactive bits for coin flipping and entropy.</p>
<p>I made this post for my 1st semester intro physics class, as a lead in to the standard discussion of entropy (sue me, I can’t make myself dive into this without starting from stat mech).</p>
<section id="say-youre-going-to-flip-4-coins.-whats-the-most-likely-outcome-how-likely-is-it" class="level2">
<h2 class="anchored" data-anchor-id="say-youre-going-to-flip-4-coins.-whats-the-most-likely-outcome-how-likely-is-it">Say you’re going to flip 4 coins. What’s the most likely outcome? How likely is it?</h2>
<p>How should we keep track of outcomes? One easy way is to ask “how many heads did we get?”</p>
<!-- TEASER_END -->
<p>Well, intuitively, we’d all say you’re most likely to get two heads and two tails. Let’s check. If it’s a fair coin, we can assume that we’re equally likely to get a head or a tail on each flip. So, we flip the first coin, and make a table:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>1</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>H</td>
</tr>
<tr class="even">
<td>T</td>
</tr>
</tbody>
</table>
<p>Great. Two outcomes, equally likely. One head 50% of the time, zero heads 50% of the time. What if we flip a second coin (students should work all of this out on their own, but hey, I’m just a blog post). If the first was heads, the second could be either heads or tails. Ditto for the second.</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>1</th>
<th>2</th>
<th></th>
<th>How many heads?</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>2</td>
</tr>
<tr class="even">
<td>H</td>
<td><strong>T</strong></td>
<td></td>
<td>1</td>
</tr>
<tr class="odd">
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>1</td>
</tr>
<tr class="even">
<td>T</td>
<td><strong>T</strong></td>
<td></td>
<td>0</td>
</tr>
</tbody>
</table>
<p>This time, it’s a bit more interesting. We had three possible outcomes. We got two heads once, one head twice, and zero heads once. So, our most likely outcome is half heads, but not by a huge amount.</p>
<p>If we add a third coin, and then a fourth coin, we get (again, students should work it all out)</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th></th>
<th>How many heads?</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>4</td>
</tr>
<tr class="even">
<td>H</td>
<td>H</td>
<td>H</td>
<td><strong>T</strong></td>
<td></td>
<td>3</td>
</tr>
<tr class="odd">
<td>H</td>
<td>H</td>
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>3</td>
</tr>
<tr class="even">
<td>H</td>
<td>H</td>
<td>T</td>
<td><strong>T</strong></td>
<td></td>
<td>2</td>
</tr>
<tr class="odd">
<td>H</td>
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>3</td>
</tr>
<tr class="even">
<td>H</td>
<td>T</td>
<td>H</td>
<td><strong>T</strong></td>
<td></td>
<td>2</td>
</tr>
<tr class="odd">
<td>H</td>
<td>T</td>
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>2</td>
</tr>
<tr class="even">
<td>H</td>
<td>T</td>
<td>T</td>
<td><strong>T</strong></td>
<td></td>
<td>1</td>
</tr>
<tr class="odd">
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>3</td>
</tr>
<tr class="even">
<td>T</td>
<td>H</td>
<td>H</td>
<td><strong>T</strong></td>
<td></td>
<td>2</td>
</tr>
<tr class="odd">
<td>T</td>
<td>H</td>
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>2</td>
</tr>
<tr class="even">
<td>T</td>
<td>H</td>
<td>T</td>
<td><strong>T</strong></td>
<td></td>
<td>1</td>
</tr>
<tr class="odd">
<td>T</td>
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>2</td>
</tr>
<tr class="even">
<td>T</td>
<td>T</td>
<td>H</td>
<td><strong>T</strong></td>
<td></td>
<td>1</td>
</tr>
<tr class="odd">
<td>T</td>
<td>T</td>
<td><strong>T</strong></td>
<td><strong>H</strong></td>
<td></td>
<td>1</td>
</tr>
<tr class="even">
<td>T</td>
<td>T</td>
<td>T</td>
<td><strong>T</strong></td>
<td></td>
<td>0</td>
</tr>
</tbody>
</table>
<p>And if we tabulate that, we have 16 possible outcomes. We get 4 heads 1/16 of the time, 3 heads 4/16 of the time, 2 heads 6/16 of the time, 1 head 4/16 of the time, and 0 heads 1/16 of the time.</p>
<p>We can visualize that with a histogram.</p>
<div id="cell-2" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np,itertools, pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd, scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sp</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> HTML</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> ipywidgets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> interact, interactive, fixed</span></code></pre></div></div>
</div>
<div id="cell-3" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">heads <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.Series(np.array([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]),name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Number of heads'</span>)</span>
<span id="cb2-2">sns.distplot(heads,kde<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,bins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/coin-flipping-and-entropy/index_files/figure-html/cell-3-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="phrasing-it-with-statistical-mechanics" class="level2">
<h2 class="anchored" data-anchor-id="phrasing-it-with-statistical-mechanics">Phrasing it with statistical mechanics</h2>
<p>The fundamental postulate of statistical mechanics says that each of these different ways of flipping coins (HHHH, HHTH, HHHT, etc.) is equally likely. That makes intuitive sense here: each individual coin flip was equally likely. But, we can use that to figure out probabilities. We actually did that for the “flip three coins” example above. Here, we say that there were 4 heads in 1/16 of the flips, so we have a 1/16 = 6.25% chance of getting one head. Here’s the same thing, plotted with probabilities instead of “number of times this happened”:</p>
<div id="cell-5" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">sns.distplot(heads,kde<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,bins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,norm_hist<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/coin-flipping-and-entropy/index_files/figure-html/cell-4-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>So, that’s cool. We now know how likely it is that we’re going to get any given number of heads. For four coin flips, our intuition was probably right: more likely to get two heads. But not <em>that much</em> more likely.</p>
</section>
<section id="flipping-more-coins" class="level2">
<h2 class="anchored" data-anchor-id="flipping-more-coins">Flipping more coins</h2>
<p>If we want to flip more coins, it’s going to be a pain in the neck to make that table over and over. Luckily, this is bundled up in a math/probability/stats concept called “combinations”. Remember how, when we flipped four coins, we had four ways to get one head?</p>
<div id="cell-7" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">sp.special.comb(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="4">
<pre><code>4.0</code></pre>
</div>
</div>
<p>And how there were six ways to get two heads?</p>
<div id="cell-9" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">sp.special.comb(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="5">
<pre><code>6.0</code></pre>
</div>
</div>
<p>We can get a list of all of those:</p>
<div id="cell-11" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1">[sp.special.comb(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,i) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="6">
<pre><code>[1.0, 4.0, 6.0, 4.0, 1.0]</code></pre>
</div>
</div>
<p>And we can wrap that whole thing up into an interactive plot</p>
<div id="cell-13" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plotflips(num_coins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>):</span>
<span id="cb10-2">    flips_with_heads <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [sp.special.comb(num_coins,i) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(num_coins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)]</span>
<span id="cb10-3">    flips_with_heads <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array(flips_with_heads)</span>
<span id="cb10-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#plt.bar(range(num_coins+1),flips_with_heads/flips_with_heads.sum())</span></span>
<span id="cb10-5">    plt.bar(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(num_coins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),flips_with_heads)</span>
<span id="cb10-6">    plt.show()</span>
<span id="cb10-7">    </span>
<span id="cb10-8">interact(plotflips,num_coins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1001</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<div class="cell-output cell-output-display">
<script type="application/vnd.jupyter.widget-view+json">
{"model_id":"965893a1e98046bfaf750ca9a8257ff8","version_major":2,"version_minor":0,"quarto_mimetype":"application/vnd.jupyter.widget-view+json"}
</script>
</div>
</div>
</section>
<section id="back-to-some-physics" class="level2">
<h2 class="anchored" data-anchor-id="back-to-some-physics">Back to some physics</h2>
<p>How does this all connect to entropy? People usually say that “entropy” means things “want to be more disordered” … let’s use that to think about the air molecules in the room. If air molecules can be randomly located anywhere in a room, why don’t you ever have to worry about walking into a room and finding all of them on the other side? If that happened, you’d asphyxiate right away!</p>
<p>Well, in terms of entropy, stuffing them all on one side would certainly be a more ordered state. What can our coins tell us about that? A really simple model would be to say “heads” means a molecule is on the left side of the room, “tails” means it’s on the right. Then, flipping 0 heads would mean you asphyxiate. Look at the above interactive plot, and notice that even with 1000 “molecules” the probability of having things spread out evenly is WAY bigger than the alternative. Think about avogadro’s number.</p>


</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/coin-flipping-and-entropy/</guid>
  <pubDate>Thu, 16 Nov 2017 22:35:56 GMT</pubDate>
</item>
<item>
  <title>Post-tenure job stress, part 1/N</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/post-tenure-job-stress-part-1n/</link>
  <description><![CDATA[ 




<p>I’m feeling a little down job-wise, and perhaps looking for some advice.</p>
<p>I got into this job for several reasons, and I can’t shake the feeling that I’m set up never to be excellent at any of them. Some are below, not in order.</p>
<p><strong>Super-brief context:</strong> I’m likely teaching a 3-3 load (none of these are likely to be research classes) and chairing my department for the foreseeable future. This is in addition to broader campus service, which becomes more relevant the more senior I become.</p>
<!-- more -->
<p><strong>Research:</strong> I’m actively re-examining my research goals. I’m probably working on way too many projects, but still. I honestly thought that, at this point in my career as a professor at a small college, I’d be spending at least 20% of my time on research. I’m lucky if I get 4 hours two out of every three weeks, and that’s in a good semester.</p>
<p>I have good ideas, but I end up with a raft of unpublished work, and the feeling that spending more time on publishing would leave less time for mentoring undergrads in research. The unpublished work probably damages my reputation in the field at this point, as I’m increasingly likely to get known as someone who doesn’t get papers out in a timely fashion. I’ve recently (far too late in the game) decided to make some hard choices in terms of making sure I get things published and making sure I can run with the pack at the top of my field … but I’m not 100% convinced I can actually do so. To be clear, by “run with the pack at the top of my field” I don’t mean that I expect either the research output or the grant output of colleagues at R1s. I mean that I want to be recognized as a high-level contributing member in my subfield, recognizing that I’ll be slow-and-steady in my output, rather than firehose of productivity. Friends at small colleges, any advice? Friends from research institutions, any reality checks for me in terms of whether this is something you think I can actually do?</p>
<p><strong>Activism:</strong> One of the reasons I came to Earlham, in particular, was because the college envisions itself as an active force for social good. It is a constant source of frustration to me that essentially zero hours out of my week are allocated to social justice issues. This isn’t because I don’t care; it’s because the rest of my job (which seems more actively required by my institution) takes up all available time. Colleagues and friends: how have you found success in this area, or have you found it at all?</p>
<p>I mean, some part of me thinks I have a ton of skills that could be extremely useful working for social justice or political campaigns. I’ve done some of that work before. Would that make a bigger impact on the world?</p>
<p><strong>Teaching:</strong> I’ve definitely gotten more efficient at teaching, and better at teaching. I’m a really good teacher. I probably do the best here out of anything. That said, I rarely get the chance to feel like I’m ahead of the game with respect to teaching. I’m usually prepping for class the day before it happens. I though that, this far in, I’d be spending all of my time designing new activities way in advance, with most of my efforts focused on broader issues. It seems like the rest of my career has encroached on teaching time to make this harder. And I would (might) be a better teacher if I dropped everything else and just focused on being a teacher.</p>
<p><strong>What does tenure have to do with it?</strong> Like I said above, I thought I’d be in a different spot now. On a related note, I do a lot of mentoring for visiting folks and non-tenured folks. Especially for the visitors, I feel quite comfortable giving them <em>very</em> aggressive advice to protect their time. As a tenure-track person, and now as someone with tenure, I feel much more of a responsibility towards shared governance. It’s why I chose Earlham, rather than a more generic institution. I also felt a bit abused by the system when, as an untenured professor, I was “asked” to do work that tenured folks weren’t doing. So, I’ll definitely feel a bit hypocritical if my response is to back way off on service once receiving tenure.</p>
<p>It’s possible that this is just the “post-tenure slump” I’ve heard about (people like me tend to be very goal-oriented, and I pushed very hard for many years to get tenure, and there’s not an obvious next goal), and that’s likely part of it, but I don’t think it’s the whole thing. If these are personal issues, I’d love to fix them. If these are structural issues … well … I’d love to know if it’s possible to change structures. Meanwhile, if these are all structural issues, and if I’m not in a good position to change the structures, I’ll feel less hypocritical about changing my priorities.</p>
<p>My institution is fond of saying “it’s OK to say no” but that’s not always so easy. Does anyone have concrete advice for things they’ve successfully said “no” to? Things, or types of things, I should say no to? I often advise other folks to say no to things, and I say no to some thing myself, but I’m obviously not saying no to enough things, since I don’t feel like I have any real space for actively-chosen growth.</p>
<p>A few notes:</p>
<ul>
<li>For Earlham folks reading along, I used “chair” instead of “convener” as a shorthand because most of my friends aren’t familiar with Earlham’s structure, and it seemed like the clearest way to communicate the point. For non-Earlham folks, there’s a difference, and an important one, but the main point is that there’s some non-negligible responsibility in either case</li>
<li>I posted a version of this on Facebook, and got some great advice. Some gems included
<ul>
<li>A suggestion that I make “seasonal” goals, where I take all of my energy in a season and devote it to a particular research project, or a particular course, etc., but <em>just one thing</em>.</li>
<li>A couple of comments from R1 folks on the research part telling me not to be an idiot about expectations, and that R1 folks are barely making it. Noted.</li>
<li>Therapists and life coaches are professionally excellent at helping with this stuff; maybe I should get one of those.</li>
<li>“any job that asks people to do an impossible amount of worthy work and puts the burden on the individual to say ‘no’ to keep their load reasonable is not a job with an effective management structure.”</li>
<li>A reminder that I have a really good book, <a href="http://peakperformingprofessor.com/ppp/">The Peak Performing Professor</a> … time to go back to reading it, since I only read snippets originally.</li>
</ul></li>
<li>This post is mostly about job-related concerns. I have a family (wife is in academia, twin 6yos, plus a 9yo). I absolutely could spend more time with my family, as one always could, but I don’t feel like I’m failing in that regard. I draw a pretty hard line in terms of making sure that time is walled off and reserved. This is more in response to people who are going to say “don’t forget to spend time with your family” but it’s probably also relevant for people who think I might be able to work consistent 80-hour weeks … nope. Uninterested in that option.</li>
</ul>



 ]]></description>
  <guid>https://mglerner.com/blog/posts/post-tenure-job-stress-part-1n/</guid>
  <pubDate>Mon, 06 Nov 2017 08:15:34 GMT</pubDate>
</item>
<item>
  <title>Visualizing differential geometry in Jupyter notebooks</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/</link>
  <description><![CDATA[ 




<p>(you can download this post as a notebook <a href="https://github.com/mglerner/mglerner.github.io/blob/master/posts/visualizing-differential-geometry-in-jupyter-notebooks.ipynb">here</a>)</p>
<section id="visualizing-differential-geometry-in-jupyter-notebooks" class="level1">
<h1>Visualizing differential geometry in Jupyter notebooks</h1>
<div id="cell-3" class="cell" data-execution_count="19">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="19">
<video width="576" height="396" controls="" autoplay="" loop="">
  <source type="video/mp4" src="data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABMI21kYXQAAAKtBgX//6ncRem9
5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNzk1IGFhYTlhYTggLSBILjI2NC9NUEVHLTQg
QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE3IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv
eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9
MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm
PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6
b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r
YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj
ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh
bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl
aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49NCBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo
PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw
bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAL+JliIQA
FP/+98dPwKbo+WbLnUU9ITCK2PpIKL1Y7NAydQAAAwAAAwAAJwtU8iffrloEawAAAwPQAFDT4AFK
jUpUjJtxnwgJbv8Ij0kZ+uPM3i+XsPOOL9h//ot5YY/UVytn6ZpaCmj7SJpNeAv66g22vzJT5u+q
6a/SmVrtFdMj2wDm+6qfZ6rxNvYQpIR13PWua+K1WFzpu6kN+b2Naf5LKR1ulinfqCagnnn7pG5v
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
">
  Your browser does not support the video tag.
</video>
</div>
</div>
<div id="cell-4" class="cell" data-execution_count="30">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="30">
<video width="576" height="396" controls="" autoplay="" loop="">
  <source type="video/mp4" src="data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAEKaW1kYXQAAAKtBgX//6ncRem9
5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNzk1IGFhYTlhYTggLSBILjI2NC9NUEVHLTQg
QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE3IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv
eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9
MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm
PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6
b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r
YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj
ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh
bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl
aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49NCBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo
PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw
bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAS69liIQA
FP/+98dPwKbo+WbLnUU9ITCK2PpIKL1Y7NAydQAAAwAAAwAAJwtU8iffrloEawAAAwPQAFDT4AFK
jUpUjJtxnwgJbv8Ij0kZ+uPM3i+XsPOOL9h//ot5YY/UVytn6ZpaCmj7SJpNeAv66g22vzJT5u+q
6a/SmVrtFdMj2wDm+6qfZ6rxNvYQpIR13PWua+K1WFzpu6kN+b2Naf5LKR1ulinfqCagnnn7pG5v
gLvs5iNno3a5/MKBfQ4ueh1MGOm9yK4p2lLcGhQtF+YFCfLY9rux99klCI4C8oqGjxxmdzwbo0Ln
GyvUp8mQjgc+MOPMz6sNAuTjikuYvMRjvuCId/+kmTKemUBj0dQm8ikKcm6sQm9LvN/zl45bh7NT
aAxP4ckFXXzxKJaBifWOT1iMjAZUZo4pT/m0dBidjptDlhS1AXDlNwrOu3jJkPKD84o4SIDuVhmH
jD+ecrVYakKtXxlacrCcYCoee5ytj45BlZmt4bVL2ZeACogVaHnkNSRBIQAEF5kRNIDZWSLO9k2Y
H2tVIv1j56fFgF3Kp5IefaNTTSvyn863mYbf4KxCm16XGY2HcOiU0r2GorXMb+zXv+WQnh4WXkAX
CKehhV0ZGW10oXty0NNFqbKWNgux8LDts0J6A4/sKHvATPNHZSCt5tJZDrE8J9P0TS/1jBagmJm0
UXt+EGgxWHOmdCB13C5haIGaZEFa3mXDW77TASZxGsFcj79UbbffFUr35f3KO3YsEV2nf14m1B84
8OWZSNR/rZ/JlbrwaJPTk6ydiNMrLtcGhPO4l9NcCunvPu6yziqkCEtVKCyk+RoXutSLPPbiR04z
TkL4/rH/g8IGnb+ragG2NzNhH7gn7Cnd4fKCXpRgonfquhWAetIgvIpSq2mDzC4Gn0ybSgm1Z5UA
7S8dWTuyl7xc+Bcof7rpByVoU0Qrw4jNZH5ptf22kn6DsEdidsU5Ul9jIjji97l25Yb/25zI9B5K
imD5Y5BM6BgPMbr4Nx0EfXxfKbjcrFzFSbn8aOzXVo1EpAolj5Y6nbg9bdFfkY8m/VyoJyhCBxMn
UWVVkuQN7P7aXVywkpiqf6NwZWVTVRUI7AeM4N5ej/EOUuBKOXA6lPnCiWkG6rC7YpBswr+zpixx
6YBcpisFkRkREi6zpyIfH9FnL3rEyg/IvSpMB/LWwkDTS737AhfabsjxQeKwZltVq5sHC5hGVcBp
makSP2ILkmUx9uBks6qt73Ddb/W5jWzrKH33TU0szbeQPV0FrWzZYoAWROS9ozR5MQE+O/lpPhhL
JLnpodbMRPibQ1zyOPtNmKOUBXh29CKFI6yC2BjetJP8YZKvFJMhP7KDDd/NV+kCIM7FT7wIuskD
I7m4sYcv4UqLIkd2h36LoP08R9fe9E7EokYkL7Zg5x+kqP+s7rf0G5o1XOA/Ik90/C7Mdj/LdAjV
BYXZqnxNVLbXg+9FE+XpEd6Egs8U36R6hvbDmVFAif/vH9LOI8t414AfRPRqEJKsk3GZzHDl8yI1
x+czXKNJEXq89nFSLDyCVCPNJUn44z3vTF9jqMWjjE1BZoeSxjh70MsJX2GmW8anqJaoHjgE5mt3
DSX/iNFhYV1I43V2bw1BrK+z5wq3B/Emw7gp8YVEc9QNfZUwbxppjbEZu+dhtN2mIxVIzsUOXtgz
5XY/YBk/3mvjZ1d+vqZfRS4VWdG7Xs9M66RIUOfIduK3yrz5qW5gB/eEZrosRy40Ruyxu7Fvdls+
qrAPiBFw57fzmA5hVYrPEStGlX7x926BHtkfWIW95dmZmJEaeIvkYn9SAa7KOXBOvxFQk2+47AaB
rSeHcMmYfV3E2c4NAtSzq3jAg07POdoUrLyR6gD+nt5t0Mq+VhrS+XGqQGn87zhxFG5NZ8/fEttA
O2uFLl03DQ6Rd1jZKNc5TqvD9qKyeEVqg5k5Zl7gL5IaKAcn6UGDcqEp3AzwsOh7TLJDXT17UsF5
mUClSulO5ZFT1yK2SxwBPRsWnUrzXDiMnJY/jhBy0El72jTXy3dBWeXT5t8+qi8uiKQucFvboq7o
zuaW4CQlqW3PbIir2Y2VAgedzMf4S2RHn4pUdhWyG0a8ZVnx4m2cmMn8YypXG2PbQ501ORmOCPHD
mRbwKInHpCnD3qVUzX+lboct0OKjVUvU6hjTFVp7+4XYSikCu3UyScjjQ3K7YwkzMrTsPoDlm9fL
o9f5aR7YVsSmueIF5+ddpAZVLEsFyjEPPg986oOKpSwP0Ox6feH8m+Jn+WuGFy9ztoY40vGGh2+C
Zl4bwZv6wfqAHIMO6ce8n4OVoc+ChVMH+BpgFwD/fXbKKO1D9WMdjTo3b6+KAIstXlzJLJkutNL2
ajqMwqI6kuqnBI+urS2uh6jQd+fh3yAVpI0FQaj/7h0lhKQ8J82uWKJKuZi3CN8AT5zd4jSpQtQG
EBQsgiSr+W1ESlWG/kusvm6UrYHIE5aszjYdOvpaS++6fJgTv508BSaYJCw9MaGjWJWrK6u/tZX/
JOVUK8ygVxbS/dsG4GiT1QY3A3O1f491/GvGlOnPVlP9e5L7OIpE3/lthOPPlfq6JrxxqmdmQ6sB
LDdz0bVpXq9/aaGbkFYgP1OYWwxnQkvm9R/cziregcHjFP2kY4NGLiCEqqgSG+iCqKDqM3SeL3BK
ao92l0AaLzj7AKL3vnyqtFqdkAlAbOzjVwQM6tlV2JUcRiLER8EfxsvzGhArWWbq1WST+XlRwQCY
fdTbbgIBCtT4SMvp8Lj+c0+yz5IRGBBeonwteqjfxYunWqHNAz9K6JVB56ixkQjTut+B9MFBcUDK
10ZYI70Zj/2ln7k/uVnu7bYAOCHSDgQok9lxP1iOMTRSxVmKxHYif6rHP5JpciQ+Fwa0Z069EOO8
oEl9md4DMEi+bz7LKrD2ckyV/groOpa07AtpFv7iSJWKBQEyl0ay09z5jdOAPVu5ciicQq17EsoX
ge0I3mtKvkhU1im01nq5Lgo/q/jdCqGC9EqGMFuT9VQkwqdYpCgsPtK7Fyd2SpaexXj+5y2ffrS9
aMLRiBgZaC0yicy2vVsL4djmywApNB35Eftrg5a3dkTZsH62yAtPaoPXFIby6vfY5in2BSa6CGE6
UMfC5MsYkCEQ8/f0koElD2MaaF1fpum8LlppHxxN0B5WWcFzZQ8xH76yi6sdPOP4kLUf3rX2l7eR
G4JPtXKJZlXjhpipgJvaNtuYNKZzs///EId4C+Qu3UaTKg59kRH+T6Z3aWVM0mVA4ei2aEy1osTL
kWlbkDVY9x8g9Mj89Aew6iLeLSIFUkFP896ggdDgTSGz4Qj9u/oY0W2x9nHxcAaJdL86xs70Jjst
/vMebKR7evrUO4zoggtAZNkQ3InNg16Kn9li6kRsud3nvajIFotomfzNw3eFVT42CLcS4WQU7R0z
0EcUpm0bi9GLjscx3g85M/FvK3qDdrY1sBMz3w4PJVQwh6lBPMDP2gsBu3CEUK22qdKgRnC7ofZq
Q52rFlFkrJyWwsIjwZ9PHVeuxbE4HqokVcob779DLPzCGlevJGINpNiwbFLLob+feMqaBp9YmUKu
JL2trJcyKeIFiIMnmUxjIvo+3g5WO5ZBQO49rNcKl0IiVG7J0C18eZvhJELfR7TdKThMxkgI4Lbe
o7xuq9OaF6xz/t8IzwWSLp17X72173Ug6sFK1gGnR5ZJAlvtZubvRqPiXWjGRpZaWUBh6k6lcJnI
5B42ViTIyeXfJK982MLMXRQbDBaFgGSYLxkSBNQQltXwou/OLdcOWJpH7xspEiWMsAxG/6fczf2C
zDQR6RFR+U0OoOSfTlm8bp8uP8PTWee+a/jGyfrdMxEO1GA40g77SiOJMp0b8ns/7to0D/0aGz4+
5IdI45F54814fmugftWC28kRrC6cvYs3OzLdyg9YN1BczCNggXBkd7xFFKMe7O7S8/iUailT7WQb
XRzJ3/TeGXlF/qGiXSZA1iKIGK5SyJ67qInUhSlHtIVJHSe3/z5BhyD6kL0gJCBz18Zf9kYN2LPG
rx0acoaXblru1V0X7ZDsgGGqo6iyW3//hSQ+MnThHkXPiqb78k6Z/4E8YTrCTeg+/Dov8V2X80RT
0i0FyduGXpY7ENote6xr69qJ8rTarBticMhURiXhimBcmAvPc4oYaHuSp5Ld678tPB6Bw9Uix1kh
krungI9W3wATn9lhZwetkGbhtbrs9ZUjvb59cPgGJmrxK3uSIc+yPWafaR3PoUe7jyV1/YMxbjJB
jk4yYipnyQ11tsvRPUTL+sj4j/2HUa7kAmRN+hcDh7EHe+ZGO6ZAzVa/Dpm6HwkMFarVbZ86Qu2P
fymh99nQNk7PPg+LH9TKWgxu8j92x7irqslyLhuW8oJEjJIQPA/uRw8TV5VLsKFL0iM5YL0noK1N
/tfRv2hNSVzBsYectmW/JdIs/DKS9WYh9vda/qW8mFW/0tXmdYwBFG5nFg9UipYqJv1HS8FYdPlp
pCohxvLu/MGc5RbgtshLJ2WkuWBbh56eYncXc7LgBkbKCB21KDZLAz+MPCGweOR7R271Img2eZWn
dvPr8c7Ucz/uDEoBN04xd2TtViWZgE1X8iQ5Fx/I6Qz7cNAKwUvfNSn0M40yXRJKmM0h4zm4E/eK
bCXz2fU6cJDxx5fo1Earh/Vd5WRUKzZrMVf26/PUi8oNrITb0azazNesNwWeEsIOlNhQT2by2bZz
NEpVn9D21qvvkKc66/pey23cc/1GNgNJOr5EfDjl95/eQSZVGPlOT6hhQjmLaYGyYd7WRjw/6O5b
G7m7WzgmboUidp2lAiPh0nBzSiV6PBTDTzGJw9GwyxJPOCYASWdERYgy7v3nb6+dTltciR2gVLkW
l6/mczStIza7butJkVsq48JhxDcdD4Juni6Pgf6PKATPRjHY+9paL/w8/bz1jqkh2HZTT4RM07m+
8A3wlgL+cKIxWAI4aEgROEkGrnDNPXhZJK0MLIS81H6HuDqygju4gUicDIjZ/Mq+Do4JnwFPLXB1
HdkRiPGsrHv+ccUni47ij1ZP2x14PGw4e1SDMJ54JVoEGIK6lq11tNELnRDUT3qU/8bwvk+mMBFg
0CTVlD1Jn7Ws8o814csRwIW4JulNs2wVh4dBKToplxDf0P5UP94Ic4evJqSkZBrDPtD0AiW9EryG
gDDcjlLOBl0dQkib3RoxiJ/7x9SO0WCd3E8jkyjHjFN3ZZ3lL/nqbHrc6dAhdoQFUcuCLnMcTA3u
VZQhwG5pjap+rorn8XA4LVtzd+Mfa2Uq0AXFEcVvLR8R3RRV9HKggyItRM8fl1cZbksGRmNxb6+K
WUuuAwcDLhDhgHFuosxKkjAlZRl8/7p7XB2hhzzwKmM+eheIRtvI+VKFljIm4XqZ5oh9CARNLonj
/XCv4Al0RNqPQrgUI1PR9S57HgBytZnKIpJamHNDfYDGINM97rdKIt51jNQkh+rKr+zj4hgosKQl
Be55nj6YQXcMpKPO8eP5brf91paQkRqkuyh7gRlETkTKMWuHYBQhvz2unRIrgiGPSQwBqxcH3LhH
eEWPvm6H8LWWboStPv1aqvFKaQDPV+zTn6C6d58jIh+iMiI6OFgqRgbunBXK02BGJH09BAbPgo/k
U6ssXrMH1T2aqbuM2/8OJ5PBV99GKETZL5QTI+/J+AUvI/eCpq9Jivvc3Sv+g9geITQUU23/vtdy
cPlA9c7L+voGKSusw/eH0s3ZUo2iJ0ege0TkvcxJlrgDDodz1sibQKTY+M8cI/utE2/bwTLC9iLt
rLgwo3hFfqjA/qqSIRo/Vikzc0eTIimVQj+K5laQlrIpR05O+vK90TdVHrnhqG2YTbvOYgNN4upu
Aufl6yA+Q+y/hw6n0hgJiCpY8VF+/rdh9iKItX6uv33ILUCm6Sjr3XB6uFhelw8/37Vivv/FOKC9
Bg4zppY9PTuprVgOTdMakYmy1FubfPccsH6Gn2ckTi+hA5897F+dOqNZyHVWdZkYkxqKK/mbcJj2
3csKFhuSuXlDspTVyBZYzA/ogp/A55QWlnP3e+nsaVt7M8E2wsLyO2jRevydRG1thhzJJXboLqT4
4uSPEKRRd/1lk5y00wWXZ0fHgdejykQnvrc53zIWlZR4CQYuLMrgN+pmg/HDjMnLhAoQ2vcB1Wzr
CuNmthlv2k8nK/B4s9sdKy7xoSaiPm3l9u3mMCVlNKuNUsrs57SWmiAHodNDMXav0NJouRcidjtb
G4zt56atUCKV0tJpO0RVCzKqiuI9LDOL6TqVokTzwJiW+7AVouQhAlDhaje+UHj56fevCKUSUwey
Xi4HYE0v1dOEtGeBb+zU7l7nP/ZOnbrjOuR8H70OHrnkdhFI67DZehJwQRBQH/aVDICn1BUg/pFD
GdED5f/HxDQOcO6ejlk61LCvaO/b7F00LyWtolhm1SBrJ/1tXUE/s53bqP1e6CKHhks+OfFTaHdY
G+5D+uq0kYGRLWgPXclmxu4YSsxwqPEdgKtOmx54NEWm/7FoRiHinx0FhVB5Kv30oqdi0H/yjDFH
p8BU+KsuMERFGRdx3DuEQSB4f1hqrRoI2RS4Ockw7tsU2rD5Qpgc3to2XwQ2oqT6ZMa/g/j6DPsd
jrQ52FQ7bbrj6Rxqty13Gl5093QYVENxyTZqCEP0IEN2wMolf91tZ+eR1vC/9XE+4nr5DIjprFZY
Y5qOcmwOK5Umqsh0BKhQ5w72blp513nPEeZGK4QxbxqVg+05D7FBaho2vH886TnAM7YZujsIHupn
M1p/L8c7THmpeWluA5qZpRcJf93wOM8vJahTMUqhM/i7e0rwVlKGFeKObCtfCDGD/XaIzi+Axfny
59xtj3sjLCsJsEBUag09oUwXJCWmTGSJhracZS0IXPhYXj8dj75WIah/VOai61xTzA3a4c2cODHB
2VEER1ii3LyoYLcGQ5nsCEDFR628VpkQ/G4vgEb7xLTZRomJM2gYZ4/NoRY8XL4e3MPUxxUrPe4k
MxtlHbbrQ7iQs4AVMlYELeEZ9ASNGEE/sPMmavYCnW0aqQo0siX7EPcpUWFpxes/Kaeyx8tGPYmQ
jzTgPptt8dvsgt18Nz/dWY03dOVUaFWfffPXK9/vnZazKJNEIvE2U+7zGnn80v2Rwhfuj6WgXbTN
jA/szVXKRIPQfuEnKzPdnGTY/b3FMN7h1Gl37/5/JnYxa8y9OmLlTiowrHuiMKmxBrGhjh7Phf4X
cZsFnRLMZx3MV/DeLDv3gluq/hueG3EuvyPPmBbQ3RGQT7huuao/AOxoKte12g1T5eASPi+znBhx
ezuntxrCKFumauTWzs7N9E++rCduw9jyz+MrOKSu4IoyWPk28XMjEpnZeqjQcnTuoAMSBYWHkx1U
71Sc1KIUDXc6mNY7ZWVDw33KzNToHpehXl2nf7x0laCDy42xMqJzw4D3uf2+Ht5aoNkGnKAi+OpV
2U5lcGedGbVrnxCg7TnGh+9pGqWCNWVXT+ihQNL6MY1yDCeVc1lETh1lsaq9Ke2V8Uj0rUgWg+jO
aJ+Y7q55/siXOfyRHBWXZE31dnvP/0qxzyfmp8NkpFNSHJaqoQcl6haNktmFDUz52MgndR/DuK3h
REN6r5201tzmdyXhFpmE1xdvV/J8NWjFLiLYAzF6gYF2QS0vDHFsYAcsZjWE/imdmsNgQFRi3+nW
Mi1Zb9Dotb8/HuPMMSyx4JZBRIzuWzZZWqUgCeb9XNo3w2vH5XLHfrwzWAPS2VGHcMNJ0h7Kp0Bd
UIe0TEbOhRxZmehSsHuMKYGekAWoXRr6LWksqsRFhMiz3T/y5cHnLdKsBtrh3r6ucQWnKuuTJSEC
qRK3M2TCl9Ohbl3PpKhvbiDzu+zd000+S7CzViSgwSPMKG5qRrVshoy4McBFxSNXGBwEaCA0qS2h
ZwutyvhRBv4Dkgea5zdEzlfkP13v663RPoPlczEtTIFL/kI5nC88RJuZX/5A9DUV8jvf0cx/gZy8
x9kPeanyhMeoU/kU3OOx66c0meDRp61U0cHQW7QhTZ7EXNjl6A2z924q86ccK/tDV0x1pqBapmRg
YgDrEC6yoxC72Xame4RkDdaVcBGrG2gUP5v47qN+C7op8NMUWRBXY1ReAH3RCVjcYN1YzQ6AwcVO
bfrinfHBhfTD6ZHhe8TP4HzWTJQENp2TcLHaKgwYLBv4hn7WSDQTnm0DfVB+D7zO1uIOILoN3cdh
pmUAv70WA8ljRYUB1ZBFvRoZe0Z1klZ+QFdkCW+HHLXVS005DZ4LhLbyEzWnSfGHlpnZK8Ig82f6
iKtGyAKd4M4384proaniWCDyoMJnD0Uc3L+mjOcUFhvN6668YTS2zBrwJ+1Nhvdusvl1y8ywNE8Y
65276t5mdtZ7VEpxBQeo57PfECLMP+SllnjThLdVpkmOLNedZTEyDiyRIuuIt2M05pOvVo5im4zt
hPddRAxohObfvL8NRlD2djmQIZdejxeoxxOl+IS5hId/rZjn2Znuw4S/aVR2rzSeTbpUMz8JgdDS
wR9rEiRJIin0+NZ+l7Jozt7yiM6kG5N+olaWql9brnsD4g2cAMcu3ekmASRqw9ai7js4JbTTub9d
l60E2vwL4LOrLAk/5lcFIiT6hqCVdn7C3hIPdP2Lp3z66L3ADPTJdLpZjJEytz72ZFnKcb3XSSzY
gZRu+YDftHyaWZXUm91YKot9+wtU7XeSCsT12AWXad9mjf8y6ke1buYfLTfP1ekHKPpLPVzQxzKe
4Df5kfNzLky/vIdApJMk+ZP1GOwd1/zD7AIa11jIXPRHnAhb9Ea7ZW9qzdbPgQ7GtvbWPz0G7Vgz
XYMVySPRiBA1nohGFEwLwF52Y+fcF8JWjh0f6zK8VxuoMI1LGQ15MDmzFbe1SaV7BKoSQu0ec9FU
J4vTOZvqALjVkhgB8fvvJVD5pM1WOsjiOChcqLA4RUTPf1Ddfxx0FKXEdiM6RP4uCejBEGtwop3I
9u9oG9O+a/pevj7ZL0hJqodaI+J2jaxERIwAd4ZpLBWktfZQRo6HrbIgLegxVv8cWr+siS7WBZP6
x4JpFk+qZiAjFHePcV8m4IFpTrn9D8ZS95Apy7U9m+72XxeA8ivWpFieLWyAyOGLmyba/xxu6WG8
sv/Va+DPXsp4qvCxO8vNjfOyUyp98LtqMldYfaaj9vWFoNoi1tlB3pwngreaRTf0JB9TAhe1YKDI
rrPxr3f1VP7j6qOGsVCBE+92D9jDpK8qOsuv6FnAO1tP7LtbOmS/QKs18WW7pLIshlv25fys5t8t
SZibHuWtuSzyavXacgbmGGX26vgu6GBkIYxt3bBT97fLntsSdKzNHxGY1Sfgu47KzFgzpQl3KdlZ
eIbfv8NKORAILA87VKmzyuIOfmXoOThc783F4n/rxUSAQE+yOy+wRvUX/hfCIQXD1NhHop9eTf6M
xuR/t6GcZoGyU5xIeSSc4diRqPdEd8jszAauevqL438rd0ukB//U/TV2BAK1zD4UTEjmbYI7bmYR
OUrEt/3gX3KuaQNW6GLjgaBRvXu7D7E/Ss6wvbVsCDq5ru1rukF4WHoOkFjtiO89O/rpBD71uuMS
JcONDBqmarrZ78fjada/U725HctSn9UBG7LldBEb7yVy4H2HNq8a2rW76P9td0o3WVycBrRzo9+l
YAKq5y9gOkUHnk10yWb6AUIv8AHcmmIYaW6KdXKf9U0XVPzFLjctW7hI/ojEgQGM8KFoBTKU2Ze8
htY0YWr4/ydM8cKy+N/UkWAXim8lyDVAZD1WIplDhQ9oU/Jn+eukb/hgJVeCt3l/e5Xro19AOPGg
2oaOTzL40JCt3eqctaqLDxI1zVpNLY9CTD6EEQICFyNF9sDljQ/zG3ag/TcuIJUgTruyeaM/mfr8
pTVLqWoScB5zMPulqOOzK76gPxX+TOrhmES02VBTsldzwe6t2TMqrt95lHWbhnUrRAo/NNw4atFl
OnxGDVyP00mn41wtC0oIhCAAguYLJix27g/sPdG7Vfy9F4k5pPPW8OOW451ytv6P4XnXdYdTnPeY
dSNj+LPoRnekI5P10ucM23hjmoTq9c9jiSEPLIqlSfU1QKpXFRiQeVLwF8tMM2CC2oBLBRT5e3Nz
n9ksEj4A2buJPrMHaPVjWq2MJuVA5GfFsUETFguWcdwZLan8fKKnkY3BUnCJ78cVOClV9tnvL3zk
3vAqqIG7iOMWzafZnHXbi3gxaZBryfWMTz0vUutVdEDrnlc83yKNeris1QumH6C2afuO7N+lkUHd
OssYHKAuUHAu9Jv8/SazZsD8+QaIFcliIk0AJ+XMr1PBWPIQSOS+5B/e1d+uw+rdLooTUqT1PLBh
GnVRCwBM2S5d1RfPtBAd/PFT8dM6XV4NSAnyzLg/OPOU5sm+ihZ01+ChPcgvIckTU88xE1WqmG41
gBeHjFgwOZhPWi9keW44qS78L/8G0afD9cnV/MfsZzbwLedx87R4H32JnEseBKuH+EwtVOaNeTyc
rSUgo3ntKagq1aTZSTYYUnapj/OUUma1SkPwAA0gIYnl/txDAkpe/fG/YEtXI72YK9mnCrY8Otcd
kb9GMKMUhNweFjGQ7l0orJ7DtQZdvQ0r6x/T6F080Box12tHX3wk1P1bYVrHPLAySGpPFLZ6jnzM
Y8YRcETzt8qC5N+Yg44c2g8bLu6gpRuiYl9FlqJhaoKzBwzMLFGaDRxXlJDXmGsuyTGLTwe2Otrv
XYdcw9ImvU5xbEMwv/y6ZEbsLv76uXLdpoFFUDUs/U2mj3AwHXHeykQKRHn0Fir/oaNlGPj07M8X
8SJSK8M5IljqoPXn1L/5B/FSsNVBDiP/DblC0RAnJmL3hZztN2orom25FAdKwpJbbCtwkkvO3dsh
In9GrTbe0+/17bBWB2LqO1Juq5cUhKEDSEMd7nNVv/r+RcvyL0nZzFiF2Z3oHlIXytYCOq1GtBie
xKxLTbzWJm4GJ1kKX8xO2Y/Q2SLkFRXxNx54Z0jc9/gJed1YmGU6NG/froEJouv1qdHPKlrxdzj5
jYFKNVQphyiM7u0UuiOYTNqc+1PH/8cZY6qMjm6wa9EKj7PGFXl6WEXGwUdYWCvmytQZHSW+5ZOP
W0Yo4rvBf4jLQhAVGl57QvQ/Mz4sGP2W9h2DtPo5ZoGdFNQ1SlyYGZlb9xswWtBA/Dyjqf43tNIX
SLmBCSzxdIOaScLfCqUiXX07j5P748Y9A73hcpk7DRBoiqKkXTxNolj7fDlLb5JbmN/U6jXNd/ca
fFwpZKtJo6c/0iFbg2qVMhYVgPCHrfKglvJtEVvPn6MP1Bii3ZuBfFT4Xl7IHB/w+4M6HsLoC2vw
PS2hvpC4jvrIvCqGSOcHmixzB7EpfvFGtfAbLQ2Q1J9ep6GP5M9uxwSiprInQcIDBOZX9RZH8aUj
bWusRjj+pxYYiXkWOppkLyLlBlKLTf0GjBKoqMPmkznVoJWAcun+sGBZGYpLi3v6SYMSFlWmhEYF
dao5HGmgtmjYwOZVe2KiXxDmM2LGO/fJt0TIVZjSGSTYfqtJVanzDCmvswfa/npfNCwjKMhpEesc
F+5akq3UzSa5grP4AaD0JHy9/Q+RzHkFpN4J6RGfzyIyN1mb/dAdy6h/V7AE+45kmAxXvmRuvXuZ
M6e6meAwqB2FkMfwqhvEcW8ltinNMP7Mu0u6jBjsi7bpIRKO/zzXP3tN8h1f97ZJ3EmL9AomYGuk
FfghzbVDk44DKoi//VBExJzVfWCK9GpEAxsZRRoADPDw1U7/IHpiYASJYxQXhZQkGHhLXG5AZRlM
3pbqvvWJA+RtsjBsEoDovQY9b1LWpsxCm942LB6wXLyCFeFU+PGJdJlPT2IpJzwmwOwo8y1zPiW2
2TqWa9Csz4oU70OYwRsnKxrwSpaFXMYAqyyAALbLLd34oOpxa78kMw8tiy1fQQRD/qq1vIBPcOyw
8tfAAUjUi2Oq9keWUyNlwAJLSGDa2wR0vbEM66Z+83TBrnj+UHoMu2ARlf/Uu6106d2P/JZ9pk2B
40bCCiex4LScwGcU5/+ZSZC+WB450cyL5b5nkwcGvL7s0kQx0j0G6JFWLaHrGSR5VKENx7rYGv6S
79pw7xT0Kli+/quKAjvRdB0+5dvJgaSBD+J3tHcQ2r9barJul68cdyEXf9b+G5lR0w/PED2rg0L0
aw0XrfRm/TGahBti7JFAOyG4+CAs7gu+4KJJfeB+L1bv5uNPZlY44u/2ciTJJO3uPgpgoYQxPIqY
KzzXBVYcCd1dc/bwOQmFqll89NlaQ/Zu+x7qBi2My22TznyYZUg6J2oDsFHvPlHPxJH1KNE/OJB2
h5cdSc1NR3SuByKBb9rENAl0jfDdFQopyBjtfy0e76C2HUkTzRu6ySttmUoue1rl9aAUvhkhtHLy
i0AdUyIPAh5odsvb+TEu/I5SVqxFzDNBDx6gQEz3nlAmE6kW3RJcNrVBB3Qc+rI4kJCzfurhLDnf
cm1Wa903TzXuauavVl3r/z8jwwwf8qjBFzJSN0Dc4F1OkA1p1ZGoT2dsukyOZXzmiohEJQahWsYZ
hDVpL7r6wjTs8p7IsR5PZCPUo91bYrUymvads32mBLbN1a0KRiPYUwqw60nQAJmo5n+9k1xxXFrQ
F1Elw2d48ur3VHnMpk2l9dFQPAQ7+pHixWFr3N4t5MDDdGa4P6VBPpNSKmy/SrIWBGAK36ZCyYv2
p9oqute5/1pFK11CaHKVBfjtgNmpP1L79pNzDqBL6AMyFXTNW37JceIAzoWASJQAo5uYM7RgF8TC
3Y6dtNK8OtMCFQ2o4vljMEPBeDxgN6NSu9vPK7q908IXld430+u0B0IHDxEY0YsRbqevle0658S+
D1wlg8L/vXPs8/3mqh0uaF6jJzp+26Ljx6QdAe5taTTbxheRFgpmUL12XHw9HFRbERIC8o+upQ9C
FHsoQNBd2zQ1UQAOFOZ4v3+udX4Z3xfnkDHNkgpCE4UC/jHaodqJG6lo3WEDePqY0r2oy7NO7Ocv
I+2DRskjSuOpuZD2G6cWKgHR/a1k6eQVhlbIQzd5fo8XUNmYEDLShEri1lqsnAEVtXb+aYTmzX/i
vB1J60mBaayzln/OI7nGTkaXBNPdVmvo/rdNVsj17Uz95kfWhZ0YM/1LwGUm73uUKHXlqgDk9FCm
vtYFlZMXpSKvKvjKNX1ExzcjdRkQhGYRh7kuGCGpX/5ciJSkiQJRvZ3u62b2Pno7CoNtXeklWHIW
wzSIjnQZJzGuKdTvCMeKbL8dBAkWJtO74lSrbZZvCf3m3gfAdCjhw98SQYJHFz37KUDLcufAyzoF
QriYwTugxBCpQwaQzrSucU2N7Y5I6/7XCiwCG7ltIw793Kg+vfwVGTEI4zdb3e3wxFCuk20yM9Mf
8Z9wV6K/N2mxCHjN3+GEpNf5PlaMs8fCxql1pNvwsUvSCCk4xt2GZ7+dMYNMk6nK+KTiBnsD7Vb+
ov6Yy+9MlPhlpzOqd5k6oFBWc2D97r1omc8dNoZrmdAQSi7dBI26b+Q+UjdqLLhXKVjEwtnnfTtl
nOfQxv2EU2baThcaurtiPJjs2UDm98QmvqXpJOG+jM0cQ284K2V1UD7UEWSaWVd1nFATBu+BWrQz
2hGwbC33aL+KK3bnYJFQ45U7yJ9XDdg1dwK1SwFXvoO4kXz9Hm5IyUdVrikbVLsv3aemMq99F2e1
2tnPyTvmdcGRMzlF6/DH2w6+ySf/UcISKS3BUmp5MRLjv+eRQzd9MI0v/bePFDCjZiTt3M0CIzKO
JqvinEZK6UfDlyE19AE6v3kT/nP5qeY4r0y7uWrmbcS33ZeLohZf5DRdeuhDH5EZwR34Q37V26E0
jDrZ+eDeurAz8zohRawjs5RNfQFXW1PcuSQR3JJbegIhXm7pQ99leoihQS2kdBcOQB7M8gC5kTqS
9LnWimPZWpKwSpGDWYjfqDcGHtyJI3TliVq/A7pikVK0DgWVy7OEl6dgQx7m+LU5zZVAhbLEVGC9
pxCUIZP4GrbweE1GJc5XWcDmyctahXC7rZM1UlKU0O4Y9UKxTPvP+kTBRwn82wfVnh7sIQ+owykY
Ot3oGQbYN+vti+e0n/a8uAIyvB5UzJXBzQvzz7Fg7NLzZxk9GU4f/1sQra3845ZGc4E7CYbLEsSh
SXO1mvkq3zJCPuDwhkomacY7we/rLPjOFXsLWJ7ZFOeM1BPP94uuvVlhFGakmTnpaH4VHEznYanX
bR6miNnhXyqF1zGVuvSLroque39Q7yaBpCkmkDrEqt2VaCKEV3h7kjQniXnRizBcAV+hhUPDepm8
NNA0UGdtLlQHedXnWfPbQd4OHWwUFGBbB7yVLmLiycOcx2i8oDnKzkuhea1P/zAPwhO3JNz8iXvU
kDfwsN67PAGqB/7j3DgT9POOqu+ckwUC0D/bhfTWojRknggdMY3VL40qETqx0sm5gN3vh4eNaCyz
lB3s5UE+CvHS/1zOlxuaUqhciOzZZkqeyPYdQKaWJXDaA3p1+y1F3AtxTGVMOOCCO6xBENOmxWOr
rMqYnlDXfPRsKaVHWxZZVVqPQrfmH7nwBJdqwGu3gwr22pgGmxhZv2s95FN+TpC01TQnzHC9Q64Q
vCyYPB2c4wBoc+1sUC2IzxEwn6zrEyrZ16ckiCxA5wVPC/vD3hQXRE8nbQWI+aGQ78dv41uxKLpi
WdquTkaNQsRczAmnk9rQ5NixgTu0fKCx/wklcxbLV/E0xdEPZcNYA8qmKwppfKWpKTk7+ODfIP0R
SeZQuPYq4XWlM1r8YG9pQTMvzvFQp+dZrmu/FycfBHMYTnek8i4OpMuqy1VGF9jQus53+cOwL7J5
iOqaCCnMIJigRSGO2kwfS4ZBWJ2lL4TcXCzSQLskkTBENtLWzOKUee5rdJa+O1hJf8NBDpFWlqsu
CJZFpXq62XIMf093UQYt52g9Kj5w2uXASsVV2+dVjqn2auUX/j7sCeAhlVeg9SFnlP9S4/TysP/E
yM49DmdIwblABxJC3evs+WGid+MuFHlAwmzkocTF+aHjgahPG4CgxN7cRVRhvAAA7hpfMsR1FaZn
9pM1AVi98+x7MZynQQb7fF7vsEVqM3XcnUsIuJZi46Cu9IbgRpu11q/HLHTpSjq/LtyepW0NMSjM
RrhjdgcQ/Y7lOnA5ko9qhXYVYLw2RLSfBLSq5NsPztuO32cdV7wc/aZjMgyoCMEnqSdrhhyu/F00
zxPW+XAE9Goq9P5TH2g7rp0MLHu4/NjFypyMmhEq+LjOSUWW3lgF7CjhI4x57o1aI7XUHwYegU0b
wkSKAN6qmqaPnZQVqhjqkJwuzOhZ6m3UqhgY6MO2Ce40Jid/sCvEtgwa78pcEfN+1hvIFfa8LOqO
0vXPm/ywM1Hx8hJgIrU9UgzDR15Z7SAYyYqjhnY7+KLF3vggDUCsXko/Mc+Visx2wnN21ZyehBK6
8kX/96ouhSE5TziiS6UxkevCHbYYtg3ag3aqck8dFooQvLK/AiwZsM3j++tPSUSxPnBiBO6ovvN3
dUXetzN7vrpNsZ+jbIKx8LP5Tn89S3YwbatHeZYu7YQg37lqnbPQzCo9E1jXUIIkuSY7aM4Hr5eM
eHujwc7LCZC2LEIbsMikgdj5XQPGJABy7p6GN493RTLfKfI8A55GmuR+Y1AgjfHtzhry8IuvD50Z
gqz0KF+EAWX4uAQ0YEDk2GB3bdr57rpN409XDQRmr9XqUxrIJ6NF6Lk8PXm0s2OnDheIhInPSr48
BxWljSK+Ky9EgClkloFtfscyc4662uPxBXcCuQ3b06cMYe7X49mvgM4M2gWvxMnFFN9ub/h+jTv+
y4Tkki16FeosQ6Oc+87GvVre8OBYi6ZxyrC32ffATERd/aM7NlA7Atd/bNvpMxsP78CQNnJymBEq
I1lYdSS7yHuDOgGqnGdpdcpq4ssjZyEIY2/l4U789xWxK44lomPio97VbRFSiLm2RXvX+Cn28XwR
AdGTQAA9M+TUWtNIb1g2L0eaNuy6FveP6p4eu6DXE0CFDCTvExZ3WegQhZpWdJaR3NVyvI0qFTPV
HY5qQ0ZlLNcyNKoZjrzTXycoCaQpj/j69zHMzr02MMweCcgy0EWszmp9LxvRua5Uoj4jC329Uz8q
IuvFK6/PvtqCbwA36tGprU3vccUgFyagAc2pI39QwFttLHUtkfc5u/lgBWdkxjlXNhUkaRDpxoyO
vWZnVsp0ESJRB68DJAzf9hLRkmHaKLii26GuvRY0mIlsB18bERYAQatpuVdxu8Ks+nK1uwY3ct7l
5SsBVllE2qgs6ybtNO29lrqq9bG6+Pv/ITmV53fjwMgxtaMERrOd65iYBDX5wEBSj5bYtOQi3t26
wo74mFShwHxXfQqtIfN4qMA0aqK2jB6pRzNqPltHwiNuZ4CLERxz5Rjqq8tIfVAGSEQfaMYhyycF
N6Ottz2Pf22t55eTlBGvcEA6idqdDu3vJx5eDc4CqaF0evRIjy9D1OntWTgj5uz7QU1WdbXDRZJs
BHrWuLcmF8WBjFS769NLYMNHJLR3Hta8LK7+Bwj96rVJtEpGG9mAGUX+9MoEkRKx+54ZMtyn/9EV
y0WL5vOpoLB47CtuLYKEICXHXAbhwV9hBr84CCloUbguDQLCa8nARaLFD28KwtD5Vfb4Dnx/x1n8
tMNaLCrdoLvmkRRDgA7pxktOBUIp+o5+yTK+QGo7yi+4Bj6L4fR1uo4bfuFqPAOLSPtEVGdxpEa/
NmKa7R1As3b+6L094fbVC6skY8DKzyM9BML2HIPDHAQtoltqBEmrdNFqr1mZ4iUnkrQ8BPYEcb34
AaEewhqoDKmC6ZKMpT4p8iJ4Xb+WiuAXtgwPD+t/95MQTCNL1vRo8GclEiHi07Zbbv6IyudH4w7U
ZZ5ctLOYB+Ai1/nplZxboTJTvHb+oe4d7Ef5w755a9GEr5lwPctnFFzs27BPXoUNjeoHFnmSkWdN
EJYRlpJJzDEjWi7hlXlx3uyrVNDegAcEp0KMOp8AcjsWiw7aaWIHB4UVBbX7eLE4fI41Rf9W0VON
ePNkyIDGgGDS96kAgX68Dc6JKFqMXP6BtkrUvXhs7qIuCBDItWsj2EljwqD5VW22L6BOdr49O2c0
9h+F9N2CVoBYKBlcICi8I3xerGv+mgetP2JaCMzBsuVqAieF77YtI2DUbbGOvBoVjmsWtXTQhWcf
HrZxryrrvV5lo28y3oUXx7oCbubGR7J88NqdUAWdRHkBRoZyAQqwHb/g/3dqHxrL1fdU8ugY9Jxl
5oRVqi2dPgAJsnINCFmCSDqJPEMh78PEqBm7nkeFLOYDDehdfbaBjZlKxylQcUjv7ugwHebNBSF/
WPVb3Xv56hS6k2Om1EQ/G/Slz99hz5Ny+pkCQP/cw+ZaemWVEtp2xFZd5o+oyAR+zdA1PWQaDwsg
w/2P4+mSpYH/yS2bgkm7vuPQPildH/c1bAOuMFPHNc6jwmnQvhDJGeHnUFTTbV96NLkzwA16fwuL
VN2Be8dFVpyNIZ5z3sF6swJNnbnKmXDt4QqPPehLZWmn8/dPDw2HHNvVkTlc8llXLxZDmyPmKDGS
l8AVoGADZPXwPx9FytvGOXe5DTN172YXkP4gP3LfLjK0S8BH1F877SlE//8nIQ0UMGz7EsPkzNAH
gWbr3bRVVZgqxVIhE8lSwIgkN9SU04yvTKFEahitTsDqKgd/ttnTP/q+yzDlf9iq8i8Ix8GwN91K
wi9fIn1ETMo9tMPFXHS61tKJwDHnApxrJm0rTMgPq/j8MdaNbJYovwh2P6vAzfdIA2jnkM2k343L
QQmd9n6rtrrPTOo2CntuIQb61ZBPymnr28R7+NUWH0a5ghnw/f9cG1gwcn53mptyABVRJqVFwWuB
RdkoYpacrAu4aAqagd8d6iJRVLTPBgT9SPF8/AOKFASO5MA/z4/Y9mvBMp5cOkhM7ZP8xITU8JB7
LiXJTV4PjpvHRDRc0XYnvLQBMMq2Zlp9Kd1YGyrBtZmGtKN/30ubm59+n3sT7btMt37KLIVGbQjl
OdDJN6gct+UgXtDGbKZCMDtVH3ftAFprzU5b4xoiLgunfnLpg81LcigJMAcBvLlQ7dLmH6Peypq8
NA8mkL1a5AgJNsXsORldX5BLJ75is/gJtiVIzYG7ZREFE04hqnfzVSx7YqLSvMGB7jfPUFhENcnC
esyL9h1dKRKoAstBndphnJP7fsrjAkhpdM3yHK5Vkv46WMOVB1RDE/xFiPeY1pMTJJRTro8VfJKF
upTCwGBlfWd58YsVADLyYrORAh2Ctnipj+inA5L654xUxa7dLeaLjKf4MbWFEj2AxjfefXYouCNj
6786SfB5jRPn8Q+N6wm9dXbETeHkDeBAtyZkbIbZSqLu+QSebkwqcEfSnRQTdbw/slVi/6FB9NqO
svF4YGpsWx3E/F5liruXy1hLyXaRv7oSFr0iXQERKVNeZyi4X1LTmkQL16kDnVIxVyuK5zwR3wuE
kdhK7HitdCytBZiut/x/tZeonEPCeLXoOLj94JNraUBRzdZZDPYwpEU/QdEtctR9nfG9xOn7J2rN
NVF64bJR+TdLCKkp1c2viFxB5bz9m7pb8r2se7W9IgzWK+LQBfxU3h3LXdpQfnw6Pc34CXKoQuRq
SH6Y1gSZXBWE3p4O2mCd0rvGeVnV8SKSPn4CsfbfQDOAlkvdiPuuUHVd/bYBNmBz/MXe+l8b+lex
pMtru/V8BiIKKanoGeKkqGHL42P0fbNfFbJY2I49awALm3SwbXM1NSHCEfXB+4XJbqA6AP5rh2Ee
kys9iSB5N3tL8LbRbLZ8jTS7VlN15ILbvX3fByiWzsCV+3w7nSR5+WenoObPpxmiHbuXBSpBK8Nb
yikwnKOrTXNgjtKf7WwjKhYKx3CVz7TLAYk/QbCS2NDFaqqWgSOop1bMqv1soQm/S9CvKACFFzmA
BrtXpPAxDZZYjELg32ag8M9wM7/kU14L6A6JSyRKFVagacGIKBWDTvbRNIrpM13VnctBifCiBHa/
e9YSO+lENmlWFyTRdWL6d/GrQMh0ualG8VqHqNKvJjrHRyBwYZ6S9gqXQwmGbCHWMy1g8mYSqQN+
hI+BRhLfQhCt1mNWNcNeafoHk3+sp4q4Arv+vK+BD7nHtG4FqkZ3DN4/pSlJhhE4rZnFxJmxOS4x
JsbWRif+cL3id0Lw19mmd9jpfNyW/8l6QwyE9FEoZ5lOhqwRESdEX4970pSSqg6TDaNDgoOSyHum
tgWQzfws5kXJf7zeML5sxbDFnA/a4qEznnAyX/2kmGmGyLSx8bDR7IDwxTo2XuxACoocpFxlw41V
XsaKtYStgJ22uppFkthYv2ZQbhXAxml+TgfSwsui/Byo5u0zg8uhR1a5/lYQThRRvl9qpXBGawc6
7bUffDRX/E7mgNwE4xPr4qvQyX4wdPf4jI91p+iHqfyNTFSJtvO2ac5izDlMjXcXFZDtGK6Otwkk
CEmN16c6kcR2ki9kIsCAMNLs+xlDPlZRNmbMrWSHxavbmrpMZPV6BmJZKbyLSain5w/a+UBf8M9E
jSJEooS6GBA5l1YO3X8OmLXCgAWD9hkvSXICSePF+RX3eLxmMBsN/4NYHbbN9LVZNFGRBwFUprw8
xVIoFdC67HmsP659yw8pz00+mWeotfjjPX7X68fTMrMD5JiuzRUS4K05CjkZ1FzVwl5+T/Uek2tl
x53YhwzBoVn0VPV5Nrvw9Ggj+0WTpLoThC9Sr3EnxTWyukPhto9b3oGt/891FdjnXkURnA/LJFTT
GvJ2U+/B9wqouGStyk9RTPuNbssgSnf+jdKYiielRtW0x7hevFqhtaPcUshlkrss9wlQV2mIXxhh
efk5wiF9XwJ0IuhgBcURJOGfcq4ntHrJKN7KUPe1oQZz/DH5wmh9WYLUQ+pAyW8hXGkbbLXlN3Jy
ALau2gr+/axG3qFkWtD8ZgKXsQkY8Yg6kGESbpyCmaQ1/DXbU33MYX4SzEO2YjspCJihdfkHJzls
Jo/R0fu/yjXbmUQDqIKeAUYf2XuF6NgylzkGSGeyyvbkUV3VWmjxIaenF+Iopcd1Oy26bfce/AiP
WVS6NXmgIde4MMqNY2vFAqikqTKsexEwLrRUhLwP72kryp+IiYD085xspbDzhsBNSs52qqSF4h2M
cAhQo4a1G8IP60DA13QElbXfoKRbPBCAoRls2zu87jLx2ZKN88JqDZCfatESeqhKnCXwPtAajif/
v26U/QvADHip7qTMeTb4C+zqHCpso2n8d+gA3T1jeOzUCcCwnCXooCtZAfZ7U2C+GXklJgraLvGy
Q9GjOfzQAOrCBA9+kkWZ13T7tY6eEoOjV4SkfqxPofg5xSSan7dDJ13VaEKhrGupinblQr4skLcT
h5/lq6JcszMPqFgIgGZI3vVVQLOZrF89B6PyPDOJZJhs6jOe4qBwoMia0uqhNT/shlYHDod+R73u
XPKr9GxYGrl3N48MmoWDrIZFKrWniAzCMWWB5x9QvCSph2t5qnI/hbXELc/VDNck3ab7c86zE3+M
VGvF74nHjdBoXIHOJ/cn8nTEdTGgTwvrB8SuBAyOMn5U2TffJleT5cq2fM7shg0vPEIU1b5/SJGv
nlqC3YcKAPKs7tyF0VfGfGOdW6wfFjC0VNW/1IX/Hbe6V0kGNIf2UKlxoYL050ydgRT3cUo0VFd1
grKMp3NuCqj3TZiE8t1wWhaj+pzBQvTyrleDLZzAMQlnsai6qy9aGiEJZjG6G+4vYHtUWBNZ0mqF
7688ByPgXJiTjdmRiz+Y2qS3Ixs0xRY+xXX7zFvNJZf5h3o6VCUAlfRxuBthMrCBYQ9ymW4R3Ab6
wD2ZsoNE4DOpBFgi7DuFR7xoqjeeyP+WyDohlxSOxEXUsEwBY7uIhntKXbQFZkTn/UxJMXWRc3Dx
WNE/Y+wDo08nqrzvJJcZrr/zbPSg2IH2vkf25EtYuAmCbbKe+BR/63MtOHeM7ALd82SkRedhNLXi
aOXUy9iM0+zdr3V7BHvnPZG9zqUZi7x+pixeKVCrCTyinuhLRShu8hkYR59rHc/+KC4v0kF2mEs8
HoxdupXIe9WTlPn2FV1lF5C4cxEkkxmgBbYSddAc5hNhK9HiUOgMqDJySrSBcOUuHRtlPbiZrIif
+m+MwXTL3IuUkcBiolTP3c8U4Oql0WwD7SXZN3BFGhdKKSdJf7NEVojuc7a7b9plP/2uyDKHOXwc
XOlr6JmbDoX0+l4La3Hv1ALrPtH9hS6h67stxaWuCffvtgcTi5N38DUps/MKZG/fzdjkwNaN+Whk
QZj4ELuEdZf6x/6nZNiXUdc6hQfrFH6QIT5VYVXOuY8ZwjdNsYe1aPjJLl8dwcPr/EnUx6Llr3ja
2OLWo7dW7SSSui/xzT9Z3E0vvJna9cWJMkh6i6S6HI9QT5zAZF8HfZjCKgqLuGSMvm6v59oLGIpz
UsjW0RtQsOlzcA1pWJLtqtUsYoMWf9a0uZQjmdUonZb6MjIa2UOABY7cMehCZ2Pyh+BMHtLzjFXU
LJmvgOgFcaUkDeyp1WqI1YNdpWc+HDNicYv4oO1Pv/FVqwhjgFeo4mNEbFGtrbjaE0Q/oYykWe1S
qYgYWI+75NFXreKhZMiN1p9/SpFwVm6rKxdq9diJqRY7bi0qsrX19eS5x6CWP2slMfoukui3HYpg
1pL7ke6XTPjZmuqGLMF9m1udkA+28aQs4CuQ1y1VYNormy/eK4xdhE8q0dTCzvg1O90cEPyyg5J4
evpYog2M7ylFXfkLZZVCZyZj9X5vWZI4B7dPGFwDQ33TeDriIv3zucOvcb2xx0xeZnOTLHStLAiY
Q/STOIrpmZjeMxMTZuy4cfLicZ8J5bd+3pOZOpYbipoMQmQ0xgJNDc4C8iBVd7cTPf4VlAm3dfDa
zodzU3X6pJ7amoXUqpua2J3orBW+cLOew8TlHHRvDNDF1GJ70PQe66YZp/dur7P7R9yRpaV+KPCS
UK6/Zp5jI1CyAgN2jiitYJJ4EDCXFoyierj/SvNbCU2vn7LGwxzoLEXqwNR0ojl2j5JYoaJTzcZa
/4b7NNGZwF621Li4Qrg6S6zVarzHTUz53VpSypd3UeIQTJuXsL30PIC8bViSi19CJPyrQpPsGlY9
tWHdOXriD5TJ0T9lks4ERzAD5ehs99jbqHUxBiRi31SxMF8LHDHFKcGMNVriUxk1d8DmkHfuTYgc
0PcrORwQn+UsfvFOcmPOaWyQ5iDPYx1lN+CTzm2MYK4oJ0PM6umpk3+zM1l353p03xXlpwqJo3+h
cVvXwn9VZM3xewqEOFykvI1yNEAcR6wvm79IBGPEMMFLEDSd1XfHEKdM+ogEnDUQ99lJFdr9tKoq
6YAZAxTyGMn0tE5MTtl2bxx71sfE65sTs66weJkULR5z2m7uFESmCemCMs/RZya5FfcnCV2IZFPw
6jCyQ+REMTbqWwFJustVm9KNEWBYRLI7C+vCOXjZ8AK/5IbYbvuWgUupDlBlc8Slv8EYm7NZnVP3
b7oCfDtPhvWTS0ZrSYATOnMzbIEgzoYU6U5jLeufJedq6UVrpBss1tT5zKjSNSdQLcrZlZrr4GCd
KAYK6cGnQXqOZ9/Nl+a/b4V5XAnOj4osfasVGg7/6PilDcbl4p2LcwANlklzEF1fOqbUl9IbAL9L
g9NvXbhKKvsZ1wS76nU3rbMw1fjDWFo9ENrCGFfJDFChkZuSbFo3x0wimtr9BhC1pvhJ8az7i6wk
qEV6FniOaVy7RNF/eAwIr8QXigLJV8jcbZmt/dAFZMyiJeftjL+HUV3TYLVkWlC/aPpfNEDw8sql
+vMq0UGRl9cnPRQG/ZDqyqo+w8SMGKMvKYdUOqsBkg2x13ji8ygJYs9v2UaDvKa8x+25pcXKjd2w
pPvhT3qCsnRYe8/qpWJ7ebMiCFi3PIXhGzIwiHP81YRfg+Fc2islqmoN6GVuo5Nq5zUsryluHl+F
3eNU5AOBuqm68UTS0GGn/PHlrUR0zq9P5yvdtnQylO06eHY4yKUK+AMNwz7rJTyoyRRHQSRXOLTr
xrUmvgQK1rYgTa5cfTfFm/tG+hCtdQ7IE4QcOne0TUnah5+pAY85j8aGU0vnZQ3Xiz7xZnuqPnY6
1fVoI1lzzESfknupLdpIlPmB4TKU1gbjVsQoGUesepAfFLhI6/c5ww7YnkMgNfvHxV/U+cSpnSR4
HJG9tiK5pd4z8B6ygf6H8uGh05XUjtL5vwMPU1kvNaVyVVeh+GVP8dsQTI0N699ihc5l++IB04Vf
ItNz3tTLmsmD+FJSfdsTvI7tv1XYSn+CqB46tWWNvh4vBiE7xkIh74gmJCCdKwbtR3f5cc1spqci
yuml5WSXpII26uiwt+1oP6x30qI0QrlJhxCEh9aqh585slDOH94NE4HeT+FD1KAN8IJF2BdszGhl
A5+cIhO1OEb6vntC3syGzW8k2jkq0ZhPuG5oVHqcnkFRyFEmhjUJJp31JNFexqh/eSSgd6SV5JiN
keilrjoADLQ8ypWh/3iiK7vUBlDcTxVoaxX1z1BOuY94rvGPMpBAEftGpn+h1cB3wru0CeYV6w9B
pbqFX1D44A00udXkXKhDaWjw4+sbpxy+ruqedzHQ4XD8h0e8aHj6SvSglLAZsGBB2ynX+/3r/CI9
2pbpg0aLakqQib6/34KQEYItaUoI7rsBKJlYxRrq9IPAWWcRZWTVmzQQXmT2xKenuY6UY2JTMdlv
c00w5hRejP/ndefO/AsBbZ3vZuUzyQv7Mlxk+kGF2/OcmbjAmG0AD9Ri33NEepeF2qzW1Tly89lj
h9v1Othre9vef8TovvjhlogDF5+M39q0aHzyJKYNjWbtAyTrl1FaqPPZTg4MYDMZu/vaG68pZZSE
tiq26aDRJU5KlB5ZI6xeg1XZIPUnkxnjjFnJDlnla7Ik8SIhR4abMtqwWu4fNyhXDMSLh3bYMFiW
n2kD8I3SxR/yBl/0RAYlk7/RWc0nyDRuQiTX1YLamtTPrF4Y2XNkHWxyrbERfu7+Ev5eLriTB5XQ
sF7oGovj7vCF/FWODwrO2N5H+IC/2dwz8Pwr+/HWOmz5RC/3fNorkS631r86R0Iobww8b3OH6n5F
yXbulMb8xEA4eBMK+TK0r+9419h8p0O7GugNbu8ql5wOKUEWus06JGbUVIRadR25SdNwU1ZYBV32
U/zTwCU0knzShoNz9ffWFycYCVmD/wftCPRmQRO9h+d4ml1mG0xrOJgc1w7VJR+G5c9hQto1JLjO
mgdepaQe44n1TFjvHaGWoLBvq4tQxEbRfCssgaMfVKiGY1v9VipW8M53zbmpRgQmJyeLK1Q4S6z5
SuBl5HKpoqwN7kfkLHL21Et/r8pF4GpfFv8MvpELpdQiSFcHrfta7QcDqaYFIW0Jc30RYmNiG+0Z
/Kw6WfJ0kuajfKl6T0GCtPte0Jm61bejkYy8xqt70C554WYFs5x/dO/fGH8ArTn33VrtEt2FSr7f
K8u73H0AFcJCxoQUcVoN8TqzuVpmvzsMMyyot8PktlsdxMg4W3EAG0Sksew031soJ991XHmVy3in
SrQ/SqqIeW8uJK7eUDZ+W7AUmtsbB8MdIkAi6GMSIQjokEDwPHo/aHLkJ6hhZmkJqyImjFWJLNF8
B333t3psRajGT6+OojUZh8mgkP5nn8UV/N3LJORkULbMZGRErVzyV0B/+FichKXlGBg9upgexoZ1
Sl2DagYneDrSt11Drvc58yt5NZJwHsYPE/spnE66VoNSjPhKqGwpzRoMLTPm+Xx0PpFvhoJBRkno
Cd+CMuclPeEPYo7pxe6zaQAytPDySSr/mpNyhgQ57xzl60wt5S3AqcriLA+wAFp7zruPFn/71EQn
uRUUBO+xYwFHV4otJy/KvJ+nFlxGfwZRCAm9cN2LJUyXxC8c2sCLb4D2PEyvebzNtV9Oo5YaG49p
fsHGdS5Tw6DxYJrpjZaYezc4KVVfBrP3FRj0bLJMbIif4/td+HaTf0ZvV+8LVMNFkivu5dDpjIaN
Jy8T3pXdv5QiGvhrR0WdKgDiPFJuubRv35us4KYHoL3pwIyVqlCtdf1k/JWmOrbrjiqczN6iQlK5
TNGf2Lp+q7FxxIMstPFJliZ3l5YmSo9NXXv3PpbEhHNB2G7exzj/pqrWvTwkpRLqk1ArLXoqtOLP
8qKnLgD9e+Q7CkzWOIZWfC6GJnmSBK6dA8cxbkmvNARGikydLYPpyIfTmS4OVGcN7KInXFGDW8yp
pnhs8u3Z+Y7w1AxSZsRiCjQXf7Q5qEO7ZWYg6EvYinRBfmnJuQQ/YBaP51ui4NnAuaojZ8s+kcFZ
lyRkecGO1USn2jsBxSsAbDtfjjq6RLP2pi9gYCaLU6h5E7y/8umYg/I5PgCmBrQ5XldybqS7W4P9
+3u4esEr/NuuxsnSg5UcMiwqp7fuxcPWJBf9h37zOPmWiAsoAztt2vzaKi9RC7T3Fv8fPdv1j92O
lHROtkvtCKpQkWnk8bhVgGVSFh2JBFi146JaJC2HOAhyCtft9fG3WQOctn3g/JOKfjK/m+dYouiu
9dsF8xd7RWMwjVpUoO+HGOO5QCXm6Qp3CLRjO81LfLhXpN7joY606GKnvF2St8i9l1Jw4SEQbS37
Rf0c2BrGwEqCnwKzDz8fBL1IDxRjHHf88ONxrnqrckHZr7+duGAKc4RWQKU7LzP/ct2Lq9Q3gRb6
Asxb9KyDOJz5qSC7y7DTlQZXf56g0aRQSHQJoXtiQf0+pUtxfQxGSAzetcT8M/EhzWkqHHayrAUw
8fEoDCqhxRsCVFIuAKSffnmN2va4Xh24Ykt2iqpRZP7zFReAAC+cPOfVAAADAAeVAAAimUGaJGxB
P/61KoAEwZinAC1CdniJla0ImL67l0sbOvEX6WlvcA4po7/eMSGHR1tGn5JB/PVn0pr0f+atZAcP
RVTENkzki3C4gDBm1UFC+9xh9u5rqIleDM0Xm3BZU0U8QDHogznktAHDcExGV43RKH1UKYWiXoHX
rdsRHXCJWT/CkiF7gvJ1fUdSEUf0TvyK46zmIBPVaOugQyCc9WNGHdDc026nnm/t7TMObuoDrQAU
D8BXW+VQsHiX7i5FWDhkRHpfkEylMwyS5v43J5RLdyB/XtK6fmFbFtRaGEQ38G82uISmjtvwO4vt
8bpihEqv3rbw/hXd6BWIwycwK8P4Tb6cc9LnTCOOvnx98BYRaAGIW8bikBk7HB5nv9gMfZTIFCb7
GdF9aGUMO/DNdjL6kw0W6qcrJGORQIb7zDuFcU1bexyrskQhNlbHBXD1WFx0IvPti2xGQH94aOG+
TlyCgy5FkUWyTqn5Jgi/6WMnTeJAdX/ZoaCPsQHbyfqZPpHUzYQ3TI5vxjkb+V2ALL08Kc+tebP9
GySoQu0qZxN1uKDlrQV0yf9px6A1dcLAhxrIh4qKvZKZVrrk8MmEPfcEns5sGqiLhd9cMMLiDgD4
ptqnbxfSte+llpSQlZv374jG+NYn7pi87VRNXUVsveTHxWo2YhX0q+wxPDvPyhPxs4hiqBYMhVzZ
Hqjl0tzGMwmt5prkOcbDXjgbSLhbofXWIZCrlwplt1Wv3CiX4YmdWGvmVZZCPbt437nYEdZfqs6t
hohGBKVAKdEhgQK9Bbqnrn+IZL3CK6sVNEkHhJk/akT3tKt4Taf+2fjGNd4VV/iVQVJ/1WWO8o/A
Vhw1jSL0NvPLZ2k2AOL7js8VPc3HBkVL6wapXy87czfBaqxs5gqaqQHVXaL1VYQFuXXccwUs0QXh
KeAulnXu9HTiBnLdiQsgVnj/6fvFuPovODpqDSMuzjYPXFTlgVBdqcJeeFn+PtFvk0wSARZF4Y6t
8ILg2f44yvdUIclb6bE0Ljg8eYdXg3Llr5WBJfqXJB9j3G4I++FgnJxd0ajA69csr6Edo60lVe5D
jsIBG1b5ysj9PJP//OUtGuCHd9mbbgWO8aHEOP+VpM+dv3Iwps1QyLUtr91fhJaDljAEDVzlkWWB
JyY4UEFSq5AQustahEKNIgoqZwj4l5S0Vqj7fr0C2u27M9Wg3tRmCvI3bMD296gFpBUav3iv03tk
lTUqqaPjh3k7C+JpgLwovVWsELOdqePLm5XPQBEUx0v5MhSXPefPzPfLXawmKOWXBfUhinY5XeMV
8Vx4G5+xChz36CR32pUfGUBH7evO3OSpEH6qZtyJ8BEsc/4AZ31AVBdPaUfzRX1Zf4vHdr+qO+lx
kkNk1jq611CxUtmgmyddhoAZYEtPHmjSgHfoPJmzgx/z/rutK/Lhs4gAKGjWj9xNgQUW1gXOQfs4
mcV995Pu78FWTvNwGYSBHyfyZnKw0csXC5NyhGuYUOve9iJC/nnlXKIsjorqMQBzJoaC89mEBZ2y
0o7EmdZzbCMHaQ9RyaHhDe1/a24RcpSCvnEfkE0KzrrD8B1ZGuD8bl4856MYY9Z13frjsbxjQ/7m
2UH9am9cXDyJXcvU2+kT5YfnNYosu2gyH164n3fK+XAQ3/fYV3h4RkodpP7ZUI9jqgk+3BdlG24H
t3/uvieLsCnjq85+LWLfsmOjYBUc5SEySieA7IobZcn8WlLUwsHX4MHBxwcFxCW65vMxsOrCDZQl
P4xgeNs7d7gCCVYLKN6SafQ1Rl6WaOIPj5RwkyPpYTq1C6St91M7QS8x96WbUcvPF6i5cyjMor4s
VPadvLRS9yurlvlYe1Zsr9kEVnWvNltASZrnOjoEVFDXA+JwjTAxyCY1+Tb+Cdz9ldA1WL189T4P
RcAKICTka43gPwHFWgmaMRW23K9/2OTsYgewb7NmtlJ0gNvw+siU8iab1Yl62B9HP/xyp2NM/aAx
lYV/gOb0wtDEqsmQMqabJlNGJamS5Mw93rqwcSQPWvPYi+vslmm+U5svyqrQGTNSdO093IsjLHcD
bmJJkhWOB5FbrEF/YX6WclSfttlx0LMoSafHNm+Uo6ELkqqnBwwDh1JCyqz6aQANXszIfnojzJjW
JMCJ1VYUn5gu6Tx2zBtfNQ3Xv7ldUpYSvrl6ifskve/YP66r1ljs1sAAKLbSl/vTMiLqqbbk6X+Y
h4yIG5+DNcadOv0xX2seBZcF+RaDceCOOmvhSxlHT0Nbesjs+IrWzVL9jcnHAlwvAESgq7HTu6h0
HnmZzSuwCVGLX5IDGV5gTsq7CKo5uQ0ImzxUqJZP/mX9HpQPPSWV4JqBgI/bMJbuN6ActWhKhrme
YE8V8MJVqblwo3r2OwBQwa28irOT1IgHtpehubzckMjTFn3Fu8wT772OQ/rS4ckfePFydyRfEa/5
KyMOwL4waojY7ie/3DTQXsmHA5Mm9wGkKy5cqlOzrCnmx7DNowT47mjKPOnEgyCwdEQWxq0ar8cr
86pK09SwJnTzTu+pp01m50aaPepZItMjncT6QazqTYmoxRKTcEZdvCPH76ThfIZ33dDI9GkHmhRW
NW2AvuWasJFqtcmgst/4Rf5Y5DUXJQPRw+eHGecMM4vl/p+fLOprrbUWUSLx2pRS5ASLVdjskjPn
IlR097OuOi8LgdadsbPzL46B+un5g3jGZNsOH7g+41uYT2O2xaOEeDtztJtFSQI2DjwGdiepyzJM
aBpWsMeZ1YVzq2P40fGeN9vJZ+ybiottTFpIuV0GVHM3QN7zo2caYV5FACKMRwZMF2m0gcFEFeVf
aj3rs2grRmL9bOJPVfvgpIXV3evodf3rkf9HL+pwhdT2WN+sqm/GmT54mw81nuzRriZqO6g3w4K5
41ovnmJ5wJ6zM5g4wNfV7PaRKylNg5EAi1Rhqy2q0Y6/5ne/tWCSlNr6i4HHz6WhqTqhV+/zaO+2
aP+p27ISbzMXKckEYrXz68lMkBf/pmsQ5wzZmlS7Et/MGv8Ya5C4UNvqCE1BXaMASXnrY7fbW7J4
W3ihQBoFedmZypydhVLphlpCkayGDJyGlodGz78ZOSiF3Oz8uf32q5QnKS8/ol8AA2mbJceg60kd
9ed+HJL4OEZ1dXqlxVAnRX+aseUFDk7FMc3trqMYZaeieM7W+Esp8CZFU5Oug5eQ3kNJUO4Syaqi
HyTB1rvBHmCtaUyhCh3Iu6F/mu6YN0yhGZVtszp6FmWwciLt7c+5uMZA6wDeo0TXa301bAfTamtb
NKmgZg8QsqI19omFbZvaAoOKjChiQkN4+z5pb7GMAXBWvsv/VZhcfy1R3ioUs1v8M2RyYuLo+CRf
TxJX1j8Z38OUuUFEHKIyE0HL9MKZgk+qiIiuSDvdRER7Unwe4hEi0z4qDQolG86zEtXx17F/wdq+
uxs0+kogt9VvKGfRwBuGxf8EUHPVjopA/GemYC+BzvRtfclwk9cqkdKYt+lQl7ZeFipaWEUfC6rm
KfvSyIZ/Q7fC3roB1RY1fodhbEnCFHozu7kPY33U9nFvJeE0ItXB3G1z/TrC5p+GEa/5OaeYn4OK
KFdGpKelqO8wTrFsZkDvW/jBavis96vTuTYinEKcpCTtchBcfgQpmGUw+zZ4yVF+uFUfplmqKWBl
GW0C4HgYFGHJy8p5VOwRCJDZ3rUJOCfNtTtkhNHtYL0pKsBkDxmdRHNiINkoyNggbEKpQYj2oqqi
Qaj7+GMTowahBbie1LRkaUEtmR/05jvJ/2upVCE50hjbVTutkUZYVa0HcZAF6n2qp+oqiCnYd4Xv
fzlJbDBpz6rxhOUvVuw5QoyKyFy3/9kri9IrBxOPWU0B7zhLhPLf1taRkOfuDNcyOY+s+GE0QsKL
d4dbn3Q7yUK5V9/cz7+Dm22aulifz5Or0ofA5qinH3Lc2ZVH7abTqAzXwSvhSj9aS7Kuj5TTVUrr
E4H5XF/+xWLTPPgRIfcWGJU91mIZQZmuvSr51bCQuSOUxDKSJcw/ED3EdVsuxWDgAAKmOJmXgW5i
yv0w4+ZOqiUiCB1MQXfrUQF7Ev+3Ct+BCrNxdZcnH7SmG11HOu12LdCyFnSCdLRRjJplrJjeVVDg
8wLq1SSun5luwcun36myO1nPb7+jXG1TWsUxW0GwL1249UXQdz4SsnMIkfBl94xY4EKh7s2QDmxx
xJoGrNcZaWQJcmYaX0ejZfMhCr69ovDcqZ/UJYeorbDkI3k1WB3dgpo6HKKuutq8ZHI/l8K4Z44d
MhqbMCDtGUjCR9SBo/GlCUvoKCK5FZGzVZn+7B2EmoUogzgtU6mc/YPtUIogJpqiicFYSM+0h4+p
vdIxsB7E0Si6df2/5Csb7UmzksXv+GhcVTFCaNRnjq+0WHJP5xr2qehBANHPZBnX6rCVp4Ntt2i6
cgdY5Mf4rtig7z6NnUCbYIpjUdSarXWHv8G8eIw9rjpDrFA6Wkm8LqTt3pEQGBGC1flfKn/HzaKt
/9leus4YNaKhsn8jXee1+Q91Lj/+8Bld6kDeO0V5GTpHb8zBURZs02GtZlsbALg5AF9+SDvZ1mAB
CmF9EF/A3jwoatdo3bWnpv20RGa8bnv9YH/2voomzEBxUQ/CwEdxge3ZYClCVRp0Vf8hhCHsnOZM
nsh9hKy52R2m23EjMhCUe8X1xs+NvHCBq9LMyUJwpkeM/+6zFU86SMEYRLZ7/xIn/Dh5SQDtl80a
8FYvf3+zxrIZyGBa2Lje6Aec1T0ISKryNS07BrfV3b9SLMaVaHj5d6iovY96fWmbDYDwL81HZ58J
wSa4zq77EHMwVG0SS10dQBlwxN+hdGnp8I1MBCnt0CJscxcJE62mgOpAdV8BHxRzt1tN2xopFyS4
ARRGdh95cQwsGFl/al9RmsDjj8Fpo6OFSv/0IuPtyy4xw9SNvjXcbxzV/mOQJrKiQJePVnUa+p/N
sXlYQ1/fLV3jlvzxHtqT/+vpgDop6fmBkDzc1XCbs0p7ZV4K31spf9OJiMqhuqsnaZ5Qz8I8s6jL
Of0kpzTmQngmULgJwPMa7Y398yA8aJ0q0+6i06eIQwhLGXyKy3ViLRA4yrksiffUSNmd6R4mRFRs
Fg+INyfwecL+73Pc79fb/tcsWQrVXUp8sgf4sSqp2BJRa7VXX/kQe1gdaUW98ZrPBiCoDguyg5YO
jqBsEHpYBk+R8laBPUJb9EUNU+Dt2wDDWtThLzB03nNxcxsrvVrceE6rgsxrFPDlU81H4RyF9AXo
F50LProV7SbDlDFu8ZMwr0R6lfiQbkNJ6SNMJNmPVPghgIU26aK4M+LTYKY9wQNpwRjcZ50vdJY1
2Lx1TMbNSqEevaqze00P61V/8FoDSQbo6hdv+Ay9nAHAvdHDEbEa7ZO4Oui/gAyFiZK3OcIYgKZn
aAOE80mX21Z1Zw5cAt+wWSBGgVA+WtGyB4VGguUjKv0BoFNLm53NYw7v7/EUQNNvwb5BKU8isU9Y
R97nIN3uOB7fMmM0CzFriaXdJ1/pEjDxxUTkSa/VhcWizuBIXI38xzAlE9aeSCBJ/boc2qeeR0xp
YQcUQFSONCbp77bh93se3P/g/s2pf1ASLiLn67keqvofRlD3xtI6QKanrYByoGvukLCLevUE96F+
/Ekqcz6rQukWXGdqjQR7sXeW1RbDmHP+9Qkzkht4JdrI0J5YMUBQMEt3T+3Xd1yuUe6QvwbaYaMC
EfKWDxtr0XtJXPOHycQIOK8n3H5eKMj4l3uWpU4hNgdqkBDEColjVEjZXDwEC8qmoaAS5wSrcNf3
TX/+4ONYRyU5vdwXJRD0QRXmH67IeoRibDu5yWng0hlwTb9H+mrx/GsJdHNHUFZTik+AZ+r5BiWo
f/nIsRjmoGnMS8Bsz8gwoDF3MFfM7joQ2lT1DkSOiTJIRry0tE4cas+tTjxP1H3wex4sPb1fKuS1
d39zh99ySHtQpF4soddJmP/LstoMZvge8F/+43tIzYOqmgypHRR/mzOWuAV2I3gosJtF1D1nCdx1
Q1deKkK+1PsAwjp5WGV7C4g3N63maKvqvmEv75D4CQRGpEsz7sofvcd+kDABUb/ZWEFSCYn0a4y3
3tbFmGFjoT64FPzjbXlzfI3oUTQv35V3LZYKLKY65/wlR4cuXjHu+n+3VffpqrOgeMgIVs/KSoL8
ux53Cpfw2xLMcFwhTr/g6S0nm36bWKxDclcWsvgYYgTwLHgSIUfTxA06SrksUXT9oiG9RAF6m/gp
JhyEuq1GDOstAtehJ+cNCmJ78p7O7SyEl9xvXTc7XDPmEzdPQgJ2/4xtSqTXEUfxFZQs579JrOed
tqLPa6M5UL+1L6+O/OcDJUGNhhMb9Y0Lng2AljZHJwW8M4euo6WO5D5L/io6lpiODNSL2wpE/Tsf
LA5qM9tvZNg3O/pv9I/L/8SlIAFg3+2B+jGFLu4yA741v4DXveRoCJpba8B9J7R/Jcys9L3kbFq9
nMUfTWbZ1A8M3FbIant1yMGUtLjaTAIFG1s9VC49q4LxZPiFZCC1v/6enlX88WqsUezHxFkr1SkI
7ICQ9ZUCm37YKsv2unrkJFYtyJpmj4zeQGjeu2aHUfmjfGjOqeBGBaW74x6h30e7ew2WrMEaUmnD
JdaAg9D4H51SATx9DO0/tt8/pFAVRagUXemaFwUnXlU0sl0YJImNKikZ3YpjZj4b7648akoadkt6
W5VruGdkGH1VzvUjUevfyCA9IUrscX5UU7/H4ZCoFP8GUwNcSk8UphyAFbJdgJTg59b4pi6FUKkC
WSTbz3HwaBPEWBnU6wzruX5ebf1IXIbUmng6YEfEVwTSbNo/P0QeDHcODR11SMlWRDOncvzsC/6f
NoBcyYjCO4H43LzOCV6s3K1O6OSW/7SBvlcC0uVvdKFLYj5L2FFu8X3WAIpIZDddQlKLJgCBd1jN
i4b8rvDSFmwVlQNgHhszBPh7cO2fckJCVFazmj+EnI2F/MO1IstvePHbEp40jlofgfZsb9Qnnrp7
zlX/lBdIvfu5CYY3NJio+fJBdh0IWrlzVwdxx7YDF24ozUi0rS1KXB4tSa6KJw9G5B6tR6PhPHTN
MZfkxQdSwTKd53FvY6bQWtR4brPLEQ7yCcM2F4/Lp/I2UmJPrph9ftc/QTl3IehfbrQGXkydTIC7
MXcWWXohIPBLdZ7/mXqNwZw8gHj86bdbgKAksrF389J6LV1Ayl7MNvJe/rKmFTasZMvNXacErXac
5bOlrDEwB49wfKBSKHjLEk4XK0dZ9c9qCa/u7u1KUjQpwMtbrmwspR6uSIwVzh8r37BxDWL+S37i
aAL28rabV4+siBsWAb8nqh5JKUlF6M1GwOhkCy9qQMkQNN682Hkic8VGOULmEYRVj2+mxfYhrA/j
1X90HgIchgYBY0dtjZOwg7xhWAARrEs9nxm5/yZU4hwFOcL/XxGiK1x5O4sEtSrGQ6gQc9/d1Elv
JuGEX0CALFsF5Wqf48nrVcE/jZSRQmBIOzdGZf06GA7ow7W8Y+Pz5wqZVrvANKyPQTYDYfoUgf+f
7ON3OIm2MQ+nR1FTIkx8onyXlRq3mpaqKz150d7oGvJLDkRxaKAAPbKhUj+gQoDD4tPnTS3qDkDr
E148zTC8517wG7zawz6P6d4k6mciXDw9WJoJtc09a1ysfune9mYM0kayXMezdXDxyCj7ARr0que0
bQn30R80PlW4vm31dJyu5W+hxbnSnDv0WBBabZ1I2Gj5KVA9Tyf0JBFCQgjjCpmOVMZ12L7GafhM
I9t/d7uWRiSbExF/5DqZ1z20+qJ2jEbAPARCAWqnE9y/wVH5XbwkdJlopxygAM3/KSIJJTzK/cz8
4u9MUZWUJGxnR2SDbgTzR6agmfgVD2tRR7YsU8NS5xV3K3hGaNubC4KZ1BmFCT2+NFrSYFpVoQZk
mS0HFH/zT+R2j8SgwcocbHJRUvBGG+OW4U3spvx2duoEHQrChfndhq9DXfqavaO8SNYNRy3D4I2P
YYCS/CxfszI6uXE+N3ffGs26227MgkxE9CwJqpsZW0gs5mzwn3l8sYL3BXJtaDhz1AhV79VbmnEV
HJhPOSGHNzYEAP1FfUnLeRk2djndiiTcgonexPzV/RqpgSfmKBKJu+LQqgx1m9MRFPGlpr/psKB8
h5bxnmzEjmUYxlQaa7TKIzaHhpkc8+EjUfTpoqFqlvK91zlxC5l04PBebyF+Eyup0jRWtzsPmzMK
eBAbDw4UYiLUzTexM9ysMdnYpdpLe8ZSpp5XsqEsm6QkNfimj5m6000HBdu9tcalVFeqFkhBZnUK
gzgXV+6PCyYJKdJCS7k9lWeJcgATNOsFCZoZ0Bfc27svV6Xik+k8p25mKvJXOsm91qj0/RfmKGFd
U34SOM4HH3D6WJ7Vqa/0zOEJXDZ5AegSR88sJYqRY5Y2NiUAfYaB85iMH1eFWtB54rIaIKMRfFXE
0jCkddhEU8pvGr1WG/0kYKGkDrvK3QN2syEyKO7cy1+0OrTbb1wIcpzZWzBIks08+htk33mzZ3Qa
qyizqb3WxjhMyn+tW4Vs+WyzbrKII+vaRhR3WuNcsgr+MHDXPTQzclYMi1Y1DdtWRlArgt2j88tT
SU+gQ5Mx4x8azZ9vPEYttIoOvJduCGs95jboFiuF9hS8XWdvjcwkM0s56r8pItzdg6LcFiBRzt+q
dEC43VogbH82hRux0Q9zGtQ+a0pGKXXjikIIWUiDGQX+6aN/ABVTREVC5cY0sDOQQOlnBLjZvGFj
MSy/o9FV1K+CffSmfL+xUeutE4bXaEbRUYOXQtmbfzDuNhLgR00zKSWoxj28DHn+pyWCluFw5jkD
O7ZGc5XR7DtKf5930Rec7nh/5K3oOtow25WKwtdyXSjbTF9nMHG3VpSRQLQh0QPeKIsY3aUBPR61
nNczB3mYQQ1zswsNTQipK+gX5PDd5T9dq09653978cDiT5NBJJz6cQOmTCsqgyuMgZX43bnYtIIp
+kXsrM+ykw9inW69esqeXdjXrURCY66cfEml8WcHQogm1ECMsqwLV0oS88LzzEC74TenGIFl4yQy
OXycpwHg1zmXnODkroOiggGOvZcSpmrxRvluW3yCk+XJ/u5ycDWJgoUctDkzuwLfPG/HPDQZvzuA
3SpaIdvuMVmInG9RaTXiP/0Y4NEHMBElkV8LzrV+pdvcfXc/QP6wkp96Wlb/A+lCYPqIxpB99K4k
dYPvF82e2bYP/OgEnncOGywOLux8kdLg+1nNK5ujJMXqc5jmIUJon5sp4fsN5dPSlhLFi0sAW8l6
K3EdHlorVWVViyWHWZT4EO4kWr16MFmTlVLhKtCGRmubOpEzx9HZ0QXMt2ukUMWjCsb69wHa4gSW
6wHKhiev+Ai73WAdyWxZg+fTXVnpBweAghVuy8KTef22FFBIgJjS5hZljSYfWvxpIBjyqXOy5zX3
z2OkMCNvEgnVTF6zHn2aNTEjomusPaipHgb4FgkbQgwIvc3CHn70QsVDuK31qZhUB17M9mUuU4Q+
+QJV9YJX+YxA7+rCH1F/1dLxL194mws5XtwmMHWqhrcGGL0CKg6QoWRUdivnXQg/+34Ll/J6zHrc
mW0bjrNUv1gZJCMDIR/u7LlAFOPFN0eLD6re83KvSWrBcXO64Yj1sycBWb0vdEPdWuax5aIvisdb
zZG7LXKSrEFo7zW+At20u4N1SzkS/P4YocYV4sSKkkiDGPTfpBn7XeoV3Hp+kHsLAEPpbKGCYbaR
fsrXNj18RgMFEnmW+2YzsMqLpfAZVxgSi+q3+gGhwyd+Qq31A8Vzqws2kIURRkx08DFKSI0nMRys
GTARnQ9L9meTrto55ALNLp2aBhCswgwRQGHD63Z62ACkobyMX5WcKR9ybJKybVMdv37U/zYrS1e7
/X245oejCP1c79RLBWKPIa/Fuq6MUgqpofX3eP7d0O6pqY34ozLeSKY6vLpnA4sYMv9iGeJ+K5jM
VVCcdwJeHGzSW1CTNNj5eJScz4btZNHFrYeviCc87pQE/F98pD8+MqlIdq9y45PNBYtVter3wXoD
prC9mfHf6l3jabJCr8EzWOhYFI1n7VIMct/IAwBTMBlX1rj14nD1sHaR8irsw5grszlBM1s39fPw
Xwp9LsSmgjnNcnKg35FOsLbdkeZEJyNLXIK54anOICkh/P3kLfl0Di/cJ+1isI9tPG9yDcV9YvPr
h+Cdk5E16jV+qK98EWLL4VOMdRYrHkAUsoQw/an38JDEKsDHkAuGTVuDSY8WTYa+hEfPlV1AXU82
H3sOBKn8Du6UaxBkFS1kEgQIXpl8oOFelPwGxrLfTk6N83rm4HOnpqNpPgSgZVEyoL8FXVJAeL8O
vcedOTiwkjNBQjQ6bg6s61OyLHbJH5KvhUWD64+TPO9QXcEqApM97yDHNNadRflmmfFwL7kUWbXk
OB3IjtdHfjbL6cctNQv+TMSZjochgJhelXPQEjtXq9vDAlf992pUGCaQtqhZg8dnixYG/C8ih12Z
PklOHFetXZHNRa7PB0A5EyfZvj1zMdnGOUf+8z47CjPa+Jtll/EAEo49QjLvtb/5Eo5zyfhHBvsr
e5Z8RZnc/uFGh4ypSkGP/xlFNhC/q2PGuKdFgHqv7xIXP0hvJsHC9VVGOIAYGf6Y8fDPMX9M6DOG
UrnmCOkcRMWZyjgy/uslRlt/DPK/+Z/oMHnbO3NOKdwCLhy/NYUnRUdLRvh2RgQKKJWsK7xvIyQJ
qyGEpFMTicJofkyb28aVdV3CscXrC/kli02IsDdDxmLcF5ckfDCwyZpPOSU/OW2HpDbeNoX+I0Pi
jYgFTLKbyEDyeENCC9cjpD3Wk0Zg2gq1kA9hYA8xZDGjqkJEwKWw1qnCENgZQL6c9wMJHU/q4V4f
GGVIapJlscxFSX4OEyh0sAJ+cxZj6Rvrpr+uxE1YclOPJGcWH/sCWuInwXKcV68aLJ6AxzglS9wi
VKPc4jOnXYrg0mdPMzd4bf9l78pSVyBYaE8Hahqqoo87TX7OSXDBpj4jRJibZilps5SLQ0hViz6e
7NjcoelRNgwocFSOwTlX1vbDxPk/TnWVD+kOSQupOAG/KyMN+sUaxRcZgWQUZziWyR/Bye6AQ0sq
OAyFGPo589WDhXPxq+qGT50lwAdwv8qZRgkw+qnrtGFLqbrmYtrZyZSWdnU9vRsEu25R4nghOaqf
ck/rLj+4oRvyWlZUl/D64opzAASfjyybAwPt9oYDKFU+Q7VLCqoK/UHB9h+ryKnAq/byB4vf5MeK
fYYo9uecU1WMesi3f5VOov3YuVH3uCpsQ0N0qGHfLiphJjbOXP+2tPmbHD9IOpgSm1Aaflb+r11C
Z5smcnaN8wu0L4uKxrAc4JZ2U3Eo3lKOeo3QrEWd4E0dXgyxwEU7Dn4+syvBMep+7M7+1924+Rtk
uL+R+Ipnwv4YrmeEWZpKUMDlzy0zbYWESwcivSazzkvp5SxtlgoTXqi3CEd/MFe9U20X+gU7fQxq
BdvPyeXYjuNLgJDRjGRd5mOH4a12wJg4++iMMHk420BEvVIsb9iCL9mKl6xDSRHYQtR+EgKxA78c
VKihNEdIlaOPG4k3/me52SZauU0zsp1EInsXjVnORnpDEcfwQMg4ay6QZVg3g1HGOZrDvbuIbpFz
OWESagiK0tJkk7I1wt3QE6gl+wI+r5+0x+iUkFyYvzJ/TW/ggf5iZk5DwlQ1BJ+dTPJpCjJdVz+Q
c6ZsHINk0dnwMRx5QrtNpS5GpVT+aYT0edvVmZL3iMDHkb/cG1d3GnCyCkTQFFJwcaU2ymsu2Hr6
EH74uEPRGoW3CVlqw327hBwAABVtQZ5CeII/AAMkZ3AEWUf+gqpw4I324BW887g/YvmgoXH/QeG9
sBAMk2+cvWxmhDyOLgQyyGXXEzlHvi5yxE8GVnhCaX3Ks1wR0xOI3Q29til8OjA/S5KvnJ2ChJLl
eoq20P+qZDVnWaKwg4tW4GUc/WmeK5AC+Afkr2QFGehXIxAFmQexsWPHQ1P3lKkdp9IKCtd51cmJ
Kd4XfE/Z6K1gEW+KxzKL72wWMZ8eXJ3XnSFguRxkSGVrYSYEgTaC89BcqI5uh01jpRV0JaglbyrV
g39sfp4H4e4AoIz65EXZnsDHWyRP6DMG1cS+5DQ2oQclP0FoCusqTATu1k94pJ8mmauCrgo0bxLr
0/MClkb14tdly/ZsxsxaDzgxJYR6fmmqRZkmXoITFAtGiy6FXHfTN26TeSdCA3Nn3Mz7tuo3/XaY
QK6fK4NdBGwDf/qCphwANegsuFyWSfczSyQtniDiUq1g2tmYz4Ki0MrQC3TB8yL7m0rRtsJQBWfN
qH/EX9OCyZvIH51hNM/mPjWhFMWJHuonBIHe5NuVid6xBHf323jLmiyO58e/T5IXwfjnC/6Pqp7y
qWGTTRDQfZQz+ZIrsp4kG026JERvziw1d+v9nSiWDhLyPz1t0g7Q/zA2pcA2fa5q21f74bgrTLS8
1DLQTOFDL4d7OSdZtWUo6z6k+EHeprgimSnvLgkiqtIbcP27VZD5Nzvl3TQbykPDmZEMaZmj4X6X
6NtQYq//dWoDoGYEall/vG7roCO0MKcIIOTsv6YNQsQ1IxdEHM/002fvW6aD9HK8Qg4KazeLZ6KK
dQ4J5YOBcWdezHx+AQRgdO6Aw9saA4uwY5myDUr8u/N8R8u7zP7vhZexuK+B8mZcZKwgLxsYYtZ6
58972KxfxS5ofeALO+X7+4ZUWKEOndtvtzhYvD/+PByFaIppW13bV0+UdHzoETHehs0+HRstCQNN
6ujj7aXaE/+SC78bLprDm41FOxa9swKl5H0bTf+qD70v/ue5IxVOte/GLhbUsqFg21aMTPhAp7US
Zv2JqBNyyFDGPFzry65Y/MN4Hc+4o1HkMAyd9cAI9wk5TgPdLgJ8jOUE9X75zz2FMfwlJBOoeZi4
xnczzh2gnoYIu+rSqk48yezD88yrrKXLYTf5xH7WWZuS7Eh+PLt+4nZ/Ef9Ci7q+CJL9fChlXb2d
6RY62xanrmZmWTKSc7B5vBVDUGScpbdQc2KhLV6gmoonkVdBs3hRyi3SWusZs8mCaJtVDHEQOvTc
vY5YqgSSYaHdz52wqZ+81b6WK+ezq3TZJsg97Z4fUR7oxV/8/Qzs5KftdRdtYFlwt6zhHBhGaZiG
yQjhkeaawXundIpviyiVnt5Oe7IxIXjEEWDH77bEjzDAH+R7e9wo/FJKXGx3KMSfu9NDz+3eGRI7
rYGSee8qYLsH0CbAEVDrcHvcBumVB14aJ+/EEUb24FkJ1R+1Gm2x02ppXImOs0mJUim24l7V1kkZ
Jg/WunWUokOk7BFwHdE++VSHjvPHzyhso3Gw8kYAIXFEXgnIq48AnAVCgeNHkBDHATfyVw1sdbJm
lVwsvNzvub1BNnJvXSSwDO+3Sh9KCEv1aJSulmdGRpx8xVKSCBL5CE98O2xz7rq0GcTqyFQUfRzu
V/uHrhlBU7uwKAjPSAC1pR1sZWutCwXISqU6N5FgEK+ntrUSkGL99zHaqLEU38atTXQUEte1w2D9
1+XmrGT0rkK2EK+Tblh8zXp9FZKCUBhYpphnPz1gsY8g2oSnBFVaDjyDKNr5Dv/p7pSCl3nqGsac
O1EjAQJquhrx1HSwxgUToWFFtluhRpXN6AcP47i4w2AeQfMUM75cM2Hs1nU55bKbuRm6TxyE/Xft
AbPo1ItaT6AcAYr50v3tvI4UP3uefRcOs3Nl5Ma4zQUncS+p4pEDWoHxR/jkl/5xDCu9Vrd1Lboa
W2+1X5RgpcDPbRO/lZS4jF4+JkEk9vac+y9fTbFSSbMNsO0RlBhC3V0np3QEbPC9kmVj6KSvmaFk
Ugo075SmDUxMjj0ZUhNeoKn1ExOD9RjhWJYPkOkfUto+EP6NFY+SrO03nDOA7zU2J7Iyd2I0EUfe
En5+H0xOetRIRBR7zWeyLEBvcO1JWO4PmugyybNjL6EGxDffc9xPoO5OPI4GcLaJrgByW8MqrIEX
lghqtqNCuDjuJFGV40E5dOOYfBKs154QB+7TxwOztaTOYHMHK435gqeKUH2Y9cKD0kyEc6angDBf
DuzLzEQAIC+IRTtJ/PyiMBauG345KdTO03YwQgH7JbwKke03eQCaYGd0KjamTfy1HSJ2NX7YLHon
XOEz0MAdm450VzlJM7m0tsqVxGgE3bE5dsBUU5EeG9558nZubMqFouEmUj81hRj8mAsvH4YFHH+C
GQnPXN6Xii3sPAHcYxKScncKbJQ17fJoLTjNKTgsO5RWmJQKLgvcl61+NgrJjrs9s3uJNugh1KwJ
1wL/w/P4S6NCAXFjjZJMu6nEZWhFJ/b7RvAXjW6JiRWJufTEwwLP5P06EHUOpsy5Idvkrb/MPhhO
GrUYl+FLQP2dJVtNMcwseMrl5lbmGgX6Ayg1lrWYFNeYsJopkWmjEho/McPId10YXyYfV1k7eTWp
0mwnTn9mvN2obLTr7WpnEFkNBttrYvXKSn5CHozyOn2P9D7Fl03tlge0VFn4Un3dB9JCSOCwPbD2
MIA7jSmrsQLrp5i5pFSGV1AjUxBWqQJh1YfJNp5aqjfPaCih+M0489jxzFNX2C2K7zBiE841G8f+
UHi7zU2B4T+zKz7iHt4iTIyrsA1UnzvGRfMAoI5G8JfpAu1cOW2ncGBlx3s+VoC4JRkZ3+tMLb8a
8Xq3L4ytudC68ga1CcWpXUIQwRr+Q/q3/soI8navcD/Jz7q5lqPf/vNE5DHjjmEBPtrfAfI3Tadm
99V1jpfl7gBwnw6aDabTeNxkkZcoqEBFvovNknI2Mmcdr/V3FNh7wbsf34Ck2QQceikmMz7asN/r
Vw6+m+o1ieXQDNnF0AdwJC3GLc0itw31hjacWrLf0b0NCnr1uNhM/W5WsUhH5IIWTkgWkV/0dAbt
rlBpMBKIq146gTlW9nnALWTREy/C72yAVpHLmeog6huU7nj06EaxtiMgPj9K6HrUxqTRsHwAY1Wd
vSHoq/6lXjDA0T7N19ydUoN8coua/mGRTszYP+1eUx3sde1YsrejrtNE3/pfw0MSDkQBnvqzUSg6
xR9jQd/Sb9Yw8fRAdHW6+dIBa7Y+58tuln1ADMZsSj4AJ8F9+txBOo9+bSRkY9dtG0JQTvk4+DOD
Py6Q/cNNhTi6kwBNnQssU7tZC+UY7wqdJxYvMzDTmHjelMFZa4px8wAeZQrpCZowwCM1xw9YCe/H
ieHD8uqBK8IzyvJ9Jz1D78OgrduZ82NG65USg+oDDP/MPKni+XdCqt9lwOSG84VTySrkqfADUNzS
9HMq7VvnSWVrf64HbNSnjXRfXevWev05oftqb53iNniNbbQyG083cpUODwirgBCln9+WixDNCYPr
6hSaqpRoz4H3LexTl87bTPP7wU0+NaM66JCnqPhAYTZEurABKOMsxdeHlbu2oGzFGs0/4QWSpQw3
7NC19K3duywx3c+LKFE5YhNE4KIx+co9pwyryl/yYJE/G8wt9Sa4m3L+LRkhW7P+L43YycvUt1eq
0JXg75zt17sUv8fhpA/PT+d3gqj+OzqfRO3p1+yvnwj15SEaw5MTa6KVwB256EVM5FByyczL6YcR
HtreD7W9BhUfp2YeMeKIWIn1cMuYlRPQUuswR6fddJsMXLr9tjn8yocr2H7qE+E4M8eau9FlBw9i
t6Sr8kyP0cB5wobst0JaO8Wi8tQ1J74poPiXcrMVN/ZuhO4XxSAI+zq3PePB/PENt60QUkpFdLw6
JjFKcW9UUki5jwA80vmqK5RcaNhAcKqd0blFhWy/Fintg+Qn5LKr85RVyjLeG4VPNrkW+09aDxgT
De8jvnhaOuLoNo22qBY39T6SCL9BfsrV/mfNeDNp/XcUSFgEKl+UaMXD2ZIODPDgeTrKJ5tnGLZR
fq2V1XpYI+H0ce7WZXSwjncaINHP+Vx/EnSV1+1NlNCUkgbgrB3dY4zi04HEP4yyE6tGyJj+biXD
JVhmm3+Tcxm9d3BD0x4KXnH9yYq66oFqD0X/PNPMp8bfT1Lw+DcxkFQBhJrOVGZvX0wsNnCHPWs1
iG4eIpxfOX3qOiYq9ow/FfkZhyyAPep85s7lSnMGn+PnLuTwhvN92QiZjt8uAoTLHXnMND5RWcTC
u603qlFOUgXUv6MYk8jbstb83NSf17S8C1aCqmqYzoEVRXRvXA3hzuIyfSOBtPuXdj450yiVky+6
iX7VkVrWbhcDq6m0gqbkDvSXzyPN/hpdWOZCj+/LfnGhMtKTKwEQhOe+2yu09iknlyoMoaayjjxk
MVRLvZEZU8QzzrrWONKrvlt5ibNOpZTmgw0xtyKxMJC9JH97AIiQHSK8qzCN/0xBG0W1CATHhp+u
rX6CUH5OVR7iLPeigD6fOMVlvnTQoq1qoFivJ5sXNvsx8Mr6M6PEkxpb47eQQKakvQxBhV4290hN
Kp2XtC4Xai4T0R4PIjHGyldiyKMuwVh9kVANTwpIVcHzjEV02F8+3QuCGK7yJS43P0ywxpoAHxys
5fN6iMCRWw7hs7ghUGaLvDRMyigKByNEqWa/prwvukemgwoC3CRMVzyksIlRfYLc/wHnddHfi04X
ImBuj+QOBjRkrOrnjXMbzmXB1DBRwBzKC4744Gxew76P+rp7J4xGG5wiX2WKhoCFDQZ+lO+9gnOo
82P2ATNgt3i9Z+YqEQhhD68YkRgztcmdZS9TvBZEv+fvKtdwW4kAav42R7i8kRhCu6wSJzciKG0c
Bbw7HPXkh9XhhfcGs3iMG9FJhEH7GRCbdY1CBBqagW7PShehCoWwesgz1fBH9mUTcOWQbV84zPgo
fN3rYIigkcvFSKTsqYGik/EJtcOl2hhzck6cLZpnmNDVFhdziJcVqZFivZBuJqu8Hur1pobYv8ig
iXZZTpJslW689siPFPRgHBOsGreodl7PiEXP1/gHUSYyOegWEZmRGvarLSwOmhcRZrZh4uhPkdVV
kgcgln9yoz1sqdqDH/Bf52t7q49wQW1BeeS8DD8lAcId/WcD39QwGVWcxo327yHK6CSlaopaNGE8
ZC4Nkk8q0iGqAqY5BWPJXnarUGmd2U0uqVaCitBKkfKGIJLgQh2QocRAgNwyxNiWHBf3+XONejAC
7JAyRVS7sgYZw8HfUcI2FL8Dvy5SAat91EwWkn6w25c9gwU3Pq14KNsJuTX+cGgUqGTyGn80v4lB
4YrykrfCbnUJkZRfgqinrOLCIvKSMZH/X8Xq1ZcVn93ZjNkj2JcSCFyFxGtYs+Bhlxd6KzTYJGGc
8GL+HECkEi/Zhrb0bWmbmGvsmShJ6JFSwtAIuZ/KNjFUcD9sCxMD0QGUIzMbWMIU0eOmEdshW+Sg
ALaws0FIZy29NBSeP68CvuIcZflxGwWuobuM29TA0AX2hYoJ4hdbzOL2CTgzpywULmJHL81HQ8GM
iBln3yp4o+xSBTtpNerL/JH3FQVYKHDxmMOQPFSU2EqSHak+Qw4kymy/WqwBrxgD0gl6LMzCTy2R
DWREL8hROn5MfZTQE3SdTz7sPWW3sjuU9fzdvizhpSGU7YTj5tTOgltDIPiAwFlAflsZ04ma1VKn
E/IasLykC4R+xTsSO85EkbiVDjV/3WJbtGo5hVMODAW5YgO9HbsPa1RWe/eOsKw5RkWxxdAHSME0
qpG0+aMk45EoHsc+A5MAAFlm+i5DGSHZiwCBdbP2UDs+rItMC40msoWKG0xMEhjuHygg2pxy2aY+
/lH6AmbPRrhQZXwLX9d1noDNbkFaq6x3SDciBTntBEQCVabeE5W6FESINkHRiVtvlwe8lAGmHEaL
Q7R25JbYj8+4Xw9kA2BUx/iKkUOOp4t3zJ4ioUFhH2wHaiqjaOCUv8EstVMEvzDXRfrEkTosmCzF
G/aji4cyzYONJb4dRfTGuDilcaXGhUnz0YWw/NkGvxjglvwagVRw7zD4dSLtio2/9aQEaKXEPNWk
Bhtu+a26kD83kwKq8MGSvcwVtMlRyfIlY996ZVkb4+7qhGFe6DKuQoUvm377O1TuD9aZX8MUYkAe
/2noIQ4NR09bDjDZeRs4GFrK1avqUcCk+hqch5GGtV/FQm3s+d2stgbYMjwUGNWGvJt7hVzITslx
6d52vadXlj/mcccoLO1qJ0488am19Jm5hijzVFgpz2icGmQ0S9KV4mUUWNct3VSbU1V9fa8tklAo
e5n28Mni/0pz+HPMcCvpFs9mXTIy5LwOvBeqkEsyBlBZbU1ISyQH7ysYIvbjnJJ4bdXvwTtwh2Gq
wT2S9qlJgv9yZTDeoE3dURkR0T7ewGmPkQdtcH/8QHB8cXBnTEw009FRCKZD6iFYjNVjKyHmmN21
0Ip4bqbR9hXvGDNMhAPq0KGV8ZR4g6mQt+NrNkM4yQmUNhm5g+Z601Hc8I4VbcFQIOo8fMewflkQ
Z85eWtBLCMTjuqLcnsEqdSWDpcd/qf8uwDcEuw0vtxxfq8ubb5JvR2AA/emhDI22bDOMTWBhW7Iv
TEKAsY7TAH0jH3W/NqL+Syc/67GkAN1yYJ9XhSTamP9rkpImBzmerV5UG579BZnYp/morV0ujIt0
0HgOFmrpdzAhtBBUBnLW0aVSgTad+f1/dLuXEXEmHQwDZEKKXqy/uviOAeUVsAm/UdfdcgeOPGUu
VZ4XqSZgyQyRH9kbql/z6L/Nx/c1Pm+jDPLChb2EVxQxjzqJWs+LlyFqOlCcUdZQI+XDA6qgvLBf
TrJ4m0aAPF7GsQVCbkdt1efTPiKjm+vUPh54ZYMrUFnQUg3ShZQPn2miWPd6nS5qOri+RstDsyDM
Z/iJ8K8lIWIkzEdeuc2/vahowNnCD9mc1GFOOk/l381ZihF1sIWU5bf892VzCbEPjol3R2I7rXG8
/HoWVJCCgqdsjf4RZAgfpqT4VI1MUwvK+04P/xJpnrWhxL3UkbiHOZnKANTMFqUUIVxq9K7T4/Mz
X+Q//WcWPuqIQU9icLdN0kUqCjXyTu4Fs7QDP4ApL03yZ85FFTowyG1fxIJiuKAaMt15XDtgKGdJ
VbrFDN0AbEuVpJBK4DsFX7lN9d3w8odGYhr7+LMhOQZYmNU+kB3DNX6HA4nXGxiqSkddcpCFqTIo
cRjHcn17UCBtToMaul7fNe4y6MhWhV48QXt51AtGC7+CTwAAEPkBnmF0QQ8ABfZS+AASqbbsQmHE
XKDmzAftJsZW8lDL0u9ftuPKW1fNI3I0B2OZfRQxZsiTP8cOuCzj/0HnYu1VCDCh468NoQlop5ha
Z3LHhZHe6gJWI2hTPWvFJNBTke8taP+7AhlilS6kcYnJScptoXk7nY6YBZDfETppFLBcLUQu4UaP
xvLtXEzHwcnVQdo5RB7TZOcVaQ8sqhElicW/RiDPUe4YCQ91l7pMpqf5lyAC4JEOQJtXAdh4XmfB
2QRQYLAAFYJY+zWAFSi6EWSuNy4z2Jkl1vU980k/IBYwgdU7W8IcW4RdrZtLXZMp965j/kJvusqv
T+9Fp5FN3ISVDwQZ4UeyeE7ZpCzSN8V5+K/3T4ZV4lHuor2CMqO530qnziXdemfYVa1s495Fq6Ou
Ynzr5Bk+C62bjikBivTwGJF0CKM2yq4WL2hK4mUlPNPuYQfv7SebtBQZQgGWri/u3s3m4vzCjyLa
AHf7wv54ZiiG/J9TwuDlV2WSvJEaaQcJ2+1uLXjlqSNa0Db8t3UEqlO/6Yyh51jOWnBi/ThNd6x+
aENrDgc8o2GpfKEKwIkf1DuGXuYQ1wDs18PmDDMVyh7Kro2uehtkTsAcrsUhBsGTZJlv7f52n1lX
ZxsrjUgeeto0Vr6STZNZYKd1WOQsappiqA9eNi8viZEY4h6fEl+iOi/2l24TiCGxqWhtmlr2km6q
keqnPvhbvGN4Iql493Lg6zzwXvcNvTGny/Is9Ja18Y6YsQcsufjeee1d1g4Jxti5JsYJoUnlQFVL
XgRinwuYg6PI1YIrWR7gRN2XhZWlp0C0G7Pc3gQR9mJgVLZhou/XG3lbXKdnah36pWTfIpopQk07
Q0biuB8vZIrEXnZxx9H7Xiz3GFH2z/drW5xToJTtbcWuurQ7I7OWjcISoSaP1YUHQNP03pB/f9kM
WSwQPaIQQXPkDtm43jAOAAcCLqKCPeqhC1vmJJPCzbPOMT1JRHgGG/A7VifNcgCXl/D0CPCd8PYx
kwrXg1WwAD28K3s0BXNocoD1nBI/oWYng+deI+lXGYtpnorXHpDelg2g8TwFg8d493NbhNVxsJLG
3+AmvHJlDCcx/OuyNDIH35TpL3gNSflG44o8drzllRzYSviVY2mpA8VWDrc9V+ONNXBnoyr8ha8j
h6qdM9RcAzADPsdiGMpQZ+hyAzaCCdOUOzit48h/zfWSasK87lF5kPNkFQDjpkFBWezFyXYT44ZQ
YhSo+iJZ6VEFU2GHHGzKaEkBnZUDM/i9V7DQ0cBTpyylGvWpqf9bNDvur2dUM+C7JW84d1oFooVC
zd7KkpkyodV7Z1/8vVu/K4QAptqFWnmPkIYiIX5jb4oFzAHmlirWWplDTgLFFz7bGk2lT9cD/kSI
ruXkFnjlAtPrSC99hI6yEGwHbDcdzi4aSuVM9ZgNRI4x3GLfge2ndQu8UBjptamw2b176TQuzOrH
l3+2m/zDW1wJaXOdXoBJ5UoaSCj2LUsweuljLdH6TKbulJcY4AvYF/TWzkIzHIGRcowChrhVnnzf
fpQ8FsQcu6yO4HnLojJMg5d3tqfSgw6v/lYXzdpLIYxam6idhcvCHnJNEDoqnx9yydBgH2Q51/LV
FiUGuKjZA/RII7exfSm6BIFypsxNEbjE5xlEpTDp7Yt1XWCjHHSPD9KQVQDYVT3PjCZ3WY71sb6O
zS9GV6ZcqMF1U6WmvQ1CJ9M1N1hAkh5Rxsnk4QnUqM88NvYtn/tX6upAmXavUOZTmu17locjDhWW
tZvuF9stLKvS1C4s8mAoMEfszTJT/4P00FFVz+q45H42nGi6ozS7qAnuoaSDM6BIJM5dX3+hdYQf
tvKkPuR9eW4/jhSpktEVLo3VZO/66BjZwZIEmPlSt93CBwjvkh0zM6ho9lNKevobOwiCEa6YRpVm
9SHsmNOXcfIBUl384cWESYZph1DIlHji21tc4RD3x+7Y8adD7JgRYf7VxAWV84aeCWZ7cH5PzDxE
o82Gu8JQ/lkq0k70BTFp+GZD/1X2WjSbr5KFFdFSDaMRoSilVUp86YroSPbQZUUvjEhxeKc1mNwz
QVid5UWMXZE0mW72IHkcBNYWGfbrcob8PZtBFVbAkS3cbhCQR79MZxKJnnIhQ53REklo3UC5TwUX
TGbI2kBLPJpdRlTFbxm8/JK/xr2dgvxqL01S5UdxJidmf0TvdRm4Ru/6QoGf51QAoga2AkwTsi0Y
1oX9VmfiXAIXL3gbK3dRbD6EY1pgmkXnmhluQ7ehKq1SiLxQ8378haWvKiMPol9y0Qglmy1fS47z
vlb9HJXhmUMHQIAmjCcvbqfCb3sg0CE6jfkejFgyDAfWlHVI+Q+VMaRXautMhIEcS2KmsRvfGCGS
4A4/3y0Lv/0FS92D4pR0ys+k0nHnr8rc45q+xxJSRJmXzsVc2nZw08corIIBURYg/iGHfTIipih2
SOMVyxDY6gg9XokGJBhPKwT2gkOLacA8gasdMYjQUi61ho93vk+NMWINf4xj39CXUr0/3/STslS8
YolpbioCqxX42POAw00N/kLTKP+TDRu9OURvtOaP0ZwAOkOxalgGIzJtmUJAXDwEHfA1LZP7O+YC
YrrQB5Y0VYlkNyjLAg2iL2/rSDFYEdQkzFLpKJfREzopiO0kJV6vmYANCqNIGJUNkPhL8PRpkckW
r8JodnM4L7G195r83/GkxSMEt7CYZHzFF6rATD+D+pd4K7dJckzPiioKRNVYckx6K1NNG1txUjWL
ATiTOODcJ20SxpsPexAmuagZ5a5KFyFbEeWQ0RHR3ENmIZwvXfdLfnW2ToOyVY8TrvSiBkHIsQSG
2ada6mIV0SivZrxUWk5DF7NWAKdgn+jASqD3cuwKomNmpr9vwd3UAZ+cpmQ4weIWss1bmVKFq6Un
wsWlEeGB9/l6c7ppSBTFHkTrMiEoBnO022qdwN/FCxhBfHFm2BXZNt0/TqIv06IISxYtzJKn1E99
su/sqt0qAn1m2UZgiZHWgNJ70NCYon4sW+tEbEoDagHQIbZHXMx3+zlusT4udZ3wX33f2GsoEiqM
ZGYKULhAiDdPbPugfjMJ2HqenF0+hDPoHi0E72SPkBDh1rdArrYjAN+3Laf/ta6GyXDYyK+Z3v/7
fiNCVz6nWvIBddl/ix7X7sLDdxKIcgq4Ps1daOXcE9srdvuEMgyAc/4fNPnmZXW/M6Um0/MdNMrq
GBc5T1KnGLpUM3Zrv9wDR2R/W0bXDPQpWo7AMHcVwkpg/i+sJLEdSFaXnkdBfOK+qF85qrXGd0wW
LT8NzVx+vDO2xpo02xuLoHzHEVWxN6DV0Z+G9KGJ8YvcyXSi/O2uZYI+mzFLE/S05oMzHUN/XQr0
uWXp/jV88pXo651JblmNTanSR5542wRwTKZoJ1XQWTX9bq1ebLDIIRS/YaMF7coS7VnK4SIVz19O
2O07hSgChibrMWAKaAdmi3/ztxQFkPp4B02Nui7pKK1tewvD2dnpNmSO+xkn8ms9YIsQYCoGf1Fr
ZY5vBiHpd2w8/R+egKqNrq5jKEsvh7H9v7oRi56rsafPtnV4B/k8QoELB74e/XHj1PRTTAe1CMlw
V3IhhCtu/rIHQuE0gwBygaQGTOIpcvip6ENlaiMM5U7r8cBzbiS5+zreVpeiO5zcNPCNgFCzSmDI
bnQvsZvc3ydAy3gn57qmX4fF83+HqQnARmQcwO46AUQLWa1l2WGT6dAwyfMk1se+7NDSbCPLy2d9
MQMFsjSnz2fZRpiEXXSVCLNx91Ar2Yg/TgFP3gL/LmVNPTfwAI1XcQLTBITuLl+MwTMxEs6X8GMy
2tdmyW9xenRGYkGkwemv2NeK+wBglk/cm7DpiVIcsZCAAvl1K0SE1vfNpRXLILoubK9/tqx/wYx2
L4NzTHQS3Qde9RXdA8nhciPzfvseXvzVsDl1sfagicJaxWlSo9EEhwXV9OkBlqddAbgfOHcRlsOX
WOeOGeEJvgHmMOVupuCbNsrjXxMRbWaUj6u0W2lUbAL/oc+6feHjhXXIfACmafUfQo06jArJ9Axi
9xEkMr6Tmb4OQYYdyR83vAhoXh47hnW+ZzFraXqP+L88UAfKx+46KzE1ZkZ9GPPY3WMw5FKZt67F
YXuvLPXDoFqRbXEO1W60q4S6uKNqQAdGnagfkLQANI5RiBKn8OHwgZRFl+CPMNyal7FbR+hrVilz
5ZAiEt51z2lRmjb1zON6nqVbsxIPeFSe+wwSbHJAtVVVMYKQ6tbiQePvURkEV1oyB5GWNJ1J9yHz
PojhfwLGUkscl/9oGFzoNTTx5Pi1+A/shC4PS/JGSKG4B/Zz27EUYzytboaDOpvXuoIIUORkQ88Y
4LAEoIXhcmdZp6fRrMZir8Uf5eSBrhBemppBXjvu7rp/rEyDCHsiCJWaKvKA1hdB2sYaB6W7bxX/
yuIWwtg9MZm80a9QSgkyeSgMQM/thZueriwe2gkmyH7v9hpVq/d8MXigs5qwAHz3jPkymg5/D2EN
szYDeDNnDEVSQjJGU0Zum8O42Tz1uBz8XW+LkROt8mq8QGrOLKwkPioiDFU0Ixta+/ZbCNr/RYgJ
e3EuRWyD9d+FyYrhEb9q4URy+T1ohYmoEZRFLnVKGu4uEaUP3hjGudy/BhttbAiaX3KZI/AepC6Y
2ssDKW+TBYQzpJMQlvkZ7LhsR95SZqN/Iyqj5cNZ9weGxWyuyAZ7MQhjBLi6DunyIUB+H9k32s3R
C7Kw9xtvGNAOqD8GZkAJmGoeFFwic3Ns7a2R93+7ajXu6oBi05+tpanvyjwsC8ykAgh8f+UToUOs
40rzcWsePYRmlS+PR+CZOd6yH9hWUsWg/77OSodZTZ5e2o5iuZsASp24Gd6iJUAwvPCVg8doUfrc
e3BNevbQ/TXZ2x7MHB8c00CitfVvUlPrF/39IUhg9cU9LssSrCp/EO/+mw2W7gpkWcJKlDIduqe4
XLj/Qzzq+BU9r9iXH1RNuMBupTCj3TRdsWMAVCORBOeWQ66EbhN3YpoQRQEpWdxcR/0dUkORBDk4
LMZ1TzGzESdoUkOcqzfXOJkjneppbg6/4AOwCHxx3FnR7gqgADQztYHyPHuNp7Jr/n2tRrsr1oBl
jSwatZFcK64LKGbT42AQ6mhGUI7X4+QZOfhuikEj+OOoHXzdg2tKBkXzfRLKu08JwaaWbnOwAeMj
eifHJuSceNDuirl3pjE4JMV+Y8bbX3T9Gh/r4KnilOurFyERgxRP8oxRIDZWbSd9Po8thzXRC1bJ
D8DcJ7pko1aZ4WGYogLvvPQJyFL3Bkn2QENrwt+VaM2e7fCdwpibXek9IY4FJWQCDHVspUcG45cm
6OccE/wzTUGU4lK3r1vuudzJILYrKpQu6BK9owvXF934gDhVOWeprOA6b+obH2bAfxIclRrbG/8Y
xIhMt/aKinHLTZrXMlA7lsxLTsDhYL8gqggTiCIrr8xXFjDtuxGqVNTlWSQjh7OLeQLnBuKe+1qy
gWASyTIllCe2NfALterIHqzlQpCHXIJGUVoiwWr0FYSMVVru3A7rFTOUYotT4TZy4Q3RdMQl3HVh
GT4Wtta82BdHRNQdKnbJ2M5DjeezTCgmuy2VfM/tYbJoE33CGoR7BOZK7+8MbusqSz4efCsHXQy/
lWA9wvCdBXElOlxeROwriN2VzjhZba8thMELll1Wt1zMwNkbP01lOFN4KIzIfMll7QtB8PA7bnqD
bbMCrn/5nw9y3IGX7igB/pG8YgMf2XQg2VMQvmBBye2B3Sx7Nzf3gvsuoTYbnyFkYGtAAAAOjQGe
Y2pBDwAF9wD4ABJ78wUyhpXlwCIEwSK9BPZL1ZRsY+/J4jbUV5j5ghL4nKqa3MWboWNcrl2gdnsg
oNq+8ZlrKC+9xKf3gg7R31uK4CB2VolwrigJ9brEzIsfSrSIAFBMd4NjkpmmlOkHV48OhsblUixa
C78up3kRmEzNbZ5zxelAXL2kTwTuIjjrFcg8Yy9zgjcJIwqquvYlQUA04Z43JryB4f5bYfUxCmPL
rgL8U9rhTq4dAKeTWg7o3kwUdGXx9AwTyV/D0/SwbB/J1Z/Y+79WgoVoaDl6PJm7LgbfZkOqv2B5
a8NyqJX3bQA1ecnVnhuxCObIUNreoFcZeKJzzXixjlWTfo7PSavHogQEZA2lqhvckeA4Man+yLtV
t+ECzIDhYc3ftvz9kLJSBJZrRN83qQV2a8/eAHWMN3K/PXjOwUR6qMDXbkYgrMOVuIAO+BXPmbGX
5Hm26s2151XXzaRxSzeNFVRVuE6NoNPQAndrgtRUTmVdPkuf5upMAYWfJPq+/KHuO7dcjOuNNQdX
pdd3NBj1A8TGAuD7kuL6r8T9UOG/OztzNJXprroDHIkW4GJtBR/u9Tvq/MosDNj1sYkya6KIWQUR
QmQC1/L1LLUfZqQ/f2lXX8gXOq0RT6aLj7sgdTMqPkpsX4KulJ1uC3TY7qsMU1xLveJMbfCfkqE9
EJZSCeZiyNbbVHujx33FGeD2Sh8O9d1LePYLudYmnBjpb90JgdTX6a3o0M2yBUb8g07U44yvAdLn
Vy/97Ps+9EOTxsqOBCnHasoHRCh88tSLquLNvmAaC66m79iQHU/0Kd7AfdGIsUjleohwOW6JCAe7
loC+wrnTsDpA0LYNywUGsdeEEeGxuNVPXsjFgKhxCUTnIQ9+tHxwF5XRuRtI/hUo+oGkj8pnOwwT
3O4zpXQCkOJdPSPC/GoR9ep4Mg/MlDTeuGLLj2TRwjO/phGBg+wrddVmz1fgAq/fnWyU6QU8/OW1
hUmCpLu8f4uejivogT409mi5dWMFPB6QsBpe5CrzUzFqaqEc5Ewfopg++7TOfagkZNLI87CbRiXj
BLr3iCSz772jaeUlbhlySm+njfIqfbHRBO5kERM+CNISmngHCt+UMEx6u+oVvfi76i9UsYt1w18R
AedD/uQ535OCdSPGtlC7RgfEf9NCcHM4ACXSYcDu7QnpPLMDo98DkiO9QHAlA0Z6TFk/OQuiC4WS
/dGRgCvnuREwO5DqCq//x+y4IIrQNeLBZO6I01KbX9t6f6dYyqTi9piwRSnIUMqin+FZzlOhulEp
+xR/LVExe6S0TKSJUcl5whjeQZfE22O70oWj1PD2w11u3Vc3w9yRK7LtK/lC3boAs3492sXINfjj
lDv6pI2IIQ2qNt2GzfMSuBslybQkPqQHDH4rBUoovLi50KAwPqvSwmk02xcWu069s5vGOz8owgn0
55QUMFw6sUfz8KLxU87kRF1DbD0tiE85sor0KPmHjJPb9yMzaEJ1dEv6I7lOK1Ltmuu/kg+1Hx+4
vSMmPcMoiswDC/6wpABwEOk+W3sbLwtnXZ74YR86UVTVpGzIp9zYRJGa/sRkQxFbBX0Bz+997SZO
oRmehnibJJmQmuQApa8yLvCA0fwlivqi7c5yy4DvvroBaq4PpLFY840IwOoUIeDxe0APIqu6OVtW
LJkys3KYqcP/H36mcU9dRdj0JifYX4or5Rmvj7veEpAFElthnRNA15NBKJ7O5rSCy6sYllo+3Jnh
d6Sf37LFGDsF+s/1f++4el41DnXz1lCaz8ON+js/I+40UnQoT9fCUPBDWIHTP82kl26/ixLyHpjd
k4zdPgQLCy1Rikds6hl18rX3sjKwvIL4tefmA+MbStD+sE//dEg7N4CWFZimniIaAPkMTrKpHqHu
QXHFkBZtZegbc13fIdztcFP5Z5TkaO827wCjqUZEtwkt7oXTuVuhZfjYIsSfTk5H9cOMkCpBXUa/
v4AC4TguD8pERPOu1Cppo8yEBn0qvKvcROANUcNG9seUbBMlvXAKH1qV9BTMG8QMBvMspFfUMfwt
dOerLiKTvp4L7txMTuFSb+qbgE2pEEPzm0L/bbV12JkDMI/KVJAUy93SZbSh32ol9lXcjQRXCmny
vmdJXt2Q5EBndv7fYMMAPlPvHkogv4vvTuOLx5Ytv8VqT4hDcQL1vtKU7EKEKbq3E1D7UOyBvf19
huq2GWB5UqsH18iemtT9XyrD3VhcPci129SOpiyW5Qbs1Kov+FhE5Qm+NqeAXSASWIRNaBUW2yTd
8JKmOc77wYo79JGByAroEKMiVZp8mMs0rWUdwH0Jb8Wnoh16HmWdKikTebKbcLzh/8PLVFrri4i7
bmDWs0qA4YwVE5/TmxdNW55lMdhe3duVTPOM+wHbT5pH8+Tp3X63VIAJ4ZjQLrHqhumnrsR06j/x
89cdp3KMP9Jd8IqlcZAUHnUB2oNFn5mNTxna8UmjGKzX49/FWb8s9O5xhAN690g81p7vsnZFl/kC
B0sRl4iseJxQ8s5BPtrQFFvYKFIFSF1VeCusSr0+YE5QtYepS3jiBn9qH5K8KtQO1vEKETKXCiQq
0IoPXnGsH3LrEQDNq0zC82n8AcCqwXupUWfyKYy6pwpvKd3jyXpwM4bzBThztg/cMV4wbq89+X6A
BvJcf8srscdNg871LNS3pQc1vpmYKgJqpyK6FJl60J0H2KsjcyooD/XSmvBpUqqA2SzxXYNMgxT2
g3yHt33AO5VGlXM/TNmLOlEx5lbyRWyEs5Ss3gu1TglxQsM4BE0FmS0BkjqhHRhsZuuUa3ILig2R
tdKv5HoHMiMRdFotJ+YxbYlBorhzcTBQREzifZgkalTCG4LEeFbfyGa4widUxZpPmj9XO4gyRFxq
lJAe4+OHqZ05PEUYafb5+U5ELLzlf4OSVl/H/68/UZZxyCDGViNejs2S9SHg1EcGDEiTnCqw38KC
N5lt/WXbE4wT8eO7jtHLFgDbjwWLRpUzowCO8YrfIr/D8az9Neq3Ju6AZs1puYlVbCuUhD/P8UHO
+pAwUOZ9eR0ltVzUH2WrefCckKGdfYkRJ7ZIWNlT6QGguU7JJ93RrlPRfwaPo/Esag6fYa96Pgpw
WGzwSdPa4wfKZSSI1n/NBfHuAtEnPlbEcM3BjlYfBDgJEe5ph3jAT9kV1zi1mSwvtEnLq24cmSvt
EfGhoyraJOCwoQkbC8LYPsXQf8Y6bQ2ymlhjd+3bObCAOIgKg9dW6dHwJRobXzjujJ201YeREho7
YIdl9+5H5RgEjphCHVhGCdP/W8G5oLDvJPhF1V+LxA9JSorAXDr9Heme4JEyC99/CKe89CxQOamH
LHOib9kp88IH78ziYdYh+OXUisvGVDodavmYfABtHkzFVRqqci6U3aVH3d1vzFIvZHitO7hRhUyb
sbICxq0E0vU1XvD0Wt2qcSuU1etaJv/23eS5dvDLReZPqOicoQtNitHzaMQFM0GyGMaoPnXghkFW
Tl13eTxGEqourvhe9mEILcCG0G+kwrtaPiM/PDKy+GFoBTL5AhBKvWPSox+93gzb/N6xVmjjnnKe
ISxD/pIGeLOkUWrYrHSW6Z3Qm3SW077bAdMPI8wlE2y799WvhLcy7BDQLRaJe+dVERgP0pQ4uN6X
MC8X6p6bgCMm6cC2INP0qOOwzbcFllCu8KekXhAN9gkIL3iEdmMkX/TTBNyvhAC87RvWImv6dIQ0
kZEGqPc2q41RCecUkF2bl//JpuULl4fFzyIb2a0XHwfjYqHU3GaqbUPPB1mCb0l276/LdGA0S0Cx
x2sm0bbWCi5xbrab5+kRTlnbOSlQRN3jn7ZRNZXIGPTZQuB7gkku/864DATA0g75eiKofBnHB1zw
ST5YcfNX+22RxeTinrXvt0Z8BQoNe1NTRxGOCvca7MgKKafJYIzO2dU6bZNattgNq9hTaCtTqDuv
T8/LALhbxTu974cMQ0nCHkfK/dptkm33sm6j0fz/qnijYBjKOI5L6rpHc637I2dfSo9vkjMPbtnV
DUhcki6azNnROzk7h96+SlA/KiDLfV7a1KCPiFSwA7XpjfsYSdKVkJZW7kMrKj23Ekw7EqGKMqcw
LxGHrXF6rqfeWNfRSkcK30fQioKo0BQynItoIhHP4VwWC46g/CvJT2OR0Qj5yeescnW9aEWu0Jbb
osbp74OH2vbPFKidIQsBMGHvIkpT9kt0+JsmD7HFlXyAbjvMaMDPANcOU0bDPbcf20fg91gNeaOJ
hMPxN9UWpIE06G/cJhYMg+tW5P+C9mADk4rd1yj5NpKg/iAkbMsgSLkI81zF9XAYpDAvLychHO9E
9QUwlL4aKCjf+9VJ9aAYkuJbgHKCZKCqLxMyPvDAnF4qvUVo/7kDbS/BqYGAvS4HMsVnG+ESKIOx
/WTJDarS1rd7rtBd3OLKQka9vLerk+R64wKDdBW2QaXN2V1SBMBG4s/gpAlgRmeEy/GaU2KfKjw6
fKouoH1zrhsaB1Z/dptLqj68gpUULbz+wXNu6+N2WTtZWR3Fb3k4wO7ippoBodtPMwX3BvWxqJTg
ZNAzm+aHsvdKw2MwkRbs5MzbauPx1Q2vSTR0I1OL+Rc5KT9/78o7BWPr3dyJvO40cbSgouHdrSEN
tFqXitkW1jCQ8ybU+lBlpWmnbMukRy8vy5OEYDWjYwOo7pgpVny1gQoUc1WY++zQjGSuP3J3lXIV
8K3z4lAwbFYDev9IXIik7Z13iW/djdbi+9tYUWkPFIdv06F9sSAjkIBpCXf+vXjAEERDsG+P79zb
2J0Ykt+mo0l0umD3nVPULHwTZRBp/8Tbbq1kGSJIaOg3XGPvzK6LsMxp7419uWv38d29IrxUsyPq
sEw8x+VmJDqoj4Rc0erhorhv2dw5DAP6r5zyFBUyxSKkH+71zYA12TIaERJRTOBG/Yupdsu2gHfI
dYGLTWx1usZ9UX/t1H0pZvGBAAAaSkGaZkmoQWiZTBTwS//+tSqABMEnSRhf6gBT3AwqV0ZbuVMH
Tbt9q2gGJ0/ffW8x7/ZBYpzaNyxYwa7vSY+4U6KCfnnK5+ptk+/9XSvKr/txATkoqaIXCn/D9cFo
C4HwX1PZJAxs2uS3hc0uSwE7PzXPyxN9+RPrgLaaQF1qd6XEBp6iNurkoD3C/GnCvv1ZHeurQB8I
ueMA3c8XRIp10DY5pw63m2kwL1oqEYejrLT81M/y0DuFHvtlI2K2YY9xLAlUSAF1+AZx57Xwpk02
Wcb139r5/g4Qk3fbMoJ04sVr8MY7LkiRUrkkktPHkHye0vB3UZYa12XJgFDlNEB1tHUH++s3n1uQ
ORRgMly8ieF5EcC39hQAciispoboJTRvHLRALhfWoJcjT3h7hUYQaibf6FAYcVFD5KQ9bCsVkKtE
65Z54JF0D+h42suov3cdgVqMN8MUIZev3gD4NnnudpjpzBks/0xjLGvGesq5u70aAmLywHpXaeoh
E1SeTAPDOxlNdzeyFwcIKOrDwGetUckeZPHIWVSj1vouxcysH6zzePiRlIdzPA6Lv5TNF5ilR+sg
dmRUQcXWHO51G/2R6VUIR3HlH8GOBZqCShA8bW0Peiht9oGDUvkcnvUUWbNBgHlxkw9rpRx69gaG
6MaxgwJAbNEB+oJ7hjHMv0YvwDFWn59HLReCv3VyTSoVdwiwhS3E2QjHgSpX/0PYUPicIsUjREM8
MY/iD5krLsWCX2uWQ6/OtqBuq4L27bQaQIMmMosM8kY6/ucP+Tp9hc7i9wZg8yz/19EfxuZ3rNix
99em0pGupKhToAgtJca+c8EGdHRmfkuoOJ74MtmbQlITwLcTaf5AZagmYNSHYv/trRPXgujBAS0G
S7OyxnzemfU5Zo1TB0wx+PodYVgc+WAAYYFKHMFqQd7pDJmkkctBaVQDO0fcZdFjp7IJXCNotEZp
YXRU5IFZdsdn3Zfwwc8pqY213n//50hFXBYKOyj9vSKHE47EPee3tFUuTEmlcfs9xXmkgEq8sDEE
ryilY1wO9mBiOCCjsFixD/q9jpeqv3hID2+cu2pH2jDAiO/Vo+hoTsxAEyvFSee4SDNomng/wb/s
sIyO01ufwxqqYM19+z+Ln54gLkBi79Q5/+ouZrom5S4Y5UDBqvvrQP0fDRwVRnusXTWKtD63DTwx
re7ho7rwKOM4J/sqx41E1eL1mwr7e63yD+D9Ud4phEFR9bvXRozFIKkj0DzAxkDz8PHRbgad4/7h
YkWJGxfmdBOAAmVo5L3l/hbj+JIAnyDJ9jkyrihrVQGsMUeElVBEpmkyYm5uPdBEHdAHDl8PfPBP
AuJ0jhQnNLTB8JQ7O0yZtBLgtWzm97cgc2PBFAzruL+scbSdXjPDhTgsHS79yVUimcGpxrGZSLoa
3mHnbPL3mOttNTA1+8LchES74601aULvQ6LhvSPruaEJ61YSu2wQQJOHsftw9YDPTamrri5WpaC9
B6TPL/a8Vf2yxXbKh8TpOfO5qqykGF+NY5/fMYkzKax79CvSil2lQwm2f7FcohDCB2+En9HKM2KO
MMc8xio5IWQ4VQBWj8JZtLno01xmQywqIpOWhbt7HkTPHmbKMF+emJC33/XH2FpbRDzSneCUOFVc
1Rg6nQz4UF6ym1+8AvSyFLFaolLcLH1LhxtNmqHMJRq9I9E/eVdMhqoxx2jrkllHlcxryvzUfc5J
/ZSz+WnuJGP19Uv1C0gUNYCv4JP89U5PCLn3WVFjXvY0imUSeVlmbU85Op/2FEvjDewmRuaTylvz
g3pgd/8hp7NEfJF67UE3UziGGC+OUkuCNQjkR4DQRyXaDldRAwkTQ29pEYocBr48Il876yy9LrbO
DqZ0TLrywx3akTI1HdtQ+Sfac0PRqUeDvqDyXfwwbk2z4K9XtdrooNj0Fl/e4s8pOHXuuuGYfvJi
rVwKZrQTwXF8XDWWJ3r5I4pBY7BN6g+7FVdMWQC/6yjNdT4rubBkbdXP/2XTfWV0VfrGyEo5uo+T
TC/PnWKmXpn9oK/6eo5cNksFsBvoMUkhxFScU5yo5LYRD/3dNY+xpkiPoQ+CiMJwjMGZDWQ9EoUk
jQND8MFQ9MIOlYTwBNRYTa1WF/+fH87D2hWw2an2ogEZzbGSz2PjHBajWamBy9CWYOB6+dy9TkuT
hxiSbkGQ6csfUnGrG1TC+G9NBzQllf63kWoXvSvHLwl6L2vqrdnRDrpv0cxy1n35jpnwr7dV2Iz6
6YcfgbKEecgsK0sofcIOqxRJvIwuj+B2Os5jiGXYRIAjbNchxWRl7ZkApBl2yClTXlOfVLZFLrjZ
rAK6sa3i2TqYpWYvaD+cQFz9vAPN1Wn6cuGBqP3FhW3hTGwoRgF+x/QucUmhS+cuLHoFCvNcn65r
VhxeO0wfWB76XA6uoMaa3jEsB1A+f0YKF3Qfy4O6yNEsJ/qMv13ZiHzMxBmnCY0rDwkhAHNtzpyr
uwYppjwmjupWJFA6Q4MtXqpuJGe0207dmOYSwsVkP7eBasFb/At/v+sr7RTMtBynKeUwB5chFdId
8B8h9fkTOnj6RrFBzahDfledtkrqGL3JfFT3+cgqFW0ls+vWiAoLNNdyPvV4UxSw4T4PxHKB4S3Z
OUghhul/2//66OQO+AgKxPCjuPHv08G+uPWiJuw6DWqA+GP6TTm6slnyqAYxIRX08UODdVM7P9kd
I0d98M6FB4kQyvnicRHyCD9CZlH8gX5/QZVmwp2FqjGYpAF7uz91hH05c6WvUiQb2ouqDdayqxBc
At8n8kLxHc1as0zvynNeDs8Dpsv99JfrBZiRTbfZYI8CR1a6RNX98r/C+yJcUUa5DEZsxqRiyfAH
5OoWfC/gUi56DAgcysXxOKCxF25IhDtCPvf2RcAsIB39KIltr7g11KDG/otoAcT6Uw8jgs9PPPjw
VpJlD0vH0jjm6dMCnyS5OXGGj4hUktKmYD1OOBv+RZ5htfeRyMSo0Awkxq20upzk2cgHoxPDBpXQ
WlpN1hCPYm4t2R8IC4130gvJy/CqWt2jwOGdFlmFESFqq7L0gAfouxt3bzJfOivGO/ibKRndavhQ
R3jfFLvLyMlqwze0g6e5k4xoFmFCLc25DK0neXUDRh/oKP/An9jNm8Ka6o2OVHOYyJMUWkoyFxWU
FRqJ2eB0KP//4aeb5DSLAig/A/CnuhNlQ3FDw/+sYSm5FQ/SnnpVIREMJpa41cE11RFUXhVn1FU2
iypADZrGBQm/ng+JhdEWJUOAq+bF0iZ63rCo4zTfQn3H1O0SI7gHf2jGE00f3jOJX4r7NJIdyFm/
WTsjb5g4qWPjwzmsE5gRitwtRsbHzRmkVtGJDJtAaNN7yiNYvIAjgpEQXxr+rWmBq9N8xQKOc+nK
u1ZUsJTc3yRXC/y+t+Cd3XGyZQB/iIkGWzMHsTIel+9B1msbvL1Ou3YsmDLqwyQeMCSF6AF4RB2k
9sjIuPhHqa7sDPRUtIGWN4xbrewG47bXTRPoWPRwAhIiwUzV3uBUObZVeXpLNpLeg28LET/VCBsr
xZyG3ovWppvmpS5KLGWDbnoqtTUlNIiEt9y/+RC7Uh+WigzGCQw33p2xOfgyv/TAUIH0CrJcfURQ
X9t4bxKtvyxf0pj9kL+Q08S5XTjZMSrH5XylJdsFitX6ZDhkuBCnXUQJtfv/9PX8HMWOcHVKZZUj
VL5ix8CY7ade0vCz5LTyiEJ95r9sJVbnr1ZjSq0BqzvgH5ssNPWIIPwTnTDK2Ud5UdNYV3TYVCTB
iTbGIqN32fceXZawFY25XEgTDAmg/5sChGX6+aLc+6xk7IAAheoyjyJMQ/+5C9HC/ajpwszz9swt
cvGCflcTaGweDthwYjv1U5QQFA6ZHt/qJ9Lld4dPURSXoWomgiEkkN4KC1OMldfycvcHdj1G38hC
ryAfmQV4zXNA6Cjz1XJscrfNKh0kH5lpZUf/W+lPWT47Zg/mJJSQPf8GOifE3S8BaxugRmwDC6/I
ODEtNIsFA8b/yqhUX4XfXEjlRrGHX/iCQd21IhNz71gaaqFK1tLcGjB3foWFCbjJexwsvnvHgOaT
asrk9wKnLna2m4jOpvK0qaZfyT/J6AoChTGIWXjIlFzgYUTfoxVLppsk3SNbIu0qfugMr15iDyVQ
JfA1vpwz8q6V84+bDK9oYWnzgZ02ldGhBbMn1agc1bGDTiFHGA5/Wjgneo5o0bNyXYLV5GN4Qzu9
MXMzhFEPkIyrNgcLQM1cop06FxoCG/TkTfyk2s9eCLNfIrle6lEMoJXbj60kQUuJkNqI9PFZKC7B
sk/Z0Y2TQ8bARoZCYcMUUqfM9cXZgZd6KA1CAS7CJQkzFjNeDgCm4qTraDYNXD15YnaQ4Wb8yz2B
/5C5ZluDzHOHywN742+fdPLLehx8pF/zJ+OtkCse/AUmuxfxx/vRm73EaxuN4l3spAWH8XcSEq8G
BmAAjrru+eiPPmF8j9BFm9oih6aQaDDTaLAM8mWOodNV7DckXRw1KwbFPmeFZbEv4YwVXbTAwDwE
77vHFEwSm3aygbKEWE+xspj6Po4SEPLN+3Ty1r5JnJH2Ca3AylMLPss5Hj35B0cx5FLJ0hpgc4sf
/gPaMllT2BhTVWpphU0I5xUkzD8rkffsQ88uBPtlBBcOXjfyhEi5NeCnckQNv4ecjqqpqTQXg5To
vMTkkKEYubykUMkqPGIn4un1QfvGORC0k354izJcGL5WGoNz7o8zPFt098Nf0woWU6UWpw3ibSca
HlEiGUDA9rnjqcgEJgEWg+afsnOYgjp4KDdJJv3ya91z/GClbVh71NU45zmAXBUn468fTzZAY2vi
37G/pzU31p6UqTZxQWIEqOiTtZ9R3ryIb38laatne0rcktWUUh0xZBTBNpq15JfyiEWQfQeyA1sE
ha3j9TpXu0oCrcqbsXR8j/q9w8pvhoLNQTekzqY19BaeQXxy1YgpTQfO3mAZ7uEC4IzMcHb5s7G8
WPe9uy8rJZPUhkTW4WaZPoHNBrVmKxrIZstkkgPshMK0On8A2gzNlGgNpE3KJYEBS5e0phn34Ftd
IO3DnycsxF4EdIcGug2bI3kn+Tddd5VCdEIQ61e36VPLzqgQ8dwjGqpj6JG75zdPCbQkqRYYK2QV
gyA56eyrF5r1o4TIfjrxWcfpvDsnOWZC8JHi3gZ6vUUEsg2WkWB7sYOJ6mL4a1e4j6TEwuRmoAml
KWZSZsn0ouIzwP+7SnYT86NhB13IAfNjjMs5ox2cVd6aAiod1UQc2jbkaJZAY1wG0UeIesXAR7Lv
3Io9ffJSGHGvrDWSu+t8jN7VVnKMkKBtLgB3AIdVwr1lD+VWFnQUZEGw/Fh0f5WmtDsBOXjbp4Sn
rQQNFCqUFfsbec2RrPDckEQi4cc5s7HikCEDSmbV9fmYagErKbu66hIPiA/io8iCBMwKjg0uTEpE
B7Q/QdFtNKTUaDQ0D+CzVfnapvv0p8yXiEoHGC4vFNSWS3l6UGMAMcqLrvVZxH3iXPS9E76+MQE2
ZMJOIZt0akz8Q24gR8eobebEPCaltjKAWS1kty+PbExTmwKNFtTzYE+huzHZO/wdCoO4AmSu/cyG
SowrsBLPHw1mTemO5U9V77b8CoHk3WqL/Zr1BTn+2BbzUUKsj9wVPLci1bxD7LC8pmTQvuu8l4aY
eSLsm8Y+gP3uqKAbKUbHltbuGpTo5njd7JyIRAG7fthGiSlNXhSrUpFX+UMi9M2nAVBBjnHyoZlX
ThpsbQsTqZuodvMaSV2XZXCdR6MB6+G/mNOuPvPIYVeO5gPHrr2ygi5O81dB3KV81iUbJtegELVV
pA3PNGuLDldx8+PwXXQt8q2YGAZuQjfbDRt4arxbw9d7IN8mR4jUNA6ntPtRfoS9fN4Xz5YzBV2s
aCxnR+W6YuoL+W/lRtlylnXwBHC/M3NShLkywUM3YcMB/VbDZ7POErlv/Bf8oBnCGbdDDYZqSkdc
QSwdJsVjWB4I80ZENgYl5DfMOe71vMAZLmeHAQWdseyZ72Qz/MlhF0MvqmgRNyXZPKNtJCNqcVgb
IAhSxUf4vTE1eSvRwjixgURnHTCdxrGfijCKtF4ILzO3EVN97dcB5mN8OT5QuGXP5zGMFG5MBlTW
Dn2r2SNtPiw2n+SxjT/Hi3LfqZiZ8HMy2gphfgohwvyObzvcHunD7xaRmmu8HOmUAPJqKBqAnuI1
sREzDkBCT+RQC++QBPNRfL2ylf4PTevJ8XL4aHf0YgLu1/vP9r0koeDU8/mLv04iRNkPEEiTzvae
sr0oaKpUj3MWP2qPG33lO2kXZsD4cJ3yDgNLNjRNxFG0O9H4cWB8q+RuxZwHPB6jlF7axV3sihEU
c2T7306Qo+KMdxQMa1y8cmyVrJF79+WFBAHYx6/HUMvU/Tm8Fk3IHEGA397emeTNhgKil9D25eBO
EkDu/oL7M6VOczavt/3vrZGgAetVgTPsTqGdcUgNegu9dPxh4Haf2OADJq8+2PEji7LuUF4b24Fy
6SVYAQPN/Wkl0R+FghX9tN9aGS6PLiaDex6rRoOC4W9/XroFiKKze6BspBS0TW1lLm5Oda/N6mXF
5LIf2j7GOmRVtHH+lLORhMmzdXhSKeLRhjKKcIsCSSovbJ+f4MYbjW51L6yho6ZHWVHNYGINZ2Dw
pvhDQfKZhkYlbP7IKICVkdFEldo0LHin8OgBoaceYpqu1wmahZJwXppUn+75YYURFtX2+/m4U6h6
yj7qYIks8TDEnFRj/WZ+QelIlbNsqPX6uVfDwRb0iepVBpduXnjBZpGmK1SbMG2+0wX9DWj4m6Wn
l3daPeW9Pi8gHA4XVjEoFSegGE3FgmWR72BsL9Ju7hqZo+W5KRF0a08oGAYIujtZniam5/4e1O6H
pTt/DXUE5WsUhyGkh2GrB8/zKTy2MgwE2NpKMcycLB6qeA810csQF3S1TRMs8rs7Q4PTh0FxAUhh
PcHKpacNufzyrT08uPt/vyl8tpfOjuMasWSMIJ1aJt8S7BXSnoZQ+FMRYjpsuJaxFDXuyehPVjvt
zfK7dFXSMYbWC2npNEbjgShRqAUCKTEyVhpJB1J863FfKhCHtGorYWkJzWYvL5FH2CzLjE/ARNJo
C/pnhbhbVHgQmHOCYE9Htyr5u02sj4MxK0nbxSwC1VraveyGp5TwjgAVvQueDHzjteI2a8JAkiGn
df/yzs+IcGrrGy9Dd+3njA2Wa0Myf0FPLuoD+3+vxb/REAHaTjwpJPclHwAclBLsGPN3fVMavIQi
VN6VcKVQ2gJ+dmkn9e6ButUkJb31M7qb201DupFV+HH8O+HThHBC8LKkS3VmV+RA0C6yInx9XCh/
DB6XoSOVRUN6UL5ICC9Edpy/wy5QVIkW25U4iHFdJVL/1mtTLco7yJ5iJCbQRaSFefo5lll1cfZz
f36/tciokfWGCheZO1A3O/REv0BqnRX7F4x5Dk/AjM9lo1YSgIB6v4mwHfbQXQAbJQW+ee6sY3G4
x4+zrcv911jTpLi8IXYXDS5UktTPUKeAHtdIe5OCyxpleZ9KDPV5hbzOGSNseZ2Y3L8Z1lDB9cbv
OgA1SagqFVB9PEbqV2w1ROz9Mu37bPcip+6gKNshdUras7gFUs8jtkTZn6cDwweQdeIuvpaHZaHU
y5ZFMAguSqMf5v4HPdPn/qhAESvmeHMolDUh1sjMlYShMVehKvZcVUQNz81iGvCtmXqJxES4wlr4
rNoSssLJw1ie302IJHQn5owFKQGoBKOY55d0ks+usv1QcJaj7MMyYBccH/foDwasYi72USakH3RE
VDZzbVWMGeln/kynVRX5fj83Q7oLgClv47jyA3hse1F1wGybvpnWmqvZAv9Cq+RRs0wW1trd+t+M
lKbzSYJpGr84ENX6+mPQOoNpS3DOlfac5e0HWDTSEnCV8rAL3DajZcmbcHqQKib0/l9brcH+6VSV
it1y7yfcdmVcM3l+lvxcyUxnxT3whre80XTOxJ5Ke2JSKinVZTFf+ieVanhtPBhJZ6QGs3nYhiEV
dZfPyGBkvkKjBOyAX2tZYuMZ3HNLYI7DT9wS8/Oz7KZQiAKBXv1ru9DqMVodmIliGmcMWXBwXx/K
ScmiEV8FjV+I4FHpBfHDJvWSO7hpAviZKoOJ4/pkMpzfdluVKeWH1MNy27S9FTG8PqdzbcCM1IaH
0NCu0TdGcc8aHTm0BCS/cHEYaFpbMvyhzwzoYqmBV2uEUoo8QRgHodagKVv7M5yaJSQ6LUFUAmBN
4ofR67v6Bar7mHaYZ4OF7QzHKn/tP7RItNXX6wvlW/rwJtwC+gAvfvkrXyWPsIpWqxVyjlN92jte
qMtKSbiC6NRGAlmnK6PCJEprb9LrqAbZWMC9/oMOqxhAmrRE67WsIXVAoC/EsbQhs7gY2srOQvbQ
H6n4jaIUFMboxaUjLrlZLQeYYFCrS/4T8bV8fFadud/FxjQGwvVH0TmZL5c4HMkPQ2bNRevqUpOI
abwI/35QEa4C4w+nGmuRl5x5Ip28rYvjmSh6bZiioLpy4GmaEwHp8gF5zEY1H2+roWUC08a5a6JK
j5oglh5XiioWUjefsqIJ2k7huCq/YIR+jpwEqBIVb2XcgRJcccOg6pEz2F0dMRjEEhF0SHm/W/7i
R6P/UEmtjQKAoxQPd7fCSEF4lm2VQRUj1aP7E9N6xCXmSp+oYRiprhx/Z01L/DnXY7JxLXAYGMZc
gPoMps70DRGyp49dS7QeatlUH/cGTZQB8V4RCu6Y67WvjZviRGmsde0FkxPV2zaDcgeZe5DD0Zv9
30AKi+EulgzhOL1avTWxIz7Gli7W1FEvf+kIMWoTLRlSHgp4Pt3X7LxM7f+GtIKTbpvcRRWEL3A1
m7M04K52ZFs4IdHHqJa9fWJImq8bC8ITYKRBTZrBSjHB1zX0m4ChwIwXfacfQPiWFyfo4417uX13
9b1On1GvKnlgttBYDMKsltFPpd3BKVdo5UEAAA1SAZ6FakEPAAX50MAF1XnGwmsycq78NC4uDTer
k1QP4X4IVltmAAMtBYFfa3zeuyL2a46IVMNHuFROwMenPDiDZYcfOhS4ao9NX5FRWPkBGFUDX7V5
driHuBkb/xByaLlFe1d3VUGzM3rEjhx0dJy/7J34UxM34cxKXMk8IxBeML7Fz0XoAvaf37WiRWlu
0X+AQR+OXb+pYBNSRFuxD0FIWU9MTvaGsBeV+DQ/N96cwi9ggE3208schjx49SlCjE/A9AK69lTy
f0Kq0MRMRyE94TaUPkmi/JIvHJnv+AAQVHMreQQSVmCXhQdSAm10QGi1LdJssS6pVzVrVXbQpbuD
nIq4H3PSTU/3EZQaXBd8EhKgpV3kCluquvLiYo7a0z40HIOYLrfKJXSGwZmcyCN3pyT95zaimgym
Ee/RW00cxkoV5zFcTsE0DoflmAHwygTUGFIw56M6ZYYN6JrAFeLaQDYQQkZIY1wn3kxRDpK/xw/r
i3g688/4w3y3K0WKfqTjM/8+yZ6jymn02ubb0tgnY/9HbbhS9CKomH3pr8VbTCTq21jYORjohyM+
10Lzbav8aAlNcnbE5nnsdgvK1ny3Q/P2LPIo7RCyddYU47QxYmaKKKI3+5oGruA4TnV2nq45VHtw
UNcC6xfFSsFQGF34Z+S0NATvF0OdHVIaBuJJuzzrUvdVzjfcZ/r4g8kjHgwW2Xe22zTXPv/Xc67K
RTPhAkOUqDKtGiVI1uUGyfCt/nUGxKUWU3PLxgDshGHAEuP3rjIv3FqtNWS4PNluUKkhP4P64HqH
uy3IB+Vvo+BeMLeYvb4AtBa/QbZsmuHrLY5C6IeO/+xhgoJi5UesWvmm1ArYHgYtYOW3KqKSpyxQ
je50gxbfQQpt8dioF+zvkAvNTUp/yne8ASRJ+yRjuQtsCRmEOlwn45RBWSO2spjkbHyfRzsJVmyX
qbAis7ttuuzplrDlgoSZajTtjmXZWIYxNCGO2jV8CVGuL1415VEZbLzL5F/D+rIZ4Y6lPijkMMGF
jREIz+5k/jrbkQDCYaMgy/WTTpQeMyPFO1P8VmLKTnVfS0mWaq6EjEvjsiId4D3hAT9hN8+6/aRv
8/WMdtN1BWLEYIoQ0R1rFFlHR9O6bgRUfbiilURctK9JvYjYG05m4t+9jn18S2ugZgvazE9vFKnk
ygeHaoWT4j40xF8yrmhAO3GE32p73ALRba6WELhAY0T0jb4+3tbPhKbeZLBJXyhbKCdQnYTA8jr+
I3XWkjFFfQUdPLuxqntX9vujVywLru4vA2+HACQP148oOkv3ZAAZnfXjQ5IBM0S2DLDmvZNYHI6e
VnFVxLUSbSd7hvgcYF2VOohv9RJog3tfuIizzg8Lw26OJL7DZ4mGgeSIqoLkJtL5B5CGoP0ZoXdY
c8yCbtwzzlDlKVLEz5zW2NSuwiFh35WHZaLJkR1p5wf98+IOrqDY2os06SIg6Cqj0fiwGPLOTsBd
1CXmdFTREflo8oxnhek3lCuEc5Q7c/fj5vjScJaMvqpQt14ZTNCjGgOpDM3WVrivpxAqljpecGJd
yH9Uq3nGJqnQ9aA9OD7534nsuHkmr5FNANZkRoNYZ5UY1DyOE4DTsh7xn150fAVqdb/d7L8q8Oxe
hucA0uXVFnte/embG2ZhvVrmVj63LGVoSNCnx0VvHDBFrDNnhFIKcxDDk1bcjH30o+YxEQeTkmU7
ONGZv5HJbmbO7RVKnyxZrzcJUs5SfKbHQhIzFhzlOIAZ5EENSxKKDS14dqrFjQvuD5vi3es/Q0eJ
HVNP8ES4mmxC643nZriY/jkBSFDQ+w/9OhfqXfuncY3Kb8TqnNlEPeFdSMldqoSVZBtaHtIwMA18
1yfv82yMbN0Lrr2/i6OBGyikc3XINx1Zg8aeQmEAd4h68aICCrKxpJj5O32Qj3mIi/I5L93sECal
cN0BnHctLkaJivuE8J2XYgXndoZF5WbkoBevU3KjATnxSW0Vq7U6QxiN0r1PHm7OZOq440djqtAy
dRc1RHQgOvjL1l4qtr53IVBvkTEkLVPYcVmRSXE6EOjf6R/oovhzyHKPocWdqld+zWKxlSvNU3Lz
yRjowrKkS8BX8CwNC45a7FMYESPKrQ9K4Hm5UFjdomXGMo3qwmKLJIFaRXB58dFMi/U4d6R+lmmr
K5QL9O9WzwlIFXwcNuVLIhorQAyApCvn2ybqBAWwf9uai/J4n4+uMlNfYsc6ukSQAvNXNBoa9dj3
T5xMagijEffKD3bL2R/Cc9+sbivnhKkJYrDTKMEZYAmWhuWFO77fXhuzuBN9NAg4/Y/+d5cSgYQj
l7nzySJJWOoeLARMmYh6CyT5JdtkpvNxPVis4goDDe6jQyWgzVDcbPlFIfDK7vPqt6GKbF2ebeaQ
8LW5CswbV9Et0wBwpk2O3PoEynFXScsUcYQUX+qR13sP01ZxYL9xEC4XNZ6gPUxaltZbpBqbhPxi
NIhixzw33KBYoiF3ZplqmekAHHDtbJKgMrFQxVZJ37JgEWMXK74Yi/zoNnPzeD/N38dDVUKrFpDJ
20pkceFaEH0ix58W81QF+3e0EwPTSm/jPk7WmbSIVC+3WkFpiPWTV3l/KRvg6R5Xqkvs9p+Xj7rM
dN3ucDB183pofY/QLQnMLF2rUFYhzeECL4mbThoB1BUPAFEMqDRCzrmffzHp7f0gjFm6mR2GoKxI
Mivh1VVi5DgtGNe+pYf2QOaHlyps+0jlKeAKqTbWYMlmJw6t5fFdVnhuuTgUGLTngr74+UvsIvrf
qhvoPnqM3cBlCrVw2XHRDc2OLeTZviMljQupAU/NI6KQ9gqFQZXTViJKZM6gyO1VVwCcwEfV1Obe
27m1Pgx1224P3Xtj85OltVsFkP0QDVZRkeXaeZoW3nE70ggMsjfXDyWfiyGm2a+bywL6dt7J+tH1
r6tVxLKwBdauu1sgQPVsyB2ULGJ1u4Y8bNdcDyT8BeLZJvTCayq4iTsM03C3bL+8n+LDnH4SVQr8
yBF8G9t1htE5zGC7JAvHaErBN+x19Nba+MzVjfimOS8J0ixbySCBADCtAWI9N7udnaJMU5D7ye/H
P3a8NO1kSkMA9/TA194l2GfErBWNUmiU1yObidCo/4XbKYqv14NXxKzL43RjZ6cjVRwFMd5xZOga
8k9vrMYqc2vGQhTPajDKWsyvvdLjxl9SQl1ai91XujfjtIQKZNzUUxeX1jgiWpYdqCP3OTerOGNk
JDGGziaxwINJWD1OGZhG/y6FcryUxOmzqARx7NPO9vHZnxcqxzgjoLYheDxZWKLl+iXmSt4T/eg9
5QBgwvUtdF2ONm+CvDsGVug1xdNXoxvJyqicHQixJ3vSjX39cN0NtyzIWgy3MdMvmunf5flOAXIS
XHEEpFL8g+Gu2jBLFKXstQOl5JByw678lUQsga+MmCAAjP+wUUMDc6LTJnK0netbx+HeDqi6grFy
IcUTyNrs3bQI1DSE5x5hP/FH1z/VTrVsefheQNcf4E4MEGk77JgAB5c5G0rvhujnANIku+WO3omq
kgQ51TlzwzU9F21a5P1DzgBsgyovqel19SMLc/HjkeimzuTiRZXaToZThYe7xSxcqk3QXiCUFSAI
pa9zA2wwwRgaTZbvbfeAoWhB5qo586mQjKFWsTx8SJPamHCJhmkZBG4/P7GO3xgtwQ35ecwE/lYl
eyjbS+OKK22/ACufIFzZ1kBNy15lzcDYyogzO/WTScn/eC50IXP+uKYVc3dCgYhNGmiB2on7SppK
ByF/jARZQSkNa+IR8W2yjgTOZ3au39Ceo4i1/Z+61Wz0MA1UpgBJGSqhsytwhRYlqxHjRNBOjtVY
E6rOFZvMQ6pRB2IrNMxc+chylIpFkCARmlmvGC/UqMPTivB8dbYOSdXVIimD45ATdM//4v5gCw1s
ukIiaWg5lC4ohRvWL8G4intxD0BBP0n0bOuXwrxFBGJGZRcdrzF2yilXQNzpSUksvFSjczRgkMYE
+k02AYqVA+mFNmvzeZXsR1s9gkJ9F4sDb9a2aKCgFotz5XC12+ZzkfM/y5dcujpvNVYWpBGf5r83
10ri9hv3YUfPR7LhkU1ulphnrptGRHgTIrkDkKIUHnFfSN1O7feLVoyY3J5fg95a0WwyPAw0meho
dUetRv0gER3H0wOA2vY4D43HAI5wy7jAqXLtdnJo7HpXVjvhvWiJlnnBFdGmsIJk4tZNmDeid5Hm
wu2QiRC5yYrKlbE8uP6rrzr/6gJIgLCQ/La6Qj2kgJdbxAVh5pF7h6nDtBcwmR7bvAeq7dB17sZ2
7ykxdJMv/ykl0MXpyp43JzVOlXRwB82XwL5wtNyDBPgOS7Lb0ctvwD4KD4Uq9ivi1oKOzrHOYJ4T
mQqhbl689zthMqOv6JPhD9ptSDkPhE5a8MPzBebqCdYJMgaSaCr7nbSkn3DAeVPI2W8MjoUIxydX
iFbZWowYfOsZlmiuurxo+QGUPO1mZnRqpRgZlgxig2a8tzzX8ohYdUJK1lwzPhnp63191FQsapsR
bM2JsflUOQFr9FDeLiRQKLi8r4EAABrAQZqJSeEKUmUwIIf//qpVAAmDHvwACVTcwtWBfjcDqr9K
0O3XITWAKfz0dFVa233Ou0pZ/vRUatLZEuhIudNRuagyJfuuJf/GP6XtR8HyvgWkFlnTvcqUwbHe
SZvWu8BxM5ssC40QVQwrFY+b7BuC0va6PoAtJfiTX8CuLpsLlm4Gmms4paJRd8bdWDiI4m7Uuijz
68eLMIDPFE9wm2mp0lWaGSyn9mKJZSTrgmLTT5H0OTyavVycPiy0/0T3DHzfnYIr8K3Q9vLhGl2V
ZsB91nln8NkqakxSXCX6LwSqdjLP7mAkZXv17yufPghAv2k30uEdKZdq8+/pcGpgCw++PtLJUZIQ
pniYAjPYaOTkvqUhBpwY20HvmBvFVooEh2NNlhAjv4OPjpDY5DEKtxGAVhPg+cO3B0TEC862w1dS
yPYbmCn3FXWBGasVRfnqbi7RGDDUI4nMt9aREz/8MLcGwZc+6H/AIhFI6Z6OxyNNKbeCKH7/taKz
v4fOrXOm4MIeckdFpdIblVaSMCUG0flG/jW8aRSYMag2heR1dOv7RA6LfBPOuQGWJAE4IDy9o1Ef
scP9V9BC5eUzot6w5btVQNJCZuoIIdsryT6oEo4VppMj4NKeXSHWGDZP//IoI1v8cHi9zmbyXBAZ
IIVl0W1FNQAZ4U0NaWol26VE538dx+Aw+HkL3qcUMFQVdeCsuzPCMZd8tE4o3TJUZVWUECaoa+T+
HQIHBwT9y9Jf8kDYn+b/xf3eFgf3tyKauo5AAI1RfxUUVCzRuf5eboRgf0ax7VGig5UMXborlom1
T4V6uyAkjMeh6cWtqmiaiBdbdsVUH4O36SOSghdgpl0TN0R3TIQKVSGgJ7AyFqJkKmCTTXrhkIoL
/oE85rejNv3yig4rjcswcCFVDgGeZV63BmBgUDvjeWEAQnYxbuhe1KY56CLES332mmz7y9NjJAOu
3P3fdp188DUeFJ2NLMKXh8KCJwmHxzrBYONhbP/x0mnuVWvJWc66NG89gfkAmg/6lEfvs6rHmf0Z
1wI2PrvlJhl0t+Jvtk1eOZPycoJmju7WW25UucEPhR29lcRVepGIJi0kr7y7rOlyot0TQCm0a59B
lpGQ1vobXtYgneJ5uIoXLzE7xreKedoH/okDWCsdlD/GW3pnuyB0cN9GhCBe+QS5X/T1UMyC3FzD
qHL5WHxzH+ajywi7jXFUp30n7SdqATx6cuLq5oqqaBWZ+9axDafizMwIqAdH/ZNtZmNjxAclXrP3
iHaPKAttuQdOk5dHN0ziP5ut34lvyr+/RYD7UkgQOubQ5+zku7WMfKILV2yOT/hlzijgSobATSmH
0lbW3+T1juIfC3vnNs6NodPMFoqFgPFjNy1+CoJJ2ivUqIebdceawYxLVYuS+Xj7jBXgUkm4E+QP
34m+YWDSZXrCQXS5qIuvabuXR1kXyZc5rOKs5wdPsuTPi/2HJG0/pkifyrEq4tYNtfbTUrxluKFT
R1mVp3LkKo+IwkFK/Ejr5W9WcfaxXV6meHUKbEYwf1FCiBdQShG/J76gz9q1YLoTmb7QOYxN+G5a
PCRTETaNpxqheHolMSZXHs9ch9YJtxTEExkMtdsjWqk2j9CJRXVjCMVaaFNTDSPoTBnNtIEON2wI
JX5D5ccLgWf+FCEiofomRZ9q527/sk3Z65/9ymaBSP9vtb8FI3PyDqWx9AimwV9X4ht82+zSbRxF
aee1xiUtWaVHNYns85af2J9i/ynbZY5UY3U5iP1GpHOad7Q/MUfdM12q2gEpA1lD1KEgtyLDBFHV
DFrUpmfSa9luz0BcVtQk/rlg6rxtmlgxrl4R46Qz6WrB4LrSwyTTlgG6xkVq6IeDMMeP4A1LDbgX
fBZJgpi5m+T0n37aJ5ztJ2QFUfuryeCPFDEcajFwXN+6e6uWEdA7TOdX+GT3alk5c8q0HjTVdaip
Jb6IoVxLmgUd4O/8pu8rIY1z4FiOz6uAdvkt0ksk6g3eKFbNnXlCvw1Bnf5dFVdhWnidGsX6Jnij
TXjhv33e95wMsCgjwDEElGgaXysfVoJsO1xM1O4ba2v3vPSP8SEPgInCXsHaz543ULHq9ZPljewl
ovhGl5PKomTWrPFjutdI5M3PEJaEa17C0sAyARGLCncmOyyrlS97xvYrkOIceQ5d/TRp5Xpsb/8e
mavQXplHEriTln75me6LCe+Fn/U/nJk1LHynmf8gSsyR8Jl7Sd8+QmklpsWdLjL60JxXZwshxy0D
pC5VLqSL96329UwDeD+j+6bhErWOBvSlgTsA1xUpwN/u/tfeYtsNlOmAxL9JhPZqElHxvaogp1+e
sjYTjDbAfeOOlkQmgmSJ0c6m8+m2RViQa1Mgvb/lxq6e91p5oREaAGV6JQsxVJxbIZxjS+YKfO36
lTs+wxtWiwhnl1s+dsREpc4iuO5a1f//24XoKGNgCJWt/X6z9fS23GabAqFcP+A0zEZdM4oLTwxD
yjts/i4VLq3UWL6LRexf6RKrZAx15xlb7o5RqhMKfP1eRgmT4ybGxw+3G/qzeRNpYbVElWi/4O7L
tYga9pzLWwFy1Wd5yTtW6wmQdDEWBdWJ8YKpxDKcJ4WNYcB0RGTaMTukV296PaAZ56FW0KDE94h7
ZRBtDXSt3tMtfh74HqNVtreh1mdFjTtaRcIRcJJ87/3sa6eG1c2T/yfCpndVL723oEOGv3Jq8aXH
JyojT6xRHOegZ/nLpVQjNhYSlRFuWU24zxqDBBi6ANgthk5GSTOlErbSYIqTC7f63sHW7uL+esfC
K9BLqMpPYiFG1V9q+2wTHTPByp8WRPmGOL6nGvcNXz2SPJ6rWOeUjSf/n8m1p1YE22Aa8L9a8+BZ
Ej2WqWPM8sIEcwpp1tRUY18duD5aibraz8fPxzSAeZVfgObRn5N3MYDFCXlTX4orsSBgPem7fSxx
4tXbc+pyHGxSoGAK0LMrKAi3ZhnmIXz1a0x+SIUxeyF+JjlB2k/+RIDeIuRlGOfymQSCaGgome1w
igMc5tFSys+eLFPXEP8r9JeKj8O7pbRWbz/+36D1188xaEMoJNWzwPNsjHCFHdnLq5r3CQ6qjYAD
OI1022BfdrA6scym5HUSDfmp9nI7K22iGOLGvucfg5aw9UOzJ1rtRQj+QOJsd/KtZ4KPiKTwI6Mp
WZT8o1EbexzEZezH5/5pTKsDtPBX7KYkS93AZEhYWQCnS2OQyNDHsnX6gWISqebmKh6ciWihhLEo
RyxyCufqCLdwt0Ed2es+5G50XAJtCAi5nDq70PRND9Ndd7MmL8l3d+UWOsPHNPzTzrA3vfGsx6ZH
YTevtZY3DKPAsBABGf+6nmWnwtz2n4wRiSmiIBOEe/FD+O0VsR7TGL4koBlR5hm7Tekv3I+tasv7
MHDKWjQW4jOXOZWq1KAgzUkukQseGDhNAejp66r79W5zvVxhO3+7XVNHoT9bXP3wh1bAkWQNS4lk
XaistPqDxaQ9rx5DYbZK++NwY8Azjd4Dfs5m6gQfun7JNoPM4Nd0QrlpCRAYuA+xc5a0ujpSKpyK
scHOHOWKBjf5XGOKLlXqODtFwZpR5ydmvNImmkgSW6jHs3XKYZsvNG7mSPTGJ3MR8loY/+udrRLG
iNHxMlVbCxLEPUEnPKm9b+Q/dB7RoF21Veoa932FkJJqcOb/l8mzVgLSWZJ1twqigyGSVnijxMLM
fAUJG0il0m7syS0+5UftMZx0ZmVsin5uZMKJ8OYLGHjOEMDPokjBNzBMVDKwX15+kHxQz9Dw63h2
Mc3+HzjHRdL9/blUnX0Aq4M7EocycfC6gtHudghIKaITDwrjWTgxEn52AhxBatnSbAKE+ODihQ5i
B8LsvG0tj+jlsko9Hxt1pDpXW9QAebls7gJje/kI0J4i6YTnwz0q9yrauj2L6Ardns2ekDgqqy0m
oWXa2CBjMbGhcz5vJHdAjjP4ulH1yUHHX/LnOxUNkbsm7rVGmLNa3zQfFZ8qad2VsNl+8CbjKQ7l
gsMnLul8W/SCb0cE73uIArS2X/qyNLhjZs02iiuQAw5OlH82WL+nGWX8xGQ/3Gt1S6IXQCPlpkrU
12JtnFhG3jIzb8Ch+eZ4C9a+C95w0y6xk6/D1p3yAdUVBU35i0ZRzw8UFXUAIy/luTmDEUOscpul
FjbXPYTDDR074LuDrYkXu4O91knkAC5na7A3FhFSuGovyGBkVChjlU3obwU1i6ojY/im1Y8pgixN
/H3fSUlpeQgaBatyzi/Mrw+ozVvaTTcwzmXRyxBa0Z58JemLEsLJCU9TvbMnArW8ZPSpT4FzGpQk
gLFQtC4I3+HlbGVMAdgFJpDOI0JONq0XhdEw27yPqvnniC4j82NEq8JQ9VKJagYiDGNYXqKFRjT+
5q+ZGWlrhFOIwn4kaChSzSTY3jOXCx5ibJiuAmitFvzsXWyMgG6HwuyCaHFw/fzkuUuEPMADYLIB
EMTd/leC+Yt/NUMxggd2v+LKoJaowxYxJ8T2BxOnRUeXEp0BpAVUqq1LWpenO0nlPyQ+uGft8wUi
/+ZOFgECQLrO8f7iSywVqAx9QDxvV8X/kn6vbJBRiLfODXfScnNt8xQ/8dNgAcYFAqzgegNt0hSh
9+KJnT8jNUprlPnfbM1vY/oa8/+e6nMZmOhRfUFb5nr+k0VSBxaBn+rzhJN1gboCtjD6UgtmTHy+
lMkRoS99jBT5AZehoj2dpNmcKOob9klPohQGZo5GrUU6p8qXBqwSYhvuhsGdHgqxso0+mZclw144
ZGzvCOw+0ptwOhLRDwe/tvp3l5sVtu4S/CWiSMWtG7NcUKeZ9F4JP5km8kXx1kEblJlDaJih7CiU
rO7Ps/bZqBQBQcbEKswbN0nHRglnuvwoJnXcfMukfEwDJiVnbmDc3UoNx88TcrmxErje4Czu0vXI
3MY0KFdYCSPM/hsgw7+dTuxdl0ZY/4RkiCk+ET1lx11IXywjQ8i6vDFVSnBXnJlyIa57GLVezfTN
skovWfBP4hwvh59DvvOWgRjmKVR3IdWkISQRk7L4XctepJ/di4VEzgjrlkXlmsAZxsHJNOR1g2px
/MHUPyJVkc0k98BynCMxEfJ/+SBJtQ8OVMzKUWBdXtl1D+wSdQOakkq6mcqTSbwVxFSSv+P5RA74
kqHUt98CdJQSnqqyHmBKE4xoEoOKF12rJoTBNXJsc/Zmo4ylo8HvSdXMljrDryaH9qXZj/5vgDwu
iS6kQHh7lBKYzQ64uY7F+3patHu+WvDsubZIywQh9rj4T4/xKecdjt7cMycJ+bqtQWW989wcvW+1
//FMMfvVayiMkh4/LJ4OO3YeJCmVDjkD4qXMTe9SGMMv0zydah8BcMofIUIDe9PYJ4D3DuXFwquW
g06QMFb9MhSo/8FXvsZFZcjgPs3c295LJGBGke/paiAU10e3uHiCYvPBbNF67TzJRbwrKNGM+5f0
zWVtGaMq+NgoW9XKXZPONYzFL9SxHgxoo/WIoDEuHAUNb//t0a3vTP4ts6h9dy8dejaaa+VvGPDB
BRWZcgg0bGd5ExLdJ3A4uKSXFctJhgf6c0W7PBr8BfkztePZAbP4WhlWFMbWUxlfAA8nX5/vuxyH
anh+rnZKxT5FiMd1U847QGzJINl1I+xj9S2l8rL/iPG48Fln+th1uFq9y4G8tkKQU82x/eKpNjVF
ZTbFDR8of/qhUJBXWDno2PjorY55n0U8Z3Uv0uww0wBQequ1aiNXASpQy+9EFyXgZggcEaFYMbej
XQvukMeZo8j+bxxYmj619yM9VLrK044JPf1cTuO1XoWXRYgAQ54WQbTtqjfLyFEHcS+RGxHAzdY+
sGOF43VulGS+LLLeL+R4m9yY+/3T2q+zhdv1zTlKNrCTLfFHFwIY0faXI6m0F1m92bSbkM0ZJNwK
cApaayBv0+ACdEFzwLvasfzxhKMEdoX0TFwkdcNYOJ5kcRDNUUErKx54XqBCvsAJvEiIcg8f3+S9
FR+kIPj/nVR3U1s8PlmQF5cT18zsJkP436E/eT8aJkXh/IOaD3MvqEhajshp2fSCUUzIqKb0uAm2
lxqR+8G34eP+N8am3gEaMpwAKq4lnlhxFzVZ/ApoNJCq147njxsDfwB2PLFnCZCboAynI+QrmosO
e2SR7h/f0IB0hWp5Ww5ys355XyTAOrF+xxESc6DD6eEdc1JGMDXzxsg8YR8B0H9q7vpw+xCrtkSy
KcfELpiVTi4AD55YZtfN9+RakBfEyO+3q2aZlDTRh/vb/qYGSl68ALkciXxP9BpZwKCX07/KGZqU
EvMMT5qudKHT59R1cB+B9EZSP/EDIfXSFKFTYqC49jKT//BAohcp7z1r3bN0XLOpHSmNqEt8yVbH
KAQ5yQkFxHcp9RXI4F1NfV8sEnRRoiXbRFFX6Cp5JFb6K9BB9c89b+b5VsSYZtXlYvvfwMg2PVJN
Z2CbE4lG6WL3cspDPC2mg/l824jIPKp32kcWAHymZYMoo9XrmH4A6UzXrY7P+PPKg1jfQqTs88Pt
XI+nDXuicK8zbJ7x5zxs315aGd6CeFI5rWUmV2XKgD+z+FwnMhjqdLcff8lLHXzF0mJnoEvY2WLW
u8Ys4jF8WYAgTvKB74vLHxKsrVOi3fVMt5mmX7UVm97yy/A/62lAu3Wk7JiFaFOl9ulgfQ57MSmN
/+AivKp6tmdAhHz5TYSR6DgHq5j2nwgO1rkn1HORkRjbkkDFJOCxt2nykmKMeuNZK7viLhRhxL5e
KxsynaZ2KyRK4Yzh2L9qeL0kjL/RZirCj7Ntviub/Ub+pC4xNPN8ZeeHp8jMLabuw1z2vpf4f5An
Cw8NZKqVCzCz+KIleJWocRbIsBUN1w+os9f8ITWgCnLGm/NCkghmfQE+tUkz7pa/oO9v3eoZqnk+
GcdT5vf4peY/BwkfbuIewrVxwmqno6WpdtHVlirHQjzOZ1fLqTlWsiDT/wo5WWvdLUeDaGsgY7UY
RvQUF48WfLThiYoH9olzgBs5SfzawPPo8g6Lo8euJy84JvW8ZF12i43VrET1fJWecfyjWG+ql6Im
1jsF53SA4Au4BjFXaC91yJ+Lmj5OCV3bc+bioMDWXWQWesDa+DjjJk4Tfzto3EAa2xy/XQp6mmiL
8yQUJE+JBkr0oLu+i65tDv8SxJmOBShS2eUTH30jfvv7Gwhn543c3l4o5gcS7jPqhmmQTDXXQY3O
uRMR5K2kof900dxBx3iDzYg5Fm2KPaMcTboHsgx+8drUOPmV4bZXdURkITezy6HVdhc5RRuYHRXx
c9gDAGCAvVyfdvfsTkwx0EjJkbtkV2fWNrzXrNQFBSBImNG1nSrGspqRwMgGTJqLrcWsSn3NDCCv
7KtET5t1cB6tIBQ1oP7E5TyP1zVje5B5L8R/L0UHB+my2fLinEuMgdd691PDuO51PhNNjQeXXNTp
PCPV8kE51dUsn30HMJN0Y6Kqm/mlAM+2httdZhxI81vi/lJXuZaUdAKAFYiQMZDdjtngyhOVa5Qy
vuKY70XPrduJObae2X02Ht0Z1j68RJCg4uSYBy3hf+Qvk7wIYyuAxo5Cr2y+4w/7vP/P2FHIlrPW
MIepKX5FcuFIudVf1FcIzz1tgxaBQkqH8qWUVEZwtGsXF5/ucGFOmstts6YDULyvD9noLKw2xVNr
hq1YpLwe6xVn3ZEL7iAFvbnz9gG6EUKkF/pTwl31ywtVfmOwzpUXrUFRDmrd8FxVXo18YaDho3IK
X6VRXaQgqR7h0WcXM/xKyH8iB0k4+wTU5hxAVYrsuD08eR20AO17Z0l5iZAdZJgSJ6M1OVCL1uth
gzRRTTNz0yG4H5L3wkgbsuy1+5gqgm1PaLR2EwbnGKyLSPDAiZ2xzWZl6Fu7dhUHndjrgFAHwFSO
jqcnO3lCOEeRMscJ2p3pxKo16A+YN8IVlkg41c7TSVgyln/+wzCznW19GoxAXhBiZhZmrEulkOas
gJX+8b2WWUx9v+HX//6X9t/simGpjizObgy/u6nqUsb5NCm6vJO3aM5WS/DogcgFsahFrU7K2OGd
or64fgq/0cAyJ3bIx5AYgHi9U/uVVODY//1YSMswUfrlPRfAlz44T7rBQpuIdKTryLXqkm6o9Net
WwUXd7gKk+LiJWcFUQhAy4WJA28JyJ9Y0rbH3lnirpPsXjcJsEMTg+spMKLgKg4vDQ0KyShorf/s
iTyK2VPCItmd5u3UzqFnWFeR2a+I7XhdredY3ckfvRjgvWW1iqftLTHxHtFqJ2/3VnacF2tdH/bt
PjoUjK4gEQvukNZtCx5tmlq92NGPdu5ybK4n/hCDhHRaNAxvu+H/hArH8WW3ZTBCabyGtOl4d6wn
ge+XXHbSpfVP/QY9O7Bbx1ObGu0bcN8svSEzeZimw/Bt+coNR0i611UtnqormPzcgzqBIEddu9Ij
afpxg7xHavlrRKmSIgtfjQcMvwbmGUAxC/S2ibmp/WgQp9S6WOHC3ugKA2kCMD8094rHWz37+/4Y
5WotsgUScIZVKxp1znYBjuNwDAku4jAC4gGrcdo+WejxuoHE63kHzGA9raB7r5HFSqZG4B9GPnKi
T8czBXZiMQnpsYmuPyAunWIbsep7Zv00iDc5lQaz2OZmKNXHk4I3Iu/pVusm/DBl8vmsO7ETOZGz
uEBjELNyJCjodO7XmwxwpS8cYsqVWcjg8keckeEyjFMJweVjUPHs3zbMUBs+1L6zSvrsrp7ASsE+
U3nCYpM1lzsCxZqjxOiO7ELBXqGQlVfqUqHNNg3I/fN7DCEgtWDjXCL+mN4DHyyBaTn0gHanJ7zo
IEK2HcwjTw3+dMb79mG5e8PmGrkDZ6UvjkB44RLP133NIBkykZUN8Fl0y2K88+ATvX+2H/dLe3eB
dPRGeqn92aGGPgw8hxCPIw/7f4YhTezY4ks9NyMUltWNMm5WFzt8WiUMaXXo2shulJvHK35Z0wh3
z4YywGPW9JUQseHxonLh0CIOo1oDCcT04YqTB56Cqs5xl9dnG2B1H0BzJ7P+nzZ68yasWiWBExQc
5wnBBDMV5PR+GAX1UMrf0ZDmS9+kXo3ZGP8QozPaWXgfPZIZLMRHmL3I9FOwQ6/ILnEPFjhQ6Qcw
jT3w1QQl747CrgSfyXnkaDAFncR5YYHUFyoMv9y8AysAABLsQZ6nRTRMEf8AAyL60kACYZT8WzvC
rubnSw8tYfj/2YK6FyzZnI0Tk3P54Xy9NiQplmK0DZABklw9vDfBjT+RzBLj88hCuqCmnXnFgYKM
GstCWABKiurib0S7L3MeaWVIIsCYu6tDtf6i5/CIuj1Zf4JT3U35YADmMxpbXduhPEqh0moVFZau
1oW3fGumlqiL6wZMI/79TdUM0fC7LupfA/3hDgDo3sVUEmxn5yuSnc2pGmqZvQE4EdptBRE/dkXj
cy/HYEWyd3TXcGn0Q/hNYCwv0siZ/c2rkFlMFWvXUXQTnf2mob/spq0A6dNr7s7ZOebFfVIdjPo0
9cGJkk1PcGWLUed1OZ96whI8HH5JkYKq5qDZbJL0iso+cJblLUj7S6ZOwb7JbzjhaO9b0MzF2Nbj
CyZXEEhZ6dFs9Z8Os6C5GKgkh4FxrJD/8BvciRS0u+kpskjnVe1wr68hvNrimWE7TNXIUdt/hjvK
aaPDONAUIXpYuoe5AFi0JmeY/APxlzsUWXz4lcirQMUAf+YFeM3ZCqfcQTFT+YuvczgfYdXGyIJ1
T33S1/rzmk9E+HPGLAlx3bBVtcz3k7pquRAZn9IX2vHhVeF5YZwVCrGKDani8BkrkK9xUQ9XFOla
hLqDWW/pJ6UuACr1N41t4PNWtMf0yUuNDsZCdqGnCiXRKZmWnfiTRwnt3j8LvpqY6nT/wKkI7xdU
0EuvjkXF6RkBaLGuarnCRA0wASn+nJUc544g9JsF8s5S+v0JL3ygvVQBstABCEosWajZJgNsXgT4
3potzS/5Ogkh3kqjFn01cP7HRtkKSqS2eKqeGewkVX6Fh90aUiJlbT32SF/0urAZH3DoRIispeTh
lRcdx+2r65OCkUk2s5USgbcR+GuSdq1BrTm+nfSuccf0kFaQgy2wuwrqXuq6BtXk3GUVbLD2zSoi
zDa8Z2lI8/D3Dqr7eszMd0UH1aUTn1KaZbQi8Lz3hlO6VsaDE8HDOqyXciOPsUc4p6ilx/3/pZ13
GmTulxyNPqNNqNFm5A08omhKwjn3J1cIlbKwVKbGmZzUbc1/rIo6K3bZO4Q6Tfv57zn5VorqMH6A
HnSLytgTmVSc0bcsM9WudvHVcmPE85Qq9UovVdTgJ/a08N5TWJXKQ+VSLak70ddOQ/+ZMdqn0EKt
NLhxU6RLsDKjiD+8A/AydH5wGvdhrebSssnzVM8vPKAyTFSGOAfvD4k9jiZwgDAd5XzxGQxVqLNf
cBLGgX9D80oL16cPLoTaBNVgnyagoiFUi2xJ2405AhpUZOu00Sn9D0f4MltumV/YpnNSkhp68hkw
KNPCM3Y6dUq7+lF/nvIWQ2aSFLEswjDPiuPwzi87Z+6oin9YIAB8Bls6QYp0Cbo8H6vuNSLTSdjA
eu4wNKLDPV6J6gP8RKTVQSaDMjnnYNygpUELEeXjWcGJRqTvDK2idvLVqf87rSTPw3zSSG8zMkjq
LpU5yOFDZKo+KMKhG5geQzU8L4w6l8VhZ42PkRoBbLOpgNDJYs3WwfBpWsAY18jcT/Em0s/EDVvw
YDM6EzG0Q3j+H5UcipVrEBGgtyr4m8dZQaK1jhdpS4y9EeTQm5Z547x3gf3Cf64rE4lC2tspUchO
FIoQasPN/ywzjVnCPb7AxXfuLOSVvvhKImJdK2R99KZO4Q7oAxuJkLE4rGkAZok+WoxafvNy1/9n
2fIanLh2EallddRiyffWMH7vO1+CQbLME+cxZ3uYkvVM09a9UeEeA171ROcJrm36ISm+HJCnS0Xr
31xhutbjlKxAB1vq4zHSTFlQInqEgs7wPGYpP4ID8o0hRR/tYeJ/FZyqQzevHAo5x7pmRkO4a1Ht
plZPy8WS7arH3CWSUNaQhD53C6d3aX3wjy6re/9fLdOSR6RnXxG7nMX9/ebG62GA8wkDGaRSr5xG
b4LhVVUkLMS9ti0SZSIyxSx+6oRrn2rFnWOAlN5HIIBAcVDPllzEwoaGkiX6KfGJ+aYmDrcpiMKy
+G+jSPMEHFayzXVejjImChSvuqjnY2qMu6I/bhrsy5SJRurtAWDEyw/xq0Khtks0lpimcTHWsSC4
gt4Km6cEZaQ0D/wqBvbvFlXc9+eaIodYDP5aYQ2NlQlFBFjabIm9Xi5i+t5Zmek8NC/7b5SgTiwE
fhBW1kUnc8OdFXqefT4XBfeSo1KOdyJupO3nexhLu729C0eFNieAwUdD27RVLwbs2fnxPEhTltoc
4OumwBeYC6hDLJGOz/qzEfxNLYiMZWzZ2JVXPhS60DZ8tk8c1VqGNgAjve/PiDsCrInsJJO6CJXV
MWI7nLwrPNHC4M+UXjgIFql8viXfckclPq0kodnwzehD545RiY62aahIyloZFSphqtw1KHY1QxBv
BcVkE6EafIEcAPmhpcO2DdxsUBKAtTY2p+G2IPr+wjeaBHW8A8juDNBCF9hxuoXs6lHaDgeEINSy
zlFl7fvmL/WPUMkfY09nRIMAYbGsWOtQ3wXaOGQfx/jWLTfNkL9GmQLSsCWWmPCTQbJhO0rdkiL1
et76zlJ8z5HtUVcR5Zp5lwR+McZw3jTS/d9HF6j09smOth1DR98snubfui3ZdRCkG/YOAMdwbwlx
Av8tIye+MOu6EDYe7rAiZpJTO6TAJwQRry15N4LYxvMy0vEOlPQBaRWUi80iS5EhadKqFggE4NWO
LOcaMNKMih1a5z5PXcCAH8Fqfv4rUxf+IXZC/ZtBTOnmE9puwBsE6g+na2WUJ/fFBqiz5uFTvb4S
mMI364K2ePshMf7bUAPwVAatJAViSNG/9dKdvXN2R8q5+JRwA7gmKLkzoh0JPB4BkW4QXOkzW9JV
f3FJTvNmJRvy/ug6Z0toHcFMVJLaHSzIg9g1Dtmgw2RJ4tEW38Fkx5A6LSf+yPDJ8g2/xZTkin8n
w0XuD+f8DXUCGOEKb/Ap59Wizd1aPCtTe7rmV9+CcCP3Z/N8XZAyrBC6FAVYOOQ4PPCima2KNAqX
KffWFa4xYkh/c9JpCQVxn7uwfJGBukDfENra/edKiT6fOge3Dg+UMfmiBBy8jfqMOy7QjzZVhbvi
H/SyyfOOnvaweVBmQhiQycanSbkZAG3jmVtktKZRH/5x5f9W4Je1HIGPILfwC2LItfi25S0ugNBT
2XcW15eJW0Qt5X6nfLjXAZzXh/Aawn7f6oxQ9XQ/ortSSMx5WAAJYCV7jTaqrwlh3Ph+VGNjNiPA
omaEoD/ti6i7fki4WEVGHNatijuWuQpP4vTUEEBeTZ7IYoiOP3Pvlx9MZ64x+cQ2Is6t7257F3AC
2MvkrbPO0M1WdQb5jGYHnjGCKUbFkq2C9uVTN1gj3Ko1Myg4BNNrzB6A78T5RKwj7ARsm4pe/oLG
WGAA8TPlsY3AYwrRNVEN/s7ZwpAoAtndScB8hRGL50eajFOjxgDvVEBHIIJAcGOiTfMvWeuasVd1
y8OicMzXMz4mhJDmGaiaCLa5zzm2BvMuA6ZqDGEi1cK2xNYuF9oQdZF2+0PBPCFNjK9fzqQNHHoo
FLZA08WgFPJpSL0EnmjGFSbx0zfbJS7byhSN1ziZuZ8qyda4lgUkDJPJyZEWMpeUcP/2hgq3Hsk9
rSfV5d7CpB72JhcTOciQC+yRmV0RkgHO/NuWSzEOSXnyqwXIRXeNDXfTYlFT/5vsLS5ZvQnDSJ7B
CnKsEVMjGGKTUhXlhxjqDpo/4fDSCGnCVafXyYN0GZ6dBjcrfGBX7+7Z+DkJ1un8iGMs5VVYehEV
a7D5U+Qa9vozpJxoQR2E8Y7qXyjWCOAAZz4L7Gt5twOdtwjfeZIzcP4DKvtQbPizbjcwAb3I6iMG
ZyJi3OjmFFGrBH8cvJaIFJEVJjoJJ3fzMKy1OZdaCPsfZLcJ4BzglsmN1DiCFnzosyy5Ohrgi2ik
ayCE0rbLKWe/Wkm0x4oLtqTY1FBc1JIWc5y1Fcd7vSmbwdfA3pvnB+HvEdghhyJN8ObVaKTzi5BP
gYbAVpVMxBih9rO4hPaQE4p+zH66k6a5wpjOsZy/TUPMb/4e77wEOUT2gj/40L3YwyzhabupQNob
mGsE7sZv74sb1RGvJEPPSyCQRNG28PuN5EWgbduqpZT5la9Jw02upCOZdoNiVAqO/0p90g2vOpsC
nyfWxM34gZnB1pLyzYv3YXhdDEzD5qcg0D9r8YojDzSKblUNnaCtxL84MTbSUGa7sLCz0qq1jhnZ
7B2Oek+owXxHS3uUWDv7KEkqOEhkGcqRR5rv+8p9SWk3VHCuyfayMUDQ1v4EXSIPX7GKqSvDcBPo
jakAYzjq4qPLKzh9Km3APAwdTYj4YZZK8yNHWiQIramVZP9GdpJNZmzuAoZ2LCcvO6jPE5l+ZOjN
ThE5A0+5CKL3b2Q8VBYD+E9Hq1jfiNL8aa2XDE3uS5FT1ZnBBgwZRXyGwvhu6+eCAkjqXoMb2Obo
7zJBF7Hpx6Tp127++g4xfp6lysMW8cLsaFGD2nydb43HL40/ajL9KdVo4zEKTB9KRN3s+yqxKHvr
pBOBtMl8tDwbTq6PBfku2mDIkfoV4IJlwGPrkxyTBFlpZybW0vmcZuuIJ7Cs2qF4DdjQ9CGcHP8g
uPfPVz/pIc5+IIHeYzwbRtY3vMid++c3S0e7Aisf+7M955g9ODqcz8EX0xK6yUf63Npvy9P+xveN
zJqusevc/FiTcHKHWkaxLHgeAT1jHacPLWRcepYMxSIfAKfPQlaBXNMUPPFuyr9ND54uDx+zPNwP
ls5YPvNPTSLZJMpuoYd/04hiiClsYQq3uA8GETHskohxzvl9FCNcu2Yn3UsuH6Y491Qtj0BmA/RK
olCuMpc44syJ6YlAnysWFDDlsV2t3Kn62b3ZJ4Is3b8qsvJFO/dS1KDnM/DxNzJf4IlDdhrbc9QN
Ui4Nk+MJODcgsHOJxswfW7F9jCxWs/RlW9i2UnbF0osk+pigQAqIT/aUxaOmvV3mUWwuHLMZTdr+
XbKhXfnTo/aYZHnCfb48V0eQ9WcrLXKjnw6O2mzWOROz+f5So+6Bb3L8NOdoCcv7pnvo9plFquR5
9n8NCcYRjSmKMf8t48Qjkkgpe/xpYsHdikRGs/DoKb7OqhSI1PhWfwYUUNp9iipjIV+JHr9EfQCm
/OHrozdV9SlN1dhlw8DrQdtITVSdNI3a1j+DxZt+XrPCNPlCx3mgAgGNTfHiroahY0m9D4q48EDZ
xJLvfh3zbBTIJgegvgz9najxjBljofKTmWJMS+ynbpWiRV1bRYwrPxun8IFKzQPOpqlp8tAPUSZF
Zs6GtyqjGuKVe/it8V65wUBaIR+x2ak2mz2ZE19Mw+/QVNbpV7J4nKNVMipLjQDcPvWEs5xRNgNL
Ep9ZrIv4/2mg7/F6Q5mYi8ZEyxGQ+qNzX5OS5eG/9Y+JowF74tDDImJ/kQLop7VgmIbnI/l2Jr1l
a/ssmmcIKs1/G0bGQoSs20BUvYNTZnkXWgS9cx4FbOp5VagdjxNqYerizZ9VDCwKUdR5PcYmKKEi
zFnyQIdMVmjVLTgTNRI8+EXT54VWyRDLRcO5TqBc/rkUaeESsb38wi0xsXwNAHkpW9OparP02lSc
KJWTc3bOTts/j09zIxN4V6Say0fPhEPXyt7Wdr/sZGhIrLv2VBazUb5Kd+0//+LYKrdfjW21DJ13
iYletXgqomI05ZK7ELVQPTpCYm3dZi3+0bF35odBn90gFMAvN8Fn9qN5FyKgNdZdonLeW8y3gNFz
bGVMcx2gNoUt+cYYUvU7li2PLfeyA4u6tENsXQAVJDRHzt2x/er1UEmKZFEVMzvcxBcNtYMB4lOq
WfzxceyXyOG95qt4iwzCVRFrW5sty8/MjmeV8SyjDmgx0tTU4fcLud3UCpRk5/bfMK4BhdaFbuZx
zsOtZWLMYR++ljcG95ECAExpb7CU6cQjVbirDgVYUKrxtbXdGUHrA7DrG2AcVmg3jwPrtT9cbXg/
doo2eMXc4VZC/82g8tFskFsXaLIDGGjJF38yA1TrOUJmkNfbXWsMeMhlnvqAL9nHf7NsssK8G9uQ
PW4nrAClkSGRWxvWHpHPF1zGeBUPTi11VyZOTjpovj/eQIu5a0ZnrG0yLNIGRO8RIFQFys0PXuGS
6gWCcEHtxCoJZnwkkEXnVhXHgZ0EduetsWEuPArM5hdwLmVK/JOLrcnos+d2TI9bty3yxCDoqPtB
5mHJiJaRvq9gw357P6TAiRTGfnf5MkEMVexFuCnONPdrvXn802lE84wkpSKsknnFnuyRDrc5hblC
33sfxXGNaQFHU6HhwWZIE0giEgn561bfve33HyuJt7jb2jPnyU83iz6nO4ksWWnKGX4j/uEH4OUP
e8/swarvmQ47XpXzOfubrvnjV98W18g2oKxp817bv5AslDvFeIzxVV+kl25GYdnYhExYwdyhh+z/
kDpF0IGMKicgA7l3AFiCWZ08s7GtF7zJ9kkwlqLDcWLljYAAAA8FAZ7IakEPAAX2HUYAALk/yo3G
9QHTJYEGIJXwWb1X2wznXyLpC0esR/yJCgpKXhBoW6EzCgu1yypyabPe4SS/k3uHahyZbG1eLbKN
4nQZWVC7Ka1wRGFOdeDiY839W3n/iAUdb2iPo0buN7efXCJ1LJk+0xfnUgNDTDHhUps90aW7ckBY
lhpmsaQBgJBumxxG2iF8GpQ3OS9Q790tMz0/Y7Q93IOOhu5ONZ97jzhGE6rn4EcbbAKwvE+woe9Y
MiFkSs5AYc4/FthVYg/1KiGgiQniqOjFKUmAuvCcualZ6UcyPtQe99JugkvMlL2cfleJDm4w86JG
KLQPIS3tUzVCTMQlaU5FH/L9gkIIcae5JYqYWKmtM/jShivpVQVmkAPtfkFgsQXyAFn+1jF4xpbe
6R++rEDECJBj4+AupvzgMxytk9nGI5Xjqaj4k0FnSeVJKS/Pb+mL+J0hHvg93isPOnH8tKYBALi6
ArXAH0nvdcFwet5QmqHomlTOEAh8LEWYEMtkNnObJc9BRj//4DTpetd5w+5UQzulXC/Z8nmF7cIi
AOUkdYjR3Z+XxcsRyAUTAjsYpAtdQWcDFVMhv3GzHQAyG4WlUCj1OyXpqbwLmImMPrXfOjR1FSTZ
YL7ROAPnLX+TIdcjg1W3WeiSna5KKOvdbJp8z9S65F7fMFXl5IDnDYqX2DPVqZ40eJkAiIo5oD3h
aZwsl/Xlo+N/5/4Est5vFSmSzsZyZuV0MojdCPEzBInaEUCI270862gptiZQisC7fq73Op4SO2Iv
IwP7C9z0guGD3UN+qQaAKEAuMcUTHQG4IZYLMqWq6mjrVdkogFePpOGM5g67U27l2MJ1SU7l72lM
cA26AV7U2fxauc6Pb22OlLLPCekYL4UTMFoKGhkZj3rsqkxTiLFHCBL+aUpPNw4i9ocefFKg5kcr
dh0GLzwdVjjawf4NaN6KyLvoPR1tWxlb3jtq2AD+mMSwdg4tqCFIGA/TEeNF7dVXILtx7+AGYjBA
aI47k60aCyMSBxwZOmM6yjwcyr0M9uaug4u3xrfOr76H4iiVSw/LhIXEqZvTkOXp3Cd8iN+066Ii
YMZMASohOBxMZNABe810sr2Hq5KnLh8RmRSaYCBMaSinTmQOkszHRxoH7AiKIWImkFt184jz2Jf+
h97eYBNvprIhRU5cknp3kc2IBP+pKGztingyn6ZxKjhWlE7RA9bkEgouUeh7Mjxok5mP17IYsKmE
3uWsA00G+gr946jC39RqgHRRXMVE5ZlEpOafGfQJ/JDiv5cDxhQiZsmPdyGFrZDThh4WCLmgMnBR
T0CuK55qSILWSvNRrw2wnyhv3b0bZYfcAZM17oxsr4TF+lngojDBqAh/hYBNgLApdG56FlovaOAe
PgUrGIEwmKRc+GO8ys3arZTGXvBjSWYyTZ23oSF/wpU1Wxo5OMtxOM7tvcofgQ+FjzrwNsZYUn5a
nP2HMjGgoA0fNs5+e7ISVsk85k7vJzbtfVtUuIuYMjgh9CTH3a2dxNo20stI7sJHQ/UCvkpbmHdv
NWPnQDDBp61UfQlpfm1f1lqVIzr84/EOtYmt+zgEAAaeo3EaMmPY7j90tmQrTTvqiWLgcfKKUrbQ
os2/7RZipV3TGupmpZrzl6QcNszPQwlr70mdT3N6qA0ZtNXmZ9trSO6b7YVQmn3hnInYy1oEib/A
lLYSXGiYExYvBCh5PF7SOK+ERnViu7VWvQjr/EMdWe27AX/ruooc06vBb444Vl4BZxfo0mRozgJo
mCEmqz2dzPxATsTox4YQlxF6FymzfSl7dRkznP5CX7HxRk8fkRWlZlwZo0HyaVP3MRB/24xb3O3A
LHSYgrvwA1pHqhncursx3TdZ6FQgJKAl70ppab+sEJl5bkNSfLD+3wvsHovCCqGlQSEWm2AS9McB
gG5YbtSHZW1s3pzKq2kfI65b2ORA3IGutba1lEWa4ur+0kUAaNTkVxIOoHQgtq1IuShL94XleX1u
TsG0s5gwTf8vvKs/XRgzlJlUM+2fb7b7XjASW/gj0FCNmU3mG90zfj6ooPj+svrd6aMvJQ/lZC7K
76yid3aRkvHGI6RpBruxpM9HNmn9J4asK4HUbPIJFPrz3A/ieCx+qgoeLSJQnYC2SwQM25MS/RbI
JSDwnrNAlFG+o7nLDQwV5kMhIETCHc9wi49V9ZBx6wOZFdfCv6YfWt8r1yMkO9SsDOhF0fVqxbEF
IZmrY7wJ+BcA/6hzJvwd4jughkYBTzjiw/gdnV+Tjwx9HPnI4f1mCIFuLWoD8S9hKnR1r3IHUp81
vEJ2BctHo1Xiegc6iehNT8rhnFePn7ibBT8cQpnKjF023DWhtfEvgmyo3soDY/cMnIrmUeiqixx7
KVHXzUti/AwT0p3YAqJuD+DDy5/vu7I9qk/EVV8DoBRoP41dGfVoYvup7Z5PIqCWqkzrNWbJIfAH
nsOCZmTxdy7SDPSn+lOxnzSKyJSp/hJRIL4J8sF0soC3kqO/R1/e/jhxgMrB8LXn2LnyvzMz1aQD
mEGFuUozKZLx10k9JMdSL4V8zXPvCwM5QeESgZzvQ4Edfjp6vMvN/IbvC+d0bBFdAnYyHZrRvpAr
St9tMOXJ96Qum/npxX2HQ2U7ss1n8bTyv7wcL2SaPRypu6rN30LKqjlwK34UMvRrux0oT/RIusaq
u4zEz3fkWZa2E0uaslqcgWiBptxQX18+MxZMG3e8xIi+CwaP4g3jpqC8y3UgceyUE/Gq2DcI2Epy
vm9MPiSbbN7fY/65d0lWQjbpfLVEmwz9n9HGrVvhpthG1nDU5wPSEUIX8uFMf2LTV72/uB2HWJed
kr6QbovZGHtOoxygMDEyjQgLTWeBcVYz5sZGnchECRtMh2MvJgVF7Zxfs3dur/MM+QeSi1pL8wWF
UJzEhhwVbgfxJIKxLXztH/0x/CVM1v7L3C48ulhvCKc5f5hCdci8MT8N4QHCMDtb9QxnuyKVbrq3
ogot6QXfjLyo105a3ZbSHB7Hch8jHHriujNj9YMRM/1i+gAJtUprKqeBijAFg9Lg1q9hwHiplaPX
7WOB+q3zvB1WUfPs60K2W/lPNc3R6Y1YweOLtCyz+6Xp4DfpLZ8TU8NUsgB/0nS7Bt9Hk1IHRrVJ
nzqMCPGnPgNiJykoIxvZCej1F68EZzErXUIHS1t3JuYNyZZLsv7lt89auXjlX9FOeXw8MyezhDTy
ny3dlecxQidq5DJz7xF951B01OvuiLq1KfP4CarlTnoSlV1ksZSjAqYEQ7n8xsbwu+BEVu8/8aOs
qQ+FbphTMMfrqufWbN1Qqj9+lmPPlRXjtwqpDej66ANw59p2tgvHKVqMLLqJZqtTQABWlWnJZiU1
8wfN6ir1J2uF8dBIQAKQ45V+eWyYME2tyTrf2HTw3KiKZZNwUO0icwoQ9aYzTNvYxfan+qBr+dG8
X0eGFMER9kqsv90LL2yqRnlycA+VPytgrmfJK3pozcB/YXjyrRnPMAycoFySdgXXQm3Q1bHuG21v
c+3TagrmgkytPEnjv2oSo62r6os24QCwigIfGNAZ14dOqJ/R2b28LwBCiZTsLAt0awniR1wISkmh
nuvbDdd945M+0xZCQSuA+ZWEViClDBFq9pNrgO6sTULQN+XdiU1gtV0RBf6kQ04QC9v2kQZVIl/A
d4ehGiGmW7WZhjOHWdFzVZ7N74O+X1vhE5wnbPHVep9mKg7jsaOyIGZn1NTTF7NprBZZsX3/S240
dyE/UZO7mOWnnJHIP4Vpv4Ct9osqQLzoyM7ZYc29umh6PHomRSL0P5o+5wBlgxmmOPncrM2XHZV0
GqS+70tuerwjIdJ9YRSHQYCMk7MJrJc0RE+EHASlNFs1Kf6AL2wZHVEMmIRROErW3tS/jAVVEDd7
Ylg7ygqdC8brSbFpMdsxhzeSSmJN744p9vh8sttEWmWxneki33qpLNpBEB8ijuob9KeG7s3MHhK3
B+k6dknyNpOTNgSMb3ABvBR8dAHHU5pjbTgbGMVMqWLeOOoW/UueNJOViJuUxps/NFjz05o8SlIM
W99vd3peWnR20GYN2G8VCmVjrNxmZhwj00cm034IgQ14uzfrA4gYJBw4CFq3wug65VS1MIQ4rz4J
q5np4cX/i5ux/y7s+p3lDTUlt6YJbrh1uRU7v9Khm+JddXZTou7fKwXKwv+VEU62MwMErkIGMm03
5BDTxxISHVH/q+2EW0cQVm4SWICblNzHRA0WMyVO7d9rTAqT1otqJhEjBCqSDKITAGV7DMpegDdP
fDeXx3WaRHvNud9bC9h7HTj2mSE2+kmI/hMnqj3jDi508mJ/CCPAjwK9yqX/I3A8S4M+ixDsSpix
QlvRd5Z/rRfkxTY/rs1c71Yho+azmQirrEua4UB1mx1VaAlwTZ4OJPx4txHAvRyXrbhiaIo4yQc+
0cAz7gvShEwE8Iv3G6LgREvSke5PWFgSg3aqWMs2CacRLdTfhMyD9gAH8H5bJEVmO3RSEkYeqqXV
CtgAkum+CQfbX2dDqFV9WXryjOPPk8Ojjlba2tTU59qfQ97i+5i9PwPfCeNUI6S2Xu7YpCB9LrBn
Dt7xDDWeYGgh7RhUZL2fW44uG8Qf+QkMACMHebuq4PGV0ESud2AAN1qb1CVYokrSCBlpd+90xvPO
60ccYVm5JHY0wU/4i3I8ge5RLotAX/0ONwLVVK1Rj8nVd/5wqqY0XFS3+kU5WLwRSowtLR/ykXEq
2NZqc+QOouGkBwbWeTX7t6tETipWFFBbIvCAB79StE8FsTdpUJPWi6g0FhoXcA2LV6zLrWS1fEIt
FA0DyWKywbmoexKftt6t3LE/fMJ4LXFbLDcF0J4oX65wqcll4YNgbVTtBRFdwAhyIrrAa5dmeVcn
yRmOuPjfO5VCLhfsBZ9koNxz+e0+sbyZjD591xewf365fy4BQdXkxoajTwNStmnL1geHg1ktVp3F
cfS7leteAvQ1OcVqWR5XsnYNgJ8nKVqo8TtsdfjnuOjmh42Y6XOCQXUAlIYkHr2bX3tzcbmBPuz4
GUsFiziplEw7AcD22zYufBOV4JHJ/KUw03a64wFjBiUBoQEf/pqC9VNyi3q8YYuyyzLThzuqUWo3
Sj2njth0Q8AAAAOfbW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAACcQAAQAAAQAAAAAAAAAA
AAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAgAAAsl0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAACcQAAAAAAAAA
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAkAAAAGMAAAAAAAk
ZWR0cwAAABxlbHN0AAAAAAAAAAEAAAnEAAAgAAABAAAAAAJBbWRpYQAAACBtZGhkAAAAAAAAAAAA
AAAAAABAAAAAoABVxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRs
ZXIAAAAB7G1pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAA
AAx1cmwgAAAAAQAAAaxzdGJsAAAAtHN0c2QAAAAAAAAAAQAAAKRhdmMxAAAAAAAAAAEAAAAAAAAA
AAAAAAAAAAAAAkABjABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAGP//AAAAMmF2Y0MBZAAW/+EAGWdkABas2UCQM/uEAAADAAQAAAMAIDxYtlgBAAZo6+PLIsAA
AAAcdXVpZGtoQPJfJE/FujmlG88DI/MAAAAAAAAAGHN0dHMAAAAAAAAAAQAAAAoAABAAAAAAFHN0
c3MAAAAAAAAAAQAAAAEAAABYY3R0cwAAAAAAAAAJAAAAAQAAIAAAAAABAABQAAAAAAEAACAAAAAA
AQAAAAAAAAABAAAQAAAAAAEAADAAAAAAAQAAEAAAAAABAABAAAAAAAIAABAAAAAAHHN0c2MAAAAA
AAAAAQAAAAEAAAAKAAAAAQAAADxzdHN6AAAAAAAAAAAAAAAKAABOZAAAIp0AABVxAAAQ/QAADpEA
ABpOAAANVgAAGsQAABLwAAAPCQAAABRzdGNvAAAAAAAAAAEAAAAsAAAAYnVkdGEAAABabWV0YQAA
AAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAtaWxzdAAAACWpdG9vAAAAHWRh
dGEAAAABAAAAAExhdmY1Ny43MS4xMDA=
">
  Your browser does not support the video tag.
</video>
</div>
</div>
<p>I taught a senior seminar on differential geometry last year. I’ll be honest: it was a selfish course. <a href="https://www.cmu.edu/physics/people/faculty/deserno.html">Markus Deserno</a> writes all of these cool papers about membranes, and I didn’t know enough math to follow them. So, the goal of our course was basically to learn enough differential geometry to read several of his papers. It was fantastic. We used several of his papers, as well as Kreyszig’s textbook, as our core materials.</p>
<p>Here’s the thing: a lot of this was pretty foreign to my physics students. In particular, the discussion of surfaces and mappings was new. So, we wrote some tools in Jupyter Notebooks to help us visualize and solve problems. I particularly like the stuff we wrote to visualize a mapping, and I don’t know of a comparable resource elsewhere.</p>
<p>As a teaser, the above movies show you how to interpolate between a surface and a curve in the first case, and how the Monge gauge works for a membrane in the second case.</p>
<p>Let’s jump in. <!-- TEASER_END --></p>
</section>
<section id="surfaces" class="level1">
<h1>Surfaces</h1>
<p>We get our introduction to surfaces in Kreyszig Ch. 3. Specifically, <img src="https://latex.codecogs.com/png.latex?%5CS3.24"> In most of our classes, we’ve defined surfaces like</p>
<p><img src="https://latex.codecogs.com/png.latex?z%20=%20f(x,y)%20"></p>
<p>and we’ve been good at visualizing them. Here, we run into the definition of a surface in terms of a mapping that sends</p>
<p><img src="https://latex.codecogs.com/png.latex?%20(u_1,u_2)%20%5Cto%20(x(u_1,u_2),%20y(u_1,u_2),%20z(u_1,u_2))%20"></p>
<p>and Kreyszig warns us that something like</p>
<p><img src="https://latex.codecogs.com/png.latex?%20(u_1+u_2,%20(u_1+u_2)%5E2,%20(u_1+u_2)%5E3)%20"></p>
<p>is problematic because, since it can be parameterized by a single variable, it’s actually a curve rather than a surface. We also run into the Jacobian and some linear algebra. Our goal right now is to work with concrete curves and surfaces in <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BR%7D%5E3"> So, let’s figure out how to visualize these sorts of mappings. First, some gunk to set up our python environment. For the experts, note that we could use <code>%matplotlib notebook</code> to make things prettier, but it seems really slow.</p>
<div id="cell-7" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np, scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sp, pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd, seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns, matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt, matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> mpl</span>
<span id="cb3-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> itertools</span>
<span id="cb3-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> mpl_toolkits.mplot3d <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Axes3D, proj3d</span>
<span id="cb3-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.animation <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> animation</span>
<span id="cb3-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib.patches <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> FancyArrowPatch</span>
<span id="cb3-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> HTML</span>
<span id="cb3-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> ipywidgets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> interact, interactive, fixed</span></code></pre></div></div>
</div>
<p>In class, we used <code>interact</code> to visualize things. However, I’m making this available on the web using the fact that Jake Vanderplas’ awesome JSAnimation package is built in to matplotlib 2.1. I like it way better than just an html5 video, because I like to be able to step through the frames. I still strongly recommend <code>interact</code> for playing around on your own server.</p>
<div id="cell-9" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># You can change this to %matplotlib notebook if you want. It looks better, but is much slower for me.</span></span>
<span id="cb4-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#%matplotlib inline</span></span></code></pre></div></div>
</div>
<div id="cell-10" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># mpl.rcParams['animation.html'] = 'jshtml'</span></span>
<span id="cb5-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Doesn't seem to work for me, so I make the HTML explicitly below</span></span></code></pre></div></div>
</div>
<p>Now, let’s just try one of these out. One of the examples we want to look at in the book is</p>
<p><img src="https://latex.codecogs.com/png.latex?%20(u_1+u_2,%20%5Csin(u_1),%20%5Ccos(u_1+u_2))%20"></p>
<p>so let’s make a grid of points where <img src="https://latex.codecogs.com/png.latex?u_1"> and <img src="https://latex.codecogs.com/png.latex?u_2"> vary from -2 to 2, then plot the corresponding surface. We’ll plot <img src="https://latex.codecogs.com/png.latex?(u_1,%20u_2,%200)"> in grey and the surface in blue.</p>
<div id="cell-12" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">u1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb6-2">u2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb6-3">U1, U2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.meshgrid(u1, u2)</span>
<span id="cb6-4">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> U1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> U2</span>
<span id="cb6-5">Y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.sin(U1)</span>
<span id="cb6-6">Z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.cos(U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2)</span>
<span id="cb6-7"></span>
<span id="cb6-8">ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.gca(projection<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3d'</span>)</span>
<span id="cb6-9">surf2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(U1, U2, np.zeros_like(U1), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb6-10">surf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.scatter(X, Y, Z)</span>
<span id="cb6-11">plt.show()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-7-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>You can play around with the above, using more or fewer points, etc. You can clearly see that the surface extends vertically and horizontally beyond the patch from <img src="https://latex.codecogs.com/png.latex?u_1"> and <img src="https://latex.codecogs.com/png.latex?u_2">, although it’s kind of cheating to plot them both at the same time. So let’s wrap that up in a function and try it with different maps.</p>
<p>To make it cuter, we’ll draw red arrows from some specific points to see which points get mapped where. And we’ll plot a surface not a collection of points, by default, because it’s way faster. Most impoartantly, we’ll wrap all of the plotting stuff up in a function of its own so that we just need to define a map, and then ask to plot it.</p>
<div id="cell-14" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">class</span> Arrow3D(FancyArrowPatch):</span>
<span id="cb7-2">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#http://stackoverflow.com/questions/22867620/putting-arrowheads-on-vectors-in-matplotlibs-3d-plot</span></span>
<span id="cb7-3">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, xs, ys, zs, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>args, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs):</span>
<span id="cb7-4">        FancyArrowPatch.<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">__init__</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>), (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>), <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>args, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs)</span>
<span id="cb7-5">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._verts3d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> xs, ys, zs</span>
<span id="cb7-6"></span>
<span id="cb7-7">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> draw(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, renderer):</span>
<span id="cb7-8">        xs3d, ys3d, zs3d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>._verts3d</span>
<span id="cb7-9">        xs, ys, zs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)</span>
<span id="cb7-10">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>.set_positions((xs[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],ys[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]),(xs[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>],ys[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]))</span>
<span id="cb7-11">        FancyArrowPatch.draw(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">self</span>, renderer)</span></code></pre></div></div>
</div>
<p>We played around with things quite a bit in class, so the function below has options for changing from <code>surface</code> to <code>points</code> and for changing <code>urange</code> (the range included in the <img src="https://latex.codecogs.com/png.latex?u_1,u_2"> patch)</p>
<div id="cell-16" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plot_surface(f,plotmode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'surface'</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi):</span>
<span id="cb8-2">    u1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,urange,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb8-3">    u2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,urange,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb8-4">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.gca(projection<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3d'</span>)</span>
<span id="cb8-5">    U1, U2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.meshgrid(u1, u2)</span>
<span id="cb8-6">    X,Y,Z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(U1,U2)</span>
<span id="cb8-7">    surf2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(U1, U2, np.zeros_like(U1), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb8-8">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> plotmode <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'surface'</span>:</span>
<span id="cb8-9">        surf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(X,Y,Z)</span>
<span id="cb8-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> plotmode <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'points'</span>:</span>
<span id="cb8-11">        surf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.scatter(X,Y,Z)</span>
<span id="cb8-12">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb8-13">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">raise</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">Exception</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Unknown plot mode </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{p}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>plotmode))</span>
<span id="cb8-14">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> (w1,w2) <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> itertools.permutations([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,urange],<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>):</span>
<span id="cb8-15">        x,y,z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(w1,w2)</span>
<span id="cb8-16">        a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Arrow3D([w1,x],[w2,y],[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,z], mutation_scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, </span>
<span id="cb8-17">                    lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, arrowstyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-|&gt;"</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"r"</span>,</span>
<span id="cb8-18">                   alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>,zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb8-19">        ax.add_artist(a)</span>
<span id="cb8-20">    plt.show()</span></code></pre></div></div>
</div>
<p>And now let’s plot that same surface <img src="https://latex.codecogs.com/png.latex?(u_1,u_2)%20%5Cto%20u_1%20+%20u_2,%20%5Csin(u_1),%20%5Ccos(u_1+u_2)"></p>
<div id="cell-18" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb9-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2, np.sin(U1), np.cos(U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2)</span>
<span id="cb9-3">plot_surface(f)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-10-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<section id="changing-the-u1u2-patch" class="level2">
<h2 class="anchored" data-anchor-id="changing-the-u1u2-patch">Changing the <img src="https://latex.codecogs.com/png.latex?(u1,u2)"> patch</h2>
<p>We spent a bit of time thinking about what exactly <img src="https://latex.codecogs.com/png.latex?u1"> and <img src="https://latex.codecogs.com/png.latex?u2"> were doing. If you make their range bigger or smaller, you change the size of the surface. That’s built into the function defined above. By default, they each go from <code>-urange</code> to <code>urange</code>. As you can see in the figure above, <code>urange</code> defaults to <img src="https://latex.codecogs.com/png.latex?2%5Cpi">. We can look at a smaller patch to see what’s going on:</p>
<div id="cell-20" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1">plot_surface(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-11-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="playing-around" class="level2">
<h2 class="anchored" data-anchor-id="playing-around">Playing around</h2>
<p>At this point, the class just played around with the results. Everybody defined their own functions, and looked at the resulting maps. You can do that too if you run the notebook interactively! Here’s one that the students particularly liked, despite the attempted bad math.</p>
<div id="cell-22" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb11-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1,np.log(U2),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U2</span>
<span id="cb11-3">plot_surface(f)</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>/Users/mglerner/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: RuntimeWarning: invalid value encountered in log
  
/Users/mglerner/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in log
  
/Users/mglerner/anaconda3/lib/python3.6/site-packages/mpl_toolkits/mplot3d/proj3d.py:141: RuntimeWarning: invalid value encountered in true_divide
  txs, tys, tzs = vecw[0]/w, vecw[1]/w, vecw[2]/w</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-12-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
</section>
<section id="the-curve" class="level1">
<h1>The curve</h1>
<p>OK. A large portion of why we did this was because it was really not obvious to the class why <img src="https://latex.codecogs.com/png.latex?(u_1+u_2,%20(u_1+u_2)%5E2,%20(u_1+u_2)%5E3)"> mapped to a curve. We could all follow the mathematical arguments, but it didn’t really stick without a good visualization. So, let’s look:</p>
<p>so, what does the curve look like?</p>
<div id="cell-24" class="cell" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb13-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2, (U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, (U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span></span>
<span id="cb13-3">plot_surface(f, plotmode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'points'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-13-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>That’s a great start. We can see where representative points match, and it’s definitely useful to visualize things and “prove” to ourselves that you do indeed get a curve. It’s much more convincing when we make an interactive version (below). Before we do that, let’s also quickly check out a cylinder.</p>
<div id="cell-26" class="cell" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb14-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb14-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(U1),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(U1),U2</span>
<span id="cb14-3">plot_surface(f, urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-14-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>In class, we played around with <code>urange</code> and the scale factors to make sure we understood what was going on. Speaking of which, Markus Deserno was kind enough to look at a preliminary version of this post, and he noticed that I was originally using <code>urange=2*np.pi</code> which got a “double covering” of the cylinder (i.e.&nbsp;the <img src="https://latex.codecogs.com/png.latex?u_1,u_2"> patch mapped two points to every point on the cylinder. Check it out:</p>
<div id="cell-28" class="cell" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1">plot_surface(f, urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb15-2">plot_surface(f, urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi)</span>
<span id="cb15-3">plot_surface(f, urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-15-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-15-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/index_files/figure-html/cell-15-output-3.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="an-interactive-one" class="level1">
<h1>An interactive one</h1>
<p>That was OK, and it convinced us that the maps really did go from, e.g., a plane to a cylinder. But (1) it still wasn’t quite so obvious exactly how/why it worked (2) it’s obvious that playing around with the input parameters can give a lot of insight.</p>
<p>Then I had the idea to make it interactive: you get a slider so you can watch the green surface interpolate linearly between the grey patch <img src="https://latex.codecogs.com/png.latex?(u_1,u_2)"> and the surface defined by <img src="https://latex.codecogs.com/png.latex?(x,y,z)">. This is worth running interactively, and playing with, as it really cleared things up. If you run it locally and interactively, you get sliders that let you rotate the surface around in 3D, so you can look at it from all angles. If you’re runnign it locally, you wnat the interp step to be more like 0.01 and the degree step to be more like 1.</p>
<p>For notebooks to be viewable online, I’m JSAnimations with a coarser interp step and I’m skipping the controls for elevation and azimuth altogether.</p>
<p>** If you just want the results, skip the code here and look for the next pretty picture! **</p>
<div id="cell-30" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plot_surface_interpolate(f<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>f,plotmode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'surface'</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi,interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,</span>
<span id="cb16-2">                             elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>):</span>
<span id="cb16-3">    u1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,urange,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb16-4">    u2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,urange,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb16-5">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#fig = plt.figure()</span></span>
<span id="cb16-6">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.gca(projection<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3d'</span>)</span>
<span id="cb16-7">    U1, U2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.meshgrid(u1, u2)</span>
<span id="cb16-8">    X,Y,Z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(U1,U2)</span>
<span id="cb16-9">    U3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(Z)</span>
<span id="cb16-10">    A <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>interp)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>X</span>
<span id="cb16-11">    B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>interp)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>Y</span>
<span id="cb16-12">    C <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>interp)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>Z</span>
<span id="cb16-13">    surf2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(U1, U2, np.zeros_like(U1), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb16-14">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> plotmode <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'surface'</span>:</span>
<span id="cb16-15">        surf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(X,Y,Z,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)</span>
<span id="cb16-16">        surf3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(A,B,C,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>,zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>)</span>
<span id="cb16-17">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> plotmode <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'points'</span>:</span>
<span id="cb16-18">        surf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.scatter(X,Y,Z,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)</span>
<span id="cb16-19">        surf3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.scatter(A,B,C,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>,zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>)</span>
<span id="cb16-20">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb16-21">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">raise</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">Exception</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Unknown plot mode </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{p}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>plotmode))</span>
<span id="cb16-22">    </span>
<span id="cb16-23">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> (w1,w2) <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> itertools.permutations([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,urange],<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>):</span>
<span id="cb16-24">        x,y,z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(w1,w2)</span>
<span id="cb16-25">        a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Arrow3D([w1,x],[w2,y],[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,z], mutation_scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, </span>
<span id="cb16-26">                    lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, arrowstyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-|&gt;"</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"r"</span>,</span>
<span id="cb16-27">                   alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>,zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb16-28">        ax.add_artist(a)</span>
<span id="cb16-29">    plt.title(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'interp = </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>interp<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>)        </span>
<span id="cb16-30">    ax.view_init(elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>elev,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>azim)</span>
<span id="cb16-31">    plt.show()</span>
<span id="cb16-32"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> do_interact(f,interp_step<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span>,degree_step<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,):   </span>
<span id="cb16-33">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plot_this(f,interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>azim,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>elev,plotmode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'surface'</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi):</span>
<span id="cb16-34">        plot_surface_interpolate(f,interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>interp,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>azim,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>elev,plotmode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>plotmode,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>urange)</span>
<span id="cb16-35">    interact(plot_this,interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,interp_step),</span>
<span id="cb16-36">             azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">360</span>,degree_step),</span>
<span id="cb16-37">             elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">360</span>,degree_step),</span>
<span id="cb16-38">             plotmode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'points'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'surface'</span>],</span>
<span id="cb16-39">             urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>fixed(urange),</span>
<span id="cb16-40">             f<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>fixed(f))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb16-41"></span>
<span id="cb16-42"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> update_interp(i,f,surfs,ax,</span>
<span id="cb16-43">                  U1,U2,U3,</span>
<span id="cb16-44">                  X,Y,Z,</span>
<span id="cb16-45">                  interpsteps,</span>
<span id="cb16-46">                  elev,azim,urange):</span>
<span id="cb16-47">    surf,surf2,surf3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> surfs</span>
<span id="cb16-48">    ax.clear()</span>
<span id="cb16-49">    interp <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>interpsteps</span>
<span id="cb16-50">    A <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>interp)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>X</span>
<span id="cb16-51">    B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>interp)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>Y</span>
<span id="cb16-52">    C <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>interp)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> interp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>Z</span>
<span id="cb16-53"></span>
<span id="cb16-54">    surf2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(U1, U2, U3, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>)</span>
<span id="cb16-55">    surf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(X,Y,Z,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)</span>
<span id="cb16-56">    surf3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(A,B,C,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>,zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>)</span>
<span id="cb16-57"></span>
<span id="cb16-58">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> (w1,w2) <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> itertools.permutations([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,urange],<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>):</span>
<span id="cb16-59">        x,y,z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(w1,w2)</span>
<span id="cb16-60">        a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Arrow3D([w1,x],[w2,y],[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,z], mutation_scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, </span>
<span id="cb16-61">                    lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, arrowstyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-|&gt;"</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"r"</span>,</span>
<span id="cb16-62">                   alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>,zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb16-63">        ax.add_artist(a)</span>
<span id="cb16-64"></span>
<span id="cb16-65">    plt.title(<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'interp = </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>interp<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>)</span>
<span id="cb16-66"></span>
<span id="cb16-67">    ax.view_init(elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>elev,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>azim)</span>
<span id="cb16-68">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> (surf,surf2,surf3)</span>
<span id="cb16-69"></span>
<span id="cb16-70"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.pi,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>):</span>
<span id="cb16-71">    u1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,urange,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb16-72">    u2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>urange,urange,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb16-73">    U1, U2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.meshgrid(u1, u2)</span>
<span id="cb16-74">    U3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(U1)</span>
<span id="cb16-75"></span>
<span id="cb16-76">    X,Y,Z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(U1,U2)</span>
<span id="cb16-77"></span>
<span id="cb16-78">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.figure()</span>
<span id="cb16-79">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.add_subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">111</span>, projection<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3d'</span>)</span>
<span id="cb16-80"></span>
<span id="cb16-81">    surf2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(U1,U2,U3, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb16-82">    surf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(U1,U2,U3,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)</span>
<span id="cb16-83">    surf3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot_surface(U1,U2,U3,color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>,zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>)</span>
<span id="cb16-84">    surfs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (surf,surf2,surf3)</span>
<span id="cb16-85"></span>
<span id="cb16-86">    ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> animation.FuncAnimation(fig, update_interp, interpsteps, fargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(f,surfs,ax,U1,U2,U3,X,Y,Z,interpsteps,</span>
<span id="cb16-87">                                                                         elev,azim,urange),</span>
<span id="cb16-88">                                 interval<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">250</span>, blit<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb16-89">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> ani    </span></code></pre></div></div>
</div>
<p>We can make this interactive in two ways. For live notebooks, we use <code>interact</code> and for the web we use JSAnimation. In both cases, once the boilerplate is done, we just need to define a function <code>f</code> and call either <code>do_interact</code> or <code>get_ani</code>, as seen below. To be clear, we expect a function <code>f</code> to be defined before each new call. <code>f</code> maps u1 and u2 into x, y, and z. See below for examples.</p>
<section id="now-play-with-the-interp-slider-to-see-how-youd-interpolate-linearly-from-u_1-u_2-to-xyz" class="level2">
<h2 class="anchored" data-anchor-id="now-play-with-the-interp-slider-to-see-how-youd-interpolate-linearly-from-u_1-u_2-to-xyz">Now play with the <code>interp</code> slider to see how you’d interpolate linearly from <img src="https://latex.codecogs.com/png.latex?(u_1,%20u_2)"> to <img src="https://latex.codecogs.com/png.latex?(x,y,z)"></h2>
<p>We just looked at mapping the plane to a cylinder, so we’ll start with it. Good pedagogical tip: make the students write down (with pictures) what they think will happen first.</p>
<div id="cell-33" class="cell" data-execution_count="15">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb17-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(X,Y):</span>
<span id="cb17-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(X),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(X),Y</span>
<span id="cb17-3">do_interact(f)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<script type="application/vnd.jupyter.widget-view+json">
{"model_id":"444e463fa7904d33a272881a09204cfa","quarto_mimetype":"application/vnd.jupyter.widget-view+json"}
</script>
</div>
</div>
<p>Or, if you’re looking at the blog post and want an animation where the slider controls the interpolation …</p>
<div id="cell-35" class="cell" data-execution_count="16">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb18-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(X,Y):</span>
<span id="cb18-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(X),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(X),Y</span>
<span id="cb18-3">HTML(get_ani(f,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi).to_jshtml())</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="16">
<iframe src="embed-34-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p><strong>Play with the slider to change the interploation! Step through frame-by-frame, or play the animation. Use the +/- controls to speed up/slow down the animation!</strong></p>
<p>Can you see how it curls up?</p>
<div id="cell-37" class="cell" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb19-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(X,Y):</span>
<span id="cb19-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(X),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(X),Y</span>
<span id="cb19-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">66</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>).to_jshtml())</span>
<span id="cb19-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="17">
<iframe src="embed-36-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
</section>
<section id="this-next-one-was-for-us-particularly-compelling.-seeing-how-you-map-a-2d-surface-into-a-curve-was-enlightening" class="level2">
<h2 class="anchored" data-anchor-id="this-next-one-was-for-us-particularly-compelling.-seeing-how-you-map-a-2d-surface-into-a-curve-was-enlightening">This next one was, for us, particularly compelling. Seeing how you map a 2D surface into a curve was enlightening</h2>
<p>And here we go, the main reason for this notebook:</p>
<div id="cell-39" class="cell" data-execution_count="18">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(X,Y):</span>
<span id="cb20-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> X<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>Y, (X<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>Y)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, (X<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>Y)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span></span>
<span id="cb20-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi).to_jshtml())</span>
<span id="cb20-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="18">
<iframe src="embed-38-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
</section>
</section>
<section id="more-examples" class="level1">
<h1>More examples</h1>
<p>After that, we did a bunch of examples from the book, and from our own imagination. I don’t want this notebook to become too big, so I’m not going to make JSAnimations for all of them. Locally, I run them with <code>interact</code> … I’ve included JS animations below with a small number of frames so as to keep this post at least somewhat reasonably-sized, but you should (have I said this yet?) download the notebook and play with it interactively!</p>
<section id="example-1-two-representations-of-the-plane" class="level2">
<h2 class="anchored" data-anchor-id="example-1-two-representations-of-the-plane">Example 1 (two representations of the plane)</h2>
<p>rectangular and polar. Note what happens when you drag the <code>interp</code> slider on the polar representation.</p>
<div id="cell-42" class="cell" data-execution_count="20">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb21-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb21-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1, U2, np.zeros_like(U2)</span>
<span id="cb21-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb21-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="20">
<iframe src="embed-41-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<section id="this-one-trips-the-class-up-because-you-want-to-say-nothing-is-going-to-change-but-it-does" class="level3">
<h3 class="anchored" data-anchor-id="this-one-trips-the-class-up-because-you-want-to-say-nothing-is-going-to-change-but-it-does">This one trips the class up, because you want to say “nothing is going to change” … but it does …</h3>
<p>If you want a closer look, change the function to return something like <code>1 + np.zeros_like(U2)</code> and play around.</p>
<div id="cell-44" class="cell" data-execution_count="21">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb22-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb22-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(U2), U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(U2), np.zeros_like(U2)</span>
<span id="cb22-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb22-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="21">
<iframe src="embed-43-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
</section>
</section>
<section id="example-3-sphere-of-radius-r-transparency-is-kind-of-problematic-here" class="level2">
<h2 class="anchored" data-anchor-id="example-3-sphere-of-radius-r-transparency-is-kind-of-problematic-here">Example 3 (sphere of radius r) (transparency is kind of problematic here)</h2>
<div id="cell-46" class="cell" data-execution_count="22">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb23-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2,r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>):</span>
<span id="cb23-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(U2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(U1), r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(U2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(U1), r<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(U2)</span>
<span id="cb23-3"></span>
<span id="cb23-4">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.pi,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb23-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="22">
<iframe src="embed-45-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
</section>
<section id="example-3" class="level2">
<h2 class="anchored" data-anchor-id="example-3">Example 3</h2>
<div id="cell-48" class="cell" data-execution_count="23">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb24" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb24-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2,a<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>):</span>
<span id="cb24-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.cos(U2), U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>np.sin(U2), a<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>U1</span>
<span id="cb24-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb24-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="23">
<iframe src="embed-47-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
</section>
<section id="problem-25.1" class="level2">
<h2 class="anchored" data-anchor-id="problem-25.1">Problem 25.1</h2>
<div id="cell-50" class="cell" data-execution_count="24">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb25" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb25-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb25-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, U1, U2</span>
<span id="cb25-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb25-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="24">
<iframe src="embed-49-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<div id="cell-51" class="cell" data-execution_count="25">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb26" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb26-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb26-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2, U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2, U1</span>
<span id="cb26-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb26-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="25">
<iframe src="embed-50-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<div id="cell-52" class="cell" data-execution_count="26">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb27" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb27-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb27-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> np.cos(U1), np.sin(U1), U2</span>
<span id="cb27-3">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb27-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="26">
<iframe src="embed-51-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<div id="cell-53" class="cell" data-execution_count="27">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb28" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb28-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> s(U1,U2):</span>
<span id="cb28-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> U1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>U2</span>
<span id="cb28-3"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> h1(s):</span>
<span id="cb28-4">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> s</span>
<span id="cb28-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> h2(s):</span>
<span id="cb28-6">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> s<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb28-7"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> h3(s):</span>
<span id="cb28-8">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> s</span>
<span id="cb28-9"></span>
<span id="cb28-10"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb28-11">    S <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> s(U1,U2)</span>
<span id="cb28-12">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> h1(S), h2(S), h3(S)</span>
<span id="cb28-13"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb28-14">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> h1(U1), h2(U1), h3(U1) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> U2</span>
<span id="cb28-15">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>).to_jshtml())</span>
<span id="cb28-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="27">
<iframe src="embed-52-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
</section>
<section id="monge-gauge" class="level2">
<h2 class="anchored" data-anchor-id="monge-gauge">Monge gauge</h2>
<p>Now we should do a specific example in the Monge gauge</p>
<div id="cell-55" class="cell" data-execution_count="29">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb29" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb29-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(U1,U2):</span>
<span id="cb29-2">    X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> U1</span>
<span id="cb29-3">    Y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> U2</span>
<span id="cb29-4">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> h(x,y):</span>
<span id="cb29-5">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> np.cos(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> np.sin(y)</span>
<span id="cb29-6">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> X,Y,h(X,Y)</span>
<span id="cb29-7">HTML(get_ani(f,urange<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,elev<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,azim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">113</span>,interpsteps<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>).to_jshtml())</span>
<span id="cb29-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#do_interact(f,urange=np.pi,elev=30,azim=113)</span></span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="29">
<iframe src="embed-54-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>… and that’s it. The whole thing was a ton of fun, and I’m surprised I haven’t seen this sort of interpolation easily available before. Let me know if I’ve missed something!</p>


</section>
</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/visualizing-differential-geometry-in-jupyter-notebooks/</guid>
  <pubDate>Mon, 16 Oct 2017 01:15:56 GMT</pubDate>
</item>
<item>
  <title>Switching to Nikloa for Jupyter Notebooks and a static site</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/switching-to-nikloa-for-jupyter-notebooks-and-a-static-site/</link>
  <description><![CDATA[ 




<p>I’ve been using WordPress for quite a while, almost entirely because it’s an out-of-the-box blog setup that just works. But it kind of sucks for what I mostly want to do, which is stick some code into blog posts. In fact, what usually happens is that I do something in a Jupyter notebook, and want to stick it up as a blog post. That’s a real pain in WordPress. The best I found was converting the notebooks to html and then including them as a static block, but those invariably are brittle and ugly.</p>
<p>So, smart people like <a href="http://jakevdp.github.io">Jake Vanderplas</a> and <a href="http://themodernscientist.com">themodernscientist</a> switched over to something that deals natively with Jupyter notebooks a long time ago (so long ago they were called IPython Notebooks!). I’m a slow pony, but I’m switching to Nikola. It seems to be the easiest one at the moment. It’s a static page generator, which is more than fine for my purposes, and it deals natively with Jupyter notebooks. Sweet. I thought it would be useful to document the process for future-me. I leaned heavily on the Nikola site (including the <a href="https://getnikola.com/handbook.html#importing-your-wordpress-site-into-nikola">documentation for import_wordpress</a>). The process wasn’t completely trivial, but that’s because I did some hacky stuff to get Jupyter Notebooks included in my WordPress posts anyway. This seems like a lot of work for like 13 posts, but nobody ever claimed I was wise.</p>
<p><strong>[UPDATE: I ended up switching all of my old IPython/Jupyter posts over to notebooks rather than HTML. If you read an earlier version of this, basically everything else is the same]</strong></p>
<!-- more -->
<section id="grabbing-the-site" class="level2">
<h2 class="anchored" data-anchor-id="grabbing-the-site">Grabbing the site</h2>
<p>Log in as an administrator, go to the Tools menu, click on Export, then download an Export File. Nice and easy. Thanks, WordPress!</p>
</section>
<section id="install-nikola" class="level2">
<h2 class="anchored" data-anchor-id="install-nikola">Install Nikola</h2>
<p><em>Note:</em> <code>pip</code> doesn’t actually play nicely with the conda environments. It looks like it installs nikola’s stuff on top of everything else (e.g.&nbsp;the Nikola tools are available even when I’m not in the <code>blog</code> environment from below). That’s not great. I probably should use a virtualenv, but I don’t have time to learn what one of those is today.</p>
<p>I’m using Anaconda for my Python, and Nikola installs via pip, so I make a new environment just for the blog. Probably good practice anyway. Speaking of which, this is all Python 3. There’s some <a href="https://github.com/ContinuumIO/anaconda-issues/issues/542">weird bug</a> involved in having pip upgrade setuptools,</p>
<pre class="shell"><code>conda create --name blog
source activate blog
conda install setuptools
pip install --upgrade "Nikola[extras]"
mkdir blog
cd blog
mkdir posts
mkdir output</code></pre>
<p>Now import the wordpress site. If I just say</p>
<pre class="shell"><code>nikola import_wordpress ~/Downloads/biophysicsandbeer.wordpress.2017-10-10.xml</code></pre>
<p>I don’t actually get some of my content imported. In particular, the quoted Python code doesn’t show up. So,</p>
<pre class="shell"><code>nikola import_wordpress --download-auth=[my secret username]:[my secret password] --install-wordpress-compiler --transform-to-html ~/Downloads/biophysicsandbeer.wordpress.2017-10-10.xml</code></pre>
<p>Tells it to be explicit about converting to html and downloading everything it can. It also produces some errors, specifically a bunch of lines like</p>
<pre><code>[2017-10-11T19:49:10Z] WARNING: Nikola: Can't do a redirect for: 'https://mglerner.com/blog/?p=8/'</code></pre>
<p>which are telling us that it can’t just spit out a new file in place of the old one because the question marks in the URL mean request data. We’ll deal with this in a minute.</p>
<p>We then fire up the site with</p>
<pre class="shell"><code>cd new_site
nikola build
nikola serve --browser</code></pre>
<p>And it almost all works. Here are the missing things:</p>
</section>
<section id="comments-are-all-missing." class="level2">
<h2 class="anchored" data-anchor-id="comments-are-all-missing.">Comments are all missing.</h2>
<ol type="1">
<li>For future stuff to work, I’ll get a Disqus ID and start using it. (biophysics-and-beer … check).</li>
<li>Add all of the old comments by hand. This isn’t taking a huge amount of time, because I don’t have a huge amount of comments, and I’m not going crazy with matching formatting. I’m just copying the comments div from the old blog. If you’re doing this to your own blog, don’t forget to get rid of the “response” part of the comments div. If I had it to do over, I’d write a script that did that for me, or I’d learn how to import comments into Disqus, but it didn’t take much time this way. On the plus side, I’m ditching some (not all) spam I had missed.</li>
</ol>
</section>
<section id="cleaning-up-long-posts" class="level2">
<h2 class="anchored" data-anchor-id="cleaning-up-long-posts">Cleaning up long posts</h2>
<p>Some of the posts are really long. Like, to the point where the main page is something ridiculous like 80MB. I <em>think</em> WordPress deals with this automatically (only showing the first few paragraphs in the index), because I didn’t remember it being an issue. You can tell Nikola to only show a “teaser” by putting</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">INDEX_TEASERS <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span></span></code></pre></div></div>
<p>in <code>conf.py</code></p>
<p>And then adding</p>
<pre><code>&lt;!-- more --&gt;</code></pre>
<p>to a Markdown cell in a Jupyter notebook, or directly to a Markdown post, or directly to an html post. Cool.</p>
</section>
<section id="my-pre-rendered-jupyter-notebooks-suck." class="level2">
<h2 class="anchored" data-anchor-id="my-pre-rendered-jupyter-notebooks-suck.">My pre-rendered Jupyter notebooks suck.</h2>
<p>I used the pageview WordPress plugin (short code? I don’t know) to include pre-rendered Jupyter notebooks. That just breaks upon import. But the Nikloa posts are just straight HTML. I can just include the stuff directly.</p>
<p>That was pretty easy, and it worked, but it seemed lame and “Teasers” didn’t work when I stuck them in the middle of the pre-rendered HTML blocks. So, I switched everything over to Jupyter notebooks.</p>
<p>When I do that, I need to</p>
<ul>
<li>make sure I include comments explicitly in the Jupyter notebook. As mentioned above, I can just include the raw html for them. To do this in a Markdown cell in a Jupyter notebook, do something like</li>
</ul>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.core.display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> HTML</span>
<span id="cb8-2">HTML(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'''fancy pants html code for comments here'''</span>)</span></code></pre></div></div>
<ul>
<li><p>I also need to remember to edit the meta data at the end of the imported Jupyter notebook so that Nikola gets the date right. You have to remember to do that <em>after</em> Nikola imports the post.</p></li>
<li><p>I also need to remember to stick a Markdown cell near the top with a link to download the whole things as a Jupyter notebook directly. This part is pretty awesome: I can link directly to the Jupyter notebook on the Nikola site, rather than stuffing a copy in a gist, etc. Neat!</p></li>
</ul>
</section>
<section id="getting-a-graphical-headertheme-fun-time" class="level2">
<h2 class="anchored" data-anchor-id="getting-a-graphical-headertheme-fun-time">Getting a graphical header/theme fun time</h2>
<p>I found the <a href="https://getnikola.com/creating-a-theme.html">Nikola tutorial for theming</a> … somewhat more than I was interested in. But, it had enough useful nuggets to figure out the basics. The basic idea is (1) put my header image somewhere (2) edit the header template. Let’s go.</p>
<p>First, I’m going to want to change the <code>base_header.tmpl</code> so I searched for themes that came with that on the <a href="https://github.com/getnikola/nikola-themes/find/master">Nikola Theme site</a>. Of those, I like <code>jidn</code> the most. So,</p>
<pre class="shell"><code>nikola theme -i bootstrap3-gradients</code></pre>
<p>Then edit <code>conf.py</code> to switch the theme to jidn and, as indicated in the text when you install the jidn theme, add a few lines to <code>conf.py</code></p>
<pre><code>THEME = "jidn"
...
GLOBAL_CONTEXT.update({
    "JIDN": {},  # Extra info about authors
    # "JIDN-theme": "theme-base-blue",
})
...</code></pre>
<p>(Actually, as described in the jidn README.md, you can add more info to that dictionary, so I added a link to my twitter profile image, etc. Neat.)</p>
<p>The WordPress import stuck all of the versions of my header in <code>files/blog/wp-content/wp-content/uploads/</code> and I’m just copying them to <code>files</code> to make them easy to find. Then I add the <code>img</code> tag right after the title in <code>themes/jidn/templates/base_header.tmpl</code>:</p>
<pre><code>    &lt;h2 id="brand" class="masthead-title"&gt;
      &lt;a href="${abs_link(_link("root", None, lang))}" title="${blog_title}" rel="home"&gt;${blog_title}&lt;/a&gt;
    &lt;/h2&gt;
    &lt;img src="/mglblogheader.png" /&gt;</code></pre>
<p>I’m very far from up-to-date with modern web design, but that looks OK for now.</p>
<p>While I’m editing the templates, there’s a link to “blog” in the sidebar I don’t want, so I replaced it with a link to the about page.</p>
</section>
<section id="missing-buttons" class="level2">
<h2 class="anchored" data-anchor-id="missing-buttons">Missing buttons</h2>
<p>The code in <code>post.tmpl</code> looks like it should work, but the icons don’t show up. This means I’m missing the links to my twitter/github profile, the “share this on your favorite social media site” links, and the buttons that link to next/previous post.</p>
<p>It looks to me like it’s trying to grab stuff from <a href="http://fontawesome.io/get-started/">FontAwesome</a>, but I don’t see anywhere that the FontAwesome stuff is actually linked on my site. Following the FontAwesome directions,</p>
<ul>
<li>Download the <code>font-awesome</code> directory.</li>
<li>Stick it in <code>themes/jidn/assets/font-awesome</code></li>
<li>Add the following to <code>base.tmpl</code>:</li>
</ul>
<pre><code>&lt;link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css"&gt;</code></pre>
<p>… Now, I added it right before <code>&lt;/head&gt;</code>, which looks ot me like it’s OK, but it’s right after a place where it says “don’t change this block” so it’s possible that I screwed something up.</p>
<p>That fixes the lack of next/previous/social buttons.</p>
</section>
<section id="back-to-the-redirects" class="level2">
<h2 class="anchored" data-anchor-id="back-to-the-redirects">Back to the redirects</h2>
<p>Those redirects are kind of a pain. That’s Nikola saying it can’t just spit out a new file in place of the old file because the question marks mean request data. Thanks, wordpress! I wanted simple stuff like an <code>.htaccess</code> file saying</p>
<pre><code>Redirect /blog/page8 /blog/new-and-fancy.html</code></pre>
<p>but no … Now I need to look at a <a href="https://stackoverflow.com/questions/9182585/apache-redirect-permanent-for-url-with-data-in-string-question-mark">StackOverflow answer</a> and remember why I stopped being a web developer years ago. Here’s my new <code>.htaccess</code> file</p>
<pre><code>RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /blog/\?p=5/ [NC]
RewriteRule ^ /blog/posts/the-blogging-begins.html [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /blog/\?p=5 [NC]
RewriteRule ^ /blog/posts/the-blogging-begins.html [L,R=301]</code></pre>
<p>to handle people accessing each page both with and without a trailing slash. Now, where should I point the redirects?</p>
</section>
<section id="static-site-means-why-host-it-myself" class="level2">
<h2 class="anchored" data-anchor-id="static-site-means-why-host-it-myself">Static site means why host it myself?</h2>
<p>It made sense to host my own WordPress site. But I’m not sure I need to host my own static site. In fact, life would probably be easier if I just used github pages. Cool. Github has <a href="https://pages.github.com">instructions</a> that basically boil down to “set up a repo called mglerner.github.io and do some special things” … and Nikola means I don’t have to actually know what those special things are! After initializing my Nikola blog directory as a github repo and doing</p>
<pre class="shell"><code>git remote add origin git@github.com:mglerner/mglerner.github.io.git</code></pre>
<p>I can make Nikola rebuild things like github wants, add, commit and push everything automatically with</p>
<pre class="shell"><code>nikola github_deploy</code></pre>
<p>So, after having done that, I just make the <code>.htaccess</code> file listed above point everything from my old site to my fancy new github site.</p>
<p>… and it’s up and running!</p>
</section>
<section id="making-it-possible-to-post-with-jupyter-notebooks" class="level2">
<h2 class="anchored" data-anchor-id="making-it-possible-to-post-with-jupyter-notebooks">Making it possible to post with Jupyter notebooks</h2>
<p>This is documented in a few places, but sometimes things change, so you’re probably better off just looking at the Nikola site directly. At the moment, you need to add the last line here to each of <code>POSTS</code> and <code>PAGES</code> in <code>/blog/conf.py</code>, so that Nikola will recognize Jupyter notebooks as … you know … both posts and pages. You also need to add the trailing line in <code>COMPILERS</code>.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb17-1">POSTS <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (</span>
<span id="cb17-2">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts/*.rst"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"post.tmpl"</span>),</span>
<span id="cb17-3">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts/*.txt"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"post.tmpl"</span>),</span>
<span id="cb17-4">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts/*.md"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"post.tmpl"</span>),</span>
<span id="cb17-5">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts/*.html"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"post.tmpl"</span>),</span>
<span id="cb17-6">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts/*.ipynb"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"post.tmpl"</span>),</span>
<span id="cb17-7">)</span>
<span id="cb17-8"></span>
<span id="cb17-9">PAGES <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (</span>
<span id="cb17-10">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages/*.rst"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"story.tmpl"</span>),</span>
<span id="cb17-11">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages/*.txt"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"story.tmpl"</span>),</span>
<span id="cb17-12">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages/*.md"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"story.tmpl"</span>),</span>
<span id="cb17-13">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages/*.html"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"story.tmpl"</span>),</span>
<span id="cb17-14">    (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages/*.ipynb"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pages"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"story.tmpl"</span>),</span>
<span id="cb17-15">    )</span>
<span id="cb17-16"></span>
<span id="cb17-17">COMPILERS <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {</span>
<span id="cb17-18">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rest"</span>: (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.txt'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.rst'</span>),</span>
<span id="cb17-19">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"markdown"</span>: (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.md'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.mdown'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.markdown'</span>),</span>
<span id="cb17-20">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"html"</span>: (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.html'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.htm'</span>),</span>
<span id="cb17-21">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ipynb"</span>: (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'.ipynb'</span>,),</span>
<span id="cb17-22">}</span></code></pre></div></div>
</section>
<section id="making-posts" class="level2">
<h2 class="anchored" data-anchor-id="making-posts">Making posts</h2>
<p>Now comes the whole point: making new posts. Blog posts come with meta data (when it was created, etc.) that normally gets automatically handled when you create a new post via <code>nikola new_post -e</code>. If you want to start with other formats (e.g.&nbsp;Markdown or Jupyter notebooks), you just stick the relevant file in <code>/posts</code> and import it via <code>nikola new_post -i</code>.</p>
<p>I took the notes for this migration in Markdown, so I just stick that file in <code>/posts/BlogMigration.md</code> run <code>nikola new_post -i posts/BlogMigration</code> …</p>
<p>Or, at least, that’s how it should work. I’m a little disappointed to find that the new post import keeps breaking, saying it can’t find metadata like the date. It’s an easy workaround for markdown: I just make a new post, then copy over my markdown. Looking at the results, I find that Nikola wants the metadata imbedded in the markdown file. So, I should have started the markdown file with</p>
<pre><code>&lt;!--
.. title: Switching to Nikloa for Jupyter Notebooks and a static site
.. slug: switching-to-nikloa-for-jupyter-notebooks-and-a-static-site
.. date: 2017-10-12 13:50:23 UTC
.. tags: 
.. category: 
.. link: 
.. description: 
.. type: text
--&gt;</code></pre>
<p>Cool. I tested, and I can indeed just stick that at the top of my markdown file (which I’m storing in a folder called <code>drafts</code>) and then import. Almost. Of all things, it sticks that metadata in twice. So, for now, the clear answer is just to make a blank post and then copy in my markdown. Easy enough.</p>
<p>Meanwhile, importing Jupyter notebooks seems to just work!</p>
<p>then <code>nikola build</code>, then fire up a test server to check it out with <code>nikola serve --browser</code>, verify that all looks awesome, and push it to the blog with <code>nikola github_deploy</code>!</p>
</section>
<section id="todo" class="level2">
<h2 class="anchored" data-anchor-id="todo">TODO</h2>
<ul>
<li>The text is too big. I can apparently change that in <code>jidn</code>’s <code>custom.css</code> but I don’t quite get how.</li>
</ul>
</section>
<section id="jupyter-issues" class="level2">
<h2 class="anchored" data-anchor-id="jupyter-issues">Jupyter issues</h2>
<p>The conversion of Jupyter notebooks doesn’t look perfect yet:</p>
<ul>
<li><p>Inline math (starting with a single dollar sign) doesn’t always get converted. Starting with two dollar signs does seem to consistently work.</p></li>
<li><p>For JSAnimations, the “animation bar” doesn’t have images on the buttons. <strong>UPDATE:</strong> That seems to have magically fixed itself. The FontAwesome thing may have been the key, but I’m going full cargo-cult mentality here and just saying it worked.</p></li>
</ul>
</section>
<section id="updated-quick-notes" class="level2">
<h2 class="anchored" data-anchor-id="updated-quick-notes">Updated Quick Notes</h2>
<p>To create a new environment</p>
<pre class="shell"><code>conda create -n blog python=3
conda activate blog</code></pre>
<p>Then double-check to make sure you’re using the <code>pip</code> from the conda environment. Then</p>
<pre><code>pip install --upgrade "Nikola[extras]"</code></pre>
<p>Then</p>
<pre class="shell"><code>nikola build
nikola new_post -i drafts/thing.md
nikola serve --browser
nikola github_deploy</code></pre>


</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/switching-to-nikloa-for-jupyter-notebooks-and-a-static-site/</guid>
  <pubDate>Thu, 12 Oct 2017 17:52:49 GMT</pubDate>
</item>
<item>
  <title>Can I be smarter about late policies?</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/can-i-be-smarter-about-late-policies/</link>
  <description><![CDATA[ 






<p>
<strong>Questions</strong>: Is my late policy reasonable? Are there diversity implications for smart late policies?
</p>
<p>
<a href="https://twitter.com/actualham" target="_blank">Robin DeRosa</a> had an interesting <a href="https://twitter.com/actualham/status/777620707186475008" target="_blank">tweet</a> about late policies recently, and I posted my late policy in reply. Here’s a slightly expanded version:
</p>
<p>
In most of my classes, late work happens because students are really busy, not because they’re slackers. That means a late policy with percentage deductions kind of sucks, because my students will also be really busy the next week. Instead, I combine “no late work accepted” with dropping the equivalent of one week’s worth of each assignment time. E.g. in a class that meets three times a week, I throw out three of the daily assignments.
</p>
<p>
I make sure to frame this in a discussion with the students, where I explain that the policy is an explicit recognition of the fact that they’re busy. If you’re too busy to get the work done on time, JUST SKIP it, and get your life caught up.
</p>
<p>
So far, it has been working out really well. The students appreciate the extra lever for managing their schedules, and it’s clear from the beginning that there won’t need to be any exceptions. Note: every semester so far, students have managed to get confused early on … luckily, this comes up in terms of one of those low-weight daily assignments, so we clear it up before a high-stakes situation shows up).
</p>
<!-- TEASER_END -->
<p>
I know this won’t work well for everyone, especially people whose course materials are quite different from mine. I’ve been able to use it well in both intro and upper-level classes, though. It has been easy to adapt to group work as well: groups always get to evaluate each other as part of the process, so they’re in charge of some of the enforcement.
</p>
<p>
I know other people who have similar policies, but with more bookkeeping. For example, people hand out “extensions” or “free passes” at the beginning of the term. It rewards organization, etc. I don’t think that serves my policy as well. For one thing, you have to have a good bookkeeping system; if you hand out literal extension&nbsp;passes, you have to either make sure students aren’t sharing them with each other, or be OK with that economy. For another thing, I like the raw simplicity of my policy, and I think that&nbsp;it might help in terms of normalizing things between students. I could be wrong!
</p>
<p>
After that twitter thread, I have some questions:
</p>
<p>
<strong>Are there diversity implications for smart late policies?</strong> One of the obvious things I know about supporting diverse groups of students is that you need to recognize the fact that there’s a whole world out there affecting in-class and out-of class performance. One of my hopes with my policy is that it’s explicitly good in this regard, but I’d love feedback here.
</p>
<p>
<strong>Should I add tiered deadlines?</strong> <a href="https://twitter.com/melikhovo">Matthew Cheney</a> has a nice policy, where he distinguishes between “hard” and “soft” deadlines, explicitly telling the students which is which, and making that part of the late policy for grading. That seems honest and good, but I like the raw simplicity of my approach, so I’m nervous about adding more to it.
</p>
<p>
<strong>How does this affect colleagues?</strong> My department is young, so maybe this is a particular issue for us, but some of us tend to get more pushback from students than others (instead of young, you could probably insert all sorts of gender dynamics, etc. here). In several of our classes, we standardized on my above policy as the&nbsp;departmental policy. Being able to refer to it as The Departmental Policy seems to help those colleagues out.
</p>
<h2 class="anchored">
Comments from Old Blog
</h2>
<pre><code>        &lt;div id="comments"&gt;


        &lt;h3 id="comments-title"&gt;3 Responses to &lt;em&gt;Can I be smarter about late policies?&lt;/em&gt;&lt;/h3&gt;


        &lt;ol class="commentlist"&gt;
                &lt;li class="comment even thread-even depth-1" id="li-comment-33536"&gt;
    &lt;div id="comment-33536"&gt;
        &lt;div class="comment-author vcard"&gt;
            &lt;img alt='' src='https://secure.gravatar.com/avatar/6573168f6b7ee2e145bd9a830b1e090b?s=40&amp;#038;d=mm&amp;#038;r=g' srcset='https://secure.gravatar.com/avatar/6573168f6b7ee2e145bd9a830b1e090b?s=80&amp;amp;d=mm&amp;amp;r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /&gt;                &lt;cite class="fn"&gt;Kat Bartlow&lt;/cite&gt; &lt;span class="says"&gt;says:&lt;/span&gt;         &lt;/div&gt;&lt;!-- .comment-author .vcard --&gt;
        
        &lt;div class="comment-meta commentmetadata"&gt;&lt;a href="https://mglerner.com/blog/?p=54#comment-33536"&gt;
            September 19, 2016 at 8:14 am&lt;/a&gt;           &lt;/div&gt;&lt;!-- .comment-meta .commentmetadata --&gt;

        &lt;div class="comment-body"&gt;&lt;p&gt;Interesting take. In my classes, I usually have one set of low-stakes assignments (homework, quizzes on Moodle, etc.) My policy on this is to not accept late work, but to only require students to turn in 10 of 15 possible assignments. On the other hand, for major assignments like papers, I do deduct percentage points per day of lateness unless the student makes a case for an extension before the paper deadline. I think there's value in recognizing student busy-ness and not driving them to extremes (particularly on your pressure-cooker campus), but there's also value in reminding them that in order to achieve your goals, you have to set priorities and even (gasp!) work to deadlines.&lt;/p&gt;</code></pre>
 ]]></description>
  <guid>https://mglerner.com/blog/posts/can-i-be-smarter-about-late-policies/</guid>
  <pubDate>Mon, 19 Sep 2016 02:56:07 GMT</pubDate>
</item>
<item>
  <title>Using numba to speed up mean-squared displacement calculations</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/using-numba-to-speed-up-mean-squared-displacement-calculations/</link>
  <description><![CDATA[ 




<p>You can download this whole thing as a Jupyter notebook <a href="https://github.com/mglerner/mglerner.github.io/blob/master/posts/using-numba-to-speed-up-mean-squared-displacement-calculations.ipynb">here</a></p>
<section id="writing-a-faster-mean-squared-displacement-function" class="level1">
<h1>Writing a faster mean-squared-displacement function</h1>
<p>I’m trying to calculate the Mean Squared Displacement (MSD) of a particle trajectory. In reality, I have an array of positions for <code>numtrj</code> particles and <code>numpts</code> timepoints and <code>dim</code> dimensions: <code>pos[numtrj, numpts, dim]</code>. I think my question has the same answer if I just have the <code>x</code> trajectory of a single particle, though.</p>
<p>In case you haven’t done MSD calculations before, there’s one cute way in which you get extra information out of a trajectory. Say I have just five time points, and my positions are</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1">In [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">83</span>]: x</span>
<span id="cb1-2"></span>
<span id="cb1-3">Out[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">83</span>]: array([ <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.</span>        ,  <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.74528704</span>,  <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.59639865</span>,  <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.59976219</span>,  <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.70852457</span>])</span></code></pre></div></div>
<p>You could just get squared displacement by looking at x**2. However, you could also say that you have 4 different values for the displacement at one timestep:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>], x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>], x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>]</span></code></pre></div></div>
<p>Similarly, three values for displacement at two timesteps: x[2:] - x[:-2]. Etc. So, the way I’m calculating MSD at the moment is:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> msd_1d(x):</span>
<span id="cb3-2">    result <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(x)</span>
<span id="cb3-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x)):</span>
<span id="cb3-4">        result[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.average((x[i:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>i])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb3-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> result</span></code></pre></div></div>
<p>or</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> get_msd_traj(pos):</span>
<span id="cb4-2">    result <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(pos)</span>
<span id="cb4-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,pos.shape[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]):</span>
<span id="cb4-4">        result[:,i,:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.average((pos[:,i:,:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pos[:,:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>i,:])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb4-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> result</span></code></pre></div></div>
<p>(side note: often the data comes indexed like <code>pos[numpts, numtrj, dim]</code> for molecular dynamics trajectories, but that doesn’t change anything here)</p>
<p>So, I asked <a href="https://twitter.com/synapticarbors">Joshua Adelman</a> if he had any quick thoughts. <!-- TEASER_END --></p>
<p>Josh cleared up some basic misconceptions for me and gave a couple of suggestions:</p>
<section id="from-josh" class="level2">
<h2 class="anchored" data-anchor-id="from-josh">From Josh</h2>
<blockquote class="blockquote">
<p>Hi Michael,</p>
</blockquote>
<blockquote class="blockquote">
<p>In general, numba is not going to speed up calculations that involve numpy built-in methods (unless they are things like np.exp, np.sin, np.cos) or array slicing. It works best if you have unrolled any vectorization into explicited nested loops and operate on arrays element-by-element. If you go that route, check to see if you can get the code to compile using <span class="citation" data-cites="jit">@jit</span>(nopython=True), which would be indicitive of numba being able to translate the code to llvm IR without using python objects (which tend to slow things down). I’ve also had a lot of success lately parallelizing numba code using threading if you aren’t dealing with any python objects. If you can compile in nopython mode, then you can also specify:</p>
</blockquote>
<blockquote class="blockquote">
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">@jit</span>(nopython<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, nogil<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
</blockquote>
<blockquote class="blockquote">
<p>and use a ThreadPool to chop up the work, using something like:</p>
</blockquote>
<blockquote class="blockquote">
<p>http://numba.pydata.org/numba-doc/0.19.1/user/examples.html?highlight=nogil#multi-threading</p>
</blockquote>
<blockquote class="blockquote">
<p>it’s undocumented, but for simple stuff you can use:</p>
</blockquote>
<blockquote class="blockquote">
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> multiprocessing.pool <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> ThreadPool</span>
<span id="cb6-2">pool <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ThreadPool(processes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>nthreads)</span>
<span id="cb6-3">results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pool.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">map</span>(func, arg)</span></code></pre></div></div>
<p>It has the same API as the multiprocessing pool, and for embarassingly parallel tasks that don’t have possible race conditions, it works quite nicely depending on the overhead involved in spawning off the task relative to the cost of the task.</p>
</blockquote>
<blockquote class="blockquote">
<p>Also, make sure you’re using the latest version of numba since it’s getting better rapidly. I’m not sure if you’ll be able to call np.zeros_like in a numba-ized method in nopython mode, although you might. If not, you can pass in the results array as an argument.</p>
</blockquote>
<blockquote class="blockquote">
<p>Hope that helps. I can’t think of any sneaky vectorization tricks in pure-numpy off the top of my head to make your calculation faster. Let me know if you have any other questions.</p>
</blockquote>
<blockquote class="blockquote">
<p>Josh</p>
</blockquote>
</section>
<section id="back-to-me" class="level2">
<h2 class="anchored" data-anchor-id="back-to-me">Back to me</h2>
<p>So, I tried several things. You have to do some fiddling around to get <code>nopython=True</code> to work. In addition to not knowing about <code>np.average</code>, things like <code>x[1:] - x[:-1]</code> are doomed to failure. However, that last part isn’t really trouble, because one of Josh’s points was that I should write out all of my loops explicitly. Here are two versions of the 1D version:</p>
<div id="cell-5" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb7-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> numba <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> jit</span></code></pre></div></div>
</div>
<div id="cell-6" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> msd_1d(x):</span>
<span id="cb8-2">    result <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(x)</span>
<span id="cb8-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x)):</span>
<span id="cb8-4">        result[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.average((x[i:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>i])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb8-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> result</span>
<span id="cb8-6"></span>
<span id="cb8-7"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">@jit</span>(nopython <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb8-8"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> msd_1d_nb1(x):</span>
<span id="cb8-9">    result <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(x)</span>
<span id="cb8-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> delta <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x)):</span>
<span id="cb8-11">        thisresult <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-12">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(delta,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x)):</span>
<span id="cb8-13">            thisresult <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> (x[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>delta])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb8-14">        result[delta] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> thisresult <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> delta)</span>
<span id="cb8-15">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> result</span>
<span id="cb8-16">    </span>
<span id="cb8-17"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">@jit</span>(nopython <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb8-18"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> msd_1d_nb2(x):</span>
<span id="cb8-19">    result <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(x)</span>
<span id="cb8-20">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> delta <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x)):</span>
<span id="cb8-21">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(delta,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x)):</span>
<span id="cb8-22">            result[delta] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> (x[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>delta])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb8-23">        result[delta] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> result[delta] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> delta)</span>
<span id="cb8-24">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> result</span></code></pre></div></div>
</div>
<p>Note that the above <em>definitions</em> will work almost no matter what you do. You don’t get the <code>numba</code> issues until you try to actually run the functions. Here are some timings:</p>
<div id="cell-8" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span>
<span id="cb9-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d_nb1(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span>
<span id="cb9-3"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d_nb2(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>The slowest run took 4.14 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 114 µs per loop
The slowest run took 11972.39 times longer than the fastest. This could mean that an intermediate result is being cached 
100000 loops, best of 3: 7.02 µs per loop
The slowest run took 14872.73 times longer than the fastest. This could mean that an intermediate result is being cached 
100000 loops, best of 3: 6.94 µs per loop</code></pre>
</div>
</div>
<div id="cell-9" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>))</span>
<span id="cb11-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d_nb1(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>))</span>
<span id="cb11-3"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d_nb2(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>1000 loops, best of 3: 1.19 ms per loop
100000 loops, best of 3: 15.8 µs per loop
100000 loops, best of 3: 18.5 µs per loop</code></pre>
</div>
</div>
<div id="cell-10" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>))</span>
<span id="cb13-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d_nb1(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>))</span>
<span id="cb13-3"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit msd_1d_nb2(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>100 loops, best of 3: 13.3 ms per loop
1000 loops, best of 3: 540 µs per loop
1000 loops, best of 3: 594 µs per loop</code></pre>
</div>
</div>
<p>So, pretty big win there! Approximately two orders of magnitude. It looks like it scales well too.</p>
</section>
<section id="the-larger-version" class="level2">
<h2 class="anchored" data-anchor-id="the-larger-version">The larger version</h2>
<p>So, it looks like there’s not much of a difference between version 1 and 2. But it does look like version 1 is a bit faster.</p>
<div id="cell-13" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> get_msd_traj(pos):</span>
<span id="cb15-2">    result <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(pos)</span>
<span id="cb15-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,pos.shape[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]):</span>
<span id="cb15-4">        result[:,i,:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.average((pos[:,i:,:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pos[:,:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>i,:])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb15-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> result</span>
<span id="cb15-6"></span>
<span id="cb15-7"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">@jit</span>(nopython <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb15-8"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> get_msd_traj_nb1(pos):</span>
<span id="cb15-9">    result <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros_like(pos)</span>
<span id="cb15-10">    deltastop <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pos.shape[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb15-11">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> traj <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(pos.shape[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]):</span>
<span id="cb15-12">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> dim <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(pos.shape[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]):</span>
<span id="cb15-13">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> delta <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,deltastop):</span>
<span id="cb15-14">                thisresult <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb15-15">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(delta,deltastop):</span>
<span id="cb15-16">                    thisresult <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> (pos[traj,i,dim] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pos[traj,i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>delta,dim])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb15-17">                result[traj,delta,dim] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> thisresult <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (deltastop <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> delta)</span>
<span id="cb15-18">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> result</span></code></pre></div></div>
</div>
<p>First, let’s do some due diligence and make sure the results are equivalent. Then, timings.</p>
<div id="cell-15" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1">a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb16-2">np.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">all</span>(get_msd_traj(a) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> get_msd_traj_nb1(a))</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="7">
<pre><code>True</code></pre>
</div>
</div>
<div id="cell-16" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb18-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit get_msd_traj(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb18-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit get_msd_traj_nb1(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>1000 loops, best of 3: 200 µs per loop
100000 loops, best of 3: 14.6 µs per loop</code></pre>
</div>
</div>
<div id="cell-17" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit get_msd_traj(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb20-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit get_msd_traj_nb1(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>10 loops, best of 3: 12.3 ms per loop
1000 loops, best of 3: 1.84 ms per loop</code></pre>
</div>
</div>
<div id="cell-18" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb22-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit get_msd_traj(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">512</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2001</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb22-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit get_msd_traj_nb1(np.random.randn(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">512</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2001</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>1 loops, best of 3: 27.8 s per loop
1 loops, best of 3: 2.47 s per loop</code></pre>
</div>
</div>
<p>So, for the actual data sizes I care about, I’m probably down to “only” an order of magnitude speedup. That’s still pretty awesome.</p>
<a href="http://example.com">link</a>
    <h2 class="anchored">Comments from Old blog</h2>
                <div id="comments">


            <h3 id="comments-title" class="anchored">One Response to <em>Using numba to speed up mean-squared displacement calculations</em></h3>


            <ol class="commentlist">
                    <li class="comment byuser comment-author-mglerner bypostauthor even thread-even depth-1" id="li-comment-27141">
        <div id="comment-27141">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/d49bf8fdd300871a66f21a8a97674483?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/d49bf8fdd300871a66f21a8a97674483?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">mglerner</cite> <span class="says">says:</span>            </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=52#comment-27141">
                July 3, 2015 at 3:21 pm</a>             </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>On twitter, <a href="https://twitter.com/khinsen" rel="nofollow">Konrad Hinsen</a> <a href="https://twitter.com/khinsen/status/616853234041384961" rel="nofollow">pointed out</a> that I could get a bigger speedup (likely a factor of 1000, but it's NlogN instead of N^2, so it only gets better) by using a better algorithm. Several years ago, I did try to use an FFT-based method. I was sketched out by the fact that the results I obtained were similar to the exact results, but not identical. It sounds likely that his method is just better. The paper claims it's exact, and a followup conversation indicates that they get better accuracy by doing fewer calculations (thus less accumulated error). Filed away for next time!</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=52&amp;replytocom=27141#respond" onclick="return addComment.moveForm( &quot;comment-27141&quot;, &quot;27141&quot;, &quot;respond&quot;, &quot;52&quot; )" aria-label="Reply to mglerner">Reply</a>            </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
            </ol>


    

</div><!-- #comments -->


</section>
</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/using-numba-to-speed-up-mean-squared-displacement-calculations/</guid>
  <pubDate>Thu, 02 Jul 2015 18:35:00 GMT</pubDate>
</item>
<item>
  <title>More March Madness Monte Carlo style</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/</link>
  <description><![CDATA[ 




<p>You can download this post as a Juypter notebook <a href="https://github.com/mglerner/mglerner.github.io/blob/master/posts/more-march-madness-monte-carlo-style.ipynb">here</a></p>
<section id="mmmc-the-2015-update" class="level1">
<h1>MMMC the 2015 update</h1>
<p>See the <a href="https://mglerner.com/blog/?p=16">original blog post</a> for details and history. Here’s the short story: in my Statistical and Thermal Physics class, we want to use Monte Carlo simulations to generate brackets for March Madness. There are at least two obvious ways to go about this:</p>
<ol type="1">
<li><p>Make some function that tells us the chance that team A beats team B, then flip coins for each matchup. That gets you one bracket. Repeat 100,000 times, collect statistics. This is the way Nate Silver’s 538.com handles simulations for <a href="http://fivethirtyeight.com/interactives/march-madness-predictions-2015/#mens">basketball</a>, <a href="http://fivethirtyeight.com/interactives/senate-forecast/">elections</a>, etc, and I should probably implement it (note to self/motivated students: it’s as easy as just generating 100,000 new brackets at a given temperature).</p></li>
<li><p>Generate one bracket, then do a Monte-Carlo walk through bracket space. This is tougher. We have to figure out how to make a move in bracket space, which is part of the fun of Monte Carlo simulations in general. To see how this is done, check out the code in <code>Bracket.swap</code> and <code>Brackets.simulate</code>.</p></li>
</ol>
<p>As you can tell, we take option 2 above. I’ve made things a bit nicer from a user standpoint this year; here’s a walkthrough. First, load up our standard IPython setup</p>
<!-- TEASER_END -->
<div id="cell-3" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> __future__ <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> division</span>
<span id="cb1-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>matplotlib inline</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-4">sns.set_style(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'darkgrid'</span>)</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> HTML</span></code></pre></div></div>
</div>
<section id="the-basics" class="level2">
<h2 class="anchored" data-anchor-id="the-basics">The basics</h2>
<p>make me a single bracket at a given temperature</p>
<div id="cell-5" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> MarchMadnessMonteCarlo <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> MMMC</span>
<span id="cb2-2">teams <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.teams[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'south'</span>]</span>
<span id="cb2-3">b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.Bracket(teams<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>teams,T<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb2-4"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span> b</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Duke (1)                                                     
Robert Morris (16)        Duk (1)                            
San Diego St. (8)                                            
St. John's (9)            San (8)  Duk (1)                   
Utah (5)                                                     
Stephen F. Austin (12)    Ste (12)                           
Georgetown (4)                                               
Eastern Washington (13)   Geo (4)  Ste (12) Ste (12)         
SMU (6)                   UCL (11) UCL (11) UCL (11) Ste (12)
UCLA (11)                                                    
Iowa St. (3)              Iow (3)                            
UAB (14)                                                     
Iowa (7)                  Iow (7)  Iow (7)                   
Davidson (10)                                                
Gonzaga (2)               Gon (2)                            
North Dakota St. (15)                                        
Total bracket energy: -17.4533174222
</code></pre>
</div>
</div>
<p>Now, instead of asking for all of the teams in the South, make up a set of Final Four teams, and run 1000 simulations. Show some statistics</p>
<div id="cell-7" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">sr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.simulate(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>,[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kentucky'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Wisconsin'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Villanova'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Duke'</span>],<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb4-2">MMMC.showstats(sr,newfig<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Lowest energy bracket
Kentucky (1)                               
Wisconsin (1)             Ken (1)          
Villanova (1)             Vil (1)  Ken (1) 
Duke (1)                                   
Total bracket energy: -3.05919025906

Most common bracket (159)
Kentucky (1)                               
Wisconsin (1)             Ken (1)          
Villanova (1)             Duk (1)  Ken (1) 
Duke (1)                                   
Total bracket energy: -3.04122415391
</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-4-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>As you can see, we fully sample bracket space pretty quickly (look at the graph in the top right, with the unique brackets shown).</p>
</section>
</section>
<section id="what-should-our-temperature-be" class="level1">
<h1>What should our temperature be?</h1>
<p>If we had chosen option 1 at the top, we’d just flip coins with a given probability of winning. Here (and this may be a questionable decision), we need to set an overall temperature for our simulation. Intuitively, the higher the temperature, the closer we come to a random outcome. The lower the temperature, the closer we come to a “best seed always wins” bracket. If we’re going to make sense of temperature, we should pick a reasonable energy function.</p>
<p>We can use <a href="http://www.kenpom.com">KenPom</a>’s <code>log5</code> defined as</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> log5_energy_game(winner, loser):</span>
<span id="cb6-2">    A,B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> strength[winner],strength[loser]</span>
<span id="cb6-3">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># see http://207.56.97.150/articles/playoff2002.htm</span></span>
<span id="cb6-4">    win_pct <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>B)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>B<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>B)</span>
<span id="cb6-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>win_pct</span></code></pre></div></div>
<p>Conveniently, that’s coded up for you in MarchMadnessMonteCarlo.examples.</p>
<p>Later on, we could make a fancy energy function with, e.g., a weighted average of KenPom, Jeff Sagarin, and the NCAA rankings.</p>
<div id="cell-10" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> MarchMadnessMonteCarlo.examples</span>
<span id="cb7-2">MMMC.set_energy_function(MarchMadnessMonteCarlo.examples.log5_energy_game)</span></code></pre></div></div>
</div>
<p>Now, what should our actual temperature be? Historically, we know that an 8 seed vs.&nbsp;a 9 seed should essentially be a tossup. So, as a proxy here, we could just look at the chance of an 8 seed winning over a range of temperatures, and pick the point where it’s pretty close to 0.5.</p>
<div id="cell-12" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> winpct8(team8,team9,T,numtrials<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span>):</span>
<span id="cb8-2">    results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [MMMC.playgame(team8,team9,T)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> team8 <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(numtrials)]</span>
<span id="cb8-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> np.average(results)</span>
<span id="cb8-4"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> plotwins(team8,team9,numtrials<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span>):</span>
<span id="cb8-5">    Ts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb8-6">    pct <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [winpct8(team8,team9,T,numtrials) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> T <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> Ts]</span>
<span id="cb8-7">    plt.plot(Ts,pct,label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{t1}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> vs. </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{t2}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(t1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>team8,t2<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>team9))</span>
<span id="cb8-8">    plt.xlabel(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'T'</span>)</span>
<span id="cb8-9">    plt.ylabel(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'winpct'</span>)</span></code></pre></div></div>
</div>
<p>We’ll look at it for all four of the 8 vs.&nbsp;9 matchups</p>
<div id="cell-14" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">plotwins(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Cincinnati'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purdue'</span>)</span>
<span id="cb9-2">plotwins(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Oregon'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Oklahoma St.'</span>)</span>
<span id="cb9-3">plotwins(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'North Carolina St.'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'LSU'</span>)</span>
<span id="cb9-4">plotwins(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'San Diego St.'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"St. John's"</span>)</span>
<span id="cb9-5">plt.legend()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-7-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>A couple of things jump out. First, the green line: KenPom has Oregon ranked below Oklahoma State, so the curve approaches 50% from below instead of from above.</p>
<p>Second, just eyeballing that, it looks like we could make a legitimate argument for almost anything between T=1.0 and 2.0.</p>
<p>What does that do to “clear” matchups? Well, Kentucky is a big favorite over Kansas with this model:</p>
<div id="cell-16" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1">MarchMadnessMonteCarlo.examples.log5_energy_game(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kentucky'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kansas'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="7">
<pre><code>-0.8176307825952608</code></pre>
</div>
</div>
<div id="cell-17" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1">plotwins(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kentucky'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kansas'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-9-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>If I pick <code>T=1.5</code>, I get Kentucky, the favorite, winning 60% of the time. You can feel free to choose a “saner” temperature, but I’m rooting for KU here!</p>
<section id="running-some-brackets" class="level2">
<h2 class="anchored" data-anchor-id="running-some-brackets">Running some brackets!</h2>
<p>So what does a bracket happen to look like? Well, in the original blog post, I mentioned that we came up with two different ways to run brackets. It can take a while to run a bracket, so a fast way (implemented as <code>runbracket2</code>) is to run separate brackets for each of the individual regions, then take the winner from each region’s most common bracket to form a Final Four. Below, we do just that, running 10,000 trials for each of the regions, and 1000 trials for the Final Four.</p>
<div id="cell-19" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1">results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.runbracket2(ntrials1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span>,ntrials2<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>,T<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>YOUR LOWEST ENERGY BRACKETS
LOWEST ENERGY BRACKET FOR REGION midwest
Kentucky (1)                                                 
Hampton (16)              Ken (1)                            
Cincinnati (8)                                               
Purdue (9)                Cin (8)  Ken (1)                   
West Virginia (5)                                            
Buffalo (12)              Wes (5)                            
Maryland (4)                                                 
Valparaiso (13)           Mar (4)  Wes (5)  Ken (1)          
Butler (6)                Tex (11) Not (3)  Not (3)  Ken (1) 
Texas (11)                                                   
Notre Dame (3)            Not (3)                            
Northeastern (14)                                            
Wichita St. (7)           Wic (7)  Kan (2)                   
Indiana (10)                                                 
Kansas (2)                Kan (2)                            
New Mexico St. (15)                                          
Total bracket energy: -10.5524230049


LOWEST ENERGY BRACKET FOR REGION west
Wisconsin (1)                                                
Coastal Carolina (16)     Wis (1)                            
Oregon (8)                                                   
Oklahoma St. (9)          Okl (9)  Wis (1)                   
Arkansas (5)                                                 
Wofford (12)              Ark (5)                            
North Carolina (4)                                           
Harvard (13)              Nor (4)  Nor (4)  Wis (1)          
Xavier (6)                Xav (6)  Bay (3)  Ari (2)  Ari (2) 
Mississippi (11)                                             
Baylor (3)                Bay (3)                            
Georgia St. (14)                                             
VCU (7)                   Ohi (10) Ari (2)                   
Ohio St. (10)                                                
Arizona (2)               Ari (2)                            
Texas Southern (15)                                          
Total bracket energy: -10.8592988759


LOWEST ENERGY BRACKET FOR REGION south
Duke (1)                                                     
Robert Morris (16)        Duk (1)                            
San Diego St. (8)                                            
St. John's (9)            San (8)  Duk (1)                   
Utah (5)                                                     
Stephen F. Austin (12)    Uta (5)                            
Georgetown (4)                                               
Eastern Washington (13)   Geo (4)  Uta (5)  Duk (1)          
SMU (6)                   SMU (6)  Iow (3)  Gon (2)  Gon (2) 
UCLA (11)                                                    
Iowa St. (3)              Iow (3)                            
UAB (14)                                                     
Iowa (7)                  Iow (7)  Gon (2)                   
Davidson (10)                                                
Gonzaga (2)               Gon (2)                            
North Dakota St. (15)                                        
Total bracket energy: -10.5015086048


LOWEST ENERGY BRACKET FOR REGION east
Villanova (1)                                                
Lafayette (16)            Vil (1)                            
North Carolina St. (8)                                       
LSU (9)                   Nor (8)  Vil (1)                   
Northern Iowa (5)                                            
Wyoming (12)              Nor (5)                            
Louisville (4)                                               
UC Irvine (13)            Lou (4)  Nor (5)  Vil (1)          
Providence (6)            Pro (6)  Okl (3)  Vir (2)  Vir (2) 
Dayton (11)                                                  
Oklahoma (3)              Okl (3)                            
Albany (14)                                                  
Michigan St. (7)          Mic (7)  Vir (2)                   
Georgia (10)                                                 
Virginia (2)              Vir (2)                            
Belmont (15)                                                 
Total bracket energy: -10.8839299775


LOWEST ENERGY BRACKET FOR FINAL FOUR
Kentucky (1)                               
Wisconsin (1)             Ken (1)          
Utah (5)                  Vir (2)  Ken (1) 
Virginia (2)                               
Total bracket energy: -1.95692907302

YOUR MOST COMMON BRACKETS
MOST COMMON BRACKET FOR REGION midwest
Kentucky (1)                                                 
Hampton (16)              Ken (1)                            
Cincinnati (8)                                               
Purdue (9)                Pur (9)  Ken (1)                   
West Virginia (5)                                            
Buffalo (12)              Wes (5)                            
Maryland (4)                                                 
Valparaiso (13)           Mar (4)  Mar (4)  Ken (1)          
Butler (6)                Tex (11) Not (3)  Kan (2)  Ken (1) 
Texas (11)                                                   
Notre Dame (3)            Not (3)                            
Northeastern (14)                                            
Wichita St. (7)           Wic (7)  Kan (2)                   
Indiana (10)                                                 
Kansas (2)                Kan (2)                            
New Mexico St. (15)                                          
Total bracket energy: -10.3577160931

number of times this bracket happened: 11


MOST COMMON BRACKET FOR REGION west
Wisconsin (1)                                                
Coastal Carolina (16)     Wis (1)                            
Oregon (8)                                                   
Oklahoma St. (9)          Ore (8)  Wis (1)                   
Arkansas (5)                                                 
Wofford (12)              Ark (5)                            
North Carolina (4)                                           
Harvard (13)              Nor (4)  Nor (4)  Wis (1)          
Xavier (6)                Mis (11) Mis (11) Ohi (10) Wis (1) 
Mississippi (11)                                             
Baylor (3)                Geo (14)                           
Georgia St. (14)                                             
VCU (7)                   Ohi (10) Ohi (10)                  
Ohio St. (10)                                                
Arizona (2)               Tex (15)                           
Texas Southern (15)                                          
Total bracket energy: -9.30614882152

number of times this bracket happened: 13


MOST COMMON BRACKET FOR REGION south
Duke (1)                                                     
Robert Morris (16)        Duk (1)                            
San Diego St. (8)                                            
St. John's (9)            St. (9)  Duk (1)                   
Utah (5)                                                     
Stephen F. Austin (12)    Uta (5)                            
Georgetown (4)                                               
Eastern Washington (13)   Geo (4)  Uta (5)  Uta (5)          
SMU (6)                   UCL (11) UCL (11) Gon (2)  Uta (5) 
UCLA (11)                                                    
Iowa St. (3)              Iow (3)                            
UAB (14)                                                     
Iowa (7)                  Dav (10) Gon (2)                   
Davidson (10)                                                
Gonzaga (2)               Gon (2)                            
North Dakota St. (15)                                        
Total bracket energy: -9.78926932204

number of times this bracket happened: 9


MOST COMMON BRACKET FOR REGION east
Villanova (1)                                                
Lafayette (16)            Vil (1)                            
North Carolina St. (8)                                       
LSU (9)                   LSU (9)  Vil (1)                   
Northern Iowa (5)                                            
Wyoming (12)              Nor (5)                            
Louisville (4)                                               
UC Irvine (13)            Lou (4)  Lou (4)  Vil (1)          
Providence (6)            Day (11) Okl (3)  Vir (2)  Vir (2) 
Dayton (11)                                                  
Oklahoma (3)              Okl (3)                            
Albany (14)                                                  
Michigan St. (7)          Geo (10) Vir (2)                   
Georgia (10)                                                 
Virginia (2)              Vir (2)                            
Belmont (15)                                                 
Total bracket energy: -10.5204279257

number of times this bracket happened: 11


MOST COMMON BRACKET FOR FINAL FOUR
Kentucky (1)                               
Wisconsin (1)             Ken (1)          
Utah (5)                  Uta (5)  Ken (1) 
Virginia (2)                               
Total bracket energy: -1.78538460124

number of times this bracket happened: 176</code></pre>
</div>
</div>
<p>So, not looking so hot for my Kansas, but the code is working.</p>
<p>Let’s visualize the results, then make a table of results, as per <a href="http://fivethirtyeight.com/interactives/march-madness-predictions-2015/#mens">538</a>.</p>
<div id="cell-21" class="cell" data-scrolled="true" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Basic visualization</span></span>
<span id="cb15-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> region <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'midwest west east south'</span>.split():</span>
<span id="cb15-3">    MMMC.showstats(results[region],description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>region,newfig<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-11-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-11-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-11-output-3.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-11-output-4.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>Here you can see the classic reason to do Monte Carlo samping in the first place: we’re absolutely nowhere near fully sampling bracket space. You can tell this from each of the “Unique brackets over the trajectory” plots, none of which have leveled out.</p>
<p>Further, you can see that the strength distribution in each of the regions is pretty different. Check out the energy distribution histograms for visual proof.</p>
<section id="nice-tables" class="level3">
<h3 class="anchored" data-anchor-id="nice-tables">Nice tables</h3>
<p>And here’s our set of tabulated results. Note that things look a little funny for the Final Four: <code>runbracket2</code> runs the final four separate from the rest of the tourney. So, only four teams are allowed to have Championship and Win percentages above zero (the final four percentages are taken from the first chunk of the tourney).</p>
<div id="cell-23" class="cell" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1">h <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> HTML(MMMC.maketable(results))</span>
<span id="cb16-2">h</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="11">
<table class="caption-top table table-sm table-striped small">
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">Team</th>
<th data-quarto-table-cell-role="th">Region</th>
<th data-quarto-table-cell-role="th">Rank</th>
<th data-quarto-table-cell-role="th">2nd Round</th>
<th data-quarto-table-cell-role="th">3rd Round</th>
<th data-quarto-table-cell-role="th">Sweet 16</th>
<th data-quarto-table-cell-role="th">Elite 8</th>
<th data-quarto-table-cell-role="th">Final 4</th>
<th data-quarto-table-cell-role="th">Championship</th>
<th data-quarto-table-cell-role="th">Win</th>
</tr>
<tr class="even">
<td>Kentucky</td>
<td>midwest</td>
<td>1</td>
<td>100.0</td>
<td>65.74</td>
<td>49.18</td>
<td>36.16</td>
<td>25.29</td>
<td>55.3</td>
<td>34.5</td>
</tr>
<tr class="odd">
<td>Wisconsin</td>
<td>west</td>
<td>1</td>
<td>100.0</td>
<td>63.38</td>
<td>44.28</td>
<td>30.04</td>
<td>19.44</td>
<td>44.7</td>
<td>24.2</td>
</tr>
<tr class="even">
<td>Virginia</td>
<td>east</td>
<td>2</td>
<td>100.0</td>
<td>64.6</td>
<td>41.15</td>
<td>27.68</td>
<td>17.86</td>
<td>51.3</td>
<td>22.4</td>
</tr>
<tr class="odd">
<td>Utah</td>
<td>south</td>
<td>5</td>
<td>100.0</td>
<td>58.29</td>
<td>35.86</td>
<td>20.96</td>
<td>12.19</td>
<td>48.7</td>
<td>18.9</td>
</tr>
<tr class="even">
<td>Arizona</td>
<td>west</td>
<td>2</td>
<td>100.0</td>
<td>62.35</td>
<td>42.23</td>
<td>28.64</td>
<td>18.74</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Villanova</td>
<td>east</td>
<td>1</td>
<td>100.0</td>
<td>65.73</td>
<td>44.05</td>
<td>29.84</td>
<td>18.61</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Duke</td>
<td>south</td>
<td>1</td>
<td>100.0</td>
<td>66.03</td>
<td>41.64</td>
<td>25.2</td>
<td>15.05</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Gonzaga</td>
<td>south</td>
<td>2</td>
<td>100.0</td>
<td>61.67</td>
<td>37.12</td>
<td>23.51</td>
<td>14.22</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Kansas</td>
<td>midwest</td>
<td>2</td>
<td>100.0</td>
<td>58.6</td>
<td>33.71</td>
<td>19.16</td>
<td>10.31</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Oklahoma</td>
<td>east</td>
<td>3</td>
<td>100.0</td>
<td>60.74</td>
<td>34.96</td>
<td>18.34</td>
<td>10.01</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Northern Iowa</td>
<td>east</td>
<td>5</td>
<td>100.0</td>
<td>65.23</td>
<td>37.58</td>
<td>19.72</td>
<td>9.97</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Notre Dame</td>
<td>midwest</td>
<td>3</td>
<td>100.0</td>
<td>57.37</td>
<td>32.47</td>
<td>18.57</td>
<td>9.65</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Iowa St.</td>
<td>south</td>
<td>3</td>
<td>100.0</td>
<td>57.01</td>
<td>33.22</td>
<td>17.32</td>
<td>9.07</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Baylor</td>
<td>west</td>
<td>3</td>
<td>100.0</td>
<td>56.3</td>
<td>33.23</td>
<td>16.77</td>
<td>8.79</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>North Carolina</td>
<td>west</td>
<td>4</td>
<td>100.0</td>
<td>61.15</td>
<td>35.63</td>
<td>17.73</td>
<td>8.7</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>SMU</td>
<td>south</td>
<td>6</td>
<td>100.0</td>
<td>53.2</td>
<td>28.16</td>
<td>14.61</td>
<td>7.62</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Wichita St.</td>
<td>midwest</td>
<td>7</td>
<td>100.0</td>
<td>51.59</td>
<td>28.31</td>
<td>15.41</td>
<td>7.54</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Georgetown</td>
<td>south</td>
<td>4</td>
<td>100.0</td>
<td>60.99</td>
<td>28.74</td>
<td>15.08</td>
<td>7.37</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Michigan St.</td>
<td>east</td>
<td>7</td>
<td>100.0</td>
<td>55.17</td>
<td>25.73</td>
<td>14.43</td>
<td>7.17</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Iowa</td>
<td>south</td>
<td>7</td>
<td>100.0</td>
<td>51.15</td>
<td>25.99</td>
<td>13.76</td>
<td>6.63</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Louisville</td>
<td>east</td>
<td>4</td>
<td>100.0</td>
<td>56.62</td>
<td>29.3</td>
<td>14.05</td>
<td>6.58</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>West Virginia</td>
<td>midwest</td>
<td>5</td>
<td>100.0</td>
<td>55.77</td>
<td>31.54</td>
<td>13.3</td>
<td>6.47</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Providence</td>
<td>east</td>
<td>6</td>
<td>100.0</td>
<td>53.03</td>
<td>27.3</td>
<td>12.58</td>
<td>6.19</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Butler</td>
<td>midwest</td>
<td>6</td>
<td>100.0</td>
<td>53.61</td>
<td>27.03</td>
<td>13.43</td>
<td>6.05</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Texas</td>
<td>midwest</td>
<td>11</td>
<td>100.0</td>
<td>46.39</td>
<td>23.9</td>
<td>12.46</td>
<td>5.99</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Xavier</td>
<td>west</td>
<td>6</td>
<td>100.0</td>
<td>50.71</td>
<td>25.68</td>
<td>12.46</td>
<td>5.95</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Ohio St.</td>
<td>west</td>
<td>10</td>
<td>100.0</td>
<td>51.62</td>
<td>22.26</td>
<td>11.19</td>
<td>5.29</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Arkansas</td>
<td>west</td>
<td>5</td>
<td>100.0</td>
<td>57.67</td>
<td>28.22</td>
<td>11.83</td>
<td>5.14</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Maryland</td>
<td>midwest</td>
<td>4</td>
<td>100.0</td>
<td>55.25</td>
<td>25.84</td>
<td>11.73</td>
<td>5.14</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>VCU</td>
<td>west</td>
<td>7</td>
<td>100.0</td>
<td>48.38</td>
<td>21.78</td>
<td>11.24</td>
<td>5.06</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Oklahoma St.</td>
<td>west</td>
<td>9</td>
<td>100.0</td>
<td>50.19</td>
<td>21.58</td>
<td>11.31</td>
<td>4.84</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>San Diego St.</td>
<td>south</td>
<td>8</td>
<td>100.0</td>
<td>47.92</td>
<td>23.04</td>
<td>10.71</td>
<td>4.81</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Oregon</td>
<td>west</td>
<td>8</td>
<td>100.0</td>
<td>49.81</td>
<td>20.61</td>
<td>10.42</td>
<td>4.73</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Cincinnati</td>
<td>midwest</td>
<td>8</td>
<td>100.0</td>
<td>49.74</td>
<td>19.41</td>
<td>9.93</td>
<td>4.72</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Davidson</td>
<td>south</td>
<td>10</td>
<td>100.0</td>
<td>48.85</td>
<td>23.46</td>
<td>10.7</td>
<td>4.54</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>LSU</td>
<td>east</td>
<td>9</td>
<td>100.0</td>
<td>53.31</td>
<td>24.25</td>
<td>11.58</td>
<td>4.53</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>North Carolina St.</td>
<td>east</td>
<td>8</td>
<td>100.0</td>
<td>46.69</td>
<td>21.93</td>
<td>10.18</td>
<td>4.35</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Stephen F. Austin</td>
<td>south</td>
<td>12</td>
<td>100.0</td>
<td>41.71</td>
<td>21.31</td>
<td>9.08</td>
<td>4.3</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>UCLA</td>
<td>south</td>
<td>11</td>
<td>100.0</td>
<td>46.8</td>
<td>21.71</td>
<td>9.51</td>
<td>4.22</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>St. John's</td>
<td>south</td>
<td>9</td>
<td>100.0</td>
<td>52.08</td>
<td>22.83</td>
<td>9.84</td>
<td>4.17</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Purdue</td>
<td>midwest</td>
<td>9</td>
<td>100.0</td>
<td>50.26</td>
<td>19.41</td>
<td>8.86</td>
<td>3.76</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Buffalo</td>
<td>midwest</td>
<td>12</td>
<td>100.0</td>
<td>44.23</td>
<td>23.13</td>
<td>8.76</td>
<td>3.55</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Georgia</td>
<td>east</td>
<td>10</td>
<td>100.0</td>
<td>44.83</td>
<td>19.41</td>
<td>8.76</td>
<td>3.53</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Dayton</td>
<td>east</td>
<td>11</td>
<td>100.0</td>
<td>46.97</td>
<td>22.59</td>
<td>8.55</td>
<td>3.52</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Mississippi</td>
<td>west</td>
<td>11</td>
<td>100.0</td>
<td>49.29</td>
<td>21.45</td>
<td>9.01</td>
<td>3.51</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Indiana</td>
<td>midwest</td>
<td>10</td>
<td>100.0</td>
<td>48.41</td>
<td>22.29</td>
<td>8.57</td>
<td>3.14</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Valparaiso</td>
<td>midwest</td>
<td>13</td>
<td>100.0</td>
<td>44.75</td>
<td>19.49</td>
<td>7.86</td>
<td>3.1</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Georgia St.</td>
<td>west</td>
<td>14</td>
<td>100.0</td>
<td>43.7</td>
<td>19.64</td>
<td>6.96</td>
<td>2.67</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Harvard</td>
<td>west</td>
<td>13</td>
<td>100.0</td>
<td>38.85</td>
<td>18.65</td>
<td>6.98</td>
<td>2.36</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Wofford</td>
<td>west</td>
<td>12</td>
<td>100.0</td>
<td>42.33</td>
<td>17.5</td>
<td>6.84</td>
<td>2.33</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>New Mexico St.</td>
<td>midwest</td>
<td>15</td>
<td>100.0</td>
<td>41.4</td>
<td>15.69</td>
<td>6.3</td>
<td>2.26</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>UC Irvine</td>
<td>east</td>
<td>13</td>
<td>100.0</td>
<td>43.38</td>
<td>19.57</td>
<td>6.64</td>
<td>2.17</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Northeastern</td>
<td>midwest</td>
<td>14</td>
<td>100.0</td>
<td>42.63</td>
<td>16.6</td>
<td>6.1</td>
<td>2.17</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>UAB</td>
<td>south</td>
<td>14</td>
<td>100.0</td>
<td>42.99</td>
<td>16.91</td>
<td>6.09</td>
<td>2.02</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Wyoming</td>
<td>east</td>
<td>12</td>
<td>100.0</td>
<td>34.77</td>
<td>13.55</td>
<td>5.06</td>
<td>1.8</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Albany</td>
<td>east</td>
<td>14</td>
<td>100.0</td>
<td>39.26</td>
<td>15.15</td>
<td>4.86</td>
<td>1.59</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Eastern Washington</td>
<td>south</td>
<td>13</td>
<td>100.0</td>
<td>39.01</td>
<td>14.09</td>
<td>5.06</td>
<td>1.42</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Coastal Carolina</td>
<td>west</td>
<td>16</td>
<td>100.0</td>
<td>36.62</td>
<td>13.53</td>
<td>4.85</td>
<td>1.42</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>North Dakota St.</td>
<td>south</td>
<td>15</td>
<td>100.0</td>
<td>38.33</td>
<td>13.43</td>
<td>4.5</td>
<td>1.35</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Belmont</td>
<td>east</td>
<td>15</td>
<td>100.0</td>
<td>35.4</td>
<td>13.71</td>
<td>4.8</td>
<td>1.28</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Texas Southern</td>
<td>west</td>
<td>15</td>
<td>100.0</td>
<td>37.65</td>
<td>13.73</td>
<td>3.73</td>
<td>1.03</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Robert Morris</td>
<td>south</td>
<td>16</td>
<td>100.0</td>
<td>33.97</td>
<td>12.49</td>
<td>4.07</td>
<td>1.02</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Hampton</td>
<td>midwest</td>
<td>16</td>
<td>100.0</td>
<td>34.26</td>
<td>12.0</td>
<td>3.4</td>
<td>0.86</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Lafayette</td>
<td>east</td>
<td>16</td>
<td>100.0</td>
<td>34.27</td>
<td>9.77</td>
<td>2.93</td>
<td>0.84</td>
<td>0.0</td>
<td>0.0</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Given those concerns, let’s just run <code>runbracket1</code> and look at the results</p>
<div id="cell-25" class="cell" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb17-1">results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.runbracket1(ntrials<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span>,T<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Lowest energy bracket
Kentucky (1)                                                                   
Hampton (16)              Ken (1)                                              
Cincinnati (8)                                                                 
Purdue (9)                Cin (8)  Ken (1)                                     
West Virginia (5)                                                              
Buffalo (12)              Wes (5)                                              
Maryland (4)                                                                   
Valparaiso (13)           Mar (4)  Wes (5)  Ken (1)                            
Butler (6)                                                                     
Texas (11)                Tex (11)                                             
Notre Dame (3)                                                                 
Northeastern (14)         Not (3)  Not (3)                                     
Wichita St. (7)                                                                
Indiana (10)              Wic (7)                                              
Kansas (2)                                                                     
New Mexico St. (15)       Kan (2)  Kan (2)  Not (3)  Ken (1)                   
Duke (1)                                                                       
Robert Morris (16)        Duk (1)                                              
San Diego St. (8)                                                              
St. John's (9)            San (8)  Duk (1)                                     
Utah (5)                                                                       
Stephen F. Austin (12)    Uta (5)                                              
Georgetown (4)                                                                 
Eastern Washington (13)   Geo (4)  Uta (5)  Duk (1)                            
SMU (6)                                                                        
UCLA (11)                 SMU (6)                                              
Iowa St. (3)                                                                   
UAB (14)                  Iow (3)  Iow (3)                                     
Iowa (7)                                                                       
Davidson (10)             Iow (7)                                              
Gonzaga (2)                                                                    
North Dakota St. (15)     Gon (2)  Gon (2)  Gon (2)  Gon (2)  Ken (1)          
Wisconsin (1)             Wis (1)  Wis (1)  Wis (1)  Ari (2)  Ari (2)  Ken (1) 
Coastal Carolina (16)                                                          
Oregon (8)                Okl (9)                                              
Oklahoma St. (9)                                                               
Arkansas (5)              Ark (5)  Nor (4)                                     
Wofford (12)                                                                   
North Carolina (4)        Nor (4)                                              
Harvard (13)                                                                   
Xavier (6)                Xav (6)  Bay (3)  Ari (2)                            
Mississippi (11)                                                               
Baylor (3)                Bay (3)                                              
Georgia St. (14)                                                               
VCU (7)                   Ohi (10) Ari (2)                                     
Ohio St. (10)                                                                  
Arizona (2)               Ari (2)                                              
Texas Southern (15)                                                            
Villanova (1)             Vil (1)  Vil (1)  Vil (1)  Vir (2)                   
Lafayette (16)                                                                 
North Carolina St. (8)    Nor (8)                                              
LSU (9)                                                                        
Northern Iowa (5)         Nor (5)  Nor (5)                                     
Wyoming (12)                                                                   
Louisville (4)            Lou (4)                                              
UC Irvine (13)                                                                 
Providence (6)            Pro (6)  Okl (3)  Vir (2)                            
Dayton (11)                                                                    
Oklahoma (3)              Okl (3)                                              
Albany (14)                                                                    
Michigan St. (7)          Mic (7)  Vir (2)                                     
Georgia (10)                                                                   
Virginia (2)              Vir (2)                                              
Belmont (15)                                                                   
Total bracket energy: -44.697443432

Most common bracket (7)
Kentucky (1)                                                                   
Hampton (16)              Ham (16)                                             
Cincinnati (8)                                                                 
Purdue (9)                Cin (8)  Cin (8)                                     
West Virginia (5)                                                              
Buffalo (12)              Wes (5)                                              
Maryland (4)                                                                   
Valparaiso (13)           Mar (4)  Wes (5)  Cin (8)                            
Butler (6)                                                                     
Texas (11)                But (6)                                              
Notre Dame (3)                                                                 
Northeastern (14)         Nor (14) But (6)                                     
Wichita St. (7)                                                                
Indiana (10)              Wic (7)                                              
Kansas (2)                                                                     
New Mexico St. (15)       Kan (2)  Kan (2)  But (6)  But (6)                   
Duke (1)                                                                       
Robert Morris (16)        Rob (16)                                             
San Diego St. (8)                                                              
St. John's (9)            San (8)  San (8)                                     
Utah (5)                                                                       
Stephen F. Austin (12)    Uta (5)                                              
Georgetown (4)                                                                 
Eastern Washington (13)   Geo (4)  Geo (4)  Geo (4)                            
SMU (6)                                                                        
UCLA (11)                 SMU (6)                                              
Iowa St. (3)                                                                   
UAB (14)                  Iow (3)  Iow (3)                                     
Iowa (7)                                                                       
Davidson (10)             Iow (7)                                              
Gonzaga (2)                                                                    
North Dakota St. (15)     Gon (2)  Gon (2)  Gon (2)  Gon (2)  Gon (2)          
Wisconsin (1)             Wis (1)  Ore (8)  Ore (8)  Ari (2)  Ari (2)  Ari (2) 
Coastal Carolina (16)                                                          
Oregon (8)                Ore (8)                                              
Oklahoma St. (9)                                                               
Arkansas (5)              Ark (5)  Nor (4)                                     
Wofford (12)                                                                   
North Carolina (4)        Nor (4)                                              
Harvard (13)                                                                   
Xavier (6)                Xav (6)  Xav (6)  Ari (2)                            
Mississippi (11)                                                               
Baylor (3)                Bay (3)                                              
Georgia St. (14)                                                               
VCU (7)                   Ohi (10) Ari (2)                                     
Ohio St. (10)                                                                  
Arizona (2)               Ari (2)                                              
Texas Southern (15)                                                            
Villanova (1)             Laf (16) Nor (8)  Nor (5)  Mic (7)                   
Lafayette (16)                                                                 
North Carolina St. (8)    Nor (8)                                              
LSU (9)                                                                        
Northern Iowa (5)         Nor (5)  Nor (5)                                     
Wyoming (12)                                                                   
Louisville (4)            UC  (13)                                             
UC Irvine (13)                                                                 
Providence (6)            Pro (6)  Pro (6)  Mic (7)                            
Dayton (11)                                                                    
Oklahoma (3)              Okl (3)                                              
Albany (14)                                                                    
Michigan St. (7)          Mic (7)  Mic (7)                                     
Georgia (10)                                                                   
Virginia (2)              Bel (15)                                             
Belmont (15)                                                                   
Total bracket energy: -38.100050778
</code></pre>
</div>
</div>
<div id="cell-26" class="cell" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb19-1">h <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> HTML(MMMC.maketable(results))</span>
<span id="cb19-2">h</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="13">
<table class="caption-top table table-sm table-striped small">
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">Team</th>
<th data-quarto-table-cell-role="th">Region</th>
<th data-quarto-table-cell-role="th">Rank</th>
<th data-quarto-table-cell-role="th">2nd Round</th>
<th data-quarto-table-cell-role="th">3rd Round</th>
<th data-quarto-table-cell-role="th">Sweet 16</th>
<th data-quarto-table-cell-role="th">Elite 8</th>
<th data-quarto-table-cell-role="th">Final 4</th>
<th data-quarto-table-cell-role="th">Championship</th>
<th data-quarto-table-cell-role="th">Win</th>
</tr>
<tr class="even">
<td>Kentucky</td>
<td>midwest</td>
<td>1</td>
<td>100.0</td>
<td>58.69</td>
<td>44.77</td>
<td>32.58</td>
<td>23.98</td>
<td>16.41</td>
<td>10.87</td>
</tr>
<tr class="odd">
<td>Villanova</td>
<td>east</td>
<td>1</td>
<td>100.0</td>
<td>65.53</td>
<td>45.71</td>
<td>32.0</td>
<td>20.87</td>
<td>13.77</td>
<td>8.67</td>
</tr>
<tr class="even">
<td>Arizona</td>
<td>west</td>
<td>2</td>
<td>100.0</td>
<td>62.57</td>
<td>44.59</td>
<td>33.54</td>
<td>20.75</td>
<td>13.11</td>
<td>8.03</td>
</tr>
<tr class="odd">
<td>Wisconsin</td>
<td>west</td>
<td>1</td>
<td>100.0</td>
<td>67.67</td>
<td>43.02</td>
<td>27.42</td>
<td>18.12</td>
<td>11.35</td>
<td>7.15</td>
</tr>
<tr class="even">
<td>Virginia</td>
<td>east</td>
<td>2</td>
<td>100.0</td>
<td>63.76</td>
<td>43.67</td>
<td>30.86</td>
<td>19.05</td>
<td>11.08</td>
<td>6.59</td>
</tr>
<tr class="odd">
<td>Gonzaga</td>
<td>south</td>
<td>2</td>
<td>100.0</td>
<td>57.98</td>
<td>39.95</td>
<td>25.46</td>
<td>15.02</td>
<td>9.09</td>
<td>4.78</td>
</tr>
<tr class="even">
<td>Utah</td>
<td>south</td>
<td>5</td>
<td>100.0</td>
<td>57.92</td>
<td>34.4</td>
<td>21.04</td>
<td>13.19</td>
<td>6.8</td>
<td>3.66</td>
</tr>
<tr class="odd">
<td>Duke</td>
<td>south</td>
<td>1</td>
<td>100.0</td>
<td>60.1</td>
<td>35.45</td>
<td>18.48</td>
<td>11.41</td>
<td>6.73</td>
<td>3.49</td>
</tr>
<tr class="even">
<td>Notre Dame</td>
<td>midwest</td>
<td>3</td>
<td>100.0</td>
<td>61.12</td>
<td>33.93</td>
<td>19.4</td>
<td>11.17</td>
<td>5.57</td>
<td>2.8</td>
</tr>
<tr class="odd">
<td>Oklahoma</td>
<td>east</td>
<td>3</td>
<td>100.0</td>
<td>62.0</td>
<td>37.74</td>
<td>17.64</td>
<td>10.01</td>
<td>5.26</td>
<td>2.64</td>
</tr>
<tr class="even">
<td>Kansas</td>
<td>midwest</td>
<td>2</td>
<td>100.0</td>
<td>66.57</td>
<td>35.81</td>
<td>19.02</td>
<td>9.97</td>
<td>5.45</td>
<td>2.59</td>
</tr>
<tr class="odd">
<td>Northern Iowa</td>
<td>east</td>
<td>5</td>
<td>100.0</td>
<td>62.27</td>
<td>35.11</td>
<td>18.67</td>
<td>10.05</td>
<td>4.82</td>
<td>2.38</td>
</tr>
<tr class="even">
<td>Iowa St.</td>
<td>south</td>
<td>3</td>
<td>100.0</td>
<td>60.06</td>
<td>36.95</td>
<td>20.04</td>
<td>11.12</td>
<td>5.24</td>
<td>2.36</td>
</tr>
<tr class="odd">
<td>Wichita St.</td>
<td>midwest</td>
<td>7</td>
<td>100.0</td>
<td>56.94</td>
<td>31.91</td>
<td>19.06</td>
<td>8.76</td>
<td>4.18</td>
<td>2.17</td>
</tr>
<tr class="even">
<td>North Carolina</td>
<td>west</td>
<td>4</td>
<td>100.0</td>
<td>58.35</td>
<td>32.3</td>
<td>18.51</td>
<td>9.54</td>
<td>4.23</td>
<td>1.82</td>
</tr>
<tr class="odd">
<td>SMU</td>
<td>south</td>
<td>6</td>
<td>100.0</td>
<td>55.35</td>
<td>29.26</td>
<td>16.91</td>
<td>8.61</td>
<td>3.79</td>
<td>1.61</td>
</tr>
<tr class="even">
<td>Baylor</td>
<td>west</td>
<td>3</td>
<td>100.0</td>
<td>56.63</td>
<td>29.51</td>
<td>11.82</td>
<td>7.12</td>
<td>3.63</td>
<td>1.56</td>
</tr>
<tr class="odd">
<td>Georgetown</td>
<td>south</td>
<td>4</td>
<td>100.0</td>
<td>56.75</td>
<td>29.58</td>
<td>15.75</td>
<td>7.23</td>
<td>3.24</td>
<td>1.42</td>
</tr>
<tr class="even">
<td>Texas</td>
<td>midwest</td>
<td>11</td>
<td>100.0</td>
<td>58.28</td>
<td>27.89</td>
<td>14.8</td>
<td>6.87</td>
<td>3.3</td>
<td>1.39</td>
</tr>
<tr class="odd">
<td>Michigan St.</td>
<td>east</td>
<td>7</td>
<td>100.0</td>
<td>59.67</td>
<td>27.43</td>
<td>14.51</td>
<td>6.41</td>
<td>2.98</td>
<td>1.29</td>
</tr>
<tr class="even">
<td>Ohio St.</td>
<td>west</td>
<td>10</td>
<td>100.0</td>
<td>50.4</td>
<td>23.8</td>
<td>12.61</td>
<td>6.46</td>
<td>3.19</td>
<td>1.27</td>
</tr>
<tr class="odd">
<td>West Virginia</td>
<td>midwest</td>
<td>5</td>
<td>100.0</td>
<td>58.66</td>
<td>33.41</td>
<td>13.82</td>
<td>6.62</td>
<td>2.97</td>
<td>1.17</td>
</tr>
<tr class="even">
<td>Arkansas</td>
<td>west</td>
<td>5</td>
<td>100.0</td>
<td>57.66</td>
<td>31.16</td>
<td>12.71</td>
<td>5.34</td>
<td>2.38</td>
<td>1.16</td>
</tr>
<tr class="odd">
<td>Louisville</td>
<td>east</td>
<td>4</td>
<td>100.0</td>
<td>55.49</td>
<td>31.49</td>
<td>15.28</td>
<td>7.18</td>
<td>3.1</td>
<td>1.14</td>
</tr>
<tr class="even">
<td>Iowa</td>
<td>south</td>
<td>7</td>
<td>100.0</td>
<td>55.68</td>
<td>25.06</td>
<td>9.92</td>
<td>5.49</td>
<td>2.67</td>
<td>1.13</td>
</tr>
<tr class="odd">
<td>Butler</td>
<td>midwest</td>
<td>6</td>
<td>100.0</td>
<td>41.72</td>
<td>24.06</td>
<td>11.13</td>
<td>6.36</td>
<td>2.77</td>
<td>1.12</td>
</tr>
<tr class="even">
<td>Xavier</td>
<td>west</td>
<td>6</td>
<td>100.0</td>
<td>56.43</td>
<td>31.36</td>
<td>14.27</td>
<td>6.71</td>
<td>2.44</td>
<td>1.12</td>
</tr>
<tr class="odd">
<td>San Diego St.</td>
<td>south</td>
<td>8</td>
<td>100.0</td>
<td>52.15</td>
<td>29.17</td>
<td>12.83</td>
<td>6.64</td>
<td>2.88</td>
<td>1.03</td>
</tr>
<tr class="even">
<td>Cincinnati</td>
<td>midwest</td>
<td>8</td>
<td>100.0</td>
<td>50.58</td>
<td>20.36</td>
<td>12.28</td>
<td>5.35</td>
<td>2.38</td>
<td>0.9</td>
</tr>
<tr class="odd">
<td>Davidson</td>
<td>south</td>
<td>10</td>
<td>100.0</td>
<td>44.32</td>
<td>15.66</td>
<td>6.98</td>
<td>3.12</td>
<td>1.69</td>
<td>0.73</td>
</tr>
<tr class="even">
<td>VCU</td>
<td>west</td>
<td>7</td>
<td>100.0</td>
<td>49.6</td>
<td>19.03</td>
<td>8.63</td>
<td>4.28</td>
<td>1.81</td>
<td>0.71</td>
</tr>
<tr class="odd">
<td>Maryland</td>
<td>midwest</td>
<td>4</td>
<td>100.0</td>
<td>50.87</td>
<td>22.22</td>
<td>9.44</td>
<td>3.6</td>
<td>1.86</td>
<td>0.7</td>
</tr>
<tr class="even">
<td>Oregon</td>
<td>west</td>
<td>8</td>
<td>100.0</td>
<td>58.41</td>
<td>24.89</td>
<td>10.74</td>
<td>4.78</td>
<td>1.74</td>
<td>0.66</td>
</tr>
<tr class="odd">
<td>Stephen F. Austin</td>
<td>south</td>
<td>12</td>
<td>100.0</td>
<td>42.08</td>
<td>23.6</td>
<td>11.54</td>
<td>4.51</td>
<td>1.72</td>
<td>0.63</td>
</tr>
<tr class="even">
<td>St. John's</td>
<td>south</td>
<td>9</td>
<td>100.0</td>
<td>47.85</td>
<td>18.82</td>
<td>9.51</td>
<td>3.97</td>
<td>1.83</td>
<td>0.62</td>
</tr>
<tr class="odd">
<td>Dayton</td>
<td>east</td>
<td>11</td>
<td>100.0</td>
<td>48.81</td>
<td>21.64</td>
<td>8.96</td>
<td>4.31</td>
<td>1.79</td>
<td>0.58</td>
</tr>
<tr class="even">
<td>Mississippi</td>
<td>west</td>
<td>11</td>
<td>100.0</td>
<td>43.57</td>
<td>21.86</td>
<td>8.38</td>
<td>3.0</td>
<td>1.41</td>
<td>0.55</td>
</tr>
<tr class="odd">
<td>Purdue</td>
<td>midwest</td>
<td>9</td>
<td>100.0</td>
<td>49.42</td>
<td>20.37</td>
<td>9.7</td>
<td>3.31</td>
<td>1.33</td>
<td>0.53</td>
</tr>
<tr class="even">
<td>Buffalo</td>
<td>midwest</td>
<td>12</td>
<td>100.0</td>
<td>41.34</td>
<td>21.68</td>
<td>7.93</td>
<td>2.77</td>
<td>1.19</td>
<td>0.52</td>
</tr>
<tr class="odd">
<td>Valparaiso</td>
<td>midwest</td>
<td>13</td>
<td>100.0</td>
<td>49.13</td>
<td>22.69</td>
<td>9.34</td>
<td>4.12</td>
<td>1.49</td>
<td>0.51</td>
</tr>
<tr class="even">
<td>Providence</td>
<td>east</td>
<td>6</td>
<td>100.0</td>
<td>51.19</td>
<td>26.68</td>
<td>11.18</td>
<td>4.28</td>
<td>1.4</td>
<td>0.48</td>
</tr>
<tr class="odd">
<td>LSU</td>
<td>east</td>
<td>9</td>
<td>100.0</td>
<td>48.81</td>
<td>15.79</td>
<td>7.11</td>
<td>2.58</td>
<td>0.92</td>
<td>0.47</td>
</tr>
<tr class="even">
<td>Georgia</td>
<td>east</td>
<td>10</td>
<td>100.0</td>
<td>40.33</td>
<td>15.12</td>
<td>7.58</td>
<td>2.95</td>
<td>1.3</td>
<td>0.46</td>
</tr>
<tr class="odd">
<td>Oklahoma St.</td>
<td>west</td>
<td>9</td>
<td>100.0</td>
<td>41.59</td>
<td>18.78</td>
<td>9.24</td>
<td>3.35</td>
<td>1.1</td>
<td>0.45</td>
</tr>
<tr class="even">
<td>Wofford</td>
<td>west</td>
<td>12</td>
<td>100.0</td>
<td>42.34</td>
<td>16.57</td>
<td>7.37</td>
<td>2.63</td>
<td>0.94</td>
<td>0.44</td>
</tr>
<tr class="odd">
<td>Indiana</td>
<td>midwest</td>
<td>10</td>
<td>100.0</td>
<td>43.06</td>
<td>18.98</td>
<td>8.46</td>
<td>3.72</td>
<td>1.2</td>
<td>0.43</td>
</tr>
<tr class="even">
<td>UCLA</td>
<td>south</td>
<td>11</td>
<td>100.0</td>
<td>44.65</td>
<td>21.4</td>
<td>8.22</td>
<td>2.72</td>
<td>1.26</td>
<td>0.42</td>
</tr>
<tr class="odd">
<td>North Carolina St.</td>
<td>east</td>
<td>8</td>
<td>100.0</td>
<td>51.19</td>
<td>22.31</td>
<td>8.99</td>
<td>3.55</td>
<td>1.45</td>
<td>0.4</td>
</tr>
<tr class="even">
<td>Harvard</td>
<td>west</td>
<td>13</td>
<td>100.0</td>
<td>41.65</td>
<td>19.97</td>
<td>8.53</td>
<td>2.49</td>
<td>0.8</td>
<td>0.35</td>
</tr>
<tr class="odd">
<td>UC Irvine</td>
<td>east</td>
<td>13</td>
<td>100.0</td>
<td>44.51</td>
<td>20.52</td>
<td>7.19</td>
<td>2.44</td>
<td>0.97</td>
<td>0.26</td>
</tr>
<tr class="even">
<td>Coastal Carolina</td>
<td>west</td>
<td>16</td>
<td>100.0</td>
<td>32.33</td>
<td>13.31</td>
<td>5.48</td>
<td>2.24</td>
<td>0.57</td>
<td>0.24</td>
</tr>
<tr class="odd">
<td>Georgia St.</td>
<td>west</td>
<td>14</td>
<td>100.0</td>
<td>43.37</td>
<td>17.27</td>
<td>6.04</td>
<td>1.92</td>
<td>0.47</td>
<td>0.21</td>
</tr>
<tr class="even">
<td>UAB</td>
<td>south</td>
<td>14</td>
<td>100.0</td>
<td>39.94</td>
<td>12.39</td>
<td>4.94</td>
<td>1.57</td>
<td>0.73</td>
<td>0.17</td>
</tr>
<tr class="odd">
<td>Eastern Washington</td>
<td>south</td>
<td>13</td>
<td>100.0</td>
<td>43.25</td>
<td>12.42</td>
<td>3.88</td>
<td>1.27</td>
<td>0.55</td>
<td>0.17</td>
</tr>
<tr class="even">
<td>Lafayette</td>
<td>east</td>
<td>16</td>
<td>100.0</td>
<td>34.47</td>
<td>16.19</td>
<td>7.11</td>
<td>2.28</td>
<td>0.5</td>
<td>0.15</td>
</tr>
<tr class="odd">
<td>Wyoming</td>
<td>east</td>
<td>12</td>
<td>100.0</td>
<td>37.73</td>
<td>12.88</td>
<td>3.65</td>
<td>1.12</td>
<td>0.4</td>
<td>0.15</td>
</tr>
<tr class="even">
<td>Albany</td>
<td>east</td>
<td>14</td>
<td>100.0</td>
<td>38.0</td>
<td>13.94</td>
<td>4.57</td>
<td>1.84</td>
<td>0.53</td>
<td>0.11</td>
</tr>
<tr class="odd">
<td>Robert Morris</td>
<td>south</td>
<td>16</td>
<td>100.0</td>
<td>39.9</td>
<td>16.56</td>
<td>6.97</td>
<td>2.39</td>
<td>0.5</td>
<td>0.11</td>
</tr>
<tr class="even">
<td>Belmont</td>
<td>east</td>
<td>15</td>
<td>100.0</td>
<td>36.24</td>
<td>13.78</td>
<td>4.7</td>
<td>1.08</td>
<td>0.31</td>
<td>0.11</td>
</tr>
<tr class="odd">
<td>Texas Southern</td>
<td>west</td>
<td>15</td>
<td>100.0</td>
<td>37.43</td>
<td>12.58</td>
<td>4.71</td>
<td>1.27</td>
<td>0.25</td>
<td>0.11</td>
</tr>
<tr class="even">
<td>Northeastern</td>
<td>midwest</td>
<td>14</td>
<td>100.0</td>
<td>38.88</td>
<td>14.12</td>
<td>4.28</td>
<td>0.99</td>
<td>0.29</td>
<td>0.09</td>
</tr>
<tr class="odd">
<td>Hampton</td>
<td>midwest</td>
<td>16</td>
<td>100.0</td>
<td>41.31</td>
<td>14.5</td>
<td>4.91</td>
<td>1.25</td>
<td>0.25</td>
<td>0.07</td>
</tr>
<tr class="even">
<td>North Dakota St.</td>
<td>south</td>
<td>15</td>
<td>100.0</td>
<td>42.02</td>
<td>19.33</td>
<td>7.53</td>
<td>1.74</td>
<td>0.33</td>
<td>0.05</td>
</tr>
<tr class="odd">
<td>New Mexico St.</td>
<td>midwest</td>
<td>15</td>
<td>100.0</td>
<td>33.43</td>
<td>13.3</td>
<td>3.85</td>
<td>1.16</td>
<td>0.31</td>
<td>0.05</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>That is, indeed, high temperature! Let’s try it with a bunch more runs</p>
<div id="cell-28" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1">results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.runbracket1(ntrials<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100000</span>,T<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Lowest energy bracket
Kentucky (1)                                                                   
Hampton (16)              Ken (1)                                              
Cincinnati (8)                                                                 
Purdue (9)                Cin (8)  Ken (1)                                     
West Virginia (5)                                                              
Buffalo (12)              Wes (5)                                              
Maryland (4)                                                                   
Valparaiso (13)           Mar (4)  Wes (5)  Ken (1)                            
Butler (6)                                                                     
Texas (11)                Tex (11)                                             
Notre Dame (3)                                                                 
Northeastern (14)         Not (3)  Not (3)                                     
Wichita St. (7)                                                                
Indiana (10)              Wic (7)                                              
Kansas (2)                                                                     
New Mexico St. (15)       Kan (2)  Kan (2)  Not (3)  Ken (1)                   
Duke (1)                                                                       
Robert Morris (16)        Duk (1)                                              
San Diego St. (8)                                                              
St. John's (9)            San (8)  Duk (1)                                     
Utah (5)                                                                       
Stephen F. Austin (12)    Uta (5)                                              
Georgetown (4)                                                                 
Eastern Washington (13)   Geo (4)  Uta (5)  Duk (1)                            
SMU (6)                                                                        
UCLA (11)                 SMU (6)                                              
Iowa St. (3)                                                                   
UAB (14)                  Iow (3)  Iow (3)                                     
Iowa (7)                                                                       
Davidson (10)             Iow (7)                                              
Gonzaga (2)                                                                    
North Dakota St. (15)     Gon (2)  Gon (2)  Gon (2)  Gon (2)  Ken (1)          
Wisconsin (1)             Wis (1)  Wis (1)  Wis (1)  Ari (2)  Ari (2)  Ken (1) 
Coastal Carolina (16)                                                          
Oregon (8)                Okl (9)                                              
Oklahoma St. (9)                                                               
Arkansas (5)              Ark (5)  Nor (4)                                     
Wofford (12)                                                                   
North Carolina (4)        Nor (4)                                              
Harvard (13)                                                                   
Xavier (6)                Xav (6)  Bay (3)  Ari (2)                            
Mississippi (11)                                                               
Baylor (3)                Bay (3)                                              
Georgia St. (14)                                                               
VCU (7)                   Ohi (10) Ari (2)                                     
Ohio St. (10)                                                                  
Arizona (2)               Ari (2)                                              
Texas Southern (15)                                                            
Villanova (1)             Vil (1)  Vil (1)  Vil (1)  Vir (2)                   
Lafayette (16)                                                                 
North Carolina St. (8)    Nor (8)                                              
LSU (9)                                                                        
Northern Iowa (5)         Nor (5)  Nor (5)                                     
Wyoming (12)                                                                   
Louisville (4)            Lou (4)                                              
UC Irvine (13)                                                                 
Providence (6)            Pro (6)  Okl (3)  Vir (2)                            
Dayton (11)                                                                    
Oklahoma (3)              Okl (3)                                              
Albany (14)                                                                    
Michigan St. (7)          Mic (7)  Vir (2)                                     
Georgia (10)                                                                   
Virginia (2)              Vir (2)                                              
Belmont (15)                                                                   
Total bracket energy: -44.697443432

Most common bracket (9)
Kentucky (1)                                                                   
Hampton (16)              Ken (1)                                              
Cincinnati (8)                                                                 
Purdue (9)                Cin (8)  Ken (1)                                     
West Virginia (5)                                                              
Buffalo (12)              Buf (12)                                             
Maryland (4)                                                                   
Valparaiso (13)           Val (13) Buf (12) Ken (1)                            
Butler (6)                                                                     
Texas (11)                Tex (11)                                             
Notre Dame (3)                                                                 
Northeastern (14)         Nor (14) Nor (14)                                    
Wichita St. (7)                                                                
Indiana (10)              Wic (7)                                              
Kansas (2)                                                                     
New Mexico St. (15)       Kan (2)  Wic (7)  Wic (7)  Ken (1)                   
Duke (1)                                                                       
Robert Morris (16)        Rob (16)                                             
San Diego St. (8)                                                              
St. John's (9)            St. (9)  St. (9)                                     
Utah (5)                                                                       
Stephen F. Austin (12)    Ste (12)                                             
Georgetown (4)                                                                 
Eastern Washington (13)   Eas (13) Eas (13) St. (9)                            
SMU (6)                                                                        
UCLA (11)                 SMU (6)                                              
Iowa St. (3)                                                                   
UAB (14)                  Iow (3)  Iow (3)                                     
Iowa (7)                                                                       
Davidson (10)             Dav (10)                                             
Gonzaga (2)                                                                    
North Dakota St. (15)     Nor (15) Dav (10) Iow (3)  Iow (3)  Ken (1)          
Wisconsin (1)             Wis (1)  Wis (1)  Ark (5)  Ark (5)  Vir (2)  Vir (2) 
Coastal Carolina (16)                                                          
Oregon (8)                Okl (9)                                              
Oklahoma St. (9)                                                               
Arkansas (5)              Ark (5)  Ark (5)                                     
Wofford (12)                                                                   
North Carolina (4)        Nor (4)                                              
Harvard (13)                                                                   
Xavier (6)                Xav (6)  Bay (3)  Bay (3)                            
Mississippi (11)                                                               
Baylor (3)                Bay (3)                                              
Georgia St. (14)                                                               
VCU (7)                   Ohi (10) Ohi (10)                                    
Ohio St. (10)                                                                  
Arizona (2)               Ari (2)                                              
Texas Southern (15)                                                            
Villanova (1)             Vil (1)  Vil (1)  Lou (4)  Vir (2)                   
Lafayette (16)                                                                 
North Carolina St. (8)    LSU (9)                                              
LSU (9)                                                                        
Northern Iowa (5)         Nor (5)  Lou (4)                                     
Wyoming (12)                                                                   
Louisville (4)            Lou (4)                                              
UC Irvine (13)                                                                 
Providence (6)            Day (11) Alb (14) Vir (2)                            
Dayton (11)                                                                    
Oklahoma (3)              Alb (14)                                             
Albany (14)                                                                    
Michigan St. (7)          Mic (7)  Vir (2)                                     
Georgia (10)                                                                   
Virginia (2)              Vir (2)                                              
Belmont (15)                                                                   
Total bracket energy: -37.1483683417
</code></pre>
</div>
</div>
<div id="cell-29" class="cell" data-execution_count="15">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb22-1">h <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> HTML(MMMC.maketable(results))</span>
<span id="cb22-2">h</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="15">
<table class="caption-top table table-sm table-striped small">
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">Team</th>
<th data-quarto-table-cell-role="th">Region</th>
<th data-quarto-table-cell-role="th">Rank</th>
<th data-quarto-table-cell-role="th">2nd Round</th>
<th data-quarto-table-cell-role="th">3rd Round</th>
<th data-quarto-table-cell-role="th">Sweet 16</th>
<th data-quarto-table-cell-role="th">Elite 8</th>
<th data-quarto-table-cell-role="th">Final 4</th>
<th data-quarto-table-cell-role="th">Championship</th>
<th data-quarto-table-cell-role="th">Win</th>
</tr>
<tr class="even">
<td>Kentucky</td>
<td>midwest</td>
<td>1</td>
<td>100.0</td>
<td>67.848</td>
<td>49.189</td>
<td>36.444</td>
<td>26.79</td>
<td>18.949</td>
<td>12.828</td>
</tr>
<tr class="odd">
<td>Arizona</td>
<td>west</td>
<td>2</td>
<td>100.0</td>
<td>64.114</td>
<td>42.628</td>
<td>29.248</td>
<td>18.838</td>
<td>12.256</td>
<td>7.805</td>
</tr>
<tr class="even">
<td>Wisconsin</td>
<td>west</td>
<td>1</td>
<td>100.0</td>
<td>63.368</td>
<td>42.146</td>
<td>28.131</td>
<td>17.705</td>
<td>11.083</td>
<td>6.862</td>
</tr>
<tr class="odd">
<td>Villanova</td>
<td>east</td>
<td>1</td>
<td>100.0</td>
<td>64.314</td>
<td>43.814</td>
<td>28.618</td>
<td>17.425</td>
<td>10.64</td>
<td>6.365</td>
</tr>
<tr class="even">
<td>Virginia</td>
<td>east</td>
<td>2</td>
<td>100.0</td>
<td>62.189</td>
<td>39.522</td>
<td>26.285</td>
<td>17.038</td>
<td>10.321</td>
<td>6.183</td>
</tr>
<tr class="odd">
<td>Gonzaga</td>
<td>south</td>
<td>2</td>
<td>100.0</td>
<td>61.672</td>
<td>38.305</td>
<td>24.17</td>
<td>14.417</td>
<td>8.149</td>
<td>4.538</td>
</tr>
<tr class="even">
<td>Duke</td>
<td>south</td>
<td>1</td>
<td>100.0</td>
<td>64.407</td>
<td>40.263</td>
<td>24.75</td>
<td>14.927</td>
<td>8.061</td>
<td>4.37</td>
</tr>
<tr class="odd">
<td>Oklahoma</td>
<td>east</td>
<td>3</td>
<td>100.0</td>
<td>62.257</td>
<td>38.005</td>
<td>20.227</td>
<td>11.564</td>
<td>5.906</td>
<td>3.04</td>
</tr>
<tr class="even">
<td>Utah</td>
<td>south</td>
<td>5</td>
<td>100.0</td>
<td>56.188</td>
<td>34.295</td>
<td>19.469</td>
<td>10.846</td>
<td>5.576</td>
<td>2.832</td>
</tr>
<tr class="odd">
<td>Notre Dame</td>
<td>midwest</td>
<td>3</td>
<td>100.0</td>
<td>60.692</td>
<td>33.504</td>
<td>18.74</td>
<td>9.665</td>
<td>5.061</td>
<td>2.473</td>
</tr>
<tr class="even">
<td>Kansas</td>
<td>midwest</td>
<td>2</td>
<td>100.0</td>
<td>59.732</td>
<td>33.553</td>
<td>18.682</td>
<td>9.098</td>
<td>4.834</td>
<td>2.329</td>
</tr>
<tr class="odd">
<td>Northern Iowa</td>
<td>east</td>
<td>5</td>
<td>100.0</td>
<td>58.928</td>
<td>34.06</td>
<td>17.509</td>
<td>9.302</td>
<td>4.604</td>
<td>2.239</td>
</tr>
<tr class="even">
<td>North Carolina</td>
<td>west</td>
<td>4</td>
<td>100.0</td>
<td>61.148</td>
<td>36.852</td>
<td>19.086</td>
<td>9.535</td>
<td>4.682</td>
<td>2.223</td>
</tr>
<tr class="odd">
<td>Iowa St.</td>
<td>south</td>
<td>3</td>
<td>100.0</td>
<td>59.581</td>
<td>33.405</td>
<td>18.131</td>
<td>9.562</td>
<td>4.647</td>
<td>2.206</td>
</tr>
<tr class="even">
<td>Baylor</td>
<td>west</td>
<td>3</td>
<td>100.0</td>
<td>58.599</td>
<td>34.549</td>
<td>16.969</td>
<td>9.177</td>
<td>4.63</td>
<td>2.202</td>
</tr>
<tr class="odd">
<td>Wichita St.</td>
<td>midwest</td>
<td>7</td>
<td>100.0</td>
<td>56.45</td>
<td>31.005</td>
<td>17.065</td>
<td>8.454</td>
<td>4.378</td>
<td>2.104</td>
</tr>
<tr class="even">
<td>Louisville</td>
<td>east</td>
<td>4</td>
<td>100.0</td>
<td>56.525</td>
<td>30.188</td>
<td>15.331</td>
<td>6.889</td>
<td>3.158</td>
<td>1.413</td>
</tr>
<tr class="odd">
<td>Texas</td>
<td>midwest</td>
<td>11</td>
<td>100.0</td>
<td>52.783</td>
<td>28.184</td>
<td>14.644</td>
<td>6.604</td>
<td>3.115</td>
<td>1.372</td>
</tr>
<tr class="even">
<td>SMU</td>
<td>south</td>
<td>6</td>
<td>100.0</td>
<td>54.37</td>
<td>29.068</td>
<td>14.489</td>
<td>6.789</td>
<td>3.097</td>
<td>1.361</td>
</tr>
<tr class="odd">
<td>Georgetown</td>
<td>south</td>
<td>4</td>
<td>100.0</td>
<td>58.912</td>
<td>28.238</td>
<td>14.08</td>
<td>6.915</td>
<td>3.015</td>
<td>1.311</td>
</tr>
<tr class="even">
<td>Michigan St.</td>
<td>east</td>
<td>7</td>
<td>100.0</td>
<td>55.477</td>
<td>25.467</td>
<td>12.998</td>
<td>6.372</td>
<td>2.951</td>
<td>1.292</td>
</tr>
<tr class="odd">
<td>Ohio St.</td>
<td>west</td>
<td>10</td>
<td>100.0</td>
<td>50.1</td>
<td>23.617</td>
<td>12.158</td>
<td>5.813</td>
<td>2.825</td>
<td>1.18</td>
</tr>
<tr class="even">
<td>West Virginia</td>
<td>midwest</td>
<td>5</td>
<td>100.0</td>
<td>52.507</td>
<td>28.241</td>
<td>12.365</td>
<td>5.829</td>
<td>2.809</td>
<td>1.09</td>
</tr>
<tr class="odd">
<td>Butler</td>
<td>midwest</td>
<td>6</td>
<td>100.0</td>
<td>47.217</td>
<td>24.427</td>
<td>12.449</td>
<td>5.551</td>
<td>2.47</td>
<td>1.088</td>
</tr>
<tr class="even">
<td>Iowa</td>
<td>south</td>
<td>7</td>
<td>100.0</td>
<td>51.023</td>
<td>24.916</td>
<td>12.842</td>
<td>6.02</td>
<td>2.641</td>
<td>1.084</td>
</tr>
<tr class="odd">
<td>Arkansas</td>
<td>west</td>
<td>5</td>
<td>100.0</td>
<td>58.71</td>
<td>28.683</td>
<td>13.046</td>
<td>5.712</td>
<td>2.619</td>
<td>1.074</td>
</tr>
<tr class="even">
<td>San Diego St.</td>
<td>south</td>
<td>8</td>
<td>100.0</td>
<td>52.821</td>
<td>25.262</td>
<td>12.281</td>
<td>5.721</td>
<td>2.585</td>
<td>1.026</td>
</tr>
<tr class="odd">
<td>Xavier</td>
<td>west</td>
<td>6</td>
<td>100.0</td>
<td>52.833</td>
<td>26.252</td>
<td>11.254</td>
<td>5.424</td>
<td>2.318</td>
<td>0.966</td>
</tr>
<tr class="even">
<td>VCU</td>
<td>west</td>
<td>7</td>
<td>100.0</td>
<td>49.9</td>
<td>22.655</td>
<td>11.034</td>
<td>5.322</td>
<td>2.272</td>
<td>0.915</td>
</tr>
<tr class="odd">
<td>Davidson</td>
<td>south</td>
<td>10</td>
<td>100.0</td>
<td>48.977</td>
<td>23.746</td>
<td>11.654</td>
<td>5.393</td>
<td>2.259</td>
<td>0.887</td>
</tr>
<tr class="even">
<td>Maryland</td>
<td>midwest</td>
<td>4</td>
<td>100.0</td>
<td>54.293</td>
<td>27.841</td>
<td>10.992</td>
<td>4.69</td>
<td>2.124</td>
<td>0.852</td>
</tr>
<tr class="odd">
<td>Cincinnati</td>
<td>midwest</td>
<td>8</td>
<td>100.0</td>
<td>49.481</td>
<td>21.064</td>
<td>10.878</td>
<td>4.977</td>
<td>2.137</td>
<td>0.809</td>
</tr>
<tr class="even">
<td>Providence</td>
<td>east</td>
<td>6</td>
<td>100.0</td>
<td>50.52</td>
<td>23.839</td>
<td>10.379</td>
<td>4.86</td>
<td>1.981</td>
<td>0.778</td>
</tr>
<tr class="odd">
<td>North Carolina St.</td>
<td>east</td>
<td>8</td>
<td>100.0</td>
<td>52.32</td>
<td>22.887</td>
<td>11.35</td>
<td>4.862</td>
<td>1.818</td>
<td>0.717</td>
</tr>
<tr class="even">
<td>Oregon</td>
<td>west</td>
<td>8</td>
<td>100.0</td>
<td>50.892</td>
<td>22.58</td>
<td>10.956</td>
<td>4.322</td>
<td>1.844</td>
<td>0.7</td>
</tr>
<tr class="odd">
<td>St. John's</td>
<td>south</td>
<td>9</td>
<td>100.0</td>
<td>47.179</td>
<td>22.962</td>
<td>10.652</td>
<td>4.691</td>
<td>1.904</td>
<td>0.687</td>
</tr>
<tr class="even">
<td>Stephen F. Austin</td>
<td>south</td>
<td>12</td>
<td>100.0</td>
<td>43.812</td>
<td>22.666</td>
<td>9.837</td>
<td>4.551</td>
<td>1.859</td>
<td>0.674</td>
</tr>
<tr class="odd">
<td>Oklahoma St.</td>
<td>west</td>
<td>9</td>
<td>100.0</td>
<td>49.108</td>
<td>21.697</td>
<td>10.965</td>
<td>4.484</td>
<td>1.736</td>
<td>0.666</td>
</tr>
<tr class="even">
<td>Georgia</td>
<td>east</td>
<td>10</td>
<td>100.0</td>
<td>44.523</td>
<td>21.647</td>
<td>10.237</td>
<td>4.523</td>
<td>1.723</td>
<td>0.65</td>
</tr>
<tr class="odd">
<td>Dayton</td>
<td>east</td>
<td>11</td>
<td>100.0</td>
<td>49.48</td>
<td>22.922</td>
<td>9.937</td>
<td>4.078</td>
<td>1.609</td>
<td>0.594</td>
</tr>
<tr class="even">
<td>LSU</td>
<td>east</td>
<td>9</td>
<td>100.0</td>
<td>47.68</td>
<td>20.72</td>
<td>9.64</td>
<td>3.961</td>
<td>1.595</td>
<td>0.584</td>
</tr>
<tr class="odd">
<td>UCLA</td>
<td>south</td>
<td>11</td>
<td>100.0</td>
<td>45.63</td>
<td>22.264</td>
<td>9.285</td>
<td>3.921</td>
<td>1.548</td>
<td>0.559</td>
</tr>
<tr class="even">
<td>Mississippi</td>
<td>west</td>
<td>11</td>
<td>100.0</td>
<td>47.167</td>
<td>20.522</td>
<td>8.975</td>
<td>3.684</td>
<td>1.45</td>
<td>0.53</td>
</tr>
<tr class="odd">
<td>Buffalo</td>
<td>midwest</td>
<td>12</td>
<td>100.0</td>
<td>47.493</td>
<td>23.217</td>
<td>8.816</td>
<td>3.647</td>
<td>1.519</td>
<td>0.525</td>
</tr>
<tr class="even">
<td>Purdue</td>
<td>midwest</td>
<td>9</td>
<td>100.0</td>
<td>50.519</td>
<td>19.548</td>
<td>9.389</td>
<td>3.926</td>
<td>1.513</td>
<td>0.503</td>
</tr>
<tr class="odd">
<td>Indiana</td>
<td>midwest</td>
<td>10</td>
<td>100.0</td>
<td>43.55</td>
<td>19.487</td>
<td>8.32</td>
<td>3.427</td>
<td>1.3</td>
<td>0.446</td>
</tr>
<tr class="even">
<td>Valparaiso</td>
<td>midwest</td>
<td>13</td>
<td>100.0</td>
<td>45.707</td>
<td>20.701</td>
<td>8.106</td>
<td>3.225</td>
<td>1.236</td>
<td>0.43</td>
</tr>
<tr class="odd">
<td>Georgia St.</td>
<td>west</td>
<td>14</td>
<td>100.0</td>
<td>41.401</td>
<td>18.677</td>
<td>6.87</td>
<td>2.788</td>
<td>0.94</td>
<td>0.321</td>
</tr>
<tr class="even">
<td>Harvard</td>
<td>west</td>
<td>13</td>
<td>100.0</td>
<td>38.852</td>
<td>17.912</td>
<td>7.032</td>
<td>2.36</td>
<td>0.872</td>
<td>0.269</td>
</tr>
<tr class="odd">
<td>UC Irvine</td>
<td>east</td>
<td>13</td>
<td>100.0</td>
<td>43.475</td>
<td>18.635</td>
<td>7.212</td>
<td>2.373</td>
<td>0.699</td>
<td>0.232</td>
</tr>
<tr class="even">
<td>Wofford</td>
<td>west</td>
<td>12</td>
<td>100.0</td>
<td>41.29</td>
<td>16.553</td>
<td>5.962</td>
<td>2.169</td>
<td>0.686</td>
<td>0.214</td>
</tr>
<tr class="odd">
<td>Wyoming</td>
<td>east</td>
<td>12</td>
<td>100.0</td>
<td>41.072</td>
<td>17.117</td>
<td>6.21</td>
<td>2.154</td>
<td>0.697</td>
<td>0.194</td>
</tr>
<tr class="even">
<td>New Mexico St.</td>
<td>midwest</td>
<td>15</td>
<td>100.0</td>
<td>40.268</td>
<td>15.955</td>
<td>5.428</td>
<td>1.908</td>
<td>0.604</td>
<td>0.167</td>
</tr>
<tr class="odd">
<td>UAB</td>
<td>south</td>
<td>14</td>
<td>100.0</td>
<td>40.419</td>
<td>15.263</td>
<td>4.757</td>
<td>1.649</td>
<td>0.545</td>
<td>0.153</td>
</tr>
<tr class="even">
<td>Northeastern</td>
<td>midwest</td>
<td>14</td>
<td>100.0</td>
<td>39.308</td>
<td>13.885</td>
<td>4.672</td>
<td>1.41</td>
<td>0.479</td>
<td>0.145</td>
</tr>
<tr class="odd">
<td>Belmont</td>
<td>east</td>
<td>15</td>
<td>100.0</td>
<td>37.811</td>
<td>13.364</td>
<td>4.884</td>
<td>1.732</td>
<td>0.534</td>
<td>0.144</td>
</tr>
<tr class="even">
<td>Albany</td>
<td>east</td>
<td>14</td>
<td>100.0</td>
<td>37.743</td>
<td>15.234</td>
<td>5.053</td>
<td>1.602</td>
<td>0.465</td>
<td>0.14</td>
</tr>
<tr class="odd">
<td>Eastern Washington</td>
<td>south</td>
<td>13</td>
<td>100.0</td>
<td>41.088</td>
<td>14.801</td>
<td>5.269</td>
<td>1.861</td>
<td>0.544</td>
<td>0.139</td>
</tr>
<tr class="even">
<td>Coastal Carolina</td>
<td>west</td>
<td>16</td>
<td>100.0</td>
<td>36.632</td>
<td>13.577</td>
<td>4.822</td>
<td>1.707</td>
<td>0.492</td>
<td>0.126</td>
</tr>
<tr class="odd">
<td>North Dakota St.</td>
<td>south</td>
<td>15</td>
<td>100.0</td>
<td>38.328</td>
<td>13.033</td>
<td>4.672</td>
<td>1.602</td>
<td>0.478</td>
<td>0.121</td>
</tr>
<tr class="even">
<td>Lafayette</td>
<td>east</td>
<td>16</td>
<td>100.0</td>
<td>35.686</td>
<td>12.579</td>
<td>4.13</td>
<td>1.265</td>
<td>0.31</td>
<td>0.078</td>
</tr>
<tr class="odd">
<td>Robert Morris</td>
<td>south</td>
<td>16</td>
<td>100.0</td>
<td>35.593</td>
<td>11.513</td>
<td>3.662</td>
<td>1.135</td>
<td>0.33</td>
<td>0.073</td>
</tr>
<tr class="even">
<td>Texas Southern</td>
<td>west</td>
<td>15</td>
<td>100.0</td>
<td>35.886</td>
<td>11.1</td>
<td>3.492</td>
<td>0.96</td>
<td>0.284</td>
<td>0.066</td>
</tr>
<tr class="odd">
<td>Hampton</td>
<td>midwest</td>
<td>16</td>
<td>100.0</td>
<td>32.152</td>
<td>10.199</td>
<td>3.01</td>
<td>0.799</td>
<td>0.234</td>
<td>0.056</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="cell-30" class="cell" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb23-1">MMMC.showstats(results[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'all'</span>],description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'full run'</span>,newfig<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-17-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>Not bad! (Also, note the shape of the energy distribution, and the fact taht the “Unique brackets” group is still basically linear!)</p>
</section>
</section>
<section id="who-wins" class="level2">
<h2 class="anchored" data-anchor-id="who-wins">Who wins?</h2>
<p>But let’s be honest for a minute. We all know Kansas is going to win. What do the brackets where that happened look like?</p>
<div id="cell-32" class="cell" data-execution_count="18">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb24" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb24-1">goodbrackets <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [i <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> results[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'all'</span>].brackets <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> i.bracket[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>][<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kansas'</span>]</span></code></pre></div></div>
</div>
<div id="cell-33" class="cell" data-execution_count="19">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb25" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb25-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> MarchMadnessMonteCarlo.Brackets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Stats</span>
<span id="cb25-2">lb, mcb, mcb_count, unique_brackets, lowest_sightings <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Stats.gather_uniquestats(goodbrackets)</span>
<span id="cb25-3">sr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.SimulationResults(goodbrackets,unique_brackets,lb,lowest_sightings,mcb,mcb_count)</span>
<span id="cb25-4">trueresults <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'all'</span>:sr}</span></code></pre></div></div>
</div>
<div id="cell-34" class="cell" data-execution_count="20">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb26" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb26-1">h <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> HTML(MMMC.maketable(trueresults))</span>
<span id="cb26-2">h</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="20">
<table class="caption-top table table-sm table-striped small">
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">Team</th>
<th data-quarto-table-cell-role="th">Region</th>
<th data-quarto-table-cell-role="th">Rank</th>
<th data-quarto-table-cell-role="th">2nd Round</th>
<th data-quarto-table-cell-role="th">3rd Round</th>
<th data-quarto-table-cell-role="th">Sweet 16</th>
<th data-quarto-table-cell-role="th">Elite 8</th>
<th data-quarto-table-cell-role="th">Final 4</th>
<th data-quarto-table-cell-role="th">Championship</th>
<th data-quarto-table-cell-role="th">Win</th>
</tr>
<tr class="even">
<td>Kansas</td>
<td>midwest</td>
<td>2</td>
<td>100.0</td>
<td>100.0</td>
<td>100.0</td>
<td>100.0</td>
<td>100.0</td>
<td>100.0</td>
<td>100.0</td>
</tr>
<tr class="odd">
<td>Virginia</td>
<td>east</td>
<td>2</td>
<td>100.0</td>
<td>61.743237441</td>
<td>39.7595534564</td>
<td>25.7621296694</td>
<td>17.1318162301</td>
<td>9.01674538429</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Villanova</td>
<td>east</td>
<td>1</td>
<td>100.0</td>
<td>68.05495921</td>
<td>47.8316874195</td>
<td>30.8286818377</td>
<td>17.3894375268</td>
<td>8.71618720481</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Wisconsin</td>
<td>west</td>
<td>1</td>
<td>100.0</td>
<td>62.0008587377</td>
<td>39.5019321597</td>
<td>24.9033920137</td>
<td>14.2121082009</td>
<td>8.2438814942</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Oklahoma</td>
<td>east</td>
<td>3</td>
<td>100.0</td>
<td>63.8042078145</td>
<td>42.7221983684</td>
<td>22.4130528124</td>
<td>13.0957492486</td>
<td>7.7715757836</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Arizona</td>
<td>west</td>
<td>2</td>
<td>100.0</td>
<td>62.9025332761</td>
<td>37.5697724345</td>
<td>24.4310863031</td>
<td>14.6414770288</td>
<td>7.72863890082</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Northern Iowa</td>
<td>east</td>
<td>5</td>
<td>100.0</td>
<td>59.5534564191</td>
<td>37.1404036067</td>
<td>18.3769858308</td>
<td>10.5195362817</td>
<td>5.45298411335</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Baylor</td>
<td>west</td>
<td>3</td>
<td>100.0</td>
<td>55.3456419064</td>
<td>30.9145556033</td>
<td>15.5431515672</td>
<td>9.05968226707</td>
<td>4.89480463718</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>North Carolina</td>
<td>west</td>
<td>4</td>
<td>100.0</td>
<td>58.8664662945</td>
<td>35.4229282954</td>
<td>19.321597252</td>
<td>9.61786174324</td>
<td>4.8518677544</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Michigan St.</td>
<td>east</td>
<td>7</td>
<td>100.0</td>
<td>57.4924860455</td>
<td>26.4920566767</td>
<td>12.7951910691</td>
<td>6.26878488622</td>
<td>3.47788750537</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Louisville</td>
<td>east</td>
<td>4</td>
<td>100.0</td>
<td>58.3082868184</td>
<td>29.2400171748</td>
<td>14.1262344354</td>
<td>6.82696436239</td>
<td>3.30613997424</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Xavier</td>
<td>west</td>
<td>6</td>
<td>100.0</td>
<td>50.1502790897</td>
<td>25.1610133104</td>
<td>11.9793902963</td>
<td>7.29927007299</td>
<td>3.17732932589</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Oregon</td>
<td>west</td>
<td>8</td>
<td>100.0</td>
<td>52.2112494633</td>
<td>22.4559896951</td>
<td>12.2799484757</td>
<td>5.28123658222</td>
<td>2.9197080292</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Ohio St.</td>
<td>west</td>
<td>10</td>
<td>100.0</td>
<td>50.493774152</td>
<td>26.8355517389</td>
<td>13.6539287248</td>
<td>5.53885787892</td>
<td>2.79089738085</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Arkansas</td>
<td>west</td>
<td>5</td>
<td>100.0</td>
<td>60.3263203091</td>
<td>28.9823958781</td>
<td>11.8935165307</td>
<td>5.88235294118</td>
<td>2.70502361529</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>VCU</td>
<td>west</td>
<td>7</td>
<td>100.0</td>
<td>49.506225848</td>
<td>23.5723486475</td>
<td>12.1082009446</td>
<td>5.83941605839</td>
<td>2.53327608416</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Providence</td>
<td>east</td>
<td>6</td>
<td>100.0</td>
<td>51.1807642765</td>
<td>21.4255045084</td>
<td>9.44611421211</td>
<td>4.46543580936</td>
<td>2.44740231859</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>North Carolina St.</td>
<td>east</td>
<td>8</td>
<td>100.0</td>
<td>55.3885787892</td>
<td>24.6887075998</td>
<td>13.009875483</td>
<td>4.8518677544</td>
<td>2.14684413912</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Mississippi</td>
<td>west</td>
<td>11</td>
<td>100.0</td>
<td>49.8497209103</td>
<td>24.6887075998</td>
<td>10.9489051095</td>
<td>4.76599398884</td>
<td>1.9321597252</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Dayton</td>
<td>east</td>
<td>11</td>
<td>100.0</td>
<td>48.8192357235</td>
<td>20.0085873766</td>
<td>9.14555603263</td>
<td>4.03606698154</td>
<td>1.9321597252</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Oklahoma St.</td>
<td>west</td>
<td>9</td>
<td>100.0</td>
<td>47.7887505367</td>
<td>22.0695577501</td>
<td>11.5500214684</td>
<td>4.20781451267</td>
<td>1.71747531129</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Georgia St.</td>
<td>west</td>
<td>14</td>
<td>100.0</td>
<td>44.6543580936</td>
<td>19.2357234865</td>
<td>7.64276513525</td>
<td>3.82138256763</td>
<td>1.71747531129</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Georgia</td>
<td>east</td>
<td>10</td>
<td>100.0</td>
<td>42.5075139545</td>
<td>20.6097037355</td>
<td>9.40317732933</td>
<td>3.60669815371</td>
<td>1.63160154573</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Harvard</td>
<td>west</td>
<td>13</td>
<td>100.0</td>
<td>41.1335337055</td>
<td>20.0515242593</td>
<td>8.41562902533</td>
<td>3.34907685702</td>
<td>1.58866466295</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Wofford</td>
<td>west</td>
<td>12</td>
<td>100.0</td>
<td>39.6736796909</td>
<td>15.5431515672</td>
<td>5.88235294118</td>
<td>2.9197080292</td>
<td>1.37398024903</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>LSU</td>
<td>east</td>
<td>9</td>
<td>100.0</td>
<td>44.6114212108</td>
<td>18.3769858308</td>
<td>8.75912408759</td>
<td>3.69257191928</td>
<td>1.33104336625</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Belmont</td>
<td>east</td>
<td>15</td>
<td>100.0</td>
<td>38.256762559</td>
<td>13.1386861314</td>
<td>6.65521683126</td>
<td>2.10390725633</td>
<td>1.07342206956</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Coastal Carolina</td>
<td>west</td>
<td>16</td>
<td>100.0</td>
<td>37.9991412623</td>
<td>15.972520395</td>
<td>5.75354229283</td>
<td>2.36152855303</td>
<td>0.901674538429</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Wyoming</td>
<td>east</td>
<td>12</td>
<td>100.0</td>
<td>40.4465435809</td>
<td>17.1747531129</td>
<td>5.5817947617</td>
<td>1.71747531129</td>
<td>0.686990124517</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>UC Irvine</td>
<td>east</td>
<td>13</td>
<td>100.0</td>
<td>41.6917131816</td>
<td>16.4448261056</td>
<td>5.66766852726</td>
<td>1.63160154573</td>
<td>0.515242593388</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Texas Southern</td>
<td>west</td>
<td>15</td>
<td>100.0</td>
<td>37.0974667239</td>
<td>12.022327179</td>
<td>3.69257191928</td>
<td>1.2022327179</td>
<td>0.515242593388</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Lafayette</td>
<td>east</td>
<td>16</td>
<td>100.0</td>
<td>31.94504079</td>
<td>9.10261914985</td>
<td>3.6496350365</td>
<td>1.15929583512</td>
<td>0.472305710605</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Albany</td>
<td>east</td>
<td>14</td>
<td>100.0</td>
<td>36.1957921855</td>
<td>15.8437097467</td>
<td>4.3795620438</td>
<td>1.50279089738</td>
<td>0.429368827823</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Duke</td>
<td>south</td>
<td>1</td>
<td>100.0</td>
<td>61.8291112065</td>
<td>40.1459854015</td>
<td>22.1124946329</td>
<td>13.5680549592</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Gonzaga</td>
<td>south</td>
<td>2</td>
<td>100.0</td>
<td>55.5173894375</td>
<td>35.0364963504</td>
<td>21.4684413912</td>
<td>10.0472305711</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Utah</td>
<td>south</td>
<td>5</td>
<td>100.0</td>
<td>54.8733361958</td>
<td>30.184628596</td>
<td>15.8866466295</td>
<td>9.7037355088</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Iowa St.</td>
<td>south</td>
<td>3</td>
<td>100.0</td>
<td>59.167024474</td>
<td>32.546157149</td>
<td>17.9905538858</td>
<td>9.36024044654</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Georgetown</td>
<td>south</td>
<td>4</td>
<td>100.0</td>
<td>58.780592529</td>
<td>30.184628596</td>
<td>16.1013310434</td>
<td>8.54443967368</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>St. John's</td>
<td>south</td>
<td>9</td>
<td>100.0</td>
<td>49.0339201374</td>
<td>23.7011592958</td>
<td>13.7827393731</td>
<td>6.86990124517</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Stephen F. Austin</td>
<td>south</td>
<td>12</td>
<td>100.0</td>
<td>45.1266638042</td>
<td>24.9033920137</td>
<td>10.261914985</td>
<td>6.39759553456</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>SMU</td>
<td>south</td>
<td>6</td>
<td>100.0</td>
<td>54.6157148991</td>
<td>27.6513525118</td>
<td>13.8686131387</td>
<td>6.35465865178</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Davidson</td>
<td>south</td>
<td>10</td>
<td>100.0</td>
<td>48.6045513096</td>
<td>24.3022756548</td>
<td>12.022327179</td>
<td>5.5817947617</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>San Diego St.</td>
<td>south</td>
<td>8</td>
<td>100.0</td>
<td>50.9660798626</td>
<td>22.6706741091</td>
<td>12.2799484757</td>
<td>5.49592099614</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Iowa</td>
<td>south</td>
<td>7</td>
<td>100.0</td>
<td>51.3954486904</td>
<td>24.4740231859</td>
<td>12.5375697724</td>
<td>5.45298411335</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>UCLA</td>
<td>south</td>
<td>11</td>
<td>100.0</td>
<td>45.3842851009</td>
<td>23.1000429369</td>
<td>11.1635895234</td>
<td>5.06655216831</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Eastern Washington</td>
<td>south</td>
<td>13</td>
<td>100.0</td>
<td>41.219407471</td>
<td>14.7273507943</td>
<td>5.88235294118</td>
<td>2.49033920137</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>North Dakota St.</td>
<td>south</td>
<td>15</td>
<td>100.0</td>
<td>44.4826105625</td>
<td>16.1872048089</td>
<td>6.18291112065</td>
<td>2.06097037355</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>UAB</td>
<td>south</td>
<td>14</td>
<td>100.0</td>
<td>40.832975526</td>
<td>16.7024474023</td>
<td>4.76599398884</td>
<td>1.84628595964</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Robert Morris</td>
<td>south</td>
<td>16</td>
<td>100.0</td>
<td>38.1708887935</td>
<td>13.4821811936</td>
<td>3.69257191928</td>
<td>1.15929583512</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Kentucky</td>
<td>midwest</td>
<td>1</td>
<td>100.0</td>
<td>61.743237441</td>
<td>39.6307428081</td>
<td>21.8119364534</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Maryland</td>
<td>midwest</td>
<td>4</td>
<td>100.0</td>
<td>59.4246457707</td>
<td>31.2151137827</td>
<td>16.3160154573</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Purdue</td>
<td>midwest</td>
<td>9</td>
<td>100.0</td>
<td>55.7320738514</td>
<td>27.4796049807</td>
<td>13.3963074281</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Buffalo</td>
<td>midwest</td>
<td>12</td>
<td>100.0</td>
<td>47.7458136539</td>
<td>24.4310863031</td>
<td>12.2799484757</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>West Virginia</td>
<td>midwest</td>
<td>5</td>
<td>100.0</td>
<td>52.2541863461</td>
<td>23.7440961786</td>
<td>11.8076427651</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Valparaiso</td>
<td>midwest</td>
<td>13</td>
<td>100.0</td>
<td>40.5753542293</td>
<td>20.6097037355</td>
<td>9.9613568055</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Cincinnati</td>
<td>midwest</td>
<td>8</td>
<td>100.0</td>
<td>44.2679261486</td>
<td>20.5238299699</td>
<td>9.9613568055</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Hampton</td>
<td>midwest</td>
<td>16</td>
<td>100.0</td>
<td>38.256762559</td>
<td>12.3658222413</td>
<td>4.46543580936</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Texas</td>
<td>midwest</td>
<td>11</td>
<td>100.0</td>
<td>51.5671962216</td>
<td>30.9145556033</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Notre Dame</td>
<td>midwest</td>
<td>3</td>
<td>100.0</td>
<td>58.4800343495</td>
<td>30.2275654787</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Butler</td>
<td>midwest</td>
<td>6</td>
<td>100.0</td>
<td>48.4328037784</td>
<td>23.0141691713</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Northeastern</td>
<td>midwest</td>
<td>14</td>
<td>100.0</td>
<td>41.5199656505</td>
<td>15.8437097467</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>Wichita St.</td>
<td>midwest</td>
<td>7</td>
<td>100.0</td>
<td>55.2168312581</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="even">
<td>Indiana</td>
<td>midwest</td>
<td>10</td>
<td>100.0</td>
<td>44.7831687419</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
<tr class="odd">
<td>New Mexico St.</td>
<td>midwest</td>
<td>15</td>
<td>100.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
<td>0.0</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="cell-35" class="cell" data-execution_count="21">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb27" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb27-1">sr.most_common_bracket</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="21">
<pre><code>Kentucky (1)                                                                   
Hampton (16)              Ham (16)                                             
Cincinnati (8)                                                                 
Purdue (9)                Pur (9)  Pur (9)                                     
West Virginia (5)                                                              
Buffalo (12)              Buf (12)                                             
Maryland (4)                                                                   
Valparaiso (13)           Val (13) Buf (12) Pur (9)                            
Butler (6)                                                                     
Texas (11)                Tex (11)                                             
Notre Dame (3)                                                                 
Northeastern (14)         Not (3)  Not (3)                                     
Wichita St. (7)                                                                
Indiana (10)              Ind (10)                                             
Kansas (2)                                                                     
New Mexico St. (15)       Kan (2)  Kan (2)  Kan (2)  Kan (2)                   
Duke (1)                                                                       
Robert Morris (16)        Duk (1)                                              
San Diego St. (8)                                                              
St. John's (9)            St. (9)  Duk (1)                                     
Utah (5)                                                                       
Stephen F. Austin (12)    Ste (12)                                             
Georgetown (4)                                                                 
Eastern Washington (13)   Geo (4)  Ste (12) Ste (12)                           
SMU (6)                                                                        
UCLA (11)                 SMU (6)                                              
Iowa St. (3)                                                                   
UAB (14)                  Iow (3)  SMU (6)                                     
Iowa (7)                                                                       
Davidson (10)             Iow (7)                                              
Gonzaga (2)                                                                    
North Dakota St. (15)     Gon (2)  Gon (2)  Gon (2)  Ste (12) Kan (2)          
Wisconsin (1)             Wis (1)  Okl (9)  Wof (12) Wof (12) Okl (3)  Kan (2) 
Coastal Carolina (16)                                                          
Oregon (8)                Okl (9)                                              
Oklahoma St. (9)                                                               
Arkansas (5)              Wof (12) Wof (12)                                    
Wofford (12)                                                                   
North Carolina (4)        Har (13)                                             
Harvard (13)                                                                   
Xavier (6)                Xav (6)  Bay (3)  Ari (2)                            
Mississippi (11)                                                               
Baylor (3)                Bay (3)                                              
Georgia St. (14)                                                               
VCU (7)                   Ohi (10) Ari (2)                                     
Ohio St. (10)                                                                  
Arizona (2)               Ari (2)                                              
Texas Southern (15)                                                            
Villanova (1)             Laf (16) Nor (8)  Nor (8)  Okl (3)                   
Lafayette (16)                                                                 
North Carolina St. (8)    Nor (8)                                              
LSU (9)                                                                        
Northern Iowa (5)         Wyo (12) Lou (4)                                     
Wyoming (12)                                                                   
Louisville (4)            Lou (4)                                              
UC Irvine (13)                                                                 
Providence (6)            Pro (6)  Okl (3)  Okl (3)                            
Dayton (11)                                                                    
Oklahoma (3)              Okl (3)                                              
Albany (14)                                                                    
Michigan St. (7)          Mic (7)  Mic (7)                                     
Georgia (10)                                                                   
Virginia (2)              Vir (2)                                              
Belmont (15)                                                                   
Total bracket energy: -35.9796902956</code></pre>
</div>
</div>
<div id="cell-36" class="cell" data-execution_count="22">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb29" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb29-1">sr.most_common_bracket_count</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="22">
<pre><code>4</code></pre>
</div>
</div>
<p>Huh. Well, that’s not exactly my pick for best bracket, but there you have it.</p>
<p>Excersizes for the reader:</p>
<ul>
<li>make a better energy function, using maybe a weighted average of different rankings. I slurped in KenPom and Jeff Sagarin, but you could add your own.</li>
<li>come up with a better “hometown wins” version. E.g. explicitly check for KU, and tweak the rankings.</li>
</ul>
<div id="cell-38" class="cell" data-execution_count="46">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb31" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb31-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> MarchMadnessMonteCarlo <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> RankingsAndStrength <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> RAS</span>
<span id="cb31-2">strength <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> RAS.kenpom[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Pyth'</span>]</span>
<span id="cb31-3">jsstrength <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> RAS.sagarin[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rating'</span>]</span>
<span id="cb31-4"></span>
<span id="cb31-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> weighted_KU_energy_game(winner, loser):</span>
<span id="cb31-6">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> winner <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kansas'</span>:</span>
<span id="cb31-7">        win_pct <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.99</span></span>
<span id="cb31-8">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">elif</span> loser <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kansas'</span>:</span>
<span id="cb31-9">        win_pct <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span></span>
<span id="cb31-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>:</span>
<span id="cb31-11">        A,B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> strength[winner],strength[loser]</span>
<span id="cb31-12">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># see http://207.56.97.150/articles/playoff2002.htm</span></span>
<span id="cb31-13">        kenpom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>B)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>B<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>B)</span>
<span id="cb31-14">        A,B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> jsstrength[winner]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, jsstrength[loser]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span></span>
<span id="cb31-15">        A,B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>(A,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9999</span>),<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>(B,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9999</span>)</span>
<span id="cb31-16">        sagarin <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>B)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>B<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>A<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>B)</span>
<span id="cb31-17">        win_pct <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.70</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>kenpom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.30</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>sagarin</span>
<span id="cb31-18">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>win_pct</span></code></pre></div></div>
</div>
<div id="cell-39" class="cell" data-execution_count="48">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb32" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb32-1">MMMC.set_energy_function(weighted_KU_energy_game)</span></code></pre></div></div>
</div>
<div id="cell-40" class="cell" data-execution_count="55">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb33" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb33-1">results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> MMMC.runbracket1(ntrials<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100000</span>,T<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Lowest energy bracket
Kentucky (1)                                                                   
Hampton (16)              Ken (1)                                              
Cincinnati (8)                                                                 
Purdue (9)                Cin (8)  Ken (1)                                     
West Virginia (5)                                                              
Buffalo (12)              Wes (5)                                              
Maryland (4)                                                                   
Valparaiso (13)           Mar (4)  Wes (5)  Ken (1)                            
Butler (6)                                                                     
Texas (11)                Tex (11)                                             
Notre Dame (3)                                                                 
Northeastern (14)         Not (3)  Not (3)                                     
Wichita St. (7)                                                                
Indiana (10)              Wic (7)                                              
Kansas (2)                                                                     
New Mexico St. (15)       Kan (2)  Kan (2)  Kan (2)  Kan (2)                   
Duke (1)                                                                       
Robert Morris (16)        Duk (1)                                              
San Diego St. (8)                                                              
St. John's (9)            San (8)  Duk (1)                                     
Utah (5)                                                                       
Stephen F. Austin (12)    Uta (5)                                              
Georgetown (4)                                                                 
Eastern Washington (13)   Geo (4)  Uta (5)  Duk (1)                            
SMU (6)                                                                        
UCLA (11)                 SMU (6)                                              
Iowa St. (3)                                                                   
UAB (14)                  Iow (3)  Iow (3)                                     
Iowa (7)                                                                       
Davidson (10)             Iow (7)                                              
Gonzaga (2)                                                                    
North Dakota St. (15)     Gon (2)  Gon (2)  Gon (2)  Duk (1)  Kan (2)          
Wisconsin (1)             Wis (1)  Wis (1)  Wis (1)  Ari (2)  Ari (2)  Kan (2) 
Coastal Carolina (16)                                                          
Oregon (8)                Okl (9)                                              
Oklahoma St. (9)                                                               
Arkansas (5)              Ark (5)  Nor (4)                                     
Wofford (12)                                                                   
North Carolina (4)        Nor (4)                                              
Harvard (13)                                                                   
Xavier (6)                Xav (6)  Bay (3)  Ari (2)                            
Mississippi (11)                                                               
Baylor (3)                Bay (3)                                              
Georgia St. (14)                                                               
VCU (7)                   Ohi (10) Ari (2)                                     
Ohio St. (10)                                                                  
Arizona (2)               Ari (2)                                              
Texas Southern (15)                                                            
Villanova (1)             Vil (1)  Vil (1)  Vil (1)  Vir (2)                   
Lafayette (16)                                                                 
North Carolina St. (8)    Nor (8)                                              
LSU (9)                                                                        
Northern Iowa (5)         Nor (5)  Nor (5)                                     
Wyoming (12)                                                                   
Louisville (4)            Lou (4)                                              
UC Irvine (13)                                                                 
Providence (6)            Pro (6)  Okl (3)  Vir (2)                            
Dayton (11)                                                                    
Oklahoma (3)              Okl (3)                                              
Albany (14)                                                                    
Michigan St. (7)          Mic (7)  Vir (2)                                     
Georgia (10)                                                                   
Virginia (2)              Vir (2)                                              
Belmont (15)                                                                   
Total bracket energy: -45.7476455682

Most common bracket (13)
Kentucky (1)                                                                   
Hampton (16)              Ken (1)                                              
Cincinnati (8)                                                                 
Purdue (9)                Pur (9)  Pur (9)                                     
West Virginia (5)                                                              
Buffalo (12)              Buf (12)                                             
Maryland (4)                                                                   
Valparaiso (13)           Mar (4)  Buf (12) Buf (12)                           
Butler (6)                                                                     
Texas (11)                But (6)                                              
Notre Dame (3)                                                                 
Northeastern (14)         Not (3)  Not (3)                                     
Wichita St. (7)                                                                
Indiana (10)              Wic (7)                                              
Kansas (2)                                                                     
New Mexico St. (15)       Kan (2)  Kan (2)  Kan (2)  Kan (2)                   
Duke (1)                                                                       
Robert Morris (16)        Duk (1)                                              
San Diego St. (8)                                                              
St. John's (9)            San (8)  San (8)                                     
Utah (5)                                                                       
Stephen F. Austin (12)    Ste (12)                                             
Georgetown (4)                                                                 
Eastern Washington (13)   Geo (4)  Ste (12) San (8)                            
SMU (6)                                                                        
UCLA (11)                 SMU (6)                                              
Iowa St. (3)                                                                   
UAB (14)                  UAB (14) UAB (14)                                    
Iowa (7)                                                                       
Davidson (10)             Iow (7)                                              
Gonzaga (2)                                                                    
North Dakota St. (15)     Gon (2)  Gon (2)  Gon (2)  Gon (2)  Kan (2)          
Wisconsin (1)             Coa (16) Okl (9)  Nor (4)  Ari (2)  Ari (2)  Kan (2) 
Coastal Carolina (16)                                                          
Oregon (8)                Okl (9)                                              
Oklahoma St. (9)                                                               
Arkansas (5)              Wof (12) Nor (4)                                     
Wofford (12)                                                                   
North Carolina (4)        Nor (4)                                              
Harvard (13)                                                                   
Xavier (6)                Mis (11) Mis (11) Ari (2)                            
Mississippi (11)                                                               
Baylor (3)                Bay (3)                                              
Georgia St. (14)                                                               
VCU (7)                   VCU (7)  Ari (2)                                     
Ohio St. (10)                                                                  
Arizona (2)               Ari (2)                                              
Texas Southern (15)                                                            
Villanova (1)             Vil (1)  Nor (8)  Nor (8)  Nor (8)                   
Lafayette (16)                                                                 
North Carolina St. (8)    Nor (8)                                              
LSU (9)                                                                        
Northern Iowa (5)         Nor (5)  Lou (4)                                     
Wyoming (12)                                                                   
Louisville (4)            Lou (4)                                              
UC Irvine (13)                                                                 
Providence (6)            Pro (6)  Okl (3)  Mic (7)                            
Dayton (11)                                                                    
Oklahoma (3)              Okl (3)                                              
Albany (14)                                                                    
Michigan St. (7)          Mic (7)  Mic (7)                                     
Georgia (10)                                                                   
Virginia (2)              Bel (15)                                             
Belmont (15)                                                                   
Total bracket energy: -38.9077921757
</code></pre>
</div>
</div>
<div id="cell-41" class="cell" data-execution_count="56">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb35" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb35-1">MMMC.showstats(results[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'all'</span>],description<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'full run'</span>,newfig<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/index_files/figure-html/cell-26-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-42" class="cell" data-execution_count="57">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb36" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb36-1">h <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> HTML(MMMC.maketable(results))</span>
<span id="cb36-2">h</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="57">
<table class="caption-top table table-sm table-striped small">
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">Team</th>
<th data-quarto-table-cell-role="th">Region</th>
<th data-quarto-table-cell-role="th">Rank</th>
<th data-quarto-table-cell-role="th">2nd Round</th>
<th data-quarto-table-cell-role="th">3rd Round</th>
<th data-quarto-table-cell-role="th">Sweet 16</th>
<th data-quarto-table-cell-role="th">Elite 8</th>
<th data-quarto-table-cell-role="th">Final 4</th>
<th data-quarto-table-cell-role="th">Championship</th>
<th data-quarto-table-cell-role="th">Win</th>
</tr>
<tr class="even">
<td>Kansas</td>
<td>midwest</td>
<td>2</td>
<td>100.0</td>
<td>71.415</td>
<td>55.343</td>
<td>44.429</td>
<td>35.557</td>
<td>28.44</td>
<td>22.414</td>
</tr>
<tr class="odd">
<td>Kentucky</td>
<td>midwest</td>
<td>1</td>
<td>100.0</td>
<td>69.107</td>
<td>50.644</td>
<td>37.446</td>
<td>18.891</td>
<td>13.788</td>
<td>9.643</td>
</tr>
<tr class="even">
<td>Arizona</td>
<td>west</td>
<td>2</td>
<td>100.0</td>
<td>65.022</td>
<td>43.251</td>
<td>29.626</td>
<td>19.515</td>
<td>12.801</td>
<td>6.535</td>
</tr>
<tr class="odd">
<td>Wisconsin</td>
<td>west</td>
<td>1</td>
<td>100.0</td>
<td>64.476</td>
<td>43.066</td>
<td>29.09</td>
<td>17.775</td>
<td>11.201</td>
<td>5.467</td>
</tr>
<tr class="even">
<td>Virginia</td>
<td>east</td>
<td>2</td>
<td>100.0</td>
<td>65.076</td>
<td>42.901</td>
<td>28.131</td>
<td>17.706</td>
<td>10.58</td>
<td>5.127</td>
</tr>
<tr class="odd">
<td>Villanova</td>
<td>east</td>
<td>1</td>
<td>100.0</td>
<td>63.795</td>
<td>42.213</td>
<td>27.546</td>
<td>17.299</td>
<td>10.203</td>
<td>4.848</td>
</tr>
<tr class="even">
<td>Duke</td>
<td>south</td>
<td>1</td>
<td>100.0</td>
<td>63.066</td>
<td>40.645</td>
<td>25.96</td>
<td>15.924</td>
<td>6.731</td>
<td>3.64</td>
</tr>
<tr class="odd">
<td>Gonzaga</td>
<td>south</td>
<td>2</td>
<td>100.0</td>
<td>62.557</td>
<td>37.869</td>
<td>24.019</td>
<td>14.332</td>
<td>6.157</td>
<td>3.354</td>
</tr>
<tr class="even">
<td>Utah</td>
<td>south</td>
<td>5</td>
<td>100.0</td>
<td>54.831</td>
<td>33.958</td>
<td>18.603</td>
<td>10.684</td>
<td>4.171</td>
<td>2.105</td>
</tr>
<tr class="odd">
<td>North Carolina</td>
<td>west</td>
<td>4</td>
<td>100.0</td>
<td>55.798</td>
<td>35.168</td>
<td>18.059</td>
<td>9.103</td>
<td>4.648</td>
<td>1.857</td>
</tr>
<tr class="even">
<td>Oklahoma</td>
<td>east</td>
<td>3</td>
<td>100.0</td>
<td>57.558</td>
<td>32.89</td>
<td>16.602</td>
<td>8.699</td>
<td>4.476</td>
<td>1.856</td>
</tr>
<tr class="odd">
<td>Iowa St.</td>
<td>south</td>
<td>3</td>
<td>100.0</td>
<td>58.435</td>
<td>32.387</td>
<td>17.002</td>
<td>9.079</td>
<td>3.519</td>
<td>1.74</td>
</tr>
<tr class="even">
<td>Baylor</td>
<td>west</td>
<td>3</td>
<td>100.0</td>
<td>57.425</td>
<td>33.143</td>
<td>16.356</td>
<td>8.703</td>
<td>4.328</td>
<td>1.714</td>
</tr>
<tr class="odd">
<td>Northern Iowa</td>
<td>east</td>
<td>5</td>
<td>100.0</td>
<td>58.362</td>
<td>33.246</td>
<td>16.966</td>
<td>8.687</td>
<td>4.148</td>
<td>1.653</td>
</tr>
<tr class="even">
<td>Notre Dame</td>
<td>midwest</td>
<td>3</td>
<td>100.0</td>
<td>58.973</td>
<td>33.146</td>
<td>12.23</td>
<td>5.888</td>
<td>3.064</td>
<td>1.459</td>
</tr>
<tr class="odd">
<td>Louisville</td>
<td>east</td>
<td>4</td>
<td>100.0</td>
<td>56.572</td>
<td>30.948</td>
<td>15.201</td>
<td>7.349</td>
<td>3.329</td>
<td>1.289</td>
</tr>
<tr class="even">
<td>Wichita St.</td>
<td>midwest</td>
<td>7</td>
<td>100.0</td>
<td>55.022</td>
<td>19.553</td>
<td>10.731</td>
<td>5.057</td>
<td>2.614</td>
<td>1.235</td>
</tr>
<tr class="odd">
<td>Michigan St.</td>
<td>east</td>
<td>7</td>
<td>100.0</td>
<td>53.365</td>
<td>25.012</td>
<td>13.642</td>
<td>6.637</td>
<td>3.041</td>
<td>1.157</td>
</tr>
<tr class="even">
<td>Ohio St.</td>
<td>west</td>
<td>10</td>
<td>100.0</td>
<td>50.97</td>
<td>23.373</td>
<td>12.8</td>
<td>6.241</td>
<td>2.876</td>
<td>1.053</td>
</tr>
<tr class="odd">
<td>Georgetown</td>
<td>south</td>
<td>4</td>
<td>100.0</td>
<td>56.351</td>
<td>27.242</td>
<td>13.727</td>
<td>6.735</td>
<td>2.386</td>
<td>1.046</td>
</tr>
<tr class="even">
<td>SMU</td>
<td>south</td>
<td>6</td>
<td>100.0</td>
<td>50.545</td>
<td>26.664</td>
<td>12.96</td>
<td>6.318</td>
<td>2.197</td>
<td>0.98</td>
</tr>
<tr class="odd">
<td>Iowa</td>
<td>south</td>
<td>7</td>
<td>100.0</td>
<td>53.959</td>
<td>26.803</td>
<td>13.763</td>
<td>6.446</td>
<td>2.273</td>
<td>0.979</td>
</tr>
<tr class="even">
<td>Xavier</td>
<td>west</td>
<td>6</td>
<td>100.0</td>
<td>54.002</td>
<td>25.958</td>
<td>11.422</td>
<td>5.532</td>
<td>2.541</td>
<td>0.936</td>
</tr>
<tr class="odd">
<td>West Virginia</td>
<td>midwest</td>
<td>5</td>
<td>100.0</td>
<td>55.439</td>
<td>30.487</td>
<td>13.026</td>
<td>4.733</td>
<td>2.187</td>
<td>0.896</td>
</tr>
<tr class="even">
<td>Providence</td>
<td>east</td>
<td>6</td>
<td>100.0</td>
<td>54.017</td>
<td>27.975</td>
<td>12.282</td>
<td>5.736</td>
<td>2.417</td>
<td>0.88</td>
</tr>
<tr class="odd">
<td>Arkansas</td>
<td>west</td>
<td>5</td>
<td>100.0</td>
<td>55.043</td>
<td>25.753</td>
<td>11.997</td>
<td>5.229</td>
<td>2.275</td>
<td>0.845</td>
</tr>
<tr class="even">
<td>Texas</td>
<td>midwest</td>
<td>11</td>
<td>100.0</td>
<td>51.713</td>
<td>25.828</td>
<td>9.107</td>
<td>4.172</td>
<td>1.938</td>
<td>0.84</td>
</tr>
<tr class="odd">
<td>San Diego St.</td>
<td>south</td>
<td>8</td>
<td>100.0</td>
<td>49.116</td>
<td>22.93</td>
<td>11.033</td>
<td>5.181</td>
<td>1.853</td>
<td>0.755</td>
</tr>
<tr class="even">
<td>VCU</td>
<td>west</td>
<td>7</td>
<td>100.0</td>
<td>49.03</td>
<td>21.187</td>
<td>9.927</td>
<td>4.523</td>
<td>1.995</td>
<td>0.744</td>
</tr>
<tr class="odd">
<td>Maryland</td>
<td>midwest</td>
<td>4</td>
<td>100.0</td>
<td>53.53</td>
<td>26.132</td>
<td>10.837</td>
<td>4.056</td>
<td>1.82</td>
<td>0.735</td>
</tr>
<tr class="even">
<td>Butler</td>
<td>midwest</td>
<td>6</td>
<td>100.0</td>
<td>48.287</td>
<td>23.838</td>
<td>8.227</td>
<td>3.593</td>
<td>1.688</td>
<td>0.694</td>
</tr>
<tr class="odd">
<td>Davidson</td>
<td>south</td>
<td>10</td>
<td>100.0</td>
<td>46.041</td>
<td>21.646</td>
<td>10.642</td>
<td>4.871</td>
<td>1.683</td>
<td>0.678</td>
</tr>
<tr class="even">
<td>Oklahoma St.</td>
<td>west</td>
<td>9</td>
<td>100.0</td>
<td>50.857</td>
<td>22.453</td>
<td>11.343</td>
<td>4.682</td>
<td>1.87</td>
<td>0.671</td>
</tr>
<tr class="odd">
<td>North Carolina St.</td>
<td>east</td>
<td>8</td>
<td>100.0</td>
<td>51.914</td>
<td>22.439</td>
<td>11.07</td>
<td>4.813</td>
<td>1.896</td>
<td>0.611</td>
</tr>
<tr class="even">
<td>St. John's</td>
<td>south</td>
<td>9</td>
<td>100.0</td>
<td>50.884</td>
<td>23.054</td>
<td>10.411</td>
<td>4.442</td>
<td>1.496</td>
<td>0.575</td>
</tr>
<tr class="odd">
<td>Stephen F. Austin</td>
<td>south</td>
<td>12</td>
<td>100.0</td>
<td>45.169</td>
<td>22.367</td>
<td>9.957</td>
<td>4.368</td>
<td>1.439</td>
<td>0.568</td>
</tr>
<tr class="even">
<td>Georgia</td>
<td>east</td>
<td>10</td>
<td>100.0</td>
<td>46.635</td>
<td>19.336</td>
<td>9.623</td>
<td>4.499</td>
<td>1.597</td>
<td>0.567</td>
</tr>
<tr class="odd">
<td>Oregon</td>
<td>west</td>
<td>8</td>
<td>100.0</td>
<td>49.143</td>
<td>20.518</td>
<td>9.907</td>
<td>4.144</td>
<td>1.678</td>
<td>0.559</td>
</tr>
<tr class="even">
<td>UCLA</td>
<td>south</td>
<td>11</td>
<td>100.0</td>
<td>49.455</td>
<td>24.063</td>
<td>10.453</td>
<td>4.388</td>
<td>1.575</td>
<td>0.554</td>
</tr>
<tr class="odd">
<td>LSU</td>
<td>east</td>
<td>9</td>
<td>100.0</td>
<td>48.086</td>
<td>20.5</td>
<td>9.842</td>
<td>4.191</td>
<td>1.708</td>
<td>0.551</td>
</tr>
<tr class="even">
<td>Mississippi</td>
<td>west</td>
<td>11</td>
<td>100.0</td>
<td>45.998</td>
<td>21.001</td>
<td>8.299</td>
<td>3.623</td>
<td>1.44</td>
<td>0.541</td>
</tr>
<tr class="odd">
<td>Cincinnati</td>
<td>midwest</td>
<td>8</td>
<td>100.0</td>
<td>52.308</td>
<td>20.082</td>
<td>10.116</td>
<td>3.18</td>
<td>1.382</td>
<td>0.541</td>
</tr>
<tr class="even">
<td>Dayton</td>
<td>east</td>
<td>11</td>
<td>100.0</td>
<td>45.983</td>
<td>23.105</td>
<td>9.306</td>
<td>3.898</td>
<td>1.639</td>
<td>0.495</td>
</tr>
<tr class="odd">
<td>Purdue</td>
<td>midwest</td>
<td>9</td>
<td>100.0</td>
<td>47.692</td>
<td>18.407</td>
<td>8.311</td>
<td>2.991</td>
<td>1.216</td>
<td>0.453</td>
</tr>
<tr class="even">
<td>Buffalo</td>
<td>midwest</td>
<td>12</td>
<td>100.0</td>
<td>44.561</td>
<td>22.616</td>
<td>8.681</td>
<td>2.764</td>
<td>1.099</td>
<td>0.392</td>
</tr>
<tr class="odd">
<td>Indiana</td>
<td>midwest</td>
<td>10</td>
<td>100.0</td>
<td>44.978</td>
<td>13.846</td>
<td>5.745</td>
<td>2.269</td>
<td>0.928</td>
<td>0.344</td>
</tr>
<tr class="even">
<td>Harvard</td>
<td>west</td>
<td>13</td>
<td>100.0</td>
<td>44.202</td>
<td>21.121</td>
<td>7.51</td>
<td>2.602</td>
<td>0.998</td>
<td>0.339</td>
</tr>
<tr class="odd">
<td>Georgia St.</td>
<td>west</td>
<td>14</td>
<td>100.0</td>
<td>42.575</td>
<td>19.898</td>
<td>7.477</td>
<td>2.894</td>
<td>1.147</td>
<td>0.321</td>
</tr>
<tr class="even">
<td>Valparaiso</td>
<td>midwest</td>
<td>13</td>
<td>100.0</td>
<td>46.47</td>
<td>20.765</td>
<td>7.922</td>
<td>2.461</td>
<td>0.91</td>
<td>0.286</td>
</tr>
<tr class="odd">
<td>Wyoming</td>
<td>east</td>
<td>12</td>
<td>100.0</td>
<td>41.638</td>
<td>18.284</td>
<td>7.123</td>
<td>2.652</td>
<td>0.927</td>
<td>0.268</td>
</tr>
<tr class="even">
<td>UC Irvine</td>
<td>east</td>
<td>13</td>
<td>100.0</td>
<td>43.428</td>
<td>17.522</td>
<td>6.975</td>
<td>2.726</td>
<td>0.965</td>
<td>0.263</td>
</tr>
<tr class="odd">
<td>Wofford</td>
<td>west</td>
<td>12</td>
<td>100.0</td>
<td>44.957</td>
<td>17.958</td>
<td>6.914</td>
<td>2.297</td>
<td>0.81</td>
<td>0.241</td>
</tr>
<tr class="even">
<td>UAB</td>
<td>south</td>
<td>14</td>
<td>100.0</td>
<td>41.565</td>
<td>16.886</td>
<td>6.077</td>
<td>2.033</td>
<td>0.673</td>
<td>0.222</td>
</tr>
<tr class="odd">
<td>Northeastern</td>
<td>midwest</td>
<td>14</td>
<td>100.0</td>
<td>41.027</td>
<td>17.188</td>
<td>5.238</td>
<td>1.867</td>
<td>0.626</td>
<td>0.182</td>
</tr>
<tr class="even">
<td>Eastern Washington</td>
<td>south</td>
<td>13</td>
<td>100.0</td>
<td>43.649</td>
<td>16.433</td>
<td>5.605</td>
<td>1.968</td>
<td>0.527</td>
<td>0.168</td>
</tr>
<tr class="odd">
<td>New Mexico St.</td>
<td>midwest</td>
<td>15</td>
<td>100.0</td>
<td>28.585</td>
<td>11.258</td>
<td>4.293</td>
<td>1.566</td>
<td>0.487</td>
<td>0.165</td>
</tr>
<tr class="even">
<td>Albany</td>
<td>east</td>
<td>14</td>
<td>100.0</td>
<td>42.442</td>
<td>16.03</td>
<td>5.183</td>
<td>1.709</td>
<td>0.542</td>
<td>0.151</td>
</tr>
<tr class="odd">
<td>North Dakota St.</td>
<td>south</td>
<td>15</td>
<td>100.0</td>
<td>37.443</td>
<td>13.682</td>
<td>5.084</td>
<td>1.791</td>
<td>0.499</td>
<td>0.145</td>
</tr>
<tr class="even">
<td>Lafayette</td>
<td>east</td>
<td>16</td>
<td>100.0</td>
<td>36.205</td>
<td>14.848</td>
<td>5.277</td>
<td>1.578</td>
<td>0.462</td>
<td>0.142</td>
</tr>
<tr class="odd">
<td>Belmont</td>
<td>east</td>
<td>15</td>
<td>100.0</td>
<td>34.924</td>
<td>12.751</td>
<td>5.231</td>
<td>1.821</td>
<td>0.531</td>
<td>0.139</td>
</tr>
<tr class="even">
<td>Coastal Carolina</td>
<td>west</td>
<td>16</td>
<td>100.0</td>
<td>35.524</td>
<td>13.963</td>
<td>5.18</td>
<td>1.746</td>
<td>0.538</td>
<td>0.138</td>
</tr>
<tr class="odd">
<td>Robert Morris</td>
<td>south</td>
<td>16</td>
<td>100.0</td>
<td>36.934</td>
<td>13.371</td>
<td>4.704</td>
<td>1.44</td>
<td>0.372</td>
<td>0.1</td>
</tr>
<tr class="even">
<td>Texas Southern</td>
<td>west</td>
<td>15</td>
<td>100.0</td>
<td>34.978</td>
<td>12.189</td>
<td>4.093</td>
<td>1.391</td>
<td>0.393</td>
<td>0.085</td>
</tr>
<tr class="odd">
<td>Hampton</td>
<td>midwest</td>
<td>16</td>
<td>100.0</td>
<td>30.893</td>
<td>10.867</td>
<td>3.661</td>
<td>0.955</td>
<td>0.262</td>
<td>0.069</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Looks good! I’m in!</p>


</section>
</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/more-march-madness-monte-carlo-style/</guid>
  <pubDate>Thu, 19 Mar 2015 19:43:00 GMT</pubDate>
</item>
<item>
  <title>Speeding up calculations with lookup tables and Lagrangian interpolation</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/speeding-up-calculations-with-lookup-tables-and-lagrangian-interpolation/</link>
  <description><![CDATA[ 




<p>This whole post can be downloaded as a Jupyter notebook <a href="https://github.com/mglerner/mglerner.github.io/blob/master/posts/speeding-up-calculations-with-lookup-tables-and-lagrangian-interpolation.ipynb">here</a></p>
<section id="lookup-tables-with-lagrangian-interpolation" class="level1">
<h1>Lookup Tables with Lagrangian Interpolation</h1>
<p>One of my students wanted to speed up the calculation of <code>exp(x)</code> in a simulation. There are a few ways to do this, but a lookup table is often a huge win in situations like this. The basic idea is that, for an <em>expensive</em> function like <code>exp(x)</code>, you pre-calculate <code>exp(x)</code> for a bunch of values that cover the range in which you’re interested. You then look things up in the table at runtime. If the exact value you want isn’t in the table, you use a <em>cheap</em> interpolation function. By tweaking the density of your pre-calculated values and the sophistication of your interpolation function, you can get results that are quite close to exact calculations for a fraction of the run-time cost.</p>
<p>Sadly for me, I didn’t know a bunch about which interpolation functions to use, so I asked Andy Simmonett. I wrote the Python bits below, but the general explanation is direct from him, with some light modifications. He’s a QM/MM guy, so some of what is written below should be taken in the context of molecular simulations.</p>
<!-- TEASER_END -->
<p>Before anything else, let’s set up Python and use <a href="http://web.stanford.edu/~mwaskom/software/seaborn/">Seaborn</a> for good-looking default plotting parameters.</p>
<div id="cell-3" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> __future__ <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> division</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> sys, os</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np, scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sp, pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd, matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> mpl</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> stats</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn</span>
<span id="cb1-7">seaborn.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>()</span>
<span id="cb1-8"></span>
<span id="cb1-9"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>install_ext https:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//</span>raw.githubusercontent.com<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>rasbt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>watermark<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>master<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>watermark.py</span>
<span id="cb1-10"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>load_ext watermark</span>
<span id="cb1-11"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>watermark <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>v <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>m <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>p numpy,pandas,scipy,matplotlib</span>
<span id="cb1-12"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>matplotlib inline</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Installed watermark.py. To use it, type:
  %load_ext watermark
CPython 2.7.8
IPython 2.3.0

numpy 1.9.1
pandas 0.14.1
scipy 0.14.0
matplotlib 1.4.2

compiler   : GCC 4.4.7 20120313 (Red Hat 4.4.7-1)
system     : Linux
release    : 3.16.2-200.fc20.x86_64
machine    : x86_64
processor  : x86_64
CPU cores  : 8
interpreter: 64bit</code></pre>
</div>
</div>
<section id="the-general-strategy" class="level2">
<h2 class="anchored" data-anchor-id="the-general-strategy">The General strategy</h2>
<p>I [Andy] don’t know of any decent source about lookup tables, but here are some notes that demonstrate how we figured out the splines. The simplest approach to understand is Lagrangian Interpolation <a href="http://en.wikipedia.org/wiki/Lagrange_polynomial">wiki</a> <a href="http://mathworld.wolfram.com/LagrangeInterpolatingPolynomial.html">wolfram</a>, which is the approach that we used because it’s so general. The strategy is as follows:-</p>
<ol type="1">
<li><p>Choose a range of inputs values (∆E/kT in your case) that you expect to encounter frequently (say, 0 to 3). I’ve defined the function below such that an input of the positive argument ∆E/kT returns Exp[-∆E/kT].</p></li>
<li><p>Choose a spacing value (referred to below as del) between successive grid points; this will determine both the storage needed for the table and also the accuracy of the interpolation, so some experimentation is necessary. The example below uses del=0.1, but generally you need at least a hundred grid points per unit to get single precision accuracy, and even more for double precision.</p></li>
<li><p>You need to allocate (range/del+1) grid points to hold the table of values. For a quartic interpolation (see below) you need two extra points, to handle the end points (-0.1 and 3.1 in the example above, so you can interpolate the full range).</p></li>
<li><p>Now you need to construct your table: Tab = {Exp[0.1], Exp[0], Exp[-0.1], Exp[-0.2], …, Exp[-3.1]}</p></li>
<li><p>For a given input, x, if it’s outside the range of your interpolation table, just explicitly compute and return Exp[-x].</p></li>
<li><p>If it’s inside the range, use an interpolating polynomial (below) to interpolate the values.</p></li>
</ol>
<div id="cell-5" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> exp,sqrt,sin</span>
<span id="cb3-2"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> gettable(start,stop,d,f):</span>
<span id="cb3-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> f(np.arange(start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d,stop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d,d)) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># enough for quintic</span></span></code></pre></div></div>
</div>
<p>Wikipedia has some good info on Lagrangian interpolation (see links above). I’ve [Andy] pasted the explicit code needed for cubic, quartic, and quintic splines; these were obtained using the corresponding Mathematica inputs. Most codes use cubic splines for efficiency, but we found that quartic splines let you use a coarser table, so they may be more cache effiecient.</p>
<ul>
<li><p>cubic</p>
<pre><code> Simplify[InterpolatingPolynomial[{{x0 - del, e0}, {x0, e1}, {x0 + del, e2}}, x]]

 (2 del^2 e1 - del (e0 - e2) (x - x0) + (e0 - 2 e1 + e2) (x - x0)^2)/(2 del^2)</code></pre></li>
<li><p>quartic</p>
<pre><code> Simplify[InterpolatingPolynomial[{{x0 - del, e0}, {x0, e1}, {x0 + del, e2}, {x0 + 2 del, e3}}, x]]

 -((-6 del^3 e1 + del^2 (2 e0 + 3 e1 - 6 e2 + e3) (x - x0) - 3 del (e0 - 2 e1 + e2) (x - x0)^2 + (e0 - 3 e1 + 3 e2 - e3) (x - x0)^3)/(6 del^3))</code></pre></li>
<li><p>quintic</p>
<pre><code> Simplify[InterpolatingPolynomial[{{x0 - 2 del, e0}, {x0 - del, e1}, {x0, e2}, {x0 + del, e3}, {x0 + 2 del, e4}}, x]]

 (1/(24 del^4))(24 del^4 e2 + 2 del^3 (e0 - 8 e1 + 8 e3 - e4) (x - x0) - 
  del^2 (e0 - 16 e1 + 30 e2 - 16 e3 + e4) (x - x0)^2 - 
  2 del (e0 - 2 e1 + 2 e3 - e4) (x - x0)^3 + (e0 - 4 e1 + 6 e2 - 4 e3 + 
  e4) (x - x0)^4)</code></pre></li>
</ul>
<p>Assume we’re using a quartic polynomial, and want to compute Exp[-0.22]. We need to pick out the 4 consecutive table entries {e0,e1,e2,e3} whose x values bound 0.22, so that we’re interpolating, not extrapolating. This is shown below (# represents the value we’re interested in).</p>
<pre><code>  e0    e1     e2     e3
  |      | #    |      |
  ----------------------
x0-del   x0  x0+del x0+2del
 0.1    0.2    0.3    0.4</code></pre>
<p>The values {e0,e1,e2,e3} are {Exp[-0.1],Exp[-0.2],Exp[-0.3],Exp[-0.4]}, taken straight from the table. The we just plug in (x-x0 = 0.22-0.2 = 0.02) into the quartic formula above, along with the tablulated e* values, and out comes the answer.</p>
<p>For an odd-order interpolating spline, make sure the value you’re probing is in the middle of the range of table values, although it doesn’t matter which side of the center point if falls on; make sure the corresponding sign is correct when computing x-x0 though.</p>
<p>This is using Lagrangian interpolation. <a href="http://en.wikipedia.org/wiki/Ewald_summation#Particle_mesh_Ewald_.28PME.29_method">PME</a> uses and Euler interpolating spline instead, so that might be worth investigating. I’ve attached the <a href="http://scitation.aip.org/content/aip/journal/jcp/103/19/10.1063/1.470117">paper</a> in case you’re interested. Note that the method above works for absolutely any function; you just have to tabulate the compute values ahead of time, which is cheap. To test the table, you can simply probe all of the midpoints (0.05, 0.15, 0.25, … in the example above) and compare the interpolated and analytic function. If it’s something that’s commonly run in single precision anyway, you should be able to get away with errors around 10^-7 or 10^-8. We get 10^-13, in our code, which is close enough to the machine epsilon for our liking.</p>
<p><strong>Note</strong> I also stuck in linear interpolation for comparison.</p>
<div id="cell-7" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> cubic(x,f,table,start,stop,d):</span>
<span id="cb8-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb8-3">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#i0 will be the table index of the largest element lower than x.</span></span>
<span id="cb8-4">        i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>((x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> start)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//</span>d) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># because we have two extra entries</span></span>
<span id="cb8-5">        x0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> start <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb8-6">        e0, e1, e2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> table[i0<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>:i0<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]</span>
<span id="cb8-7">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#print("{i0} {x0} {e0} {e1} {e2} {e3}".format(**locals()))</span></span>
<span id="cb8-8">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> e2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> e2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb8-9">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># You'd think IndexError, but it comes from grabbing N table entries.</span></span>
<span id="cb8-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># If the start or stop value is too high, you just won't be able to extract</span></span>
<span id="cb8-11">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The full three (in this case) entries from the table error, so the</span></span>
<span id="cb8-12">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># e0, e1, e2 = ... line will raise a ValueError</span></span>
<span id="cb8-13">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">ValueError</span>: </span>
<span id="cb8-14">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> f(x)</span>
<span id="cb8-15"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> quartic(x,f,table,start,stop,d):</span>
<span id="cb8-16">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb8-17">        i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>((x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> start)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//</span>d) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb8-18">        x0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> start <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb8-19">        e0, e1, e2, e3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> table[i0<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>:i0<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>]</span>
<span id="cb8-20">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>((<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> e3)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0) </span>
<span id="cb8-21">                  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> e2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> </span>
<span id="cb8-22">                  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> e3)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))</span>
<span id="cb8-23">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">ValueError</span>:</span>
<span id="cb8-24">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> f(x)</span>
<span id="cb8-25"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> quintic(x,f,table,start,stop,d):</span>
<span id="cb8-26">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb8-27">        i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>((x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> start)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//</span>d) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb8-28">        x0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> start <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb8-29">        e0, e1, e2, e3, e4 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> table[i0<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>:i0<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>]</span>
<span id="cb8-30">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">24</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>( <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">24</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> e4)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> </span>
<span id="cb8-31">                d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> e4)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> </span>
<span id="cb8-32">                <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> e4)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> </span>
<span id="cb8-33">                (e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>e3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> e4)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> )</span>
<span id="cb8-34">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">ValueError</span>:</span>
<span id="cb8-35">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> f(x)</span>
<span id="cb8-36"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># and why not</span></span>
<span id="cb8-37"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> linear(x,f,table,start,stop,d):</span>
<span id="cb8-38">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span>:</span>
<span id="cb8-39">        i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>((x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> start)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//</span>d) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb8-40">        x0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> start <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(i0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb8-41">        e0, e1,  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> table[i0:i0<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]</span>
<span id="cb8-42">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#m = (e1-e0)/d</span></span>
<span id="cb8-43">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#b = e0 - m*x0</span></span>
<span id="cb8-44">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#return m*x + b</span></span>
<span id="cb8-45">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> e0 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>x0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(e1<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>e0)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>d</span>
<span id="cb8-46">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">except</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">ValueError</span>:</span>
<span id="cb8-47">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> f(x)</span>
<span id="cb8-48">    </span>
<span id="cb8-49"></span>
<span id="cb8-50"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getinterp(order):</span>
<span id="cb8-51">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> {<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>:linear,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>:cubic,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>:quartic,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>:quintic}[order]</span>
<span id="cb8-52"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getinterpname(order):</span>
<span id="cb8-53">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> {<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'linear'</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cubic'</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'quartic'</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'quintic'</span>}[order]</span></code></pre></div></div>
</div>
<p>So let’s test, giving each one values inside the range as well as on both sides</p>
<div id="cell-9" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">start,stop,d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span></span>
<span id="cb9-2"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> f(x):</span>
<span id="cb9-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> exp(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>x)</span>
<span id="cb9-4">table <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> gettable(start,stop,d,f)</span>
<span id="cb9-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> printapprox(order,val,f):</span>
<span id="cb9-6">    interp <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getinterp(order)</span>
<span id="cb9-7">    exact,interpd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(val),interp(val,f,table,start,stop,d)</span>
<span id="cb9-8">    pdiff <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">abs</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>interpd<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>exact)</span>
<span id="cb9-9">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"exact </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{a}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> approx </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{b}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%d</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">iff </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{c}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(a<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>exact,b<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>interpd,c<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pdiff))</span>
<span id="cb9-10"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getf(name):</span>
<span id="cb9-11">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> fexp(x):</span>
<span id="cb9-12">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> exp(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>x)</span>
<span id="cb9-13">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> fsqr(x):</span>
<span id="cb9-14">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> sqrt(x)</span>
<span id="cb9-15">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> fsin(x):</span>
<span id="cb9-16">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> sin(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>x)</span>
<span id="cb9-17">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'exp'</span>:fexp,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sqrt'</span>:sqrt,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sin'</span>:fsin}[name]</span>
<span id="cb9-18"></span>
<span id="cb9-19"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Linear"</span>)</span>
<span id="cb9-20">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-21">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-22">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">5.22</span>,f)</span>
<span id="cb9-23"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cubic"</span>)</span>
<span id="cb9-24">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-25">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-26">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">5.22</span>,f)</span>
<span id="cb9-27"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Quartic"</span>)</span>
<span id="cb9-28">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-29">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-30">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">5.22</span>,f)</span>
<span id="cb9-31"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Quintic"</span>)</span>
<span id="cb9-32">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-33">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.22</span>,f)</span>
<span id="cb9-34">printapprox(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">5.22</span>,f)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Linear
exact 0.802518797962 approx 0.803148246599 %diff 0.0784341298732
exact 1.24607673059 approx 1.24607673059 %diff 0.0
exact 0.00540732912644 approx 0.00540732912644 %diff 0.0
Cubic
exact 0.802518797962 approx 0.802492715994 %diff 0.00325001342684
exact 1.24607673059 approx 1.24607673059 %diff 0.0
exact 0.00540732912644 approx 0.00540732912644 %diff 0.0
Quartic
exact 0.802518797962 approx 0.802517668788 %diff 0.000140703834049
exact 1.24607673059 approx 1.24607673059 %diff 0.0
exact 0.00540732912644 approx 0.00540732912644 %diff 0.0
Quintic
exact 0.802518797962 approx 0.802518849726 %diff 6.45019096623e-06
exact 1.24607673059 approx 1.24607673059 %diff 0.0
exact 0.00540732912644 approx 0.00540732912644 %diff 0.0</code></pre>
</div>
</div>
<p>That looks good. It’s worth noting that this algorithm gives bad results in at least one clear case: for <code>sqrt</code>, the interpolations that try to use values for <code>x &lt; 0</code> will all give <code>nan</code>. One easy fix would be to test for a <code>nan</code> return value and just return the exact value. You’d have to consider how close your actual values are likely to be to zero, though, as that test will have to run for every lookup. There are probably smarter fixes. Here’s a demonstration:</p>
<div id="cell-11" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1">table <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> gettable(start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,stop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,f<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>getf(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sqrt'</span>))</span>
<span id="cb11-2">cubic(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span>,f<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>getf(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sqrt'</span>),table<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>table,start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,stop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="5">
<pre><code>nan</code></pre>
</div>
</div>
<p>Now let’s look at this visually.</p>
<p><strong>Note</strong> that I cap the lower axis at 150%. When you’re calculating numbers very close to zero (see <code>sin</code> for clear examples), the percentage error can get huge, and you might want to use other techniques (Taylor expansion, etc.).</p>
<div id="cell-13" class="cell" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.html <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> widgets </span>
<span id="cb13-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.html.widgets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> interact</span>
<span id="cb13-3"></span>
<span id="cb13-4">figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)</span>
<span id="cb13-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> showinterp(d,order,fname<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'exp'</span>,rangeexp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>):</span>
<span id="cb13-6">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.figure(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>figsize)</span>
<span id="cb13-7">    f <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getf(fname)</span>
<span id="cb13-8">    start,stop <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span></span>
<span id="cb13-9">    start,stop,d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>rangeexp,stop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>rangeexp,d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>rangeexp</span>
<span id="cb13-10">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.arange(start,stop,d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">100.0</span>)</span>
<span id="cb13-11">    table <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> gettable(start,stop,d,f)</span>
<span id="cb13-12">    exact <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> f(x)</span>
<span id="cb13-13">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Make these ufuncs for some huge speedup</span></span>
<span id="cb13-14">    interp <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getinterp(order)</span>
<span id="cb13-15">    interpd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([interp(i,f,table,start,stop,d) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> x])</span>
<span id="cb13-16">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#print(interpd[:10])</span></span>
<span id="cb13-17">    err <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> interpd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> exact</span>
<span id="cb13-18">    errfrac <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> err<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>exact</span>
<span id="cb13-19">    xerrfrac <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> x[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>np.isnan(errfrac)] <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># for plotting later</span></span>
<span id="cb13-20">    errfrac <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> errfrac[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>np.isnan(errfrac)]</span>
<span id="cb13-21">    errfrac <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">abs</span>(errfrac)</span>
<span id="cb13-22">    perr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">abs</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>errfrac)</span>
<span id="cb13-23">    plt.subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb13-24">    plt.plot(x,exact,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k'</span>,label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'exact'</span>,lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb13-25">    plt.plot(x,interpd,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'r-'</span>,label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{n}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> interp d </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{d}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>getinterpname(order),d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>d))</span>
<span id="cb13-26">    plt.legend(fancybox<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb13-27">    plt.subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb13-28">    plt.plot(x,err,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k-'</span>,label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'error'</span>)</span>
<span id="cb13-29">    plt.legend(fancybox<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb13-30">    plt.subplot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb13-31">    plt.plot(xerrfrac,perr,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k-'</span>,label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">% e</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">rror'</span>)</span>
<span id="cb13-32">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> plt.ylim()[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">151</span>:</span>
<span id="cb13-33">        plt.ylim(plt.ylim()[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">151</span>)</span>
<span id="cb13-34">    plt.legend(fancybox<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb13-35">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#plt.grid(True)</span></span>
<span id="cb13-36">    m <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>(err[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>np.isnan(err)])</span>
<span id="cb13-37">    a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.average(err[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>np.isnan(err)])</span>
<span id="cb13-38">    mp <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>(perr)</span>
<span id="cb13-39">    ap <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.average(perr)</span>
<span id="cb13-40">    plt.xlabel(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{order}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{d}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{start}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{stop}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> Max err </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{m:g}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{mp:g}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">%] avg </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{a:g}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{ap:g}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">%]'</span>.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">locals</span>()))</span>
<span id="cb13-41">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> fig</span>
<span id="cb13-42">interact(showinterp,d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>widgets.FloatSliderWidget(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.001</span>,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.5</span>,step<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.001</span>,value<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.1</span>),</span>
<span id="cb13-43">         order<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>),</span>
<span id="cb13-44">         fname<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'exp'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sqrt'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sin'</span>],</span>
<span id="cb13-45">         rangeexp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>widgets.IntSliderWidget(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,step<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>,value<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb13-46">         )</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/speeding-up-calculations-with-lookup-tables-and-lagrangian-interpolation/index_files/figure-html/cell-7-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>That’s awesome in a live notebook. Let’s do something similar that we can look at statically. There are two main choices here: <a href="https://github.com/jakevdp/JSAnimation">JSAnimation</a> and <a href="https://github.com/jakevdp/ipywidgets">IPy-Widgets</a>, both by the indomitable <a href="http://www.astro.washington.edu/users/vanderplas/">Jake VanderPlas</a>. I really like the ability to play things as a movie, but ipywidgets wins for now because I can do dropdowns. You can animate it by draggin the sliders. Hey, it’s like a flipbook! Rangeexp will let you play with the range, so you can see what happens when you look over small divisions between floating point numbers.</p>
<div id="cell-15" class="cell" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb14-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> ipywidgets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> StaticInteract, RangeWidget, RadioWidget, DropDownWidget</span>
<span id="cb14-2">figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>)</span>
<span id="cb14-3"></span>
<span id="cb14-4">StaticInteract(showinterp,d<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>RadioWidget([<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.001</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0025</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.005</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0075</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.025</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.075</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],default<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>),</span>
<span id="cb14-5">               order<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>RangeWidget(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,default<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>),</span>
<span id="cb14-6">               fname<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>DropDownWidget([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'exp'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sqrt'</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sin'</span>],default<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'exp'</span>),</span>
<span id="cb14-7">               rangeexp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>RadioWidget([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],default<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>),</span>
<span id="cb14-8">               )</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>/home/mglerner/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py:424: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).
  max_open_warning, RuntimeWarning)</code></pre>
</div>
<div class="cell-output cell-output-display" data-execution_count="13">
<iframe src="embed-14-1.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>


</section>
</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/speeding-up-calculations-with-lookup-tables-and-lagrangian-interpolation/</guid>
  <pubDate>Thu, 19 Mar 2015 19:43:00 GMT</pubDate>
</item>
<item>
  <title>Evolution of a Learning Goal</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/evolution-of-a-learning-goal/</link>
  <description><![CDATA[ 






<p>
I just got back from the Lilly <a href="http://celt.miamioh.edu/lillycon/schedule.php?date=2014-11-20&amp;year=2014" title="Lilly International Conference on College Teaching">Conference</a> on College Teaching. The first workshop I went to was on course design. One chunk of this was on learning goals. This came in the second half of the workshop, after we’d talked quite a bit about learning factors, etc. I chose to work on my 200-level <a href="https://github.com/mglerner/IntroToBiophysics" title="Introduction to Biophysics">Biophysics</a> class, where I thought I had decent goals already. One of the ones I particularly liked was
</p>
<blockquote class="blockquote">
<p>
Use simple physical models to provide quantitative insight into biological systems.
</p>
</blockquote>
<!-- TEASER_END -->
<p>
The <a href="https://sty.presswarehouse.com/Books/BookDetail.aspx?productID=323200">people running the workshop</a> have some good reasons for insisting on particular phrasing, and they recommend either “students will be able to [verb] [object]” or “given [thing] students will be able to [other thing].” Fair enough, if I lighten up a bit on the need for an action verb, I get
</p>
<blockquote class="blockquote">
<p>
Students will be able to use simple physical models to provide quantitative insight into biological systems.
</p>
</blockquote>
<p>
We talked a bit about how many goals a class should have. Their book recommends 3-5. If you have a ton more than that, you’re listing specific objectives rather than overarching goals. One of the authors/instructors actually recommends a single goal. If you can do it, it gives you a really nice way to focus the class, makes you comfortable cutting material in the interest of deep(er) learning, etc. The danger, of course, is that you don’t want a goal that’s general enough as to be meaningless.
</p>
<p>
We also talked about the time-frame of a goal. If you’re setting a 5-year goal (i.e.&nbsp;what do you want them to be like in 5 years), they have 5 years between now and the goal, so you don’t get to take credit (or responsibility) for the whole goal; you just need to plant a seed.
</p>
<p>
In thinking more about the class and about attitudes, it became clear that I really wanted the students to be able to identify a problem and play with it.
</p>
<blockquote class="blockquote">
Students will be able to identify a biological problem and play with it, using simple physical models to provide quantitative insight.
</blockquote>
<p>
At this point, we talked a bit more about the purpose of goals, and the idea that you want the class to be committed to the goals, and I was introduced to what may be my new favorite <a href="http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig" title="The Chicken and the Pig">fable</a>/punchline: “in a ham and egg breakfast, the chickin is involved; the pig is committed.”
</p>
<p>
Anyway, the above goal is sounding wordy, and is really trying to do too much at once. Worse, “play with it” is <em>maybe</em> clear to the instructor, but really unlikely to be clear to the students. There are at least two things going on here, and they’re worth separating: I’ll have to teach them as separate skills, students will certainly learn them as separate skills, and I should be explicit.
</p>
<blockquote class="blockquote">
<ul>
<li>
Given an identified biological problem, students will be able to identify several categories of physical models with which the problem might be addressed.
</li>
<li>
Given a biological problem and a physical model, students will be able to provide quantitative insight into the system.
</li>
</ul>
</blockquote>
<p>
At this point, it’s close, but there’s a bit more work to be done with categorizing the physical model(s). I mean, the students aren’t going to be dropping in an extraordinarily complex set of models for a 200-level class that requires only a semester of calc-based mechanics as a pre-req:
</p>
<blockquote class="blockquote">
<ul>
<li>
Given a biological system and an appropriate simple physical model, students will be able to adapt the model to the system, providing quantitative insight.
</li>
<li>
Given a biological problem, students will be able to identify several [candidate? potential?] physical models to apply to the system.
</li>
</ul>
</blockquote>
<p>
The idea of “adapting the model to the system” was an important addition, and a clarification of “play with.” It’s also something that I expect most students to have relatively little experience with, especially in an interdisciplinary context! In addition to a few other things, this was where I started monkeying with the “quantitative insight” wording, and where to put it in the goal.
</p>
<blockquote class="blockquote">
<ul>
<li>
Given a biological system, students will be able to name the appropriate physical models that apply.
</li>
<li>
Given a biological system, take a physical model and appropriately adapt it through quantitative analysis to that specific system.
</li>
</ul>
</blockquote>
<p>
tweak a bit
</p>
<blockquote class="blockquote">
<ul>
<li>
Given a biological system and a physical model, students will be able to appropriately adapt the model to the system to provide quantitative [insight?] analysis.
</li>
<li>
Given a biological system, students will be able to name appropriate physical models.
</li>
</ul>
</blockquote>
<p>
That’s pretty close. My penultimate version was a combination of the last few.
</p>
<blockquote class="blockquote">
<ul>
<li>
Given a biological system and a physical model, students will be able to adapt the model to the system through quantitative analysis.
</li>
<li>
Given a biological system, students will be able to name relevant physical models.
</li>
</ul>
</blockquote>
<p>
“… be able to name …” doesn’t sound so strong, even though “relevant” carries a lot of weight. After looking at Bloom’s Taxonomy of Educational Objectives, a simple switch from “name” to “predict” captures what I want, and makes the goal much higher-level. I’ve added the third (and final) goal here:
</p>
<blockquote class="blockquote">
<ul>
<li>
Given a biological system and a physical model, students will be able to adapt the model to the system through quantitative analysis.
</li>
<li>
Given a biological system, students will be able to predict relevant physical models.
</li>
<li>
Students will gain exposure to important questions in the modern field of molecular biophysics, and evaluate current research on a system of their choice.
</li>
</ul>
</blockquote>
<p>
That’s <em>much</em> better, both for me and the students! And that’s despite the fact that my original goal (“use simple physical models to provide quantitative insight into biological systems”) still sounds decent. I wonder if I should use that phrasing, and perhaps something about “play with a model” in the course description rather than the goals.
</p>





 ]]></description>
  <guid>https://mglerner.com/blog/posts/evolution-of-a-learning-goal/</guid>
  <pubDate>Mon, 24 Nov 2014 15:07:32 GMT</pubDate>
</item>
<item>
  <title>Making IPython Notebooks for the matplotlib examples</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/</link>
  <description><![CDATA[ 






<p>
<a href="http://matplotlib.org/">matplotlib</a> comes with tons of fantastic <a href="http://matplotlib.org/examples/index.html">examples</a>. I’m not as familiar with matplotlib as I probably should be, so I often find myself wanting to tinker a bit, but needing to refer to those examples. Since matplotlib comes with such wonderful documentation, I though it would be great to just turn those docs into <a href="https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks">IPython Notebooks</a> for easy tinkering. That’s probably biting off a bit more than I want to chew at the moment, considering that the matplotlib docs are fairly involved and written in <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> instead of <a href="http://daringfireball.net/projects/markdown/">markdown</a> (what the IPython Notebook uses).
</p>
<p>
Luckily, the IPython Notebook format is so mind-bendingly sane that I didn’t even need to read any documentation to understand it. So, instead, I wrote a bit of code that gobbles up matplotlib example scripts and spits out IPython Notebooks. <del datetime="2013-12-31T19:43:42+00:00">The whole notebook is JSON, but I only want simple things, so I hardcode everything except for the cells.</del> (After Daniel’s comment below, I started to write my own JSONEncoder. Then, I realized that I was right about the “it’s all JSON” thing and rewrote the notebook class). I have a little IPyNB class that knows how to add cells to itself and spit out the results as strings and files:
</p>
<!--TEASER_END -->
<pre class="brush:py">import os, json, glob
        
class IPyNB():
    def __init__(self,name):
        self.name = name
        self.cells = []
        self.d = {‘metadata’:{‘name’:”},
                  ‘nbformat’:3,
                  ‘nbformat_minor’:0,
                  ‘worksheets’:[{'cells':[],’metadata’:{}}]
                  }
        
    def addcell(self,celltype,content):
        cell = {‘cell_type’:celltype,
                  ‘metadata’:{}
                  }
        if celltype == ‘code’:
            cell['collapsed'] = False
            cell['input'] = content.split(‘\n’)
            cell['language'] = ‘python’
            cell['outputs'] = []
        elif celltype == ‘markdown’:
            cell['source'] = content.split(‘\n’)
        #elif self.celltype = ‘raw’:
        else:
            raise NotImplemented(‘Unknown cell type: {celltype}’.format(celltype=self.celltype))
        self.d['worksheets'][0]['cells'].append(cell)

    def tostring(self):
        return json.dumps(self.d,
                          sort_keys=True,
                          indent=1, separators=(‘,’, ‘: ‘),
            )

    def tofile(self,outdir=’.',overwrite=False):
        fname = os.path.join(outdir,self.name+’.ipynb’)
        if os.path.isfile(fname) and not overwrite:
            raise IOError(“File {fname} already exists”.format(fname=fname))
        f = open(fname,’w')
        f.write(self.tostring())
        f.close()
</pre>
<p>
I’ve defined a few celltypes. It’s easy to add more if there are more.
</p>
<p>
And then a couple of functions to read in the matplotlib examples and spit out notebooks:
</p>
<pre class="brush:py">def make_mpl_examples(subdir=’images_contours_and_fields’,basedir=’~/coding/matplotlib/examples’,outdir=’.',overwrite=False):
    n = IPyNB(subdir + ‘ Examples’)
    n.addcell(‘markdown’,”"”#matplotlib examples
The below examples are taken directly from the matplotlib example directory {subdir} and rendered in an IPython Notebook. Before you run them, you should execute one of the first two cells, depending on whether you want inline rendering or not. The inline rendering is usually much nicer for interactive work, but doesn’t support all features (e.g. animation).”"”.format(subdir=subdir)
    n.addcell(‘code’,'%matplotlib inline’)
    n.addcell(‘code’,'%matplotlib’)
    pat = os.path.join(os.path.expanduser(basedir),subdir,’*.py’)
    examples = glob.glob(pat)
    if not examples:
        raise IOError(‘No files found: {pat}’.format(pat=pat))
    for ex in examples:
        n.addcell(‘markdown’,'## {exname}’.format(exname=ex))
        n.addcell(‘code’,open(ex).read())
    n.tofile(overwrite=overwrite,outdir=outdir)

def make_all_mpl_examples(outdir=’output’,basedir=’~/coding/matplotlib/examples’,overwrite=False):
    # There must be a builtin!
    bd = os.path.expanduser(basedir)
    subdirs = [d for d in os.listdir(bd) if os.path.isdir(os.path.join(bd,d))]
    for s in subdirs:
        print “Doing”,s
        make_mpl_examples(subdir=s,basedir=basedir,outdir=outdir,overwrite=overwrite)
</pre>
<p>
It spits out one notebook per example directory, but is easy to change. It does what I want very nicely: gives me an immediate way to tweak the matplotlib examples. I’ll leave the bigger project (turning all of the matplotlib docs into IPython Notebooks) for later, if ever. The first thing I’d need to figure out is how to execute the code in the cells programatically. I’m sure there’s an API.
</p>
<p>
Here’s an example of some examples. I’ve executed several of the cells so that there’s output. This is significantly less interesting on the web, and more interesting if you run it in a notebook on your own so that you can tweak things.
</p>
<p>
</p><div class="text_cell_render border-box-sizing rendered_html">
<h1 id="matplotlib-examples">
matplotlib examples
</h1>
<p>
The below examples are taken directly from the matplotlib example directory images_contours_and_fields and rendered in an IPython Notebook. Before you run them, you should execute one of the first two cells, depending on whether you want inline rendering or not. The inline rendering is usually much nicer for interactive work, but doesn’t support all features (e.g.&nbsp;animation).
</p>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[1]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre><span class="o">%</span><span class="k">matplotlib</span> <span class="n">inline</span>
</pre>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre><span class="o">%</span><span class="k">matplotlib</span>
</pre>
</div>
</div>
</div>
</div>
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="usersmglernercodingmatplotlibexamplesimages_contours_and_fieldsimage_demo.py" class="anchored">
/Users/mglerner/coding/matplotlib/examples/images_contours_and_fields/image_demo.py
</h2>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[2]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre><span class="sd">"""</span>
<span class="sd">Simple demo of the imshow function.</span>
<span class="sd">"""</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">matplotlib.cbook</span> <span class="kn">as</span> <span class="nn">cbook</span>

<span class="n">image_file</span> <span class="o">=</span> <span class="n">cbook</span><span class="o">.</span><span class="n">get_sample_data</span><span class="p">(</span><span class="s">'ada.png'</span><span class="p">)</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="n">image_file</span><span class="p">)</span>

<span class="n">plt</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s">'off'</span><span class="p">)</span> <span class="c"># clear x- and y-axes</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre>
</div>
</div>
</div>
<div class="vbox output_wrapper">
<div class="output vbox">
<div class="hbox output_area">
<div class="prompt">

</div>
<div class="box-flex1 output_subarea output_display_data">
<p><img src="https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/data:image/png;base64,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
AAAAAElFTkSuQmCC
"></p>
</div>
</div>
</div>
</div>
</div>
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="usersmglernercodingmatplotlibexamplesimages_contours_and_fieldsimage_demo_clip_path.py" class="anchored">
/Users/mglerner/coding/matplotlib/examples/images_contours_and_fields/image_demo_clip_path.py
</h2>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[3]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre><span class="sd">"""</span>
<span class="sd">Demo of image that's been clipped by a circular patch.</span>
<span class="sd">"""</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">matplotlib.patches</span> <span class="kn">as</span> <span class="nn">patches</span>
<span class="kn">import</span> <span class="nn">matplotlib.cbook</span> <span class="kn">as</span> <span class="nn">cbook</span>


<span class="n">image_file</span> <span class="o">=</span> <span class="n">cbook</span><span class="o">.</span><span class="n">get_sample_data</span><span class="p">(</span><span class="s">'grace_hopper.png'</span><span class="p">)</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="n">image_file</span><span class="p">)</span>

<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">()</span>
<span class="n">im</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
<span class="n">patch</span> <span class="o">=</span> <span class="n">patches</span><span class="o">.</span><span class="n">Circle</span><span class="p">((</span><span class="mi">260</span><span class="p">,</span> <span class="mi">200</span><span class="p">),</span> <span class="n">radius</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">transform</span><span class="o">=</span><span class="n">ax</span><span class="o">.</span><span class="n">transData</span><span class="p">)</span>
<span class="n">im</span><span class="o">.</span><span class="n">set_clip_path</span><span class="p">(</span><span class="n">patch</span><span class="p">)</span>

<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s">'off'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre>
</div>
</div>
</div>
<div class="vbox output_wrapper">
<div class="output vbox">
<div class="hbox output_area">
<div class="prompt">

</div>
<div class="box-flex1 output_subarea output_display_data">
<p><img src="https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/data:image/png;base64,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
"></p>
</div>
</div>
</div>
</div>
</div>
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="usersmglernercodingmatplotlibexamplesimages_contours_and_fieldspcolormesh_levels.py" class="anchored">
/Users/mglerner/coding/matplotlib/examples/images_contours_and_fields/pcolormesh_levels.py
</h2>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[4]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre><span class="sd">"""</span>
<span class="sd">Shows how to combine Normalization and Colormap instances to draw</span>
<span class="sd">"levels" in pcolor, pcolormesh and imshow type plots in a similar</span>
<span class="sd">way to the levels keyword argument to contour/contourf.</span>

<span class="sd">"""</span>

<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
<span class="kn">from</span> <span class="nn">matplotlib.colors</span> <span class="kn">import</span> <span class="n">BoundaryNorm</span>
<span class="kn">from</span> <span class="nn">matplotlib.ticker</span> <span class="kn">import</span> <span class="n">MaxNLocator</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>


<span class="c"># make these smaller to increase the resolution</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.05</span>

<span class="c"># generate 2 2d grids for the x &amp; y bounds</span>
<span class="n">y</span><span class="p">,</span> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mgrid</span><span class="p">[</span><span class="nb">slice</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span> <span class="o">+</span> <span class="n">dy</span><span class="p">,</span> <span class="n">dy</span><span class="p">),</span>
                <span class="nb">slice</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dx</span><span class="p">)]</span>

<span class="n">z</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">**</span> <span class="mi">10</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="mi">10</span> <span class="o">+</span> <span class="n">y</span> <span class="o">*</span> <span class="n">x</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>

<span class="c"># x and y are bounds, so z should be the value *inside* those bounds.</span>
<span class="c"># Therefore, remove the last value from the z array.</span>
<span class="n">z</span> <span class="o">=</span> <span class="n">z</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">levels</span> <span class="o">=</span> <span class="n">MaxNLocator</span><span class="p">(</span><span class="n">nbins</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span><span class="o">.</span><span class="n">tick_values</span><span class="p">(</span><span class="n">z</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">z</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>


<span class="c"># pick the desired colormap, sensible levels, and define a normalization</span>
<span class="c"># instance which takes data values and translates those into levels.</span>
<span class="n">cmap</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">get_cmap</span><span class="p">(</span><span class="s">'PiYG'</span><span class="p">)</span>
<span class="n">norm</span> <span class="o">=</span> <span class="n">BoundaryNorm</span><span class="p">(</span><span class="n">levels</span><span class="p">,</span> <span class="n">ncolors</span><span class="o">=</span><span class="n">cmap</span><span class="o">.</span><span class="n">N</span><span class="p">,</span> <span class="n">clip</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>

<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">im</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">norm</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">()</span>
<span class="c"># set the limits of the plot to the limits of the data</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">x</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="n">y</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">y</span><span class="o">.</span><span class="n">max</span><span class="p">()])</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s">'pcolormesh with levels'</span><span class="p">)</span>



<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="c"># contours are *point* based plots, so convert our bound into point</span>
<span class="c"># centers</span>
<span class="n">plt</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">x</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span> <span class="o">/</span> <span class="mf">2.</span><span class="p">,</span>
             <span class="n">y</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span> <span class="o">/</span> <span class="mf">2.</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="n">levels</span><span class="o">=</span><span class="n">levels</span><span class="p">,</span>
             <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s">'contourf with levels'</span><span class="p">)</span>


<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre>
</div>
</div>
</div>
<div class="vbox output_wrapper">
<div class="output vbox">
<div class="hbox output_area">
<div class="prompt">

</div>
<div class="box-flex1 output_subarea output_display_data">
<p><img src="https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/data:image/png;base64,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
48YpLnfFfWJvHK44Fh06dCC9evUivXv3Jv369VNcx1XHwpUYJrp79uwhBw4cUBW7LVu2kDFjxhBC
CElLSyMxMTFG7dqhcezatYvcfffdTtm3QEFBATl48CAhhJDLly+Tzp07k6NHj0rWccXx4BmHkcfj
2LFjJCoqivj6+pK3335bfP/KlSuEEEIqKipITEwM+fnnnyWfkx8Lb29vsnv3btX9xMbGko8/phr
TLt27SIhISFc49BzLCwWCzl16hTXuq+/jqZPHmy4r5cdZ/YG4cr7pPQ0FDy119/qS535bFwJbp8
ujRDhw6Fv7+/6nK1mF6jsTcOwPkzm61bt0bv3r0BAD4+PujWrRvy8/Ml67jieNDjWLlyJa5evWoz
DsC447FixQqMGjUKly5dwpw5c8T3rdaaCNcbN26gqqrKpsi9/Fi0b98eXbp0AQC89NJLmDJlimR9
tQIk9rA3DsD510ZeXh6Sk5MxY8YMxX256j6xNw7ANREArH246li4GsNE1x5nz55FOyorJiQkBHl5
2squ6YFupDl27FgcPXrUqfvLysrCwYMHERMTI3nf1cejpKQERUVFNuMw4nhUVlYCALKzsxWbklZX
V6N3795o1aoVRowYYbOOq46FvXG44tp4+umn8dprr6lWo3LVsbA3DlccC4vFgttuuw19+/bFRx99
ZLPcUzTDaFwmugBfTK+zERpp/v7773jqqadUC1kYQVlZGe677z6sXr0aPj4+NsvVjkdubi7uvfde
BAUFoWXLlnjqqacA1IjGyy+/jNDQULRq1Qrx8fG4dOkSgBpx9/LywoYNG9ChQwcEBgZi6dKlAIBv
vvkGb731Fm7cuIE2bdogOromWyk/Px+vvvoqAODq1avo1KmTeDymTp2KF154QRxbamqq5AYIDQ3F
ihUrEBUVBR8fH4waNQqpqamYM2cOmjVrhszM2roKXl5eeOONN9ChQwfs2bMHqampuP322yW1R2fP
no2kpCQAwN69e/Hrr79i69atWLZsGT7/HP4+vqK4xa+75AhQ9CsWTPceeed+Ouvv+yeDy8vLyQn
J2PEiBF444030LZtW7z99tvisRgzZgwOHz4sXhujR49GYGAgqqqqAABr165F9+7dERAQgNGjRyMn
R7mKVXJyMnr06IFmzZohJCQEr7/+OgDghx9+QFBQEKKjo5kWnrPvE55xuOI+2bt3Lw4ePIiUlBS8
8847+Pnnn23W8QTNMBqXia6nxPT6+vqKj5ljxoxBRUUFioqKDN9PRUUFJk6ciEceeUTxglU7HlVV
VRg3bhzCwsKQnZ2Ns2fP4qGHHgIArF+/Hp988glSU1Nx+vRplJWVSR7jgZoL+cSJE9ixYweWLFmC
/73v3j/fdx55134qGHHsLly5fFwkSTJk1CeHg4CgoK8OWXX2LTpk24dOkSioqKuB7hN2/ejOTk
ZJSWlmLHjh0YOnQo3nnnHVy6dAkRERGSdQcMGIBTp05hxIgRSE9Px+HDh1FQUIArV66gVatWOHbs
GIYOram+VlVVhcDAQIwePRr/+Mc/MGnSJMm4CSH47LPPsH79epw/fx43btzAypUr7Z6T6upq3H33
3ejfvz8WLVqEqVOn4s0338S2bdvQtm1bDBw4ECkpKQBqro3S0lLExcWhQYMG+O6777Bs2TJ88803
uHjxIoYOHSqeFzmPPfYYPvzwQ1y6dAl/PEHRo4cCQDYt28fkpKSEBYWhoceegg7d+60qWviivuE
ZxyuuE/atGkDAAgMDMQ999yDjAxpKr2naIbRuEx0PSWmt7CwUPz1dFYjTUIIHnvsMXTv3h3z589X
XEfteGRkZKCgoACvvfYavL290bhxYwwaNAgA8Omnn+LZZ59FaGgomjZtimXLlmHz5s2orq4Wt/vi
iy+icePGiIyMRFRUFJ588kl0794dMTExEqshNzcX+/btw7PPPotGjRqJj5FlZWXi8WBZYxaLBXPn
zkVwcDAaN24s+e40Fy9eRElJCby9vXHrrbfiu+++g9VqRe/evTF48GD88ssviIiIQOPGjeHv74+0
tDR4eXmJfnlSM9lrs+/p06cjIiICTZo0wQMPPIBDhw4xz8nFixexc+dOXLx4Ec8++yx27tyJUaNG
YcaMGWJfv3HjxontqdLT03HlyhVMmzYNAPD+++9j4cKF6NKlC7y8vLBw4UIcOnRIIgoCt9xyC/74
4w9cunQJzZs3Fy30pUuXIjc3F2fOnMHmzZsxcuRI8RoQcMV9wjMOZ98nV69exeXLlwEAV65cwbZt
22yqGXqKZhiNYUVVPSWm1xmNNB1l79692LhxIyIjIyU3nPA4yjoeubm56NChg6KvraCgAB06dBBf
t2/fHpWVlZLJhdatW4v/V1RUICMjA5cuXUJhYSGuX7+OlJQU5OTk4MyZMwgICEBycrJ4PC5duoQe
PXpwf892Co0F5dZxQUEB4uPjUV1djfz8fHTu3Bnl5eXw9vaGl5cXdu/ejcaNGyMsLEw8Fi1atLC7
b/p7ent7o6ysjLl+QUEBZs6ciZycHPj4+KBx48a47777UF5ejk6damr6VlZWYteuXeIxCAwMxJAh
QwDU+KvnzZuHZ599VrJdud8RAL766iu8/PLLWLBgASIjI7F8+XIMGDBA9Vh98MEHANwX+640Dmff
J4WFhbjnnnsA1Bz3hx9+GHfccYfbj4VLcF2ghAkP+/btI0FBQaSystJm2ahRo8i7774rvj5+/Dhp
1KgRqaqqImfOnCEWi4VUVVWJy4cPH07WrFlDCCHkpZdeIo888oi4LCcnhzRo0IBcvnxZfG/hwoVk
2rRphBBCEhISyDPPPCMu27Rpkxh6RUhNuM+OHTsk46P3p8RPP/1EevXqJRZK+uOPP8jAgQPJiBEj
yFdffaW4bfm4lfazbt06MmTIEMV90iFj+/btI506dVIdHyGEjB8/nrz55ptk1qxZkljeO++8k3z2
2Weqn1MKGausrCRvvPEGadeuHXOfJjcXLp1IM7FPTEwM2rRpgwULFuDq1asoLy/Hvn37ANRY8W+8
8QaysrJQVlYm+jt5+jK1bt0aWVlZ4iNju3btMGjQICxcuBDXr1/H4cOHsXbtWjzyyCMAgN69eyM5
ORnFxcU4d+4c3nzzTa7xE4ZLYtCgQTh+/Dh+/fVX9O/fH927d0d2djbS09MxbNgwrnHz7EeN/v37
w9fXFytWrMC1a9dQVVWF/73v9i/f7+4zuTJk/HJJ5/gq6++wuTJk8X3n3jiCSxdulScxS8tLcV/
/vMfm31UVFTg008/RWlpKRo0aABfX180aNDA4bGa1F9M0fUwvLy88P333yMzMxPt27dHu3bt8MUX
XwCo6eQxZcoUDBs2DOHh4bBareLsO8Ce2b3/vsBAC1atEDfvn0BAJs2bUJWVhbatm2Le++9F0uW
LBEnfaZMmYKoqCiEhoZi9OjRmDRpEtfMMWsdq9WKW2+9FT169EDDhjWerUGDBiE0NBQtW7ZU/IzS
uOX7sTfpJyxr0KABfvjhBxw6dAjh4eEIDAzErFmzxAgQoMaPmJmZiTZt2kh8jBMmTMDzzz+PSZMm
oXnz5ujVqxd+/PFHxfFs3LgRYWFhaN68OT788EN8+umnqmMzufmwEC0mg4mJiYmJJkxL18TE5KbE
Xg/ITz/9FFFRUYiMjMTgwYNx+PBhQ/Zriq6JiclNybRp07B161bV5eHh4dizZw8OHz6MF154AbNm
zTJkv6bompiY3JTYq9MycOBANG/eHEDNBLdRKciGxemyqA+peyYmJq5D71RTQEAAiouLJe/5+PiI
CRmOsmbNGowdO1bXmARcIroAcP33czbveQXZ9let9KsdUhmprYh1ofyE+H/2pdrOpifO1fpZMs+e
sdnembwLOJFSjM5j2JXHlAgLCZS8jgiWdqXt3DpS8rpDM2kHVgAIbNJZ/H/FK2/huUVzHRoD/b0F
6O8vQB8HGqVjkv75WcQ8WJtOKf9eAvT3o7+b8J18LG0BAA1LKsVl1eevAgDK80oBAJeP1mZsle6v
6WJc/HPNmNZe3oPpvsNwstg2q0uJTv7SJAT/obXjbt63JmnEt3vNOk1CmovLhOtMuLaE60o4tu+8
+inGza4pfiM/jkrHjxel48o6pvT1IRxbAfoYOwJ9PwHSewpQvq82vrkD/SfVXvvyY3Am74KmsQC2
9xRge5zmDfhc8/YFiouLceszIZL3flulzVLdtWsX1q5di7179+oeF+BG94KS4OpFTTyMwtEbkBZc
rShtQ0nc5T8AAjzHJPPsGcXvRgsQLfTCjVpG8lFG8lHp11C8uYXzKoieb/d2ohAKwug/NEwimJ38
29kIqhJycRbEG6gVdEHky/NKReEXfggE4RIEjT62wjHt3DpSciwjgsM0X1dKx1V+TIXjeqH8BK5W
/mVzbAWRFI4xfaztwbueoygJJy96BNsdHD58GDNnzkRSUpLdkrG8mD5dN+Bjaav6p0Rgk8424mu0
8ALqIiEIhVwkaIEAIBFeryArmoQ0l4gvUCO8gvg2ae9nI772OFmcKxHf4p/PiOJbuj8bpfuzcflo
rkR8AanwNiypFI93YJPOsDasSTvu0CzaaeJLQx9TQHpcAemxBWwFGLAVYaU/o/A0Y8ZV5OTk4N57
78XGjRttCjjpwS2iq8XKVbJKAHWhoWkR0cTh/TmDwUNjVIVVgCXARglvcA9f5hgctdAAbVZvv6Ca
QuVarV65+ArQVu/lo7mi1Vt9/qqi+N42bKzkh80Z4mvvBw0A2kc3URRfewLMC+9nIgeE2b2vjLZ2
3SG8Dz30kJgl2a5dO6xduxYffPCBWP9hyZIlKC4uxuzZsxEdHS0pRaoHlyRHWCwWVBRcsr8i1H26
gDa/rrP9T2o+OsBWJO0JrhpKN4vc1yv38yr5eLVe2LzfWa+vF5CKJ2DrUlCCx9cL2Pp75b5ewNbf
C6hfawKOHlceH7qAvXkCPTh6DRl5bwHqcybzBnyueyLNYrEo+nQ9IRfMo9wLzvBB1Qf/k5Lla8/q
VbqBnfF4rMXqbRLSXNHXC0gFEzDO5QDY+nsFy1ewegFI3A48li9Qa/064sZRQm75ArauB0DZAnYU
PZ8V0HNvAbb3l6e6GYzGoyxdLTOtAF8Eg1YciWBQsvoEWFaufGaa9eNjz+p1psULaLd6gdrv6Uyr
F3AsygHQZ/kCjkWO0NgTabVHfCXrV46SNcwSWp6IGKPvLQH5Pfb2xIx6benWO9EFnOtiMFp07YUC
qQkw69gAxj8Sy/F0lwMgFV+5Be1K8RXIPHtG89MGy8fKI8IslAQXcJ3oAtL7zBRdI3ZSj0QXkAoO
r09XSXQdib1UEl9HhBcwNgZVgEd8lY6DmtUL1IovS3gB5/p7Abb4AvoEWCs8E8c8IqwmtAK8P9RG
uuCEe80o0R23Wnpt/jDvTN0R3aqqKvTt2xchISH4/vvvJctSU1Mxfvx4hIeHAwAmTpyIxYsXS3fC
IbqOioojogtovzicJbpGBbsD/McJcI7wAnzHxBGXA8Anvka6HIC6I74AnwA7Cmu8zhZdoOZ+M0UX
wKpVq/Dbb7/h8uXLYsdWgdTUVKxatcrmfclOnCy6gOf7dY0SXQF7x8vdwgt4vssBcJ34As4VYAGt
QszjGlHCGZPNRogjr+hu3boV8+fPR1VVFWbMmIHnn39esry4uBjTp0/H6dOn0aRJE6xdu9ahllZK
2A0XyMvLQ3JyMhYtWoRVq1YprqP3ADkrc6YuIoiOHHlssyBU9LHzsbQVRSCwSWdRBATBE4Sgc+tI
yU0WERxmiPAK2xDEV9hH59aR4r47NIvGhfITCGzSWRyrj1+t+HoFWVF9/qpE7IAa8RVEsXR/tiiW
gvgKYmpPfE8W50qEV/i8/9AwUdSb9+0gEXugRnzFGF/Ungth7GUkX/wxuVB+QvIjQx93+rg4A2ds
u75GFVRVVWHOnDnYvn07goOD0a9fP8TFxaFbt27iOkuXLkWfPn3wzTff4Pjx40hISMD27dt17deu
2j399NN47bXXJNX1aSwWC/bt24eoqCgEBwdj5cqV6N69u816LyW+Cq/ymq61sYOGIHZQTbvtuii4
eiZEWKgJLr3MnvjKhReARHzVBED4Pjw3mGDdqIUM8YivgKL4/k/UnCW+wjK94usVZK0NNVMRX0D5
R78/wmkAACAASURBVE/AFdavVuxdC0ZZuX+dvIa/MssN2ZYjZGRkICIiAqGhoQCASZMm4bvvvpOI
7p9/okFCxYAALp06YKsrCxcuHABgYHaw+WYivfDDz8gKCgI0dHRSE1NVVynT58+yM3NhdVqRUpK
CiZMmIATJ2xDUxYvXiR5re/hmo1RlpsrYQmu2nq0ADcsqZQILwBVq5cWPketXvpGo/9XEmAl8RUE
J/vSQdHqFcZYRvLhY2krfg+5+JbnlYqP/bziC6gLsJr4CttiiS8ACHmOSuIrWQFS61d+/AXcLcCO
3DNGuhVadPJGi07e4usTW0sM2a49MZd3cg4JCUF6erpknaioKHz99dcYMmQIMjIykJ2djby8POeJ
7r59+5CUlITk5GSUl5fj0qVLePTRR8Ve9ADg61ubUjpmzBg8+eSTKCoqQkBAgOZBAfwpi67gTN4F
7kBwQUxcgdz65bV69bgbwkICFW84lgDT4styOQAQhUpJfAUNc0R8AfvWL8vlIGwXkIqvb/d2ot9Z
SXwr/RpKfvzsuR6EYwIYJ77OMjw8JWnIHn1HtAdG1L4+sTVDspyn5OyCBQswb948REdHo1evXoiO
jtbdaJQ7ZGz37t1YuXKlTfRCYWEhgoKCYLFYkJGRgQceeABZWVnSnVgsuHaNz5ITcDT11V0piwKO
TqbJJ9J4LV01jCiTCdifkBTgOZ5qP1RaIh1Yk20A/4QbwHY9KGXAqcX4Auw4X0BbWjuNowLszCc8
V4mtURNpT30lrZUgj4pIS0vDSy+9JHaPWLZsGby8vGwm02jCwsJw5MgR+Pj4aB6bQw5V4ZdBKAjx
+OOP48svv8R7772Hhg0bwmq1YvPmzZoH4wj24gzlqFloWnGWX1cOLSw0cl+nks9X7nJw1Opl+Xl5
jqea71eT5SubbKMWabZ8AVsBllu99GcdtXwB5Uk3wH3Wr6PUFatWC3379sXJkyfFjtiff/45Nm3a
JFmntLQU3t7euOWWW/DRRx8hNjZWl+ACLkyOcMTSVXMt6A2Dcqa16wxLV01w5cgFGLC1fPUUhweM
CRnSavmykisA/ZavgFyA1eo+OGr5AnzWr73kFkB7aBcPniKwrrJ0ASAlJUUMGXvsscewcOFCiVH5
f/3f5g6dSosFgt69uyJNWvWiC18NI+troiuEdlW7nYxOCK6vIJLY098neVucPS4aq3eZqT4AvYF
2F6xHU8VX3dNiBmFK0XXHbhMdC9czeQqbchj5QKeIbqAcdauEaIrIBdfV1i9RmX8eZr42kMuvIBx
4gtoT7hwJPTP0zBF14id/E90AXa1LVbEgieILuA8F4ORoivAEl9WnYu6Us1Nr/gCxgkwy+oF3CO+
roqzNRpTdMGuvQAAc+fORUpKCqxWK9avX4/oaGnIFC26cugJHjV4mjN6gugC2l0MvKKrFC8qQN/Y
NLzi626rF3Cu+ALOt36NFl9AX50HvREo7sAo0V2d9qDkPSOKoxuB7toLycnJSExMRHJyMtLT0zFv
3jykpaVJd8IQXR48SXQB11i7SqLLElwaV4tvXfGfaxFfwHEBtudyADxHfD1FeJ1R2tFTRddu5wih
9sKMGTMUB5yUlIT4+HgAQExMDEpKSlBYWGj8SOsIah10HUVpUowXoTeYXKTpDrmAVIRo8acFi6c3
nVLXhLCQQN1dO2hBkPcYs9cwU6mTrtAwE4BN00x540x5Nwt5B2MWdOcKAbqDBQDJ+ZF3Lpb3cROQ
nxelzhaAencLT0O4RvR2oKhr6K69oJRKl5eXh1atWknWW/HKW+L/g4fGYPCwGK4BGtFWxNnwxOwK
RV4AiOmuQI0gCDeWUOzFSOg4UoHyvFJRcJTqCPBkU2VfOshVv0FvfLQ81pfett4MN2qxDfJ4XwFa
eO1ZwHRKsQAd4yvsB5DF+arUd5CfF0B/YSOj49d5oYU277+XcPaPyy4fA2C/yhhQU0nx6aefRkVF
BVq2bKlaEoEX3bUXANsqY0rpdc8tmqtthArosSCNwJG0YE9BLr70DQ4YL75y4QX0PcoqJVpoSbIA
lBMt6OI6askWgLoAA8oirCS8wnbo7V4+mqt4bhw9L8L3ZhU2MkJ4C7Ir0KZDI4c+I+xLTkjPZgjp
2Ux8nfHFWYe3qwWeKmMlJSVISEjAjz/+iJCQEFy8eFH3fpnuBaH2QlhYGB566CHs3LkTjz76qGSd
4OBg5ObWPsbm5eUhODhY98CAumHlKqHmYpC30raH3MWg5quVo+SXFJC7HZRcDkqPt3RzTHe5HABb
twMgdT3YczsAto0zeVwPLPeDAO2GEISW5ZJguRwAPreD/LywXA4CaufG3Whtb6/GyQPnkfLxf8U/
OXSVsUaNGolVxmg+++wzTJw4ESEhNa1/WrZsqXtcTNFdunQpcnNzcebMGWzevBkjR46UFLsBgLi4
OPG9tLQ0+Pn52bgWAOlFz4OnC66RnUzpCROlGgo8CDewcBPLX8vhEV8BJb8ib7dcTxLf7EsHFcUX
sPX7egVZRfFV8v0CbAEG2IJLIz9HSr54AaP88ICtn9eR82KUlas2FiPo1CcIY2b0FP/kKLlGz56V
WtknT55EUVERRowYgb59++L/b/p3tcumsvjB07FsnJyYiIiEDTpk2xbt065jZo36bachbuqsjv
KEplDAHHfbtCSUMB3+7tuKMYBOibWi4QLLeDp/t7AX63A6Bcz7fmy9b+a8/1IEc4fmouCF6U3A2A
9Lw46gpypbtBD86a5LPtovG55BVPlbGKigocOHAAO3bswNWrVzFw4EAMGDAAnTp10jwubtGNjY1F
bGwsgBqxpUlMTHRop55uxWqFNaGmp+SjXHj1oCbA7hJfI/y99OfVxJceg5rfV6mgOiCdeFPz/QLK
Agzwi7BceIVtsvzwdFlPeXEjRwobuVt43YHcNZqbmyu6EQTatWuHli1bwtvbG97e3hg2bBh+/13
XaJrN2TMRB17F6WaBa7m2+V1Myj5dtUecVkouR+c5Ve053YwKnRIcDvoCTcDlF0PALjcD/LzQ7sh
tJwnV7gblIwFV/h53RnKRlcZu3HjBj7/HPExcVJ1hk/fjx++eUXVFVV4erVq0hPT1fsjOMILksD
PlqUrHs7jtQcdUXnUsCxegyAsQkT9lJaHUVJEOQCoqd4iyuTK2hceY4A++dJK644F4DxtagFeAsd
jQldZEhyRErWK5L3lLZrr8oYAKxcuRLr1q2Dl5cXZs6ciblz9UVi1RnRZYWJuVN0AecWOGfd0Eo3
s17hFWBlUAF174YHtFc3A/g7O/Okc2sVYaUnnLp2HnjuFVeKrjuo86LrSJUlV4ku4Dzh5bGijBJe
wHPEF3C9xUVjRI1kll/enhB7Ql0NZ9QuAWyPvRHpunVWdMvLyxEbG4vr16/jxo0bGD9+PJYtWyZZ
JzU1FePHj0d4eDgAYOLEiVi8eLF0J/87AFonkoywcgHn5pk7Yu0C7nMzsLKoWCFOpvjWoHbeAOcV
qWfhzDKe7ioadVOLLgBcvXoVVqsVlZWVGDJkCFauXIkhQ4aIy1NTU7Fq1SqbQjiSnVAHwBHhtZd5
5mgtUVeKLqDN2gXcK7wCagJ8s4gvwH/+AH73A6DeD8/ZhesBzxBee/eKUaIrf7ruHjDWI0TXbsiY
1VpzAm/cuIGqqirFLr+OfBE6VIdnvbqCUmowbwgZK3ZZa/xu874ddLkZaGGmBVgeckbvU0v9AHuh
ZkCNCKjF+QoYnWJM74sVcgaoh50B0poPgDT+V4A+p0rQ59leIST5tulQMi04I5zM0XulvmHX0q2u
rkafPn1w6tQpzJ49GytWrJAs3717N+69916EhIQgODgYK1eutAmpsFgseHj+SPF15IAwRA4I1zVw
Le1KnB136CxfIWC8xaulXqwW69coyxdwX81kASVR4LV+AfsWsICeokeOdIUGPMO/KxS8CWjmBwDY
+vEfLrN07RW8+e677/DPf/4TXl5e8PLywmuvvYaRI0dCD9wTaaWlpbjzzjuxfPlyDB8+XHz/8uXL
aNCgAaxWK1JSUjBv3jycOCFNflDyr+hFS5sSVwR763EzAJ4vvAKO1owFXOt6AJzzGAzYF1/AcQEG
1EUYYAsxK6ab5V4A9PXHc5Z/11XuhaqqKnTp0kVS8GbTpk2SgjdXrlxB06ZNAQBHjhzBPffcg8xM
7bXBAQeSI5o3b4677roL+/fvl7zv6+sruiDGjBmDiooKFBUV6RqUPTwx7dcRWDV3WUVx1JIn6AB9
wFbsWAVatOJozVjA+EQLQeiERAu1WgJag/zVREVItlBLuACk9R6A2sQLefKFPDmG/qOhkzLkf2ro
cSvIcdajv5E1TByFp+CNILgAUFZWZkjBG+ZZuXjxIho2bAg/Pz9cu3YNP/30E1588UXJOoWFhQgK
CoLFYkFGRk3FdyW/r1F4uuBq8VfJU4TV6jMA7Pq7tJ+XLk0ooOTn9R8apsviVfL9usLvC7DTjAF1
/y/Ab6XZK+Op5vcFaq1f+TwG/cMq9wEDkNTjkMOyhtU+I8BT2c4RjEoVdlap1IxfDuPXvUdUlysV
vElPT7dZ79tvv8XChQtRUFCAbdu26R4X071w5MgRxMfHo7q6GtXV1ZgyZQr+/ve/SzI23nnnHbz3
3nto2LAhrFYrVq1ahQEDBkh3YpB7wZ7gutu1IKBlNhwwbkbcHe4GGj3tagDX+H5peK4NXlHgcT0A
yhPJapOpPF207aEkuJ7S7FVAOMZGteuRtwgLtEZItvvVV19h69at+OijjwAAGzduRHp6Ot5++23F
bf7888+YMWMGjh8/rm9srkqOMEXXeF+go8H4POJrlPAKONKiHNDn9wX0C7BRqD3Z8AowoC7CAlo7
awOe13dQICwk0GWim5aWhpdeeglbt24FACxbtgxeXl6K3SMEOnbsiIyMDLRo0UL72OqC6PK4FDyt
3bQrJ2H01AHQKrwni2u308nffnF1T7N+AdcIsCPiC7BDKe2JMA9qFf54Sqa6KsvTqG7A9kS3srIS
Xbp0wY4dO9C2bVv079/fZiLt1KlTCA8Ph8ViwYEDB3D/ffj1KlT+sbmKtEVOnOqXWxq8Ppw67Lo
AsYKL+Aa8aWFl8aeCDvb+gUcF2DAuSLM8umz7gmeZCI1MeYpoeqJRaRcJbqA/YI3K1aswIYNG9Co
USP4+Phg1apV6Nevn76xuVp0BVgXmqOTZZ4muAJ6rF2Az+9npNULOC6+asIr4KgAO9P6BdwvwPai
AOwZJVpT6eV4cmq9K0XXHbhNdI2kroku4DrhBZxv9doTXgGWAOtxP2ipNwA41oXESBHmDb9y5KmQ
Jca82Z2eEvt+U4suT8EbAJg7dy5SUlJgtVqxfv16REdLLwBnii7PzVBXRBfg9/UpPVLWFfEFHBNg
I5IuAOMEGDBGhB2NfXXUNceL1u/prPvqphZdwH7Bm+TkZCQmJiI5ORnp6emYN28e0tLSpDtxkuh6
suAC9sOMHPXz8YYZuVN8HRFeATUBdtbkG2CsAAs4IsRGJRs4a44EcN8TpFGie+2a9Dr39rbWDdEV
uHr1KmJjY/HJJ59Iais88cQTGDFiBB58sEZUu3btit27d0s6AjtDdHkvcE8WXUDbBIsWlwPg+eIL
eJ4AA8Y0Q5UnUXgqnmDI1HfRtZsnKC94Iy9mo5TVkZeXZ9OGne47H9EnCJ36BGketCtTBd0J3VGY
RqnJJV3lCqgVEnk2GwBJRhtgW+VKLatNEDlafAUxlIuvIJ6Oiq9aKJojmW901pvwvSS9xCAVYMkP
FNUZGFDOggNsfxDtibAni60j95MzBPevk9fwV2a54dv1VOyKrpeXFw4dOiQWvElNTZUUvAFsSzsq
tTZW6juvBXdfIEZjL0WYJbyArdVbX8RX/hleAWalHQvfjVeA6RRkwFaAAe0i7C60GizOvJdadPJG
i07e4usTW0ucti859qqMAfbnrByFuyIGXfCGFl15G+O8vDwEBwfrGpQa9U1wBXiEF1B2NzgqvoBt
br+niy/9Obn7QS7AvHUfAP0CDNgedzURBlwrxEY8Ddale0gLVVVVmDNnjqTKWFxcnCQ5Ijk5GZmZ
mTh58iTS09Mxe/ZsmzkrR9Fd8CYuLg6JiYmYNGkS0tLS4OfnZ+Na0MvN4k6wh5rVC/CLL2Br/Rol
vkCtANsTX8BY65fel6OFdwC2AAOAj5/MR67ghgCg6IoQcIU1rPdeqU9Cu2fPHuzZ87PqcrrKGACx
yhgtuklJSYiPjwcAxMTEoKSkBIWFhbo0jim6BQUFNgVvRo0aJcnYGDt2LJKTkxEREYGmTZti3bp1
mgejhJaLyBMuHEerJvFWzmdZvYAx4gvYdjioPn9VMjlVnlcqmbhSs37pCTBnWb/0tuT7MUKA6Qpo
gH0rGGC7IgSMtoY90XXgToYNG4Zhw4aJr195RVqKgKfKGO+clSMwRbdXr144cOCAzftCP3iBxMRE
zQNgUVcF1xXwii8Am7KRAp7megDqvgAD2kUY0GcNK7XWsYen3C9SI8WYJ1t7ZTCV5p6U4JmzcgTj
qhwbSF13JzijNqgaSvVb5TjD9QDwWb8s1wNgvPVLf9ae/5ceE6BfgAFlKxiAQ/5gGnmvOHs4Irye
ILiuvFfkyOejcnNzERISwlzHiDkrj0sD1iO4df0icmXAvCPlBI1OtgBcE/NLY2QKsoAj7c8FeOra
CjhaH4HGE+JtWbDuE6NKO1YUXJK816hNM4erjNHJX2lpaZg/f77uiTSPEd36MAGg91fbGbGcRgqw
uxMugLorwID9fmWA4wKsJ1XZU9PjjeqRZk90AftVxgBgzpw52Lp1qzhn1adPH31j8wTRreuCa8Qj
kquC57VUsdJi/QLuLS/Jg6PiC9gKMMCuBSFgpBXsqAB7SnF/gK8eiStF1x0wRTc3NxePPvoozp8/
D4vFglmzZmHu3LmSdVJTUzF+/HiEh9e0VJ84cSIWL14s3QlDdG92wXVnppKrBNie+ALGtBQyBbgG
Rwu2O3oPFWRXAADadGjk0OcAvnKnN7Xonjt3DufOnUPv3r1RVlaGW2+9Fd9++63E55GamopVq1Yh
KSlJfScqonszC66npYXWNwEGjC2+I6BHgAHnuSH0iq8r7iXe+tL1XXSZ0QutW7dG69atAQA+Pj7o
1q0b8vPzJaIL2IZUuIK6KLieJrQ08htULsJKIWg84WeOxv4CYEZAAHxREICtgPKIsFrkg9J+6P3L
oyCEsQsI38leNAQASVdkAMxoCHkkBH2e5J2SAfXoBqM6+3oS8h94T4Hbp5uVlYXY2Fj88ccf8PHx
Ed/fvXs37r33XoSEhCA4OBgrV660KYpjsVgwekYP8XVEnyBYWl3RNXBPnXlVwpPFlhc9Fc8Axy1g
QHsUBMDfYFNv5wtA3foFnOeCYLUnArT3iHPmfaV030QEh+HkgfPIPHBefG/rx38YYule/2c5L3G
Ua09wtLlEt2ysjIMHz4cixcvxoQJEyTLLl++jAYNGsBqtSIlJQXz5s3DiRPSC0DJvVBXQ8McEVxP
EVvWsdYyRkebKjra6QLQFoYGOL+9vD1c7X7QK76udDeoiS5N59aRGBO6yO2iW1RUhAcffBDZ2dkI
DQ3FF198AT8/P8k6vE0ebMZmT3QrKiowbtw4jBkzBvPnz7e7wbCwMPz2228ICAio3YmBomsKrmNo
Pc6OjN/ddX8Bx6xgwPkirNf6BRyLA3aG+LpCeD1VdJ977jm0bNkSzz33HF599VUUFxdj+fLlNuvZ
a/KgODaW6BJCEB8fjxYtWuCNN95QXKewsBBBQUGwWCzIyMjAAw88gKysLOlObiLR9RSxFXB1by9P
cEMAjosw4Bwh9iTx9QTh5bF2jZpI0yO6dDOGc+fOYfjw4Th27Jjq+mpNHhTHxhLdX375BcOGDUNk
ZKSYb7x06VLk5OQAqAkefuedd/Dee++hYcOGsFqtWLVqFQYMGCDdiUGiW18F15llAN3VVlzA1VYw
wC/CgGuEmCW8gDHiq7UdkauF15Wiu+3jr7Fn/z7xvZffX8m9XX9/fxQXFwOoMT4DAgLE1zTyJg8r
VqywPzZ3JUfUN9F1RodXOVqF2JW1LJzVfgjQ5gsGjBVhAUfE2J7oAsrCC9ifdKuLVq894TVKdEu3
HJe81/yuLpLt3n777Th37pz8o3jllVcQHx8vEdmAgAAUFRWp7k9o8rB8+XKbJg82Y3NnRlpdqYhk
hOAa3clVa48uV+POHnCAfhEG+IXYCFxp9Xqq8LpKdFl07doVqampaN26NQoKCjBixAimewEA/v3v
f8Pb2xt/+9vfmOt5ZJUxJTw1htCe4DqrbbZSDCYLLWX/jEC+T/p4qcUGy8WgQ7No22wsWRFxeUww
YBsX/P/bO/fYqKo8jn9L6G4tffCIA0tbCQINlgodXBjZ3YqExdjKw6QNKwaolhI3JlhMlqCu2UTj
GhJk3XGNxoRH2PCH7hJNGgqb0JW2SMsrlvJo2PootsNbaJGHTQfm7B/NLTN3zj3n3Ne5t+35/AXz
uPObX+/9zu/+zu/8fkBybTCQ3B1Ng9akXUOmEN9s60qyrzdyI+F7xK7cSajzjfdFRsrEhPre+Npe
fV0vr6Z3KNbz0li6dCl27tyJjRs3YufOnUlVW4DYkAcagybSHYxRrluCa4SoAPupdaasMfSAvUhY
gxURa1gVZKMUg8ZwiXid6jJmJ9K9fv06li9fjs7OzoSSsQsXLmDt2rWora3FyZMn8cILLyQMediw
YQPfNiW6bEQadNAQFVyj2lY9rDZ/ekTEV1adtJMbSbwSYcC+EDuBrMoGrxfX/CC6bmK74Q3An5bp
RMMbv4muHcEVFVoWIiLshvg68Xdwqt7ZaREGnBNiwDkxpomthtndbIOhqmGoiy4zp5uamor3338/
oeHNokWLXJ+W6Res9FdgCa4TYks7lpEAi0wd0ERNVHydyOnR3m/ka7M5YaF8MJCUEwbE88IAPTes
QeshwYOWt3Wb+PyuHn1+1206Ilc9nSIhE9sNb+xOy/RqgccNZAku69g8AXZCfN1YTBEVYidEGEiO
8h5My0+6/aaJMMAWYoAefQLsyNis4Bp9Bs0uJ5CxqOb0OSUr7WMW4eqFc+fOoaWlBaFQKOFx0WmZ
+7aeHvj31NkBTJsdsGqz55jZBCEitrTbXxZG0Yn+81gzt+yKryaIbqZ99Md2Q4QBejRME2HAvBAD
fDF2CpE2kX7k2jc/49q3vV6bIQ2hv8itW7dQXl6OcDic0GFMQ2RaZklVoUUTBwei+UUNs0LLey9N
iFkCzEs9+El8NdwQYUCwRA3WhBgwjj6daD3IimzNdibzinHTHsC4aQ8M/L/9Pz0eWuM+XNGNRqMo
KyvDypUrqbVqTkzLHEopBhHsCK7IMZ0U4HjRYv2NZIqvhkwRBugpCSBZzPSTlPXwxNguopMoFMaI
dBkDgJ6eHlRVVeHMmTNISUnB9u3bk9og6GGKLiEEa9asQUFBgWGHsaVLl+LDDz/Ec889h8OHD2P0
6NHC+dzBCC21YCbK5Qmu0aq6HtZF5IQAW41+44VPdsWJLBEGzEfDAF+MAXr1BA9eCsHK5AmZi2h+
ZNOmTVi0aNFAl7FNmzZRu4xVV1ejtLQUu3fvxt27d3H7Nr9PuO2GNwB/WqboCHa/TS8Vac4BJIuu
WcEVFVoeItEM65bSjYmzGn7YxWS3aZHVhVKnfmjNYHQuWJ2zJrPv7p7qDkdKxiKb6xIey93we0e7
jN24cQPBYBDff/+9OdtkbY7Yd+6v3F9PP4muaH2unVpRwJ0LToMnwsNZgAFnOse5JcQ09OeKmZSB
mdHuXs9Wc0p0/3HLWj+rnXgsb/t/6ejXcZOnDiBl156CQUFBWhtbcVjjz2GcDiM9HR22kiq6AL8
2xa/jIt2UnTNFOfrEbndFF2hZl2kVgQYsC/Cg0mAAfdEOB4ncv68RTIzP6qyh1k6Jbpn/rAt4bEZ
n61xtMvY8ePHMW/ePDQ1NWHOnDlYv349srKy8PbbbzNtk15PIrvoWjYiFxZLcK3k9GjvoQkxK1LS
X+jxF60Ti3AA/eLVi51XIhz/uSwBZuWEAfaATyOh058zblUVWPnxHMoL3Pv37zd8TksraF3GAoHk
Etfc3Fzk5uZizpw5AIDy8nJq3leP/4v44vC6w5GVJuVmohYrgmvmWHohFhVhIwEG6NNnNaxUQtAE
z8sFOV4EHP89aOcHb8oyIC7GZrGzVdxPqT4vEOkyNmHCBOTl5aG9vR35+fmoq6vDjBkzKEdLRHp6
QcPqbamsP7ZTi2hW+8DqEa3pNFOGZGXVG3AnFQH4twGSle2pTsyYcws7KSEZfpeVXmAh0mUMAFpb
W1FVVYW+vj5MmTIFO3bsQHY2exMMV3QrKytRW1uLQCCAU6dOJT1fX1+PZcuW4eGHHwYAlJWV4c03
30z8EIroAtZ+Zf0kum4LrhPF8xoiYjyYRVjDrfPDTl8AJycuW8Gpxkeyrj0/iK6bcNMLL774Itat
W4fVq1cbvmb+/PmoqalxzCjWZgmvUwwycFJsWcfUCzEvJWGUjmDtkKPdImtCzJsNZyRWonXCeqye
N3YbsfBSEDRkrXv4SWwBzddDN48MCIhucXFx0nRfPVZ/PYb6ohoPM20E9fDaCsZjtOffihCLiDAg
vjAHsPPCAH+BDhBv1OM1mp1eTY0eSimcwYrthbSUlBQ0NTVh1qxZyMnJwXvvvUcdQbzr7/8d+PfM
xydj5uP96Qgj4R1q0a5IiRhPcM0Ircj7aGLME2JWNEz7jnajYcC6EGv4cQX+2/Md0oTXr0IL9F/L
kdM/4cih844f24lJzm5gW3Rnz56Nrq4upKenY9++fXj22WfR3p6c4/vzX/5kavrBUMdMpYJVsbV6
XL0Y+0WIAXZqAmBvXzbCj6JsF78PfY2PbHMLs5BbmDXw/6P/cl6A/YRt0c3MzBz4d0lJCV5+p/Nl
TwAACEBJREFU+WVcv34dY8eOTXqtfhCehpVo1++YLXC3Op1Aw0zvUF7vVhExNrI3fjiiHpYQA/1i
bOQ3u2IM8NtZimDnfJQR2fpp8dEI/giso/KMMUC04U04HMbWrVtBCMHatWtRXV3NPbZt0b18+TIC
gQBSUlJw9OjRgS1zRpgVXiMGY4rBLG6Ng+G9z0iUrYoxS4gB61ExwBdjQEyQAbHFK69ysSL4Pbrl
4SffijS8OX36NLZu3Ypjx44hNTUVTz/9NBYvXowpU6Ywj80V3RUrVqChoQE/vgj8vLy8NZbbyEa
jQLob3ize/dufPzxxxg5ciTS09Px6aef2viqyQzmaNct3O6Izzo+TZB5YmwlKgb6xZgVFQPsOwoz
ggyIl2kN58Vfu1iZOegFNTU1aGhoAABUVFTgySefTBLds2fPIhQKIS2tf/bT/Pnz8fnnn3MnAkvb
HNF2fW/CY07s/Qbc/bXWnyB26nT14qEXGr0wGQmZFcEVHQnOGwHOQ3TkDG+CAq+m2Go9cTyiW22d
XIeQIdZ+XjQDxOrfqx/zJE63X+MW4WWvvvn/vabjY42vDl79iyWLVuG5uZmpKWlYeHChZg7dy7C
4TDz2J5tAzZKM9DwS7SrX3Fuv3RS+m4iEURF1ur7jMRZNEK2GhkD/YLMWoRkRceAWIQMiEXJ8Yic
y1bOFbNCbXbQqBUu/tB/p/urSamm3ie7LCz4y0kI/vL+ubr9ZmPC86yGN/GkpKRQp+FMnz4dGzdu
xFNPPYVRo0YhGAxixIgRXLt813tB5XaN4UW5VsXWLLzPoYmyiCCzcth2UxUAX5AB86KsYbZPgmjA
YaZKIx7RhvNWrh2zYsvCzbTCN93s68Vuwxugf8duZWUlAOCNN97AQw89xLXLU9E1s6hmJ9q99s3P
CTOY3OKHn1qYF19jYyOeeOIJVz7bjOAevXIWcwPTXbGDZ0u8IDd/14p5U2Y5Isi86BgwFuSGpoP4
bekCAPx6alFR1jBKY9DOk6NfncTc3xlPq4iHN+NOgye+NOGVdb3Q6P9en3ny2fGINLwBgCtXriAQ
CKCzsxNffPEFjhw5wj22NNF9MC3fcHSM2/W7177t9ewk0rhFLqCx8aBromuGY1f+h7mB6a4Uj48p
Zkcu8YJ84HQDCroTy3D0UbLbggwADU1fYf5vipmv4ZW7xcPamUdDuy6OHTo1ILq80rh4RASYt9kI
uJ/j9cP14jWvvfYali9fjm3btg2UjAFIanhTXl6Oa9euITU1FR999BGysrJYhwUgOdI1I7xmot2h
mGJIy81OEpPMgjxHKhd6O3vQ3e1Ozk9UyI3EWTRKBpxLWZDbUVt5ZA27wpw+chxz+zTA3kINiPU3
9mqnZ0fkalJel7ZO4gfGjh2Lurq6pMcnTpw4ILhA/92rWaSnF4yEd7DCWky72ttuGOncHT0y4UIe
EUi31egm+9eThFIMftka2X2wA703jcWfJspmcslmBPnuT71UcRZZ2APE8skAu28FAPwCmchImciN
lK30saA1EjIKYK5k9TG/h8Ie0krGFAqFQhQnSsb0jBkzJmnkjhdIEV2FQqFQ9MMvKlMoFAqFYyjR
VSgUCoko0VUoFAqJDCnRraysxPjx4/Hoo49Sn6+vr0d2djaCwSCCwSDeeecdx23o6urCggULMGPG
DBQWFuKDDz6gvu6VV17BtGnTMGvWLLS0OF+nLGKHDH/09vYiFAqhqKgIBQUFeP3116mvc9sfInbI
8IfGvXv3EAwGsWTJEurzbvtDxA6Z/hhWkCFEY2Mj+frrr0lhYSH1+QMHDpAlS5a4asPFixdJS0sL
IYSQmzdvkvz8fNLW1pbwmtraWlJSUkIIIeTw4cMkFAp5YocMfxBCyO3btwkhhESjURIKhcjBgwcT
npfhDxE7ZPmDEEK2bNlCnn/+eernyfIHzw6Z/hhODKlIt7i4GGPGjGG+hrhcrDFhwgQUFRUBADIy
MvDII4/gwoXErlc1NTWoqKgAAIRCIfT09ODy5cvS7QDc9wcApKf317H29fXh3r17Sf2WZfhDxA5A
jj8ikQj27t2Lqqoq6ufJ8gfPDkCOP4YbQ0p0ecTPcystLUVbW5urn3fu3Dm0tLQgFAolPH7+/Hnk
5d3vupWbm4tIJCLdDln+iMViKCoqwvjx47FgwYKkGXqy/MGzQ5Y/Xn31VWzevNmwI5Usf/DskH29
DBeGlehq89xaW1uxbt06wyYWTnDr1i2Ul5cjHA4jIyMj6Xl9BOHWBhKWHbL8MWLECJw4cQKRSASN
jY2or69Peo0Mf/DskOGPPXv2IBAIIBgMMqNIt/0hYofM62U4MaxENzMzc+AWs6SkBNFo1JUdKtFo
FGVlZVi5ciX1RM3JyUFX1/1tqpFIBDk5OdLtkOUPjezsbDzzzDM4fvx4wuOy/MGzQ4Y/mpqaUFNT
g8mTJ2PFihX48ssvsXr16oTXyPCHiB2yz49hg0e5ZNfo6OgwXEi7dOkSicVihBBCjhw5QiZNmuT4
58diMbJq1Sqyfv16w9fEL5Q0Nze7slAiYocMf1y9epV0d3cTQgi5c+cOKS4uJnV1dQmvkeEPETtk
+COe+vp6snjx4qTHZfhDxA7Z/hgu+K6JuR28nucGAIcOHcKuXbswc+ZMBIP9zUjeffdddHZ2DthR
WlqKvXv3YurUqRg1ahR27NjhiR0y/HHx4kVUVFQgFoshFoth1apVWLhwIT755JMBO2T4Q8QOGf7Q
o6UNZPtDxA4v/DEcUL0XFAqFQiLDKqerUCgUXqNEV6FQKCSiRFehUCgkokRXoVAoJKJEV6FQKCSi
RFehUCgk8n/zZoFnoRZggAAAAABJRU5ErkJggg==
"></p>
</div>
</div>
</div>
</div>
</div>
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="usersmglernercodingmatplotlibexamplesimages_contours_and_fieldsstreamplot_demo_features.py" class="anchored">
/Users/mglerner/coding/matplotlib/examples/images_contours_and_fields/streamplot_demo_features.py
</h2>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[5]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre><span class="sd">"""</span>
<span class="sd">Demo of the `streamplot` function.</span>

<span class="sd">A streamplot, or streamline plot, is used to display 2D vector fields. This</span>
<span class="sd">example shows a few features of the stream plot function:</span>

<span class="sd">    * Varying the color along a streamline.</span>
<span class="sd">    * Varying the density of streamlines.</span>
<span class="sd">    * Varying the line width along a stream line.</span>
<span class="sd">"""</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>

<span class="n">Y</span><span class="p">,</span> <span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mgrid</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">:</span><span class="mi">3</span><span class="p">:</span><span class="mi">100j</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">:</span><span class="mi">3</span><span class="p">:</span><span class="mi">100j</span><span class="p">]</span>
<span class="n">U</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">-</span> <span class="n">X</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">Y</span>
<span class="n">V</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">X</span> <span class="o">-</span> <span class="n">Y</span><span class="o">**</span><span class="mi">2</span>
<span class="n">speed</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">U</span><span class="o">*</span><span class="n">U</span> <span class="o">+</span> <span class="n">V</span><span class="o">*</span><span class="n">V</span><span class="p">)</span>

<span class="n">plt</span><span class="o">.</span><span class="n">streamplot</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">U</span><span class="p">,</span> <span class="n">V</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">U</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">plt</span><span class="o">.</span><span class="n">cm</span><span class="o">.</span><span class="n">autumn</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">()</span>

<span class="n">f</span><span class="p">,</span> <span class="p">(</span><span class="n">ax1</span><span class="p">,</span> <span class="n">ax2</span><span class="p">)</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">ncols</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">ax1</span><span class="o">.</span><span class="n">streamplot</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">U</span><span class="p">,</span> <span class="n">V</span><span class="p">,</span> <span class="n">density</span><span class="o">=</span><span class="p">[</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>

<span class="n">lw</span> <span class="o">=</span> <span class="mi">5</span><span class="o">*</span><span class="n">speed</span><span class="o">/</span><span class="n">speed</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">streamplot</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">U</span><span class="p">,</span> <span class="n">V</span><span class="p">,</span> <span class="n">density</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'k'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="n">lw</span><span class="p">)</span>

<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre>
</div>
</div>
</div>
<div class="vbox output_wrapper">
<div class="output vbox">
<div class="hbox output_area">
<div class="prompt">

</div>
<div class="box-flex1 output_subarea output_display_data">
<p><img src="https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/data:image/png;base64,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
"></p>
</div>
</div>
<div class="hbox output_area">
<div class="prompt">

</div>
<div class="box-flex1 output_subarea output_display_data">
<p><img src="https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/data:image/png;base64,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
KioqKh7K/wFtgsnukavsCAAAAABJRU5ErkJggg==
"></p>
</div>
</div>
</div>
</div>
</div>
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="usersmglernercodingmatplotlibexamplesimages_contours_and_fieldsstreamplot_demo_masking.py" class="anchored">
/Users/mglerner/coding/matplotlib/examples/images_contours_and_fields/streamplot_demo_masking.py
</h2>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[6]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre><span class="sd">"""</span>
<span class="sd">Demo of the streamplot function with masking.</span>

<span class="sd">This example shows how streamlines created by the streamplot function skips</span>
<span class="sd">masked regions and NaN values.</span>
<span class="sd">"""</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>

<span class="n">w</span> <span class="o">=</span> <span class="mi">3</span>
<span class="n">Y</span><span class="p">,</span> <span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mgrid</span><span class="p">[</span><span class="o">-</span><span class="n">w</span><span class="p">:</span><span class="n">w</span><span class="p">:</span><span class="mi">100j</span><span class="p">,</span> <span class="o">-</span><span class="n">w</span><span class="p">:</span><span class="n">w</span><span class="p">:</span><span class="mi">100j</span><span class="p">]</span>
<span class="n">U</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">-</span> <span class="n">X</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">Y</span>
<span class="n">V</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">X</span> <span class="o">-</span> <span class="n">Y</span><span class="o">**</span><span class="mi">2</span>
<span class="n">speed</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">U</span><span class="o">*</span><span class="n">U</span> <span class="o">+</span> <span class="n">V</span><span class="o">*</span><span class="n">V</span><span class="p">)</span>

<span class="n">mask</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">U</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">bool</span><span class="p">)</span>
<span class="n">mask</span><span class="p">[</span><span class="mi">40</span><span class="p">:</span><span class="mi">60</span><span class="p">,</span> <span class="mi">40</span><span class="p">:</span><span class="mi">60</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">U</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">U</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">mask</span><span class="p">)</span>
<span class="n">U</span><span class="p">[:</span><span class="mi">20</span><span class="p">,</span> <span class="p">:</span><span class="mi">20</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>

<span class="n">plt</span><span class="o">.</span><span class="n">streamplot</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">U</span><span class="p">,</span> <span class="n">V</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'r'</span><span class="p">)</span>

<span class="n">plt</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="o">~</span><span class="n">mask</span><span class="p">,</span> <span class="n">extent</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="n">w</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="o">-</span><span class="n">w</span><span class="p">,</span> <span class="n">w</span><span class="p">),</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
           <span class="n">interpolation</span><span class="o">=</span><span class="s">'nearest'</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">plt</span><span class="o">.</span><span class="n">cm</span><span class="o">.</span><span class="n">gray</span><span class="p">)</span>

<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre>
</div>
</div>
</div>
<div class="vbox output_wrapper">
<div class="output vbox">
<div class="hbox output_area">
<div class="prompt">

</div>
<div class="box-flex1 output_subarea output_display_data">
<p><img src="https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/data:image/png;base64,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
VljxF8b/A7A8ctaZVA4HAAAAAElFTkSuQmCC
"></p>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell vbox">
<div class="input hbox">
<div class="prompt input_prompt">
<p>In&nbsp;[]:</p>
</div>
<div class="input_area box-flex1">
<div class="highlight">
<pre></pre>
</div>
</div>
</div>
</div>
<p></p>
<h2 class="anchored">
Comments from old blog
</h2>
<pre><code>        &lt;div id="comments"&gt;


        &lt;h3 id="comments-title"&gt;2 Responses to &lt;em&gt;Making IPython Notebooks for the matplotlib examples&lt;/em&gt;&lt;/h3&gt;


        &lt;ol class="commentlist"&gt;
                &lt;li class="comment even thread-even depth-1" id="li-comment-529"&gt;
    &lt;div id="comment-529"&gt;
        &lt;div class="comment-author vcard"&gt;
            &lt;img alt='' src='https://secure.gravatar.com/avatar/21fc3c6fc9ff02ffe6d8dfd12f72f74c?s=40&amp;#038;d=mm&amp;#038;r=g' srcset='https://secure.gravatar.com/avatar/21fc3c6fc9ff02ffe6d8dfd12f72f74c?s=80&amp;amp;d=mm&amp;amp;r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /&gt;                &lt;cite class="fn"&gt;Daniel&lt;/cite&gt; &lt;span class="says"&gt;says:&lt;/span&gt;          &lt;/div&gt;&lt;!-- .comment-author .vcard --&gt;
        
        &lt;div class="comment-meta commentmetadata"&gt;&lt;a href="https://mglerner.com/blog/?p=33#comment-529"&gt;
            December 29, 2013 at 8:47 pm&lt;/a&gt;            &lt;/div&gt;&lt;!-- .comment-meta .commentmetadata --&gt;

        &lt;div class="comment-body"&gt;&lt;p&gt;Your IPyNB class could be made a lot more readable by using a custom JSON encoder, e.g. extending JSONEncoder &lt;a href="http://docs.python.org/2/library/json.html#json.JSONEncoder" rel="nofollow"&gt;http://docs.python.org/2/library/json.html#json.JSONEncoder&lt;/a&gt;. That way, you could store the preamble/afterward as a Python dict and just call json.dumps(..., default=MyJSONEncoder) inside tostring().&lt;/p&gt;</code></pre>
 ]]></description>
  <guid>https://mglerner.com/blog/posts/making-ipython-notebooks-for-the-matplotlib-examples/</guid>
  <pubDate>Sun, 29 Dec 2013 15:48:12 GMT</pubDate>
</item>
<item>
  <title>Histograms and kernel density estimation KDE 2</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/histograms-and-kernel-density-estimation-kde-2/</link>
  <description><![CDATA[ 




<p>You can download this whole post as a Jupyter notebook <a href="https://github.com/mglerner/mglerner.github.io/blob/master/posts/histograms-and-kernel-density-estimation-kde-2.ipynb">here</a></p>
<section id="why-histograms" class="level1">
<h1>Why histograms</h1>
<p>As we all know, <a href="http://en.wikipedia.org/wiki/Histogram">Histograms</a> are an extremely common way to make sense of discrete data. Whether we mean to or not, when we’re using histograms, we’re usually doing some form of <a href="http://en.wikipedia.org/wiki/Density_estimation">density estimation</a>. That is, although we only have a few discrete data points, we’d really pretend that we have some sort of continuous distribution, and we’d really like to know what that distribution is. For instance, I was recently grading an exam and trying to figure out what the underlying distribution of grades looked like, whether I should curve the exam, and, if so, how I should curve it.</p>
<p>I’ll poke at this in an <a href="http://ipython.org/notebook.html">IPython Notebook</a>; if you’re doing this in a different environments, you may wish to uncomment out the commented lines so that your namespace is properly polluted.</p>
<div id="cell-3" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> __future__ <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> division</span>
<span id="cb1-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>pylab inline</span>
<span id="cb1-3"></span>
<span id="cb1-4">grades <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> array((<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">93.5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">93</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">60.8</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">94.5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">82</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">87.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">91.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">99.5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">86</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">93.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">92.5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">78</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">76</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">69</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">94.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">89.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">92.8</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">78</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">65.5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">98</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">98.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">92.3</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">95.5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">76</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">91</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">95</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">61.4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">96</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">90</span>))</span>
<span id="cb1-5">junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> hist(grades)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Populating the interactive namespace from numpy and matplotlib</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/histograms-and-kernel-density-estimation-kde-2/index_files/figure-html/cell-2-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<!-- TEASER_END -->
</section>
<section id="why-not-histograms" class="level1">
<h1>Why not histograms?</h1>
<p>We can play around with the number of bins, but it’s not totally clear what’s going on with the left half of the grades.</p>
<div id="cell-5" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> hist(grades,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/histograms-and-kernel-density-estimation-kde-2/index_files/figure-html/cell-3-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-6" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> hist(grades,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/histograms-and-kernel-density-estimation-kde-2/index_files/figure-html/cell-4-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>So, maybe the histogram isn’t the perfect tool for the job at hand. In fact, there are quite a few well-known problems with histograms. <a href="http://www.shodor.org/">Shodor</a> has a really nice <a href="http://www.shodor.org/interactivate/activities/Histogram/">histogram activity</a> that lets you play around with data interactively. Rather than using Java or JavaScript directly, <a href="http://jakevdp.github.io/">Jake Vanderplas</a> has a great package called <a href="https://github.com/jakevdp/JSAnimation">JSAnimation</a> that lets us animate things directly in IPython Notebooks. I’ll cheat a bit: since all I really need for this is a single slider, I can use JSAnimation to let us interact with data very similarly to the Shodor pages.</p>
<div id="cell-8" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> JSAnimation.IPython_display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> display_animation, anim_to_html</span></code></pre></div></div>
</div>
<p>Before we start, I’ll load in a few data sets. If you’re interested, you can rerun this notebook with a different data set to see how it affects things. <code>data_shodor</code> is the “My Data” set from their histogram activity page, <code>data_sat</code> is the average SAT Math data from the same page, <code>data_tarn</code> is from Tarn Duong’s <a href="http://www.mvstat.net/tduong/research/seminars/seminar-2001-05/">fantastic KDE explanation</a> (we’ll get there), and <code>simple_data</code> is just a very simple data set.</p>
<div id="cell-10" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">data_tarn <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> array((<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.1</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.3</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.25</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.4</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.61</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.62</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.3</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.4</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.41</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.6</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.8</span>))</span>
<span id="cb6-2">data_shodor <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> array((<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">49</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">49</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">45</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">45</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">41</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">38</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">38</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">38</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">37</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">37</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">34</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">35</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">36</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">35</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">38</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">38</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">37</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">31</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">31</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">27</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">27</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">27</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">27</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">29</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">26</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">27</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">26</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">26</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">27</span>))</span>
<span id="cb6-3">data_sat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> array((<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">490</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">499</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">459</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">575</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">575</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">513</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">382</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">525</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">510</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">542</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">368</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">564</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">509</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">530</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">485</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">521</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">495</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">526</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">474</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">441</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">750</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">495</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">476</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">456</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">440</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">547</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">479</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">501</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">476</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">457</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">444</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">444</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">467</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">482</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">449</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">464</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">501</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">670</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">740</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">590</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">700</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">590</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">450</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">452</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">468</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">472</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">447</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">520</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">506</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">570</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">474</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">532</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">472</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">585</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">466</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">549</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">736</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">654</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">585</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">574</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">621</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">542</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">616</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">547</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">554</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">514</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">592</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">531</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">550</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">507</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">441</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">551</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">450</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">548</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">589</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">549</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">485</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">480</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">545</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">451</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">448</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">487</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">480</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">540</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">470</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">529</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">445</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">460</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">457</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">560</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">495</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">480</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">430</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">644</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">489</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">506</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">660</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">444</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">551</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">583</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">457</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">440</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">470</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">486</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">413</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">470</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">408</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">440</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">596</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">442</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">544</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">528</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">559</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">505</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">450</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">477</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">557</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">446</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">553</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">370</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">533</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">496</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">513</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">403</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">496</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">543</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">533</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">471</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">404</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">439</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">459</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">393</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">470</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">650</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">512</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">445</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">446</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">474</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">449</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">529</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">538</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">450</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">570</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">499</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">375</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">515</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">445</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">571</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">442</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">492</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">456</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">428</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">536</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">515</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">450</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">537</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">490</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">446</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">410</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">526</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">560</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">560</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">540</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">502</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">642</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">590</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">480</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">557</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">468</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">524</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">445</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">479</span>))</span>
<span id="cb6-4">simple_data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> array((<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span>
<span id="cb6-5">data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> grades</span></code></pre></div></div>
</div>
<p>Two of the main problems with histograms are (1) you need to define a bin size (2) you need to decide where the left edge of the bin is.</p>
<section id="histogram-bin-size" class="level2">
<h2 class="anchored" data-anchor-id="histogram-bin-size">Histogram bin size</h2>
<p>Let’s look at the effects of bin size on histograms.</p>
<p>Caveat: the code below is certainly not optimized. Ditto for all of the code in this notebook. I wrote it quickly and at the same time I learned what <code>FuncAnimation</code> does. In order to make this read more easily, I’ve included most of the code at the <em>end</em>. If you’re running this interactively, <strong>run the cell at the end now!</strong></p>
<p>Let’s start with <code>getHistBinNumAni</code>. What does that do? Given a data set, it’ll give us an interactive plot. By dragging the slider around, we can make a histogram with anywhere from 1 bin to some max (default: 20) number of bins. No matter how many bins we have, the actual data is shown in blue dots near the bottom. Here’s what it looks like for the grades:</p>
<div id="cell-14" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getHistBinNumAni(data)</span>
<span id="cb7-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="7">
<iframe src="embed-13-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>So, obviously chosing the number of bins makes a <em>huge</em> difference in how we’d interpret the data.</p>
</section>
<section id="where-do-the-histogram-bins-start" class="level2">
<h2 class="anchored" data-anchor-id="where-do-the-histogram-bins-start">Where do the histogram bins start?</h2>
<p>One of the other big problems with histograms, especially for relatively small data sets, is that you have to choose where the left edge of the first bin goes. Do you center the bin around the first group of points? Do you make the left edge match up with the left-most data point? Let’s make some plots to see how that can affect things, because it’s a bit easier to understand what I’m going on about that way. We’ll make a similar animation with <code>getHistBinOffsetAni</code>. As with the previous animation, drag the slider around. This time, we have the same number of bins, but the slider drags around the data relative to the bins (or vice versa, depending on how you think of it).</p>
<div id="cell-16" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getHistBinOffsetAni(data)</span>
<span id="cb8-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="8">
<iframe src="embed-15-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
</section>
</section>
<section id="kde-kernel-density-estimation-to-the-rescue" class="level1">
<h1>KDE (Kernel Density Estimation) to the rescue!</h1>
<p><a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">Kernel density estimation</a> is my favorite alternative to histograms. Tarn Duong has <a href="http://www.mvstat.net/tduong/research/seminars/seminar-2001-05/">fantastic KDE explanation</a>, which is well worth reading. The basic idea is that, if you’re looking at our simple dataset (<code>simple_data = array((0,5,10)</code>), you might choose to represent each point as a rectangle:</p>
<div id="cell-18" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">bar(simple_data,ones_like(simple_data)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,facecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb9-2">junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ylim(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/histograms-and-kernel-density-estimation-kde-2/index_files/figure-html/cell-9-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>not so interesting so far, but what do we do when the rectangles get wide enough that they start to overlap? Instead of just letting them run over each other like</p>
<div id="cell-20" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1">bar(simple_data,ones_like(simple_data)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,facecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>,alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb10-2">junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ylim(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://mglerner.com/blog/posts/histograms-and-kernel-density-estimation-kde-2/index_files/figure-html/cell-10-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>and instead of coloring the overlap regions darker grey, we <em>add</em> the rectangles together. So, since each of the rectangles has height 0.5 in the above example, the dark grey regions should really have height 1.0. This idea is called “kernel density estimation” (KDE), and the rectangle that we’re using is called the “kernel”. If we wanted to draw a different shape at each point, we’d do so by specifying a different kernel (perhaps a bell curve, or a triangle).</p>
<section id="kde-rectangular-kernel" class="level2">
<h2 class="anchored" data-anchor-id="kde-rectangular-kernel">KDE, rectangular kernel</h2>
<p>Now let’s try KDE with a rectangular kernel. This time, using <code>getKdeRectAni</code>, you get a slider controls the width of the kernel.</p>
<div id="cell-23" class="cell" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getKdeRectAni(simple_data)</span>
<span id="cb11-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="11">
<iframe src="embed-22-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>play with the slider, and note what happens when you make it big enough that the rectangles start to overlap. By tuning the width of the rectangles, we can tune how finely or coarsely we’re looking at the data. It’s not so powerful with three data points, but check it out with the grades from above:</p>
<div id="cell-25" class="cell" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getKdeRectAni(data)</span>
<span id="cb12-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="12">
<iframe src="embed-24-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>In my view, there’s a sweet spot right around 1/8 or 1/9 of the way across the slider where there are three distinct peaks. It looks very much like a trimodal distribution to me. So far, this isn’t totally automatic; we have to pick the width of our kernel, but it’s obvoius that KDE can give us a much better view of the underlying data than histograms!</p>
</section>
<section id="kde-gaussian-kernel" class="level2">
<h2 class="anchored" data-anchor-id="kde-gaussian-kernel">KDE, Gaussian kernel</h2>
<p>As mentioned above, we can use a different kernel. One of the most common kernels to use is a <a href="http://en.wikipedia.org/wiki/Gaussian_function">Gaussian</a>. Using <code>getKdeGaussianAni</code>:</p>
<p>Again, the slider controls kernel width.</p>
<div id="cell-29" class="cell" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getKdeGaussianAni(data)</span>
<span id="cb13-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="13">
<iframe src="embed-28-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>This gives us a really nice picture of the data. Play around with the slider and see what you think.</p>
</section>
<section id="kernel-width" class="level2">
<h2 class="anchored" data-anchor-id="kernel-width">Kernel width</h2>
<p>Not only does KDE give us a better picture than histograms, but there turn out to be actual answers to the question of “how wide should my kernel be?” You can see, for instance, that making the kernel too narrow doesn’t provide much more information than the raw data, while making it too large oversmooths the data, making it mostly look like a single kernel with some bits on the sides.</p>
<p><a href="http://partiallattice.wordpress.com/">Daniel Smith</a> has a really nice <a href="https://github.com/Daniel-B-Smith/KDE-for-SciPy">KDE module</a> that chooses an optimal bandwidth and can be used with <a href="http://www.scipy.org/">SciPy</a> (scipy does have <a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html">its own</a> KDE module, but I’ve found Daniel’s to be quite robust).</p>
</section>
</section>
<section id="other-data-sets" class="level1">
<h1>Other data sets</h1>
<p>I highly recommend just playing around with other data sets using the above code. I was interested in playing around with income data, so I show how to grab that data from the IRS website below and play around a bit without comment. Enjoy!</p>
<p>##Income data</p>
<p>Let’s grab the income data from <a href="http://www.irs.gov/uac/SOI-Tax-Stats---Free-County-Income-Data-Downloads">The IRS</a> and make some plots.</p>
<div id="cell-32" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb14-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> urllib</span>
<span id="cb14-2">f <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> urllib.urlopen(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"http://www.irs.gov/file_source/pub/irs-soi/09incicsv.csv"</span>)</span>
<span id="cb14-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#"State_Code","County_Code","State_Abbrv","County_Name",   "Return_Num","Exmpt_Num","AGI","Wages_Salaries","Dividends","Interest"</span></span>
<span id="cb14-4">irs2009 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> loadtxt(f,delimiter<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">','</span>,skiprows<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,usecols<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9</span>))</span>
<span id="cb14-5">agi2009 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> irs2009[:,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]</span></code></pre></div></div>
</div>
<p>Now try things like</p>
<div id="cell-34" class="cell" data-execution_count="15">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getHistBinNumAni(agi2009)</span>
<span id="cb15-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="15">
<iframe src="embed-33-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>Whoops, that’s hard to make sense of. Let’s use logs</p>
<div id="cell-36" class="cell" data-execution_count="16">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1">la2009 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> log(agi2009)</span>
<span id="cb16-2">la2009 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> la2009[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>isnan(la2009)]</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>-c:1: RuntimeWarning: invalid value encountered in log</code></pre>
</div>
</div>
<div id="cell-37" class="cell" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb18-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getHistBinNumAni(la2009)</span>
<span id="cb18-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="17">
<iframe src="embed-36-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<div id="cell-38" class="cell" data-execution_count="18">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb19-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getKdeRectAni(la2009)</span>
<span id="cb19-2">display_animation(ani, default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="18">
<iframe src="embed-37-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<div id="cell-39" class="cell" data-execution_count="19">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1">ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> getKdeGaussianAni(la2009)</span>
<span id="cb20-2">display_animation(ani,default_mode<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'once'</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="19">
<iframe src="embed-38-0.html" loading="lazy" style="width:100%;height:680px;border:0;" title="Interactive figure"></iframe>
</div>
</div>
<p>In order to make this read more easily, I’ve put the bulk of the code below. You’ll have to run it before the previous cells.</p>
<div id="cell-41" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb21-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#!/usr/bin/env python</span></span>
<span id="cb21-2"></span>
<span id="cb21-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> histogram <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> nphistogram</span>
<span id="cb21-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#from numpy import array, linspace, zeros, ones, ones_like</span></span>
<span id="cb21-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#import numpy as np</span></span>
<span id="cb21-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#import matplotlib.pyplot as plt</span></span>
<span id="cb21-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#from matplotlib.pyplot import figure, hist, plot, ion, axes, title</span></span>
<span id="cb21-8"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> JSAnimation.IPython_display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> display_animation, anim_to_html</span>
<span id="cb21-9"></span>
<span id="cb21-10"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> matplotlib <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> animation <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> animation</span>
<span id="cb21-11"></span>
<span id="cb21-12"></span>
<span id="cb21-13"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getHistBinNumAni(data,totalframes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>,showpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>):</span>
<span id="cb21-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#ion()</span></span>
<span id="cb21-15">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> totalframes <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>:</span>
<span id="cb21-16">        totalframes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(data)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb21-17">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> figure()</span>
<span id="cb21-18">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.gca()</span>
<span id="cb21-19"></span>
<span id="cb21-20">    n, bins, patches <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> hist(data, totalframes, normed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, facecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>)</span>
<span id="cb21-21">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> showpts:</span>
<span id="cb21-22">        junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plot(data,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>ones_like(data),<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bo'</span>)</span>
<span id="cb21-23">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> animate(i):</span>
<span id="cb21-24">        n, bins <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> nphistogram(data, i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, normed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-25">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#print n</span></span>
<span id="cb21-26">        ax.set_ylim(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>n.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>())</span>
<span id="cb21-27">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(n)):</span>
<span id="cb21-28">            rect,h <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> patches[j],n[j]</span>
<span id="cb21-29">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#print h.max()</span></span>
<span id="cb21-30">            x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bins[j]</span>
<span id="cb21-31">            w <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bins[j<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x</span>
<span id="cb21-32">            rect.set_height(h)</span>
<span id="cb21-33">            rect.set_x(x)</span>
<span id="cb21-34">            rect.set_width(w)</span>
<span id="cb21-35">            rect.set_alpha(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb21-36">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#fig.canvas.draw()</span></span>
<span id="cb21-37">    </span>
<span id="cb21-38">    ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> animation.FuncAnimation(fig, animate, totalframes, repeat<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-39">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> ani</span>
<span id="cb21-40"></span>
<span id="cb21-41"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getHistBinOffsetAni(data,nbins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>,showpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>):</span>
<span id="cb21-42">    offsets <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb21-43">    totalframes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(offsets)</span>
<span id="cb21-44">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> figure()</span>
<span id="cb21-45">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> fig.gca()</span>
<span id="cb21-46"></span>
<span id="cb21-47">    n, _bins, patches <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> hist(data, nbins, normed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, facecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span>)</span>
<span id="cb21-48">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> showpts:</span>
<span id="cb21-49">        junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plot(data,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>ones_like(data),<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bo'</span>)</span>
<span id="cb21-50">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Obnoxious: find max number in a bin ever</span></span>
<span id="cb21-51">    nmax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb21-52">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(totalframes):</span>
<span id="cb21-53">        dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>())<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>nbins</span>
<span id="cb21-54">        _bins <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> linspace(data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsets[i]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>dx, data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>()<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsets[i]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>dx,<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(data)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb21-55">        n, bins <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> nphistogram(data, bins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>_bins, normed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-56">        nmax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>(nmax,n.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>())</span>
<span id="cb21-57">                               </span>
<span id="cb21-58">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> animate(i):</span>
<span id="cb21-59">        dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>())<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>nbins</span>
<span id="cb21-60">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># bins go from min - dx to max + dx, then offset.</span></span>
<span id="cb21-61">        _bins <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> linspace(data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsets[i]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>dx, data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>()<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> offsets[i]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>dx,nbins)</span>
<span id="cb21-62">        n, bins <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> nphistogram(data, bins <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> _bins, normed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-63">        ax.set_ylim(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>nmax)</span>
<span id="cb21-64">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#ax.set_xlim(data.min()-dx,data.max()+dx)</span></span>
<span id="cb21-65">        binwidth <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bins[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> bins[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]</span>
<span id="cb21-66">        ax.set_xlim(bins[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>binwidth,bins[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> binwidth)</span>
<span id="cb21-67"></span>
<span id="cb21-68">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(n)):</span>
<span id="cb21-69">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#continue</span></span>
<span id="cb21-70">            rect,h <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> patches[j],n[j]</span>
<span id="cb21-71">            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#print h.max()</span></span>
<span id="cb21-72">            x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bins[j]</span>
<span id="cb21-73">            w <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bins[j<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x</span>
<span id="cb21-74">            rect.set_height(h)</span>
<span id="cb21-75">            rect.set_x(x)</span>
<span id="cb21-76">            rect.set_width(w)</span>
<span id="cb21-77">            rect.set_alpha(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>)</span>
<span id="cb21-78">        fig.canvas.draw()    </span>
<span id="cb21-79">    ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> animation.FuncAnimation(fig, animate, totalframes, repeat<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-80">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> ani</span>
<span id="cb21-81"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#!/usr/bin/env python</span></span>
<span id="cb21-82"></span>
<span id="cb21-83"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> sqrt, pi, exp</span>
<span id="cb21-84"></span>
<span id="cb21-85"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getKdeGaussianAni(data,totalframes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, showpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>):</span>
<span id="cb21-86">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> figure()</span>
<span id="cb21-87">    </span>
<span id="cb21-88">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Let's say 10000 points for the whole thing</span></span>
<span id="cb21-89">    width <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>()</span>
<span id="cb21-90">    left, right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>(), data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (width)</span>
<span id="cb21-91">    left, right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> left <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> (totalframes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>width, right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (totalframes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>width</span>
<span id="cb21-92">    </span>
<span id="cb21-93">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> axes(xlim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(left,right),ylim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb21-94">    line, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot([], [], lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb21-95">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> showpts:</span>
<span id="cb21-96">        junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plot(data,ones_like(data)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'go'</span>)</span>
<span id="cb21-97"></span>
<span id="cb21-98">    </span>
<span id="cb21-99">    numpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span></span>
<span id="cb21-100">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> linspace(left,right,numpts)</span>
<span id="cb21-101">    </span>
<span id="cb21-102">    dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (right<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>left)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(numpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb21-103">    </span>
<span id="cb21-104">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> init():</span>
<span id="cb21-105">        line.set_data([], [])</span>
<span id="cb21-106">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> line,</span>
<span id="cb21-107">    </span>
<span id="cb21-108">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> gaussian(x,sigma,mu):</span>
<span id="cb21-109">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Why isn't this defined somewhere?! It must be!</span></span>
<span id="cb21-110">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>sqrt(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>pi<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>  exp(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>((x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>mu)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb21-111">    </span>
<span id="cb21-112">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> animate(i):</span>
<span id="cb21-113">        y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> zeros(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span>)</span>
<span id="cb21-114">        kernelwidth <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.02</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb21-115">        kernelpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(kernelwidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>dx)</span>
<span id="cb21-116">        kernel <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> gaussian(linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,kernelpts),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb21-117">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#kernel = ones(kernelpts)</span></span>
<span id="cb21-118">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> d <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> data:</span>
<span id="cb21-119">            center <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> left</span>
<span id="cb21-120">            centerpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(center<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>dx)</span>
<span id="cb21-121">            bottom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> centerpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(kernelpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb21-122">            top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> centerpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(kernelpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb21-123">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> bottom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> kernelpts: top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb21-124">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> bottom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> kernelpts: top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb21-125">            y[bottom:top] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> kernel</span>
<span id="cb21-126">        ax.set_xlim(x[where(y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>][<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]],x[where(y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>][<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]])</span>
<span id="cb21-127">        line.set_data(x,y)</span>
<span id="cb21-128">        ax.set_ylim(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,y.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>()),<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>y.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>())</span>
<span id="cb21-129">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#title('ymin %s ymax %s'%(y.min(),y.max()))</span></span>
<span id="cb21-130"></span>
<span id="cb21-131">    </span>
<span id="cb21-132">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#sleep(0.1)</span></span>
<span id="cb21-133">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> line,</span>
<span id="cb21-134">    ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> animation.FuncAnimation(fig, animate, init_func<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>init,</span>
<span id="cb21-135">                                  frames<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>totalframes, repeat<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-136">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> ani</span>
<span id="cb21-137"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#FACTOR ME for rect and gaussian</span></span>
<span id="cb21-138"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> getKdeRectAni(data,totalframes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>,showpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>):</span>
<span id="cb21-139">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#ion()</span></span>
<span id="cb21-140">    totalframes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span></span>
<span id="cb21-141">    fig <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> figure()</span>
<span id="cb21-142">    </span>
<span id="cb21-143">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Let's say 10000 points for the whole thing</span></span>
<span id="cb21-144">    width <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>()</span>
<span id="cb21-145">    left, right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>(), data.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (width)</span>
<span id="cb21-146">    left, right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> left <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> (totalframes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>width, right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (totalframes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>width</span>
<span id="cb21-147">    </span>
<span id="cb21-148">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> axes(xlim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(left,right),ylim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb21-149">    line, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ax.plot([], [], lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb21-150">    </span>
<span id="cb21-151">    numpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span></span>
<span id="cb21-152">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> linspace(left,right,numpts)</span>
<span id="cb21-153">    </span>
<span id="cb21-154">    dx <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (right<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>left)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(numpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb21-155">    </span>
<span id="cb21-156">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> init():</span>
<span id="cb21-157">        line.set_data([], [])</span>
<span id="cb21-158">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> line,</span>
<span id="cb21-159"></span>
<span id="cb21-160">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> showpts:</span>
<span id="cb21-161">        junk <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plot(data,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>ones_like(data),<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bo'</span>)</span>
<span id="cb21-162">    </span>
<span id="cb21-163">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> animate(i):</span>
<span id="cb21-164">        y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> zeros(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span>)</span>
<span id="cb21-165">        kernelwidth <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.02</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb21-166">        kernelpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(kernelwidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>dx)</span>
<span id="cb21-167">        kernel <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ones(kernelpts)</span>
<span id="cb21-168">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> d <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> data:</span>
<span id="cb21-169">            center <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> d <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> left</span>
<span id="cb21-170">            centerpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(center<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>dx)</span>
<span id="cb21-171">            bottom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> centerpts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(kernelpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb21-172">            top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> centerpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(kernelpts<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb21-173">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> bottom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> kernelpts: top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb21-174">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> bottom <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> kernelpts: top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> top <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb21-175">            y[bottom:top] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> kernel</span>
<span id="cb21-176">        line.set_data(x,y)</span>
<span id="cb21-177">        ax.set_ylim(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>y.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>())</span>
<span id="cb21-178">        ax.set_xlim(x[where(y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>][<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]],x[where(y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>][<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]])</span>
<span id="cb21-179">    </span>
<span id="cb21-180">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#sleep(0.1)</span></span>
<span id="cb21-181">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> line,</span>
<span id="cb21-182">    ani <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> animation.FuncAnimation(fig, animate, init_func<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>init,</span>
<span id="cb21-183">                                  frames<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>totalframes, repeat<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-184">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> ani</span></code></pre></div></div>
</div>
<p>And that’s it. Cheers!</p>
<h2 class="anchored" data-anchor-id="other-data-sets">Comments from old blog</h2>
            <div id="comments">


            <h3 id="comments-title" class="anchored">13 Responses to <em>Histograms and Kernel Density Estimation (KDE)</em></h3>


            <ol class="commentlist">
                    <li class="comment even thread-even depth-1" id="li-comment-511">
        <div id="comment-511">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/e1e193d200f563e379624d348296699f?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/e1e193d200f563e379624d348296699f?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">Arindam Paul</cite> <span class="says">says:</span>            </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-511">
                December 14, 2013 at 10:04 pm</a>           </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Excellent !! One of the best explanations of KDE I have ever seen.<br>
This post has generated enough interest to read your other blogs. great job.</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=511#respond" onclick="return addComment.moveForm( &quot;comment-511&quot;, &quot;511&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to Arindam Paul">Reply</a>          </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
    <li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-560">
        <div id="comment-560">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/c4332fd6971134c4ce706b3021a1afef?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/c4332fd6971134c4ce706b3021a1afef?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">Nils Wagner</cite> <span class="says">says:</span>         </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-560">
                February 19, 2014 at 8:45 am</a>            </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Assume that we have a spatial energy distribution given at discrete points in 3-D, i.e.</p>
<p>E_i(x_i,y_i,z_i)</p>
<p>where E_i denotes the energy and x_i,y_i,z_i are the corresponding coordinates.</p>
<p>Is it possible to extract the local hot spots using scipy ?</p>
<p>A small example is appreciated.</p>
<p>Thanks in advance.</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=560#respond" onclick="return addComment.moveForm( &quot;comment-560&quot;, &quot;560&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to Nils Wagner">Reply</a>           </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
    <li class="comment even thread-even depth-1" id="li-comment-9267">
        <div id="comment-9267">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/77076e72c1acb8e5e811165d72334357?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/77076e72c1acb8e5e811165d72334357?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn"><a href="http://www.yourdomain.com" rel="external nofollow" class="url">domain</a></cite> <span class="says">says:</span>          </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-9267">
                October 12, 2014 at 9:36 pm</a>             </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>It's really a cool and helpful piece of info. I'm happy that you simply shared this helpful information with us.<br>
Please stay us up to date like this. Thanks for sharing.</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=9267#respond" onclick="return addComment.moveForm( &quot;comment-9267&quot;, &quot;9267&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to domain">Reply</a>         </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
    <li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-21606">
        <div id="comment-21606">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/39a8a0bf814df9653a7a7cb1ffc2aee1?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/39a8a0bf814df9653a7a7cb1ffc2aee1?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">Andreas</cite> <span class="says">says:</span>         </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-21606">
                February 1, 2015 at 9:13 am</a>             </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Thanks for sharing your knowledge and interpretation of kernel density estimation with us. Very enlighting.</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=21606#respond" onclick="return addComment.moveForm( &quot;comment-21606&quot;, &quot;21606&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to Andreas">Reply</a>         </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
    <li class="comment even thread-even depth-1" id="li-comment-22489">
        <div id="comment-22489">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/64f00e8430ab28fbcf370406b089b937?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/64f00e8430ab28fbcf370406b089b937?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">gmas</cite> <span class="says">says:</span>            </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-22489">
                February 17, 2015 at 8:23 am</a>            </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>If I try to run your notebook, I get this name error:</p>
<p><code><br>
NameError                                 Traceback (most recent call last)<br>
 in ()<br>
----&gt; 1 ani = getHistBinNumAni(data)<br>
      2 display_animation(ani, default_mode='once')</code></p><code>
</code><p><code>NameError: name 'getHistBinNumAni' is not defined<br>
</code></p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=22489#respond" onclick="return addComment.moveForm( &quot;comment-22489&quot;, &quot;22489&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to gmas">Reply</a>            </div><!-- .reply -->
        </div><!-- #comment-##  -->

    <ul class="children">
    <li class="comment odd alt depth-2" id="li-comment-22490">
        <div id="comment-22490">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/64f00e8430ab28fbcf370406b089b937?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/64f00e8430ab28fbcf370406b089b937?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">gmas</cite> <span class="says">says:</span>            </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-22490">
                February 17, 2015 at 8:25 am</a>            </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Ops.. I have just read the last part that asks to run the code before the other cells! Maybe you can add a note at the begin of the post..</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=22490#respond" onclick="return addComment.moveForm( &quot;comment-22490&quot;, &quot;22490&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to gmas">Reply</a>            </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
</ul><!-- .children -->
</li><!-- #comment-## -->
    <li class="comment even thread-odd thread-alt depth-1" id="li-comment-26940">
        <div id="comment-26940">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/ab757a5013bba27ff3d69b8448b5b4a9?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/ab757a5013bba27ff3d69b8448b5b4a9?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">X</cite> <span class="says">says:</span>           </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-26940">
                June 23, 2015 at 4:54 pm</a>            </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Is there a way to fit data to an exponential distribution such that it maximizes the entropy H(p_i) = - sum p_i*log(p_i) where p_i is the probability of a given event?</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=26940#respond" onclick="return addComment.moveForm( &quot;comment-26940&quot;, &quot;26940&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to X">Reply</a>           </div><!-- .reply -->
        </div><!-- #comment-##  -->

    <ul class="children">
    <li class="comment byuser comment-author-mglerner bypostauthor odd alt depth-2" id="li-comment-26985">
        <div id="comment-26985">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/d49bf8fdd300871a66f21a8a97674483?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/d49bf8fdd300871a66f21a8a97674483?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">mglerner</cite> <span class="says">says:</span>            </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-26985">
                June 25, 2015 at 4:00 pm</a>            </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>I don't know, but I've been wondering about similar things for a while. If I do learn the answer, I'll update.</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=26985#respond" onclick="return addComment.moveForm( &quot;comment-26985&quot;, &quot;26985&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to mglerner">Reply</a>            </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
</ul><!-- .children -->
</li><!-- #comment-## -->
    <li class="post pingback">
        <p>Pingback: <a href="https://www.physicsforums.com/threads/histogram-to-pdf.835833/#post-5247985" rel="external nofollow" class="url">Histogram to PDF</a> </p>
    </li><!-- #comment-## -->
    <li class="post pingback">
        <p>Pingback: <a href="https://www.physicsforums.com/threads/histogram-to-pdf.835833/#post-5252532" rel="external nofollow" class="url">Histogram to PDF</a> </p>
    </li><!-- #comment-## -->
    <li class="comment even thread-even depth-1" id="li-comment-29361">
        <div id="comment-29361">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/50bb656b9713cee43bb2bdd8c25f75ae?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/50bb656b9713cee43bb2bdd8c25f75ae?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn"><a href="http://www.fixmynix.com" rel="external nofollow" class="url">Koushik Khan</a></cite> <span class="says">says:</span>          </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-29361">
                October 14, 2015 at 3:09 am</a>             </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Awesome presentation !</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=29361#respond" onclick="return addComment.moveForm( &quot;comment-29361&quot;, &quot;29361&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to Koushik Khan">Reply</a>            </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
    <li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-33124">
        <div id="comment-33124">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/67cc0e4cd331c2d2728133b615aced06?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/67cc0e4cd331c2d2728133b615aced06?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn">Ben</cite> <span class="says">says:</span>         </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-33124">
                July 13, 2016 at 7:09 am</a>            </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Fantastic explanation!<br>
Best KDE description I've found so far!<br>
Keep up the good work!</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=33124#respond" onclick="return addComment.moveForm( &quot;comment-33124&quot;, &quot;33124&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to Ben">Reply</a>         </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
    <li class="comment even thread-even depth-1" id="li-comment-34145">
        <div id="comment-34145">
            <div class="comment-author vcard">
                <img alt="" src="https://secure.gravatar.com/avatar/e04743b9f0b91fe808eda34de68c222a?s=40&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/e04743b9f0b91fe808eda34de68c222a?s=80&amp;d=mm&amp;r=g 2x" class="avatar avatar-40 photo" height="40" width="40">                <cite class="fn"><a href="http://www.imdb.com/" rel="external nofollow" class="url">Milissa Washam</a></cite> <span class="says">says:</span>           </div><!-- .comment-author .vcard -->
            
            <div class="comment-meta commentmetadata"><a href="https://mglerner.com/blog/?p=28#comment-34145">
                December 11, 2016 at 12:20 am</a>           </div><!-- .comment-meta .commentmetadata -->

            <div class="comment-body"><p>Just wanted to say this website is extremely good. I always want to hear new things about this because I’ve the similar blog during my Country with this subject which means this help´s me a lot. I did so a search around the issue and located a large amount of blogs but nothing beats this. Many thanks for sharing so much inside your blog..</p>
</div>

            <div class="reply">
                <a rel="nofollow" class="comment-reply-link" href="https://mglerner.com/blog/?p=28&amp;replytocom=34145#respond" onclick="return addComment.moveForm( &quot;comment-34145&quot;, &quot;34145&quot;, &quot;respond&quot;, &quot;28&quot; )" aria-label="Reply to Milissa Washam">Reply</a>          </div><!-- .reply -->
        </div><!-- #comment-##  -->

    </li><!-- #comment-## -->
            </ol>
    
</div><!-- #comments -->


</section>

 ]]></description>
  <guid>https://mglerner.com/blog/posts/histograms-and-kernel-density-estimation-kde-2/</guid>
  <pubDate>Thu, 21 Nov 2013 01:05:00 GMT</pubDate>
</item>
<item>
  <title>Drum head normal modes, with movies</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/drum-head-normal-modes-with-movies/</link>
  <description><![CDATA[ 






<p>
We’re working our way through Boas in my Mathematical Physics class, and we’ve come to the point in the PDE chapter where every good Physics student figures out what the normal modes of a circular drum head ought to look like. Punchline:
</p>
<p>
<iframe width="640" height="360" src="http://www.youtube.com/embed/xYz5AI1ah5c?rel=0" frameborder="0" allowfullscreen="">
</iframe>
</p>
<!-- TEASER_END -->
<h1>
Drum heads
</h1>
<p>
So, we get to the intuitive answer that we’re looking for <img src="https://latex.codecogs.com/png.latex?J_n(k_%7Bmn%7Dr)%5Ccos(n%5Ctheta)%5Ccos(kvt)">, where <img src="https://latex.codecogs.com/png.latex?k_%7Bmn%7D"> is the <img src="https://latex.codecogs.com/png.latex?m%5E%7Bth%7D"> zero of <img src="https://latex.codecogs.com/png.latex?J_m"> (we could also look for the <img src="https://latex.codecogs.com/png.latex?%5Csin%20%5Csin">, <img src="https://latex.codecogs.com/png.latex?%5Csin%20%5Ccos"> or <img src="https://latex.codecogs.com/png.latex?%5Ccos%20%5Csin"> solutions, but they’re not fundamentally different), and Boas has the standard picture of the nodelines to help with visualization. I’m becoming increasingly convinced that students should be competent with at least a little bit of Python. You could argue for Matlab or Mathematica, but I’m leaning heavily towards Python for a number of reasons[*]. The point is that things like “the sum of two specific traveling waves is a standing wave” are just easier to see if you can visualize and animate things, and they pack a bigger punch if you can do that yourself.
</p>
<h1>
matplotlib animation interlude
</h1>
<p>
I used standard matplotlib animations to show some basics with traveling waves, standing waves, Bessel functions, and building up series solutions piece by piece. The animation framework is excellent, because it’s simple to use and a traveling wave looks like this:
</p>
<pre class="brush:py">#!/usr/bin/env python
from __future__ import division
from numpy import sin, pi, linspace
import matplotlib.pyplot as plt
from matplotlib import animation

# First set up the figure, the axis, and the plot element we want to animate
v = -0.01
fig = plt.figure()
ax = plt.axes(xlim=(-4, 4), ylim=(-2, 2))
line, = ax.plot([], [], lw=2, color=’red’)

# initialization function: plot the background of each frame
def init():
    line.set_data([], [])
    return line,

# animation function.  This is called sequentially
x = linspace(-4, 4, 2000)

def animate(t):
    y = sin(2 * pi * (x - v * t))
    line.set_data(x, y)
    return line,

# call the animator.  blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=100, interval=20, blit=True)

plt.show()
</pre>
<p>
I can talk the students through it, and there are really only two interesting lines: the <code>v=-0.01</code> to set the velocity and the <code>y = sin(2 * pi * (x - v * t))</code> to do the math. Students can change the sign of the velocity to see it move in the other direction, change the math line to have some series solution, etc. in a straightforward way. We did that with our solutions for plucked and hammered strings (guitar vs.&nbsp;piano). It made for a nice in-class demo, and I’l have the students more involved from the start of the semester next time. There’s code for simple waves in my github <a href="https://github.com/mglerner/MathematicalPhysics" title="My Mathematical Physics github repo">repo</a>, and you can find lots of decent animations on the net.
</p>
<h1>
back to drum heads
</h1>
<p>
What you can’t seem to find (or, at least, I can’t <strong>Edit: I knew the web had to have a nice demo, and <a href="http://demonstrations.wolfram.com/NormalModesOfACircularDrumHead/">here’s one</a> using Mathematica</strong>) is animated versions of the normal modes we want (<img src="https://latex.codecogs.com/png.latex?J_n(k_%7Bmn%7Dr)%5Ccos(n%5Ctheta)%5Ccos(kvt)">). The math part is easy, especially because <code>scipy.special</code> has such nice things built in. The main part just involves
</p>
<pre class="brush:py">from scipy.special import jn, jn_zeros
from numpy import cos

def k(m,n):
    return jn_zeros(n,m)[m-1] # m is 0-indexed here

result = jn(n,k(m,n)*R)*cos(n*theta)*cos(k(m,n)*v*t)
</pre>
<p>
The animation part is a bit trickier because I really want 3D plots in addition to the 2D ones, and the matplotlib 3d canvas doesn’t play nicely with the animation framework. It’s still not particularly tricky. When we plot something, we get an object back. We usually ignore that object. In order to “animate” things, we just keep track of that object and delete it each time through our main loop. I ended up with two versions of the code. The one below has a couple of nice features. It animates a single mode, but you can specify that on the command line. Optionally, you can also specify “cc” for “cos cos”, “cs” for “cos sin” etc.
</p>
<p>
The funny business with zlim near the end is because matplotlib sets the z limits of the plots automatically, each time you plot something. In our case, it looks much smoother to just start the z axis at (-1,1) instead of watching it stretch throughout the first oscillation.
</p>
<pre class="brush:py">#!/usr/bin/env python
from __future__ import division
“”"
Based on the wireframe example script
“”"
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
from numpy import sin, cos, arctan, arctan2, array, sqrt, linspace, meshgrid
import scipy
import scipy.special
from scipy.special import jn, jn_zeros
import time, sys, os

v = 1
n, m = 1, 1
if len(sys.argv) &gt;= 3:
    n,m = [int(i) for i in sys.argv[1:3]]
if m == 0:
    sys.exit(“M must be greater than or equal to 1″)

if len(sys.argv) &gt;= 4:
    fns = sys.argv[3]
else:
    fns = ‘cc’
    
f1 = {‘s’:sin,’c':cos}[fns[0]]
f2 = {‘s’:sin,’c':cos}[fns[1]]

def k(m,n):
    return jn_zeros(n,m)[m-1] # m is 0-indexed here

def generate(X, Y, t):
    theta = arctan2(Y,X) # This does arctan(Y/X) but gets the sign right.
    R = sqrt(X**2 + Y**2)
    # We know z = J_n(k*r)*cos(n*theta)*cos(k*v*t)
    # 
    result = jn(n,k(m,n)*R)*f1(n*theta)*f2(k(m,n)*v*t)
    result[R&gt;1] = 0 # we plot points from the square, but physically require this.
    return result

plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111, projection=’3d’)

xs = linspace(-1, 1, 100)
ys = linspace(-1, 1, 100)
X, Y = meshgrid(xs, ys)
Z = generate(X, Y, 0.0)

wframe = None
tstart = time.time()
for t in linspace(0, 10, 400):
    oldcol = wframe
    Z = generate(X, Y, t)
    #wframe = ax.plot_wireframe(X, Y, Z, rstride=2, cstride=2)
    wframe = ax.plot_surface(X, Y, Z, rstride=4, cstride=4, alpha=0.3)

    # Remove old line collection before drawing
    if oldcol is not None:
        ax.collections.remove(oldcol)
    if n == 0:
        ax.set_zlim(-1,1)
    else:
        ax.set_zlim(-0.5,0.5)
    plt.draw()
</pre>
<p>
The individual frames look something like
</p>
<p>
<img alt="A frame from k11" src="https://mglerner.com/360/k11_example.png" width="400">
</p>
<p>
I also made a beefier version (you can find it in my github <a href="https://github.com/mglerner/MathematicalPhysics" title="My Mathematical Physics github repo">repo</a>) that plots several of the modes in a grid. The different columns are m=1,2,3 and rows are n=1,2. The script lets you plot as many or as few of these as you’d like. It shows a 2D version next to the 3D version, and the nodelines are shown in black on the 2D version.
</p>
<p>
I also followed <a href="http://glowingpython.blogspot.com/2013/02/selection-sort-animated.html" title="Great post from TGP, as usual">The Glowing Python’s idea</a> of writing out a bunch of png files for each frame and making a movie with ffmpeg:
</p>
<pre>ffmpeg -q:a 5 -r 5 -b:v 19200 -i img%04d.png movie.mp4
</pre>
<p>
Here’s the movie:
</p>
<p>
<iframe width="640" height="360" src="http://www.youtube.com/embed/gB6dtIQ-vvo?rel=0&amp;hd=1" frameborder="0" allowfullscreen="">
</iframe>
</p>
<p>
and you can download a slightly higher quality version <a href="https://mglerner.com/360/cc123_012.mp4">here</a>. You can download a slightly higher quality of the movie at the top of this page (2 values each of m and n) <a href="https://mglerner.com/360/cc12_01.mp4">here</a>.
</p>
<p>
[*] Among other things:
</p>
<ul>
<li>
Python is free, which is important at a small school
</li>
<li>
I want this to show up in a computational modeling class, and I want that class to draw in CS, biology, chemistry, biochemistry, math, econ and geology students. I think Python is an easier cross-department sell
</li>
<li>
The IPython Notebook is fantastic these days
</li>
</ul>





 ]]></description>
  <guid>https://mglerner.com/blog/posts/drum-head-normal-modes-with-movies/</guid>
  <pubDate>Sun, 31 Mar 2013 03:14:17 GMT</pubDate>
</item>
<item>
  <title>March Madness, Monte Carlo Style!</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/march-madness-monte-carlo-style/</link>
  <description><![CDATA[ 






<p>
I’m teaching Thermal Physics this term, so obviously I rearranged the syllabus so that we could all run Monte Carlo simulations for March Madness!
</p>
<p>
<strong>Quick summary for the class is at the end</strong>
</p>
<h1>
The basics
</h1>
<p>
We started off writing an energy function and figuring out how to play a simple 8-team bracket (side-note: IPython notebooks were great for this purpose! We were able to record our class sessions and post them online, along with a “Scientific Cookbook”). This version of Thermal Physics doesn’t have a programming prerequisite, so the coding parts of the assignments stopped with running and analyzing 8-team brackets.
</p>
<p>
We then spent a chunk of class time comparing our simulations with the 2-state paramagnets we’d seen in Schroeder’s text (we covered section 8.2 a bit out of sequence). In that context, it was clear what a Monte Carlo move was. We convinced ourselves that we could do something similar in <strong>bracket space</strong>, but that we couldn’t just flip a single game (we also had to consider flipping the games that <em>depended</em> on that game). The coding for that part was definitely beyond the scope of this class, but I hacked up an ugly version for us to use.
</p>
<!-- TEASER_END -->
<p>
Warnings to the programmers in audience: this code is very much not pretty and very much not optimized. In particular, the Bracket code is really slow, to the point where it takes a noticeable amount of time to run 10000 brackets. The main goals were (1) get something written (2) make it easy for the students to modify the parts they need to modify. Please feel free to send comments! If I get more than 1, I’ll consider stuffing things on github, etc.
</p>
<p>
So, to run things, download all of the Python files Brackets.py JeffSagarin.py KenPomeroy.py MonteCarloBrackets.py RankingsAndStrength.py Stats.py Visualization.py decorators.py from <a title="This directory on my website" href="https://mglerner.com/MarchMadness/">This directory on my website</a>.
</p>
<p>
<strong>EDIT: See the comments. Daniel Smith has made some improvements and started a github repo, which I’ve forked.</strong>
</p>
<pre>wget https://mglerner.com/MarchMadness/Brackets.py
wget https://mglerner.com/MarchMadness/JeffSagarin.py
wget https://mglerner.com/MarchMadness/KenPomeroy.py
wget https://mglerner.com/MarchMadness/MonteCarloBrackets.py
wget https://mglerner.com/MarchMadness/RankingsAndStrength.py
wget https://mglerner.com/MarchMadness/Stats.py
wget https://mglerner.com/MarchMadness/Visualization.py
wget https://mglerner.com/MarchMadness/decorators.py
</pre>
<p>
You then need to have matplotlib installed. I highly recommend the <a href="enthought.com">Enthought Python Distribution</a>.
</p>
<p>
From the IPython prompt (making sure you’re in the directory that has all of the downloaded files), you can look at a single bracket like this:
</p>
<pre class="brush:py">run MonteCarloBrackets.py
teams = RAS.teams['south']
b = Bracket(teams=teams,T=0.5)
print b</pre>
<p>
which will print out something like
</p>
<pre>Kansas (1)                                                   
Western Kentucky (16)     Kan (1)                            
North Carolina (8)                                           
Villanova (9)             Vil (9)  Vil (9)                   
Virginia Commonwealth (5)                                    
Akron (12)                Vir (5)                            
Michigan (4)                                                 
South Dakota St. (13)     Mic (4)  Vir (5)  Vil (9)          
UCLA (6)                  UCL (6)  Flo (3)  Geo (2)  Geo (2) 
Minnesota (11)                                               
Florida (3)               Flo (3)                            
Northwestern St. (14)                                        
San Diego St. (7)         Okl (10) Geo (2)                   
Oklahoma (10)                                                
Georgetown (2)            Geo (2)                            
Florida Gulf Coast (15)                                      
Total bracket energy: -17.7885496023</pre>
<p>
By default, the energy is calculated by the function
</p>
<pre class="brush:py">import RankingsAndStrength as RAS
strength = RAS.kenpom['Pyth'] # Use Ken Pomeroy’s “Pyth”
def energy_game(winner,loser):
    result = -(strength[winner]/strength[loser])
    return result</pre>
<p>
and you can define your own energy function fairly easily, including the coin-flipping favorite
</p>
<pre class="brush:py">def energy_game(winner,loser):
    result = random()
    return result</pre>
<p>
While we’re talking about rankings, one quick note: one of the class-favorite energy functions was based on the team rankings. The official tournament rankings are only defined in groups of 16 (i.e the South, the East, the Midwest and the West). So, in order to compare them across regions, I add a bit of randomness in the middle of RankingsAndStrength.py:
</p>
<pre class="brush:py">for region in teams:
    for (team,rank) in zip(teams[region],_rankings):
        regional_rankings[team] = rank + random()/10</pre>
<p>
So, if you just want one bracket based on your energy function, you can run the above code, but with <code>teams=”all”</code>. You are now equipped to beat all of your friends in your bracket pool!
</p>
<h1>
<strong>But wait! There’s more!</strong>
</h1>
<p>
We went to the trouble of figuring out how to make moves in bracket space. So, we have a <code>simulate(ntrials,region,T)</code> function that starts at a random (but valid) point in bracket space and makes <code>ntrials</code> moves, using the Metropolis algorithm with your energy function and temperature <code>T</code> to accept or reject moves properly. There are a few more details including plotting the results, but here’s the important part of <code>simulate</code>:
</p>
<pre class="brush:py">def simulate(ntrials,region,T):
    teams = RAS.teams[region]
    b = Bracket(teams,T)
    ng = sum(b.games_in_rounds) # total number of games
    # Let’s collect some statistics
    brackets = []
    for trial in xrange(ntrials):
        g = choice(range(ng)) # choose a random game to swap
        #print “attempted swap for game”,g#,”in round”,round[g]
        newbracket = deepcopy(b)
        newbracket.swap(g)
        ediff = newbracket.energy() - b.energy()
        if ediff &lt;= 0:
            b = newbracket
        else:
            if random() &lt; exp(-ediff/T):
                b = newbracket
        brackets.append(b)</pre>
<p>
We keep track of all of the each bracket in the <code>brackets</code> list, and then use it to print out some statistics. So, what does that look like?
</p>
<pre class="brush:py">simulate(100,’south’,0.5)</pre>
<p>
which plots the following image<br> <img alt="Teams from the South, 10 runs" src="https://mglerner.com/MarchMadness/South10.png" width="800">
</p>
<p>
Here, I’ve plotted at least a few useful things. Looking on the left side you can verify whether or not we’re seeing a Boltzmann distribution. You know that bracket space is really big (quiz: how big?). So, one way to assess our sampling is to keep track of the number of unique brackets we’ve seen. That’s on the top right. If we’ve <em>fully</em> sampled bracket space, you’d expect that to approach a horizontal asymptote. You can actually see that behavior if you run a small bracket with lots of trials (pro tip: one of the things I haven’t mentioned yet is that you can specify a list of teams like <code>[“Kansas”,“Kentucky”,“Indiana”,“Duke”]</code> as the second argument to <code>simulate</code>, instead of a region).
</p>
<p>
<code>simulate</code> also prints out both the lowest energy bracket possible with your energy function and the most probable bracket according to your Monte Carlo sampling (the one below showed up 6 times)
</p>
<pre>Most common bracket (6)
Kansas (1)                                                   
Western Kentucky (16)     Kan (1)                            
North Carolina (8)                                           
Villanova (9)             Vil (9)  Vil (9)                   
Virginia Commonwealth (5)                                    
Akron (12)                Vir (5)                            
Michigan (4)                                                 
South Dakota St. (13)     Mic (4)  Mic (4)  Vil (9)          
UCLA (6)                  UCL (6)  Flo (3)  Flo (3)  Flo (3) 
Minnesota (11)                                               
Florida (3)               Flo (3)                            
Northwestern St. (14)                                        
San Diego St. (7)         Okl (10) Flo (15)                  
Oklahoma (10)                                                
Georgetown (2)            Flo (15)                           
Florida Gulf Coast (15)                                      
Total bracket energy: -17.2487840302

Lowest energy bracket
Kansas (1)                                                   
Western Kentucky (16)     Kan (1)                            
North Carolina (8)                                           
Villanova (9)             Nor (8)  Kan (1)                   
Virginia Commonwealth (5)                                    
Akron (12)                Vir (5)                            
Michigan (4)                                                 
South Dakota St. (13)     Mic (4)  Mic (4)  Kan (1)          
UCLA (6)                  Min (11) Flo (3)  Flo (3)  Flo (3) 
Minnesota (11)                                               
Florida (3)               Flo (3)                            
Northwestern St. (14)                                        
San Diego St. (7)         San (7)  Geo (2)                   
Oklahoma (10)                                                
Georgetown (2)            Geo (2)                            
Florida Gulf Coast (15)                                      
Total bracket energy: -18.3666003991</pre>
<p>
You can, of course, run more simulations
</p>
<pre class="brush:py">simulate(10000,’south’,0.5)</pre>
<p>
<img alt="Teams from the South, 10000 runs" src="https://mglerner.com/MarchMadness/South10000.png" width="800">
</p>
<pre>Most common bracket (16)
Kansas (1)                                                   
Western Kentucky (16)     Kan (1)                            
North Carolina (8)                                           
Villanova (9)             Nor (8)  Nor (8)                   
Virginia Commonwealth (5)                                    
Akron (12)                Vir (5)                            
Michigan (4)                                                 
South Dakota St. (13)     Sou (13) Vir (5)  Nor (8)          
UCLA (6)                  Min (11) Flo (3)  Flo (3)  Flo (3) 
Minnesota (11)                                               
Florida (3)               Flo (3)                            
Northwestern St. (14)                                        
San Diego St. (7)         Okl (10) Okl (10)                  
Oklahoma (10)                                                
Georgetown (2)            Geo (2)                            
Florida Gulf Coast (15)                                      
Total bracket energy: -17.716285007

Lowest energy bracket
Kansas (1)                                                   
Western Kentucky (16)     Kan (1)                            
North Carolina (8)                                           
Villanova (9)             Nor (8)  Kan (1)                   
Virginia Commonwealth (5)                                    
Akron (12)                Vir (5)                            
Michigan (4)                                                 
South Dakota St. (13)     Mic (4)  Mic (4)  Kan (1)          
UCLA (6)                  Min (11) Flo (3)  Flo (3)  Flo (3) 
Minnesota (11)                                               
Florida (3)               Flo (3)                            
Northwestern St. (14)                                        
San Diego St. (7)         San (7)  Geo (2)                   
Oklahoma (10)                                                
Georgetown (2)            Geo (2)                            
Florida Gulf Coast (15)                                      
Total bracket energy: -18.3666003991</pre>
<p>
So, now maybe we’re ready to run a full bracket. I can think of at least two reasonable ways to do that. The first is just to run it:
</p>
<pre class="brush:py">simulate(10000,’all’,0.5)</pre>
<p>
<img alt="All teams, 10000 runs" src="https://mglerner.com/MarchMadness/All10000.png" width="800">
</p>
<p>
On the other hand, as you can see, that’s only sampling a tiny bit of bracket space. When I run it, the most common bracket is only seen 8 times out of the 10000, for instance.
</p>
<p>
Another strategy would be to simulate each of the regions a bunch of time (you can sit around and wait for 100,000 times on your own machine, etc.). Then you can run your own Final Four using a secret feature: you can specify a list of teams instead of a region:
</p>
<pre class="brush:py">simulate(1000,['Louisville','Gonzaga','Kansas','Indiana'],0.5)</pre>
<p>
<img alt="Final 4, 1000 runs" src="https://mglerner.com/MarchMadness/Final4_1000.png" width="800">
</p>
<pre>Most common bracket (148)
Louisville (1)                             
Gonzaga (1)               Lou (1)          
Kansas (1)                Kan (1)  Lou (1) 
Indiana (1)                                
Total bracket energy: -3.02255561688

Lowest energy bracket
Louisville (1)                             
Gonzaga (1)               Lou (1)          
Kansas (1)                Ind (1)  Lou (1) 
Indiana (1)                                
Total bracket energy: -3.04693046285</pre>
<p>
You’d then piece together a complete bracket from your results (don’t forget to keep track of the regional brackets!).
</p>
<p>
These are,&nbsp;conveniently, already coded up for you via
</p>
<pre class="code:py">runbracket1(ntrials=10000,T=1.0)
</pre>
<p>
and
</p>
<pre class="code:py">runbracket2(ntrials1=10000,ntrials2=1000,T=1.0)
</pre>
<h1>
What if you just want to place bets?
</h1>
<p>
We learned something from Nate Silver’s political simulations. Most bets involve things like the&nbsp;probability&nbsp;that team X makes the final four. If you want to do that, you could do the same thing Silver does: run a ton of independent simulations, keep the results in a list, and then calculate statistics over that list. You can feel free to do so for a significant chunk of extra credit.
</p>
<h1>
QUICK SUMMARY FOR THE CLASS:
</h1>
<p>
</p><ul>
<li>Download all of the python files from <a href="mglerner.com/MarchMadness">the website</a>
<p></p>
<p>
</p><ul>
<li>Change the energy function in <code>MonteCarloBrackets.py</code> to do what you want. For instance, you can use any combination of the strengths from Ken Pomeroy by using <code>RAS.kenpom[‘Pyth’]</code>, etc. I’ve also added Jeff Sagarin’s ratings (<code>RAS.sagarin[‘Rating’]</code>). Remember that you should all have a “silly” function (e.g.&nbsp;one of you has a dictionary that keeps track of how awesome a team’s mascott is). You can combine silly with non-silly as well. You get up to 10 brackets total.
<p></p>
<p>
</p><ul>
<li>Generate brackets with either of the methods mentioned above (running with ‘all’ or running the regions individually and then running your own final 4). It’s up to you whether you use the lowest-energy bracket or the most common bracket, but you should justify your result.
<p></p>
<p>
</p><ul>
<li>Send me the results! You can then go ahead and enter up to 10 brackets in our bracket pool. If you need to, you can have me enter them for you (this is most likely to happen if you don’t finish this until near the end of/after spring break). The winner will get something great (likely a home-baked treat!).
<p></p>
<h2 class="anchored">
Comments from previous post
</h2>
<pre><code>&lt;div id="comments"&gt;


&lt;h3 id="comments-title"&gt;14 Responses to &lt;em&gt;March Madness, Monte Carlo Style!&lt;/em&gt;&lt;/h3&gt;


&lt;ol class="commentlist"&gt;
        &lt;li class="comment even thread-even depth-1" id="li-comment-268"&gt;</code></pre>
<div id="comment-268">
<pre><code>&lt;div class="comment-author vcard"&gt;
    &lt;img alt='' src='https://secure.gravatar.com/avatar/6549e6244c48ed880a23dcfdc3a65be1?s=40&amp;#038;d=mm&amp;#038;r=g' srcset='https://secure.gravatar.com/avatar/6549e6244c48ed880a23dcfdc3a65be1?s=80&amp;amp;d=mm&amp;amp;r=g 2x' class='avatar avatar-40 photo' height='40' width='40' /&gt;                &lt;cite class="fn"&gt;&lt;a href='http://partiallattice.wordpress.com' rel='external nofollow' class='url'&gt;Daniel&lt;/a&gt;&lt;/cite&gt; &lt;span class="says"&gt;says:&lt;/span&gt;            &lt;/div&gt;&lt;!-- .comment-author .vcard --&gt;

&lt;div class="comment-meta commentmetadata"&gt;&lt;a href="https://mglerner.com/blog/?p=16#comment-268"&gt;
    March 20, 2013 at 2:27 pm&lt;/a&gt;           &lt;/div&gt;&lt;!-- .comment-meta .commentmetadata --&gt;

&lt;div class="comment-body"&gt;&lt;p&gt;Here is the code in module form on GitHub:&lt;/p&gt;</code></pre>
<p>
<a href="https://github.com/Daniel-B-Smith/MarchMadnessMonteCarlo" rel="nofollow">https://github.com/Daniel-B-Smith/MarchMadnessMonteCarlo</a>
</p>
<p>
I did a few mini-optimizations, but the thing that is killing you in simulate() is using deepcopy() on your bracket object at every step. Refactoring so that you can call a shallow copy should speed things up considerably.
</p>
</div>
<pre><code>&lt;div class="reply"&gt;
    &lt;a rel='nofollow' class='comment-reply-link' href='https://mglerner.com/blog/?p=16&amp;#038;replytocom=268#respond' onclick='return addComment.moveForm( "comment-268", "268", "respond", "16" )' aria-label='Reply to Daniel'&gt;Reply&lt;/a&gt;            &lt;/div&gt;&lt;!-- .reply --&gt;</code></pre>
</li></ul></li></ul></li></ul></li></ul> ]]></description>
  <guid>https://mglerner.com/blog/posts/march-madness-monte-carlo-style/</guid>
  <pubDate>Tue, 19 Mar 2013 22:30:22 GMT</pubDate>
</item>
<item>
  <title>Getting a working Python install, part 2</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/14/</link>
  <description><![CDATA[ 






<p>
With the new laptop (side note: the 13″ MacBook Pro is a really nice machine. The screen certainly has enough pixels for real work, unlike previous 13″ machines. The only thing missing is a GPU.), it’s time to re-install. Since my last post, I’ve been convinced to upgrade to Python 2.7. Anthony Bak has recently gone through the same thing, so here’s my version of his set of notes on how to do this:
</p>
<p>
</p><ul>
<li>ActiveState, the EPD, etc. are great, but don’t seem to play nicely with a few external packages.<br></li>
<li>CMake causes lots of trouble, but there doesn’t seem to be a good alternative. I’m not sure why the macports version can’t be made to “just work”.
<p></p>
<p>
</p><ol start="0" type="1">
<li>Fully uninstall macports (http://guide.macports.org/#installing.macports.uninstalling). Follow the full set of directions.
<p></p>
<p>
Then, go through your .bashrc/.bash_profile and collect all of the macports-related changes (they’ll all have /opt in them). Stick them at the end so that you can combine them with whatever macports does to your init files during the rest of the install.
</p>
<p>
</p><ol type="1">
<li>Set /opt/local/etc/macports/variants.conf to contain
<p></p>
<p>
+python27 +py27 -python26 -py26 -universal +bash_completion
</p>
<p>
You’ll have to make the file and the directories, assuming you followed step 0.
</p>
<p>
</p><ol start="2" type="1">
<li>Install the latest and greatest macports, using the package install and the easy options (http://guide.macports.org/#installing.macports). The rest of this guide was done with MacPorts-2.0.4-10.7-Lion.dmg.
<p></p>
<p>
</p><ol start="3" type="1">
<li>Open a new shell so that your path is correct and run
<p></p>
<p>
sudo su # port requires superuser privs<br> port selfupdate<br> port upgrade outdated<br> port install coreutils python27<br> port select -set python python27<br> port install cmake boost mercurial cairo eigen py27-cython py27-numpy py27-scipy py27-wxpython-devel py27-matplotlib py27-pil
</p>
<p>
Note that we aren’t installing py27-wxpython because it requires<br> universal builds (which will mess up some other choices) so we use<br> py27-wxpython-devel instead.
</p>
<p>
</p><ol start="4" type="1">
<li>Edit .bash_profile
<p></p>
<p>
export PATH=/opt/local/libexec/gnubin:/opt/local/bin:/opt/local/sbin:<img src="https://latex.codecogs.com/png.latex?PATH%3Cbr%3E%0Aexport%20MANPATH=/opt/local/share/man:">MANPATH<br> export PYTHONPATH=$PYTHONPATH:/opt/local/lib/python2.7/site-packages:./
</p>
<p>
Also in there
</p>
<p>
export LDFLAGS=’-L/opt/local/lib’<br> export CPPFLAGS=’-I/opt/local/include’<br> export LD_LIBRARY_PATH=/opt/local/lib<br> export LD_INCLUDE_PATH=/opt/local/include
</p>
<p>
</p><ol start="5" type="1">
<li>Now we handle cgal.
<p></p>
<p>
port extract cgal
</p>
<p>
Apply this patch:
</p>
<p>
http://cgal-discuss.949826.n4.nabble.com/PATCH-prevent-Qt-s-moc-from-choking-on-BOOST-JOIN-td4081602.html
</p>
<p>
The files are in
</p>
<p>
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_gis_cgal/cgal/work/CGAL-3.9/include/CGAL/Qt.
</p>
<p>
and the patch is tiny enough that it’s faster to just do it by hand.
</p>
<p>
Don’t install cgal. Instead
</p>
<p>
port build cgal<br> port install cgal
</p>
<p>
</p><ul>
<li>-
<p></p>
<p>
</p><ol start="6" type="1">
<li>Download the openbable source distribution (latest is 2.3.1) . We’ll be installing by hand.
<p></p>
<p>
cd openbable-2.3.1<br> mkdir build<br> cd build<br> cmake -DCMAKE_INSTALL_PREFIX=/opt/local/ -DPYTHON_BINDINGS=YES ../
</p>
<p>
Edit CMakeCache.txt to fix all the python paths. Use<br> /opt/local/Library/Frameworks/Python.framework/Versions/2.7
</p>
<p>
So, in emacs, a straightforward search and replace for /Library/Frameworks/Python.framework/ -&gt; /opt/local/Library/Frameworks/Python.framework/ should work, but I had some trouble if I didn’t specify the specific version, so<br> /Library/Frameworks/Python.framework/ -&gt; /opt/local/Library/Frameworks/Python.framework/Versions/2.7/
</p>
<p>
make<br> make install
</p>
<p>
and even that never really worked for me. I also had to change a couple of instances of /usr/local/lib/python… to point to opt. And then the install failed. It installed all of the ob tools, but not the python .so. So, I copied it over by hand, and that seems to work.
</p>
<p>
So far, I am unable to get Mayavi installed from source. It works with the EPD, so I actually have two Python installations at the moment, sadly enough.
</p>
<p>
</p><ol start="7" type="1">
<li>Install Dionysus(http://www.mrzv.org/software/dionysus/get-build-install.html). You have to tell it where the CGAL cmake files are.
<p></p>
<p>
cd Dionysus<br> mkdir build<br> cd build<br> cmake ../
</p>
<p>
Now edit the CMakeCache.txt file. Fix the python headers/path and<br> change the cgal dir (and maybe the same for boost).
</p>
<p>
CGAL_DIR:PATH=/opt/local/lib/cmake
</p>
<p>
make<br> cd bindings/python<br> mv lib_dionysus.dylib /opt/local/lib/<br> mv dionysus /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/<br> cd /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/dionysus<br> rm _dionysus.so<br> ln -s /opt/local/lib/lib_dionysus.dylib _dionysus.so
</p>
<p>
Install Fastcluster. Download from<br> http://math.stanford.edu/~muellner/fastcluster.html
</p>
<p>
sudo su python setup.py install
</p>
<p>
Install Mapper<br> TODO
</p>
<p>
Install sharedmem
</p>
<p>
hg clone https://bitbucket.org/cleemesser/numpy-sharedmem<br> cd numpy-sharedmem<br> sudo python setup.py install
</p>
<p>
When you have time (on my machine graph-tool takes many hours and uses<br> &gt;4GB durring the build phase):
</p>
<p>
port install py27-scikits-learn py27-scikits-statsmodels py27-networkx<br> py27-graph-tool
</p>

</li>
</ol></li>
</ol></li>
</ul></li>
</ol></li>
</ol></li>
</ol></li>
</ol></li>
</ol></li>
</ol></li>
</ul>



 ]]></description>
  <guid>https://mglerner.com/blog/posts/14/</guid>
  <pubDate>Thu, 08 Mar 2012 02:17:28 GMT</pubDate>
</item>
<item>
  <title>Getting a sensible Python install on my Mac</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/getting-a-sensible-python-install-on-my-mac/</link>
  <description><![CDATA[ 






<p>
I recently had to get Python + things I like up and running on my Mac from scratch. That’s a significantly harder task than you might guess, so one of the main reasons I’m posting this is for my own benefit (I’ll have to do this all again in February when I give my current laptop back to NIH and buy one of my own). There’s a decent chance this will be useful for others, though. A significant amount of experience and gnashing of teeth has told me
</p>
<p>
</p><ol type="1">
<li>ActiveState is awesome, but not everything works perfectly with it.<br></li>
<li>Ditto for Python 2.7.<br></li>
<li>Never mix macports and fink.
<p></p>
<p>
So, here’s my setup for a working python2.6 system that happens to meet my current needs:
</p>
<!-- TEASER_END -->
<p>
</p><ol start="0" type="1">
<li>Fully uninstall macports (http://guide.macports.org/#installing.macports.uninstalling). Follow the full set of directions.
<p></p>
<p>
</p><ol type="1">
<li>Install the latest and greatest macports, using the package install and the easy options (http://guide.macports.org/#installing.macports).
<p></p>
<p>
</p><ol start="2" type="1">
<li>Make variants.conf reject all python2.7-related things<br> <code>[lernerm@LCBB-ML01777274 ~]$ cat /opt/local/etc/macports/variants.conf<br> # To specify global variants to use for all port builds,<br> # customize this file to list variant settings you want.<br> #<br> # Any variants specified here that are not supported by<br> # a port will just be ignored. Multiple variants can be<br> # specified per line, or one per line is also allowed.<br> #<br> # Example:<br> # +ipv6 +no_x11<br> +py26 +python26 -py27 -python27 +bash_completion<br> </code>
<p></p>
<p>
</p><ol start="3" type="1">
<li>Make sure you can install some basic things. I start with bash completion (https://trac.macports.org/wiki/howto/bash-completion) and coreutils.
<p></p>
<p>
<code><br> sudo port install bash-completion<br> sudo port install coreutils +with_default_names<br> </code>
</p>
<p>
Note that you’ll have to edit your .bash_profile to make bash-completion work. It’s documented in the link above. You may also have to add /opt/local/libexec/gnubin to your path to get coreutils to work.
</p>
<p>
</p><ol start="4" type="1">
<li>Install the Python environment I want, including<br></li>
</ol></li>
</ol></li>
</ol></li>
</ol></li>
</ol></li>
</ol>
<ul>
<li>python 2.6<br></li>
<li>matplotlib<br></li>
<li>numpy<br></li>
<li>scipy<br></li>
<li>ipython<br></li>
<li>boost<br></li>
<li>cgal<br></li>
<li>cmake<br></li>
<li>openbabel
<p></p>
<p>
<code><br> sudo port install python26<br> sudo port select -set python python26<br> sudo port install py26-numpy py26-scipy py26-matplotlib py26-ipython py26-openbabel cmake boost cgal py26-wxpython py26-cython<br> sudo port select -set ipython ipython26<br> </code>
</p>
<p>
Change the noninteractive matplotlib default backend:
</p>
<p>
<code><br> [lernerm@LCBB-ML01777274 ~]$ cat ~/.matplotlib/matplotlibrc<br> backend : WXAgg<br> </code>
</p>
<p>
</p><ol start="5" type="1">
<li>Mercurial. I can’t use the macports package, because it forces a python2.7 install! The download from http://mercurial.selenic.com/downloads/ is fine, but I’d really rather have it as a port for consistency/upgrade reasons.
<p></p>
<p>
</p><ol start="6" type="1">
<li>Then install additional packages I want
<p></p>
<p>
6a) numpy sharedmem (https://bitbucket.org/cleemesser/numpy-sharedmem/overview)
</p>
<p>
<code><br> hg clone https://bitbucket.org/cleemesser/numpy-sharedmem<br> cd numpy-sharedmem<br> python setup.py build<br> python setup.py install -prefix=~/software # Note: that’s in my path already<br> </code>
</p>
<p>
6b) dionysus (http://www.mrzv.org/software/dionysus/get-build-install.html)
</p>
<p>
<code><br> hg clone http://hg.mrzv.org/Dionysus/<br> cd Dionysus<br> hg up tip</code>
</p>
<p>
mkdir build<br> cd build<br> cmake ..<br></p></li>
</ol></li>
</ol></li>
</ul>
<p></p>
<p>
add the following to CMakeLists.txt:
</p>
<p>
<code><br> set(CMAKE_LIBRARY_PATH /opt/local/lib ${CMAKE_LIBRARY_PATH} )<br> set(CGAL_DIR /opt/local/lib/cmake)<br> </code>
</p>
<p>
That’s not enough. Edit CMakeCache.txt by hand to point at the right Python by searching for /System/Library/Frameworks/Python.framework and replacing it with /opt/local/Library/Frameworks/Python.framework and then, finally,
</p>
<p>
<code><br> make<br> </code>
</p>
<p>
And then make sure that <img src="https://latex.codecogs.com/png.latex?HOME/src/Dionysus/build/bindings/python%20is%20in%20your%20PYTHONPATH.%3C/p%3E%0A%3Cp%3E6c)%20orange%20(from%20source%20http://orange.biolab.si/nightly_builds.html)%3C/p%3E%0A%3Cp%3E%3Ccode%3E%3Cbr%3E%0Apython%20setup.py%20build%3Cbr%3E%0Apython%20setup.py%20install%20-user%3Cbr%3E%0A%3C/code%3E%3C/p%3E%0A%3Cp%3ENote%20that%20the%20last%20bit%20requires%20you%20to%20have%20this%20in%20your%20.bashrc%20or%20.bash_profile%20(or%20both,%20or%20maybe%20they%E2%80%99re%20the%20same%20file%20because%20you%E2%80%99ve%20symlinked%20them!):%3C/p%3E%0A%3Cp%3E%3Ccode%3E%3Cbr%3E%0Aexport%20PYTHONPATH=">HOME/.local/lib/python2.6/site-packages:$PYTHONPATH<br> 
</p>
<p>
Whew!
</p>
<h2 class="anchored">
Comments from previous blog
</h2>
<ul>
<li>
From mglerner: I suppose numpy sharedmem could be done with python setup.py install –user. I tend to like –prefix=~/software, but that mysteriously didn’t work for orange, so I’ll probably switch everything over to –user for consistency.
</li>
<li>
From Anthony: But does Dionysus work? Finally?
</li>
<li>
From mglerner: Yes! Finally! I had this post 3/4 written for quite a while before I filled in the missing dionysus pieces.
</li>
<li>
From Anthony: So now that you’re moving to python 2.7 you should update this. Do you have everything working yet?
</li>
<li>
From <a href="http://ernestyalumni.tumblr.com">Ernest Yeung</a>:
<pre>  Prof. Lerner, I was trying to get Dionysus to work, using Mercurial which went without a hitch, to work on my MacBook Air 13in, 2011, Mac OS X 10.8. Cmake and Boost were installed as required by mrzv.org (the author of Dionysus).

I'm having problems at the build stage. By the way, what good directories should I put all this stuff in and should I be in administrator or a regular account to do all this?
cd build % Yep, in Dionysus dir
cmake ..

That's when I get problems:
CMake Error at /Applications/CMake 2.8-11.app/Contents/share/cmake-2.8/Modules/FindBoost.cmake:1106 (message):
Unable to find the requested Boost libraries.

Unable to find the Boost header files. Please set BOOST_ROOT to the root
directory containing Boost or BOOST_INCLUDEDIR to the directory containing
Boost's headers.
Call Stack (most recent call first):
CMakeLists.txt:13 (find_package)

-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- CGAL not found, therefore alphashapes will not be built.
CMake Warning (dev) at examples/homology-zigzags/CMakeLists.txt:9 (add_executable):
Policy CMP0002 is not set: Logical target names must be globally unique.
Run "cmake --help-policy CMP0002" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
This warning is for project developers. Use -Wno-dev to suppress it.

-- CGAL not found, alphashape bindings will not be built
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.

I installed boost onto the previous directory from my Dionysus. I installed it opening up the .tar.bz2 downloaded from the boost website. In your experience, does this work well?

I'm not familiar the problems with CGAL. Do you have any knowledge?

Maybe another way I should ask about all this is, if I only wanted a very minimal installation, all I want is Dionysus, with Mercurial, and of course what the author required CMake, Boost, how should I go about doing so?

Many thanks, I'll write up what I learned on my blog and it may help others as well on a Mac.

I share your passion for python.

Facebook : ernestyalumni
gmail : ernestyalumni
linkedin : ernestyalumni
tumblr : ernestyalumni
twitter : ernestyalumni
weibo 微博 : ernestyalumni
youku : ernestyalumni
youtube : ernestyalumni
indiegogo : ernestyalumni
</pre>
</li>
</ul>





 ]]></description>
  <guid>https://mglerner.com/blog/posts/getting-a-sensible-python-install-on-my-mac/</guid>
  <pubDate>Mon, 19 Dec 2011 04:10:37 GMT</pubDate>
</item>
<item>
  <title>A simple Python logging example</title>
  <dc:creator>Michael G. Lerner</dc:creator>
  <link>https://mglerner.com/blog/posts/a-simple-python-logging-example/</link>
  <description><![CDATA[ 






<p>
I’m slowly converting most of my lab to Python. One of the great things is how fantastic the documentation for things like <a title="matplotlib" href="http://matplotlib.sourceforge.net">matplotlib</a> is. On the other hand, some of the Python documentation itself is ridiculous.
</p>
<p>
Somebody wanted to set up some simple logging. He wanted to have a couple of different logging levels, he wanted to be able to switch between them from the command line, and he wanted to be able to spit messages to stdout as well. The <a title="Logging module
documentation" href="http://docs.python.org/library/logging.html">official docs</a> have a trivial example that’s very nice, but a bit too trivial and then several examples that were way too much for someone who’s in his first week of Python. He also really wanted to be able to specify numbers on the command line, and didn’t want to remember what the logging module’s internal constants (e.g.&nbsp;logging.CRITICAL == 50) are. Instead, he wanted to be able to give words or small, easy to remember numbers. Here’s the simple example we came up with:
</p>
<!-- TEASER_END -->
<pre class="brush:py">#!/usr/bin/env python

import sys
import logging

def setuplogging(loglevel,printtostdout):
    #print “starting up with loglevel”,loglevel,logging.getLevelName(loglevel)
    logging.basicConfig(filename=’peng.log’,level=loglevel)
    if printtostdout:
        soh = logging.StreamHandler(sys.stdout)
        soh.setLevel(loglevel)
        logger = logging.getLogger()
        logger.addHandler(soh)

def dosomething():
    logging.critical(‘this is critical’)
    logging.error(‘this is an error message’)
    logging.warning(‘this is a warning’)
    logging.info(‘here is some info for you’)
    logging.debug(‘this is just a debug’)

if __name__ == ‘__main__’:
    from optparse import OptionParser
    parser = OptionParser(‘Test logging’)
    parser.add_option(‘-d’,'-debug’,type=’string’,help=’Available levels are CRITICAL (3), ERROR (2), WARNING (1), INFO (0), DEBUG (-1)’,default=’CRITICAL’)
    parser.add_option(‘-p’,'-printtostdout’,action=’store_true’,default=False,help=’Print all log messages to stdout’)
    options,args = parser.parse_args()

    try:
        loglevel = getattr(logging,options.debug)
    except AttributeError:
        loglevel = {3:logging.CRITICAL,
                    2:logging.ERROR,
                    1:logging.WARNING,
                    0:logging.INFO,
                    -1:logging.DEBUG,
                    }[int(options.debug)]

    setuplogging(loglevel,options.printtostdout)
    dosomething()


</pre>
<p>
As a side note, I was surprised at how natural the use of dictionaries and getattr seemed to him. I expected that to cause a bit more trouble than it did.
</p>





 ]]></description>
  <guid>https://mglerner.com/blog/posts/a-simple-python-logging-example/</guid>
  <pubDate>Wed, 01 Jun 2011 15:03:57 GMT</pubDate>
</item>
</channel>
</rss>
