1
0
mirror of https://github.com/tensorflow/haskell.git synced 2024-06-16 17:48:32 +02:00
tensorflow-haskell/docs/haddock/tensorflow-0.1.0.2/src/TensorFlow.Nodes.html
2017-10-19 20:56:38 -07:00

147 lines
42 KiB
HTML

<!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-pragma">{-# LANGUAGE DataKinds #-}</span><span>
</span><a name="line-16"></a><span class="hs-pragma">{-# LANGUAGE FlexibleContexts #-}</span><span>
</span><a name="line-17"></a><span class="hs-pragma">{-# LANGUAGE FlexibleInstances #-}</span><span>
</span><a name="line-18"></a><span class="hs-pragma">{-# LANGUAGE MultiParamTypeClasses #-}</span><span>
</span><a name="line-19"></a><span class="hs-pragma">{-# LANGUAGE RankNTypes #-}</span><span>
</span><a name="line-20"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
</span><a name="line-21"></a><span class="hs-pragma">{-# LANGUAGE TypeFamilies #-}</span><span>
</span><a name="line-22"></a><span class="hs-pragma">{-# LANGUAGE TypeOperators #-}</span><span>
</span><a name="line-23"></a><span class="hs-pragma">{-# LANGUAGE UndecidableInstances #-}</span><span> </span><span class="hs-comment">-- For Fetchable (TensorExpr a)</span><span>
</span><a name="line-24"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Nodes</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-25"></a><span>
</span><a name="line-26"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control</span><span class="hs-operator">.</span><span class="hs-identifier">Applicative</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">liftA2</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">liftA3</span><span class="hs-special">)</span><span>
</span><a name="line-27"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Functor</span><span class="hs-operator">.</span><span class="hs-identifier">Identity</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Identity</span><span class="hs-special">)</span><span>
</span><a name="line-28"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Map</span><span class="hs-operator">.</span><span class="hs-identifier">Strict</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Map</span><span class="hs-special">)</span><span>
</span><a name="line-29"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Monoid</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-30"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Set</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Set</span><span class="hs-special">)</span><span>
</span><a name="line-31"></a><span class="hs-keyword">import</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-special">(</span><span class="hs-identifier hs-type">Text</span><span class="hs-special">)</span><span>
</span><a name="line-32"></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">Map</span><span class="hs-operator">.</span><span class="hs-identifier">Strict</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Map</span><span>
</span><a name="line-33"></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">Set</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Set</span><span>
</span><a name="line-34"></a><span>
</span><a name="line-35"></a><span class="hs-keyword">import</span><span> </span><a href="TensorFlow.Build.html"><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Build</span></a><span>
</span><a name="line-36"></a><span class="hs-keyword">import</span><span> </span><a href="TensorFlow.Output.html"><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Output</span></a><span>
</span><a name="line-37"></a><span class="hs-keyword">import</span><span> </span><a href="TensorFlow.Tensor.html"><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Tensor</span></a><span>
</span><a name="line-38"></a><span class="hs-keyword">import</span><span> </span><a href="TensorFlow.Types.html"><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Types</span></a><span>
</span><a name="line-39"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><a href="TensorFlow.Internal.FFI.html"><span class="hs-identifier">TensorFlow</span><span class="hs-operator">.</span><span class="hs-identifier">Internal</span><span class="hs-operator">.</span><span class="hs-identifier">FFI</span></a><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">FFI</span><span>
</span><a name="line-40"></a><span>
</span><a name="line-41"></a><span class="hs-comment">-- | Types that contain ops which can be run.</span><span>
</span><a name="line-42"></a><span class="hs-keyword">class</span><span> </span><a name="Nodes"><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier">Nodes</span></a></a><span> </span><a name="local-6989586621679125018"><a href="#local-6989586621679125018"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-43"></a><span> </span><span class="hs-identifier">getNodes</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679125018"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.Build.html#Build"><span class="hs-identifier hs-type">Build</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Set</span><span> </span><a href="TensorFlow.Output.html#NodeName"><span class="hs-identifier hs-type">NodeName</span></a><span class="hs-special">)</span><span>
</span><a name="line-44"></a><span>
</span><a name="line-45"></a><span class="hs-comment">-- | Types that tensor representations (e.g. 'Tensor', 'ControlNode') can be</span><span>
</span><a name="line-46"></a><span class="hs-comment">-- fetched into.</span><span>
</span><a name="line-47"></a><span class="hs-comment">--</span><span>
</span><a name="line-48"></a><span class="hs-comment">-- Includes collections of tensors (e.g. tuples).</span><span>
</span><a name="line-49"></a><span class="hs-keyword">class</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125016"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a name="Fetchable"><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier">Fetchable</span></a></a><span> </span><a name="local-6989586621679125016"><a href="#local-6989586621679125016"><span class="hs-identifier">t</span></a></a><span> </span><a name="local-6989586621679125017"><a href="#local-6989586621679125017"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-50"></a><span> </span><span class="hs-identifier">getFetch</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679125016"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.Build.html#Build"><span class="hs-identifier hs-type">Build</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-type">Fetch</span></a><span> </span><a href="#local-6989586621679125017"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
</span><a name="line-51"></a><span>
</span><a name="line-52"></a><span class="hs-comment">-- | Fetch action. Keeps track of what needs to be fetched and how to decode</span><span>
</span><a name="line-53"></a><span class="hs-comment">-- the fetched data.</span><span>
</span><a name="line-54"></a><span class="hs-keyword">data</span><span> </span><a name="Fetch"><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier">Fetch</span></a></a><span> </span><a name="local-6989586621679125015"><a href="#local-6989586621679125015"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="Fetch"><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier">Fetch</span></a></a><span>
</span><a name="line-55"></a><span> </span><span class="hs-special">{</span><span> </span><span class="hs-comment">-- | Nodes to fetch</span><span>
</span><a name="line-56"></a><span> </span><a name="fetches"><a href="TensorFlow.Nodes.html#fetches"><span class="hs-identifier">fetches</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Set</span><span> </span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-57"></a><span> </span><span class="hs-comment">-- | Function to create an 'a' from the fetched data.</span><span>
</span><a name="line-58"></a><span> </span><span class="hs-special">,</span><span> </span><a name="fetchRestore"><a href="TensorFlow.Nodes.html#fetchRestore"><span class="hs-identifier">fetchRestore</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Map</span><span> </span><span class="hs-identifier hs-type">Text</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-type">FFI</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">TensorData</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679125015"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-59"></a><span> </span><span class="hs-special">}</span><span>
</span><a name="line-60"></a><span>
</span><a name="line-61"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-identifier hs-type">Functor</span><span> </span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-type">Fetch</span></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-62"></a><span> </span><a name="local-3458764513820541101"><span class="hs-identifier">fmap</span></a><span> </span><a name="local-6989586621679125099"><a href="#local-6989586621679125099"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-var">Fetch</span></a><span> </span><a name="local-6989586621679125100"><a href="#local-6989586621679125100"><span class="hs-identifier">fetch</span></a></a><span> </span><a name="local-6989586621679125101"><a href="#local-6989586621679125101"><span class="hs-identifier">restore</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-var">Fetch</span></a><span> </span><a href="#local-6989586621679125100"><span class="hs-identifier hs-var">fetch</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125099"><span class="hs-identifier hs-var">f</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679125101"><span class="hs-identifier hs-var">restore</span></a><span class="hs-special">)</span><span>
</span><a name="line-63"></a><span>
</span><a name="line-64"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-identifier hs-type">Applicative</span><span> </span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-type">Fetch</span></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-65"></a><span> </span><a name="local-3458764513820541680"><span class="hs-identifier">pure</span></a><span> </span><a name="local-6989586621679125094"><a href="#local-6989586621679125094"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-var">Fetch</span></a><span> </span><span class="hs-identifier hs-var">Set</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">empty</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">const</span><span> </span><a href="#local-6989586621679125094"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span>
</span><a name="line-66"></a><span> </span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-var">Fetch</span></a><span> </span><a name="local-6989586621679125095"><a href="#local-6989586621679125095"><span class="hs-identifier">fetch</span></a></a><span> </span><a name="local-6989586621679125096"><a href="#local-6989586621679125096"><span class="hs-identifier">restore</span></a></a><span> </span><a name="local-3458764513820541679"><span class="hs-operator">&lt;*&gt;</span></a><span> </span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-var">Fetch</span></a><span> </span><a name="local-6989586621679125097"><a href="#local-6989586621679125097"><span class="hs-identifier">fetch'</span></a></a><span> </span><a name="local-6989586621679125098"><a href="#local-6989586621679125098"><span class="hs-identifier">restore'</span></a></a><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-67"></a><span> </span><a href="TensorFlow.Nodes.html#Fetch"><span class="hs-identifier hs-var">Fetch</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125095"><span class="hs-identifier hs-var">fetch</span></a><span> </span><span class="hs-operator hs-var">&lt;&gt;</span><span> </span><a href="#local-6989586621679125097"><span class="hs-identifier hs-var">fetch'</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125096"><span class="hs-identifier hs-var">restore</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</span><span> </span><a href="#local-6989586621679125098"><span class="hs-identifier hs-var">restore'</span></a><span class="hs-special">)</span><span>
</span><a name="line-68"></a><span>
</span><a name="line-69"></a><span class="hs-identifier">nodesUnion</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Monoid</span><span> </span><a href="#local-6989586621679125021"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Traversable</span><span> </span><a href="#local-6989586621679125022"><span class="hs-identifier hs-type">t</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Applicative</span><span> </span><a href="#local-6989586621679125023"><span class="hs-identifier hs-type">f</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="#local-6989586621679125022"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125023"><span class="hs-identifier hs-type">f</span></a><span> </span><a href="#local-6989586621679125021"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679125023"><span class="hs-identifier hs-type">f</span></a><span> </span><a href="#local-6989586621679125021"><span class="hs-identifier hs-type">b</span></a><span>
</span><a name="line-70"></a><a name="nodesUnion"><a href="TensorFlow.Nodes.html#nodesUnion"><span class="hs-identifier">nodesUnion</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">foldMap</span><span> </span><span class="hs-identifier hs-var">id</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">sequenceA</span><span>
</span><a name="line-71"></a><span>
</span><a name="line-72"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125090"><span class="hs-identifier hs-type">t1</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125091"><span class="hs-identifier hs-type">t2</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125090"><span class="hs-identifier hs-type">t1</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125091"><span class="hs-identifier hs-type">t2</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-73"></a><span> </span><a name="local-8214565720323899923"><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier">getNodes</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679125092"><a href="#local-6989586621679125092"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679125093"><a href="#local-6989586621679125093"><span class="hs-identifier">y</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Nodes.html#nodesUnion"><span class="hs-identifier hs-var">nodesUnion</span></a><span> </span><span class="hs-special">[</span><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier hs-var">getNodes</span></a><span> </span><a href="#local-6989586621679125092"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier hs-var">getNodes</span></a><span> </span><a href="#local-6989586621679125093"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">]</span><span>
</span><a name="line-74"></a><span>
</span><a name="line-75"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125084"><span class="hs-identifier hs-type">t1</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125085"><span class="hs-identifier hs-type">t2</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125086"><span class="hs-identifier hs-type">t3</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125084"><span class="hs-identifier hs-type">t1</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125085"><span class="hs-identifier hs-type">t2</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125086"><span class="hs-identifier hs-type">t3</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-76"></a><span> </span><a name="local-8214565720323899923"><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier">getNodes</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679125087"><a href="#local-6989586621679125087"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679125088"><a href="#local-6989586621679125088"><span class="hs-identifier">y</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679125089"><a href="#local-6989586621679125089"><span class="hs-identifier">z</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Nodes.html#nodesUnion"><span class="hs-identifier hs-var">nodesUnion</span></a><span> </span><span class="hs-special">[</span><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier hs-var">getNodes</span></a><span> </span><a href="#local-6989586621679125087"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier hs-var">getNodes</span></a><span> </span><a href="#local-6989586621679125088"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier hs-var">getNodes</span></a><span> </span><a href="#local-6989586621679125089"><span class="hs-identifier hs-var">z</span></a><span class="hs-special">]</span><span>
</span><a name="line-77"></a><span>
</span><a name="line-78"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="#local-6989586621679125078"><span class="hs-identifier hs-type">t1</span></a><span> </span><a href="#local-6989586621679125079"><span class="hs-identifier hs-type">a1</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="#local-6989586621679125080"><span class="hs-identifier hs-type">t2</span></a><span> </span><a href="#local-6989586621679125081"><span class="hs-identifier hs-type">a2</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125078"><span class="hs-identifier hs-type">t1</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125080"><span class="hs-identifier hs-type">t2</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125079"><span class="hs-identifier hs-type">a1</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125081"><span class="hs-identifier hs-type">a2</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-79"></a><span> </span><a name="local-8214565720323899921"><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier">getFetch</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679125082"><a href="#local-6989586621679125082"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679125083"><a href="#local-6989586621679125083"><span class="hs-identifier">y</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">liftA2</span><span> </span><span class="hs-special">(</span><span class="hs-special">,</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier hs-var">getFetch</span></a><span> </span><a href="#local-6989586621679125082"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</span><span> </span><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier hs-var">getFetch</span></a><span> </span><a href="#local-6989586621679125083"><span class="hs-identifier hs-var">y</span></a><span>
</span><a name="line-80"></a><span>
</span><a name="line-81"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="#local-6989586621679125069"><span class="hs-identifier hs-type">t1</span></a><span> </span><a href="#local-6989586621679125070"><span class="hs-identifier hs-type">a1</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="#local-6989586621679125071"><span class="hs-identifier hs-type">t2</span></a><span> </span><a href="#local-6989586621679125072"><span class="hs-identifier hs-type">a2</span></a><span class="hs-special">,</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="#local-6989586621679125073"><span class="hs-identifier hs-type">t3</span></a><span> </span><a href="#local-6989586621679125074"><span class="hs-identifier hs-type">a3</span></a><span class="hs-special">)</span><span>
</span><a name="line-82"></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125069"><span class="hs-identifier hs-type">t1</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125071"><span class="hs-identifier hs-type">t2</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125073"><span class="hs-identifier hs-type">t3</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679125070"><span class="hs-identifier hs-type">a1</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125072"><span class="hs-identifier hs-type">a2</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679125074"><span class="hs-identifier hs-type">a3</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-83"></a><span> </span><a name="local-8214565720323899921"><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier">getFetch</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679125075"><a href="#local-6989586621679125075"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679125076"><a href="#local-6989586621679125076"><span class="hs-identifier">y</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679125077"><a href="#local-6989586621679125077"><span class="hs-identifier">z</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-84"></a><span> </span><span class="hs-identifier hs-var">liftA3</span><span> </span><span class="hs-special">(</span><span class="hs-special">,</span><span class="hs-special">,</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier hs-var">getFetch</span></a><span> </span><a href="#local-6989586621679125075"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</span><span> </span><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier hs-var">getFetch</span></a><span> </span><a href="#local-6989586621679125076"><span class="hs-identifier hs-var">y</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</span><span> </span><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier hs-var">getFetch</span></a><span> </span><a href="#local-6989586621679125077"><span class="hs-identifier hs-var">z</span></a><span>
</span><a name="line-85"></a><span>
</span><a name="line-86"></a><span class="hs-keyword">instance</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125068"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679125068"><span class="hs-identifier hs-type">t</span></a><span class="hs-special">]</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-87"></a><span> </span><a name="local-8214565720323899923"><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier">getNodes</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Nodes.html#nodesUnion"><span class="hs-identifier hs-var">nodesUnion</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier hs-var">getNodes</span></a><span>
</span><a name="line-88"></a><span>
</span><a name="line-89"></a><span class="hs-keyword">instance</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="#local-6989586621679125065"><span class="hs-identifier hs-type">t</span></a><span> </span><a href="#local-6989586621679125066"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679125065"><span class="hs-identifier hs-type">t</span></a><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679125066"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">]</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-90"></a><span> </span><a name="local-8214565720323899921"><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier">getFetch</span></a></a><span> </span><a name="local-6989586621679125067"><a href="#local-6989586621679125067"><span class="hs-identifier">ts</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">sequenceA</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><span class="hs-identifier hs-var">mapM</span><span> </span><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier hs-var">getFetch</span></a><span> </span><a href="#local-6989586621679125067"><span class="hs-identifier hs-var">ts</span></a><span>
</span><a name="line-91"></a><span>
</span><a name="line-92"></a><span class="hs-keyword">instance</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="#local-6989586621679125064"><span class="hs-identifier hs-type">t</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="#local-6989586621679125064"><span class="hs-identifier hs-type">t</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-93"></a><span> </span><a name="local-8214565720323899923"><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier">getNodes</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Nodes.html#nodesUnion"><span class="hs-identifier hs-var">nodesUnion</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier hs-var">getNodes</span></a><span>
</span><a name="line-94"></a><span>
</span><a name="line-95"></a><span class="hs-keyword">instance</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="#local-6989586621679125062"><span class="hs-identifier hs-type">t</span></a><span> </span><a href="#local-6989586621679125063"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="#local-6989586621679125062"><span class="hs-identifier hs-type">t</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Maybe</span><span> </span><a href="#local-6989586621679125063"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-96"></a><span> </span><a name="local-8214565720323899921"><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier">getFetch</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">sequenceA</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">mapM</span><span> </span><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier hs-var">getFetch</span></a><span>
</span><a name="line-97"></a><span>
</span><a name="line-98"></a><span class="hs-keyword">instance</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><a href="TensorFlow.Output.html#ControlNode"><span class="hs-identifier hs-type">ControlNode</span></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-99"></a><span> </span><a name="local-8214565720323899923"><a href="TensorFlow.Nodes.html#getNodes"><span class="hs-identifier">getNodes</span></a></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Output.html#ControlNode"><span class="hs-identifier hs-var">ControlNode</span></a><span> </span><a name="local-6989586621679125061"><a href="#local-6989586621679125061"><span class="hs-identifier">o</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">pure</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">Set</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">singleton</span><span> </span><a href="#local-6989586621679125061"><span class="hs-identifier hs-var">o</span></a><span>
</span><a name="line-100"></a><span>
</span><a name="line-101"></a><span class="hs-comment">-- We use the constraint @(a ~ ())@ to help with type inference. For example,</span><span>
</span><a name="line-102"></a><span class="hs-comment">-- if @t :: ControlNode@, then this constraint ensures that @run t :: Session</span><span>
</span><a name="line-103"></a><span class="hs-comment">-- ()@. If we used @instance Fetchable ControlNode ()@ instead, then that</span><span>
</span><a name="line-104"></a><span class="hs-comment">-- expression would be ambiguous without explicitly specifying the return type.</span><span>
</span><a name="line-105"></a><span class="hs-keyword">instance</span><span> </span><a href="#local-6989586621679125060"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="TensorFlow.Nodes.html#Fetchable"><span class="hs-identifier hs-type">Fetchable</span></a><span> </span><a href="TensorFlow.Output.html#ControlNode"><span class="hs-identifier hs-type">ControlNode</span></a><span> </span><a href="#local-6989586621679125060"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-106"></a><span> </span><a name="local-8214565720323899921"><a href="TensorFlow.Nodes.html#getFetch"><span class="hs-identifier">getFetch</span></a></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">return</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">pure</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><a name="line-107"></a><span>
</span><a name="line-108"></a><span class="hs-keyword">instance</span><span> </span><a href="TensorFlow.Nodes.html#Nodes"><span class="hs-identifier hs-type">Nodes</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Types.html#ListOf"><span class="hs-identifier hs-type">ListOf</span></a><span> </span><a href="#local-6989586621679125059"><span class="hs-identifier hs-type">f</span></a><span> </span><span class="hs-char">'[]) where
getNodes _ = return Set.empty
instance (Nodes (f a), Nodes (ListOf f as)) =&gt; Nodes (ListOf f (a ': as)) where
getNodes (x :/ xs) = liftA2 Set.union (getNodes x) (getNodes xs)
instance l ~ List '[] =&gt; Fetchable (ListOf f '[]) l where
getFetch _ = return $ pure Nil
instance (Fetchable (f t) a, Fetchable (ListOf f ts) (List as), i ~ Identity)
=&gt; Fetchable (ListOf f (t ': ts)) (ListOf i (a ': as)) where
getFetch (x :/ xs) = liftA2 (\y ys -&gt; y /:/ ys) &lt;$&gt; getFetch x &lt;*&gt; getFetch xs
instance Nodes (Tensor v a) where
getNodes (Tensor o) = Set.singleton . outputNodeName &lt;$&gt; toBuild o
fetchTensorVector :: forall a v . (TensorType a)
=&gt; Tensor v a -&gt; Build (Fetch (TensorData a))
fetchTensorVector (Tensor o) = do
outputName &lt;- encodeOutput &lt;$&gt; toBuild o
pure $ Fetch (Set.singleton outputName) $ \tensors -&gt;
let tensorData = tensors Map.! outputName
expectedType = tensorType (undefined :: a)
actualType = FFI.tensorDataType tensorData
badTypeError = error $ &quot;Bad tensor type: expected &quot;
++ show expectedType
++ &quot;, got &quot;
++ show actualType
in if expectedType /= actualType
then badTypeError
else TensorData tensorData
-- The constraint &quot;a ~ a'&quot; means that the input/output of fetch can constrain
-- the TensorType of each other.
instance (TensorType a, a ~ a') =&gt; Fetchable (Tensor v a) (TensorData a') where
getFetch = fetchTensorVector
instance (TensorType a, TensorDataType s a, a ~ a') =&gt; Fetchable (Tensor v a) (s a') where
getFetch t = fmap decodeTensorData &lt;$&gt; fetchTensorVector t
</span></pre></body></html>