From 6f1b812eeb00b53f31dddc39c26313dcd23823b5 Mon Sep 17 00:00:00 2001
From: auphelia <jakobapk@web.de>
Date: Mon, 24 Feb 2020 13:29:12 +0000
Subject: [PATCH] [Sphinx Documentation] Fixed reference in modules.rst

---
 docs/finn/_build/doctrees/environment.pickle  | Bin 133135 -> 133616 bytes
 docs/finn/_build/doctrees/modules.doctree     | Bin 3134 -> 2532 bytes
 .../finn/_build/html/_sources/modules.rst.txt |   4 +-
 docs/finn/_build/html/modules.html            |  69 +++++++++++++++++-
 docs/finn/_build/html/objects.inv             | Bin 3628 -> 3618 bytes
 docs/finn/_build/html/searchindex.js          |   2 +-
 docs/finn/modules.rst                         |   4 +-
 7 files changed, 70 insertions(+), 9 deletions(-)

diff --git a/docs/finn/_build/doctrees/environment.pickle b/docs/finn/_build/doctrees/environment.pickle
index dba4d47e1c9b2a4634a95e9da9d46e13cda6f0f5..a74b617d9b2e11da04db7feb028afbee5b9ac2fb 100644
GIT binary patch
delta 22272
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
Bgd_j}

delta 21422
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

diff --git a/docs/finn/_build/doctrees/modules.doctree b/docs/finn/_build/doctrees/modules.doctree
index d16dc0ea5ca22e82f0372b266abb3a9700ec5a2d..d63f13701b8b6c9969949c4127c12a6a10b75be9 100644
GIT binary patch
delta 494
zcmZ8cJ4?e*6mDLPrKK&pNL#5QqOBBhF6bb*RO--D1Sygxx1K<ogyaSlEb5@sT}rNl
zE-wB8yZalQ1b4x|;YnWxhmU*C{W#y_effJyxs@Nk5<}(CfEZIfqEpkhc)&|{e89Ir
zfjFpb9AZqNChd_3#pJGOSv=&CmYd{~B0K%P=QDvt7I!q4Sd>F{_|i|NAqPniK!SXb
z5lT{_CI$z>(dkO)S46Ef#5!UFv5CkrwQn1Kk9eG^sN<SAwRxRoJ==G6a;Dn`*%@bf
z;2KMrmfrIX(lx^iyx-S?58>pd1iO%jG8AeuCaCxw4WgDTLv5Y9gj6nE&2fm!wP*?-
zO0fNxJk+WC9Ws}g*4Ad}=lisUzlQ<|6p$v>$3evZA)<~fKB>o{jOM|s*c2iCCOrwl
u_2^ly3PO4Gsho?e(1M1?5|-8{^vc1?0}ida2St1vko1D%g`Yr5Reu5c!msfF

delta 1085
zcmb`GO=}ZD7{}dY^V<4?(zFznL7FCo(u*evIrLHqktj8wmmr(XlROK%Ght^|nnOrD
zc$-Vv5$s3s<RNztf(m|&D*7F~=xo}&Y=wg0;b9l%KmX_9_kZU5tq&WivH9ly>T&9z
zS;i|e*SCDD=UaVLq1t(+hN_Gyne951=Bw4J!c0qPnc0LRp%qIfuhqF4ugbJ`0V))(
z9KZLHIV^-FV`pW(Zr~aw(ZFQ*)OfVN5t(mlzuUU*>LR-C=~|N+k97hUxRM#|<2(AV
zrR1tZZ8zvZ*NKi=D*R<Uzq5tASimB#*G=tS4%!wjj6;?v)RwFR+`{eI5NFpKK^vBC
z#7B{7&H~>Cg++Zeyq;`kWlA{01vP=>iDA&mZ?j?;#YrXIOWc$>YIz_AeLdb#;pR|<
zAG1G45!h>dzy)|OJmB2w!4h3ePod`Lw7X9j=T6%NGVMeH+5z8nDC`o!7~#l#LAuN*
z0?#FT`KAw+aA=P>f>@j|zvEEL9}uB)8j&{GR=`0YmN?<(7JFx5-jMj8`z^IQ9iMPA
zT6A12Nm{4yH6B(ReH2wri@sbYk|`Hnf~)F=G$ZUvnzhEkWBrMEsd^#`aI{DeKgGkZ
zCxSM9o{|46i3ft&!UrHWqr!41Cq8sRuePnhGeQ}KBZp79cbFY`dRIv)dMl+F+p2aL
z{j0_4_-$mO;i)*VAD6M10sD4Qbh!Mu=EM>+Vwq?AhmBg};T)P7-};Npq6ZVc%T@jW
De8-6=

diff --git a/docs/finn/_build/html/_sources/modules.rst.txt b/docs/finn/_build/html/_sources/modules.rst.txt
index 8355e03ee..a95f6589b 100644
--- a/docs/finn/_build/html/_sources/modules.rst.txt
+++ b/docs/finn/_build/html/_sources/modules.rst.txt
@@ -1,7 +1,7 @@
 finn
-===
+====
 
 .. toctree::
    :maxdepth: 4
 
-   finn
+   source_code/finn
diff --git a/docs/finn/_build/html/modules.html b/docs/finn/_build/html/modules.html
index 51ddff422..d4646008d 100644
--- a/docs/finn/_build/html/modules.html
+++ b/docs/finn/_build/html/modules.html
@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>&lt;no title&gt; &mdash; FINN  documentation</title>
+  <title>finn &mdash; FINN  documentation</title>
   
 
   
@@ -127,7 +127,7 @@
     
       <li><a href="index.html">Docs</a> &raquo;</li>
         
-      <li>&lt;no title&gt;</li>
+      <li>finn</li>
     
     
       <li class="wy-breadcrumbs-aside">
@@ -146,9 +146,70 @@
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
             
-  <p>finn
-===</p>
+  <div class="section" id="finn">
+<h1>finn<a class="headerlink" href="#finn" title="Permalink to this headline">¶</a></h1>
 <div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="source_code/finn.html">finn package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="source_code/finn.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="source_code/finn.analysis.html">finn.analysis package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.analysis.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.analysis.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.analysis.html#module-finn.analysis.topology">finn.analysis.topology module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.analysis.html#module-finn.analysis.verify_custom_nodes">finn.analysis.verify_custom_nodes module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.analysis.html#module-finn.analysis">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="source_code/finn.core.html">finn.core package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#module-finn.core.datatype">finn.core.datatype module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#module-finn.core.execute_custom_node">finn.core.execute_custom_node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#module-finn.core.modelwrapper">finn.core.modelwrapper module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#module-finn.core.onnx_exec">finn.core.onnx_exec module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#module-finn.core.remote_exec">finn.core.remote_exec module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#module-finn.core.rtlsim_exec">finn.core.rtlsim_exec module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.core.html#module-finn.core">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="source_code/finn.custom_op.html">finn.custom_op package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.custom_op.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.custom_op.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.custom_op.html#module-finn.custom_op.multithreshold">finn.custom_op.multithreshold module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.custom_op.html#module-finn.custom_op.registry">finn.custom_op.registry module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.custom_op.html#module-finn.custom_op.streamingdataflowpartition">finn.custom_op.streamingdataflowpartition module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.custom_op.html#module-finn.custom_op.xnorpopcount">finn.custom_op.xnorpopcount module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.custom_op.html#module-finn.custom_op">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="source_code/finn.transformation.html">finn.transformation package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#module-finn.transformation.batchnorm_to_affine">finn.transformation.batchnorm_to_affine module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#module-finn.transformation.bipolar_to_xnor">finn.transformation.bipolar_to_xnor module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#module-finn.transformation.fold_constants">finn.transformation.fold_constants module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#module-finn.transformation.general">finn.transformation.general module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#module-finn.transformation.infer_datatypes">finn.transformation.infer_datatypes module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#module-finn.transformation.infer_shapes">finn.transformation.infer_shapes module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.transformation.html#module-finn.transformation">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="source_code/finn.util.html">finn.util package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.util.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.util.html#module-finn.util.basic">finn.util.basic module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.util.html#module-finn.util.data_packing">finn.util.data_packing module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.util.html#module-finn.util.fpgadataflow">finn.util.fpgadataflow module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.util.html#module-finn.util.onnx">finn.util.onnx module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.util.html#module-finn.util.test">finn.util.test module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="source_code/finn.util.html#module-finn.util">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="source_code/finn.html#module-finn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
 </div>
 
 
diff --git a/docs/finn/_build/html/objects.inv b/docs/finn/_build/html/objects.inv
index c4f824352f5aefbdf0ed1bf3ed0e4c5174c7e58b..6de6f4c947900701dc7635c9dc7a037ad0a4760a 100644
GIT binary patch
delta 3350
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

delta 3360
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

diff --git a/docs/finn/_build/html/searchindex.js b/docs/finn/_build/html/searchindex.js
index d49f110e5..954ffd140 100644
--- a/docs/finn/_build/html/searchindex.js
+++ b/docs/finn/_build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["end_to_end_flow","getting_started","index","modules","source_code","source_code/finn","source_code/finn.analysis","source_code/finn.analysis.fpgadataflow","source_code/finn.core","source_code/finn.custom_op","source_code/finn.custom_op.fpgadataflow","source_code/finn.transformation","source_code/finn.transformation.fpgadataflow","source_code/finn.transformation.streamline","source_code/finn.util","source_code/modules"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["end_to_end_flow.rst","getting_started.rst","index.rst","modules.rst","source_code.rst","source_code/finn.rst","source_code/finn.analysis.rst","source_code/finn.analysis.fpgadataflow.rst","source_code/finn.core.rst","source_code/finn.custom_op.rst","source_code/finn.custom_op.fpgadataflow.rst","source_code/finn.transformation.rst","source_code/finn.transformation.fpgadataflow.rst","source_code/finn.transformation.streamline.rst","source_code/finn.util.rst","source_code/modules.rst"],objects:{"":{finn:[5,0,0,"-"]},"finn.analysis":{fpgadataflow:[7,0,0,"-"],topology:[6,0,0,"-"],verify_custom_nodes:[6,0,0,"-"]},"finn.analysis.fpgadataflow":{hls_synth_res_estimation:[7,0,0,"-"],res_estimation:[7,0,0,"-"]},"finn.analysis.fpgadataflow.hls_synth_res_estimation":{hls_synth_res_estimation:[7,1,1,""]},"finn.analysis.fpgadataflow.res_estimation":{res_estimation:[7,1,1,""]},"finn.analysis.topology":{all_tensors_f32:[6,1,1,""],get_per_tensor_fanouts:[6,1,1,""],is_linear:[6,1,1,""],node_inputs_in_expected_order:[6,1,1,""]},"finn.analysis.verify_custom_nodes":{verify_nodes:[6,1,1,""]},"finn.core":{datatype:[8,0,0,"-"],execute_custom_node:[8,0,0,"-"],modelwrapper:[8,0,0,"-"],onnx_exec:[8,0,0,"-"],remote_exec:[8,0,0,"-"],rtlsim_exec:[8,0,0,"-"]},"finn.core.datatype":{DataType:[8,2,1,""]},"finn.core.datatype.DataType":{BINARY:[8,3,1,""],BIPOLAR:[8,3,1,""],FLOAT32:[8,3,1,""],INT16:[8,3,1,""],INT2:[8,3,1,""],INT32:[8,3,1,""],INT3:[8,3,1,""],INT4:[8,3,1,""],INT8:[8,3,1,""],TERNARY:[8,3,1,""],UINT16:[8,3,1,""],UINT2:[8,3,1,""],UINT32:[8,3,1,""],UINT3:[8,3,1,""],UINT4:[8,3,1,""],UINT8:[8,3,1,""],allowed:[8,4,1,""],bitwidth:[8,4,1,""],get_hls_datatype_str:[8,4,1,""],get_num_possible_values:[8,4,1,""],get_smallest_possible:[8,4,1,""],is_integer:[8,4,1,""],max:[8,4,1,""],min:[8,4,1,""],signed:[8,4,1,""]},"finn.core.execute_custom_node":{execute_custom_node:[8,1,1,""]},"finn.core.modelwrapper":{ModelWrapper:[8,2,1,""]},"finn.core.modelwrapper.ModelWrapper":{analysis:[8,4,1,""],check_all_tensor_shapes_specified:[8,4,1,""],check_compatibility:[8,4,1,""],find_consumer:[8,4,1,""],find_producer:[8,4,1,""],get_all_tensor_names:[8,4,1,""],get_initializer:[8,4,1,""],get_metadata_prop:[8,4,1,""],get_tensor_datatype:[8,4,1,""],get_tensor_fanout:[8,4,1,""],get_tensor_shape:[8,4,1,""],get_tensor_valueinfo:[8,4,1,""],graph:[8,4,1,""],make_empty_exec_context:[8,4,1,""],make_new_valueinfo_name:[8,4,1,""],model:[8,4,1,""],rename_tensor:[8,4,1,""],save:[8,4,1,""],set_initializer:[8,4,1,""],set_metadata_prop:[8,4,1,""],set_tensor_datatype:[8,4,1,""],set_tensor_shape:[8,4,1,""],transform:[8,4,1,""]},"finn.core.onnx_exec":{compare_execution:[8,1,1,""],execute_node:[8,1,1,""],execute_onnx:[8,1,1,""],execute_onnx_and_make_model:[8,1,1,""]},"finn.core.remote_exec":{remote_exec:[8,1,1,""]},"finn.core.rtlsim_exec":{rtlsim_exec:[8,1,1,""]},"finn.custom_op":{CustomOp:[9,2,1,""],fpgadataflow:[10,0,0,"-"],multithreshold:[9,0,0,"-"],registry:[9,0,0,"-"],streamingdataflowpartition:[9,0,0,"-"],xnorpopcount:[9,0,0,"-"]},"finn.custom_op.CustomOp":{execute_node:[9,4,1,""],get_nodeattr:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],set_nodeattr:[9,4,1,""],verify_node:[9,4,1,""]},"finn.custom_op.fpgadataflow":{HLSCustomOp:[10,2,1,""],convolutioninputgenerator:[10,0,0,"-"],streamingfclayer_batch:[10,0,0,"-"],streamingmaxpool_batch:[10,0,0,"-"],templates:[10,0,0,"-"],tlastmarker:[10,0,0,"-"]},"finn.custom_op.fpgadataflow.HLSCustomOp":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],code_generation_ipgen:[10,4,1,""],code_generation_npysim:[10,4,1,""],compile_singlenode_code:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],dynamic_input_to_npy:[10,4,1,""],exec_precompiled_singlenode_model:[10,4,1,""],execute_node:[10,4,1,""],generate_params:[10,4,1,""],get_folded_input_shape:[10,4,1,""],get_folded_output_shape:[10,4,1,""],get_instream_width:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_outstream_width:[10,4,1,""],global_includes:[10,4,1,""],ipgen_singlenode_code:[10,4,1,""],lut_estimation:[10,4,1,""],node_res_estimation:[10,4,1,""],npy_to_dynamic_output:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],reset_rtlsim:[10,4,1,""],rtlsim:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],toggle_clk:[10,4,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator":{ConvolutionInputGenerator:[10,2,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator.ConvolutionInputGenerator":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],execute_node:[10,4,1,""],get_input_datatype:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_output_datatype:[10,4,1,""],get_stream_width:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],lut_estimation:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch":{StreamingFCLayer_Batch:[10,2,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch.StreamingFCLayer_Batch":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],calc_tmem:[10,4,1,""],calc_wmem:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],execute_node:[10,4,1,""],generate_params:[10,4,1,""],get_folded_input_shape:[10,4,1,""],get_folded_output_shape:[10,4,1,""],get_hls_compatible_threshold_tensor:[10,4,1,""],get_hls_compatible_weight_tensor:[10,4,1,""],get_input_datatype:[10,4,1,""],get_instream_width:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_output_datatype:[10,4,1,""],get_outstream_width:[10,4,1,""],get_template_param_values:[10,4,1,""],get_weight_datatype:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],lut_estimation:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch":{StreamingMaxPool_Batch:[10,2,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch.StreamingMaxPool_Batch":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],lut_estimation:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.fpgadataflow.tlastmarker":{TLastMarker:[10,2,1,""]},"finn.custom_op.fpgadataflow.tlastmarker.TLastMarker":{blackboxfunction:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],execute_node:[10,4,1,""],get_folded_input_shape:[10,4,1,""],get_folded_output_shape:[10,4,1,""],get_instream_width:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_outstream_width:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.multithreshold":{MultiThreshold:[9,2,1,""],compare:[9,1,1,""],multithreshold:[9,1,1,""]},"finn.custom_op.multithreshold.MultiThreshold":{execute_node:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],verify_node:[9,4,1,""]},"finn.custom_op.registry":{getCustomOp:[9,1,1,""]},"finn.custom_op.streamingdataflowpartition":{StreamingDataflowPartition:[9,2,1,""]},"finn.custom_op.streamingdataflowpartition.StreamingDataflowPartition":{execute_node:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],verify_node:[9,4,1,""]},"finn.custom_op.xnorpopcount":{XnorPopcountMatMul:[9,2,1,""],xnorpopcountmatmul:[9,1,1,""]},"finn.custom_op.xnorpopcount.XnorPopcountMatMul":{execute_node:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],verify_node:[9,4,1,""]},"finn.transformation":{Transformation:[11,2,1,""],batchnorm_to_affine:[11,0,0,"-"],bipolar_to_xnor:[11,0,0,"-"],fold_constants:[11,0,0,"-"],fpgadataflow:[12,0,0,"-"],general:[11,0,0,"-"],infer_datatypes:[11,0,0,"-"],infer_shapes:[11,0,0,"-"],streamline:[13,0,0,"-"]},"finn.transformation.Transformation":{apply:[11,4,1,""]},"finn.transformation.batchnorm_to_affine":{BatchNormToAffine:[11,2,1,""]},"finn.transformation.batchnorm_to_affine.BatchNormToAffine":{apply:[11,4,1,""]},"finn.transformation.bipolar_to_xnor":{ConvertBipolarMatMulToXnorPopcount:[11,2,1,""]},"finn.transformation.bipolar_to_xnor.ConvertBipolarMatMulToXnorPopcount":{apply:[11,4,1,""]},"finn.transformation.fold_constants":{FoldConstants:[11,2,1,""]},"finn.transformation.fold_constants.FoldConstants":{apply:[11,4,1,""]},"finn.transformation.fpgadataflow":{cleanup:[12,0,0,"-"],codegen_ipgen:[12,0,0,"-"],codegen_ipstitch:[12,0,0,"-"],codegen_npysim:[12,0,0,"-"],compile:[12,0,0,"-"],convert_to_hls_layers:[12,0,0,"-"],create_dataflow_partition:[12,0,0,"-"],hlssynth_ipgen:[12,0,0,"-"],insert_tlastmarker:[12,0,0,"-"],make_deployment:[12,0,0,"-"],make_pynq_driver:[12,0,0,"-"],make_pynq_proj:[12,0,0,"-"],set_exec_mode:[12,0,0,"-"],synth_pynq_proj:[12,0,0,"-"],templates:[12,0,0,"-"]},"finn.transformation.fpgadataflow.cleanup":{CleanUp:[12,2,1,""]},"finn.transformation.fpgadataflow.cleanup.CleanUp":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen":{CodeGen_ipgen:[12,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen.CodeGen_ipgen":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch":{CodeGen_ipstitch:[12,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch.CodeGen_ipstitch":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.codegen_npysim":{CodeGen_npysim:[12,2,1,""]},"finn.transformation.fpgadataflow.codegen_npysim.CodeGen_npysim":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.compile":{Compile:[12,2,1,""]},"finn.transformation.fpgadataflow.compile.Compile":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers":{InferBinaryStreamingFCLayer:[12,2,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers.InferBinaryStreamingFCLayer":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition":{CreateDataflowPartition:[12,2,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition.CreateDataflowPartition":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen":{HLSSynth_IPGen:[12,2,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen.HLSSynth_IPGen":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker":{InsertTLastMarker:[12,2,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker.InsertTLastMarker":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.make_deployment":{DeployToPYNQ:[12,2,1,""]},"finn.transformation.fpgadataflow.make_deployment.DeployToPYNQ":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver":{MakePYNQDriver:[12,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver.MakePYNQDriver":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj":{MakePYNQProject:[12,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj.MakePYNQProject":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.set_exec_mode":{SetExecMode:[12,2,1,""]},"finn.transformation.fpgadataflow.set_exec_mode.SetExecMode":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj":{SynthPYNQProject:[12,2,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj.SynthPYNQProject":{apply:[12,4,1,""]},"finn.transformation.general":{ConvertSubToAdd:[11,2,1,""],GiveRandomTensorNames:[11,2,1,""],GiveReadableTensorNames:[11,2,1,""],GiveUniqueNodeNames:[11,2,1,""]},"finn.transformation.general.ConvertSubToAdd":{apply:[11,4,1,""]},"finn.transformation.general.GiveRandomTensorNames":{apply:[11,4,1,""]},"finn.transformation.general.GiveReadableTensorNames":{apply:[11,4,1,""]},"finn.transformation.general.GiveUniqueNodeNames":{apply:[11,4,1,""]},"finn.transformation.infer_datatypes":{InferDataTypes:[11,2,1,""]},"finn.transformation.infer_datatypes.InferDataTypes":{apply:[11,4,1,""]},"finn.transformation.infer_shapes":{InferShapes:[11,2,1,""]},"finn.transformation.infer_shapes.InferShapes":{apply:[11,4,1,""]},"finn.transformation.streamline":{Streamline:[13,2,1,""],absorb:[13,0,0,"-"],collapse_repeated:[13,0,0,"-"],reorder:[13,0,0,"-"],round_thresholds:[13,0,0,"-"],sign_to_thres:[13,0,0,"-"]},"finn.transformation.streamline.Streamline":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb":{Absorb1BitMulIntoMatMul:[13,2,1,""],AbsorbAddIntoMultiThreshold:[13,2,1,""],AbsorbMulIntoMultiThreshold:[13,2,1,""],FactorOutMulSignMagnitude:[13,2,1,""]},"finn.transformation.streamline.absorb.Absorb1BitMulIntoMatMul":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb.AbsorbAddIntoMultiThreshold":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb.AbsorbMulIntoMultiThreshold":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb.FactorOutMulSignMagnitude":{apply:[13,4,1,""]},"finn.transformation.streamline.collapse_repeated":{CollapseRepeatedAdd:[13,2,1,""],CollapseRepeatedMul:[13,2,1,""],CollapseRepeatedOp:[13,2,1,""]},"finn.transformation.streamline.collapse_repeated.CollapseRepeatedOp":{apply:[13,4,1,""]},"finn.transformation.streamline.reorder":{MoveAddPastMul:[13,2,1,""],MoveScalarAddPastMatMul:[13,2,1,""],MoveScalarMulPastMatMul:[13,2,1,""]},"finn.transformation.streamline.reorder.MoveAddPastMul":{apply:[13,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarAddPastMatMul":{apply:[13,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarMulPastMatMul":{apply:[13,4,1,""]},"finn.transformation.streamline.round_thresholds":{RoundAndClipThresholds:[13,2,1,""]},"finn.transformation.streamline.round_thresholds.RoundAndClipThresholds":{apply:[13,4,1,""]},"finn.transformation.streamline.sign_to_thres":{ConvertSignToThres:[13,2,1,""]},"finn.transformation.streamline.sign_to_thres.ConvertSignToThres":{apply:[13,4,1,""]},"finn.util":{basic:[14,0,0,"-"],data_packing:[14,0,0,"-"],fpgadataflow:[14,0,0,"-"],onnx:[14,0,0,"-"],test:[14,0,0,"-"]},"finn.util.basic":{CppBuilder:[14,2,1,""],calculate_signed_dot_prod_range:[14,1,1,""],gen_finn_dt_tensor:[14,1,1,""],get_by_name:[14,1,1,""],get_finn_root:[14,1,1,""],interleave_matrix_outer_dim_from_partitions:[14,1,1,""],make_build_dir:[14,1,1,""],pad_tensor_to_multiple_of:[14,1,1,""],random_string:[14,1,1,""],remove_by_name:[14,1,1,""],roundup_to_integer_multiple:[14,1,1,""]},"finn.util.basic.CppBuilder":{append_includes:[14,4,1,""],append_sources:[14,4,1,""],build:[14,4,1,""],set_executable_path:[14,4,1,""]},"finn.util.data_packing":{array2hexstring:[14,1,1,""],finnpy_to_packed_bytearray:[14,1,1,""],hexstring2npbytearray:[14,1,1,""],npbytearray2hexstring:[14,1,1,""],npy_to_rtlsim_input:[14,1,1,""],numpy_to_hls_code:[14,1,1,""],pack_innermost_dim_as_hex_string:[14,1,1,""],packed_bytearray_to_finnpy:[14,1,1,""],rtlsim_output_to_npy:[14,1,1,""],unpack_innermost_dim_from_hex_string:[14,1,1,""]},"finn.util.fpgadataflow":{IPGenBuilder:[14,2,1,""],pyverilate_stitched_ip:[14,1,1,""]},"finn.util.fpgadataflow.IPGenBuilder":{append_tcl:[14,4,1,""],build:[14,4,1,""],set_ipgen_path:[14,4,1,""]},"finn.util.onnx":{valueinfo_to_tensor:[14,1,1,""]},"finn.util.test":{get_test_model_def_fxn:[14,1,1,""],get_test_model_trained:[14,1,1,""],get_test_model_untrained:[14,1,1,""],get_trained_checkpoint:[14,1,1,""]},finn:{analysis:[6,0,0,"-"],core:[8,0,0,"-"],custom_op:[9,0,0,"-"],transformation:[11,0,0,"-"],util:[14,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"],"4":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:attribute","4":"py:method"},terms:{"0f01":14,"0x07":14,"0x0e":14,"0x0f01":14,"0xb":14,"0xe":14,"abstract":[9,10,11],"boolean":8,"class":[8,9,10,11,12,13,14],"const":11,"default":[9,10,11],"enum":8,"final":8,"float":14,"function":[1,8,11,14],"import":1,"new":[1,2,8],"return":[6,7,8,9,10,11,13,14],"static":6,"true":[8,14],"try":1,"var":10,For:13,HLS:[2,8],IPs:12,PEs:10,The:[1,2,6,8,11,12,13,14],There:1,Use:[8,14],abc:[9,11],abit:14,about:[2,6,12],abov:1,absorb1bitmulintomatmul:13,absorb:[5,11,12],absorbaddintomultithreshold:13,absorbmulintomultithreshold:13,acceler:[1,12],account:8,action:12,activ:8,add:[11,13],adding:1,addit:1,addition:13,address:12,after:14,aim:13,all:[1,6,8,9,10,11,12,14],all_tensors_f32:6,allow:8,alreadi:12,also:[9,10,12],amount:14,analysi:[5,8,15],analysis_fxn:8,anaylsis_fxn:8,ani:[1,8,11,12,14],annot:[6,9,10],anoth:12,append_includ:14,append_sourc:14,append_tcl:14,appli:[8,11,12,13],apply_rep:11,appropri:[1,11],arbitrari:14,architectur:2,argument:1,around:8,arrai:14,array2hexstr:14,arxiv:13,assign:8,associ:[8,11],assum:14,attribut:[6,9,10,12],attribute_nam:[9,10],attributeproto:[9,10],back:1,backend:12,base:[8,9,10,11,12,13,14],basic:[5,15],batchnorm:11,batchnorm_to_affin:[5,15],batchnormtoaffin:11,been:12,befor:14,between:[10,14],binari:[8,10,12,13,14],bipolar:[8,10,11,13,14],bipolar_to_xnor:[5,15],bit:[8,14],bitfil:1,bitwidth:8,blackboxfunct:10,block:12,blott:10,board:12,bool:[6,11],both:14,bram_estim:10,brevita:2,brien:10,browser:1,build:14,built:6,calc_tmem:10,calc_wmem:10,calcul:10,calculate_signed_dot_prod_rang:14,call:[1,8,10,11,12],can:[1,2,8,11,12,13,14],cannot:11,centerpiec:2,certain:6,chang:[1,8,11],check:[6,8,9,10],check_all_tensor_shapes_specifi:8,check_compat:8,cleanup:[5,11],clk:[10,12],clone:[1,14],code:[12,14],code_gen_dir:14,code_generation_ipgen:10,code_generation_npysim:10,codegen_ipgen:[5,11],codegen_ipstitch:[5,11],codegen_npysim:[5,11],collaps:13,collapse_rep:[5,11],collapserepeatedadd:13,collapserepeatedmul:13,collapserepeatedop:13,collect:[1,12],colloqui:2,come:[1,6],command:1,commun:2,compar:[8,9],compare_execut:8,compare_fxn:8,compat:[8,9,10],compil:[2,5,11],compile_singlenode_cod:10,complet:1,compon:2,comput:[1,8],consecut:13,constant:[6,8,13],construct:2,consum:8,contain:[1,2,8,9,12,14],content:15,context:[8,9,10],contribut:2,convent:6,convert:[1,10,11,12,13,14],convert_to_hls_lay:[5,11],convertbipolarmatmultoxnorpopcount:11,convertsigntothr:13,convertsubtoadd:11,convolutioninputgener:[5,9],copi:[8,11,12],core:[5,15],corner:2,correct:11,correctli:[1,6,9,10,12],correspond:[2,8,9,10],count:10,cpp_file:14,cppbuilder:14,creat:[1,8,12,14],create_dataflow_partit:[5,11],createdataflowpartit:12,current:[2,8],custom:[1,2,6,8],custom_op:[5,15],customop:[9,10],data:[9,12,14],data_pack:[5,15],dataflow:[2,8,12],dataoutstrm:10,datatyp:[5,9,10,11,14,15],debug:8,declar:11,deep:[2,8,10,11],default_v:[9,10],default_valu:[9,10],defin:10,depend:1,deploi:1,deploy:12,deploytopynq:12,design:[1,12],detail:2,develop:2,dict:[8,9,10],dictionari:[6,8],differ:1,digit:14,dimens:14,dimension:14,dir:[12,14],directori:[1,12,14],distr_pad:14,divis:14,doc:2,docker:14,dockerfil:1,docomput:10,doe:1,don:11,done:6,dot:14,down:1,driver:12,dt_a:14,dt_b:14,dtype:[6,8,9,10,14],dynam:6,dynamic_input_to_npi:10,each:[2,6,8,11,13,14],editor:1,effect:11,either:1,element:14,embed:8,emit:14,emphasi:2,empti:8,end:10,ensur:[10,11,12,14],entir:1,enumer:[8,11],environ:1,equal:[9,10],equival:13,estim:7,even:11,evenli:14,everi:11,everyth:1,exampl:[1,14],excel:1,exec_precompiled_singlenode_model:10,execut:[8,9,10],execute_custom_nod:[5,15],execute_nod:[8,9,10],execute_onnx:8,execute_onnx_and_make_model:8,execution_context:8,exist:[9,14],exit:14,expect:[6,8,9,10,12],experi:2,experiment:2,explor:[2,8,10],expos:8,extens:1,extra:[1,6,14],extract:[6,7],f5c6bd32ae93ec103a88152214baedff4ce1850d81065bfc:1,factor:14,factoroutmulsignmagnitud:13,fals:[8,11,14],familiar:1,fan:6,fast:10,fewest:8,field:[12,14],file:[1,8,12,14],filenam:[8,12],find:8,find_consum:8,find_produc:8,finn:3,finn_dt:14,finnpy_to_packed_bytearrai:14,first:[6,13],fix:[11,14],flatten:14,float32:[6,8],fold_const:[5,15],foldconst:11,folder:[1,12,14],follow:[1,2,6,12],form:10,forward:1,found:[2,12],four:14,fpga:[1,2],fpgadataflow:[5,6,9,11,15],fpgapart:[10,12],framework:[2,10],fraser:10,from:[1,2,7,8,12,14],full:8,further:11,gambardella:10,gen_finn_dt_tensor:14,gener:[2,5,12,14,15],generate_param:10,get:[8,9],get_all_tensor_nam:8,get_by_nam:14,get_finn_root:14,get_folded_input_shap:10,get_folded_output_shap:10,get_hls_compatible_threshold_tensor:10,get_hls_compatible_weight_tensor:10,get_hls_datatype_str:8,get_initi:8,get_input_datatyp:10,get_instream_width:10,get_metadata_prop:8,get_nodeattr:9,get_nodeattr_typ:[9,10],get_num_possible_valu:8,get_number_output_valu:10,get_output_datatyp:10,get_outstream_width:10,get_per_tensor_fanout:6,get_smallest_poss:8,get_stream_width:10,get_template_param_valu:10,get_tensor_datatyp:8,get_tensor_fanout:8,get_tensor_shap:8,get_tensor_valueinfo:8,get_test_model_def_fxn:14,get_test_model_train:14,get_test_model_untrain:14,get_trained_checkpoint:14,get_weight_datatyp:10,getcustomop:9,github:2,give:[1,11,13],give_unique_node_nam:11,given:[6,7,8,9,10,14],giverandomtensornam:11,givereadabletensornam:11,giveuniquenodenam:11,global_includ:10,graph:[6,8,9,10,11,12],graphic:2,guarante:11,guid:5,hand:2,has:[6,8,11,12,14],have:[1,6,8,11,12,13],help:1,hex:14,hexstr:14,hexstring2npbytearrai:14,high:1,highli:2,hls_synth_res_estim:[5,6],hls_var_nam:14,hlscustomop:10,hlslib:[2,10],hlssynth_ipgen:[5,11],homepag:2,host:[1,14],how:[5,14],http:1,human:11,immedi:12,implement:8,includ:[2,8,12],indic:[8,9,10,11,12],infer:[1,2,8,9,10,11,14],infer_datatyp:[5,15],infer_node_datatyp:[9,10],infer_shap:[5,15],inferbinarystreamingfclay:12,inferdatatyp:11,infershap:11,infinit:11,info:[11,14],info_messag:6,inform:[6,12],infrastructur:12,inherit:11,initi:[6,8],innermost:14,inp0:9,inp1:9,inp:10,input:[6,8,9,10,11,13,14],input_dict:8,input_dtyp:14,input_fil:14,insert:[12,14],insert_tlastmark:[5,11],inserttlastmark:12,insid:[1,9],instal:1,instanc:[8,9,10,13],instanti:12,instead:14,int16:8,int2:8,int32:8,int3:8,int4:8,int8:8,integ:[8,13,14],interfac:12,interleav:10,interleave_matrix_outer_dim_from_partit:14,intermedi:[8,11],intern:11,involv:1,ipgen_singlenode_cod:10,ipgenbuild:14,is_integ:8,is_linear:6,item:14,jupyt:2,kei:8,know:11,lab:2,lambda:8,largest:8,launch:1,layer:[11,12],lead:14,learn:[2,10],leeser:10,len:14,let:11,letter:14,librari:2,library_path:14,like:1,linear:[6,8],link:[1,2],list:[6,8],locat:1,look:[1,6],loop:11,lut_estim:10,made:[8,11],magnitud:13,mai:1,make:[1,11,12],make_build_dir:14,make_collapsed_param_fxn:13,make_deepcopi:8,make_deploy:[5,11],make_empty_exec_context:8,make_new_valueinfo_nam:8,make_project:12,make_pynq_driv:[5,11],make_pynq_proj:[5,11],make_shape_compatible_op:[9,10],makepynqdriv:12,makepynqproject:12,mani:1,manipul:8,manual:11,matmul:[11,13],matrix:[10,13,14],max:[8,14],mean:14,meant:11,member:[9,10],metadata_prop:[8,12],min:[8,14],minimum:14,mixtur:6,mkdtemp:14,mode:[1,12],model:[6,7,8,9,10,11,12,13,14],model_a:8,model_b:8,model_was_chang:11,modelproto:[8,12],modelwrapp:[5,6,11,15],modul:15,modular:2,more:[2,8,11,14],mount:1,move:13,moveaddpastmul:13,movescalaraddpastmatmul:13,movescalarmulpastmatmul:13,mul:[11,13],multidimension:14,multipl:[11,13,14],multipli:13,multithreshold:[5,12,13,15],must:[9,11,12,13,14],mvtu:12,n_partit:14,n_thres_step:10,name:[6,7,8,9,11,14],name_field:14,ndarrai:14,nearest:[13,14],necessari:12,need:[7,9,10,11],neg:[8,13],netnam:14,netron:1,network:[1,2,10],neural:[2,10],new_nam:8,next:13,no_decl:14,node:[6,7,8,9,10,11,12,13],node_inputs_in_expected_ord:6,node_res_estim:10,non:12,none:[8,9,14],note:1,notebook:2,notwithstand:6,now:[6,8],npbytearrai:14,npbytearray2hexstr:14,npy:14,npy_to_dynamic_output:10,npy_to_rtlsim_input:14,number:[8,9,10,14],numpi:[10,14],numpy_to_hls_cod:14,object:[8,14],old_nam:8,onc:11,one:[6,8,12,14],ones:1,onli:[6,8,11,12,13],onlin:1,onnx:[5,8,9,10,12,15],onnx_exec:[5,15],onnx_model_proto:8,onnx_nod:[9,10],onnxruntim:8,op_nam:13,op_typ:6,open:1,oper:[8,13],ops:[6,13],option:1,order:6,orig_thres_matrix:10,orig_weight_matrix:10,origin:10,other:[8,13],otherwis:[1,8,11,14],out:6,out_bia:9,out_scal:9,out_shap:14,outcom:12,output:[8,9,10,11,14],output_shap:14,overlai:12,overview:2,own:1,pack:[12,14],pack_innermost_dim:14,pack_innermost_dim_as_hex_str:14,packag:15,packed_bytearrai:14,packed_bytearray_to_finnpi:14,packedbit:14,pad:14,pad_tensor_to_multiple_of:14,pad_to_dim:14,pad_to_nbit:14,pair:12,paramet:13,part:[9,14],particular:[9,10,14],partit:8,pass:[5,10],password:12,past:13,path:[10,14],per:12,perform:[1,9,10],permit:[9,10],place:12,platform:12,point:[1,11],port:1,posit:[10,13,14],possibl:[8,12],pragma:10,preced:13,precid:13,precis:14,precomput:11,prefer:8,prefix:14,prepend:14,preusser:10,previous:12,print:1,prior:[11,12,14],process:1,produc:[6,8],product:14,project:[2,12],properti:[6,8],provid:[1,8],pushbutton:1,pynq:12,pynq_driver_dir:12,python:[1,12,14],pyveril:[8,14],pyverilate_stitched_ip:14,qnn:[1,2],quantiz:[2,6,10],random:[11,14],random_str:14,randomli:14,rather:1,reach:11,read:2,read_npy_data:10,readabl:11,recommend:11,refer:2,reflect:1,registri:[5,15],relat:2,remot:8,remote_exec:[5,15],remov:[12,14],remove_by_nam:14,remove_prefix:14,renam:8,rename_tensor:8,reorder:[5,11],repeat:[11,13],repeatedli:8,replac:11,repo:1,repositori:[1,2],repres:[8,14],represent:14,requir:[8,9,10],res_estim:[5,6],research:2,reset_rtlsim:10,reshap:10,resourc:[1,7],respect:14,result:[6,7,8,11,12,13,14],return_full_exec_context:8,returned_dict:[9,10],revers:14,reverse_endian:14,reverse_inn:14,right:2,root:[1,14],round:[13,14],round_threshold:[5,11],roundandclipthreshold:13,roundup_to_integer_multipl:14,row:10,rtlsim:[8,10],rtlsim_exec:[5,15],rtlsim_output_to_npi:14,run:[8,12],run_dock:1,same:[12,14],save:[8,14],save_as_npi:10,scalar:13,scp:12,script:[1,12],second:[12,13],see:[13,14],seen:2,sep:10,separ:2,sequenc:14,server:1,set:[1,8,9,10,12,13,14],set_exec_mod:[5,11],set_executable_path:14,set_initi:8,set_ipgen_path:14,set_metadata_prop:8,set_nodeattr:9,set_tensor_datatyp:8,set_tensor_shap:8,setexecmod:12,settings64:1,sever:1,shape:[8,9,10,11,14],shell:12,should:[1,6,8,11],sign:[8,11,13,14],sign_to_thr:[5,11],sim:[10,14],sim_mod:12,simd:10,simpli:1,sinc:[8,14],singl:[1,8,13,14],small:6,smallest:8,some:[1,2,8,11],someth:1,spawn:1,specif:2,specifi:[8,11,14],split:[12,13,14],stai:2,standard:[8,9,10],stitch:[8,12,14],store:[9,12,14],streamingdataflowpartit:[5,12,15],streamingfclayer_batch:[5,9,12],streamingmaxpool_batch:[5,9],streamlin:[5,11],string:[6,14],stringlength:14,strm_decl:10,structur:6,style:2,sub:11,subdirectori:12,subgraph:8,submodul:[5,15],subpackag:15,subset:6,success:12,suitabl:10,sure:1,surviv:14,synth_pynq_proj:[5,11],synthesi:[7,12],synthpynqproject:12,take:[1,6,8,11,13,14],taken:[2,8,12],target:[2,12],target_dir:12,targetbit:14,tcl:12,tcl_script:14,tempfil:14,templat:[5,9,11],temporari:14,tensor:[6,8,11,13,14],tensor_fanout:6,tensor_nam:[6,8],tensor_shap:[8,14],tensor_valu:8,termin:[1,12],ternari:8,test:[5,11,15],text:1,thei:13,them:[6,12,13],thi:[1,2,6,8,9,10,11,12,14],thing:2,thought:1,threshold:[9,10,13],time:[1,11],tlastmark:[5,9,12],tmem:10,togeth:12,toggle_clk:10,token:1,tool:[1,2],topolog:[5,15],train:[1,2],transform:[5,8,15],transformed_model:11,travers:6,tune:2,tupl:11,two:[2,8,12,13,14],type:[8,11,14],ubuntu:1,uint16:8,uint2:[8,14],uint32:8,uint3:8,uint4:8,uint8:[8,14],umuroglu:10,under:[2,12],uniqu:11,unpack:[12,14],unpack_innermost_dim_from_hex_str:14,unsign:[8,13],until:8,updat:[2,13],upper:2,use:2,used:[2,8,9,10,14],useful:8,user:11,usernam:12,using:[2,8,11,13,14],util:[5,8,9,10,15],val:14,valu:[8,9,10,12,13,14],value_info:8,valueinfo:[8,11],valueinfo_to_tensor:14,valueinfoproto:[8,14],variabl:[1,14],vector:[13,14],verif:6,verifi:[6,9,10],verify_custom_nod:[5,15],verify_nod:[6,9,10],version:2,via:8,view:2,visser:10,vivado:[1,2,7,8,12],vivado_path:1,vivado_pynq_proj:12,vivado_stitch_proj:12,wai:[1,6],want:13,wbit:14,websit:2,weight:[8,10],welcom:2,well:1,when:[6,11],where:[1,8,9,10,12,13],whether:[6,8,9,10,11],which:[1,2,8,9,10,12,13,14],width:14,without:1,wmem:10,work:[1,8,14],workspac:1,wrapper:8,write:[1,5],xilinx:2,xnorpopcount:[5,15],xnorpopcountmatmul:[9,11,12],you:[1,11],your:[1,11],zero:[8,13,14]},titles:["FINN - End-to-End Flow","Getting Started","FINN","&lt;no title&gt;","Source Code","finn package","finn.analysis package","finn.analysis.fpgadataflow package","finn.core package","finn.custom_op package","finn.custom_op.fpgadataflow package","finn.transformation package","finn.transformation.fpgadataflow package","finn.transformation.streamline package","finn.util package","finn"],titleterms:{absorb:13,analysi:[6,7],basic:14,batchnorm_to_affin:11,bipolar_to_xnor:11,cleanup:12,code:4,codegen_ipgen:12,codegen_ipstitch:12,codegen_npysim:12,collapse_rep:13,compil:[1,12],content:[5,6,7,8,9,10,11,12,13,14],convert_to_hls_lay:12,convolutioninputgener:10,core:8,create_dataflow_partit:12,custom_op:[9,10],data_pack:14,datatyp:8,develop:1,directli:1,docker:1,end:0,execute_custom_nod:8,experiment:1,finn:[0,1,2,5,6,7,8,9,10,11,12,13,14,15],flow:0,fold_const:11,fpgadataflow:[7,10,12,14],gener:11,get:1,guid:11,hls_synth_res_estim:7,hlssynth_ipgen:12,how:[1,6],infer_datatyp:11,infer_shap:11,insert_tlastmark:12,interact:1,jenkin:1,jupyt:1,make_deploy:12,make_pynq_driv:12,make_pynq_proj:12,modelwrapp:8,modul:[5,6,7,8,9,10,11,12,13,14],multithreshold:9,notebook:1,onnx:14,onnx_exec:8,packag:[5,6,7,8,9,10,11,12,13,14],pass:6,registri:9,remote_exec:8,reorder:13,requir:1,res_estim:7,round_threshold:13,rtlsim_exec:8,run:1,set_exec_mod:12,shell:1,sign_to_thr:13,sourc:4,src:[],start:1,streamingdataflowpartit:9,streamingfclayer_batch:10,streamingmaxpool_batch:10,streamlin:13,submodul:[6,7,8,9,10,11,12,13,14],subpackag:[5,6,9,11],suit:1,synth_pynq_proj:12,templat:[10,12],test:[1,14],tlastmark:10,topolog:6,transform:[11,12,13],use:1,using:1,util:14,verify_custom_nod:6,what:2,write:[6,11],xnorpopcount:9}})
\ No newline at end of file
+Search.setIndex({docnames:["end_to_end_flow","getting_started","index","modules","source_code","source_code/finn","source_code/finn.analysis","source_code/finn.analysis.fpgadataflow","source_code/finn.core","source_code/finn.custom_op","source_code/finn.custom_op.fpgadataflow","source_code/finn.transformation","source_code/finn.transformation.fpgadataflow","source_code/finn.transformation.streamline","source_code/finn.util","source_code/modules"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["end_to_end_flow.rst","getting_started.rst","index.rst","modules.rst","source_code.rst","source_code/finn.rst","source_code/finn.analysis.rst","source_code/finn.analysis.fpgadataflow.rst","source_code/finn.core.rst","source_code/finn.custom_op.rst","source_code/finn.custom_op.fpgadataflow.rst","source_code/finn.transformation.rst","source_code/finn.transformation.fpgadataflow.rst","source_code/finn.transformation.streamline.rst","source_code/finn.util.rst","source_code/modules.rst"],objects:{"":{finn:[5,0,0,"-"]},"finn.analysis":{fpgadataflow:[7,0,0,"-"],topology:[6,0,0,"-"],verify_custom_nodes:[6,0,0,"-"]},"finn.analysis.fpgadataflow":{hls_synth_res_estimation:[7,0,0,"-"],res_estimation:[7,0,0,"-"]},"finn.analysis.fpgadataflow.hls_synth_res_estimation":{hls_synth_res_estimation:[7,1,1,""]},"finn.analysis.fpgadataflow.res_estimation":{res_estimation:[7,1,1,""]},"finn.analysis.topology":{all_tensors_f32:[6,1,1,""],get_per_tensor_fanouts:[6,1,1,""],is_linear:[6,1,1,""],node_inputs_in_expected_order:[6,1,1,""]},"finn.analysis.verify_custom_nodes":{verify_nodes:[6,1,1,""]},"finn.core":{datatype:[8,0,0,"-"],execute_custom_node:[8,0,0,"-"],modelwrapper:[8,0,0,"-"],onnx_exec:[8,0,0,"-"],remote_exec:[8,0,0,"-"],rtlsim_exec:[8,0,0,"-"]},"finn.core.datatype":{DataType:[8,2,1,""]},"finn.core.datatype.DataType":{BINARY:[8,3,1,""],BIPOLAR:[8,3,1,""],FLOAT32:[8,3,1,""],INT16:[8,3,1,""],INT2:[8,3,1,""],INT32:[8,3,1,""],INT3:[8,3,1,""],INT4:[8,3,1,""],INT8:[8,3,1,""],TERNARY:[8,3,1,""],UINT16:[8,3,1,""],UINT2:[8,3,1,""],UINT32:[8,3,1,""],UINT3:[8,3,1,""],UINT4:[8,3,1,""],UINT8:[8,3,1,""],allowed:[8,4,1,""],bitwidth:[8,4,1,""],get_hls_datatype_str:[8,4,1,""],get_num_possible_values:[8,4,1,""],get_smallest_possible:[8,4,1,""],is_integer:[8,4,1,""],max:[8,4,1,""],min:[8,4,1,""],signed:[8,4,1,""]},"finn.core.execute_custom_node":{execute_custom_node:[8,1,1,""]},"finn.core.modelwrapper":{ModelWrapper:[8,2,1,""]},"finn.core.modelwrapper.ModelWrapper":{analysis:[8,4,1,""],check_all_tensor_shapes_specified:[8,4,1,""],check_compatibility:[8,4,1,""],find_consumer:[8,4,1,""],find_producer:[8,4,1,""],get_all_tensor_names:[8,4,1,""],get_initializer:[8,4,1,""],get_metadata_prop:[8,4,1,""],get_tensor_datatype:[8,4,1,""],get_tensor_fanout:[8,4,1,""],get_tensor_shape:[8,4,1,""],get_tensor_valueinfo:[8,4,1,""],graph:[8,4,1,""],make_empty_exec_context:[8,4,1,""],make_new_valueinfo_name:[8,4,1,""],model:[8,4,1,""],rename_tensor:[8,4,1,""],save:[8,4,1,""],set_initializer:[8,4,1,""],set_metadata_prop:[8,4,1,""],set_tensor_datatype:[8,4,1,""],set_tensor_shape:[8,4,1,""],transform:[8,4,1,""]},"finn.core.onnx_exec":{compare_execution:[8,1,1,""],execute_node:[8,1,1,""],execute_onnx:[8,1,1,""],execute_onnx_and_make_model:[8,1,1,""]},"finn.core.remote_exec":{remote_exec:[8,1,1,""]},"finn.core.rtlsim_exec":{rtlsim_exec:[8,1,1,""]},"finn.custom_op":{CustomOp:[9,2,1,""],fpgadataflow:[10,0,0,"-"],multithreshold:[9,0,0,"-"],registry:[9,0,0,"-"],streamingdataflowpartition:[9,0,0,"-"],xnorpopcount:[9,0,0,"-"]},"finn.custom_op.CustomOp":{execute_node:[9,4,1,""],get_nodeattr:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],set_nodeattr:[9,4,1,""],verify_node:[9,4,1,""]},"finn.custom_op.fpgadataflow":{HLSCustomOp:[10,2,1,""],convolutioninputgenerator:[10,0,0,"-"],streamingfclayer_batch:[10,0,0,"-"],streamingmaxpool_batch:[10,0,0,"-"],templates:[10,0,0,"-"],tlastmarker:[10,0,0,"-"]},"finn.custom_op.fpgadataflow.HLSCustomOp":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],code_generation_ipgen:[10,4,1,""],code_generation_npysim:[10,4,1,""],compile_singlenode_code:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],dynamic_input_to_npy:[10,4,1,""],exec_precompiled_singlenode_model:[10,4,1,""],execute_node:[10,4,1,""],generate_params:[10,4,1,""],get_folded_input_shape:[10,4,1,""],get_folded_output_shape:[10,4,1,""],get_instream_width:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_outstream_width:[10,4,1,""],global_includes:[10,4,1,""],ipgen_singlenode_code:[10,4,1,""],lut_estimation:[10,4,1,""],node_res_estimation:[10,4,1,""],npy_to_dynamic_output:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],reset_rtlsim:[10,4,1,""],rtlsim:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],toggle_clk:[10,4,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator":{ConvolutionInputGenerator:[10,2,1,""]},"finn.custom_op.fpgadataflow.convolutioninputgenerator.ConvolutionInputGenerator":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],execute_node:[10,4,1,""],get_input_datatype:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_output_datatype:[10,4,1,""],get_stream_width:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],lut_estimation:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch":{StreamingFCLayer_Batch:[10,2,1,""]},"finn.custom_op.fpgadataflow.streamingfclayer_batch.StreamingFCLayer_Batch":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],calc_tmem:[10,4,1,""],calc_wmem:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],execute_node:[10,4,1,""],generate_params:[10,4,1,""],get_folded_input_shape:[10,4,1,""],get_folded_output_shape:[10,4,1,""],get_hls_compatible_threshold_tensor:[10,4,1,""],get_hls_compatible_weight_tensor:[10,4,1,""],get_input_datatype:[10,4,1,""],get_instream_width:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_output_datatype:[10,4,1,""],get_outstream_width:[10,4,1,""],get_template_param_values:[10,4,1,""],get_weight_datatype:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],lut_estimation:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch":{StreamingMaxPool_Batch:[10,2,1,""]},"finn.custom_op.fpgadataflow.streamingmaxpool_batch.StreamingMaxPool_Batch":{blackboxfunction:[10,4,1,""],bram_estimation:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],lut_estimation:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.fpgadataflow.tlastmarker":{TLastMarker:[10,2,1,""]},"finn.custom_op.fpgadataflow.tlastmarker.TLastMarker":{blackboxfunction:[10,4,1,""],dataoutstrm:[10,4,1,""],defines:[10,4,1,""],docompute:[10,4,1,""],execute_node:[10,4,1,""],get_folded_input_shape:[10,4,1,""],get_folded_output_shape:[10,4,1,""],get_instream_width:[10,4,1,""],get_nodeattr_types:[10,4,1,""],get_number_output_values:[10,4,1,""],get_outstream_width:[10,4,1,""],global_includes:[10,4,1,""],infer_node_datatype:[10,4,1,""],make_shape_compatible_op:[10,4,1,""],pragmas:[10,4,1,""],read_npy_data:[10,4,1,""],save_as_npy:[10,4,1,""],strm_decl:[10,4,1,""],verify_node:[10,4,1,""]},"finn.custom_op.multithreshold":{MultiThreshold:[9,2,1,""],compare:[9,1,1,""],multithreshold:[9,1,1,""]},"finn.custom_op.multithreshold.MultiThreshold":{execute_node:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],verify_node:[9,4,1,""]},"finn.custom_op.registry":{getCustomOp:[9,1,1,""]},"finn.custom_op.streamingdataflowpartition":{StreamingDataflowPartition:[9,2,1,""]},"finn.custom_op.streamingdataflowpartition.StreamingDataflowPartition":{execute_node:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],verify_node:[9,4,1,""]},"finn.custom_op.xnorpopcount":{XnorPopcountMatMul:[9,2,1,""],xnorpopcountmatmul:[9,1,1,""]},"finn.custom_op.xnorpopcount.XnorPopcountMatMul":{execute_node:[9,4,1,""],get_nodeattr_types:[9,4,1,""],infer_node_datatype:[9,4,1,""],make_shape_compatible_op:[9,4,1,""],verify_node:[9,4,1,""]},"finn.transformation":{Transformation:[11,2,1,""],batchnorm_to_affine:[11,0,0,"-"],bipolar_to_xnor:[11,0,0,"-"],fold_constants:[11,0,0,"-"],fpgadataflow:[12,0,0,"-"],general:[11,0,0,"-"],infer_datatypes:[11,0,0,"-"],infer_shapes:[11,0,0,"-"],streamline:[13,0,0,"-"]},"finn.transformation.Transformation":{apply:[11,4,1,""]},"finn.transformation.batchnorm_to_affine":{BatchNormToAffine:[11,2,1,""]},"finn.transformation.batchnorm_to_affine.BatchNormToAffine":{apply:[11,4,1,""]},"finn.transformation.bipolar_to_xnor":{ConvertBipolarMatMulToXnorPopcount:[11,2,1,""]},"finn.transformation.bipolar_to_xnor.ConvertBipolarMatMulToXnorPopcount":{apply:[11,4,1,""]},"finn.transformation.fold_constants":{FoldConstants:[11,2,1,""]},"finn.transformation.fold_constants.FoldConstants":{apply:[11,4,1,""]},"finn.transformation.fpgadataflow":{cleanup:[12,0,0,"-"],codegen_ipgen:[12,0,0,"-"],codegen_ipstitch:[12,0,0,"-"],codegen_npysim:[12,0,0,"-"],compile:[12,0,0,"-"],convert_to_hls_layers:[12,0,0,"-"],create_dataflow_partition:[12,0,0,"-"],hlssynth_ipgen:[12,0,0,"-"],insert_tlastmarker:[12,0,0,"-"],make_deployment:[12,0,0,"-"],make_pynq_driver:[12,0,0,"-"],make_pynq_proj:[12,0,0,"-"],set_exec_mode:[12,0,0,"-"],synth_pynq_proj:[12,0,0,"-"],templates:[12,0,0,"-"]},"finn.transformation.fpgadataflow.cleanup":{CleanUp:[12,2,1,""]},"finn.transformation.fpgadataflow.cleanup.CleanUp":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen":{CodeGen_ipgen:[12,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipgen.CodeGen_ipgen":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch":{CodeGen_ipstitch:[12,2,1,""]},"finn.transformation.fpgadataflow.codegen_ipstitch.CodeGen_ipstitch":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.codegen_npysim":{CodeGen_npysim:[12,2,1,""]},"finn.transformation.fpgadataflow.codegen_npysim.CodeGen_npysim":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.compile":{Compile:[12,2,1,""]},"finn.transformation.fpgadataflow.compile.Compile":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers":{InferBinaryStreamingFCLayer:[12,2,1,""]},"finn.transformation.fpgadataflow.convert_to_hls_layers.InferBinaryStreamingFCLayer":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition":{CreateDataflowPartition:[12,2,1,""]},"finn.transformation.fpgadataflow.create_dataflow_partition.CreateDataflowPartition":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen":{HLSSynth_IPGen:[12,2,1,""]},"finn.transformation.fpgadataflow.hlssynth_ipgen.HLSSynth_IPGen":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker":{InsertTLastMarker:[12,2,1,""]},"finn.transformation.fpgadataflow.insert_tlastmarker.InsertTLastMarker":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.make_deployment":{DeployToPYNQ:[12,2,1,""]},"finn.transformation.fpgadataflow.make_deployment.DeployToPYNQ":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver":{MakePYNQDriver:[12,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_driver.MakePYNQDriver":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj":{MakePYNQProject:[12,2,1,""]},"finn.transformation.fpgadataflow.make_pynq_proj.MakePYNQProject":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.set_exec_mode":{SetExecMode:[12,2,1,""]},"finn.transformation.fpgadataflow.set_exec_mode.SetExecMode":{apply:[12,4,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj":{SynthPYNQProject:[12,2,1,""]},"finn.transformation.fpgadataflow.synth_pynq_proj.SynthPYNQProject":{apply:[12,4,1,""]},"finn.transformation.general":{ConvertSubToAdd:[11,2,1,""],GiveRandomTensorNames:[11,2,1,""],GiveReadableTensorNames:[11,2,1,""],GiveUniqueNodeNames:[11,2,1,""]},"finn.transformation.general.ConvertSubToAdd":{apply:[11,4,1,""]},"finn.transformation.general.GiveRandomTensorNames":{apply:[11,4,1,""]},"finn.transformation.general.GiveReadableTensorNames":{apply:[11,4,1,""]},"finn.transformation.general.GiveUniqueNodeNames":{apply:[11,4,1,""]},"finn.transformation.infer_datatypes":{InferDataTypes:[11,2,1,""]},"finn.transformation.infer_datatypes.InferDataTypes":{apply:[11,4,1,""]},"finn.transformation.infer_shapes":{InferShapes:[11,2,1,""]},"finn.transformation.infer_shapes.InferShapes":{apply:[11,4,1,""]},"finn.transformation.streamline":{Streamline:[13,2,1,""],absorb:[13,0,0,"-"],collapse_repeated:[13,0,0,"-"],reorder:[13,0,0,"-"],round_thresholds:[13,0,0,"-"],sign_to_thres:[13,0,0,"-"]},"finn.transformation.streamline.Streamline":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb":{Absorb1BitMulIntoMatMul:[13,2,1,""],AbsorbAddIntoMultiThreshold:[13,2,1,""],AbsorbMulIntoMultiThreshold:[13,2,1,""],FactorOutMulSignMagnitude:[13,2,1,""]},"finn.transformation.streamline.absorb.Absorb1BitMulIntoMatMul":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb.AbsorbAddIntoMultiThreshold":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb.AbsorbMulIntoMultiThreshold":{apply:[13,4,1,""]},"finn.transformation.streamline.absorb.FactorOutMulSignMagnitude":{apply:[13,4,1,""]},"finn.transformation.streamline.collapse_repeated":{CollapseRepeatedAdd:[13,2,1,""],CollapseRepeatedMul:[13,2,1,""],CollapseRepeatedOp:[13,2,1,""]},"finn.transformation.streamline.collapse_repeated.CollapseRepeatedOp":{apply:[13,4,1,""]},"finn.transformation.streamline.reorder":{MoveAddPastMul:[13,2,1,""],MoveScalarAddPastMatMul:[13,2,1,""],MoveScalarMulPastMatMul:[13,2,1,""]},"finn.transformation.streamline.reorder.MoveAddPastMul":{apply:[13,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarAddPastMatMul":{apply:[13,4,1,""]},"finn.transformation.streamline.reorder.MoveScalarMulPastMatMul":{apply:[13,4,1,""]},"finn.transformation.streamline.round_thresholds":{RoundAndClipThresholds:[13,2,1,""]},"finn.transformation.streamline.round_thresholds.RoundAndClipThresholds":{apply:[13,4,1,""]},"finn.transformation.streamline.sign_to_thres":{ConvertSignToThres:[13,2,1,""]},"finn.transformation.streamline.sign_to_thres.ConvertSignToThres":{apply:[13,4,1,""]},"finn.util":{basic:[14,0,0,"-"],data_packing:[14,0,0,"-"],fpgadataflow:[14,0,0,"-"],onnx:[14,0,0,"-"],test:[14,0,0,"-"]},"finn.util.basic":{CppBuilder:[14,2,1,""],calculate_signed_dot_prod_range:[14,1,1,""],gen_finn_dt_tensor:[14,1,1,""],get_by_name:[14,1,1,""],get_finn_root:[14,1,1,""],interleave_matrix_outer_dim_from_partitions:[14,1,1,""],make_build_dir:[14,1,1,""],pad_tensor_to_multiple_of:[14,1,1,""],random_string:[14,1,1,""],remove_by_name:[14,1,1,""],roundup_to_integer_multiple:[14,1,1,""]},"finn.util.basic.CppBuilder":{append_includes:[14,4,1,""],append_sources:[14,4,1,""],build:[14,4,1,""],set_executable_path:[14,4,1,""]},"finn.util.data_packing":{array2hexstring:[14,1,1,""],finnpy_to_packed_bytearray:[14,1,1,""],hexstring2npbytearray:[14,1,1,""],npbytearray2hexstring:[14,1,1,""],npy_to_rtlsim_input:[14,1,1,""],numpy_to_hls_code:[14,1,1,""],pack_innermost_dim_as_hex_string:[14,1,1,""],packed_bytearray_to_finnpy:[14,1,1,""],rtlsim_output_to_npy:[14,1,1,""],unpack_innermost_dim_from_hex_string:[14,1,1,""]},"finn.util.fpgadataflow":{IPGenBuilder:[14,2,1,""],pyverilate_stitched_ip:[14,1,1,""]},"finn.util.fpgadataflow.IPGenBuilder":{append_tcl:[14,4,1,""],build:[14,4,1,""],set_ipgen_path:[14,4,1,""]},"finn.util.onnx":{valueinfo_to_tensor:[14,1,1,""]},"finn.util.test":{get_test_model_def_fxn:[14,1,1,""],get_test_model_trained:[14,1,1,""],get_test_model_untrained:[14,1,1,""],get_trained_checkpoint:[14,1,1,""]},finn:{analysis:[6,0,0,"-"],core:[8,0,0,"-"],custom_op:[9,0,0,"-"],transformation:[11,0,0,"-"],util:[14,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"],"4":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:attribute","4":"py:method"},terms:{"0f01":14,"0x07":14,"0x0e":14,"0x0f01":14,"0xb":14,"0xe":14,"abstract":[9,10,11],"boolean":8,"class":[8,9,10,11,12,13,14],"const":11,"default":[9,10,11],"enum":8,"final":8,"float":14,"function":[1,8,11,14],"import":1,"new":[1,2,8],"return":[6,7,8,9,10,11,13,14],"static":6,"true":[8,14],"try":1,"var":10,For:13,HLS:[2,8],IPs:12,PEs:10,The:[1,2,6,8,11,12,13,14],There:1,Use:[8,14],abc:[9,11],abit:14,about:[2,6,12],abov:1,absorb1bitmulintomatmul:13,absorb:[5,11,12],absorbaddintomultithreshold:13,absorbmulintomultithreshold:13,acceler:[1,12],account:8,action:12,activ:8,add:[11,13],adding:1,addit:1,addition:13,address:12,after:14,aim:13,all:[1,6,8,9,10,11,12,14],all_tensors_f32:6,allow:8,alreadi:12,also:[9,10,12],amount:14,analysi:[3,5,8,15],analysis_fxn:8,anaylsis_fxn:8,ani:[1,8,11,12,14],annot:[6,9,10],anoth:12,append_includ:14,append_sourc:14,append_tcl:14,appli:[8,11,12,13],apply_rep:11,appropri:[1,11],arbitrari:14,architectur:2,argument:1,around:8,arrai:14,array2hexstr:14,arxiv:13,assign:8,associ:[8,11],assum:14,attribut:[6,9,10,12],attribute_nam:[9,10],attributeproto:[9,10],back:1,backend:12,base:[8,9,10,11,12,13,14],basic:[3,5,15],batchnorm:11,batchnorm_to_affin:[3,5,15],batchnormtoaffin:11,been:12,befor:14,between:[10,14],binari:[8,10,12,13,14],bipolar:[8,10,11,13,14],bipolar_to_xnor:[3,5,15],bit:[8,14],bitfil:1,bitwidth:8,blackboxfunct:10,block:12,blott:10,board:12,bool:[6,11],both:14,bram_estim:10,brevita:2,brien:10,browser:1,build:14,built:6,calc_tmem:10,calc_wmem:10,calcul:10,calculate_signed_dot_prod_rang:14,call:[1,8,10,11,12],can:[1,2,8,11,12,13,14],cannot:11,centerpiec:2,certain:6,chang:[1,8,11],check:[6,8,9,10],check_all_tensor_shapes_specifi:8,check_compat:8,cleanup:[5,11],clk:[10,12],clone:[1,14],code:[12,14],code_gen_dir:14,code_generation_ipgen:10,code_generation_npysim:10,codegen_ipgen:[5,11],codegen_ipstitch:[5,11],codegen_npysim:[5,11],collaps:13,collapse_rep:[5,11],collapserepeatedadd:13,collapserepeatedmul:13,collapserepeatedop:13,collect:[1,12],colloqui:2,come:[1,6],command:1,commun:2,compar:[8,9],compare_execut:8,compare_fxn:8,compat:[8,9,10],compil:[2,5,11],compile_singlenode_cod:10,complet:1,compon:2,comput:[1,8],consecut:13,constant:[6,8,13],construct:2,consum:8,contain:[1,2,8,9,12,14],content:[3,15],context:[8,9,10],contribut:2,convent:6,convert:[1,10,11,12,13,14],convert_to_hls_lay:[5,11],convertbipolarmatmultoxnorpopcount:11,convertsigntothr:13,convertsubtoadd:11,convolutioninputgener:[5,9],copi:[8,11,12],core:[3,5,15],corner:2,correct:11,correctli:[1,6,9,10,12],correspond:[2,8,9,10],count:10,cpp_file:14,cppbuilder:14,creat:[1,8,12,14],create_dataflow_partit:[5,11],createdataflowpartit:12,current:[2,8],custom:[1,2,6,8],custom_op:[3,5,15],customop:[9,10],data:[9,12,14],data_pack:[3,5,15],dataflow:[2,8,12],dataoutstrm:10,datatyp:[3,5,9,10,11,14,15],debug:8,declar:11,deep:[2,8,10,11],default_v:[9,10],default_valu:[9,10],defin:10,depend:1,deploi:1,deploy:12,deploytopynq:12,design:[1,12],detail:2,develop:2,dict:[8,9,10],dictionari:[6,8],differ:1,digit:14,dimens:14,dimension:14,dir:[12,14],directori:[1,12,14],distr_pad:14,divis:14,doc:2,docker:14,dockerfil:1,docomput:10,doe:1,don:11,done:6,dot:14,down:1,driver:12,dt_a:14,dt_b:14,dtype:[6,8,9,10,14],dynam:6,dynamic_input_to_npi:10,each:[2,6,8,11,13,14],editor:1,effect:11,either:1,element:14,embed:8,emit:14,emphasi:2,empti:8,end:10,ensur:[10,11,12,14],entir:1,enumer:[8,11],environ:1,equal:[9,10],equival:13,estim:7,even:11,evenli:14,everi:11,everyth:1,exampl:[1,14],excel:1,exec_precompiled_singlenode_model:10,execut:[8,9,10],execute_custom_nod:[3,5,15],execute_nod:[8,9,10],execute_onnx:8,execute_onnx_and_make_model:8,execution_context:8,exist:[9,14],exit:14,expect:[6,8,9,10,12],experi:2,experiment:2,explor:[2,8,10],expos:8,extens:1,extra:[1,6,14],extract:[6,7],f5c6bd32ae93ec103a88152214baedff4ce1850d81065bfc:1,factor:14,factoroutmulsignmagnitud:13,fals:[8,11,14],familiar:1,fan:6,fast:10,fewest:8,field:[12,14],file:[1,8,12,14],filenam:[8,12],find:8,find_consum:8,find_produc:8,finn:[],finn_dt:14,finnpy_to_packed_bytearrai:14,first:[6,13],fix:[11,14],flatten:14,float32:[6,8],fold_const:[3,5,15],foldconst:11,folder:[1,12,14],follow:[1,2,6,12],form:10,forward:1,found:[2,12],four:14,fpga:[1,2],fpgadataflow:[3,5,6,9,11,15],fpgapart:[10,12],framework:[2,10],fraser:10,from:[1,2,7,8,12,14],full:8,further:11,gambardella:10,gen_finn_dt_tensor:14,gener:[2,3,5,12,14,15],generate_param:10,get:[8,9],get_all_tensor_nam:8,get_by_nam:14,get_finn_root:14,get_folded_input_shap:10,get_folded_output_shap:10,get_hls_compatible_threshold_tensor:10,get_hls_compatible_weight_tensor:10,get_hls_datatype_str:8,get_initi:8,get_input_datatyp:10,get_instream_width:10,get_metadata_prop:8,get_nodeattr:9,get_nodeattr_typ:[9,10],get_num_possible_valu:8,get_number_output_valu:10,get_output_datatyp:10,get_outstream_width:10,get_per_tensor_fanout:6,get_smallest_poss:8,get_stream_width:10,get_template_param_valu:10,get_tensor_datatyp:8,get_tensor_fanout:8,get_tensor_shap:8,get_tensor_valueinfo:8,get_test_model_def_fxn:14,get_test_model_train:14,get_test_model_untrain:14,get_trained_checkpoint:14,get_weight_datatyp:10,getcustomop:9,github:2,give:[1,11,13],give_unique_node_nam:11,given:[6,7,8,9,10,14],giverandomtensornam:11,givereadabletensornam:11,giveuniquenodenam:11,global_includ:10,graph:[6,8,9,10,11,12],graphic:2,guarante:11,guid:5,hand:2,has:[6,8,11,12,14],have:[1,6,8,11,12,13],help:1,hex:14,hexstr:14,hexstring2npbytearrai:14,high:1,highli:2,hls_synth_res_estim:[5,6],hls_var_nam:14,hlscustomop:10,hlslib:[2,10],hlssynth_ipgen:[5,11],homepag:2,host:[1,14],how:[5,14],http:1,human:11,immedi:12,implement:8,includ:[2,8,12],indic:[8,9,10,11,12],infer:[1,2,8,9,10,11,14],infer_datatyp:[3,5,15],infer_node_datatyp:[9,10],infer_shap:[3,5,15],inferbinarystreamingfclay:12,inferdatatyp:11,infershap:11,infinit:11,info:[11,14],info_messag:6,inform:[6,12],infrastructur:12,inherit:11,initi:[6,8],innermost:14,inp0:9,inp1:9,inp:10,input:[6,8,9,10,11,13,14],input_dict:8,input_dtyp:14,input_fil:14,insert:[12,14],insert_tlastmark:[5,11],inserttlastmark:12,insid:[1,9],instal:1,instanc:[8,9,10,13],instanti:12,instead:14,int16:8,int2:8,int32:8,int3:8,int4:8,int8:8,integ:[8,13,14],interfac:12,interleav:10,interleave_matrix_outer_dim_from_partit:14,intermedi:[8,11],intern:11,involv:1,ipgen_singlenode_cod:10,ipgenbuild:14,is_integ:8,is_linear:6,item:14,jupyt:2,kei:8,know:11,lab:2,lambda:8,largest:8,launch:1,layer:[11,12],lead:14,learn:[2,10],leeser:10,len:14,let:11,letter:14,librari:2,library_path:14,like:1,linear:[6,8],link:[1,2],list:[6,8],locat:1,look:[1,6],loop:11,lut_estim:10,made:[8,11],magnitud:13,mai:1,make:[1,11,12],make_build_dir:14,make_collapsed_param_fxn:13,make_deepcopi:8,make_deploy:[5,11],make_empty_exec_context:8,make_new_valueinfo_nam:8,make_project:12,make_pynq_driv:[5,11],make_pynq_proj:[5,11],make_shape_compatible_op:[9,10],makepynqdriv:12,makepynqproject:12,mani:1,manipul:8,manual:11,matmul:[11,13],matrix:[10,13,14],max:[8,14],mean:14,meant:11,member:[9,10],metadata_prop:[8,12],min:[8,14],minimum:14,mixtur:6,mkdtemp:14,mode:[1,12],model:[6,7,8,9,10,11,12,13,14],model_a:8,model_b:8,model_was_chang:11,modelproto:[8,12],modelwrapp:[3,5,6,11,15],modul:[3,15],modular:2,more:[2,8,11,14],mount:1,move:13,moveaddpastmul:13,movescalaraddpastmatmul:13,movescalarmulpastmatmul:13,mul:[11,13],multidimension:14,multipl:[11,13,14],multipli:13,multithreshold:[3,5,12,13,15],must:[9,11,12,13,14],mvtu:12,n_partit:14,n_thres_step:10,name:[6,7,8,9,11,14],name_field:14,ndarrai:14,nearest:[13,14],necessari:12,need:[7,9,10,11],neg:[8,13],netnam:14,netron:1,network:[1,2,10],neural:[2,10],new_nam:8,next:13,no_decl:14,node:[6,7,8,9,10,11,12,13],node_inputs_in_expected_ord:6,node_res_estim:10,non:12,none:[8,9,14],note:1,notebook:2,notwithstand:6,now:[6,8],npbytearrai:14,npbytearray2hexstr:14,npy:14,npy_to_dynamic_output:10,npy_to_rtlsim_input:14,number:[8,9,10,14],numpi:[10,14],numpy_to_hls_cod:14,object:[8,14],old_nam:8,onc:11,one:[6,8,12,14],ones:1,onli:[6,8,11,12,13],onlin:1,onnx:[3,5,8,9,10,12,15],onnx_exec:[3,5,15],onnx_model_proto:8,onnx_nod:[9,10],onnxruntim:8,op_nam:13,op_typ:6,open:1,oper:[8,13],ops:[6,13],option:1,order:6,orig_thres_matrix:10,orig_weight_matrix:10,origin:10,other:[8,13],otherwis:[1,8,11,14],out:6,out_bia:9,out_scal:9,out_shap:14,outcom:12,output:[8,9,10,11,14],output_shap:14,overlai:12,overview:2,own:1,pack:[12,14],pack_innermost_dim:14,pack_innermost_dim_as_hex_str:14,packag:[3,15],packed_bytearrai:14,packed_bytearray_to_finnpi:14,packedbit:14,pad:14,pad_tensor_to_multiple_of:14,pad_to_dim:14,pad_to_nbit:14,pair:12,paramet:13,part:[9,14],particular:[9,10,14],partit:8,pass:[5,10],password:12,past:13,path:[10,14],per:12,perform:[1,9,10],permit:[9,10],place:12,platform:12,point:[1,11],port:1,posit:[10,13,14],possibl:[8,12],pragma:10,preced:13,precid:13,precis:14,precomput:11,prefer:8,prefix:14,prepend:14,preusser:10,previous:12,print:1,prior:[11,12,14],process:1,produc:[6,8],product:14,project:[2,12],properti:[6,8],provid:[1,8],pushbutton:1,pynq:12,pynq_driver_dir:12,python:[1,12,14],pyveril:[8,14],pyverilate_stitched_ip:14,qnn:[1,2],quantiz:[2,6,10],random:[11,14],random_str:14,randomli:14,rather:1,reach:11,read:2,read_npy_data:10,readabl:11,recommend:11,refer:2,reflect:1,registri:[3,5,15],relat:2,remot:8,remote_exec:[3,5,15],remov:[12,14],remove_by_nam:14,remove_prefix:14,renam:8,rename_tensor:8,reorder:[5,11],repeat:[11,13],repeatedli:8,replac:11,repo:1,repositori:[1,2],repres:[8,14],represent:14,requir:[8,9,10],res_estim:[5,6],research:2,reset_rtlsim:10,reshap:10,resourc:[1,7],respect:14,result:[6,7,8,11,12,13,14],return_full_exec_context:8,returned_dict:[9,10],revers:14,reverse_endian:14,reverse_inn:14,right:2,root:[1,14],round:[13,14],round_threshold:[5,11],roundandclipthreshold:13,roundup_to_integer_multipl:14,row:10,rtlsim:[8,10],rtlsim_exec:[3,5,15],rtlsim_output_to_npi:14,run:[8,12],run_dock:1,same:[12,14],save:[8,14],save_as_npi:10,scalar:13,scp:12,script:[1,12],second:[12,13],see:[13,14],seen:2,sep:10,separ:2,sequenc:14,server:1,set:[1,8,9,10,12,13,14],set_exec_mod:[5,11],set_executable_path:14,set_initi:8,set_ipgen_path:14,set_metadata_prop:8,set_nodeattr:9,set_tensor_datatyp:8,set_tensor_shap:8,setexecmod:12,settings64:1,sever:1,shape:[8,9,10,11,14],shell:12,should:[1,6,8,11],sign:[8,11,13,14],sign_to_thr:[5,11],sim:[10,14],sim_mod:12,simd:10,simpli:1,sinc:[8,14],singl:[1,8,13,14],small:6,smallest:8,some:[1,2,8,11],someth:1,spawn:1,specif:2,specifi:[8,11,14],split:[12,13,14],stai:2,standard:[8,9,10],stitch:[8,12,14],store:[9,12,14],streamingdataflowpartit:[3,5,12,15],streamingfclayer_batch:[5,9,12],streamingmaxpool_batch:[5,9],streamlin:[5,11],string:[6,14],stringlength:14,strm_decl:10,structur:6,style:2,sub:11,subdirectori:12,subgraph:8,submodul:[3,5,15],subpackag:[3,15],subset:6,success:12,suitabl:10,sure:1,surviv:14,synth_pynq_proj:[5,11],synthesi:[7,12],synthpynqproject:12,take:[1,6,8,11,13,14],taken:[2,8,12],target:[2,12],target_dir:12,targetbit:14,tcl:12,tcl_script:14,tempfil:14,templat:[5,9,11],temporari:14,tensor:[6,8,11,13,14],tensor_fanout:6,tensor_nam:[6,8],tensor_shap:[8,14],tensor_valu:8,termin:[1,12],ternari:8,test:[3,5,11,15],text:1,thei:13,them:[6,12,13],thi:[1,2,6,8,9,10,11,12,14],thing:2,thought:1,threshold:[9,10,13],time:[1,11],tlastmark:[5,9,12],tmem:10,togeth:12,toggle_clk:10,token:1,tool:[1,2],topolog:[3,5,15],train:[1,2],transform:[3,5,8,15],transformed_model:11,travers:6,tune:2,tupl:11,two:[2,8,12,13,14],type:[8,11,14],ubuntu:1,uint16:8,uint2:[8,14],uint32:8,uint3:8,uint4:8,uint8:[8,14],umuroglu:10,under:[2,12],uniqu:11,unpack:[12,14],unpack_innermost_dim_from_hex_str:14,unsign:[8,13],until:8,updat:[2,13],upper:2,use:2,used:[2,8,9,10,14],useful:8,user:11,usernam:12,using:[2,8,11,13,14],util:[3,5,8,9,10,15],val:14,valu:[8,9,10,12,13,14],value_info:8,valueinfo:[8,11],valueinfo_to_tensor:14,valueinfoproto:[8,14],variabl:[1,14],vector:[13,14],verif:6,verifi:[6,9,10],verify_custom_nod:[3,5,15],verify_nod:[6,9,10],version:2,via:8,view:2,visser:10,vivado:[1,2,7,8,12],vivado_path:1,vivado_pynq_proj:12,vivado_stitch_proj:12,wai:[1,6],want:13,wbit:14,websit:2,weight:[8,10],welcom:2,well:1,when:[6,11],where:[1,8,9,10,12,13],whether:[6,8,9,10,11],which:[1,2,8,9,10,12,13,14],width:14,without:1,wmem:10,work:[1,8,14],workspac:1,wrapper:8,write:[1,5],xilinx:2,xnorpopcount:[3,5,15],xnorpopcountmatmul:[9,11,12],you:[1,11],your:[1,11],zero:[8,13,14]},titles:["FINN - End-to-End Flow","Getting Started","FINN","finn","Source Code","finn package","finn.analysis package","finn.analysis.fpgadataflow package","finn.core package","finn.custom_op package","finn.custom_op.fpgadataflow package","finn.transformation package","finn.transformation.fpgadataflow package","finn.transformation.streamline package","finn.util package","finn"],titleterms:{absorb:13,analysi:[6,7],basic:14,batchnorm_to_affin:11,bipolar_to_xnor:11,cleanup:12,code:4,codegen_ipgen:12,codegen_ipstitch:12,codegen_npysim:12,collapse_rep:13,compil:[1,12],content:[5,6,7,8,9,10,11,12,13,14],convert_to_hls_lay:12,convolutioninputgener:10,core:8,create_dataflow_partit:12,custom_op:[9,10],data_pack:14,datatyp:8,develop:1,directli:1,docker:1,end:0,execute_custom_nod:8,experiment:1,finn:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15],flow:0,fold_const:11,fpgadataflow:[7,10,12,14],gener:11,get:1,guid:11,hls_synth_res_estim:7,hlssynth_ipgen:12,how:[1,6],infer_datatyp:11,infer_shap:11,insert_tlastmark:12,interact:1,jenkin:1,jupyt:1,make_deploy:12,make_pynq_driv:12,make_pynq_proj:12,modelwrapp:8,modul:[5,6,7,8,9,10,11,12,13,14],multithreshold:9,notebook:1,onnx:14,onnx_exec:8,packag:[5,6,7,8,9,10,11,12,13,14],pass:6,registri:9,remote_exec:8,reorder:13,requir:1,res_estim:7,round_threshold:13,rtlsim_exec:8,run:1,set_exec_mod:12,shell:1,sign_to_thr:13,sourc:4,src:[],start:1,streamingdataflowpartit:9,streamingfclayer_batch:10,streamingmaxpool_batch:10,streamlin:13,submodul:[6,7,8,9,10,11,12,13,14],subpackag:[5,6,9,11],suit:1,synth_pynq_proj:12,templat:[10,12],test:[1,14],tlastmark:10,topolog:6,transform:[11,12,13],use:1,using:1,util:14,verify_custom_nod:6,what:2,write:[6,11],xnorpopcount:9}})
\ No newline at end of file
diff --git a/docs/finn/modules.rst b/docs/finn/modules.rst
index 8355e03ee..a95f6589b 100644
--- a/docs/finn/modules.rst
+++ b/docs/finn/modules.rst
@@ -1,7 +1,7 @@
 finn
-===
+====
 
 .. toctree::
    :maxdepth: 4
 
-   finn
+   source_code/finn
-- 
GitLab