1
0
mirror of https://github.com/tensorflow/haskell.git synced 2024-06-28 23:48:36 +02:00
tensorflow-haskell/docs/haddock/tensorflow-0.1.0.2/src/TensorFlow.Internal.FFI.html
2017-10-19 20:56:38 -07:00

267 lines
99 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 DeriveDataTypeable #-}</span><span>
</span><a name="line-16"></a><span class="hs-pragma">{-# LANGUAGE OverloadedStrings #-}</span><span>
</span><a name="line-17"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
</span><a name="line-18"></a><span>
</span><a name="line-19"></a><span class="hs-keyword">module</span><span> </span><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><span>
</span><a name="line-20"></a><span> </span><span class="hs-special">(</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorFlowException"><span class="hs-identifier hs-type">TensorFlowException</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-21"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.Raw.html#Session"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Session</span></a><span>
</span><a name="line-22"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#withSession"><span class="hs-identifier hs-var">withSession</span></a><span>
</span><a name="line-23"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#extendGraph"><span class="hs-identifier hs-var">extendGraph</span></a><span>
</span><a name="line-24"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#run"><span class="hs-identifier hs-var">run</span></a><span>
</span><a name="line-25"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-type">TensorData</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><a name="line-26"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#setSessionConfig"><span class="hs-identifier hs-var">setSessionConfig</span></a><span>
</span><a name="line-27"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#setSessionTarget"><span class="hs-identifier hs-var">setSessionTarget</span></a><span>
</span><a name="line-28"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#getAllOpList"><span class="hs-identifier hs-var">getAllOpList</span></a><span>
</span><a name="line-29"></a><span> </span><span class="hs-comment">-- * Internal helper.</span><span>
</span><a name="line-30"></a><span> </span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#useProtoAsVoidPtrLen"><span class="hs-identifier hs-var">useProtoAsVoidPtrLen</span></a><span>
</span><a name="line-31"></a><span> </span><span class="hs-special">)</span><span>
</span><a name="line-32"></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-33"></a><span>
</span><a name="line-34"></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">Async</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Async</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">async</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">cancel</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">waitCatch</span><span class="hs-special">)</span><span>
</span><a name="line-35"></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">modifyMVarMasked_</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">newMVar</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">takeMVar</span><span class="hs-special">)</span><span>
</span><a name="line-36"></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> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">when</span><span class="hs-special">)</span><span>
</span><a name="line-37"></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-type">Exception</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">throwM</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">bracket</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">finally</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">mask_</span><span class="hs-special">)</span><span>
</span><a name="line-38"></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-39"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Bits</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Bits</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">toIntegralSized</span><span class="hs-special">)</span><span>
</span><a name="line-40"></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-41"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromMaybe</span><span class="hs-special">)</span><span>
</span><a name="line-42"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Typeable</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Typeable</span><span class="hs-special">)</span><span>
</span><a name="line-43"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Word</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Word8</span><span class="hs-special">)</span><span>
</span><a name="line-44"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Foreign</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Ptr</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">FunPtr</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">nullPtr</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">castPtr</span><span class="hs-special">)</span><span>
</span><a name="line-45"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Foreign</span><span class="hs-operator">.</span><span class="hs-identifier">C</span><span class="hs-operator">.</span><span class="hs-identifier">String</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">CString</span><span class="hs-special">)</span><span>
</span><a name="line-46"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Foreign</span><span class="hs-operator">.</span><span class="hs-identifier">ForeignPtr</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">newForeignPtr</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">newForeignPtr_</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">withForeignPtr</span><span class="hs-special">)</span><span>
</span><a name="line-47"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Foreign</span><span class="hs-operator">.</span><span class="hs-identifier">Marshal</span><span class="hs-operator">.</span><span class="hs-identifier">Alloc</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">free</span><span class="hs-special">)</span><span>
</span><a name="line-48"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Foreign</span><span class="hs-operator">.</span><span class="hs-identifier">Marshal</span><span class="hs-operator">.</span><span class="hs-identifier">Array</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">withArrayLen</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">peekArray</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">mallocArray</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">copyArray</span><span class="hs-special">)</span><span>
</span><a name="line-49"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">System</span><span class="hs-operator">.</span><span class="hs-identifier">IO</span><span class="hs-operator">.</span><span class="hs-identifier">Unsafe</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">unsafePerformIO</span><span class="hs-special">)</span><span>
</span><a name="line-50"></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> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">B</span><span>
</span><a name="line-51"></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-52"></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 class="hs-operator">.</span><span class="hs-identifier">Encoding</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">T</span><span>
</span><a name="line-53"></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 class="hs-operator">.</span><span class="hs-identifier">Encoding</span><span class="hs-operator">.</span><span class="hs-identifier">Error</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">T</span><span>
</span><a name="line-54"></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">Vector</span><span class="hs-operator">.</span><span class="hs-identifier">Storable</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">S</span><span>
</span><a name="line-55"></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">Vector</span><span class="hs-operator">.</span><span class="hs-identifier">Storable</span><span class="hs-operator">.</span><span class="hs-identifier">Mutable</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">M</span><span>
</span><a name="line-56"></a><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">ProtoLens</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Message</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">encodeMessage</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">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">Graph</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">GraphDef</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">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">Types</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">DataType</span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</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">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">Protobuf</span><span class="hs-operator">.</span><span class="hs-identifier">Config</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">ConfigProto</span><span class="hs-special">)</span><span>
</span><a name="line-61"></a><span>
</span><a name="line-62"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><a href="TensorFlow.Internal.Raw.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">Raw</span></a><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Raw</span><span>
</span><a name="line-63"></a><span>
</span><a name="line-64"></a><span class="hs-keyword">data</span><span> </span><a name="TensorFlowException"><a href="TensorFlow.Internal.FFI.html#TensorFlowException"><span class="hs-identifier">TensorFlowException</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="TensorFlowException"><a href="TensorFlow.Internal.FFI.html#TensorFlowException"><span class="hs-identifier">TensorFlowException</span></a></a><span> </span><a href="TensorFlow.Internal.Raw.html#Code"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Code</span></a><span> </span><span class="hs-identifier hs-type">T</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Text</span><span>
</span><a name="line-65"></a><span> </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Eq</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Typeable</span><span class="hs-special">)</span><span>
</span><a name="line-66"></a><span>
</span><a name="line-67"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-identifier hs-type">Exception</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorFlowException"><span class="hs-identifier hs-type">TensorFlowException</span></a><span>
</span><a name="line-68"></a><span>
</span><a name="line-69"></a><span class="hs-comment">-- | All of the data needed to represent a tensor.</span><span>
</span><a name="line-70"></a><span class="hs-keyword">data</span><span> </span><a name="TensorData"><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier">TensorData</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="TensorData"><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier">TensorData</span></a></a><span>
</span><a name="line-71"></a><span> </span><span class="hs-special">{</span><span> </span><a name="tensorDataDimensions"><a href="TensorFlow.Internal.FFI.html#tensorDataDimensions"><span class="hs-identifier">tensorDataDimensions</span></a></a><span> </span><span class="hs-glyph">::</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-72"></a><span> </span><span class="hs-special">,</span><span> </span><a name="tensorDataType"><a href="TensorFlow.Internal.FFI.html#tensorDataType"><span class="hs-identifier">tensorDataType</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-identifier hs-type">DataType</span><span>
</span><a name="line-73"></a><span> </span><span class="hs-special">,</span><span> </span><a name="tensorDataBytes"><a href="TensorFlow.Internal.FFI.html#tensorDataBytes"><span class="hs-identifier">tensorDataBytes</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="hs-identifier hs-type">S</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Vector</span><span> </span><span class="hs-identifier hs-type">Word8</span><span class="hs-special">)</span><span>
</span><a name="line-74"></a><span> </span><span class="hs-special">}</span><span>
</span><a name="line-75"></a><span> </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Eq</span><span class="hs-special">)</span><span>
</span><a name="line-76"></a><span>
</span><a name="line-77"></a><span class="hs-comment">-- | Runs the given action after creating a session with options</span><span>
</span><a name="line-78"></a><span class="hs-comment">-- populated by the given optionSetter.</span><span>
</span><a name="line-79"></a><span class="hs-identifier">withSession</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">MonadIO</span><span> </span><a href="#local-6989586621679083748"><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-6989586621679083748"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span>
</span><a name="line-80"></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#SessionOptions"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">SessionOptions</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 class="hs-special">)</span><span>
</span><a name="line-81"></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><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 class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#Session"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Session</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679083748"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679083749"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
</span><a name="line-82"></a><span> </span><span class="hs-comment">-- ^ The action can spawn concurrent tasks which will</span><span>
</span><a name="line-83"></a><span> </span><span class="hs-comment">-- be canceled before withSession returns.</span><span>
</span><a name="line-84"></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679083748"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679083749"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-85"></a><a name="withSession"><a href="TensorFlow.Internal.FFI.html#withSession"><span class="hs-identifier">withSession</span></a></a><span> </span><a name="local-6989586621679083750"><a href="#local-6989586621679083750"><span class="hs-identifier">optionSetter</span></a></a><span> </span><a name="local-6989586621679083751"><a href="#local-6989586621679083751"><span class="hs-identifier">action</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-86"></a><span> </span><a name="local-6989586621679083752"><a href="#local-6989586621679083752"><span class="hs-identifier">drain</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">liftIO</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">newMVar</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><a name="line-87"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679083753"><a href="#local-6989586621679083753"><span class="hs-identifier">cleanup</span></a></a><span> </span><a name="local-6989586621679083754"><a href="#local-6989586621679083754"><span class="hs-identifier">s</span></a></a><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-88"></a><span> </span><span class="hs-comment">-- Closes the session to nudge the pending run calls to fail and exit.</span><span>
</span><a name="line-89"></a><span> </span><span class="hs-identifier hs-var">finally</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#checkStatus"><span class="hs-identifier hs-var">checkStatus</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#closeSession"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">closeSession</span></a><span> </span><a href="#local-6989586621679083754"><span class="hs-identifier hs-var">s</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-90"></a><span> </span><a name="local-6989586621679083755"><a href="#local-6989586621679083755"><span class="hs-identifier">runners</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">takeMVar</span><span> </span><a href="#local-6989586621679083752"><span class="hs-identifier hs-var">drain</span></a><span>
</span><a name="line-91"></a><span> </span><span class="hs-comment">-- Collects all runners before deleting the session.</span><span>
</span><a name="line-92"></a><span> </span><span class="hs-identifier hs-var">mapM_</span><span> </span><a href="TensorFlow.Internal.FFI.html#shutDownRunner"><span class="hs-identifier hs-var">shutDownRunner</span></a><span> </span><a href="#local-6989586621679083755"><span class="hs-identifier hs-var">runners</span></a><span>
</span><a name="line-93"></a><span> </span><a href="TensorFlow.Internal.FFI.html#checkStatus"><span class="hs-identifier hs-var">checkStatus</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#deleteSession"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">deleteSession</span></a><span> </span><a href="#local-6989586621679083754"><span class="hs-identifier hs-var">s</span></a><span class="hs-special">)</span><span>
</span><a name="line-94"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679084807"><a href="#local-6989586621679084807"><span class="hs-identifier">bracketIO</span></a></a><span> </span><a name="local-6989586621679084808"><a href="#local-6989586621679084808"><span class="hs-identifier">x</span></a></a><span> </span><a name="local-6989586621679084809"><a href="#local-6989586621679084809"><span class="hs-identifier">y</span></a></a><span> </span><span class="hs-glyph">=</span><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><a href="#local-6989586621679084808"><span class="hs-identifier hs-var">x</span></a><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="#local-6989586621679084809"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">)</span><span>
</span><a name="line-95"></a><span> </span><a href="#local-6989586621679084807"><span class="hs-identifier hs-var">bracketIO</span></a><span> </span><a href="TensorFlow.Internal.Raw.html#newSessionOptions"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">newSessionOptions</span></a><span> </span><a href="TensorFlow.Internal.Raw.html#deleteSessionOptions"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">deleteSessionOptions</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679084810"><a href="#local-6989586621679084810"><span class="hs-identifier">options</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-96"></a><span> </span><a href="#local-6989586621679084807"><span class="hs-identifier hs-var">bracketIO</span></a><span>
</span><a name="line-97"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679083750"><span class="hs-identifier hs-var">optionSetter</span></a><span> </span><a href="#local-6989586621679084810"><span class="hs-identifier hs-var">options</span></a><span> </span><span class="hs-operator hs-var">&gt;&gt;</span><span> </span><a href="TensorFlow.Internal.FFI.html#checkStatus"><span class="hs-identifier hs-var">checkStatus</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#newSession"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">newSession</span></a><span> </span><a href="#local-6989586621679084810"><span class="hs-identifier hs-var">options</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-98"></a><span> </span><a href="#local-6989586621679083753"><span class="hs-identifier hs-var">cleanup</span></a><span>
</span><a name="line-99"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679083751"><span class="hs-identifier hs-var">action</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#asyncCollector"><span class="hs-identifier hs-var">asyncCollector</span></a><span> </span><a href="#local-6989586621679083752"><span class="hs-identifier hs-var">drain</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-100"></a><span>
</span><a name="line-101"></a><span class="hs-identifier">asyncCollector</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">MVar</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">Async</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">]</span><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><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-102"></a><a name="asyncCollector"><a href="TensorFlow.Internal.FFI.html#asyncCollector"><span class="hs-identifier">asyncCollector</span></a></a><span> </span><a name="local-6989586621679084811"><a href="#local-6989586621679084811"><span class="hs-identifier">drain</span></a></a><span> </span><a name="local-6989586621679084812"><a href="#local-6989586621679084812"><span class="hs-identifier">runner</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">modifyMVarMasked_</span><span> </span><a href="#local-6989586621679084811"><span class="hs-identifier hs-var">drain</span></a><span> </span><a href="#local-6989586621679084813"><span class="hs-identifier hs-var">launchAndRecord</span></a><span>
</span><a name="line-103"></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-104"></a><span> </span><a name="local-6989586621679084813"><a href="#local-6989586621679084813"><span class="hs-identifier">launchAndRecord</span></a></a><span> </span><a name="local-6989586621679084814"><a href="#local-6989586621679084814"><span class="hs-identifier">restRunners</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">:</span><span> </span><a href="#local-6989586621679084814"><span class="hs-identifier hs-var">restRunners</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><span class="hs-identifier hs-var">async</span><span> </span><a href="#local-6989586621679084812"><span class="hs-identifier hs-var">runner</span></a><span>
</span><a name="line-105"></a><span>
</span><a name="line-106"></a><span class="hs-identifier">shutDownRunner</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Async</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><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-107"></a><a name="shutDownRunner"><a href="TensorFlow.Internal.FFI.html#shutDownRunner"><span class="hs-identifier">shutDownRunner</span></a></a><span> </span><a name="local-6989586621679084815"><a href="#local-6989586621679084815"><span class="hs-identifier">r</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-108"></a><span> </span><span class="hs-identifier hs-var">cancel</span><span> </span><a href="#local-6989586621679084815"><span class="hs-identifier hs-var">r</span></a><span>
</span><a name="line-109"></a><span> </span><span class="hs-comment">-- TODO(gnezdo): manage exceptions better than print.</span><span>
</span><a name="line-110"></a><span> </span><span class="hs-identifier hs-var">either</span><span> </span><span class="hs-identifier hs-var">print</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">const</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">return</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;&lt;</span><span> </span><span class="hs-identifier hs-var">waitCatch</span><span> </span><a href="#local-6989586621679084815"><span class="hs-identifier hs-var">r</span></a><span>
</span><a name="line-111"></a><span>
</span><a name="line-112"></a><span class="hs-identifier">extendGraph</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.Internal.Raw.html#Session"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Session</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">GraphDef</span><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-113"></a><a name="extendGraph"><a href="TensorFlow.Internal.FFI.html#extendGraph"><span class="hs-identifier">extendGraph</span></a></a><span> </span><a name="local-6989586621679084951"><a href="#local-6989586621679084951"><span class="hs-identifier">session</span></a></a><span> </span><a name="local-6989586621679084952"><a href="#local-6989586621679084952"><span class="hs-identifier">pb</span></a></a><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-114"></a><span> </span><a href="TensorFlow.Internal.FFI.html#useProtoAsVoidPtrLen"><span class="hs-identifier hs-var">useProtoAsVoidPtrLen</span></a><span> </span><a href="#local-6989586621679084952"><span class="hs-identifier hs-var">pb</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679084953"><a href="#local-6989586621679084953"><span class="hs-identifier">ptr</span></a></a><span> </span><a name="local-6989586621679084954"><a href="#local-6989586621679084954"><span class="hs-identifier">len</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><a name="line-115"></a><span> </span><a href="TensorFlow.Internal.FFI.html#checkStatus"><span class="hs-identifier hs-var">checkStatus</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.Internal.Raw.html#extendGraph"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">extendGraph</span></a><span> </span><a href="#local-6989586621679084951"><span class="hs-identifier hs-var">session</span></a><span> </span><a href="#local-6989586621679084953"><span class="hs-identifier hs-var">ptr</span></a><span> </span><a href="#local-6989586621679084954"><span class="hs-identifier hs-var">len</span></a><span>
</span><a name="line-116"></a><span>
</span><a name="line-117"></a><span>
</span><a name="line-118"></a><span class="hs-identifier">run</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.Internal.Raw.html#Session"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Session</span></a><span>
</span><a name="line-119"></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="hs-identifier hs-type">B</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">,</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-type">TensorData</span></a><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- ^ Feeds.</span><span>
</span><a name="line-120"></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">B</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- ^ Fetches.</span><span>
</span><a name="line-121"></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">B</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- ^ Targets.</span><span>
</span><a name="line-122"></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><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-type">TensorData</span></a><span class="hs-special">]</span><span>
</span><a name="line-123"></a><a name="run"><a href="TensorFlow.Internal.FFI.html#run"><span class="hs-identifier">run</span></a></a><span> </span><a name="local-6989586621679084955"><a href="#local-6989586621679084955"><span class="hs-identifier">session</span></a></a><span> </span><a name="local-6989586621679084956"><a href="#local-6989586621679084956"><span class="hs-identifier">feeds</span></a></a><span> </span><a name="local-6989586621679084957"><a href="#local-6989586621679084957"><span class="hs-identifier">fetches</span></a></a><span> </span><a name="local-6989586621679084958"><a href="#local-6989586621679084958"><span class="hs-identifier">targets</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-124"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679084959"><a href="#local-6989586621679084959"><span class="hs-identifier">nullTensor</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Internal.Raw.html#Tensor"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">Tensor</span></a><span> </span><span class="hs-identifier hs-var">nullPtr</span><span>
</span><a name="line-125"></a><span> </span><span class="hs-comment">-- Use mask to avoid leaking input tensors before they are passed to 'run'</span><span>
</span><a name="line-126"></a><span> </span><span class="hs-comment">-- and output tensors before they are passed to 'createTensorData'.</span><span>
</span><a name="line-127"></a><span> </span><span class="hs-identifier hs-var">mask_</span><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-128"></a><span> </span><span class="hs-comment">-- Feeds</span><span>
</span><a name="line-129"></a><span> </span><a href="TensorFlow.Internal.FFI.html#withStringArrayLen"><span class="hs-identifier hs-var">withStringArrayLen</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">fst</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="#local-6989586621679084956"><span class="hs-identifier hs-var">feeds</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679084971"><a href="#local-6989586621679084971"><span class="hs-identifier">feedsLen</span></a></a><span> </span><a name="local-6989586621679084972"><a href="#local-6989586621679084972"><span class="hs-identifier">feedNames</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><a name="line-130"></a><span> </span><span class="hs-identifier hs-var">mapM</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#createRawTensor"><span class="hs-identifier hs-var">createRawTensor</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">snd</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679084956"><span class="hs-identifier hs-var">feeds</span></a><span> </span><span class="hs-operator hs-var">&gt;&gt;=</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085443"><a href="#local-6989586621679085443"><span class="hs-identifier">feedTensors</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><a name="line-131"></a><span> </span><span class="hs-identifier hs-var">withArrayLen</span><span> </span><a href="#local-6989586621679085443"><span class="hs-identifier hs-var">feedTensors</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><a name="local-6989586621679085444"><a href="#local-6989586621679085444"><span class="hs-identifier">cFeedTensors</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><a name="line-132"></a><span> </span><span class="hs-comment">-- Fetches.</span><span>
</span><a name="line-133"></a><span> </span><a href="TensorFlow.Internal.FFI.html#withStringArrayLen"><span class="hs-identifier hs-var">withStringArrayLen</span></a><span> </span><a href="#local-6989586621679084957"><span class="hs-identifier hs-var">fetches</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085445"><a href="#local-6989586621679085445"><span class="hs-identifier">fetchesLen</span></a></a><span> </span><a name="local-6989586621679085446"><a href="#local-6989586621679085446"><span class="hs-identifier">fetchNames</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><a name="line-134"></a><span> </span><span class="hs-comment">-- tensorOuts is an array of null Tensor pointers that will be filled</span><span>
</span><a name="line-135"></a><span> </span><span class="hs-comment">-- by the call to Raw.run.</span><span>
</span><a name="line-136"></a><span> </span><span class="hs-identifier hs-var">withArrayLen</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">replicate</span><span> </span><a href="#local-6989586621679085445"><span class="hs-identifier hs-var">fetchesLen</span></a><span> </span><a href="#local-6989586621679084959"><span class="hs-identifier hs-var">nullTensor</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><a name="local-6989586621679085629"><a href="#local-6989586621679085629"><span class="hs-identifier">tensorOuts</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><a name="line-137"></a><span> </span><span class="hs-comment">-- Targets.</span><span>
</span><a name="line-138"></a><span> </span><a href="TensorFlow.Internal.FFI.html#withStringArrayLen"><span class="hs-identifier hs-var">withStringArrayLen</span></a><span> </span><a href="#local-6989586621679084958"><span class="hs-identifier hs-var">targets</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085630"><a href="#local-6989586621679085630"><span class="hs-identifier">targetsLen</span></a></a><span> </span><a name="local-6989586621679085631"><a href="#local-6989586621679085631"><span class="hs-identifier">ctargets</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-139"></a><span> </span><a href="TensorFlow.Internal.FFI.html#checkStatus"><span class="hs-identifier hs-var">checkStatus</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.Internal.Raw.html#run"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">run</span></a><span>
</span><a name="line-140"></a><span> </span><a href="#local-6989586621679084955"><span class="hs-identifier hs-var">session</span></a><span>
</span><a name="line-141"></a><span> </span><span class="hs-identifier hs-var">nullPtr</span><span>
</span><a name="line-142"></a><span> </span><a href="#local-6989586621679084972"><span class="hs-identifier hs-var">feedNames</span></a><span> </span><a href="#local-6989586621679085444"><span class="hs-identifier hs-var">cFeedTensors</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679084971"><span class="hs-identifier hs-var">feedsLen</span></a><span class="hs-special">)</span><span>
</span><a name="line-143"></a><span> </span><a href="#local-6989586621679085446"><span class="hs-identifier hs-var">fetchNames</span></a><span> </span><a href="#local-6989586621679085629"><span class="hs-identifier hs-var">tensorOuts</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679085445"><span class="hs-identifier hs-var">fetchesLen</span></a><span class="hs-special">)</span><span>
</span><a name="line-144"></a><span> </span><a href="#local-6989586621679085631"><span class="hs-identifier hs-var">ctargets</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679085630"><span class="hs-identifier hs-var">targetsLen</span></a><span class="hs-special">)</span><span>
</span><a name="line-145"></a><span> </span><span class="hs-identifier hs-var">nullPtr</span><span>
</span><a name="line-146"></a><span> </span><span class="hs-identifier hs-var">mapM_</span><span> </span><a href="TensorFlow.Internal.Raw.html#deleteTensor"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">deleteTensor</span></a><span> </span><a href="#local-6989586621679085443"><span class="hs-identifier hs-var">feedTensors</span></a><span>
</span><a name="line-147"></a><span> </span><a name="local-6989586621679085632"><a href="#local-6989586621679085632"><span class="hs-identifier">outTensors</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">peekArray</span><span> </span><a href="#local-6989586621679085445"><span class="hs-identifier hs-var">fetchesLen</span></a><span> </span><a href="#local-6989586621679085629"><span class="hs-identifier hs-var">tensorOuts</span></a><span>
</span><a name="line-148"></a><span> </span><span class="hs-identifier hs-var">mapM</span><span> </span><a href="TensorFlow.Internal.FFI.html#createTensorData"><span class="hs-identifier hs-var">createTensorData</span></a><span> </span><a href="#local-6989586621679085632"><span class="hs-identifier hs-var">outTensors</span></a><span>
</span><a name="line-149"></a><span>
</span><a name="line-150"></a><span>
</span><a name="line-151"></a><span class="hs-comment">-- Internal.</span><span>
</span><a name="line-152"></a><span>
</span><a name="line-153"></a><span>
</span><a name="line-154"></a><span class="hs-comment">-- | Same as 'fromIntegral', but throws an error if conversion is &quot;lossy&quot;.</span><span>
</span><a name="line-155"></a><span class="hs-identifier">safeConvert</span><span> </span><span class="hs-glyph">::</span><span>
</span><a name="line-156"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679083695"><a href="#local-6989586621679083695"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679083696"><a href="#local-6989586621679083696"><span class="hs-identifier">b</span></a></a><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679083695"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679083696"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Bits</span><span> </span><a href="#local-6989586621679083695"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Bits</span><span> </span><a href="#local-6989586621679083696"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Integral</span><span> </span><a href="#local-6989586621679083695"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Integral</span><span> </span><a href="#local-6989586621679083696"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
</span><a name="line-157"></a><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="#local-6989586621679083695"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679083696"><span class="hs-identifier hs-type">b</span></a><span>
</span><a name="line-158"></a><a name="safeConvert"><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier">safeConvert</span></a></a><span> </span><a name="local-6989586621679085633"><a href="#local-6989586621679085633"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-159"></a><span> </span><span class="hs-identifier hs-var">fromMaybe</span><span>
</span><a name="line-160"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-special">(</span><span class="hs-string">&quot;Failed to convert &quot;</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679085633"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">&quot;, got &quot;</span><span> </span><span class="hs-operator hs-var">++</span><span>
</span><a name="line-161"></a><span> </span><span class="hs-identifier hs-var">show</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromIntegral</span><span> </span><a href="#local-6989586621679085633"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679083696"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><a name="line-162"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">toIntegralSized</span><span> </span><a href="#local-6989586621679085633"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span>
</span><a name="line-163"></a><span>
</span><a name="line-164"></a><span>
</span><a name="line-165"></a><span class="hs-comment">-- | Use a list of ByteString as a list of CString.</span><span>
</span><a name="line-166"></a><span class="hs-identifier">withStringList</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">B</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-identifier hs-type">CString</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083694"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083694"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-167"></a><a name="withStringList"><a href="TensorFlow.Internal.FFI.html#withStringList"><span class="hs-identifier">withStringList</span></a></a><span> </span><a name="local-6989586621679085634"><a href="#local-6989586621679085634"><span class="hs-identifier">strings</span></a></a><span> </span><a name="local-6989586621679085635"><a href="#local-6989586621679085635"><span class="hs-identifier">fn</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679085636"><span class="hs-identifier hs-var">go</span></a><span> </span><a href="#local-6989586621679085634"><span class="hs-identifier hs-var">strings</span></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><a name="line-168"></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-169"></a><span> </span><a name="local-6989586621679085636"><a href="#local-6989586621679085636"><span class="hs-identifier">go</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><a name="local-6989586621679085637"><a href="#local-6989586621679085637"><span class="hs-identifier">cs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679085635"><span class="hs-identifier hs-var">fn</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">reverse</span><span> </span><a href="#local-6989586621679085637"><span class="hs-identifier hs-var">cs</span></a><span class="hs-special">)</span><span>
</span><a name="line-170"></a><span> </span><span class="hs-comment">-- TODO(fmayle): Is it worth using unsafeAsCString here?</span><span>
</span><a name="line-171"></a><span> </span><span class="hs-identifier">go</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679085638"><a href="#local-6989586621679085638"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">:</span><a name="local-6989586621679085639"><a href="#local-6989586621679085639"><span class="hs-identifier">xs</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679085640"><a href="#local-6989586621679085640"><span class="hs-identifier">cs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">B</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">useAsCString</span><span> </span><a href="#local-6989586621679085638"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085641"><a href="#local-6989586621679085641"><span class="hs-identifier">c</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679085636"><span class="hs-identifier hs-var">go</span></a><span> </span><a href="#local-6989586621679085639"><span class="hs-identifier hs-var">xs</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679085641"><span class="hs-identifier hs-var">c</span></a><span class="hs-glyph">:</span><a href="#local-6989586621679085640"><span class="hs-identifier hs-var">cs</span></a><span class="hs-special">)</span><span>
</span><a name="line-172"></a><span>
</span><a name="line-173"></a><span>
</span><a name="line-174"></a><span class="hs-comment">-- | Use a list of ByteString as an array of CString.</span><span>
</span><a name="line-175"></a><span class="hs-identifier">withStringArrayLen</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">B</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">ByteString</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Int</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Ptr</span><span> </span><span class="hs-identifier hs-type">CString</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083693"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083693"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-176"></a><a name="withStringArrayLen"><a href="TensorFlow.Internal.FFI.html#withStringArrayLen"><span class="hs-identifier">withStringArrayLen</span></a></a><span> </span><a name="local-6989586621679085642"><a href="#local-6989586621679085642"><span class="hs-identifier">xs</span></a></a><span> </span><a name="local-6989586621679085643"><a href="#local-6989586621679085643"><span class="hs-identifier">fn</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Internal.FFI.html#withStringList"><span class="hs-identifier hs-var">withStringList</span></a><span> </span><a href="#local-6989586621679085642"><span class="hs-identifier hs-var">xs</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">`</span><span class="hs-identifier hs-var">withArrayLen</span><span class="hs-special">`</span><span> </span><a href="#local-6989586621679085643"><span class="hs-identifier hs-var">fn</span></a><span class="hs-special">)</span><span>
</span><a name="line-177"></a><span>
</span><a name="line-178"></a><span>
</span><a name="line-179"></a><span class="hs-comment">-- | Create a Raw.Tensor from a TensorData.</span><span>
</span><a name="line-180"></a><span class="hs-identifier">createRawTensor</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-type">TensorData</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="TensorFlow.Internal.Raw.html#Tensor"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Tensor</span></a><span>
</span><a name="line-181"></a><a name="createRawTensor"><a href="TensorFlow.Internal.FFI.html#createRawTensor"><span class="hs-identifier">createRawTensor</span></a></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-var">TensorData</span></a><span> </span><a name="local-6989586621679085644"><a href="#local-6989586621679085644"><span class="hs-identifier">dims</span></a></a><span> </span><a name="local-6989586621679085645"><a href="#local-6989586621679085645"><span class="hs-identifier">dt</span></a></a><span> </span><a name="local-6989586621679085646"><a href="#local-6989586621679085646"><span class="hs-identifier">byteVec</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-182"></a><span> </span><span class="hs-identifier hs-var">withArrayLen</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">map</span><span> </span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679085644"><span class="hs-identifier hs-var">dims</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085647"><a href="#local-6989586621679085647"><span class="hs-identifier">cdimsLen</span></a></a><span> </span><a name="local-6989586621679085648"><a href="#local-6989586621679085648"><span class="hs-identifier">cdims</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-183"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679085649"><a href="#local-6989586621679085649"><span class="hs-identifier">len</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">S</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679085646"><span class="hs-identifier hs-var">byteVec</span></a><span>
</span><a name="line-184"></a><span> </span><a name="local-6989586621679085650"><a href="#local-6989586621679085650"><span class="hs-identifier">dest</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">mallocArray</span><span> </span><a href="#local-6989586621679085649"><span class="hs-identifier hs-var">len</span></a><span>
</span><a name="line-185"></a><span> </span><span class="hs-identifier hs-var">S</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">unsafeWith</span><span> </span><a href="#local-6989586621679085646"><span class="hs-identifier hs-var">byteVec</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085651"><a href="#local-6989586621679085651"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">copyArray</span><span> </span><a href="#local-6989586621679085650"><span class="hs-identifier hs-var">dest</span></a><span> </span><a href="#local-6989586621679085651"><span class="hs-identifier hs-var">x</span></a><span> </span><a href="#local-6989586621679085649"><span class="hs-identifier hs-var">len</span></a><span>
</span><a name="line-186"></a><span> </span><a href="TensorFlow.Internal.Raw.html#newTensor"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">newTensor</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">toEnum</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679085645"><span class="hs-identifier hs-var">dt</span></a><span class="hs-special">)</span><span>
</span><a name="line-187"></a><span> </span><a href="#local-6989586621679085648"><span class="hs-identifier hs-var">cdims</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679085647"><span class="hs-identifier hs-var">cdimsLen</span></a><span class="hs-special">)</span><span>
</span><a name="line-188"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">castPtr</span><span> </span><a href="#local-6989586621679085650"><span class="hs-identifier hs-var">dest</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679085649"><span class="hs-identifier hs-var">len</span></a><span class="hs-special">)</span><span>
</span><a name="line-189"></a><span> </span><a href="TensorFlow.Internal.FFI.html#tensorDeallocFunPtr"><span class="hs-identifier hs-var">tensorDeallocFunPtr</span></a><span> </span><span class="hs-identifier hs-var">nullPtr</span><span>
</span><a name="line-190"></a><span>
</span><a name="line-191"></a><span class="hs-pragma">{-# NOINLINE tensorDeallocFunPtr #-}</span><span>
</span><a name="line-192"></a><span class="hs-identifier">tensorDeallocFunPtr</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">FunPtr</span><span> </span><a href="TensorFlow.Internal.Raw.html#TensorDeallocFn"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">TensorDeallocFn</span></a><span>
</span><a name="line-193"></a><a name="tensorDeallocFunPtr"><a href="TensorFlow.Internal.FFI.html#tensorDeallocFunPtr"><span class="hs-identifier">tensorDeallocFunPtr</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">unsafePerformIO</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.Internal.Raw.html#wrapTensorDealloc"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">wrapTensorDealloc</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085665"><a href="#local-6989586621679085665"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">free</span><span> </span><a href="#local-6989586621679085665"><span class="hs-identifier hs-var">x</span></a><span>
</span><a name="line-194"></a><span>
</span><a name="line-195"></a><span class="hs-comment">-- | Create a TensorData from a Raw.Tensor.</span><span>
</span><a name="line-196"></a><span class="hs-comment">--</span><span>
</span><a name="line-197"></a><span class="hs-comment">-- Takes ownership of the Raw.Tensor.</span><span>
</span><a name="line-198"></a><span class="hs-comment">-- TODO: Currently, it just makes a copy of the Tensor (and then deletes it),</span><span>
</span><a name="line-199"></a><span class="hs-comment">-- since the raw pointer may refer to storage inside a mutable TensorFlow</span><span>
</span><a name="line-200"></a><span class="hs-comment">-- variable. We should avoid that copy when it's not needed; for example,</span><span>
</span><a name="line-201"></a><span class="hs-comment">-- by making TensorData wrap an IOVector, and changing the code that uses it.</span><span>
</span><a name="line-202"></a><span class="hs-identifier">createTensorData</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="TensorFlow.Internal.Raw.html#Tensor"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Tensor</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-type">TensorData</span></a><span>
</span><a name="line-203"></a><a name="createTensorData"><a href="TensorFlow.Internal.FFI.html#createTensorData"><span class="hs-identifier">createTensorData</span></a></a><span> </span><a name="local-6989586621679085666"><a href="#local-6989586621679085666"><span class="hs-identifier">t</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-204"></a><span> </span><span class="hs-comment">-- Read dimensions.</span><span>
</span><a name="line-205"></a><span> </span><a name="local-6989586621679085667"><a href="#local-6989586621679085667"><span class="hs-identifier">numDims</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="TensorFlow.Internal.Raw.html#numDims"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">numDims</span></a><span> </span><a href="#local-6989586621679085666"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-206"></a><span> </span><a name="local-6989586621679085668"><a href="#local-6989586621679085668"><span class="hs-identifier">dims</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">mapM</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#dim"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">dim</span></a><span> </span><a href="#local-6989586621679085666"><span class="hs-identifier hs-var">t</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-number">0</span><span class="hs-glyph">..</span><a href="#local-6989586621679085667"><span class="hs-identifier hs-var">numDims</span></a><span class="hs-glyph">-</span><span class="hs-number">1</span><span class="hs-special">]</span><span>
</span><a name="line-207"></a><span> </span><span class="hs-comment">-- Read type.</span><span>
</span><a name="line-208"></a><span> </span><a name="local-6989586621679085669"><a href="#local-6989586621679085669"><span class="hs-identifier">dtype</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">toEnum</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#tensorType"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">tensorType</span></a><span> </span><a href="#local-6989586621679085666"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-209"></a><span> </span><span class="hs-comment">-- Read data.</span><span>
</span><a name="line-210"></a><span> </span><a name="local-6989586621679085670"><a href="#local-6989586621679085670"><span class="hs-identifier">len</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#tensorByteSize"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">tensorByteSize</span></a><span> </span><a href="#local-6989586621679085666"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-211"></a><span> </span><a name="local-6989586621679085671"><a href="#local-6989586621679085671"><span class="hs-identifier">bytes</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">castPtr</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#tensorData"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">tensorData</span></a><span> </span><a href="#local-6989586621679085666"><span class="hs-identifier hs-var">t</span></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Ptr</span><span> </span><span class="hs-identifier hs-type">Word8</span><span class="hs-special">)</span><span>
</span><a name="line-212"></a><span> </span><a name="local-6989586621679085850"><a href="#local-6989586621679085850"><span class="hs-identifier">fp</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">newForeignPtr_</span><span> </span><a href="#local-6989586621679085671"><span class="hs-identifier hs-var">bytes</span></a><span>
</span><a name="line-213"></a><span> </span><span class="hs-comment">-- Make an explicit copy of the raw data, since it might point</span><span>
</span><a name="line-214"></a><span> </span><span class="hs-comment">-- to a mutable variable's memory.</span><span>
</span><a name="line-215"></a><span> </span><a name="local-6989586621679085851"><a href="#local-6989586621679085851"><span class="hs-identifier">v</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">S</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">freeze</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">M</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">unsafeFromForeignPtr0</span><span> </span><a href="#local-6989586621679085850"><span class="hs-identifier hs-var">fp</span></a><span> </span><a href="#local-6989586621679085670"><span class="hs-identifier hs-var">len</span></a><span class="hs-special">)</span><span>
</span><a name="line-216"></a><span> </span><a href="TensorFlow.Internal.Raw.html#deleteTensor"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">deleteTensor</span></a><span> </span><a href="#local-6989586621679085666"><span class="hs-identifier hs-var">t</span></a><span>
</span><a name="line-217"></a><span> </span><span class="hs-identifier hs-var">return</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorData"><span class="hs-identifier hs-var">TensorData</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">map</span><span> </span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679085668"><span class="hs-identifier hs-var">dims</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679085669"><span class="hs-identifier hs-var">dtype</span></a><span> </span><a href="#local-6989586621679085851"><span class="hs-identifier hs-var">v</span></a><span>
</span><a name="line-218"></a><span>
</span><a name="line-219"></a><span class="hs-comment">-- | Runs the given action which does FFI calls updating a provided</span><span>
</span><a name="line-220"></a><span class="hs-comment">-- status object. If the status is not OK it is thrown as</span><span>
</span><a name="line-221"></a><span class="hs-comment">-- TensorFlowException.</span><span>
</span><a name="line-222"></a><span class="hs-identifier">checkStatus</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#Status"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">Status</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083692"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083692"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-223"></a><a name="checkStatus"><a href="TensorFlow.Internal.FFI.html#checkStatus"><span class="hs-identifier">checkStatus</span></a></a><span> </span><a name="local-6989586621679085852"><a href="#local-6989586621679085852"><span class="hs-identifier">fn</span></a></a><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-224"></a><span> </span><span class="hs-identifier hs-var">bracket</span><span> </span><a href="TensorFlow.Internal.Raw.html#newStatus"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">newStatus</span></a><span> </span><a href="TensorFlow.Internal.Raw.html#deleteStatus"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">deleteStatus</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085853"><a href="#local-6989586621679085853"><span class="hs-identifier">status</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-225"></a><span> </span><a name="local-6989586621679085854"><a href="#local-6989586621679085854"><span class="hs-identifier">result</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="#local-6989586621679085852"><span class="hs-identifier hs-var">fn</span></a><span> </span><a href="#local-6989586621679085853"><span class="hs-identifier hs-var">status</span></a><span>
</span><a name="line-226"></a><span> </span><a name="local-6989586621679085855"><a href="#local-6989586621679085855"><span class="hs-identifier">code</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="TensorFlow.Internal.Raw.html#getCode"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">getCode</span></a><span> </span><a href="#local-6989586621679085853"><span class="hs-identifier hs-var">status</span></a><span>
</span><a name="line-227"></a><span> </span><span class="hs-identifier hs-var">when</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679085855"><span class="hs-identifier hs-var">code</span></a><span> </span><span class="hs-operator hs-var">/=</span><span> </span><a href="TensorFlow.Internal.Raw.html#TF_OK"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">TF_OK</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-228"></a><span> </span><a name="local-6989586621679085856"><a href="#local-6989586621679085856"><span class="hs-identifier">msg</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-identifier hs-var">T</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">decodeUtf8With</span><span> </span><span class="hs-identifier hs-var">T</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">lenientDecode</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span>
</span><a name="line-229"></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#message"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">message</span></a><span> </span><a href="#local-6989586621679085853"><span class="hs-identifier hs-var">status</span></a><span> </span><span class="hs-operator hs-var">&gt;&gt;=</span><span> </span><span class="hs-identifier hs-var">B</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">packCString</span><span class="hs-special">)</span><span>
</span><a name="line-230"></a><span> </span><span class="hs-identifier hs-var">throwM</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorFlowException"><span class="hs-identifier hs-var">TensorFlowException</span></a><span> </span><a href="#local-6989586621679085855"><span class="hs-identifier hs-var">code</span></a><span> </span><a href="#local-6989586621679085856"><span class="hs-identifier hs-var">msg</span></a><span>
</span><a name="line-231"></a><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="#local-6989586621679085854"><span class="hs-identifier hs-var">result</span></a><span>
</span><a name="line-232"></a><span>
</span><a name="line-233"></a><span class="hs-identifier">setSessionConfig</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">ConfigProto</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#SessionOptions"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">SessionOptions</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-234"></a><a name="setSessionConfig"><a href="TensorFlow.Internal.FFI.html#setSessionConfig"><span class="hs-identifier">setSessionConfig</span></a></a><span> </span><a name="local-6989586621679085857"><a href="#local-6989586621679085857"><span class="hs-identifier">pb</span></a></a><span> </span><a name="local-6989586621679085858"><a href="#local-6989586621679085858"><span class="hs-identifier">opt</span></a></a><span> </span><span class="hs-glyph">=</span><span>
</span><a name="line-235"></a><span> </span><a href="TensorFlow.Internal.FFI.html#useProtoAsVoidPtrLen"><span class="hs-identifier hs-var">useProtoAsVoidPtrLen</span></a><span> </span><a href="#local-6989586621679085857"><span class="hs-identifier hs-var">pb</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085859"><a href="#local-6989586621679085859"><span class="hs-identifier">ptr</span></a></a><span> </span><a name="local-6989586621679085860"><a href="#local-6989586621679085860"><span class="hs-identifier">len</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><a name="line-236"></a><span> </span><a href="TensorFlow.Internal.FFI.html#checkStatus"><span class="hs-identifier hs-var">checkStatus</span></a><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.Raw.html#setConfig"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">setConfig</span></a><span> </span><a href="#local-6989586621679085858"><span class="hs-identifier hs-var">opt</span></a><span> </span><a href="#local-6989586621679085859"><span class="hs-identifier hs-var">ptr</span></a><span> </span><a href="#local-6989586621679085860"><span class="hs-identifier hs-var">len</span></a><span class="hs-special">)</span><span>
</span><a name="line-237"></a><span>
</span><a name="line-238"></a><span class="hs-identifier">setSessionTarget</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">B</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">ByteString</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#SessionOptions"><span class="hs-identifier hs-type">Raw</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">SessionOptions</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-239"></a><a name="setSessionTarget"><a href="TensorFlow.Internal.FFI.html#setSessionTarget"><span class="hs-identifier">setSessionTarget</span></a></a><span> </span><a name="local-6989586621679085861"><a href="#local-6989586621679085861"><span class="hs-identifier">target</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">B</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">useAsCString</span><span> </span><a href="#local-6989586621679085861"><span class="hs-identifier hs-var">target</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="TensorFlow.Internal.Raw.html#setTarget"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">setTarget</span></a><span>
</span><a name="line-240"></a><span>
</span><a name="line-241"></a><span class="hs-comment">-- | Serializes the given msg and provides it as (ptr,len) argument</span><span>
</span><a name="line-242"></a><span class="hs-comment">-- to the given action.</span><span>
</span><a name="line-243"></a><span class="hs-identifier">useProtoAsVoidPtrLen</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Message</span><span> </span><a href="#local-6989586621679083309"><span class="hs-identifier hs-type">msg</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Integral</span><span> </span><a href="#local-6989586621679083310"><span class="hs-identifier hs-type">c</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679083310"><span class="hs-identifier hs-type">c</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Bits</span><span> </span><a href="#local-6989586621679083310"><span class="hs-identifier hs-type">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
</span><a name="line-244"></a><span> </span><a href="#local-6989586621679083309"><span class="hs-identifier hs-type">msg</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Ptr</span><span> </span><a href="#local-6989586621679083311"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679083310"><span class="hs-identifier hs-type">c</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083312"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679083312"><span class="hs-identifier hs-type">a</span></a><span>
</span><a name="line-245"></a><a name="useProtoAsVoidPtrLen"><a href="TensorFlow.Internal.FFI.html#useProtoAsVoidPtrLen"><span class="hs-identifier">useProtoAsVoidPtrLen</span></a></a><span> </span><a name="local-6989586621679085862"><a href="#local-6989586621679085862"><span class="hs-identifier">msg</span></a></a><span> </span><a name="local-6989586621679085863"><a href="#local-6989586621679085863"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">B</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">useAsCStringLen</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">encodeMessage</span><span> </span><a href="#local-6989586621679085862"><span class="hs-identifier hs-var">msg</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-246"></a><span> </span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679085915"><a href="#local-6989586621679085915"><span class="hs-identifier">bytes</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679085916"><a href="#local-6989586621679085916"><span class="hs-identifier">len</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679085863"><span class="hs-identifier hs-var">f</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">castPtr</span><span> </span><a href="#local-6989586621679085915"><span class="hs-identifier hs-var">bytes</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><a href="#local-6989586621679085916"><span class="hs-identifier hs-var">len</span></a><span class="hs-special">)</span><span>
</span><a name="line-247"></a><span>
</span><a name="line-248"></a><span class="hs-comment">-- | Returns the serialized OpList of all OpDefs defined in this</span><span>
</span><a name="line-249"></a><span class="hs-comment">-- address space.</span><span>
</span><a name="line-250"></a><span class="hs-identifier">getAllOpList</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">B</span><span class="hs-operator hs-type">.</span><span class="hs-identifier hs-type">ByteString</span><span>
</span><a name="line-251"></a><a name="getAllOpList"><a href="TensorFlow.Internal.FFI.html#getAllOpList"><span class="hs-identifier">getAllOpList</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-252"></a><span> </span><a name="local-6989586621679085947"><a href="#local-6989586621679085947"><span class="hs-identifier">foreignPtr</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span>
</span><a name="line-253"></a><span> </span><span class="hs-identifier hs-var">mask_</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">newForeignPtr</span><span> </span><a href="TensorFlow.Internal.Raw.html#deleteBuffer"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">deleteBuffer</span></a><span> </span><span class="hs-operator hs-var">=&lt;&lt;</span><span> </span><a href="#local-6989586621679085917"><span class="hs-identifier hs-var">checkCall</span></a><span class="hs-special">)</span><span>
</span><a name="line-254"></a><span> </span><span class="hs-comment">-- Makes a copy because it is more reliable than eviscerating</span><span>
</span><a name="line-255"></a><span> </span><span class="hs-comment">-- Buffer to steal its memory (including custom deallocator).</span><span>
</span><a name="line-256"></a><span> </span><span class="hs-identifier hs-var">withForeignPtr</span><span> </span><a href="#local-6989586621679085947"><span class="hs-identifier hs-var">foreignPtr</span></a><span> </span><span class="hs-operator hs-var">$</span><span>
</span><a name="line-257"></a><span> </span><span class="hs-glyph">\</span><a name="local-6989586621679085948"><a href="#local-6989586621679085948"><span class="hs-identifier">ptr</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">B</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">packCStringLen</span><span> </span><span class="hs-operator hs-var">=&lt;&lt;</span><span> </span><span class="hs-special">(</span><span class="hs-special">,</span><span class="hs-special">)</span><span>
</span><a name="line-258"></a><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">castPtr</span><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#getBufferData"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">getBufferData</span></a><span> </span><a href="#local-6989586621679085948"><span class="hs-identifier hs-var">ptr</span></a><span class="hs-special">)</span><span>
</span><a name="line-259"></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</span><span> </span><span class="hs-special">(</span><a href="TensorFlow.Internal.FFI.html#safeConvert"><span class="hs-identifier hs-var">safeConvert</span></a><span> </span><span class="hs-operator hs-var">&lt;$&gt;</span><span> </span><a href="TensorFlow.Internal.Raw.html#getBufferLength"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">getBufferLength</span></a><span> </span><a href="#local-6989586621679085948"><span class="hs-identifier hs-var">ptr</span></a><span class="hs-special">)</span><span>
</span><a name="line-260"></a><span> </span><span class="hs-keyword">where</span><span>
</span><a name="line-261"></a><span> </span><a name="local-6989586621679085917"><a href="#local-6989586621679085917"><span class="hs-identifier">checkCall</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><a name="line-262"></a><span> </span><a name="local-6989586621679085919"><a href="#local-6989586621679085919"><span class="hs-identifier">p</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="TensorFlow.Internal.Raw.html#getAllOpList"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">getAllOpList</span></a><span>
</span><a name="line-263"></a><span> </span><span class="hs-identifier hs-var">when</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679085919"><span class="hs-identifier hs-var">p</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-identifier hs-var">nullPtr</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">throwM</span><span> </span><a href="#local-6989586621679085918"><span class="hs-identifier hs-var">exception</span></a><span class="hs-special">)</span><span>
</span><a name="line-264"></a><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="#local-6989586621679085919"><span class="hs-identifier hs-var">p</span></a><span>
</span><a name="line-265"></a><span> </span><a name="local-6989586621679085918"><a href="#local-6989586621679085918"><span class="hs-identifier">exception</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="TensorFlow.Internal.FFI.html#TensorFlowException"><span class="hs-identifier hs-var">TensorFlowException</span></a><span>
</span><a name="line-266"></a><span> </span><a href="TensorFlow.Internal.Raw.html#TF_UNKNOWN"><span class="hs-identifier hs-var">Raw</span><span class="hs-operator hs-var">.</span><span class="hs-identifier hs-var">TF_UNKNOWN</span></a><span> </span><span class="hs-string">&quot;GetAllOpList failure, check logs&quot;</span><span>
</span><a name="line-267"></a></pre></body></html>