<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-comment">-- Copyright 2016 TensorFlow authors.</span><span>
</span><a name="line-2"></a><span class="hs-comment">--</span><span>
</span><a name="line-3"></a><span class="hs-comment">-- Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span><span>
</span><a name="line-4"></a><span class="hs-comment">-- you may not use this file except in compliance with the License.</span><span>
</span><a name="line-5"></a><span class="hs-comment">-- You may obtain a copy of the License at</span><span>
</span><a name="line-6"></a><span class="hs-comment">--</span><span>
</span><a name="line-7"></a><span class="hs-comment">--     http://www.apache.org/licenses/LICENSE-2.0</span><span>
</span><a name="line-8"></a><span class="hs-comment">--</span><span>
</span><a name="line-9"></a><span class="hs-comment">-- Unless required by applicable law or agreed to in writing, software</span><span>
</span><a name="line-10"></a><span class="hs-comment">-- distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span><span>
</span><a name="line-11"></a><span class="hs-comment">-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span><span>
</span><a name="line-12"></a><span class="hs-comment">-- See the License for the specific language governing permissions and</span><span>
</span><a name="line-13"></a><span class="hs-comment">-- limitations under the License.</span><span>
</span><a name="line-14"></a><span>
</span><a name="line-15"></a><span class="hs-comment">-- | TensorBoard Summary generation. Provides type safe wrappers around raw</span><span>
</span><a name="line-16"></a><span class="hs-comment">-- string emitting CoreOps.</span><span>
</span><a name="line-17"></a><span class="hs-comment">--</span><span>
</span><a name="line-18"></a><span class="hs-comment">-- Example use:</span><span>
</span><a name="line-19"></a><span class="hs-comment">--</span><span>
</span><a name="line-20"></a><span class="hs-comment">-- &gt; -- Call summary functions while constructing the graph.</span><span>
</span><a name="line-21"></a><span class="hs-comment">-- &gt; createModel = do</span><span>
</span><a name="line-22"></a><span class="hs-comment">-- &gt;   loss &lt;- -- ...</span><span>
</span><a name="line-23"></a><span class="hs-comment">-- &gt;   TF.scalarSummary loss</span><span>
</span><a name="line-24"></a><span class="hs-comment">-- &gt;</span><span>
</span><a name="line-25"></a><span class="hs-comment">-- &gt; -- Write summaries to an EventWriter.</span><span>
</span><a name="line-26"></a><span class="hs-comment">-- &gt; train = TF.withEventWriter &quot;/path/to/logs&quot; $ \eventWriter -&gt; do</span><span>
</span><a name="line-27"></a><span class="hs-comment">-- &gt;     summaryTensor &lt;- TF.build TF.allSummaries</span><span>
</span><a name="line-28"></a><span class="hs-comment">-- &gt;     forM_ [1..] $ \step -&gt; do</span><span>
</span><a name="line-29"></a><span class="hs-comment">-- &gt;         if (step % 100 == 0)</span><span>
</span><a name="line-30"></a><span class="hs-comment">-- &gt;             then do</span><span>
</span><a name="line-31"></a><span class="hs-comment">-- &gt;                 ((), summaryBytes) &lt;- TF.run (trainStep, summaryTensor)</span><span>
</span><a name="line-32"></a><span class="hs-comment">-- &gt;                 let summary = decodeMessageOrDie (TF.unScalar summaryBytes)</span><span>
</span><a name="line-33"></a><span class="hs-comment">-- &gt;                 TF.logSummary eventWriter step summary</span><span>
</span><a name="line-34"></a><span class="hs-comment">-- &gt;             else TF.run_ trainStep</span><span>
</span><a name="line-35"></a><span>
</span><a name="line-36"></a><span class="hs-pragma">{-# LANGUAGE TypeOperators #-}</span><span>
</span><a name="line-37"></a><span>
</span><a name="line-38"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Logging</span><span>
</span><a name="line-39"></a><span>    </span><span class="hs-special">(</span><span> </span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-type">EventWriter</span></a><span>
</span><a name="line-40"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Logging.html#withEventWriter"><span class="hs-identifier hs-var">withEventWriter</span></a><span>
</span><a name="line-41"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Logging.html#logEvent"><span class="hs-identifier hs-var">logEvent</span></a><span>
</span><a name="line-42"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Logging.html#logGraph"><span class="hs-identifier hs-var">logGraph</span></a><span>
</span><a name="line-43"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Logging.html#logSummary"><span class="hs-identifier hs-var">logSummary</span></a><span>
</span><a name="line-44"></a><span>    </span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">SummaryTensor</span><span>
</span><a name="line-45"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Logging.html#histogramSummary"><span class="hs-identifier hs-var">histogramSummary</span></a><span>
</span><a name="line-46"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Logging.html#scalarSummary"><span class="hs-identifier hs-var">scalarSummary</span></a><span>
</span><a name="line-47"></a><span>    </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Logging.html#mergeAllSummaries"><span class="hs-identifier hs-var">mergeAllSummaries</span></a><span>
</span><a name="line-48"></a><span>    </span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-49"></a><span>
</span><a name="line-50"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Concurrent</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">forkFinally</span><span class="hs-special">)</span><span>
</span><a name="line-51"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Concurrent</span><span class="hs-operator">.</span><span class="hs-identifier">MVar</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MVar</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">newEmptyMVar</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">readMVar</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">putMVar</span><span class="hs-special">)</span><span>
</span><a name="line-52"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Concurrent</span><span class="hs-operator">.</span><span class="hs-identifier">STM</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">atomically</span><span class="hs-special">)</span><span>
</span><a name="line-53"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Concurrent</span><span class="hs-operator">.</span><span class="hs-identifier">STM</span><span class="hs-operator">.</span><span class="hs-identifier">TBMQueue</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">TBMQueue</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">newTBMQueueIO</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">closeTBMQueue</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">writeTBMQueue</span><span class="hs-special">)</span><span>
</span><a name="line-54"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Monad</span><span class="hs-operator">.</span><span class="hs-identifier">Catch</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MonadMask</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">bracket</span><span class="hs-special">)</span><span>
</span><a name="line-55"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Monad</span><span class="hs-operator">.</span><span class="hs-identifier">IO</span><span class="hs-operator">.</span><span class="hs-identifier">Class</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MonadIO</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">liftIO</span><span class="hs-special">)</span><span>
</span><a name="line-56"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Monad</span><span class="hs-operator">.</span><span class="hs-identifier">Trans</span><span class="hs-operator">.</span><span class="hs-identifier">Resource</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">runResourceT</span><span class="hs-special">)</span><span>
</span><a name="line-57"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">ByteString</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">)</span><span>
</span><a name="line-58"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Conduit</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">=$=</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-59"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Conduit</span><span class="hs-operator">.</span><span class="hs-identifier">TQueue</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">sourceTBMQueue</span><span class="hs-special">)</span><span>
</span><a name="line-60"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Default</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">def</span><span class="hs-special">)</span><span>
</span><a name="line-61"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Int</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Int64</span><span class="hs-special">)</span><span>
</span><a name="line-62"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">ProtoLens</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">encodeMessage</span><span class="hs-special">)</span><span>
</span><a name="line-63"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Time</span><span class="hs-operator">.</span><span class="hs-identifier">Clock</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getCurrentTime</span><span class="hs-special">)</span><span>
</span><a name="line-64"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Time</span><span class="hs-operator">.</span><span class="hs-identifier">Clock</span><span class="hs-operator">.</span><span class="hs-identifier">POSIX</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">utcTimeToPOSIXSeconds</span><span class="hs-special">)</span><span>
</span><a name="line-65"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Lens</span><span class="hs-operator">.</span><span class="hs-identifier">Family2</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">.~</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-var">&amp;</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-66"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Network</span><span class="hs-operator">.</span><span class="hs-identifier">HostName</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getHostName</span><span class="hs-special">)</span><span>
</span><a name="line-67"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Proto</span><span class="hs-operator">.</span><span class="hs-identifier">Tensorflow</span><span class="hs-operator">.</span><span class="hs-identifier">Core</span><span class="hs-operator">.</span><span class="hs-identifier">Framework</span><span class="hs-operator">.</span><span class="hs-identifier">Summary</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Summary</span><span class="hs-special">)</span><span>
</span><a name="line-68"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Proto</span><span class="hs-operator">.</span><span class="hs-identifier">Tensorflow</span><span class="hs-operator">.</span><span class="hs-identifier">Core</span><span class="hs-operator">.</span><span class="hs-identifier">Util</span><span class="hs-operator">.</span><span class="hs-identifier">Event</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Event</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fileVersion</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">graphDef</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">step</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">summary</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">wallTime</span><span class="hs-special">)</span><span>
</span><a name="line-69"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">System</span><span class="hs-operator">.</span><span class="hs-identifier">Directory</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">createDirectoryIfMissing</span><span class="hs-special">)</span><span>
</span><a name="line-70"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">System</span><span class="hs-operator">.</span><span class="hs-identifier">FilePath</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">&lt;/&gt;</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-71"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Build</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MonadBuild</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Build</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">asGraphDef</span><span class="hs-special">)</span><span>
</span><a name="line-72"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Ops</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">scalar</span><span class="hs-special">)</span><span>
</span><a name="line-73"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Records</span><span class="hs-operator">.</span><span class="hs-identifier">Conduit</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">sinkTFRecords</span><span class="hs-special">)</span><span>
</span><a name="line-74"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Tensor</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Tensor</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">render</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">SummaryTensor</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">addSummary</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">collectAllSummaries</span><span class="hs-special">)</span><span>
</span><a name="line-75"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Types</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">TensorType</span><span class="hs-special">,</span><span> </span><span class="hs-keyword">type</span><span class="hs-special">(</span><span class="hs-operator hs-type">/=</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-76"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Text</span><span class="hs-operator">.</span><span class="hs-identifier">Printf</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">printf</span><span class="hs-special">)</span><span>
</span><a name="line-77"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">ByteString</span><span class="hs-operator">.</span><span class="hs-identifier">Lazy</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">L</span><span>
</span><a name="line-78"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Conduit</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Conduit</span><span>
</span><a name="line-79"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Conduit</span><span class="hs-operator">.</span><span class="hs-identifier">List</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Conduit</span><span>
</span><a name="line-80"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Text</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">T</span><span>
</span><a name="line-81"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">GenOps</span><span class="hs-operator">.</span><span class="hs-identifier">Core</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">CoreOps</span><span>
</span><a name="line-82"></a><span>
</span><a name="line-83"></a><span class="hs-comment">-- | Handle for logging TensorBoard events safely from multiple threads.</span><span>
</span><a name="line-84"></a><span class="hs-keyword">data</span><span> </span><a name="EventWriter"><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier">EventWriter</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="EventWriter"><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier">EventWriter</span></a></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">TBMQueue</span><span> </span><span class="hs-identifier hs-type">Event</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MVar</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-85"></a><span>
</span><a name="line-86"></a><span class="hs-comment">-- | Writes Event protocol buffers to event files.</span><span>
</span><a name="line-87"></a><span class="hs-identifier">withEventWriter</span><span> </span><span class="hs-glyph">::</span><span>
</span><a name="line-88"></a><span>    </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MonadIO</span><span> </span><a href="#local-6989586621679062542"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">MonadMask</span><span> </span><a href="#local-6989586621679062542"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span>
</span><a name="line-89"></a><span>    </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">FilePath</span><span>
</span><a name="line-90"></a><span>    </span><span class="hs-comment">-- ^ logdir. Local filesystem directory where event file will be written.</span><span>
</span><a name="line-91"></a><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-type">EventWriter</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679062542"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679062543"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
</span><a name="line-92"></a><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679062542"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679062543"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-93"></a><a name="withEventWriter"><a href="TensorFlow.Logging.html#withEventWriter"><span class="hs-identifier">withEventWriter</span></a></a><span> </span><a name="local-6989586621679062544"><a href="#local-6989586621679062544"><span class="hs-identifier">logdir</span></a></a><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-94"></a><span>    </span><span class="hs-identifier hs-var">bracket</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">liftIO</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Logging.html#newEventWriter"><span class="hs-identifier hs-var">newEventWriter</span></a><span> </span><a href="#local-6989586621679062544"><span class="hs-identifier hs-var">logdir</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">liftIO</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="TensorFlow.Logging.html#closeEventWriter"><span class="hs-identifier hs-var">closeEventWriter</span></a><span class="hs-special">)</span><span>
</span><a name="line-95"></a><span>
</span><a name="line-96"></a><span class="hs-identifier">newEventWriter</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">FilePath</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-type">EventWriter</span></a><span>
</span><a name="line-97"></a><a name="newEventWriter"><a href="TensorFlow.Logging.html#newEventWriter"><span class="hs-identifier">newEventWriter</span></a></a><span> </span><a name="local-6989586621679062545"><a href="#local-6989586621679062545"><span class="hs-identifier">logdir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-98"></a><span>    </span><span class="hs-identifier hs-var">createDirectoryIfMissing</span><span> </span><span class="hs-identifier hs-var">True</span><span> </span><a href="#local-6989586621679062545"><span class="hs-identifier hs-var">logdir</span></a><span>
</span><a name="line-99"></a><span>    </span><a name="local-6989586621679062546"><a href="#local-6989586621679062546"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="TensorFlow.Logging.html#doubleWallTime"><span class="hs-identifier hs-var">doubleWallTime</span></a><span>
</span><a name="line-100"></a><span>    </span><a name="local-6989586621679062547"><a href="#local-6989586621679062547"><span class="hs-identifier">hostname</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">getHostName</span><span>
</span><a name="line-101"></a><span>    </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679062548"><a href="#local-6989586621679062548"><span class="hs-identifier">filename</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">printf</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679062545"><span class="hs-identifier hs-var">logdir</span></a><span> </span><span class="hs-operator hs-var">&lt;/&gt;</span><span> </span><span class="hs-string">&quot;events.out.tfevents.%010d.%s&quot;</span><span class="hs-special">)</span><span>
</span><a name="line-102"></a><span>                          </span><span class="hs-special">(</span><span class="hs-identifier hs-var">truncate</span><span> </span><a href="#local-6989586621679062546"><span class="hs-identifier hs-var">t</span></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Integer</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679062547"><span class="hs-identifier hs-var">hostname</span></a><span>
</span><a name="line-103"></a><span>    </span><span class="hs-comment">-- Asynchronously consume events from a queue.</span><span>
</span><a name="line-104"></a><span>    </span><span class="hs-comment">-- We use a bounded queue to ensure the producer doesn't get too far ahead</span><span>
</span><a name="line-105"></a><span>    </span><span class="hs-comment">-- of the consumer. The buffer size was picked arbitrarily.</span><span>
</span><a name="line-106"></a><span>    </span><a name="local-6989586621679063616"><a href="#local-6989586621679063616"><span class="hs-identifier">q</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">newTBMQueueIO</span><span> </span><span class="hs-number">1024</span><span>
</span><a name="line-107"></a><span>    </span><span class="hs-comment">-- Use an MVar to signal that the worker thread has completed.</span><span>
</span><a name="line-108"></a><span>    </span><a name="local-6989586621679063617"><a href="#local-6989586621679063617"><span class="hs-identifier">done</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">newEmptyMVar</span><span>
</span><a name="line-109"></a><span>    </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679063618"><a href="#local-6989586621679063618"><span class="hs-identifier">writer</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-var">EventWriter</span></a><span> </span><a href="#local-6989586621679063616"><span class="hs-identifier hs-var">q</span></a><span> </span><a href="#local-6989586621679063617"><span class="hs-identifier hs-var">done</span></a><span>
</span><a name="line-110"></a><span>        </span><a name="local-6989586621679063619"><a href="#local-6989586621679063619"><span class="hs-identifier">consumeQueue</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">runResourceT</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">Conduit</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">runConduit</span><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-111"></a><span>            </span><span class="hs-identifier hs-var">sourceTBMQueue</span><span> </span><a href="#local-6989586621679063616"><span class="hs-identifier hs-var">q</span></a><span>
</span><a name="line-112"></a><span>            </span><span class="hs-operator hs-var">=$=</span><span> </span><span class="hs-identifier hs-var">Conduit</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">L</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">fromStrict</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">encodeMessage</span><span class="hs-special">)</span><span>
</span><a name="line-113"></a><span>            </span><span class="hs-operator hs-var">=$=</span><span> </span><span class="hs-identifier hs-var">sinkTFRecords</span><span> </span><a href="#local-6989586621679062548"><span class="hs-identifier hs-var">filename</span></a><span>
</span><a name="line-114"></a><span>    </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">forkFinally</span><span> </span><a href="#local-6989586621679063619"><span class="hs-identifier hs-var">consumeQueue</span></a><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">putMVar</span><span> </span><a href="#local-6989586621679063617"><span class="hs-identifier hs-var">done</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-115"></a><span>    </span><a href="TensorFlow.Logging.html#logEvent"><span class="hs-identifier hs-var">logEvent</span></a><span> </span><a href="#local-6989586621679063618"><span class="hs-identifier hs-var">writer</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">def</span><span> </span><span class="hs-operator hs-var">&amp;</span><span> </span><span class="hs-identifier hs-var">wallTime</span><span> </span><span class="hs-operator hs-var">.~</span><span> </span><a href="#local-6989586621679062546"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-116"></a><span>                          </span><span class="hs-operator hs-var">&amp;</span><span> </span><span class="hs-identifier hs-var">fileVersion</span><span> </span><span class="hs-operator hs-var">.~</span><span> </span><span class="hs-identifier hs-var">T</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">pack</span><span> </span><span class="hs-string">&quot;brain.Event:2&quot;</span><span>
</span><a name="line-117"></a><span>    </span><span class="hs-identifier hs-var">return</span><span> </span><a href="#local-6989586621679063618"><span class="hs-identifier hs-var">writer</span></a><span>
</span><a name="line-118"></a><span>
</span><a name="line-119"></a><span class="hs-identifier">closeEventWriter</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-type">EventWriter</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><a name="line-120"></a><a name="closeEventWriter"><a href="TensorFlow.Logging.html#closeEventWriter"><span class="hs-identifier">closeEventWriter</span></a></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-var">EventWriter</span></a><span> </span><a name="local-6989586621679064106"><a href="#local-6989586621679064106"><span class="hs-identifier">q</span></a></a><span> </span><a name="local-6989586621679064107"><a href="#local-6989586621679064107"><span class="hs-identifier">done</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-121"></a><span>    </span><span class="hs-identifier hs-var">atomically</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">closeTBMQueue</span><span> </span><a href="#local-6989586621679064106"><span class="hs-identifier hs-var">q</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&gt;&gt;</span><span> </span><span class="hs-identifier hs-var">readMVar</span><span> </span><a href="#local-6989586621679064107"><span class="hs-identifier hs-var">done</span></a><span>
</span><a name="line-122"></a><span>
</span><a name="line-123"></a><span class="hs-comment">-- | Logs the given Event protocol buffer.</span><span>
</span><a name="line-124"></a><span class="hs-identifier">logEvent</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">MonadIO</span><span> </span><a href="#local-6989586621679062431"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-type">EventWriter</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Event</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679062431"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><a name="line-125"></a><a name="logEvent"><a href="TensorFlow.Logging.html#logEvent"><span class="hs-identifier">logEvent</span></a></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-var">EventWriter</span></a><span> </span><a name="local-6989586621679064108"><a href="#local-6989586621679064108"><span class="hs-identifier">q</span></a></a><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679064109"><a href="#local-6989586621679064109"><span class="hs-identifier">pb</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">liftIO</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">atomically</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">writeTBMQueue</span><span> </span><a href="#local-6989586621679064108"><span class="hs-identifier hs-var">q</span></a><span> </span><a href="#local-6989586621679064109"><span class="hs-identifier hs-var">pb</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-126"></a><span>
</span><a name="line-127"></a><span class="hs-comment">-- | Logs the graph for the given 'Build' action.</span><span>
</span><a name="line-128"></a><span class="hs-identifier">logGraph</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">MonadIO</span><span> </span><a href="#local-6989586621679062429"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-type">EventWriter</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Build</span><span> </span><a href="#local-6989586621679062430"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679062429"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><a name="line-129"></a><a name="logGraph"><a href="TensorFlow.Logging.html#logGraph"><span class="hs-identifier">logGraph</span></a></a><span> </span><a name="local-6989586621679064110"><a href="#local-6989586621679064110"><span class="hs-identifier">writer</span></a></a><span> </span><a name="local-6989586621679064111"><a href="#local-6989586621679064111"><span class="hs-identifier">build</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-130"></a><span>  </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679064112"><a href="#local-6989586621679064112"><span class="hs-identifier">graph</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">asGraphDef</span><span> </span><a href="#local-6989586621679064111"><span class="hs-identifier hs-var">build</span></a><span>
</span><a name="line-131"></a><span>      </span><a name="local-6989586621679064113"><a href="#local-6989586621679064113"><span class="hs-identifier">graphBytes</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">encodeMessage</span><span> </span><a href="#local-6989586621679064112"><span class="hs-identifier hs-var">graph</span></a><span>
</span><a name="line-132"></a><span>      </span><a name="local-6989586621679064114"><a href="#local-6989586621679064114"><span class="hs-identifier">graphEvent</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">def</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Event</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&amp;</span><span> </span><span class="hs-identifier hs-var">graphDef</span><span> </span><span class="hs-operator hs-var">.~</span><span> </span><a href="#local-6989586621679064113"><span class="hs-identifier hs-var">graphBytes</span></a><span>
</span><a name="line-133"></a><span>  </span><a href="TensorFlow.Logging.html#logEvent"><span class="hs-identifier hs-var">logEvent</span></a><span> </span><a href="#local-6989586621679064110"><span class="hs-identifier hs-var">writer</span></a><span> </span><a href="#local-6989586621679064114"><span class="hs-identifier hs-var">graphEvent</span></a><span>
</span><a name="line-134"></a><span>
</span><a name="line-135"></a><span class="hs-comment">-- | Logs the given Summary event with an optional global step (use 0 if not</span><span>
</span><a name="line-136"></a><span class="hs-comment">-- applicable).</span><span>
</span><a name="line-137"></a><span class="hs-identifier">logSummary</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">MonadIO</span><span> </span><a href="#local-6989586621679061527"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Logging.html#EventWriter"><span class="hs-identifier hs-type">EventWriter</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int64</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Summary</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679061527"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><a name="line-138"></a><a name="logSummary"><a href="TensorFlow.Logging.html#logSummary"><span class="hs-identifier">logSummary</span></a></a><span> </span><a name="local-6989586621679064115"><a href="#local-6989586621679064115"><span class="hs-identifier">writer</span></a></a><span> </span><a name="local-6989586621679064116"><a href="#local-6989586621679064116"><span class="hs-identifier">step'</span></a></a><span> </span><a name="local-6989586621679064117"><a href="#local-6989586621679064117"><span class="hs-identifier">summaryProto</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-139"></a><span>    </span><a name="local-6989586621679064118"><a href="#local-6989586621679064118"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">liftIO</span><span> </span><a href="TensorFlow.Logging.html#doubleWallTime"><span class="hs-identifier hs-var">doubleWallTime</span></a><span>
</span><a name="line-140"></a><span>    </span><a href="TensorFlow.Logging.html#logEvent"><span class="hs-identifier hs-var">logEvent</span></a><span> </span><a href="#local-6989586621679064115"><span class="hs-identifier hs-var">writer</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">def</span><span> </span><span class="hs-operator hs-var">&amp;</span><span> </span><span class="hs-identifier hs-var">wallTime</span><span> </span><span class="hs-operator hs-var">.~</span><span> </span><a href="#local-6989586621679064118"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-141"></a><span>                         </span><span class="hs-operator hs-var">&amp;</span><span> </span><span class="hs-identifier hs-var">step</span><span> </span><span class="hs-operator hs-var">.~</span><span> </span><a href="#local-6989586621679064116"><span class="hs-identifier hs-var">step'</span></a><span>
</span><a name="line-142"></a><span>                         </span><span class="hs-operator hs-var">&amp;</span><span> </span><span class="hs-identifier hs-var">summary</span><span> </span><span class="hs-operator hs-var">.~</span><span> </span><a href="#local-6989586621679064117"><span class="hs-identifier hs-var">summaryProto</span></a><span>
</span><a name="line-143"></a><span>                    </span><span class="hs-special">)</span><span>
</span><a name="line-144"></a><span>
</span><a name="line-145"></a><span>
</span><a name="line-146"></a><span class="hs-comment">-- Number of seconds since epoch.</span><span>
</span><a name="line-147"></a><span class="hs-identifier">doubleWallTime</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-identifier hs-type">Double</span><span>
</span><a name="line-148"></a><a name="doubleWallTime"><a href="TensorFlow.Logging.html#doubleWallTime"><span class="hs-identifier">doubleWallTime</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679064119"><span class="hs-identifier hs-var">asDouble</span></a><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><span class="hs-identifier hs-var">getCurrentTime</span><span>
</span><a name="line-149"></a><span>    </span><span class="hs-keyword">where</span><span> </span><a name="local-6989586621679064119"><a href="#local-6989586621679064119"><span class="hs-identifier">asDouble</span></a></a><span> </span><a name="local-6989586621679064120"><a href="#local-6989586621679064120"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromRational</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">toRational</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">utcTimeToPOSIXSeconds</span><span> </span><a href="#local-6989586621679064120"><span class="hs-identifier hs-var">t</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-150"></a><span>
</span><a name="line-151"></a><span class="hs-comment">-- | Adds a 'CoreOps.histogramSummary' node. The tag argument is intentionally</span><span>
</span><a name="line-152"></a><span class="hs-comment">-- limited to a single value for simplicity.</span><span>
</span><a name="line-153"></a><span class="hs-identifier">histogramSummary</span><span> </span><span class="hs-glyph">::</span><span>
</span><a name="line-154"></a><span>    </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MonadBuild</span><span> </span><a href="#local-6989586621679061524"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">TensorType</span><span> </span><a href="#local-6989586621679061525"><span class="hs-identifier hs-type">t</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679061525"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-operator">/=</span><span> </span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">,</span><span> </span><a href="#local-6989586621679061525"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-operator">/=</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span>
</span><a name="line-155"></a><span>     </span><span class="hs-comment">-- OneOf '[Int16, Int32, Int64, Int8, Word16, Word8, Double, Float] t)</span><span>
</span><a name="line-156"></a><span>    </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">ByteString</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Tensor</span><span> </span><a href="#local-6989586621679061526"><span class="hs-identifier hs-type">v</span></a><span> </span><a href="#local-6989586621679061525"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679061524"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><a name="line-157"></a><a name="histogramSummary"><a href="TensorFlow.Logging.html#histogramSummary"><span class="hs-identifier">histogramSummary</span></a></a><span> </span><a name="local-6989586621679064130"><a href="#local-6989586621679064130"><span class="hs-identifier">tag</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">addSummary</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">CoreOps</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">histogramSummary</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">scalar</span><span> </span><a href="#local-6989586621679064130"><span class="hs-identifier hs-var">tag</span></a><span class="hs-special">)</span><span>
</span><a name="line-158"></a><span>
</span><a name="line-159"></a><span class="hs-comment">-- | Adds a 'CoreOps.scalarSummary' node.</span><span>
</span><a name="line-160"></a><span class="hs-identifier">scalarSummary</span><span> </span><span class="hs-glyph">::</span><span>
</span><a name="line-161"></a><span>    </span><span class="hs-special">(</span><span class="hs-identifier hs-type">TensorType</span><span> </span><a href="#local-6989586621679061521"><span class="hs-identifier hs-type">t</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679061521"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-operator">/=</span><span> </span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">,</span><span> </span><a href="#local-6989586621679061521"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-operator">/=</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">MonadBuild</span><span> </span><a href="#local-6989586621679061522"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span>
</span><a name="line-162"></a><span>    </span><span class="hs-comment">-- (TensorType t,</span><span>
</span><a name="line-163"></a><span>    </span><span class="hs-comment">--  OneOf '[Int16, Int32, Int64, Int8, Word16, Word8, Double, Float] t)</span><span>
</span><a name="line-164"></a><span>    </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">ByteString</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Tensor</span><span> </span><a href="#local-6989586621679061523"><span class="hs-identifier hs-type">v</span></a><span> </span><a href="#local-6989586621679061521"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679061522"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><a name="line-165"></a><a name="scalarSummary"><a href="TensorFlow.Logging.html#scalarSummary"><span class="hs-identifier">scalarSummary</span></a></a><span> </span><a name="local-6989586621679064131"><a href="#local-6989586621679064131"><span class="hs-identifier">tag</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">addSummary</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">CoreOps</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">scalarSummary</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">scalar</span><span> </span><a href="#local-6989586621679064131"><span class="hs-identifier hs-var">tag</span></a><span class="hs-special">)</span><span>
</span><a name="line-166"></a><span>
</span><a name="line-167"></a><span class="hs-comment">-- | Merge all summaries accumulated in the 'Build' into one summary.</span><span>
</span><a name="line-168"></a><span class="hs-identifier">mergeAllSummaries</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">MonadBuild</span><span> </span><a href="#local-6989586621679061520"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="#local-6989586621679061520"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-identifier hs-type">SummaryTensor</span><span>
</span><a name="line-169"></a><a name="mergeAllSummaries"><a href="TensorFlow.Logging.html#mergeAllSummaries"><span class="hs-identifier">mergeAllSummaries</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">collectAllSummaries</span><span> </span><span class="hs-operator hs-var">&gt;&gt;=</span><span> </span><span class="hs-identifier hs-var">render</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">CoreOps</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">mergeSummary</span><span>
</span><a name="line-170"></a></pre></body></html>