Still working towards v0.1.1 docs.

This commit is contained in:
Simon Forman
2018-05-01 08:41:39 -07:00
parent dbb1fcf4a2
commit c3a3f5a527
10 changed files with 303 additions and 771 deletions
@@ -6,7 +6,7 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Preamble &#8212; Thun 0.1.1 documentation</title>
<title>Replacing Functions in the Dictionary &#8212; Thun 0.1.1 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript" src="../_static/documentation_options.js"></script>
@@ -30,14 +30,13 @@
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="preamble">
<h1>Preamble<a class="headerlink" href="#preamble" title="Permalink to this headline"></a></h1>
<div class="section" id="replacing-functions-in-the-dictionary">
<h1>Replacing Functions in the Dictionary<a class="headerlink" href="#replacing-functions-in-the-dictionary" title="Permalink to this headline"></a></h1>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">notebook_preamble</span> <span class="k">import</span> <span class="n">D</span><span class="p">,</span> <span class="n">J</span><span class="p">,</span> <span class="n">V</span>
</pre></div>
</div>
</div>
<div class="section" id="a-long-trace">
<h1>A long trace<a class="headerlink" href="#a-long-trace" title="Permalink to this headline"></a></h1>
<h2>A long trace<a class="headerlink" href="#a-long-trace" title="Permalink to this headline"></a></h2>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[23 18] average&#39;</span><span class="p">)</span>
</pre></div>
</div>
@@ -86,31 +85,16 @@
</pre></div>
</div>
</div>
<div class="section" id="replacing-sum-and-size-with-compiled-versions">
<h1>Replacing <code class="docutils literal notranslate"><span class="pre">sum</span></code> and <code class="docutils literal notranslate"><span class="pre">size</span></code> with “compiled” versions.<a class="headerlink" href="#replacing-sum-and-size-with-compiled-versions" title="Permalink to this headline"></a></h1>
<p>Both <code class="docutils literal notranslate"><span class="pre">sum</span></code> and <code class="docutils literal notranslate"><span class="pre">size</span></code> are
<a class="reference external" href="https://en.wikipedia.org/wiki/Catamorphism">catamorphisms</a>, they
each convert a sequence to a single value.</p>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[sum] help&#39;</span><span class="p">)</span>
<div class="section" id="replacing-size-with-a-python-version">
<h2>Replacing <code class="docutils literal notranslate"><span class="pre">size</span></code> with a Python Version<a class="headerlink" href="#replacing-size-with-a-python-version" title="Permalink to this headline"></a></h2>
<p>Both <code class="docutils literal notranslate"><span class="pre">sum</span></code> and <code class="docutils literal notranslate"><span class="pre">size</span></code> each convert a sequence to a single value.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="nb">sum</span> <span class="o">==</span> <span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="o">+</span><span class="p">]</span> <span class="n">step</span>
<span class="n">size</span> <span class="o">==</span> <span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Given</span> <span class="n">a</span> <span class="n">quoted</span> <span class="n">sequence</span> <span class="n">of</span> <span class="n">numbers</span> <span class="k">return</span> <span class="n">the</span> <span class="nb">sum</span><span class="o">.</span>
<span class="nb">sum</span> <span class="o">==</span> <span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="o">+</span><span class="p">]</span> <span class="n">step</span>
</pre></div>
</div>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[size] help&#39;</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span>
</pre></div>
</div>
<p>We can use “compiled” versions (theyre not really compiled in this
case, theyre hand-written in Python) to speed up evaluation and make
the trace more readable. The <code class="docutils literal notranslate"><span class="pre">sum</span></code> function is already in the library.
It gets shadowed by the definition version above during
<code class="docutils literal notranslate"><span class="pre">initialize()</span></code>.</p>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">joy.library</span> <span class="k">import</span> <span class="n">SimpleFunctionWrapper</span><span class="p">,</span> <span class="n">primitives</span>
<p>An efficient <code class="docutils literal notranslate"><span class="pre">sum</span></code> function is already in the library. But for <code class="docutils literal notranslate"><span class="pre">size</span></code> we can use
a “compiled” version hand-written in Python to speed up evaluation and make the trace more readable.</p>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">joy.library</span> <span class="k">import</span> <span class="n">SimpleFunctionWrapper</span>
<span class="kn">from</span> <span class="nn">joy.utils.stack</span> <span class="k">import</span> <span class="n">iter_stack</span>
@@ -122,17 +106,16 @@ It gets shadowed by the definition version above during
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">iter_stack</span><span class="p">(</span><span class="n">sequence</span><span class="p">):</span>
<span class="n">n</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">n</span><span class="p">,</span> <span class="n">stack</span>
<span class="n">sum_</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">primitives</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s1">&#39;sum&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p>Now we replace them old versions in the dictionary with the new versions
<p>Now we replace the old version in the dictionary with the new version,
and re-evaluate the expression.</p>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">old_sum</span><span class="p">,</span> <span class="n">D</span><span class="p">[</span><span class="s1">&#39;sum&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">D</span><span class="p">[</span><span class="s1">&#39;sum&#39;</span><span class="p">],</span> <span class="n">sum_</span>
<span class="n">old_size</span><span class="p">,</span> <span class="n">D</span><span class="p">[</span><span class="s1">&#39;size&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">D</span><span class="p">[</span><span class="s1">&#39;size&#39;</span><span class="p">],</span> <span class="n">size</span>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">D</span><span class="p">[</span><span class="s1">&#39;size&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span>
</pre></div>
</div>
</div>
<div class="section" id="a-shorter-evaluation">
<h2>A Shorter Evaluation<a class="headerlink" href="#a-shorter-evaluation" title="Permalink to this headline"></a></h2>
<p>You can see that <code class="docutils literal notranslate"><span class="pre">size</span></code> and <code class="docutils literal notranslate"><span class="pre">sum</span></code> now execute in a single step.</p>
<div class="code ipython2 highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[23 18] average&#39;</span><span class="p">)</span>
</pre></div>
@@ -168,6 +151,7 @@ and re-evaluate the expression.</p>
<span class="mf">20.5</span> <span class="o">.</span>
</pre></div>
</div>
</div>
</div>
@@ -178,9 +162,12 @@ and re-evaluate the expression.</p>
<div class="sphinxsidebarwrapper">
<h3><a href="../index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Preamble</a></li>
<li><a class="reference internal" href="#">Replacing Functions in the Dictionary</a><ul>
<li><a class="reference internal" href="#a-long-trace">A long trace</a></li>
<li><a class="reference internal" href="#replacing-sum-and-size-with-compiled-versions">Replacing <code class="docutils literal notranslate"><span class="pre">sum</span></code> and <code class="docutils literal notranslate"><span class="pre">size</span></code> with “compiled” versions.</a></li>
<li><a class="reference internal" href="#replacing-size-with-a-python-version">Replacing <code class="docutils literal notranslate"><span class="pre">size</span></code> with a Python Version</a></li>
<li><a class="reference internal" href="#a-shorter-evaluation">A Shorter Evaluation</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>