From 0112a0b37839cfe044ccf99a80f3488889895206 Mon Sep 17 00:00:00 2001
From: hhakim <hakim.hadj-djilani@inria.fr>
Date: Sat, 16 Jan 2021 12:07:31 +0100
Subject: [PATCH] Update livescript to fill section 1.3 and set internal links
 (of toc).

---
 gen_doc/Faust_manipulation.mlx      | Bin 28128 -> 76544 bytes
 gen_doc/Faust_manipulation.mlx.html | 423 +++++++++++++++-------------
 2 files changed, 220 insertions(+), 203 deletions(-)
 mode change 100644 => 100755 gen_doc/Faust_manipulation.mlx
 mode change 100644 => 100755 gen_doc/Faust_manipulation.mlx.html

diff --git a/gen_doc/Faust_manipulation.mlx b/gen_doc/Faust_manipulation.mlx
old mode 100644
new mode 100755
index 5f0814fe64e575e01801d5a698f60d17f987c067..262da1263ac2de3e87cdc8d45be693a54cf7fd46
GIT binary patch
delta 59027
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

delta 10246
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
BTJrz^

diff --git a/gen_doc/Faust_manipulation.mlx.html b/gen_doc/Faust_manipulation.mlx.html
old mode 100644
new mode 100755
index f96c4044d..57dc7d31c
--- a/gen_doc/Faust_manipulation.mlx.html
+++ b/gen_doc/Faust_manipulation.mlx.html
@@ -5,8 +5,8 @@
 .S3 { margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 14px;  }
 .S4 { margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap;  }
 .CodeBlock { background-color: #F7F7F7; margin: 10px 0 10px 0;}
-.S5 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 4px 4px 0px 0px; padding: 6px 45px 4px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
-.S6 { color: rgb(64, 64, 64); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% / auto padding-box border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px; overflow-x: hidden; line-height: 17.234001159668px;  }
+.S5 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 4px 4px 0px 0px; padding: 6px 45px 4px 13px; line-height: 17.2339992523193px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
+.S6 { color: rgb(64, 64, 64); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% / auto padding-box border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px; overflow-x: hidden; line-height: 17.2339992523193px;  }
 .embeddedOutputsErrorElement {min-height: 18px; max-height: 250px; overflow: auto;}
 .embeddedOutputsErrorElement.inlineElement {}
 .embeddedOutputsErrorElement.rightPaneElement {}
@@ -26,7 +26,7 @@
 .inlineElement .textElement {}
 .embeddedOutputsTextElement.rightPaneElement,.embeddedOutputsVariableStringElement.rightPaneElement {min-height: 16px;}
 .rightPaneElement .textElement {padding-top: 2px; padding-left: 9px;}
-.S7 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 6px 45px 4px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
+.S7 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 6px 45px 4px 13px; line-height: 17.2339992523193px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
 .variableValue { width: 100% !important; }
 .embeddedOutputsMatrixElement,.eoOutputWrapper .matrixElement {min-height: 18px; box-sizing: border-box;}
 .embeddedOutputsMatrixElement .matrixElement,.eoOutputWrapper .matrixElement,.rtcDataTipElement .matrixElement {position: relative;}
@@ -53,74 +53,83 @@
 .matrixElement .horizontalEllipsis,.rtcDataTipElement .matrixElement .horizontalEllipsis {display: inline-block; margin-top: 3px; width: 30px; height: 12px; background-repeat: no-repeat; background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAJCAYAAADO1CeCAAAAJUlEQVR42mP4//8/A70xw0i29BUDFPxnAEtTW37wWDqakIa4pQDvOOG89lHX2gAAAABJRU5ErkJggg==");}
 .matrixElement .verticalEllipsis,.textElement .verticalEllipsis,.rtcDataTipElement .matrixElement .verticalEllipsis,.rtcDataTipElement .textElement .verticalEllipsis {margin-left: 35px; width: 12px; height: 30px; background-repeat: no-repeat; background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAZCAYAAAAIcL+IAAAALklEQVR42mP4//8/AzGYgWyFMECMwv8QddRS+P//KyimlmcGUOFoOI6GI/UVAgDnd8Dd4+NCwgAAAABJRU5ErkJggg==");}
 .S8 { margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: left;  }
-.S9 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
-.S10 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
-.S11 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
+.S9 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 17.2339992523193px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
+.S10 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 17.2339992523193px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
+.S11 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 17.2339992523193px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
 .S12 { margin: 10px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 15px; font-weight: bold; text-align: left;  }
-.S13 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 4px; padding: 6px 45px 4px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
-.S14 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 6px 45px 0px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
-.S15 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px 0px 4px 4px; padding: 6px 45px 4px 13px; line-height: 17.234001159668px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }</style></head><body><div class = rtcContent><div  class = 'S0'></div><h2  class = 'S1'><span>How to Manipulate a Faust</span></h2><div  class = 'S0'><span></span></div><div  class = 'S0'><span>This livescript is intended to gently introduce the operations available to manipulate a Faust object. It comes after the first livescript (available </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/Faust_creation.mlx"><span>here</span></a><span> for download or </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/Faust_creation.html"><span>here</span></a><span> as a web page), so it's assumed you already know how to create a Faust object from one way or another.</span></div><div  class = 'S0'><span>Keep in mind that a full API doc is available </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/namespacematfaust.html"><span>here</span></a><span> every time you need details. In particular the Faust class is documented </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html"><span>here</span></a><span>.</span></div><div  class = 'S0'><span style=' font-weight: bold;'>NOTE</span><span>: the livescript is made to be executed sequentially, otherwise, skipping some cells, you would end up on an import error.</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2'><span>Table of Contents:</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>1. Getting Basic Information about a Faust Object</span></div><div  class = 'S0'><span>1.1 Obtaining Dimension and Scalar Type Information</span></div><div  class = 'S0'><span>1.2 Obtaining Other Faust Specific Information</span></div><div  class = 'S0'><span>1.3 Plotting a Faust</span></div><div  class = 'S0'><span>1.4 About Sparsity!</span></div><div  class = 'S0'><span>2. Faust Algebra and other Operations</span></div><div  class = 'S0'><span>2.1 Transpose, conjugate, transconjugate</span></div><div  class = 'S0'><span>2.2 Add, Subtract and Multiply</span></div><div  class = 'S0'><span>2.3 Faust Multiplication by a Vector or a Matrix</span></div><div  class = 'S0'><span>2.4 Faust Norms</span></div><div  class = 'S0'><span>2.5 Faust Normalizations</span></div><div  class = 'S0'><span>2.6 Faust Concatenation</span></div><div  class = 'S0'><span>2.7 Faust Indexing and Slicing</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2'><span>1. Getting Basic Information about a Faust Object</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>First of all, given any object, you might ask yourself if it's a Faust or not (typically when you receive an object in a function, matlab being built on dynamic types, you can't say for sure it's a Faust). </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#ac5d5fbe66ef212a1c7043b78504f87fc"><span>Faust.isFaust()</span></a><span> is the function to verify an object is a Faust. Its use is straighforward as you can see in the documentation. Note by the way, that a more accessible alias is available at the package root </span><span style=' font-family: monospace;'>(matfaust.isFaust</span><span>).</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2'><span>1.1 Obtaining Dimension and Scalar Type Information</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>Firstly, let's list basic Faust informative methods/attributes you're probably used to for matlab matrices:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a7146c7de95b35efc570a377765edda27"><span>size</span></a><span>,</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#af62f554cd8b491a2c75ee06019f87d8a"><span>numel</span></a><span>,</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a7527e1fda21bc1678646a4b40db28eb6"><span>isreal</span></a><span>.</span></li></ul><div  class = 'S0'><span>To keep it really clear, let's show some examples operated on a random Faust.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F = matfaust.rand(5,10)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="966668C8" data-scroll-top="null" data-scroll-left="null" data-testid="output_0" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">F = </span></div><div>Faust size 5x10, density 3.7, nnz_sum 185, 5 factor(s): 
-- FACTOR 0 (real) SPARSE, size 5x10, density 0.5, nnz 25
-- FACTOR 1 (real) SPARSE, size 10x6, density 0.666667, nnz 40
-- FACTOR 2 (real) SPARSE, size 6x9, density 0.555556, nnz 30
-- FACTOR 3 (real) SPARSE, size 9x9, density 0.555556, nnz 45
-- FACTOR 4 (real) SPARSE, size 9x10, density 0.5, nnz 45</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>size(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="253C2C58" data-scroll-top="null" data-scroll-left="null" data-testid="output_1" data-width="926" style="width: 956px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 926px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">1×2</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:44,&quot;totalColumns&quot;:2,&quot;totalRows&quot;:1,&quot;charsPerColumn&quot;:6}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 90px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">     5    10
-</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>numel(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 50</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>isreal(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="B36889E1" data-scroll-top="null" data-scroll-left="null" data-testid="output_3" data-width="926" data-height="34" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
-</div></div></div></div></div></div><div  class = 'S8'><span>If the attributes printed out above seem not clear to you, you're probably not a Matlab user. Anyway you'll find all descriptive informations in the FAµST API documentation (see the links above).</span></div><div  class = 'S0'><span>As a complement, you can also refer to the Matlab API documentation:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://www.mathworks.com/help/matlab/ref/size.html"><span>size</span></a></li><li  class = 'S4'><a href = "https://www.mathworks.com/help/matlab/ref/numel.html"><span>numel</span></a></li><li  class = 'S4'><a href = "https://www.mathworks.com/help/matlab/ref/isreal.html"><span>isreal</span></a></li></ul><div  class = 'S0'><span>About size, it's noteworthy that contrary to what Matlab is capable of on an array, you cannot </span><a href = "https://www.mathworks.com/help/matlab/ref/reshape.html"><span>reshape</span></a><span> a Faust.</span></div><h3  class = 'S2'><span></span></h3><h3  class = 'S2'><span>1.2 Obtaining Other Faust Specific Information</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>As you've seen in this livescript and the first one, when you print a Faust object, several pieces of information appear. Most of them are also available independently with specific functions.</span></div><div  class = 'S0'><span>For instance, if you want information about factors, nothing is more simple than calling directly the next functions:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a5e77419460592366457aa60175472e2e"><span>numfactors()</span></a><span> ; which gives you the number of factors (aka layers) a Faust object is composed of.</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a65a84416b4b1fd050654a02232e95d2f"><span>factors()</span></a><span> ; which allows you to copy any of the Faust's factors givens its index.</span></li></ul><div  class = 'S0'><span>Going back to our F object, let's call these functions:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>numfactors(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 5</div></div></div></div><div  class = 'S8'><span>For example, try to copy the third factor:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>f3 = factors(F, 3)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="5FE9FC04" data-scroll-top="null" data-scroll-left="null" data-testid="output_5" data-width="926" data-height="440" data-hashorizontaloverflow="false" style="width: 956px; max-height: 451px;"><div class="textElement"><div><span class="variableNameElement">f3 = </span></div><div>   (1,1)       0.4445
-   (2,1)       0.7386
-   (3,1)       0.8996
-   (5,1)       0.7525
-   (6,1)       0.3492
-   (5,2)       0.8700
-   (6,2)       0.0345
-   (1,3)       0.1148
-   (2,3)       0.9154
-   (3,3)       0.1409
-   (5,3)       0.3150
-   (6,3)       0.0677
-   (1,4)       0.0300
-   (2,4)       0.0864
-   (3,4)       0.0184
-   (4,4)       0.8315
-   (1,5)       0.3195
-   (3,5)       0.6342
-   (4,5)       0.5401
-   (5,5)       0.7264
-   (1,6)       0.0206
-   (6,6)       0.4736
-   (2,7)       0.6442
-   (4,7)       0.8710
-   (5,7)       0.2015
-   (2,8)       0.6851
-   (4,8)       0.1751
-   (3,9)       0.5870
-   (4,9)       0.2351
-   (6,9)       0.2876
-</div></div></div></div></div></div><div  class = 'S8'><span>Note that, since Faust 2.3, the function doesn't alterate the factor format. If the Faust object contains a sparse factor then you'll receive a sparse matrix.</span></div><div  class = 'S0'><span>Since Faust 2.3 again, it's possible to retrieve a sub-sequence of Faust factors.</span></div><div  class = 'S0'><span>Go straight to the example, extracting factors from F:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>factors(F, 3:4)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="F02A29A9" data-scroll-top="null" data-scroll-left="null" data-testid="output_6" data-width="926" data-height="62" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 6x9, density 1.38889, nnz_sum 75, 2 factor(s): 
-- FACTOR 0 (real) SPARSE, size 6x9, density 0.555556, nnz 30
-- FACTOR 1 (real) SPARSE, size 9x9, density 0.555556, nnz 45</div></div></div></div></div></div><div  class = 'S8'><span>Hmm... something is different from the previous example. We indeed received a Faust as return type, great! You've just learned another way to create a Faust from another, additionally to what you've seen in the first </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/Faust_manipulation.html"><span>livescript</span></a><span>.</span></div><div  class = 'S0'><span>Without this function, you'd surely have written something similar to:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>import </span><span style="color: rgb(160, 32, 240);">matfaust.Faust</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>Faust({factors(F, 3), factors(F, 4)})</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="5F503923" data-scroll-top="null" data-scroll-left="null" data-testid="output_7" data-width="926" data-height="62" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 6x9, density 1.38889, nnz_sum 75, 2 factor(s): 
-- FACTOR 0 (real) SPARSE, size 6x9, density 0.555556, nnz 30
-- FACTOR 1 (real) SPARSE, size 9x9, density 0.555556, nnz 45</div></div></div></div></div></div><div  class = 'S8'><span>OK, that's not awful but I let you imagine how much complicated it is with more factors.</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2'><span>1.3 Plotting a Faust</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>Available soon!</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2'><span>1.4 About Sparsity!</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>Three functions of the Faust class are here to evaluate the sparsity of a Faust object.</span></div><div  class = 'S0'><span>Let's call the first one:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>nnz_sum(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 185</div></div></div></div><div  class = 'S8'><span>I'm sure you guessed exactly what the function returns, if you doubt it, here is the doc: </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a7dc7f3cb86b02b3c2cd725387c34300d"><span>Faust.nnz_sum()</span></a><span>. The smaller </span><span style=' font-family: monospace;'>nnz_sum</span><span>, the sparser the Faust.</span></div><div  class = 'S0'><span>Next comes the function: </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#ac33ff53bbff16f93666acec05031511b"><span>Faust.density()</span></a><span>.</span></div><div  class = 'S0'><span>This function along with its reciprocal </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#aff3261319b63c49d51a699726edc74bc"><span>Faust.rcg()</span></a><span> can give you a big hint on how much your Faust is potentially optimized both for storage and calculation. The sparser the Faust, the larger the Relative Complexity Gain (RCG)!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>density(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 3.7000</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>rcg(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.2703</div></div></div></div><div  class = 'S8'><span>According to its RCG, this Faust doesn't seem to be of any help for optimization but look at the graphic the next script generates:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>nfactors = 3;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>startd = 0.01;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>endd = 1;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>dim_sz = 1000;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>ntests = 10;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>sizes = zeros(ntests, 1);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>rcs = zeros(ntests, 1);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>densities = linspace(startd, endd, ntests);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">for </span><span>i=1:ntests</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   d = densities(i);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   F = matfaust.rand(dim_sz, dim_sz, </span><span style="color: rgb(160, 32, 240);">'num_factors'</span><span>, nfactors, </span><span style="color: rgb(160, 32, 240);">'density'</span><span>, d, </span><span style="color: rgb(160, 32, 240);">'fac_type'</span><span>, </span><span style="color: rgb(160, 32, 240);">'sparse'</span><span>);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   sizes(i) = nbytes(F);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   rcs(i) = density(F);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>plot(rcs, sizes)</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>legend(</span><span style="color: rgb(160, 32, 240);">'size'</span><span>)</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>xlabel(</span><span style="color: rgb(160, 32, 240);">'Density'</span><span>)</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>ylabel(</span><span style="color: rgb(160, 32, 240);">'Faust Size (bytes)'</span><span>)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="234B7E16" data-scroll-top="null" data-scroll-left="null" data-testid="output_11" style="width: 956px;"><div class="figureElement"><div class="figureContainingNode" style="width: 560px; max-width: 100%; display: inline-block;"><div class="GraphicsView" data-dojo-attach-point="graphicsViewNode,backgroundColorNode" id="uniqName_197_0" widgetid="uniqName_197_0" style="width: 100%; height: auto;"><img class="ImageView figureImage" data-dojo-attach-point="imageViewNode" draggable="false" ondragstart="return false;" id="uniqName_197_2" widgetid="uniqName_197_2" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAYAAAAv7h+nAAAgAElEQVR4AezBD3zfBWHn/1c+tW3GY5LMzeiw36yDC2/dco+ctmwk3V1cRaSij8hJogUNYAHB6yM9UkCGtEg7fZyyfrfmwQmbMLxwjxUTTom4Q71bNcwkCC0uDzO3t+F81KRDDP+SutEUbPv79e7BHXOi/G3zTd7PZ3E4IiIiosIURERERFSYgoiIiIgKUxARERFRYQoiIiIiKkxBRERERIUpiIiIiKgwBREREREVpiAiIiKiwhREREREVJiCiIiIiApTEBEREVFhCiIiIiIqTEFEREREhSmIiIiIqDAFERERERWmICIiIqLCFMRR95d/+Zds3bqVrVu3snXrVvbv309EREQ8fwVx1P27f/fvuOSSS+js7GRmZobq6moiIiLi+SuIo+7Vr341r33ta7n99tvp6uqiqqqKiIiIeP4K4pgYHx/nJz/5CfX19URERMQLUxAvm8HBQf7oj/6IZ/vUpz5FR0cH73//+/mbv/kbnnHHHXfwnve8h4iIiHjhCuIlm5mZ4eqrr+ayyy7jqaee4hnf+ta3+Lu/+ztuv/12rr32Wq699lqe8Xd/93e88Y1vJCIiIl64gnhedu3axejoKM/42te+xuTkJEccd9xxnHvuuVx22WU823333ceaNWsoioI3velNPPXUU+zbt48jent7WbRoEREREfHCFcTzsnLlSn74wx8yOjrK1772NV73utdRKpU4YvHixfz2b/829fX1PNvMzAy1tbU841d+5VfYt28fERER8dIUxPN2xhlnsHPnTh577DGampr4RZYsWcKBAwd4xuzsLEuWLCEiIiJemoJ43r7yla+wevVqXvva1zI6Osov8sY3vpH77ruPIx577DGeeOIJfu3Xfo2IiIh4aQrieXnggQf49V//dZqamjjttNN45JFHmJyc5OdZs2YNP/rRj+js7OQDH/gAl19+OUVREBERES9NQXDw4EHWrl2LbZ7LW97yFpqamnjGaaedRqlU4tlaW1u5+uqrecbixYv57Gc/y2c+8xm+/OUvc+aZZxIREREvXUHwn//zf2bfvn0cOnSIV8Iv//Ivs2jRIiIiIuLlUbDAPfDAAzz11FP8m3/zb4iIiIjKULCA/dM//RM333wzXV1d/Dytra1IQhKSkIQkJCEJSUhCEpKQ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kdbWVu6++25OOeUUNm3axBE33ngj7373u/nLv/xLfu/3fo/e3l4CCiIiIhaQvs5GDm9bzeFtqzm8bTWHt63m8LbVHN62msPbVnN422oOb1vN4W2rObxtNYe3rebwttUc3raaw9tWc3jbag5vW83hbas5vG01h7et5vC21RzetprD21ZzeNtqDm9bzeFtqzm8bTWHt63m8LbV9HU28oyuri6+9KUv0dzczMzMDIcPH+YZX/rSl/jHf/xH1q5dyxF/8zd/ww033MCaNWvo6+vjkUceIaAgIiIijqp7772XP/uzP+Oee+7hnnvu4bvf/S5H/OhHP+Kmm27i+uuv5xknnngiH/vYx7j77rvZtm0bb3/72wkoiIiIiKNqyZIlnHXWWaxfv57Fixdz0kknccRtt93Gvn37WLt2LWeffTaPPPIIH/nIR9i2bRsXXHABmzdv5uSTTyagICIiIo6q97znPfzVX/0Vf/qnf8p//+//nerqai644AK++93v8s1vfpM77riDO+64g9e+9rW87nWv46tf/Sq33norAwMD1NTUEFAQERERUWEKIiIiIipMQURExDz2+te/HklIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJPH617+ehaggIiJiHhscHMQ2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9sMDg6yEBVEREREVJiCiIiIiApTEBEREVFhCiIiIiIqTEFEREREhSmIiIiIqDAFERERERWmICIiIqLCFERERERUmIKIiIiIClMQERER81L/6BTff9snmZyeZb4piIiIiHmno3eM7oFxSkOfplRbzXxTEBEREfPGyJ4ZSluGWFazlMnNq1g8O818VBARERHzQvfAOB29Y5TbGii3NTCfFURERERFm5yepblnF3tnDjDctYL2pjrmu4KIiIioWP2jU9RvHaa9qY6+zkZKtdUsBAXz2MGDB7n66qt53/vex/ve9z5s89MuvPBC1q5dy9q1a7n++uuJiIioBJPTs3T0jtE9MM7Epha6W+tZSArmsa9+9assWbKEz3/+85x//vn8yZ/8Cc+2f/9+Dh48yI4dO9ixYwdXXHEFERERc93InhlaenazrGYpk5tXUaqtZqEpmMde//rXc/7553PE8ccfz3HHHcezfe973+OEE05gYGCAwcFBDh06xHORhCQksWHDBiIiIo6F7oFxOnrHKLc1UG5r4Kdt2LABSUhCEvNVwTz2lre8heXLl/OpT32KK6+8knPPPZdne+ihh3jsscdYsmQJX//617nyyit5LraxjW22b99ORETE0TQ5PUtzzy72zhxguGsF7U11/Czbt2/HNraxzXxVMI/t27ePgwcP8tGPfpS77rqLq666ioMHD/KMNWvWcNNNN7FmzRo+/vGP8+1vf5sDBw4QERExl/SPTlG/dZj2pjr6Ohsp1Vaz0BXMY+VymTvvvJMjjjvuOJ5++mkOHTrEwYMHefzxx7n55pvZuXMnR/z4xz/m0KFDLF68mIiIiLlgcnqWjt4xugfGmdjUQndrPfF/FMxjF110Ebfddhvr1q3jnHPOYf369SxevJjvf//7nH766bzzne/kxhtvZP369VxwwQVs2rSJoiiIiIg41kb2zNDSs5tlNUuZ3LyKUm018f8UzGNveMMbuPPOO7nlllv4whe+wHvf+16OaGhoYNeuXZxwwgn09/dzww03cMcdd7B69WoiIiKOte6BcTp6x+jrbKTc1kD8SwURERExJ0xOz1LaMsTemQMMd62geXkN8bMVRERExDFXHpygfusw5bYG+jobKdVWE8+tICIiIo6ZyelZOnrH6B+dYmJTC+1NdcQvVhARERHHRP/oFC09u1lWs5SRrpWUaquJ56cgIiIijrrugXG6B8bp62yk3NZAvDAFERERcdRMTs9S2jLE3pkDDHetoHl5DfHCFURERMRRUR6coH7rMOW2Bvo6GynVVhMvTkFERES8oianZ+noHaN/dIqJTS20N9URL01BREREvGL6R6do6dnNspqljHStpFRbTbx0BREREfGK6B4Yp3tgnL7ORsptDcTLpyAiIiJeVpPTs5S2DLF35gCTm1fRvLyGeHkVRERExMumPDhBS89uym0N9HU2Eq+MgoiIiHjJJqdnae7ZRf/oFMNdK2hvqiNeOQURERHxkvSPTtHSs5v2pjpGulZSqq0mXlkFERER8aJ19I7RPTBOX2cj3a31xNFREBERES/YyJ4ZSluGOGJy8yqal9cQR09BREREvCDlwQk6escotzXQ19lIHH0FERER8bxMTs/S3LOL/tEphrtW0N5URxwbBREREfEL9Y9O0dKzm/amOka6VlKqrSaOnYKIiIj4uTp6x+geGKevs5Hu1nri2CuIiIiIn2lkzwylLUMsq1nK5OZVNC+vIeaGgoiIiPgXyoMTdPSOUW5roNzWQMwtBREREfF/TU7P0tyzi3t/sI/hrhW0N9URc09BRERE/G/9o1PUbx2mvamOvs5GSrXVxNxUEBERscBNTs/S0TtG98A4E5ta6G6tJ+a2goiIiAVsZM8MLT27WVazlMnNqyjVVhNzX0FERMQC1T0wTkfvGOW2BsptDUTlKIiIiFhgJqdnae7Zxd6ZAwx3raC9qY6oLAURERELSP/oFPVbh2lvqqOvs5FSbTVReQoiIiIWgMnpWTp6x+geGGdiUwvdrfVE5SqIiIiY50b2zNDSs5tlNUuZ3LyKUm01UdkKIiIi5rHugXE6escotzVQbmsg5oeCiIiIeWhyepbmnl3snTnAcNcK2pvqiPmjICIiYp4pD05Qv3WY7tZ6+jobKdVWE/NLQURExDwxOT1LR+8Y/aNTTGxqob2pjpifChawgwcPcvXVV/O+972P973vfdgmIiIqU//oFC09u1lWs5SRrpWUaquJ+atgAfvqV7/KkiVL+PznP8/555/Pn/zJnxAREZWne2Cc7oFx+jobKbc1EPNfwQL2+te/nvPPP58jjj/+eI477jieiyQkIYkNGzYQERHH3uT0LKUtQ+ydOcBw1wqal9ew0G3YsAFJSEIS81XBAvaWt7yF5cuX86lPfYorr7ySc889l+diG9vYZvv27URExLFVHpygfusw5bYG+jobKdVWE7B9+3ZsYxvbzFcFC9i+ffs4ePAgH/3oR7nrrru46qqrOHjwIBERMXdNTs/S0TtG/+gUE5taaG+qIxaeggWsXC5z5513csRxxx3H008/zaFDh4iIiLmpf3SKlp7dLKtZykjXSkq11cTCVLCAXXTRRdx2222sW7eOc845h/Xr17N48WIiImLu6R4Yp3tgnL7ORsptDcTCVrCAveENb+DOO+/klltu4Qtf+ALvfe97iYiIuWVyepbSliH2zhxguGsFzctriCiIiIiYo8qDE7T07Kbc1kBfZyOl2moijiiIiIiYYyanZ+noHaN/dIrhrhW0N9UR8WwFERERc0j/6BQtPbs59TeOZ6RrJaXaaiJ+WkFERMQc0dE7RvfAOH2djXS31hPxXAoiIiKOsZE9M5S2DHHE5OZVNC+vIeLnKYiIiDiGyoMTdPSOUW5roK+zkYjnoyAiIuIYmJyepblnF/2jUwx3raC9qY6I56sgIiLiKOsfnaKlZzftTXWMdK2kVFtNxAtREBERcRR19I7RPTBOX2cj3a31RLwYBREREUfByJ4ZSluGOGJy8yqal9cQ8WIVREREvMLKgxN09I5Rbmugr7ORiJeqICIi4hUyOT1Lc88u+kenGO5aQXtTHREvh4KIiIhXQP/oFC09u2lvqmOkayWl2moiXi4FERERL6PJ6Vk6esfoHhhnuGsF3a31RLzcCiIiIl4mI3tmaOnZzbKapUxuXkWptpqIV0JBRETEy6B7YJyO3jHKbQ2U2xqIeCUVREREvAST07M09+xi78wBhrtW0N5UR8QrrSAiIuJF6h+don7rMO1NdfR1NlKqrSbiaCiIiIh4gSanZ+noHaN7YJyJTS10t9YTcTQVREREvAAje2Zo6dnNspqlTG5eRam2moijrSAiIuJ56h4Yp6N3jHJbA+W2BiKOlYKIiIhfYHJ6luaeXeydOcBw1wram+qIOJYKIiIifo7+0Snqtw7T3lRHX2cjpdpqIo61goiIiJ9hcnqWjt4xyoMTTGxqobu1noi5oiAiIuKnjOyZoaVnN8tqljLStZJSbTURc0lBRETEs3QPjNPRO0ZfZyPltgYi5qKCiIiI/9/k9CylLUPsnTnAcNcKmpfXEDFXFURExIJXHpygfusw5bYG+jobKdVWEzGXFURExII1OT1LR+8Y/aNTTGxqob2pjohKUBAREQtS/+gULT27WVazlJGulZRqq4moFAUREbHgdA+M0z0wTl9nI+W2BiIqTUFERCwYk9OzlLYMsXfmAMNdK2heXkNEJSqIiIgFoTw4Qf3WYcptDfR1NlKqrSaiUhVERMS8Njk9S0fvGP2jU0xsaqG9qY6ISlcQERHzVv/oFC09u1lWs5SRrpWUaquJmA8K5rGDBw9y3XXXsXbtWs455xy+853v8NMuvPBC1q5dy9q1a7n++uuJiJgvugfG6R4Yp6+zkXJbAxHzScE8dvfdd/Pkk0+yY8cOPvrRj3LdddfxbPv37+fgwYPs2LGDHTt2cMUVVxARUelG9sxQ2jLE3pkDTG5eRfPyGiLmm4IK84Mf/IBvfvObjIyM8Mgjj/CLnHPOORxx8skn88QTT/Bs3/ve9zjhhBMYGBhgcHCQQ4cO8VwkIQlJbNiwgYiIuag8OEFH7xjltgb6OhuJhWfDhg1IQhKSmK8KKsDs7Cy33HILZ5xxBhdeeCE333wzt956K+eddx6///u/z2c+8xn279/PT3vXu95FU1MT+/fv55prrqGzs5Nne+ihh3jsscdYsmQJX//617nyyit5LraxjW22b99ORMRcMjk9S3PPLvpHpxjuWkF7Ux2xMG3fvh3b2MY281XBHPf0009zySWXUF1dzRe/+EX+x//4H3zuc5/jxhtv5HOf+xz/83/+T0qlEhs2bOBHP/oRP+2ee+7hoosuYs2aNZx33nk825o1a7jppptYs2YNH//4x/n2t7/NgQMHiIioJP2jU7T07Ka9qY6RrpWUaquJmO8K5rhXvepV3HrrrZx77rns2bOHc845h0OHDvH+97+ftrY2tmzZwrvf/W7+7M/+jNe+9rU827333svtt9/OZz/7WU477TSecfDgQR5//HFuvvlmdu7cyRE//vGPOXToEIsXLyYiolJ09I7RPTBOX2cj3a31RCwUBXNcVVUVVVVVHNHT08PFF1/M6Ogoxx13HMPDw3znO99h//79HFEUBc/W19fH5OQkF198MR/84Afp7u7miO9///ucfvrpvPOd7+TGG29k/fr1XHDBBWzatImiKIiImOtG9sxQ2jLEEZObV9G8vIaIhaSggjzyyCOceuqp3HfffbztbW+jqqqK448/nieffJKfpVwuc9ddd3Hbbbdx2223US6XOaKhoYFdu3Zxwgkn0N/fzw033MAdd9zB6tWriYiY68qDE3T0jlFua6Cvs5GIhaiggjQ1NXHdddexY8cO3vrWt/KVr3yFRx55hNe85jVERMx3k9OzNPfson90iuGuFbQ31RGxUBVUkMsvv5yTTz6ZT37yk9TX1/PDH/6QG264gaqqKiIi5rP+0SlaenbT3lTHSNdKSrXVRCxkBRXkl37pl/id3/kdvvnNbzI0NMSb3vQmfuM3foOIiPmso3eM7oFx+job6W6tJyKgoILs3LmTTZs2MTU1xYMPPsgDDzzAlVdeSUTEfDSyZ4bSliGW1SxlcvMqmpfXEBH/R0EFuf322+np6eHUU0+lqqqKj3zkIzz00EPMzs4SETGfdA+M09E7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s5m2xhoiIha6LVu2IAlJSGKxKogPxDa2sc0jjzxCLGwDoxM09x5l1YqlHO5aS211FRERi8EjjzyCbWxjm8WqIKLMdA+O0z04Tn9nAz2t9URExMJTEFEmSpPT1N7/HK9PzTDctYam1SuIiIiFqSBYv349O3bsIBavnqFjNPcepae1nv7OBmqrq4iIiIWrIGIRK01O0943xsDoBMNda2hrrCEiIha+gohFamB0gubeo3z+U8s53LWW2uoqIiJicSiIWITa+8boHhynv7OB7vV1RETE4lIQsYgcfm2K2vufY17pnnU0rV5BREQsPgURi0TP0DHa+8boaa2nv7OBiIhYvAoiFrjS5DRNvSMMjE4w3LWGtsYaIiJicSuIWMAGRido7j1KW2MNh7vWUltdRURELH4FEQtUe98Y3YPj9Hc20L2+joiIKB8FEQvM4demqL3/OeaV7llH0+oVREREeSmIWEB6ho7R3jdGT2s9/Z0NREREeSqIWABKk9M09Y4wMDrBcNca2hpriIiI8lUQcZEbGJ2gufcobY01HO5aS211FRERUd4KIi5Spclp2vvG6B4cZ7hrDd3r64iIiJhXEHEROvzaFM29R1m1Yimle9ZRW11FRETEOQURF5nuwXHa+8boaa2np7WeiIiIdyuIuEiUJqdp6h3h9akZhrvW0NZYQ0RExHspiLgIDIxOULd7mLbGGvo7G6itriIiIuL9FER8gkqT07T3jdE9OM6xnc10r68jIiLiFymI+IQcfm2K5t6jrFqxlNI966itriIiIuKDKIj4BHQPjtPeN0ZPaz09rfVERET8MgoiPkalyWmaekd4fWqG4a41tDXWEBER8csqiPiYDIxOULd7mLbGGvo7G6itriIiIuLDKIi4wEqT07T3jdEzdIxjO5vpXl9HRETER1EQcQENjE7Q3HuUVSuWcrhrLbXVVURERHxUBREXSPfgON2D4/R3NtDTWk9ERMT5UhBxnpUmp6m9/zlen5phuGsNTatXEBERcT4VRJxHPUPHqNs9TE9rPf2dDdRWVxEREXG+FUScB6XJadr7xhgYneDYzmbaGmuIiIi4UAoiPqKB0Qmae4+yasVSDnetpba6ioiIiAupIOIj6B4cp3twnP7OBnpa64mIiPg4FER8CKXJaWrvf47Xp2YY7lpD0+oVREREfFwKIn5JPUPHqNs9TE9rPf2d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6NAhtm/fTjm74YYbaGxs5MyZM9x99910dnZS7m644QYaGxs5c+YMd999N52dnbzTG2+8wfHjx6msrOTQoUNs376dcva5z32O1atX8+CDD7J9+3ZuuukmFpOCeE+VlZXMzMxwzvT0NJWVlZSryspKZmZmOGd6eprKykrOaWlp4fHHH6elpYV7772XF198kZmZGSI+qJaWFh5//HFaWlq49957efHFF5mZmaGc/fCHP+T222+npaWFb37zmwT88Ic/5Pbbb6elpYVvfvObvFNLSwuPP/44LS0t3Hvvvbz44ovMzMxQrk6dOsXs7Cx33XUXTz31FH/6p3/K7Owsi0VBvKerrrqKI0eOMO/48eOcPHmSyy+/nHJ11VVXceTIEeYdP36ckydPcvnllzM7O8uJEyfYu3cvBw8eZN7p06eZm5ujoqKCiF9kdnaWEydOsHfvXg4ePMi806dPMzc3R0VFBeXq+eefZ//+/ezZs4cvfelLBDz//PPs37+fPXv28KUvfYlzZmdnOXHiBHv37uXgwYPMO336NHNzc1RUVFCuenp6ePLJJ5m3bNky3n77bebm5lgsCuI9tbS08Oabb9LZ2cnNN9/MnXfeSVEUlKuWlhbefPNNOjs7ufnmm7nzzjspioJXX32VjRs3cv311/PYY49xxx13cOutt7Jz506KoiDiF3n11VfZuHEj119/PY899hh33HEHt956Kzt37qQoCspVf38/pVKJb33rW3zjG9+gu7ubctff30+pVOJb3/oW3/jGN+ju7mbeq6++ysaNG7n++ut57LHHuOOOO7j11lvZuXMnRVFQrm6//XaeeOIJ/vAP/5DNmzdzxx13UFFRwWJREO+poqKCPXv28Oijj/L000+zadMmyllFRQV79uzh0Ucf5emnn2bTpk3Mq6+vZ2RkhJUrVzIwMMADDzzAwMAAGzZsIH5m/fr17Nixg/iZ9evXs2PHDs6pr69nZGSElStXMjAwwAMPPMDAwAAbNmygnPX09PDUU0/xxBNP8MQTT9DT00O56+np4amnnuKJJ57giSeeoKenh3n19fWMjIywcuVKBgYGeOCBBxgYGGDDhg2Us9/6rd/iySef5K/+6q8YGBjga1/7GotJQfxcl156KZdccgnxM5deeimXXHIJ72f58uUsWbKEiA9r+fLlLFmyhIgPa/ny5SxZsoT4meXLl3PJJZew2BRERERELDAFEREREQtMQURERMQCUxARERGxwBRERERELDAFEREf0o9//GOuvvpqvvCFL7Bhwwauu+46/uIv/oJTp05xvoyMjPDtb3+beX/9139NRMS8goiIj+DXfu3XOHToEAcPHuR73/seS5Ys4U/+5E84Xz7zmc+we/du5vX19RERMa8gIuI8Wbp0Kdu3b2dsbIwf//jHDAwMcMMNN7Bp0yb27t3LvBdeeIEHHniAb3/721x77bXcdtttzMzM8D//8z90dnayceNGvvzlL/ODH/yAea+88gq9vb3ceOONvPXWW2zcuJH//M//5M477+TIkSOc82d/9meMjo4SEeWhICLiPPqVX/kVrrzySmzzz//8zwwMDPBP//RPDA0N8fzzz3PmzBmefPJJdu7cyfe//31++tOf8oMf/IAnn3wSSTz77LP09vbS39/PvJmZGf77v/+b/fv3c+mll/Lss8/ym7/5mzQ1NfHkk08y76233mJkZITPfOYzRER5KIiIOM/efvttRkZGuPTSS/n7v/97/u7v/o5LL72UgwcPMu/zn/88K1eu5JJLLqGxsZETJ06wZs0a/vVf/5U///M/p1Qq8Z3vfIefp6WlheHhYd5++20OHjxIS0sLRVEQEeWhICLiPPrf//1f/uM//oPly5dTXV1NTU0NNTU1/O7v/i7XXXcd85YuXcq7ffazn+V73/sev/3bv813v/tdvvKVr/DTn/6U97Ns2TLWrVvHv//7v3PgwAF+//d/n4goHwUREefJW2+9xa5du9iwYQMNDQ2cPn2ar3zlK3z1q1+lVCoxMzPD+9m7dy/PP/88X/3qV3n00Uc5efIkJ06c4J2WLFnC3Nwc5/zBH/wB/f39nD59miuvvJKIKB8FEREfwYkTJ/jCF77AF7/4RTo6OviN3/gNdu/ezbXXXsuqVav4vd/7PTZv3kypVKKpqYn388UvfpFHH32UW265ha997Wtcd9111NTU8E6f+9zn+PKXv8x//dd/Me+zn/0sx44dY9OmTUREeSmIiPiQPvWpT/Hyyy9z6NAhvv/97/PUU0+xbds2li5dyry7776bf/mXf+Fv//Zvefjhh1myZAnXXnstDz30EOds3bqVjo4OrrzySp5++mn+8i//kn/4h3/g3nvvZd7atWt57LHHmPf444/z7LPPcsUVVzBvbm6Ooii4/vrriYjyUhARcQFVVFRQVVXFB7FkyRJ+/dd/nV/91V/lF3nxxRf5oz/6I37nd36H5cuXExHlpSAiYgG68sor+eM//mO2bdtGRJSfgoiIBai6uprGxkaWLFlCRJSfgoiIiIgFpiAiIiJigSmIiIiIWGAKIiIiIhaYgoiIiIgFpiAiIiJigSmIiIiIWGAKIiIiIhaYgoiIiIgFpiAiIiJigSmIiIiIWGAKIiIiIhaYgoiIiIgF5v8A4tt04blIwEIAAAAASUVORK5CYII=" style="width: 100%; height: auto;"></div></div></div></div></div></div></div><div  class = 'S8'><span>Isn't it obvious now that the smaller the density the better?! Indeed, for two Faust objects of the same shape and the same number of factors, a smaller density (linearly) implies a smaller file size for storage. This point applies also to the memory (RAM) space to work on a Faust.</span></div><div  class = 'S0'><span>We'll see later how the computation can benefit of a bigger RCG (or smaller density). But let's point out right now that the sparsity is often a tradeoff with accuracy, as the following plot shows about the truncated SVD of a matrix </span><span style="vertical-align:-5px"><img src="data:image/png;base64,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" width="85" height="19" /></span><span>. Note beforehand that the SVD of M (truncated or not) can be seen as a Faust which approximates M.</span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><img src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAABILUlEQVR42u2dCXgV5dm/i2EVBFGw4EJitUDUfgha1KpBXEDcxX5qtUi1oqBAUKriUsF+4FpF60e1Iu4iVYl1LWpVoLJpBVzKvi/ijp8bi+Lz7+9t3/znTGbOkgRykrnv65oryck5c2Z55n3uebf5gQEAAABAovgBhwAAAAAAAQQAAAAABBAAAAAAEEAAAAAAQAABAAAAAAEEAAAAAAQQAAAAABBAAAAAAEAAAQAAAAABBAAAAAAEEAAAAAAQQAAAAABAAAEAAAAAAQQAAABAAO+//377wQ9+UL4UFBRYmzZt7IwzzrBFixZV+guGDx/u1lcZnn/+eff5KAoLC61v377b/IB169Yt5TgFF21TUgnHT6NGjeyHP/yhHXHEEXb99dfbhx9+mD9B/6/tC8bVP//5T/f38uXLa2ybJkyYYPvss481btzYbd+cOXMiYz4u9oKLzkVt54477rCHH3642te7YcMGd4xuuOGGjO9VPFxwwQW29957u/PSsmVL+8lPfuJee//99917iouLbc8997Tvv/8+dj1dunSxtm3b2nfffWfz589POVf169e3nXfe2bp27WqXXnqp+3918te//tU6d+5s22+/vfs+/V3bOOigg6xnz55k6yx58MEH7c4778zpMz4uH3vssWqLOx/jces85JBD3P87dOiQ9XoPPfRQKy0trbDdUctTTz2V8tnXXnvNzjvvPHc9NGzY0L1n3bp1Fb5j3rx5NmTIENt///2tefPm7vo87LDDKqwvF6644orIbWzRokWF995888128sknW7t27dx74mL/z3/+s51++umu/FH5VFRUZH369LGlS5emvG/jxo22++6721133ZVZAPVzxowZ7mCNHDnSmjRpYrvssot99tln21wAL7744tjPzp4925YsWVIjAvijH/3IHaPwom1KugD6+Jk6dao9+eST7kJSkO+000728ssv58W2avtWr15d/vcTTzzhtl0xXxN89NFH1qBBAzvxxBNt8uTJbvu+/vrryJgPxtuvf/1rt92TJk1KeV3rq+3stddeWyXpZyuAy5Ytc8LXsWNH+9Of/mSvvvqqlZWV2f/8z/84CdRxFrfccotb3yuvvBK5nrffftv9f9iwYSkJa+jQoW4d06ZNs2effdauu+46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7if7xT6xT+wT54p9Yp8AAQQAAAAABBAAAAAAEEAAAAAAQAABAAAAEEDYhowZM8aKioqsUaNG1qVLF5s6dWra9z/55JNWXFxsDRs2dD/LyspS/v/999+7Drht27a1xo0bW7du3ey9997L232655577LDDDrMdd9zRLUcddZTNmjUr5T19+/atMCP8QQcdlLf7dP/990fOYr9hw4Yqnfua3i/FUtR+HXfccXlzrqZMmWInnHCCi39991NPPZXxM5MnT3b7rmOw55572l133VXl67Qm92nixIl29NFHW6tWrWyHHXawgw8+2CZNmpTyHpUR4fP0wx/+MG/36bXXXouMvfnz5+dUPubTPkVdK1r22WefvDlP119/vR144IHWrFkza926tZ188sm2YMGCjJ+rDXkKEMAaZcKECdagQQMbO3aszZs3z0pLS61p06a2cuXKyPdPnz7dCgoK3EWpgk8/69evbzNnzix/z4033ugKfSWBd99918444wx3kX3xxRd5uU9nnXWWS65z5sxx+3TuuedaixYtbM2aNSkF5bHHHmvr1q0rXz799NO8PU8SwObNm6dsr5aqrDMf9kvHPLg/KrAVj9rffDlXL7zwgl199dUu/rNJwsuWLbPtt9/e7buOgY6FjokSWL6cq1z3Sdt300032RtvvGGLFi2yK6+80m3/7NmzU8Ri3333TTlPH330Ud6eJy+ACxcuTNnm7777LqfyMZ/2SU+3CO6LnnSx0047uXOTL+epZ8+e7vrWtT537lw7/vjjrV27dvbVV1/FfqY25ClAAGucrl27Wv/+/VNe69ixow0bNizy/aeffrpLruEL9Mwzzyy/q2rTpo27uDwaii+huvvuu/Nyn8KoQFfB8OCDD6ZIhe48a8t5UoGpY741j1M+nKvRo0e7cxVMBjV9rlIKtiyS8OWXX+72OciFF17oas3y6Vzlsk9RqFbpuuuuSxGLTp061Zrz5AVw/fr1se/JVD7m+3nS++vVq2crVqzIy/MkJJ/aN9V2VvY85EOeAgSwRtm0aZO7SwpXjQ8ePNhKSkoiP7PHHnvYbbfdlvKa/tYdmVi6dKm7OIN3+uKkk06yc845Jy/3KYzuANUk8Oyzz6ZIhQoHNUH8+Mc/tvPPP98+/PDDvD1PEkB9Rudlt912c3fNwXNSHccpH87VfvvtZ/369Ut5rSbPVWWS8OGH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eOGF7veysjK3vq+//poTCQAIIABAdQjgT37yEzv++OPtxhtvtN12280WL15cYfn444/LBVBNxkFGjx7t+gN61JT8+uuv27XXXuvWrdo79e3LRQCfeeYZa9GihX3zzTeuSfr888/nJAIAAggAUB0C6AeB3HffffbSSy+5plf13YsjGwEMohpBSeWtt94auR3HHHOMDRw4MPJzu+66q/uc+hROnz6dkwgACCAAQK4CGDcNzAknnOCESzV3hx12mBO8SZMmORGcNm2aXX311W5QSDYCOHPmTLdevX/lypX2+OOPW8OGDe2FF16IFEANAPnpT3/qvku1jME5CTWwRJ/t2LEjJxAAEEAAgMoIYHAiaDXLaiJo1fwFpUuDOwYNGuRq3xo0aGB77LGHnX322bZq1aqsBHDevHnWs2dPt/5GjRpZ+/bt7c4770zZjqAALly40A4++GBr0qSJ27Zg7ePSpUvda+qbCACAAAIAJAD1I5SsfvDBBxwMAEAAAQDqMpqGRgNPNAn1WWedxQEBAAQQAKCuc//997upZ7p06eL6KwIAIIAAAAAAgAACAAAAAAIIAAAAAAggAAAAACCAAAAAAIAAAgAAAAACCAAAAAAIIAAAAAAggAAAAAAIIAAAAAAggAAAAACAAAIAAAAAAggAAAAACCAAAAAAIIAAAAAAkBf8PwxregtdjfnYAAAAAElFTkSuQmCC" width = "524" height = "425" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S0'><span>Here is the script to reproduce the last figure with pyfaust: </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/test_svd_rc_vs_err.py"><span>test_svd_rc_vs_err.py</span></a></div><div  class = 'S0'><span></span></div><h3  class = 'S2'><span>2. Faust Algebra and other Operations</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>In order to write some nice algorithms using Faust objects, you'll have to use the basic "stable" operations a Faust is capable of. Let's make a tour of them.</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12'><span>2.1 Transpose, conjugate, transconjugate</span></h4><div  class = 'S0'><span></span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a029a3db751ae1282eca2af94ce4101ec"><span>Faust.transpose</span></a><span> or </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a029a3db751ae1282eca2af94ce4101ec"><span>.'</span></a></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#aec9036a3d251fd47038a9a338b91502d"><span>Faust.conj</span></a><span>,</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a66c1abdcbcfe8505457ce69a7b355716"><span>Faust.ctranspose</span></a><span> or </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a66c1abdcbcfe8505457ce69a7b355716"><span>'</span></a></li></ul><div  class = 'S0'><span>You are probably familiar with .' and ' shorthand operators from Matlab. Well, they are also used in the Faust class.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>G = matfaust.rand(10, 15, </span><span style="color: rgb(160, 32, 240);">'dim_sizes'</span><span>, [10,15], </span><span style="color: rgb(160, 32, 240);">'field'</span><span>, </span><span style="color: rgb(160, 32, 240);">'complex'</span><span>)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="7A9EAF2D" data-scroll-top="null" data-scroll-left="null" data-testid="output_12" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">G = </span></div><div>Faust size 10x15, density 2.16667, nnz_sum 325, 5 factor(s): 
-- FACTOR 0 (complex) SPARSE, size 10x14, density 0.357143, nnz 50
-- FACTOR 1 (complex) SPARSE, size 14x13, density 0.384615, nnz 70
-- FACTOR 2 (complex) SPARSE, size 13x13, density 0.384615, nnz 65
-- FACTOR 3 (complex) SPARSE, size 13x15, density 0.333333, nnz 65
-- FACTOR 4 (complex) SPARSE, size 15x15, density 0.333333, nnz 75</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>G.'</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="90D7DC90" data-scroll-top="null" data-scroll-left="null" data-testid="output_13" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 15x10, density 2.16667, nnz_sum 325, 5 factor(s): 
-- FACTOR 0 (complex) SPARSE, size 15x15, density 0.333333, nnz 75
-- FACTOR 1 (complex) SPARSE, size 15x13, density 0.333333, nnz 65
-- FACTOR 2 (complex) SPARSE, size 13x13, density 0.384615, nnz 65
-- FACTOR 3 (complex) SPARSE, size 13x14, density 0.384615, nnz 70
-- FACTOR 4 (complex) SPARSE, size 14x10, density 0.357143, nnz 50</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>conj(G)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="2EE00C35" data-scroll-top="null" data-scroll-left="null" data-testid="output_14" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x15, density 2.16667, nnz_sum 325, 5 factor(s): 
-- FACTOR 0 (complex) SPARSE, size 10x14, density 0.357143, nnz 50
-- FACTOR 1 (complex) SPARSE, size 14x13, density 0.384615, nnz 70
-- FACTOR 2 (complex) SPARSE, size 13x13, density 0.384615, nnz 65
-- FACTOR 3 (complex) SPARSE, size 13x15, density 0.333333, nnz 65
-- FACTOR 4 (complex) SPARSE, size 15x15, density 0.333333, nnz 75</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>G'</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="B3BFA437" data-scroll-top="null" data-scroll-left="null" data-testid="output_15" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 15x10, density 2.16667, nnz_sum 325, 5 factor(s): 
-- FACTOR 0 (complex) SPARSE, size 15x15, density 0.333333, nnz 75
-- FACTOR 1 (complex) SPARSE, size 15x13, density 0.333333, nnz 65
-- FACTOR 2 (complex) SPARSE, size 13x13, density 0.384615, nnz 65
-- FACTOR 3 (complex) SPARSE, size 13x14, density 0.384615, nnz 70
-- FACTOR 4 (complex) SPARSE, size 14x10, density 0.357143, nnz 50</div></div></div></div></div></div><div  class = 'S8'><span>What really matters here is that the results of G.', conj(G) and G' are all Faust objects. Behind the scene, there is just one memory zone allocated to the factors. Strictly speaking they are memory views shared between G, G.' and G'. So don't hesitate to use!</span></div><h4  class = 'S12'><span>2.2 Add, Subtract and Multiply</span></h4><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>s = size(G, 1);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>F = matfaust.rand(s, s);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>G = matfaust.rand(s, s, </span><span style="color: rgb(160, 32, 240);">'field'</span><span>, </span><span style="color: rgb(160, 32, 240);">'complex'</span><span>);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>F+G</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="0840809D" data-scroll-top="null" data-scroll-left="null" data-testid="output_16" data-width="926" data-height="146" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 5.6, nnz_sum 560, 8 factor(s): 
+.S13 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 4px; padding: 6px 45px 4px 13px; line-height: 17.2339992523193px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }
+.S14 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 6px 45px 0px 13px; line-height: 17.2339992523193px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px;  }</style></head><body><div class = rtcContent><div  class = 'S0'></div><h2  class = 'S1'><span>How to Manipulate a Faust</span></h2><div  class = 'S0'><span></span></div><div  class = 'S0'><span>This livescript is intended to gently introduce the operations available to manipulate a Faust object. It comes after the first livescript (available </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/Faust_creation.mlx"><span>here</span></a><span> for download or </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/Faust_creation.html"><span>here</span></a><span> as a web page), so it's assumed you already know how to create a Faust object from one way or another.</span></div><div  class = 'S0'><span>Keep in mind that a full API doc is available </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/namespacematfaust.html"><span>here</span></a><span> every time you need details. In particular the Faust class is documented </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html"><span>here</span></a><span>.</span></div><div  class = 'S0'><span style=' font-weight: bold;'>NOTE</span><span>: the livescript is made to be executed sequentially, otherwise, skipping some cells, you would end up on an import error.</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2'><span>Table of Contents:</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><a href = "#H_E9BF5BFF"><span>1. Getting Basic Information about a Faust Object</span></a></div><div  class = 'S0'><a href = "#H_95BE1343"><span>1.1 Obtaining Dimension and Scalar Type Information</span></a></div><div  class = 'S0'><a href = "#H_0602CE09"><span>1.2 Obtaining Other Faust Specific Information</span></a></div><div  class = 'S0'><a href = "#H_2CF60B15"><span>1.3 Plotting a Faust</span></a></div><div  class = 'S0'><a href = "#H_C5C21250"><span>1.4 About Sparsity!</span></a></div><div  class = 'S0'><span></span></div><div  class = 'S0'><a href = "#H_73387A87"><span>2. Faust Algebra and other Operations</span></a></div><div  class = 'S0'><a href = "#H_5E556DD4"><span>2.1 Transpose, conjugate, transconjugate</span></a></div><div  class = 'S0'><a href = "#H_99DA98B4"><span>2.2 Add, Subtract and Multiply</span></a></div><div  class = 'S0'><a href = "#H_BD8A7C70"><span>2.3 Faust Multiplication by a Vector or a Matrix</span></a></div><div  class = 'S0'><a href = "#H_7AF16EFF"><span>2.4 Faust Norms</span></a></div><div  class = 'S0'><a href = "#H_1070C649"><span>2.5 Faust Normalizations</span></a></div><div  class = 'S0'><a href = "#H_B081D439"><span>2.6 Faust Concatenation</span></a></div><div  class = 'S0'><a href = "#H_EBCC81E9"><span>2.7 Faust Indexing and Slicing</span></a></div><div  class = 'S0'><span></span></div><h3  class = 'S2' id = 'H_E9BF5BFF' ><span>1. Getting Basic Information about a Faust Object</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>First of all, given any object, you might ask yourself if it's a Faust or not (typically when you receive an object in a function, matlab being built on dynamic types, you can't say for sure it's a Faust). </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#ac5d5fbe66ef212a1c7043b78504f87fc"><span>Faust.isFaust()</span></a><span> is the function to verify an object is a Faust. Its use is straighforward as you can see in the documentation. Note by the way, that a more accessible alias is available at the package root </span><span style=' font-family: monospace;'>(matfaust.isFaust</span><span>).</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2' id = 'H_95BE1343' ><span>1.1 Obtaining Dimension and Scalar Type Information</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>Firstly, let's list basic Faust informative methods/attributes you're probably used to for matlab matrices:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a7146c7de95b35efc570a377765edda27"><span>size</span></a><span>,</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#af62f554cd8b491a2c75ee06019f87d8a"><span>numel</span></a><span>,</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a7527e1fda21bc1678646a4b40db28eb6"><span>isreal</span></a><span>.</span></li></ul><div  class = 'S0'><span>To keep it really clear, let's show some examples operated on a random Faust.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F = matfaust.rand(5,10)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="B93E932D" data-testid="output_0" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">F = </span></div><div>Faust size 5x10, density 3.1, nnz_sum 155, 5 factor(s): 
+- FACTOR 0 (real) SPARSE, size 5x8, density 0.625, nnz 25
+- FACTOR 1 (real) SPARSE, size 8x8, density 0.625, nnz 40
+- FACTOR 2 (real) SPARSE, size 8x5, density 1, nnz 40
+- FACTOR 3 (real) SPARSE, size 5x5, density 1, nnz 25
+- FACTOR 4 (real) SPARSE, size 5x10, density 0.5, nnz 25</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>size(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="4491F0F0" data-testid="output_1" data-width="1172" style="width: 1202px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 1172px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">1×2</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:40,&quot;totalColumns&quot;:2,&quot;totalRows&quot;:1,&quot;charsPerColumn&quot;:6}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 82px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">     5    10
+</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>numel(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 50</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>isreal(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="E2251216" data-testid="output_3" data-width="1172" data-height="34" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
+</div></div></div></div></div></div><div  class = 'S8'><span>If the attributes printed out above seem not clear to you, you're probably not a Matlab user. Anyway you'll find all descriptive informations in the FAµST API documentation (see the links above).</span></div><div  class = 'S0'><span>As a complement, you can also refer to the Matlab API documentation:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://www.mathworks.com/help/matlab/ref/size.html"><span>size</span></a></li><li  class = 'S4'><a href = "https://www.mathworks.com/help/matlab/ref/numel.html"><span>numel</span></a></li><li  class = 'S4'><a href = "https://www.mathworks.com/help/matlab/ref/isreal.html"><span>isreal</span></a></li></ul><div  class = 'S0'><span>About size, it's noteworthy that contrary to what Matlab is capable of on an array, you cannot </span><a href = "https://www.mathworks.com/help/matlab/ref/reshape.html"><span>reshape</span></a><span> a Faust.</span></div><h3  class = 'S2'><span></span></h3><h3  class = 'S2' id = 'H_0602CE09' ><span>1.2 Obtaining Other Faust Specific Information</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>As you've seen in this livescript and the first one, when you print a Faust object, several pieces of information appear. Most of them are also available independently with specific functions.</span></div><div  class = 'S0'><span>For instance, if you want information about factors, nothing is more simple than calling directly the next functions:</span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a5e77419460592366457aa60175472e2e"><span>numfactors()</span></a><span> ; which gives you the number of factors (aka layers) a Faust object is composed of.</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a65a84416b4b1fd050654a02232e95d2f"><span>factors()</span></a><span> ; which allows you to copy any of the Faust's factors givens its index.</span></li></ul><div  class = 'S0'><span>Going back to our F object, let's call these functions:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>numfactors(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 5</div></div></div></div><div  class = 'S8'><span>For example, try to copy the third factor:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>f3 = factors(F, 3)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement scrollableOutput" uid="E771A4F9" data-testid="output_5" data-width="1172" data-height="580" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">f3 = </span></div><div>   (1,1)       0.6747
+   (2,1)       0.1861
+   (3,1)       0.3943
+   (4,1)       0.9627
+   (5,1)       0.8914
+   (6,1)       0.9190
+   (7,1)       0.3666
+   (8,1)       0.6478
+   (1,2)       0.9990
+   (2,2)       0.5762
+   (3,2)       0.7183
+   (4,2)       0.9727
+   (5,2)       0.1263
+   (6,2)       0.2359
+   (7,2)       0.6577
+   (8,2)       0.9747
+   (1,3)       0.4491
+   (2,3)       0.2179
+   (3,3)       0.9607
+   (4,3)       0.2979
+   (5,3)       0.6902
+   (6,3)       0.4500
+   (7,3)       0.9129
+   (8,3)       0.2257
+   (1,4)       0.7983
+   (2,4)       0.3299
+   (3,4)       0.3559
+   (4,4)       0.8236
+   (5,4)       0.1541
+   (6,4)       0.4884
+   (7,4)       0.0303
+   (8,4)       0.1343
+   (1,5)       0.5932
+   (2,5)       0.4671
+   (3,5)       0.0055
+   (4,5)       0.0170
+   (5,5)       0.5230
+   (6,5)       0.1512
+   (7,5)       0.9959
+   (8,5)       0.1423
+</div></div></div></div></div></div><div  class = 'S8'><span>Note that, since Faust 2.3, the function doesn't alterate the factor format. If the Faust object contains a sparse factor then you'll receive a sparse matrix.</span></div><div  class = 'S0'><span>Since Faust 2.3 again, it's possible to retrieve a sub-sequence of Faust factors.</span></div><div  class = 'S0'><span>Go straight to the example, extracting factors from F:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>factors(F, 3:4)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="48DD6E63" data-testid="output_6" data-width="1172" data-height="62" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 8x5, density 1.625, nnz_sum 65, 2 factor(s): 
+- FACTOR 0 (real) SPARSE, size 8x5, density 1, nnz 40
+- FACTOR 1 (real) SPARSE, size 5x5, density 1, nnz 25</div></div></div></div></div></div><div  class = 'S8'><span>Hmm... something is different from the previous example. We indeed received a Faust as return type, great! You've just learned another way to create a Faust from another, additionally to what you've seen in the first </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/Faust_manipulation.html"><span>livescript</span></a><span>.</span></div><div  class = 'S0'><span>Without this function, you'd surely have written something similar to:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>import </span><span style="color: rgb(160, 32, 240);">matfaust.Faust</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>Faust({factors(F, 3), factors(F, 4)})</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="57A2B1EB" data-testid="output_7" data-width="1172" data-height="62" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 8x5, density 1.625, nnz_sum 65, 2 factor(s): 
+- FACTOR 0 (real) SPARSE, size 8x5, density 1, nnz 40
+- FACTOR 1 (real) SPARSE, size 5x5, density 1, nnz 25</div></div></div></div></div></div><div  class = 'S8'><span>OK, that's not awful but I let you imagine how much complicated it is with more factors.</span></div><div  class = 'S0'><span></span></div><h3  class = 'S2' id = 'H_2CF60B15' ><span>1.3 Plotting a Faust</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>It's quite useful to print a </span><span style=' font-family: monospace;'>Faust</span><span> as we've seen before, calling disp(F), </span><span style=' font-family: monospace;'>display(F)</span><span> or just </span><span style=' font-family: monospace;'>F</span><span> in an interactive terminal but this is wordy.  How about plotting a Faust in a more graphical fashion ?</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>imagesc(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="84E24A62" data-testid="output_8" style="width: 1202px;"><div class="figureElement" style="cursor: default;"><div class="figureContainingNode" style="width: 560px; max-width: 100%; display: inline-block;"><div class="GraphicsView" data-dojo-attach-point="graphicsViewNode,backgroundColorNode" id="uniqName_197_54" widgetid="uniqName_197_54" style="width: 100%; height: auto;"><img class="ImageView figureImage" data-dojo-attach-point="imageViewNode" draggable="false" ondragstart="return false;" id="uniqName_197_56" widgetid="uniqName_197_56" src="data:image/png;base64,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" style="width: 100%; height: auto;"></div></div></div></div></div></div></div><div  class = 'S8'><span>What do we see above ? On the bottom right is the dense matrix associated to F, obtained with </span><span style=' font-family: monospace;'>full(F)</span><span>. On the top are the indexed factors of F. Note that you can change the default </span><a href = "https://www.mathworks.com/help/matlab/ref/colormap.html"><span style=' text-decoration: underline;'>colormap</span></a><span> in matplotlib parameters.</span></div><div  class = 'S0'><span>Let's look at a last example:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>imagesc(Faust({eye(5,4),eye(4,10)}))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="869DBEED" data-testid="output_9" style="width: 1202px;"><div class="figureElement" style="cursor: default;"><div class="figureContainingNode" style="width: 560px; max-width: 100%; display: inline-block;"><div class="GraphicsView" data-dojo-attach-point="graphicsViewNode,backgroundColorNode" id="uniqName_197_57" widgetid="uniqName_197_57" style="width: 100%; height: auto;"><img class="ImageView figureImage" data-dojo-attach-point="imageViewNode" draggable="false" ondragstart="return false;" id="uniqName_197_59" widgetid="uniqName_197_59" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAYAAAAv7h+nAAAgAElEQVR4AezBD5RedX3v+zdPJpMEfsUqHSJyTluiB0U2gifivSuuEH5158ifaeTklGYFJVmWTqAP+7JcC//cK9YIXJQ4SMHPz2kr4/k1sJCoBQuyuD3MvtlFiYE7phw5+6dBw58eoIIYFNhkMpOZ57l31umsm1L5e1DzlO/r1eoaY4wxxvSYFsYYY4wxPaaFMcYYY0yPaWGMMcYY02NaGGOMMcb0mBbGGGOMMT2mhTHGGGNMj2lhjDHGGNNjWhhjjDHG9JgWxhhjjDE9poUxxhhjTI9pYYwxxhjTY1oYY4wxxvSYFsYYY4wxPaaFMa9B27dvZ2hoiKGhIYaGhhgaGmJoaIihoSGGhoYYGhpiZGSEX6bdu3fTa8qy5IwzzmDlypWsX7+eF7N7927mfOELX+CCCy7gl2379u0MDQ0xNDTE0NAQQ0NDDA0NMTQ0xNDQEENDQ4yMjHAg2L17Ny9m+/btDA0NMTQ0xNDQEENDQwwNDTE0NMTQ0BBDQ0OMjIxgzGtNC2Neg3bt2sXo6Cijo6OMjo4yOjrK6Ogoo6OjjI6OMjo6SlmW/DLs3LmTLMu455576CWPPvoog4ODlGXJIYccwtFHH83z2blzJ1mWcc899zDn9ttv56/+6q/4Zdu1axejo6OMjo4yOjrK6Ogoo6OjjI6OMjo6yujoKGVZ8uu0c+dOsizjnnvu4cXs2rWL0dFRRkdHGR0dZXR0lNHRUUZHRxkdHWV0dJSyLDHmtaaFMa9hW7Zsodvt0u126Xa7dLtdut0u3W6Xm266iV+G8fFxUkr0mh07djA5OcnVV1/N3/zN33DRRRfxfMbHx0kp8eu0ZcsWut0u3W6XbrdLt9ul2+3S7Xa56aab+HUaHx8npcTLsWXLFrrdLt1ul263S7fbpdvt0u12uemmmzDmtaaFMeZlmZqa4qWYnp7mleh0OkxPT/NiOp0Ov8jU1BSvVKfTYXp6ml+k0+kw67DDDuPV0Ol06HQ6vJjp6Wl+Vaampng1TU1NYYz55WhhjHlR119/PSeccAJ9fX0sWLCAvr4+vPfce++97G/Hjh28973vpa+vj/nz53PEEUfw2c9+ljlDQ0Ocf/75zFq9ejVHHXUUc7Zt28aKFSvo7+9n/vz5LF68mI0bNzI1NcWctWvXsn79ev7iL/6ChQsXcvDBB/PVr36VJ554gg996EMsXLiQBQsW0N/fz3vf+17quual2LZtGytWrKC/v5/58+ezePFiNm7cyNTUFLNWr17NunXrmLVu3ToGBgb49re/zS8yNDTE+eefz6zVq1dz1FFHsb+qqjjhhBOYN28e/f39rFixgl27drG/uq5ZuXIlfX19zJ8/n8WLF7Nx40amp6d5tV1//fWccMIJ9PX1sWDBAvr6+vDec++997K/tWvX8ra3vY3nuu666xgYGODb3/42s5544gk+9KEPsXDhQhYsWEB/fz/vfe97qeuaWUNDQ5x//vnMWr16NUcddRTGmJevhTHmBY2MjPDBD36QN73pTVx//fXceOONfOQjH2Hbtm2cfvrpdDodZo2Pj/Oe97yHBx54gL/8y7/kxhtv5OSTT+YTn/gEf/qnf8qss846izPPPJNZGzZs4NOf/jSzbr/9dlasWMEjjzzCyMgIN954I6tWreKSSy7h1FNPZc4zzzzD+Pg4F1xwAatWreKd73wnb33rW1m9ejW33norV1xxBTfffDNf+MIXqOuak046iaZpeCG33347K1as4JFHHmFkZIQbb7yRVatWcckll3Dqqacya8OGDaxbt45Z69at4/LLL2fJkiX8ImeddRZnnnkmszZs2MCnP/1p5uzdu5fTTz+d3/u932PLli18/OMf51vf+hbve9/7mLNjxw6WLVvGrl27GBkZ4Rvf+AZnn302l1xyCX/wB3/Aq2lkZIQPfvCDvOlNb+L666/nxhtv5CMf+Qjbtm3j9NNPp9PpMOeZZ55h9+7dPNfU1BQ//elPmZycZNbq1au59dZbueKKK7j55pv5whe+QF3XnHTSSTRNw1lnncWZZ57JrA0bNvDpT38aY8zL18KY17BNmzYxODjI4OAgg4ODDA4OMjg4yGWXXcacTZs2ceyxx3LbbbexZs0aVq9ezeWXX0673eaRRx5hx44dzPrwhz/MwoULueuuuzjnnHNYvXo1N9xwAyeddBKbNm1ienoa7z0nn3wys0455RTWr1/PrHPPPZeBgQHuuusuNmzYwOrVq7nmmmu45JJL2Lp1K5s3b2bOD37wA/78z/+cv/7rv2bbtm0cffTR3HnnnZxzzjkURcGqVas477zzuOqqqzjmmGP4wQ9+wAs599xzGRgY4K677mLDhg2sXr2aa665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jz3GihUruOWWW9ixYwdf/vKXWbduHYcffjgXXnghr4alS5eyYMECQghs376dqakptm/fzsqVK/nhD3/IrE6nw5yTTjqJmZkZ/vAP/5DbbruNW2+9lVNOOYUf//jHzBkcHGTJkiV84hOf4Etf+hLj4+OUZckHPvAB9u3bx5o1a5jV39/PrNHRUa677jqMMS9fC2PM8zriiCPYsmULe/fuZdmyZSxYsIAVK1Zw7LHHcscddzDr7rvvZtaqVav42te+xq5du3jf+97Hu971Lj772c9y4YUXEkJgzqmnnsrSpUv5+te/zrp165iammL9+vV85Stf4YEHHuD000/n+OOP52Mf+xhr1qzhjjvuYOHChTyfVqvF2NgYxx13HOeeey7vfve7WblyJWVZcvXVV7NmzRpeyPr16/nKV77CAw88wOmnn87xxx/Pxz72MdasWcMdd9zBwoULeblOPfVUli5dyte//nXWrVvH1NQUL9WqVau4+eabeeaZZ3j/+9/Pu971Lv74j/+Yt771rVRVxeLFi3k1HHHEEWzZsoW9e/eybNkyFixYwIoVKzj22GO54447mHX33Xcz54ILLuBP/uRPuP322zn99NP5/d//fQ499FCuuuoq5rRaLcbGxjjuuOM499xzefe7383KlSspy5Krr76aNWvWMOvUU09l6dKlfP3rX2fdunVMTU1hjHl5WhjzGnT22WfT7XZZs2YNL+aMM87g8ccf53vf+x733HMPe/fu5aqrruLEE0+k2+1y6aWXMufMM8/k4Ycf5v777+fOO+9kz549XHHFFbRaLeYceuihfPe732VycpJ9+/bR39/PrLVr1/Lwww9z//33861vfYs9e/awefNmBgYGmHPrrbfy9NNP81xLlixh27ZtTE5OsnXrVu677z6eeOIJLrjgAl6KtWvX8vDDD3P//ffzrW99iz179rB582YGBgaYc8YZZ9DtdjnjjDN4MYceeijf/e53mZycZN++ffT393Prrbfy9NNP81xr1qyh2+1y2mmnMWfVqlU8+OCD/OM//iNbt27lySefZPv27bz97W/nxZx99tl0u13WrFnDiznjjDN4/PHH+d73vsc999zD3r17ueqqqzjxxBPpdrtceumlzGm1WoyMjLBnzx7+7u/+jp/+9Kd87WtfY+3atXS7XfI8Z9aSJUvYtm0bk5OTbN26lfvuu48nnniCCy64gDmHHnoo3/3ud5mcnGTfvn309/fzfM4++2y63S5r1qzBGPP/a2GMeVGtVot3vOMdnHDCCbRaLV7MkiVLeM973kNfXx/Pp7+/n76+Pp5ryZIlLF++nP7+fl6u/v5+vPccffTRvBJLlixh+fLl9Pf382ro7++nr6+PV+qII47Ae8/rX/96fllarRbveMc7OOGEE2i1WryY/v5+VqxYwWGHHcYL6e/vx3vP0UcfzfPp7++nr68PY8zL18IYY4wxpse0MMYYY4zpMS2MMcYYY3pMC2OMMcaYHtPCGGOMMabHtDDGGGOM6TEtjDHGGGN6TAtjjDHGmB7TwhhjjDGmx7QwxhhjjOkxLYwxxhhjekwLY4wxxpge08IYY4wxpse0MMYYY4zpMS2MMcYYY3pMC2OMMcaYHtPCGGOMMabHtDDGGGOM6TEtjDHGGGN6TAtjjDHGmB7TwhhjjDGmx7QwxhhjjOkxLYwxxhhjekwLY4wxxpge08IYY4wxpse0MMYYY4zpMS2MMcYYY3pMC2OMMcaYHtPCGGOMMabHtDDGGGOM6TEtjDHGGGN6TAtjjDHGmB7T4p9IQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSMIYc2CThCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISr0SL/48k7r77z5jpDDPTGWamM8xMZ5iZzjAznWFmOsPMdIaZ6Qwz0xlmpjPMTGeYmc4wM51hZjrDzHSGmekMM9MZZqYzzExnmJnOMDEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIfCnciiSMMQcmSdx9958x0xlmpjPMTGeYmc4wM51hZjrDzHSGmekMM9MZZqYzzExnmJnOMDOdYWY6w8x0hpnpDDPTGWamM8xMZ5iZzjAznWFiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJL4UbkUSL1eLf/KuE6dptydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydweBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcnvkchTHmwPauE6dptydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydotydweBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4XF4HB6Hx+FxeBweh8fhcXgcHofH4ZnPUbwSLYwxxhhjekwLY4wxxpge08IYY4wxpse0MMYYY4zpMS2MMcYYY3pMC2OMMcaYHtPCGGOMMabHtDDGGGOM6TEtjDHGGGN6TAtjjDHGmB7TwhhjjDGmx7T4J9eOnEaeBfIskGeBPAvkWSDPAnkWyLNAngXyLJBngTwL5FkgzwJ5FsizQJ4F8iyQZ4E8C+RZoKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKusAYY15t146cRp4F8iyQZ4E8C+RZIM8CeRbIs0CeBfIskGeBPAvkWSDPAnkWyLNAngXyLJBngTwL5FmgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLjHmtamF+7SQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSMMb0thbm10oSd9/9Z8x0hpnpDDPTGWamM8xMZ5iZzjAznWFmOsPMdIaZ6Qwz0xlmpjPMTGeYmc4wM51hZjrDzHSGmekMM9MZZqYzzExnmBgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGRAyJGBIxJGJIxJCIIRFDIoZEDIkYEjEkYkjEkIghEUMihkQMiRgSMSRiSMSQiCERQyKGxJfCrUjCGNO7Wphfu3edOE27PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PUG7PYHD4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODwOj8Pj8Dg8DlymHWUAABnVSURBVI/D4/A4PA6Pw+PwODwOj8Pj8Dg8Do/D4/A4PA6Pw+PwODzzOQpjTG9rYYwxxhjTY1oYY4wxxvSYFsYYY4wxPaaFMcYYY0yPaWGMMcYY02NaHMBu/y9TGGOMee2a6Uzwk6fv5CdPf5sXsm/mGXY3O5i1b+YZdjc72N9MZy8/35OY9eSzf8/uZpzdzTi7m3F2N+PsbsaZmv45/0OXJ5/9e8yBrcUB6jOX7WHDhgZjjDGvXbseH+XRn9/G03t/yAvZM/UoO398FbP2TD3Kzh9fxf4e/On1dLpTzNr5Y/Hwkzfz2FNbeeyprTz21FYee2ore6d/wv9wEE88vY2nJnZiDlwtDjC7d3cZ+uOGK6+cwBhjzGvbz/bcy+8c9ge85fBzeKX2TD3CMxM/4g2HvJM5v33Yf+LYIz/OsUd+nGOP/DjHHvlxDl14NHN++7A/4P6f/GfMgavFAebiTz/Lbw0cxF9+yWGMMea1677HRpjp7OXhJ/+GH//8dvZMPcIPfnwV+/vh439Js/cBXsijP/u/eOPrfo+XY1H/EbQOWsBTE9/HHJha/JLlWSDPAnkWyLNAngXyLJBngTwL5FkgzwJ5FsizwPeryPg3I5d9pM3uJ15HngXyLJBngTwL5FkgzwJlXVDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1gjDGvpjwL5FkgzwJ5FsizQJ4F8iyQZ4E8C+RZIM8CeRbIs0CeBfIskGeBPAvkWSDPAnkWyLNAngXyLFDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1wIHjL4X/EvNZCjnz9IItf59k30/Bks4P9/ezZ/8rUzFO8kJ8+s51DF72N/T0z8SN2N+PsbsbZ3YzzzN77ea7XHXwMTzyzHXNganHAOYjXmmtHTiPPAnkWyLNAngXyLJBngTwL5FkgzwJ5FsizQJ4F8iyQZ4E8C+RZIM8CeRbIs0CeBfIsUNYFZV1Q1gVlXVDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1Q1gVlXVDWBWVdUNYFZV1Q1gVlXWCMMb8K81oLmdU6aD6tg+bzSuybeZrpzh4OWfBv2d/P9tzLY09t5bGntvLYU1t5ak/iudyC32Fy308xB6YWxhhjzL9Sz07+A62D5gMHsb/fPuw/ceyRH+fYIz/OsUd+nH/zhlU8V+ugfp6d/AfMgamFMeYX2jP1CLubcZ6euA9jzK9fX+sQunTYX6c7xQvp7zuMbneGV6LTnWZh/xsxB6YWxph/4f6f/BXp0U38tPl/2PWT/8z3Hv40ne4+jDG/Pgf3H0G3O8Ozkw8z66mJ7zM98ywv5OD+I+Cgg5jY9xgv1959j7Gg7zDMgamFMeafeXbyIR576v/mhN/+DG994/n8+9/ZxExnDz95+k6MMb8+Bx3Ux795wyr+63//BOMP/m88/OTN/ObBx/HCDuL1B7+DZyZ+xMv11MRO3nDICZgDU4sD1BsOeSf/y5I/x5hftb55v8GxR36M+fN+gzmL5h/B5PRPMcb8av2vb76GNxzyTuYc9VtnsewtkaW/ewXZkf8Hx/2bi3jDIe/kdYvexnv+3XXMet2it/Gef3cdc970m6fw+NPfYs6yt0TecMg7eSFTM0/x7OR/Z+A3lmEOTC2MMf/Mgr7D+M2Dj2POxL7HePLZv+e33IkYY379Djqoj9ZBC3ipXn/I8XS6+9gz9Y+8VD/+2X/ht9/wH4GDMAemFsaY5zU1/ST/7eH/k98+bDWHLPhdjDG96eg3nsdTe2peim53hpnuXo74zf+AOXC1MMb8Qs/svZ+//4f/nSNffyr/9g3/EWNM71o0/40c8Zv/gZfioIPmsWRgHebA1sIY8y/8fM9/o370M7xl8R9z5OtPxxhjzIGlhTHmn9m77yd8/x+v5K1vPJ/DDvn3dLvTdLvTdLszGGOMOTC06FF5FsizQJ4F8iyQZ4E8C+RZIM8CeRbIs0CeBfIskGeBPAvkWSDPAnkWyLNAngXyLJBngTwL5FmgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC9a1b8P0hh///HZmOhOkRz/HnT/6IHf+6IPc+aMP8sATmzHmQJNngTwL5FkgzwJ5FsizQJ4F8iyQZ4E8C+RZIM8CeRbIs0CeBfIskGeBPAvkWSDPAnkWyLNAWReUdUFZF5R1QVkXlHVBWReUdUFZF5R1QVkXlHVBWReUdUFZF5R1QVkXlHVBWReUdUFZF5R1gTGvlhbmX608C+RZIM8CeRbIs0CeBfIskGeBPAvkWSDPAnkWyLNAngXyLJBngTwL5FkgzwJ5FsizQJ4FyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q64EBw1MAHWX70FpYfvYXlR29h+dFbWH70Ft58+B9hjDHmwNDCGGOMMabHtDDGGGOM6TEtjDHGGGN6TAtjjDHGmB7TwhhjjDGmx7QwxhhjjOkxLYwxxhhjekwLY4wxxpge08IYY4wxpse0MMYYY4zpMS2MMcYYY3pMC/Mv5FkgzwJ5FsizQJ4F8iyQZ4E8C+RZIM8CeRbIs0CeBfIskGeBPAvkWSDPAnkWyLNAngWuHTkNY4zpFXkWyLNAngXyLJBngTwL5FkgzwJ5FsizQJ4F8iyQZ4E8C+RZIM8CeRbIs0CeBfIskGeBPAsY82ppYczLlGeBPAvkWSDPAnkWyLNAngXyLJBngTwL5FkgzwJ5FsizQJ4F8iyQZ4E8C+RZIM8CeRbIs0CeBcq6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAvKuqCsC8q6oKwLyrqgrAuMMcb869LCGGOMMabHtDDGGGOM6TEtjDHGGGN6TAtjjDHGmB7TwhhjjDGmx7QwxhhjjOkxLYwxxhhjekwLY4wxxpge08IYY4wxpse0MMYYY4zpMS3+yT4epKGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhoqGioaKhYh8P8nz28SANFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUjI4sYGVnEyMgiRkYWMTKyiJGRRYyMLGJkZBEjI4sYGVnEyMgiRkYWMTKyiJGRRYyMLGJkZBEjI4sYGVnEyMgiRkYWMTKyiJGRRTRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VDRUNFQ0VOzjQX6RfTxIw//bHhzbChZbBxAd8JfDVrYJJhvdCX99LEVNvMyJFSgwDDuQMgJzzuXj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxcPi4fl4/Lx+Xj8nH5uHxc/ot/8J9Y/JPK3/nDmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnN3/mDyv+m8nf+cGZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNm87N++Vm//KxfftYvP+uXn/XLz/rlZ/3ys375Wb/8rF9+1i8/65ef9cvP+uVn/fKzfvlZv/ysX37WLz/rl5/1y5nNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2Zzd/5g8r/pPJ3/nBmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2ZzZnNmc2bzd/6g8u9a/IuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKyv9HRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUXl/6KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyn1gkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWMWSZIkj1kkSZI8ZpEkSfKYRZIkyWP+G/womKXYd6phAAAAAElFTkSuQmCC" style="width: 100%; height: auto;"></div></div></div></div></div></div></div><div  class = 'S8'><span></span></div><h3  class = 'S2' id = 'H_C5C21250' ><span>1.4 About Sparsity!</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>Three functions of the Faust class are here to evaluate the sparsity of a Faust object.</span></div><div  class = 'S0'><span>Let's call the first one:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>nnz_sum(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 155</div></div></div></div><div  class = 'S8'><span>I'm sure you guessed exactly what the function returns, if you doubt it, here is the doc: </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a7dc7f3cb86b02b3c2cd725387c34300d"><span>Faust.nnz_sum()</span></a><span>. The smaller </span><span style=' font-family: monospace;'>nnz_sum</span><span>, the sparser the Faust.</span></div><div  class = 'S0'><span>Next comes the function: </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#ac33ff53bbff16f93666acec05031511b"><span>Faust.density()</span></a><span>.</span></div><div  class = 'S0'><span>This function along with its reciprocal </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#aff3261319b63c49d51a699726edc74bc"><span>Faust.rcg()</span></a><span> can give you a big hint on how much your Faust is potentially optimized both for storage and calculation. The sparser the Faust, the larger the Relative Complexity Gain (RCG)!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>density(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 3.1000</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>rcg(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.3226</div></div></div></div><div  class = 'S8'><span>According to its RCG, this Faust doesn't seem to be of any help for optimization but look at the graphic the next script generates:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>figure()</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>nfactors = 3;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>startd = 0.01;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>endd = 1;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>dim_sz = 1000;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>ntests = 10;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>sizes = zeros(ntests, 1);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>rcs = zeros(ntests, 1);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>densities = linspace(startd, endd, ntests);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">for </span><span>i=1:ntests</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   d = densities(i);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   F = matfaust.rand(dim_sz, dim_sz, </span><span style="color: rgb(160, 32, 240);">'num_factors'</span><span>, nfactors, </span><span style="color: rgb(160, 32, 240);">'density'</span><span>, d, </span><span style="color: rgb(160, 32, 240);">'fac_type'</span><span>, </span><span style="color: rgb(160, 32, 240);">'sparse'</span><span>);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   sizes(i) = nbytes(F);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>   rcs(i) = density(F);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>plot(rcs, sizes)</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>legend(</span><span style="color: rgb(160, 32, 240);">'size'</span><span>)</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>xlabel(</span><span style="color: rgb(160, 32, 240);">'Density'</span><span>)</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>ylabel(</span><span style="color: rgb(160, 32, 240);">'Faust Size (bytes)'</span><span>)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="A93C84D1" data-testid="output_13" style="width: 1202px;"><div class="figureElement"><div class="figureContainingNode" style="width: 560px; max-width: 100%; display: inline-block;"><div class="GraphicsView" data-dojo-attach-point="graphicsViewNode,backgroundColorNode" id="uniqName_197_60" widgetid="uniqName_197_60" style="width: 100%; height: auto;"><img class="ImageView figureImage" data-dojo-attach-point="imageViewNode" draggable="false" ondragstart="return false;" id="uniqName_197_62" widgetid="uniqName_197_62" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAYAAAAv7h+nAAAgAElEQVR4AezBD5TVBZ3//+f5CDlxWhYmzXBOx7lLLWp2rImGnFXjsugtF9sdcksohFFDh3zVbv90G9brrazTP1NfHicyA6J07LhRa3G6NjKYYjmON6kcvCncSx7+ZV1cSrpK8P397m8Pvy8ZKCY4d2bej0fyf0IIIYQQhpmEEEIIIYRhJiGEEEIIYZhJCCGEEEIYZhJCCCGEEIaZhBBCCCGEYSYhhBBCCGGYSQghhBBCGGYSQgghhBCGmYQQQgghhGEmIYQQQghhmEkIIYQQQhhmEkIIIYQQhpmEEEIIIYRhJiHUjXvvvZdLLrmESy65hEsuuYRLLrmEpUuXEkIIIYQ/lxDqxrRp0/jc5z7H5z73Oa666ioef/xxWltbCSGEEMKfSwh1Y+zYsUyYMIEJEybwjW98g/b2dl7/+tcTQgghhD+XEOpOuVwmn89z0UUXEUIIIYS/lBCOqHvuuYdne/zxx+nt7aVYLHIg3/rWt5g3bx5JkhBCCCGEv5QQjpgbb7yRT3ziE+zvjjvu4Pzzzyefz9PZ2cl1113Hs61atYr29nZCCCGEcGAJ4bB78skn+Y//+A++9rWvsb89e/aQzWZZvnw5X/jCF7j99ttZunQp5XKZfR599FFe9apXMWHCBEIIIYRwYAnhkOzdu5fHHnuMZ9uyZQt/+MMf2N+1115LY2Mjn/nMZ9jfj3/8YyZMmMBrX/taahobGznzzDO599572adUKpFKpQghhBDCwSWEQ5IkCT/4wQ9Yt24d+2zZsoUVK1bwile8gv1deeWVfOxjH+PlL385+3vyySc58cQT2d8rXvEKfvWrX7HP2WefzTXXXEMIIYQQDi4hHLIPfehDrFmzhnXr1rFlyxZWrFjB5ZdfzrMlScKB7NmzhyRJ2F+SJOzdu5cQQgghHLqE8IJ86EMfYtWqVdx4441cfvnlvBBHH300e/bsYX979+5lzJgxhBBCCOHQJYQXpFwus3fvXk444QTWrVvHC/GqV72KX/7yl+xvx44dvPnNbyaEEEIIhy4hHLJyucy3vvUturq6eP/73899993HunXrOFRvectbqLn77rupefTRR7nvvvs47bTTCCGEEMKhSxjl1q1bxxNPPMHz2bt3L7fffjtdXV3s09nZydq1a9m5cyeHIkkSvvjFL/KJT3yC+fPnM2fOHD73uc9xzDHHEEIIIYRDlzCKPfbYY7zvfe9j3bp1PJ8kSfjoRz/Ksy1atIjx48dzIG9729u455572N+0adNYu3Yt3d3d9Pf38/a3v50QQgghvDAJo9Tu3bv5yEc+wjHHHMNQGDduHEmSEEIIIYQXLmGUuuaaa/jHf/xH/v7v/57nYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvbjEQJo1B/fz/3338/H/zgB3k+tunv7ycc2ObNm1m5ciXh4FauXMnmzZsJB9bf309/fz/hwDZv3szKlSsJB7dy5Uo2b95MOLD+/n5sM9IkjDI7d+7kyiuv5JprruFQtba2IglJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCRqJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkESNJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkmhtbaW1tRVJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkUSMJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkaiQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpBEa2srI1HCKPP5z3+ek08+mU2bNnH33XdTqVR4+OGHKRaLhBBCCGF4SBhljj32WJ566iluueUWbrnlFjZv3szdd9/NfffdRwghhBCGh4RR5kMf+hBLlixhyZIlLFmyhDe84Q0sWrSIjo4OwgvX1NSEJMLBSaKpqYlwYLNnz2batGmEA2tqakIS4eAk0dTURBhdEkJ4kdrb2wkH197eTji4pqYmWltbCQfX3t5OOLj29nbC6JMwyi1ZsoSZM2cSQgghhOEjIYQQQghhmEkIIYQQQhhmEkIIIYQQhpmEEEIIoc7Yxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYZrRLCCGEEOqIbfr7+wkH19/fj21Gs4QQQgihzrS2tiIJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkWltbGe0SQgghhBCGmYQQQgghhGEmIYQQQghhmEkIIYQQQhhmEkIIIYRwxD3yyCN8+MMfJhweCSGEEEI44vbu3cszzzxDODwSQgghhHBYPfHEE/z3f/83q1at4plnnqFm0qRJvOc976HmV7/6Fb29vfT29tLb20tvby+PPPII+6xdu5bvfve7bNq0iXBgCSGEEEKdy+VL5PIlcvkSuXyJXL5ELl8ily+Ry5fI5Uvk8iVy+RK5fIlcvkQuXyKXL5HLl8jlS+TyJXL5Erl8iVy+RC5fIpcvkcuXyOVL5PIlcvkSuXyJXL5ELl8ily+Ry5fI5Uvk8iVy+RK5fIlcvkQuXyKXL5HLl9jfI488wlvf+lZWr17NrbfeykknncSuXbt48MEHmT17NjX3338/K1asYMWKFaxYsYJzzjmHVatWUTN79mwWL17Mj3/8Y8466yxuu+02wl9KCCGEEMJhc//993Pqqady7bXXsmLFCr70pS/xP//zP+xv3rx5LF++nOXLlzNx4kTe9a538eEPf5hVq1axefNm+vr6uOaaa+jr66Ozs5O9e/cS/lxCCCGEUOeymRTZTIpsJkU2kyKbSZHNpMhmUmQzKbKZFNlMimwmRTaTIptJkc2kyGZSZDMpspkU2UyKbCZFNpMim0mRzaTIZlJkMymymRTZTIpsJkU2kyKbSZHNpMhmUmQzKbKZFNlMimwmRTaTIptJkc2kyGZSZDMp9vf2t7+dRx55hGOPPZb3vve9jBs3jkmTJnEg1157LQ888ABLly6lpre3l23btjF79mxmz56NJHbu3MnmzZsJfy4hhBBCCIfNcccdx+DgID/60Y9405vexPz587n11lt5tu9///tcd911fPe736WhoYGal7/85UyfPp2bbrqJm266iZtuuont27dz3HHHEf5cQgghhBAOm6uvvpp/+7d/441vfCMf/ehHmTFjBuVymf395Cc/4ZJLLuEHP/gBxx57LPu8/e1vZ82aNSRJwitf+UrK5TKnnHIKSZIQ/lxCCCGEEA6bSy+9lHvvvZczzjiDt73tbfz6179m4cKF7O/qq6/md7/7Haeffjrjx49n/PjxnHfeeZxxxhksWrSIk08+mXe+8528853v5KabbmLMmDGEP5cQQgghhMPmla98JQMDA/zoRz/iRz/6Effccw+vfOUrmTlzJk888QQ13//+96lWq1QqFXbu3MnOnTu5/fbbqbn88svZvHkzPT09bN68mVmzZhH+UkIIIYQQDruGhgZe9rKX8ddIkoRx48YRDi4hhBBCCGGYSQghhBBCGGYSQgghhDrT39+PbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2tunv72e0SwghhBDqiCRaW1sJB9fa2ookRrOEEEIIoc5IQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIYrRLCCGEEEIYZhJCCCGEMCIte2ArHxl8NX8a90pGmoQQQgghjCjlSpVcvkTuzhIfnFRmzK7fMdIkhBBCCGHEKFeqpLsL1JS62jhhYgMjUUIIIYQQhr1ypUouXyLdXWDB1ElkMylGsoQQQgghDGvlSpWOnkHWbNhBX2cL2UyKkS5hBCkWi/T29lIul3kulUqFgYEBBgYGGBgYYGBggJ07dxJCCCEMN7l8iXR3gemTJ9K3qIXmxgZGg4QR4stf/jKSuOuuu7j44otZsmQJB7Ny5Urmz5/PwoULWbhwIQsXLuTnP/85IYQQwnBRrlTJ5UssG9hKX2cL2UyK0SRhBHj00Uf5+te/zre//W0++9nPcuutt3LddddRqVQ4kIcffpiuri4KhQKFQoFCocDpp59OCCGEMByUK1XS3QVqSl1tNDc2MNokjACTJ09m5cqVTJgwgZqxY8eyZ88edu/ezYEMDg4yefJkKpUKu3fv5vmsXLmSK664giuuuIIrrriC/v5+QgghhJdauVIlly+R7i6QPTtFNpPi2fr7+7niiiu44ooruOKKK+jv72ckShgBkiThta99LXv27OG2225j/vz5fOADH+C4447j2fbs2cOvf/1rPvWpTzFr1ixOPfVUFi9ezHNpbW1l2rRpTJs2jWnTptHU1EQIIYTwUipXqnT0DFLeUaXU1caCt0ziQJqampg2bRrTpk1j2rRpjFQJI0ilUuHpp5/mVa96FWvXruXJJ5/k2bZv387MmTP56le/yn333UdfXx/33HMPt956KwfT1NREe3s77e3ttLe309TURAghhPBSyeVLpLsLTJ88kaXnn8RzaWpqor29nfb2dtrb22ltbWUkShhBjj32WC644AJuuukmGhoaWL58Oc92/PHHc/3113P88cdTc9xxx3HWWWfx4IMPEkIIIdSTcqVKLl9i2cBW+jpbyGZShP+VMAJs3LiRb37zm+zv1a9+Ndu2bePZNm3axO23387+nnnmGY466ihCCCGEelGuVOnoGaSm1NVGc2MD4f9KGAH27NnDZz/7WTZu3EjNb3/7W+69917OOussatatW8fWrVupqVarZLNZHnvsMWq2b9/OXXfdxbnnnksIIYQw1MqVKrl8iXR3gWwmRTaTIvylhBHgda97HYsXL2b27NlcdNFFzJw5kwsuuIAZM2ZQc+2117J27VpqpkyZQldXF+9+97uZP38+73jHO7j44os5/fTTCSGEEIZSuVIl3V2gptTVxvTJEwkHljBCzJkzh4ceeoibb76Zhx56iEsuuYR9li5dynnnncc+c+fOpVAosHz5cgqFAh0dHYQQQghDKZcvke4usGDqJLKZFOG5JYQQQghhyJQrVXL5EssGttLX2UI2kyI8v4QQQgghDIlypUpHzyA1pa42mhsbCIcmIYQQQggvqXKlSi5fIt1dIJtJkc2kCC9MQgghhBBeMuVKlXR3gZpSVxvTJ08kvHAJIYQQQnhJ5PIl0t0FFkydRDaTIvz1EkIIIYRwRJUrVXL5EssGttLX2UI2kyK8OAkhhBBCOGLWbNhBR88gNaWuNpobGwgvXkIIIYQQDrtypUouX6KjZz1Lzz+ZbCZFOHwSQgghhHBYlStV0t0FakpdbTQ3NhAOr4QQQgghHDa5fIl0d4EFUyeRzaQIR0ZCCCGEEF60cqVKLl9i2cBW+jpbyGZShCMnIYQQQggvypoNO+joGaSm1NVGc2MD4chKCCGEEMJfpVypksuX6OhZz9LzTyabSRFeGgkhhBBCeMHKlSrp7gI1pa42mhsbCC+dhBBCCCG8ILl8iXR3gQVTJ5HNpAgvvYQQQgghHJJypUpHz3rWbNhBX2cL2UyKMDQSQgghhPC81mzYQUfPIM0TG+hb1EJzYwNh6CSEEEII4aDKlSq5fImOnvUsPf9kspkUYeglhBBCCOGAypUq6e4CNaWuNpobGwj1ISGEEEIIf6ZcqZLLl0h3F1gwdRLZTIpQXxJCCCGE8P8rV6p09AyyZsMO+jpbyGZShPqTEEIIIYT/Ty5fIt1dYPrkifQtaqG5sYFQnxJCCCGEUa5cqZLLl1g2sJW+zhaymRShviWEEEIIo1i5UiXdXaCm1NVGc2MDof4lhBBCCKNQuVIlly+R7i6QPTtFNpMiDB8JIYQQwihTrlTp6BlkzYYd9HW2sOAtkwjDS0IIIYQwiuTyJdLdBaZPnkjfohaaGxsIw09CCCGEMAqUK1Vy+RLLBrbS19lCNpMiDF8JIYQQwghXrlTp6BmkptTVRnNjA2F4SwghhBBGqHKlSi5fIt1dIJtJkc2kCCNDQgghhDAClStV0t0FyjuqlLramD55ImHkSAghhBBGmFy+RLq7wIKpk1h6/kmEkSdhlCoWi/T29lIulwkhhDAylCtVcvkSywa20tfZQjaTIoxMCaPQl7/8ZSRx1113cfHFF7NkyRJCCCEMb+VKlY6eQWpKXW00NzYQRq6EUebRRx/l61//Ot/+9rf57Gc/y6233sp1111HpVIhhBDC8FOuVMnlS6S7C2QzKbKZFGHkSxhlJk+ezMqVK5kwYQI1Y8eOZc+ePezevZuDWblyJfPmzWPevHnMmzeP/v5+QgghDL1ypUq6u0BNqauN6ZMnMtr19/czb9485s2bx7x581i5ciUjUcIokyQJr33ta9mzZw+33XYb8+fP5wMf+ADHHXccB9Pa2ookJCGJpqYmQgghDK1cvkS6u8CCqZPIZlKE/9XU1IQkJCGJ1tZWRqKEUapSqfD000/zqle9irVr1/Lkk09yME1NTbS2ttLa2kpraytNTU2EEEIYGuVKlVy+xLKBrfR1tpDNpAj/V1NTE62trbS2ttLa2kpTUxMjUcIodeyxx3LBBRdw00030dDQwPLlywkhhFDf1mzYQUfPIDWlrjaaGxsIo1PCKLNx40a++c1vsr9Xv/rVbNu2jRBCCPWpXKmSy5fo6FlPNpMim0kRRreEUWbPnj189rOfZePGjdT89re/5d577+Wss84ihBBC/SlXqqS7C9SUutqYPnkiISSMMq973etYvHgxs2fP5qKLLmLmzJlccMEFzJgxgxBCCPUlly+R7i6wYOokspkUIeyTMArNmTOHhx56iJtvvpmHHnqISy65hBBCCPWjXKmSy5dYNrCVvs4WspkUIewvIYQQQqgjazbsoKNnkJpSVxvNjQ2E8GwJIYQQQh0oV6rk8iU6etaz9PyTyWZShHAwCSGEEMIQK1eqpLsL1JS62mhubCCE55IQQgghDKFcvkS6u8CCqZPIZlKEcCgSQgghhCFQrlTp6FnPsoGt9HW2kM2kCOFQJYQQQggvsTUbdtDRM0jzxAZKXW00NzYQwguREEIIIbxEypUquXyJjp71LD3/ZLKZFCH8NRJCCCGEl0C5UiXdXaCm1NVGc2MDIfy1EkIIIYQjqFypksuXSHcXWDB1EtlMihBerIQQQgjhCClXqnT0DLJmww76OlvIZlKEcDgkhBBCCEfAsge2ku4uMH3yRPoWtdDc2EAIh0tCCCGEcBiVK1Vy+RK5O0v0dbaQzaQI4XBLCCGEEA6TcqVKurtATamrjebGBkI4EhJCCCGEF6lcqZLLl0h3F1gwdRLZTIoQjqSEEEII4UUoV6p09AyyZsMO+jpbyGZShHCkJYQQQgh/pVy+RLq7wPTJE+lb1EJzYwMhvBQSQgghhBeoXKmSy5dYNrCVvs4WspkUIbyUEkIIIYQXoFyp0tEzSE2pq43mxgZCeKklhBBCCIegXKmSy5dIdxfIZlJkMylCGCoJdWLXrl1s3LiRX/ziF6xbt47HHnuMJ598khBCCEOvXKnS0TNIeUeVUlcb0ydPJIShlDDE7rvvPtLpNG9605t4xzvewfve9z46Ojr4p3/6J6ZNm0ZbWxvf/OY3CSGEMDRy+RLp7gLTJ09k6fknEUI9SBgilUqFM844g8svv5yFCxeydu1a1q9fz7p16ygUChSLRX7yk5/w6U9/mmXLlnHqqady7733EkII4aVRrlTJ5UssG9hKX2cL2UyKEOpFwhA577zz+PrXv84999zDnDlzOOaYY0iShP01NjYyY8YMent76e3t5ZprrmHnzp2EEEI4ssqVKh09g9SUutpobmwghHqSMERWr17N6173Og7Vsccey3e+8x3Gjx9PCCGEI6NcqZLLl0h3F8hmUmQzKUKoRwkhhBDC/6tcqZLuLlBT6mpj+uSJhFCvEurEqlWr2LJlCzXXXXcdU6dOZcaMGYQQQjjycvkS6e4CC6ZOIptJEUK9S6gD1113Hf/+7//O73//e5544gluvPFGLrjgAl796ldzxhlnEEII4cgoV6rk8iWWDWylr7OFbCZFCMNBQh249dZbuf3225kyZQpf+9rX+Ju/+Rs++MEPcsstt/Cb3/yGP/7xj4QQQji8ypUqHT2D1JS62mhubCCE4SKhDvzxj38klUpRs2rVKl7/+tezz8te9jJ2795NCCGEw6NcqZLLl0h3F8hmUmQzKUIYbhLqwPjx43nwwQd58skn+c1vfkM2m6Wmv7+fZ555hvHjxxNCCOHFK1eqpLsL1JS62pg+eSIhDEcJdSCXy7Fw4UKmTZvG6173Ov7u7/6O//qv/2LevHlceOGFhBBCePFy+RLp7gILpk4im0kRwnCWUAdmzJjB/fffT29vL9///vepmTVrFr29vVx++eWEEEL465UrVXL5EssGttLX2UI2kyKE4S6hTowfP56VK1dyzjnn8LOf/YxyucwTTzzBC/HYY4/R29tLoVDguVQqFQYGBhgYGGBgYICBgQF27txJCCGMNGs27KCjZ5CaUlcbzY0NhDASJNSBXbt2cdJJJ3HbbbexYcMGajZv3sycOXO44YYbOBSf/vSnWbhwIfl8nlwux9y5c3n66ac5kJUrVzJ//nwWLlzIwoULWbhwIT//+c8JIYSRolypksuX6OhZz9LzTyabSRHCSJJQB2bPns3FF1/M2rVrOfHEE6mZMWMGN998MzfeeCPPZ/369dx222185zvf4Qtf+ALf+973+P3vf88dd9zBgTz88MN0dXVRKBQoFAoUCgVOP/10QghhJChXqqS7C9SUutpobmwghJEmoQ5s27aN97///Tzb6aefzlFHHcXOnTt5LhMmTGDJkiVMmDCBfVKpFFu2bOFABgcHmTx5MpVKhd27d/N8Vq5cyYwZM5gxYwYzZsxg5cqVhBBCPcrlS6S7CyyYOolsJkUYffr7+5kxYwYzZsxgxowZ3HDDDYxECXVgzJgx/PGPf+TZ9u7dyzPPPMOYMWN4LpMmTaKtrY19Nm3aRF9fH2eddRbPtmfPHn7961/zqU99ilmzZnHqqaeyePFinktraysrVqxgxYoVrFixgvb2dkIIoZ6UK1Vy+RLLBrbS19lCNpMijE5NTU2sWLGCFStWsGLFCi677DJGooQ6MGvWLM4991wqlQr77Nq1i/e97300NTUxbtw4DtX27dtZsGABixYt4qSTTuLZtm/fzsyZM/nqV7/KfffdR19fH/fccw+33norB9PU1ERTUxNNTU00NTURQgj1ZM2GHXT0DFJT6mqjubGBMHo1NTXR1NREU1MTTU1NjFQJdeCqq67i9a9/PaeddhqPPPIIHR0dvOlNb2JwcJB8PmYryccAACAASURBVM+h+sUvfkF7ezsXXHABnZ2dHMjxxx/P9ddfz/HHH0/Ncccdx1lnncWDDz5ICCEMJ+VKlVy+REfPepaefzLZTIoQRouEOrF8+XLWrFnD7bffzvLly7nzzjt56KGHGDt2LIfivvvu48ILL+Sqq66io6ODg9m0aRO33347+3vmmWc46qijCCGE4aJcqZLuLlBT6mqjubGBEEaThDowa9Ystm7dyqRJk3jDG97AqaeeygknnMDOnTs5+eSTefrpp3kujz/+OJdddhmf//znSafT7N69m927d7Nnzx5q1q1bx9atW6mpVqtks1kee+wxarZv385dd93FueeeSwghDAe5fIl0d4EFUyeRzaQIYTRKGCL9/f3MnTuXuXPn8uijj/KRj3yEuXPnMnfuXObOncvcuXOZP38+e/bsYcyYMTyXW265haeeeopLL72UU045hVNOOYVTTjmFq6++mpprr72WtWvXUjNlyhS6urp497vfzfz583nHO97BxRdfzOmnn04IIdSzcqVKR8961mzYQV9nC9lMihBGq4Qh0traSrVaZdu2bdRs27aNbdu2sW3bNrZt28a2bdt46qmnuOKKKzjqqKN4LpdffjnFYpFisUixWKRYLFIsFrnyyiupWbp0Keeddx77zJ07l0KhwPLlyykUCnR0dBBCCPVs2QNb6egZpHliA32LWmhubCCE0SxhCH3nO99h9erVTJs2jW9961usXr2a1atXs3r1alavXs2dd95JR0cHIYQwWpUrVXL5Erk7Syw9/2SymRQhBEioA5s2beLcc8/li1/8Ijt37iSEEAKUK1XS3QVqSl1tNDc2EEL4Xwl1oLe3l2w2yx133MFb3vIWZsyYQW9vLyGEMBqVK1Vy+RLp7gILpk4im0kRQvhzCXVg7NixnHvuudx999385Cc/4ZxzzuHKK69kypQpzJ07ly1bthBCCKNBuVKlo2eQNRt20NfZQjaTIoTwlxLqTGNjI/PmzeOcc85hzJgxPPjgg8yc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117j3//934lEIjz88MN0dHSwaNEivv/973MmJkyYQG1tLc888wy/+MUvuPPOOxGR0hQgInKG+vv72b59O9u3b6ezs5MNGzYwf/58PvOZz/C3f/u3TJs2jY9//OMsX76co0ePUtTR0UFTUxODg4O8n9///vf8/d//Pbt27aLoxIkTvP7661x77bW8m1AoxIEDBzhy5Agn3XnnnWzZsoVcLkd9fT0iUpoCRETO0PPPP09TUxNNTU185Stf4Uc/+hF33nknra2thEIhgiCgtbWVfD5PTU0Nn/3sZ/na177GN77xDW677TbeT21tLYsXL+buu+/ms5/9LDfccAMDAwN897vf5d3cdttt7Nixg7/4i7/gpL/+67/md7/7HbNmzWLUqFGISGkKEBE5A11dXfT29tLb20tvby89PT0888wz3HfffVx22WWc9PGPf5wf//jH/OY3vyGZTJJOp/nSl77ESb29vUyfPp1T9fb2Mn36dIqWLFnCSy+9RDKZJJVKsXnzZsaPH89Jvb29TJ8+naI5c+bw8ssv85vf/IaTgiAgFArx+c9/HhEpXQEiIufAxRdfzLhx4wiCgA8qCALGjRvHqFGjeD9BEBAKhThy5Aj5fJ6VK1dy1VVXMWXKFESkdAWIiJSIm2++mZ/85Cd885vfRERKW4CISAm44oor+M1vfsOvfvUrpkyZgoiUtgARkRJx6aWXEgqFEJHSFyAiIiIywgSIiIiIjDD/A04XMlm00bnKAAAAAElFTkSuQmCC" style="width: 100%; height: auto;"></div></div></div></div></div></div></div><div  class = 'S8'><span>Isn't it obvious now that the smaller the density the better?! Indeed, for two Faust objects of the same shape and the same number of factors, a smaller density (linearly) implies a smaller file size for storage. This point applies also to the memory (RAM) space to work on a Faust.</span></div><div  class = 'S0'><span>We'll see later how the computation can benefit of a bigger RCG (or smaller density). But let's point out right now that the sparsity is often a tradeoff with accuracy, as the following plot shows about the truncated SVD of a matrix </span><span style="vertical-align:-5px"><img src="data:image/png;base64,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" width="85" height="19" /></span><span>. Note beforehand that the SVD of M (truncated or not) can be seen as a Faust which approximates M.</span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><img src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAABILUlEQVR42u2dCXgV5dm/i2EVBFGw4EJitUDUfgha1KpBXEDcxX5qtUi1oqBAUKriUsF+4FpF60e1Iu4iVYl1LWpVoLJpBVzKvi/ijp8bi+Lz7+9t3/znTGbOkgRykrnv65oryck5c2Z55n3uebf5gQEAAABAovgBhwAAAAAAAQQAAAAABBAAAAAAEEAAAAAAQAABAAAAAAEEAAAAAAQQAAAAABBAAAAAAEAAAQAAAAABBAAAAAAEEAAAAAAQQAAAAABAAAEAAAAAAQQAAABAAO+//377wQ9+UL4UFBRYmzZt7IwzzrBFixZV+guGDx/u1lcZnn/+eff5KAoLC61v377b/IB169Yt5TgFF21TUgnHT6NGjeyHP/yhHXHEEXb99dfbhx9+mD9B/6/tC8bVP//5T/f38uXLa2ybJkyYYPvss481btzYbd+cOXMiYz4u9oKLzkVt54477rCHH3642te7YcMGd4xuuOGGjO9VPFxwwQW29957u/PSsmVL+8lPfuJee//99917iouLbc8997Tvv/8+dj1dunSxtm3b2nfffWfz589POVf169e3nXfe2bp27WqXXnqp+3918te//tU6d+5s22+/vfs+/V3bOOigg6xnz55k6yx58MEH7c4778zpMz4uH3vssWqLOx/jces85JBD3P87dOiQ9XoPPfRQKy0trbDdUctTTz2V8tnXXnvNzjvvPHc9NGzY0L1n3bp1Fb5j3rx5NmTIENt///2tefPm7vo87LDDKqwvF6644orIbWzRokWF995888128sknW7t27dx74mL/z3/+s51++umu/FH5VFRUZH369LGlS5emvG/jxo22++6721133ZVZAPVzxowZ7mCNHDnSmjRpYrvssot99tln21wAL7744tjPzp4925YsWVIjAvijH/3IHaPwom1KugD6+Jk6dao9+eST7kJSkO+000728ssv58W2avtWr15d/vcTTzzhtl0xXxN89NFH1qBBAzvxxBNt8uTJbvu+/vrryJgPxtuvf/1rt92TJk1KeV3rq+3stddeWyXpZyuAy5Ytc8LXsWNH+9Of/mSvvvqqlZWV2f/8z/84CdRxFrfccotb3yuvvBK5nrffftv9f9iwYSkJa+jQoW4d06ZNs2effdauu+46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7if7xT6xT+wT54p9Yp8AAQQAAAAABBAAAAAAEEAAAAAAQAABAAAAEEDYhowZM8aKioqsUaNG1qVLF5s6dWra9z/55JNWXFxsDRs2dD/LyspS/v/999+7Drht27a1xo0bW7du3ey9997L232655577LDDDrMdd9zRLUcddZTNmjUr5T19+/atMCP8QQcdlLf7dP/990fOYr9hw4Yqnfua3i/FUtR+HXfccXlzrqZMmWInnHCCi39991NPPZXxM5MnT3b7rmOw55572l133VXl67Qm92nixIl29NFHW6tWrWyHHXawgw8+2CZNmpTyHpUR4fP0wx/+MG/36bXXXouMvfnz5+dUPubTPkVdK1r22WefvDlP119/vR144IHWrFkza926tZ188sm2YMGCjJ+rDXkKEMAaZcKECdagQQMbO3aszZs3z0pLS61p06a2cuXKyPdPnz7dCgoK3EWpgk8/69evbzNnzix/z4033ugKfSWBd99918444wx3kX3xxRd5uU9nnXWWS65z5sxx+3TuuedaixYtbM2aNSkF5bHHHmvr1q0rXz799NO8PU8SwObNm6dsr5aqrDMf9kvHPLg/KrAVj9rffDlXL7zwgl199dUu/rNJwsuWLbPtt9/e7buOgY6FjokSWL6cq1z3Sdt300032RtvvGGLFi2yK6+80m3/7NmzU8Ri3333TTlPH330Ud6eJy+ACxcuTNnm7777LqfyMZ/2SU+3CO6LnnSx0047uXOTL+epZ8+e7vrWtT537lw7/vjjrV27dvbVV1/FfqY25ClAAGucrl27Wv/+/VNe69ixow0bNizy/aeffrpLruEL9Mwzzyy/q2rTpo27uDwaii+huvvuu/Nyn8KoQFfB8OCDD6ZIhe48a8t5UoGpY741j1M+nKvRo0e7cxVMBjV9rlIKtiyS8OWXX+72OciFF17oas3y6Vzlsk9RqFbpuuuuSxGLTp061Zrz5AVw/fr1se/JVD7m+3nS++vVq2crVqzIy/MkJJ/aN9V2VvY85EOeAgSwRtm0aZO7SwpXjQ8ePNhKSkoiP7PHHnvYbbfdlvKa/tYdmVi6dKm7OIN3+uKkk06yc845Jy/3KYzuANUk8Oyzz6ZIhQoHNUH8+Mc/tvPPP98+/PDDvD1PEkB9Rudlt912c3fNwXNSHccpH87VfvvtZ/369Ut5rSbPVWWS8OGH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eOGF7veysjK3vq+//poTCQAIIABAdQjgT37yEzv++OPtxhtvtN12280WL15cYfn444/LBVBNxkFGjx7t+gN61JT8+uuv27XXXuvWrdo79e3LRQCfeeYZa9GihX3zzTeuSfr888/nJAIAAggAUB0C6AeB3HffffbSSy+5plf13YsjGwEMohpBSeWtt94auR3HHHOMDRw4MPJzu+66q/uc+hROnz6dkwgACCAAQK4CGDcNzAknnOCESzV3hx12mBO8SZMmORGcNm2aXX311W5QSDYCOHPmTLdevX/lypX2+OOPW8OGDe2FF16IFEANAPnpT3/qvku1jME5CTWwRJ/t2LEjJxAAEEAAgMoIYHAiaDXLaiJo1fwFpUuDOwYNGuRq3xo0aGB77LGHnX322bZq1aqsBHDevHnWs2dPt/5GjRpZ+/bt7c4770zZjqAALly40A4++GBr0qSJ27Zg7ePSpUvda+qbCACAAAIAJAD1I5SsfvDBBxwMAEAAAQDqMpqGRgNPNAn1WWedxQEBAAQQAKCuc//997upZ7p06eL6KwIAIIAAAAAAgAACAAAAAAIIAAAAAAggAAAAACCAAAAAAIAAAgAAAAACCAAAAAAIIAAAAAAggAAAAAAIIAAAAAAggAAAAACAAAIAAAAAAggAAAAACCAAAAAAIIAAAAAAkBf8PwxregtdjfnYAAAAAElFTkSuQmCC" width = "524" height = "425" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S0'><span>Here is the script to reproduce the last figure with pyfaust: </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/test_svd_rc_vs_err.py"><span>test_svd_rc_vs_err.py</span></a></div><div  class = 'S0'><span></span></div><h3  class = 'S2' id = 'H_73387A87' ><span>2. Faust Algebra and other Operations</span></h3><div  class = 'S0'><span></span></div><div  class = 'S0'><span>In order to write some nice algorithms using Faust objects, you'll have to use the basic "stable" operations a Faust is capable of. Let's make a tour of them.</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12' id = 'H_5E556DD4' ><span>2.1 Transpose, conjugate, transconjugate</span></h4><div  class = 'S0'><span></span></div><ul  class = 'S3'><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a029a3db751ae1282eca2af94ce4101ec"><span>Faust.transpose</span></a><span> or </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a029a3db751ae1282eca2af94ce4101ec"><span>.'</span></a></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#aec9036a3d251fd47038a9a338b91502d"><span>Faust.conj</span></a><span>,</span></li><li  class = 'S4'><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a66c1abdcbcfe8505457ce69a7b355716"><span>Faust.ctranspose</span></a><span> or </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#a66c1abdcbcfe8505457ce69a7b355716"><span>'</span></a></li></ul><div  class = 'S0'><span>You are probably familiar with .' and ' shorthand operators from Matlab. Well, they are also used in the Faust class.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>G = matfaust.rand(10, 15, </span><span style="color: rgb(160, 32, 240);">'dim_sizes'</span><span>, [10,15], </span><span style="color: rgb(160, 32, 240);">'field'</span><span>, </span><span style="color: rgb(160, 32, 240);">'complex'</span><span>)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="AC55DEF9" data-testid="output_14" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">G = </span></div><div>Faust size 10x15, density 2, nnz_sum 300, 5 factor(s): 
+- FACTOR 0 (complex) SPARSE, size 10x10, density 0.5, nnz 50
+- FACTOR 1 (complex) SPARSE, size 10x15, density 0.333333, nnz 50
+- FACTOR 2 (complex) SPARSE, size 15x14, density 0.357143, nnz 75
+- FACTOR 3 (complex) SPARSE, size 14x11, density 0.454545, nnz 70
+- FACTOR 4 (complex) SPARSE, size 11x15, density 0.333333, nnz 55</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>G.'</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="E84D10E7" data-testid="output_15" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 15x10, density 2, nnz_sum 300, 5 factor(s): 
+- FACTOR 0 (complex) SPARSE, size 15x11, density 0.333333, nnz 55
+- FACTOR 1 (complex) SPARSE, size 11x14, density 0.454545, nnz 70
+- FACTOR 2 (complex) SPARSE, size 14x15, density 0.357143, nnz 75
+- FACTOR 3 (complex) SPARSE, size 15x10, density 0.333333, nnz 50
+- FACTOR 4 (complex) SPARSE, size 10x10, density 0.5, nnz 50</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>conj(G)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="A724B623" data-testid="output_16" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x15, density 2, nnz_sum 300, 5 factor(s): 
+- FACTOR 0 (complex) SPARSE, size 10x10, density 0.5, nnz 50
+- FACTOR 1 (complex) SPARSE, size 10x15, density 0.333333, nnz 50
+- FACTOR 2 (complex) SPARSE, size 15x14, density 0.357143, nnz 75
+- FACTOR 3 (complex) SPARSE, size 14x11, density 0.454545, nnz 70
+- FACTOR 4 (complex) SPARSE, size 11x15, density 0.333333, nnz 55</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>G'</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="12FBB89A" data-testid="output_17" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 15x10, density 2, nnz_sum 300, 5 factor(s): 
+- FACTOR 0 (complex) SPARSE, size 15x11, density 0.333333, nnz 55
+- FACTOR 1 (complex) SPARSE, size 11x14, density 0.454545, nnz 70
+- FACTOR 2 (complex) SPARSE, size 14x15, density 0.357143, nnz 75
+- FACTOR 3 (complex) SPARSE, size 15x10, density 0.333333, nnz 50
+- FACTOR 4 (complex) SPARSE, size 10x10, density 0.5, nnz 50</div></div></div></div></div></div><div  class = 'S8'><span>What really matters here is that the results of G.', conj(G) and G' are all Faust objects. Behind the scene, there is just one memory zone allocated to the factors. Strictly speaking they are memory views shared between G, G.' and G'. So don't hesitate to use!</span></div><h4  class = 'S12' id = 'H_99DA98B4' ><span>2.2 Add, Subtract and Multiply</span></h4><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>s = size(G, 1);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>F = matfaust.rand(s, s);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>G = matfaust.rand(s, s, </span><span style="color: rgb(160, 32, 240);">'field'</span><span>, </span><span style="color: rgb(160, 32, 240);">'complex'</span><span>);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>F+G</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="7E0B4540" data-testid="output_18" data-width="1172" data-height="146" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 5.6, nnz_sum 560, 8 factor(s): 
 - FACTOR 0 (complex) SPARSE, size 10x20, density 0.1, nnz 20
 - FACTOR 1 (complex) SPARSE, size 20x20, density 0.25, nnz 100
 - FACTOR 2 (complex) SPARSE, size 20x20, density 0.25, nnz 100
@@ -128,7 +137,7 @@
 - FACTOR 4 (complex) SPARSE, size 20x20, density 0.25, nnz 100
 - FACTOR 5 (complex) SPARSE, size 20x20, density 0.25, nnz 100
 - FACTOR 6 (complex) SPARSE, size 20x20, density 0.05, nnz 20
-- FACTOR 7 (complex) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div></div><div  class = 'S8'><span>Go ahead and verify it's accurate.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>norm(full(F+G)-(full(F)+full(G)), </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0</div></div></div></div><div  class = 'S8'><span>Some points are noticeable here:</span></div><ul  class = 'S3'><li  class = 'S4'><span>F is real but G is complex. The Faust API is able to return the proper type for the resulting Faust, that is a complex Faust.</span></li><li  class = 'S4'><span>F+G is composed of 8 factors, however F and G are both 5 factors long. It's due to the way the addition is implemented (Faust concatenation is hiding behind).</span></li></ul><div  class = 'S0'><span>Subtracting is not different:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F-G</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="C29FC773" data-scroll-top="null" data-scroll-left="null" data-testid="output_18" data-width="926" data-height="146" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 5.6, nnz_sum 560, 8 factor(s): 
+- FACTOR 7 (complex) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div></div><div  class = 'S8'><span>Go ahead and verify it's accurate.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>norm(full(F+G)-(full(F)+full(G)), </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0</div></div></div></div><div  class = 'S8'><span>Some points are noticeable here:</span></div><ul  class = 'S3'><li  class = 'S4'><span>F is real but G is complex. The Faust API is able to return the proper type for the resulting Faust, that is a complex Faust.</span></li><li  class = 'S4'><span>F+G is composed of 8 factors, however F and G are both 5 factors long. It's due to the way the addition is implemented (Faust concatenation is hiding behind).</span></li></ul><div  class = 'S0'><span>Subtracting is not different:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F-G</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="D4A009EC" data-testid="output_20" data-width="1172" data-height="146" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 5.6, nnz_sum 560, 8 factor(s): 
 - FACTOR 0 (complex) SPARSE, size 10x20, density 0.1, nnz 20
 - FACTOR 1 (complex) SPARSE, size 20x20, density 0.25, nnz 100
 - FACTOR 2 (complex) SPARSE, size 20x20, density 0.25, nnz 100
@@ -136,7 +145,7 @@
 - FACTOR 4 (complex) SPARSE, size 20x20, density 0.25, nnz 100
 - FACTOR 5 (complex) SPARSE, size 20x20, density 0.25, nnz 100
 - FACTOR 6 (complex) SPARSE, size 20x20, density 0.05, nnz 20
-- FACTOR 7 (complex) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div></div><div  class = 'S8'><span>You can also add/subtract scalars to Faust objects.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F+2</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="D9F87807" data-scroll-top="null" data-scroll-left="null" data-testid="output_19" data-width="926" data-height="146" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 3.6, nnz_sum 360, 8 factor(s): 
+- FACTOR 7 (complex) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div></div><div  class = 'S8'><span>You can also add/subtract scalars to Faust objects.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F+2</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="14F2FB7F" data-testid="output_21" data-width="1172" data-height="146" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 3.6, nnz_sum 360, 8 factor(s): 
 - FACTOR 0 (real) SPARSE, size 10x20, density 0.1, nnz 20
 - FACTOR 1 (real) SPARSE, size 20x20, density 0.15, nnz 60
 - FACTOR 2 (real) SPARSE, size 20x20, density 0.15, nnz 60
@@ -144,7 +153,7 @@
 - FACTOR 4 (real) SPARSE, size 20x11, density 0.272727, nnz 60
 - FACTOR 5 (real) SPARSE, size 11x20, density 0.272727, nnz 60
 - FACTOR 6 (real) SPARSE, size 20x20, density 0.05, nnz 20
-- FACTOR 7 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div></div><div  class = 'S8'><span>Note that here again </span><span style=' font-family: monospace;'>numfactors(F+2) ~= numfactors(F)</span><span>.</span></div><div  class = 'S0'><span>The FAµST API supports equally the Faust to array addition and subtraction.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F+full(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="B8F7A944" data-scroll-top="null" data-scroll-left="null" data-testid="output_20" data-width="926" data-height="146" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 4.5, nnz_sum 450, 8 factor(s): 
+- FACTOR 7 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div></div><div  class = 'S8'><span>Note that here again </span><span style=' font-family: monospace;'>numfactors(F+2) ~= numfactors(F)</span><span>.</span></div><div  class = 'S0'><span>The FAµST API supports equally the Faust to array addition and subtraction.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F+full(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="2C5F3993" data-testid="output_22" data-width="1172" data-height="146" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 4.5, nnz_sum 450, 8 factor(s): 
 - FACTOR 0 (real) SPARSE, size 10x20, density 0.1, nnz 20
 - FACTOR 1 (real) SPARSE, size 20x20, density 0.15, nnz 60
 - FACTOR 2 (real) SPARSE, size 20x20, density 0.15, nnz 60
@@ -152,7 +161,7 @@
 - FACTOR 4 (real) SPARSE, size 20x20, density 0.15, nnz 60
 - FACTOR 5 (real) SPARSE, size 20x20, density 0.375, nnz 150
 - FACTOR 6 (real) SPARSE, size 20x20, density 0.05, nnz 20
-- FACTOR 7 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>F-full(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="9AECB800" data-scroll-top="null" data-scroll-left="null" data-testid="output_21" data-width="926" data-height="146" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 4.5, nnz_sum 450, 8 factor(s): 
+- FACTOR 7 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>F-full(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="BFD13945" data-testid="output_23" data-width="1172" data-height="146" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 4.5, nnz_sum 450, 8 factor(s): 
 - FACTOR 0 (real) SPARSE, size 10x20, density 0.1, nnz 20
 - FACTOR 1 (real) SPARSE, size 20x20, density 0.15, nnz 60
 - FACTOR 2 (real) SPARSE, size 20x20, density 0.15, nnz 60
@@ -160,8 +169,8 @@
 - FACTOR 4 (real) SPARSE, size 20x20, density 0.15, nnz 60
 - FACTOR 5 (real) SPARSE, size 20x20, density 0.375, nnz 150
 - FACTOR 6 (real) SPARSE, size 20x20, density 0.05, nnz 20
-- FACTOR 7 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>all(all(full(F-full(F)) &lt; eps))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="E4420FE8" data-scroll-top="null" data-scroll-left="null" data-testid="output_22" data-width="926" data-height="34" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
-</div></div></div></div></div></div><div  class = 'S8'><span>Now let's multiply these Fausts!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>FG = F*G</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="E58E2DE6" data-scroll-top="null" data-scroll-left="null" data-testid="output_23" data-width="926" data-height="174" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">FG = </span></div><div>Faust size 10x10, density 5, nnz_sum 500, 10 factor(s): 
+- FACTOR 7 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>all(all(full(F-full(F)) &lt; eps))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="8C11953E" data-testid="output_24" data-width="1172" data-height="34" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
+</div></div></div></div></div></div><div  class = 'S8'><span>Now let's multiply these Fausts!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>FG = F*G</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="6F48C590" data-testid="output_25" data-width="1172" data-height="174" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">FG = </span></div><div>Faust size 10x10, density 5, nnz_sum 500, 10 factor(s): 
 - FACTOR 0 (complex) SPARSE, size 10x10, density 0.5, nnz 50
 - FACTOR 1 (complex) SPARSE, size 10x10, density 0.5, nnz 50
 - FACTOR 2 (complex) SPARSE, size 10x10, density 0.5, nnz 50
@@ -171,134 +180,129 @@
 - FACTOR 6 (complex) SPARSE, size 10x10, density 0.5, nnz 50
 - FACTOR 7 (complex) SPARSE, size 10x10, density 0.5, nnz 50
 - FACTOR 8 (complex) SPARSE, size 10x10, density 0.5, nnz 50
-- FACTOR 9 (complex) SPARSE, size 10x10, density 0.5, nnz 50</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(FG)-full(F)*full(G))/norm(full(F)*full(G))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 9.0371e-17</div></div></div></div><div  class = 'S8'><span>Faust scalar multiplication is also available and here again the result is a Faust object!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F*2</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="A81640D3" data-scroll-top="null" data-scroll-left="null" data-testid="output_25" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 2.5, nnz_sum 250, 5 factor(s): 
+- FACTOR 9 (complex) SPARSE, size 10x10, density 0.5, nnz 50</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(FG)-full(F)*full(G))/norm(full(F)*full(G))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 9.0087e-17</div></div></div></div><div  class = 'S8'><span>Faust scalar multiplication is also available and here again the result is a Faust object!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F*2</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="660C3353" data-testid="output_27" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 2.5, nnz_sum 250, 5 factor(s): 
 - FACTOR 0 (real) SPARSE, size 10x10, density 0.5, nnz 50
 - FACTOR 1 (real) SPARSE, size 10x10, density 0.5, nnz 50
 - FACTOR 2 (real) SPARSE, size 10x10, density 0.5, nnz 50
 - FACTOR 3 (real) SPARSE, size 10x10, density 0.5, nnz 50
-- FACTOR 4 (real) SPARSE, size 10x10, density 0.5, nnz 50</div></div></div></div></div></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S13'></div></div></div><h4  class = 'S12'><span>2.3 Faust Multiplication by a Vector or a Matrix</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>When you multiply a Faust by a vector or a matrix (the number of nrows must match the number of Faust columns), you'll get respectively a vector or a matrix as result.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>vec = rand(size(F, 2), 1);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>F*vec</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="4F797A9E" data-scroll-top="null" data-scroll-left="null" data-testid="output_26" data-width="926" style="width: 956px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 926px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">10×1</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:73,&quot;totalColumns&quot;:1,&quot;totalRows&quot;:10,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 75px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">   51.3618
-   56.8713
-   22.0841
-   32.4884
-   88.5154
-   47.7793
-   32.8079
-   56.8013
-   37.8312
-   51.6433
-</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div></div><div  class = 'S8'><span>Let's launch a timer to compare the execution times of Faust-vector multiplication and Faust's dense matrix-vector multiplication.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F_times_vec = @() F*vec</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="4DCA0829" data-scroll-top="null" data-scroll-left="null" data-testid="output_27" data-width="926" data-height="34" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">F_times_vec = <span class="headerElement">function_handle with value:</span></span></div><div>    @()F*vec
-</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'><span style="white-space: pre;"><span>FD = full(F);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>FD_times_vec = @() FD*vec</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="B27D8619" data-scroll-top="null" data-scroll-left="null" data-testid="output_28" data-width="926" data-height="34" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">FD_times_vec = <span class="headerElement">function_handle with value:</span></span></div><div>    @()FD*vec
-</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(F_times_vec)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 2.0105e-05</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(FD_times_vec)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsWarningElement" uid="4630EE03" data-scroll-top="null" data-scroll-left="null" data-testid="output_30" data-width="926" data-height="18" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="diagnosticMessage-wrapper diagnosticMessage-warningType"><div class="diagnosticMessage-messagePart">Warning: The measured time for F may be inaccurate because it is running too fast. Try measuring something that takes longer.</div><div class="diagnosticMessage-stackPart"></div></div></div><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 2.0919e-07</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>all(all(F*vec-FD*vec &lt; 1e-7))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="F0AC2975" data-scroll-top="null" data-scroll-left="null" data-testid="output_32" data-width="926" data-height="34" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
-</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>rcg(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.4000</div></div></div></div><div  class = 'S8'><span>When the RCG is lower than 1 the Faust-vector multiplication is slower. Making a random Faust with a large RCG (small density) shows better results.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>G = matfaust.rand(1024, 1024, </span><span style="color: rgb(160, 32, 240);">'num_factors'</span><span>, 3, </span><span style="color: rgb(160, 32, 240);">'density'</span><span>, .001, </span><span style="color: rgb(160, 32, 240);">'fac_type'</span><span>, </span><span style="color: rgb(160, 32, 240);">'sparse'</span><span>)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="4664C7A3" data-scroll-top="null" data-scroll-left="null" data-testid="output_34" data-width="926" data-height="76" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">G = </span></div><div>Faust size 1024x1024, density 0.00292969, nnz_sum 3072, 3 factor(s): 
-- FACTOR 0 (real) SPARSE, size 1024x1024, density 0.000976562, nnz 1024
-- FACTOR 1 (real) SPARSE, size 1024x1024, density 0.000976562, nnz 1024
-- FACTOR 2 (real) SPARSE, size 1024x1024, density 0.000976562, nnz 1024</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'><span style="white-space: pre;"><span>GD = full(G);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>vec2 = rand(1024, 1);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>timeit(@() G*vec2)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 4.9490e-05</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() GD*vec2)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 6.7963e-04</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>rcg(G)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 341.3333</div></div></div></div><div  class = 'S8'><span>It goes without saying that a big RCG gives a big speedup to the Faust-vector multiplication relatively to the corresponding (dense) matrix-vector multiplication. I hope the example above has finished to convince you.</span></div><div  class = 'S0'><span>Just to convince you as well of the Faust-vector multiplication accuracy:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>norm(G*vec2 - GD*vec2)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 4.3060e-16</div></div></div></div><div  class = 'S8'><span>What applies to Faust-vector multiplication remains valid about Faust-matrix multiplication. Take a look:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>M = rand(1024,32);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>timeit(@() G*M)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 6.9088e-04</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() GD*M)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.0134</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(GD*M-G*M)/norm(GD*M)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 7.2196e-17</div></div></div></div><div  class = 'S8'><span>Well, what do we see? A quicker Faust-matrix multiplication than the matrix-matrix corresponding multiplication, though a good accuracy of the Faust-matrix multiplication is also clearly confirmed.</span></div><div  class = 'S0'><span>These examples are somehow theoretical because we cherry-pick the Faust to ensure that the RCG is good to accelerate the muplication, but at least it shows the potential speedup using Faust objects.</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12'><span>2.4 Faust Norms</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>The Faust class provides a norm function which handles different types of norms. This function is really close to Matlab </span><a href = "https://www.mathworks.com/help/matlab/ref/norm.htm"><span>norm</span></a><span> function.</span></div><div  class = 'S0'><span>In the following example, three of the four norms available are computed.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>norm(F,1)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 204.5014</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(F, inf)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 219.4268</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(F, </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 142.4657</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(F), 1)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 204.5014</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(F), inf)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 219.4268</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(F), </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 142.4657</div></div></div></div><div  class = 'S8'><span>Perfect! But a last norm is available, this is the Faust's 2-norm. Let's see in the next small benchmark how the Faust 2-norm is being computed faster than the Faust's dense matrix 2-norm.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>timeit(@() norm(G, 2))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 4.9805e-04</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() norm(GD, 2))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 2.2828</div></div></div></div><div  class = 'S8'><span>The power-iteration algorithm implemented in the FAµ?ST C++ core is faster on G and the relative error is not bad too. The norm computation is faster as it benefits from faster Faust-vector multiplication.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>err = abs((norm(G, 2)-norm(GD,2))/norm(GD,2))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>err = 0.0012</div></div></div></div><div  class = 'S8'><span></span></div><h4  class = 'S12'><span>2.5 Faust Normalizations</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>The FAµST API proposes a group of normalizations. They correspond to the norms available and discussed above.</span></div><div  class = 'S0'><span>It's possible to normalize along columns or rows with any type of these norms.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F = matfaust.rand(5, 10)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="594C614F" data-scroll-top="null" data-scroll-left="null" data-testid="output_51" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">F = </span></div><div>Faust size 5x10, density 4, nnz_sum 200, 5 factor(s): 
-- FACTOR 0 (real) SPARSE, size 5x8, density 0.625, nnz 25
-- FACTOR 1 (real) SPARSE, size 8x9, density 0.555556, nnz 40
-- FACTOR 2 (real) SPARSE, size 9x10, density 0.5, nnz 45
-- FACTOR 3 (real) SPARSE, size 10x8, density 0.625, nnz 50
-- FACTOR 4 (real) SPARSE, size 8x10, density 0.5, nnz 40</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>NF = normalize(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="306E3EB9" data-scroll-top="null" data-scroll-left="null" data-testid="output_52" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">NF = </span></div><div>Faust size 5x10, density 4, nnz_sum 200, 5 factor(s): 
-- FACTOR 0 (real) SPARSE, size 5x8, density 0.625, nnz 25
-- FACTOR 1 (real) SPARSE, size 8x9, density 0.555556, nnz 40
-- FACTOR 2 (real) SPARSE, size 9x10, density 0.5, nnz 45
-- FACTOR 3 (real) SPARSE, size 10x8, density 0.625, nnz 50
-- FACTOR 4 (real) SPARSE, size 8x10, density 0.5, nnz 40</div></div></div></div></div></div><div  class = 'S8'><span>The API doc is </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#abb16b52adc84eadc2835ae0542f75b90"><span>here</span></a><span>.</span></div><div  class = 'S0'><span>What's interesting here is the fact that Faust.normalize returns a Faust object. Combined with slicing (that you will see soon), normalize is useful to write algorithms such as Orthonormal Matching Pursuit (OMP), which require matrices with L2-normalized columns, in a way that makes them able to leverage the acceleration offered by the FAµST API.</span></div><div  class = 'S0'><span>The normalization coded in C++ is memory optimized (it never builds the dense matrix full(F) to compute the norms of the columns/rows). In the same goal the factors composing the Faust object NF are not duplicated in memory from same factors F, they're used as is with an additional factor giving the appropriate scaling.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>factors(NF, 5)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement scrollableOutput" uid="3173D7A8" data-scroll-top="null" data-scroll-left="null" data-testid="output_53" data-width="926" data-height="580" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>   (1,1)       0.0035
-   (3,1)       0.0413
-   (4,1)       0.0459
-   (6,1)       0.0654
-   (2,2)       0.0275
-   (3,2)       0.0233
-   (4,2)       0.0078
-   (5,2)       0.0385
-   (8,2)       0.0429
-   (1,3)       0.0408
-   (2,3)       0.0104
-   (5,3)       0.0382
-   (6,3)       0.0386
-   (8,3)       0.0188
-   (6,4)       0.0692
-   (7,4)       0.0377
-   (8,4)       0.0568
-   (1,5)       0.0192
-   (4,5)       0.0698
-   (6,5)       0.0108
-   (7,5)       0.0730
-   (1,6)       0.0179
-   (2,6)       0.0097
-   (3,6)       0.0256
-   (4,6)       0.0193
-   (5,6)       0.0215
-   (7,6)       0.0255
-   (8,6)       0.0209
-   (5,7)       0.1890
-   (1,8)       0.1062
-   (2,9)       0.0240
-   (3,9)       0.0328
-   (4,9)       0.0376
-   (5,9)       0.0353
-   (6,9)       0.0199
-   (7,9)       0.0063
-   (2,10)      0.0089
-   (3,10)      0.0487
-   (7,10)      0.0482
-   (8,10)      0.0272
-</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>cumerr = 0;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>fullF = full(F);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">for </span><span>i=1:size(F,2)</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>        normalized_col = fullF(:,i)/norm(fullF(:,i));</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>	cumerr = cumerr + norm(NF(:,i) - normalized_col, </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">end</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>cumerr</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>cumerr = 1.5405e-15</div></div></div></div><div  class = 'S8'><span>And as you see it works!</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12'><span>2.6 Faust Concatenation</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>You're probably aware of Matlab arrays concatenation otherwise look this example.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>M = rand(5,5);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>I = eye(5,5);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>[ M; I ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="090D4585" data-scroll-top="null" data-scroll-left="null" data-testid="output_55" data-width="926" style="width: 956px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 926px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">10×5</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:73,&quot;totalColumns&quot;:5,&quot;totalRows&quot;:10,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 367px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    0.4646    0.2921    0.8408    0.8864    0.8112
-    0.9722    0.1937    0.0800    0.1349    0.7004
-    0.9748    0.2559    0.1754    0.6393    0.7324
-    0.3829    0.6570    0.0191    0.6451    0.6932
-    0.6989    0.7678    0.1076    0.1505    0.2574
+- FACTOR 4 (real) SPARSE, size 10x10, density 0.5, nnz 50</div></div></div></div></div></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S13'></div></div></div><h4  class = 'S12' id = 'H_BD8A7C70' ><span>2.3 Faust Multiplication by a Vector or a Matrix</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>When you multiply a Faust by a vector or a matrix (the number of nrows must match the number of Faust columns), you'll get respectively a vector or a matrix as result.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>vec = rand(size(F, 2), 1);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>F*vec</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="E32A5952" data-testid="output_28" data-width="1172" style="width: 1202px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 1172px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">10×1</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:66,&quot;totalColumns&quot;:1,&quot;totalRows&quot;:10,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 68px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">   41.0501
+   49.2117
+   45.6702
+   55.8418
+   30.6538
+   39.0950
+   44.5995
+   52.0164
+   39.0722
+   25.9827
+</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div></div><div  class = 'S8'><span>Let's launch a timer to compare the execution times of Faust-vector multiplication and Faust's dense matrix-vector multiplication.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F_times_vec = @() F*vec</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="DB9DDB2D" data-testid="output_29" data-width="1172" data-height="34" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">F_times_vec = <span class="headerElement">function_handle with value:</span></span></div><div>    @()F*vec
+</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'><span style="white-space: pre;"><span>FD = full(F);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>FD_times_vec = @() FD*vec</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="6F9B4A04" data-testid="output_30" data-width="1172" data-height="34" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">FD_times_vec = <span class="headerElement">function_handle with value:</span></span></div><div>    @()FD*vec
+</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(F_times_vec)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 3.5931e-05</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(FD_times_vec)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsWarningElement" uid="440D990A" data-testid="output_32" data-width="1172" data-height="18" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="diagnosticMessage-wrapper diagnosticMessage-warningType"><div class="diagnosticMessage-messagePart">Warning: The measured time for F may be inaccurate because it is running too fast. Try measuring something that takes longer.</div><div class="diagnosticMessage-stackPart"></div></div></div><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 7.1565e-07</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>all(all(F*vec-FD*vec &lt; 1e-7))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="6E3CDBC9" data-testid="output_34" data-width="1172" data-height="34" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
+</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>rcg(F)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.4000</div></div></div></div><div  class = 'S8'><span>When the RCG is lower than 1 the Faust-vector multiplication is slower. Making a random Faust with a large RCG (small density) shows better results.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>G = matfaust.rand(1024, 1024, </span><span style="color: rgb(160, 32, 240);">'num_factors'</span><span>, 3, </span><span style="color: rgb(160, 32, 240);">'density'</span><span>, .001, </span><span style="color: rgb(160, 32, 240);">'fac_type'</span><span>, </span><span style="color: rgb(160, 32, 240);">'sparse'</span><span>)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="BD7CF9EC" data-testid="output_36" data-width="1172" data-height="76" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">G = </span></div><div>Faust size 1024x1024, density 0.00292969, nnz_sum 3072, 3 factor(s): 
+- FACTOR 0 (real) SPARSE, size 1024x1024, density 0.000976563, nnz 1024
+- FACTOR 1 (real) SPARSE, size 1024x1024, density 0.000976563, nnz 1024
+- FACTOR 2 (real) SPARSE, size 1024x1024, density 0.000976563, nnz 1024</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'><span style="white-space: pre;"><span>GD = full(G);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>vec2 = rand(1024, 1);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>timeit(@() G*vec2)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 6.9531e-05</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() GD*vec2)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.0016</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>rcg(G)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 341.3333</div></div></div></div><div  class = 'S8'><span>It goes without saying that a big RCG gives a big speedup to the Faust-vector multiplication relatively to the corresponding (dense) matrix-vector multiplication. I hope the example above has finished to convince you.</span></div><div  class = 'S0'><span>Just to convince you as well of the Faust-vector multiplication accuracy:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>norm(G*vec2 - GD*vec2)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 4.5356e-16</div></div></div></div><div  class = 'S8'><span>What applies to Faust-vector multiplication remains valid about Faust-matrix multiplication. Take a look:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>M = rand(1024,32);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>timeit(@() G*M)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.0038</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() GD*M)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.0129</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(GD*M-G*M)/norm(GD*M)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 6.6552e-17</div></div></div></div><div  class = 'S8'><span>Well, what do we see? A quicker Faust-matrix multiplication than the matrix-matrix corresponding multiplication, though a good accuracy of the Faust-matrix multiplication is also clearly confirmed.</span></div><div  class = 'S0'><span>These examples are somehow theoretical because we cherry-pick the Faust to ensure that the RCG is good to accelerate the muplication, but at least it shows the potential speedup using Faust objects.</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12' id = 'H_7AF16EFF' ><span>2.4 Faust Norms</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>The Faust class provides a norm function which handles different types of norms. This function is really close to Matlab </span><a href = "https://www.mathworks.com/help/matlab/ref/norm.htm"><span>norm</span></a><span> function.</span></div><div  class = 'S0'><span>In the following example, three of the four norms available are computed.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>norm(F,1)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 193.4601</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(F, inf)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 146.0016</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(F, </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 123.8180</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(F), 1)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 193.4601</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(F), inf)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 146.0016</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>norm(full(F), </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 123.8180</div></div></div></div><div  class = 'S8'><span>Perfect! But a last norm is available, this is the Faust's 2-norm. Let's see in the next small benchmark how the Faust 2-norm is being computed faster than the Faust's dense matrix 2-norm.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>timeit(@() norm(G, 2))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.0021</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() norm(GD, 2))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 1.5850</div></div></div></div><div  class = 'S8'><span>The power-iteration algorithm implemented in the FAµ?ST C++ core is faster on G and the relative error is not bad too. The norm computation is faster as it benefits from faster Faust-vector multiplication.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>err = abs((norm(G, 2)-norm(GD,2))/norm(GD,2))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>err = 0.0034</div></div></div></div><div  class = 'S8'><span></span></div><h4  class = 'S12' id = 'H_1070C649' ><span>2.5 Faust Normalizations</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>The FAµST API proposes a group of normalizations. They correspond to the norms available and discussed above.</span></div><div  class = 'S0'><span>It's possible to normalize along columns or rows with any type of these norms.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F = matfaust.rand(5, 10)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="941A9DF5" data-testid="output_53" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">F = </span></div><div>Faust size 5x10, density 3.1, nnz_sum 155, 5 factor(s): 
+- FACTOR 0 (real) SPARSE, size 5x6, density 0.666667, nnz 20
+- FACTOR 1 (real) SPARSE, size 6x5, density 1, nnz 30
+- FACTOR 2 (real) SPARSE, size 5x9, density 0.555556, nnz 25
+- FACTOR 3 (real) SPARSE, size 9x7, density 0.714286, nnz 45
+- FACTOR 4 (real) SPARSE, size 7x10, density 0.5, nnz 35</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>NF = normalize(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="BA562C8A" data-testid="output_54" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">NF = </span></div><div>Faust size 5x10, density 3.1, nnz_sum 155, 5 factor(s): 
+- FACTOR 0 (real) SPARSE, size 5x6, density 0.666667, nnz 20
+- FACTOR 1 (real) SPARSE, size 6x5, density 1, nnz 30
+- FACTOR 2 (real) SPARSE, size 5x9, density 0.555556, nnz 25
+- FACTOR 3 (real) SPARSE, size 9x7, density 0.714286, nnz 45
+- FACTOR 4 (real) SPARSE, size 7x10, density 0.5, nnz 35</div></div></div></div></div></div><div  class = 'S8'><span>The API doc is </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/classmatfaust_1_1Faust.html#abb16b52adc84eadc2835ae0542f75b90"><span>here</span></a><span>.</span></div><div  class = 'S0'><span>What's interesting here is the fact that Faust.normalize returns a Faust object. Combined with slicing (that you will see soon), normalize is useful to write algorithms such as Orthonormal Matching Pursuit (OMP), which require matrices with L2-normalized columns, in a way that makes them able to leverage the acceleration offered by the FAµST API.</span></div><div  class = 'S0'><span>The normalization coded in C++ is memory optimized (it never builds the dense matrix full(F) to compute the norms of the columns/rows). In the same goal the factors composing the Faust object NF are not duplicated in memory from same factors F, they're used as is with an additional factor giving the appropriate scaling.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>factors(NF, 5)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement scrollableOutput" uid="25AC5892" data-testid="output_55" data-width="1172" data-height="510" data-hashorizontaloverflow="false" data-scroll-top="174" data-scroll-left="0" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>   (2,1)       0.0110
+   (4,1)       0.0137
+   (5,1)       0.0326
+   (7,1)       0.0454
+   (1,2)       0.0144
+   (2,2)       0.0126
+   (3,2)       0.0399
+   (5,2)       0.0317
+   (6,2)       0.0429
+   (1,3)       0.0278
+   (2,3)       0.0037
+   (4,3)       0.1015
+   (3,4)       0.0710
+   (5,4)       0.0461
+   (3,5)       0.0745
+   (5,5)       0.0229
+   (6,5)       0.0371
+   (4,6)       0.1228
+   (2,7)       0.0190
+   (3,7)       0.0317
+   (6,7)       0.0302
+   (7,7)       0.0329
+   (1,8)       0.0869
+   (7,8)       0.0543
+   (1,9)       0.0014
+   (2,9)       0.0292
+   (3,9)       0.0036
+   (4,9)       0.0237
+   (5,9)       0.0252
+   (6,9)       0.0051
+   (7,9)       0.0179
+   (1,10)      0.0555
+   (4,10)      0.0715
+   (6,10)      0.0124
+   (7,10)      0.0101
+</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>cumerr = 0;</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>fullF = full(F);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">for </span><span>i=1:size(F,2)</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>        normalized_col = fullF(:,i)/norm(fullF(:,i));</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>	cumerr = cumerr + norm(NF(:,i) - normalized_col, </span><span style="color: rgb(160, 32, 240);">'fro'</span><span>);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(0, 0, 255);">end</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>cumerr</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>cumerr = 1.8195e-15</div></div></div></div><div  class = 'S8'><span>And as you see it works!</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12' id = 'H_B081D439' ><span>2.6 Faust Concatenation</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>You're probably aware of Matlab arrays concatenation otherwise look this example.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>M = rand(5,5);</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>I = eye(5,5);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>[ M; I ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="6461B301" data-testid="output_57" data-width="1172" style="width: 1202px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 1172px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">10×5</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:66,&quot;totalColumns&quot;:5,&quot;totalRows&quot;:10,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 332px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    0.9498    0.2879    0.9385    0.8808    0.2407
+    0.2554    0.0749    0.4457    0.8527    0.8250
+    0.6174    0.3690    0.7012    0.6056    0.8516
+    0.9982    0.1396    0.2804    0.0755    0.2322
+    0.5436    0.1280    0.8271    0.0053    0.5111
     1.0000         0         0         0         0
          0    1.0000         0         0         0
          0         0    1.0000         0         0
          0         0         0    1.0000         0
          0         0         0         0    1.0000
-</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(34, 139, 34);">% it was vertical concatenation, now let's concatenate horizontally</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>[ M I ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="977EBA77" data-scroll-top="null" data-scroll-left="null" data-testid="output_56" data-width="926" style="width: 956px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 926px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">5×10</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:73,&quot;totalColumns&quot;:10,&quot;totalRows&quot;:5,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 732px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    0.4646    0.2921    0.8408    0.8864    0.8112    1.0000         0         0         0         0
-    0.9722    0.1937    0.0800    0.1349    0.7004         0    1.0000         0         0         0
-    0.9748    0.2559    0.1754    0.6393    0.7324         0         0    1.0000         0         0
-    0.3829    0.6570    0.0191    0.6451    0.6932         0         0         0    1.0000         0
-    0.6989    0.7678    0.1076    0.1505    0.2574         0         0         0         0    1.0000
-</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div></div><div  class = 'S8'><span>I'm sure you guessed that likewise you can concatenate Faust objects. That's right!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>[ F ; F]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="F4BC5FB0" data-scroll-top="null" data-scroll-left="null" data-testid="output_57" data-width="926" data-height="118" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 4.2, nnz_sum 420, 6 factor(s): 
-- FACTOR 0 (real) SPARSE, size 10x16, density 0.3125, nnz 50
-- FACTOR 1 (real) SPARSE, size 16x18, density 0.277778, nnz 80
-- FACTOR 2 (real) SPARSE, size 18x20, density 0.25, nnz 90
-- FACTOR 3 (real) SPARSE, size 20x16, density 0.3125, nnz 100
-- FACTOR 4 (real) SPARSE, size 16x20, density 0.25, nnz 80
-- FACTOR 5 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>C = [ F F ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="1E92197F" data-scroll-top="null" data-scroll-left="null" data-testid="output_58" data-width="926" data-height="118" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">C = </span></div><div>Faust size 5x20, density 4.1, nnz_sum 410, 6 factor(s): 
+</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span style="color: rgb(34, 139, 34);">% it was vertical concatenation, now let's concatenate horizontally</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>[ M I ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="040B15C1" data-testid="output_58" data-width="1172" style="width: 1202px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 1172px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">5×10</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:66,&quot;totalColumns&quot;:10,&quot;totalRows&quot;:5,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 662px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    0.9498    0.2879    0.9385    0.8808    0.2407    1.0000         0         0         0         0
+    0.2554    0.0749    0.4457    0.8527    0.8250         0    1.0000         0         0         0
+    0.6174    0.3690    0.7012    0.6056    0.8516         0         0    1.0000         0         0
+    0.9982    0.1396    0.2804    0.0755    0.2322         0         0         0    1.0000         0
+    0.5436    0.1280    0.8271    0.0053    0.5111         0         0         0         0    1.0000
+</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div></div><div  class = 'S8'><span>I'm sure you guessed that likewise you can concatenate Faust objects. That's right!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>[ F ; F]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="16C5D37B" data-testid="output_59" data-width="1172" data-height="118" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 10x10, density 3.3, nnz_sum 330, 6 factor(s): 
+- FACTOR 0 (real) SPARSE, size 10x12, density 0.333333, nnz 40
+- FACTOR 1 (real) SPARSE, size 12x10, density 0.5, nnz 60
+- FACTOR 2 (real) SPARSE, size 10x18, density 0.277778, nnz 50
+- FACTOR 3 (real) SPARSE, size 18x14, density 0.357143, nnz 90
+- FACTOR 4 (real) SPARSE, size 14x20, density 0.25, nnz 70
+- FACTOR 5 (real) SPARSE, size 20x10, density 0.1, nnz 20</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S14'></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>C = [ F F ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="538113B0" data-testid="output_60" data-width="1172" data-height="118" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">C = </span></div><div>Faust size 5x20, density 3.2, nnz_sum 320, 6 factor(s): 
 - FACTOR 0 (real) SPARSE, size 5x10, density 0.2, nnz 10
-- FACTOR 1 (real) SPARSE, size 10x16, density 0.3125, nnz 50
-- FACTOR 2 (real) SPARSE, size 16x18, density 0.277778, nnz 80
-- FACTOR 3 (real) SPARSE, size 18x20, density 0.25, nnz 90
-- FACTOR 4 (real) SPARSE, size 20x16, density 0.3125, nnz 100
-- FACTOR 5 (real) SPARSE, size 16x20, density 0.25, nnz 80</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>full(C) - [ full(F) full(F) ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="FA1B206B" data-scroll-top="null" data-scroll-left="null" data-testid="output_59" data-width="926" style="width: 956px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 926px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">5×20</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:44,&quot;totalColumns&quot;:20,&quot;totalRows&quot;:5,&quot;charsPerColumn&quot;:6}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 882px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
+- FACTOR 1 (real) SPARSE, size 10x12, density 0.333333, nnz 40
+- FACTOR 2 (real) SPARSE, size 12x10, density 0.5, nnz 60
+- FACTOR 3 (real) SPARSE, size 10x18, density 0.277778, nnz 50
+- FACTOR 4 (real) SPARSE, size 18x14, density 0.357143, nnz 90
+- FACTOR 5 (real) SPARSE, size 14x20, density 0.25, nnz 70</div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>full(C) - [ full(F) full(F) ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="53EA1128" data-testid="output_61" data-width="1172" style="width: 1202px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 1172px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">ans = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">5×20</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:40,&quot;totalColumns&quot;:20,&quot;totalRows&quot;:5,&quot;charsPerColumn&quot;:6}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 802px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
      0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
      0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
      0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
      0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
-</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div></div><div  class = 'S8'><span>The difference of the two concatenations is full of zeros, so of course it works!</span></div><div  class = 'S0'><span>As you noticed the Faust concatenation is stable, you give two Fausts and you get a Faust again. Besides, it's possible to concatenate an arbitrary number of Faust objects.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>[F C C F ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="655726DA" data-scroll-top="null" data-scroll-left="null" data-testid="output_60" data-width="926" data-height="160" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 5x60, density 4.25, nnz_sum 1275, 9 factor(s): 
+</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div></div><div  class = 'S8'><span>The difference of the two concatenations is full of zeros, so of course it works!</span></div><div  class = 'S0'><span>As you noticed the Faust concatenation is stable, you give two Fausts and you get a Faust again. Besides, it's possible to concatenate an arbitrary number of Faust objects.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>[F C C F ]</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="D534238F" data-testid="output_62" data-width="1172" data-height="160" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 5x60, density 3.35, nnz_sum 1005, 9 factor(s): 
 - FACTOR 0 (real) SPARSE, size 5x10, density 0.2, nnz 10
 - FACTOR 1 (real) SPARSE, size 10x15, density 0.1, nnz 15
 - FACTOR 2 (real) SPARSE, size 15x20, density 0.0666667, nnz 20
 - FACTOR 3 (real) SPARSE, size 20x30, density 0.05, nnz 30
-- FACTOR 4 (real) SPARSE, size 30x48, density 0.104167, nnz 150
-- FACTOR 5 (real) SPARSE, size 48x54, density 0.0925926, nnz 240
-- FACTOR 6 (real) SPARSE, size 54x60, density 0.0833333, nnz 270
-- FACTOR 7 (real) SPARSE, size 60x48, density 0.104167, nnz 300
-- FACTOR 8 (real) SPARSE, size 48x60, density 0.0833333, nnz 240</div></div></div></div></div></div><div  class = 'S8'><span>As an exercise, you can write the factors of the Faust</span><span style=' font-family: monospace;'> [F ; F]</span><span>, F being any Faust.</span></div><div  class = 'S0'><span style=' font-weight: bold;'>Hint</span><span>: the block-diagonal matrices are around here.</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12'><span>2.7 Faust Indexing and Slicing</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>Sometimes you need to access the dense matrix corresponding to a Faust or an element of it (by the way, note that it's costly).</span></div><div  class = 'S0'><span>Let's access a Faust item:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F(3, 4)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 4.4882</div></div></div></div><div  class = 'S8'><span>Why is it costly? Because it essentially converts the Faust to its dense form (modulo some optimizations) to just access one item.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>timeit(@() F(3, 4))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 4.8594e-04</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() FD(3, 4))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsWarningElement" uid="FF24A602" data-scroll-top="null" data-scroll-left="null" data-testid="output_63" data-width="926" data-height="18" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="diagnosticMessage-wrapper diagnosticMessage-warningType"><div class="diagnosticMessage-messagePart">Warning: The measured time for F may be inaccurate because it is running too fast. Try measuring something that takes longer.</div><div class="diagnosticMessage-stackPart"></div></div></div><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 3.5386e-07</div></div></div></div><div  class = 'S8'><span>It's totally the same syntax as Matlab but much slower so use it with care.</span></div><div  class = 'S0'><span>The more advanced slicing operation uses also the same syntax as Matlab:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F(3:5, 4:10)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="BCB69AEF" data-scroll-top="null" data-scroll-left="null" data-testid="output_65" data-width="926" data-height="104" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 3x7, density 8.38095, nnz_sum 176, 5 factor(s): 
-- FACTOR 0 (real) SPARSE, size 3x8, density 0.625, nnz 15
-- FACTOR 1 (real) SPARSE, size 8x9, density 0.555556, nnz 40
-- FACTOR 2 (real) SPARSE, size 9x10, density 0.5, nnz 45
-- FACTOR 3 (real) SPARSE, size 10x8, density 0.625, nnz 50
-- FACTOR 4 (real) SPARSE, size 8x7, density 0.464286, nnz 26</div></div></div></div></div></div><div  class = 'S8'><span>Here again, the result is another Faust. But this is not a full copy, it makes profit of memory views implemented behind in C++. Solely the first and last factors of the sliced Faust are new in memory, the others are just referenced from the initial Faust F. So use it with no worry for a Faust with a lot of factors!</span></div><div  class = 'S0'><span>The Matlab indexing by arbitrary vector of integers has also been implemented in the FAµ?ST C++ core, let's try it:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>I = [2, 4, 3];</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>FI = F(I,:);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>matfaust.isFaust(FI)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="100B3F16" data-scroll-top="null" data-scroll-left="null" data-testid="output_66" data-width="926" data-height="34" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
-</div></div></div></div></div></div><div  class = 'S8'><span>Again, it's a Faust but is it really working? Verify!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>FID = full(FI)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="A6572BAA" data-scroll-top="null" data-scroll-left="null" data-testid="output_67" data-width="926" style="width: 956px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 926px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">FID = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">3×10</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:73,&quot;totalColumns&quot;:10,&quot;totalRows&quot;:3,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 732px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    8.9957   11.7083   14.8396    6.6188    7.8696   23.0172    2.3615    1.9188   10.7625   10.2643
-    4.8183    7.0419    9.1435    3.7627    4.6130   13.9024    1.5176    1.3094    6.0943    5.9542
-    6.0062    8.0569   10.5489    4.4882    5.6134   15.9861    1.8449    1.3966    7.3818    6.8053
-</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>FD = full(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="3DAF38DC" data-scroll-top="null" data-scroll-left="null" data-testid="output_68" data-width="926" style="width: 956px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 926px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">FD = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">5×10</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:73,&quot;totalColumns&quot;:10,&quot;totalRows&quot;:5,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 732px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    6.1737    8.5499   11.1382    4.7044    5.6684   17.0015    1.7882    1.5646    7.5773    7.4382
-    8.9957   11.7083   14.8396    6.6188    7.8696   23.0172    2.3615    1.9188   10.7625   10.2643
-    6.0062    8.0569   10.5489    4.4882    5.6134   15.9861    1.8449    1.3966    7.3818    6.8053
-    4.8183    7.0419    9.1435    3.7627    4.6130   13.9024    1.5176    1.3094    6.0943    5.9542
-    4.8377    6.0456    7.7101    3.4253    4.2102   11.7624    1.3160    0.9319    5.7729    5.0566
-</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>all(all(FID(1, :) == FD(I(1), :) &amp; FID(2, :) == FD(I(2), :) &amp; FID(3, :) == FD(I(3), :)))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="3E59CE19" data-scroll-top="null" data-scroll-left="null" data-testid="output_69" data-width="926" data-height="34" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
-</div></div></div></div></div></div><div  class = 'S8'><span>Yes it is!</span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span>This is the notebook's end, you have now a global view of what the Faust class is able and what kind of high-level algorithms it is ready for. You might be interested to read other notebooks, just go back to the </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/index.html"><span>page</span></a><span> where you got this one.</span></div><div  class = 'S0'><span style=' font-weight: bold;'>Note:</span><span> this livescript was executed using the following matfaust version:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>matfaust.version()</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="B059AC81" data-testid="output_70" data-width="926" data-height="20" data-hashorizontaloverflow="false" style="width: 956px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span>'2.10.17'</div></div></div></div></div><div class="inlineWrapper"><div  class = 'S15'></div></div></div><div  class = 'S8'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'></div></div><br>
+- FACTOR 4 (real) SPARSE, size 30x36, density 0.111111, nnz 120
+- FACTOR 5 (real) SPARSE, size 36x30, density 0.166667, nnz 180
+- FACTOR 6 (real) SPARSE, size 30x54, density 0.0925926, nnz 150
+- FACTOR 7 (real) SPARSE, size 54x42, density 0.119048, nnz 270
+- FACTOR 8 (real) SPARSE, size 42x60, density 0.0833333, nnz 210</div></div></div></div></div></div><div  class = 'S8'><span>As an exercise, you can write the factors of the Faust</span><span style=' font-family: monospace;'> [F ; F]</span><span>, F being any Faust.</span></div><div  class = 'S0'><span style=' font-weight: bold;'>Hint</span><span>: the block-diagonal matrices are around here.</span></div><div  class = 'S0'><span></span></div><h4  class = 'S12' id = 'H_EBCC81E9' ><span>2.7 Faust Indexing and Slicing</span></h4><div  class = 'S0'><span></span></div><div  class = 'S0'><span>Sometimes you need to access the dense matrix corresponding to a Faust or an element of it (by the way, note that it's costly).</span></div><div  class = 'S0'><span>Let's access a Faust item:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F(3, 4)</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 4.5517</div></div></div></div><div  class = 'S8'><span>Why is it costly? Because it essentially converts the Faust to its dense form (modulo some optimizations) to just access one item.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>timeit(@() F(3, 4))</span></span></div><div  class = 'S6'><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0.0011</div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>timeit(@() FD(3, 4))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsWarningElement" uid="6D482C81" data-testid="output_65" data-width="1172" data-height="18" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="diagnosticMessage-wrapper diagnosticMessage-warningType"><div class="diagnosticMessage-messagePart">Warning: The measured time for F may be inaccurate because it is running too fast. Try measuring something that takes longer.</div><div class="diagnosticMessage-stackPart"></div></div></div><div class='variableElement' style='font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; '>ans = 0</div></div></div></div><div  class = 'S8'><span>It's totally the same syntax as Matlab but much slower so use it with care.</span></div><div  class = 'S0'><span>The more advanced slicing operation uses also the same syntax as Matlab:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>F(3:5, 4:10)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="FB448FDC" data-testid="output_67" data-width="1172" data-height="104" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span></div><div>Faust size 3x7, density 6.42857, nnz_sum 135, 5 factor(s): 
+- FACTOR 0 (real) SPARSE, size 3x6, density 0.666667, nnz 12
+- FACTOR 1 (real) SPARSE, size 6x5, density 1, nnz 30
+- FACTOR 2 (real) SPARSE, size 5x9, density 0.555556, nnz 25
+- FACTOR 3 (real) SPARSE, size 9x7, density 0.714286, nnz 45
+- FACTOR 4 (real) SPARSE, size 7x7, density 0.469388, nnz 23</div></div></div></div></div></div><div  class = 'S8'><span>Here again, the result is another Faust. But this is not a full copy, it makes profit of memory views implemented behind in C++. Solely the first and last factors of the sliced Faust are new in memory, the others are just referenced from the initial Faust F. So use it with no worry for a Faust with a lot of factors!</span></div><div  class = 'S0'><span>The Matlab indexing by arbitrary vector of integers has also been implemented in the FAµ?ST C++ core, let's try it:</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S9'><span style="white-space: pre;"><span>I = [2, 4, 3];</span></span></div></div><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre;"><span>FI = F(I,:);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S10'><span style="white-space: pre;"><span>matfaust.isFaust(FI)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="D9515D09" data-testid="output_68" data-width="1172" data-height="34" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   1
+</div></div></div></div></div></div><div  class = 'S8'><span>Again, it's a Faust but is it really working? Verify!</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>FID = full(FI)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="4D785859" data-testid="output_69" data-width="1172" style="width: 1202px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 1172px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">FID = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">3×10</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:66,&quot;totalColumns&quot;:10,&quot;totalRows&quot;:3,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 662px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    8.6416    8.6416    8.8458    8.6416    4.2308    8.6416    6.3638    8.6416    5.6379    8.6416
+    6.0348    6.0348    6.6685    6.0348    2.9693    6.0348    4.9064    6.0348    4.3525    6.0348
+    7.2944    7.2944    7.5158    7.2944    3.6321    7.2944    5.4321    7.2944    4.8335    7.2944
+</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>FD = full(F)</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableMatrixElement" uid="AF83E6B1" data-testid="output_70" data-width="1172" style="width: 1202px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="matrixElement veSpecifier" style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="veVariableName variableNameElement double" style="width: 1172px; white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span style="white-space: normal; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">FD = </span><span class="veVariableValueSummary veMetaSummary" style="white-space: normal; font-style: normal; color: rgb(179, 179, 179); font-size: 12px;">5×10</span></div><div class="valueContainer" data-layout="{&quot;columnWidth&quot;:66,&quot;totalColumns&quot;:10,&quot;totalRows&quot;:5,&quot;charsPerColumn&quot;:10}" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="variableValue" style="width: 662px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">    6.0348    6.6685    2.9693    4.9064    4.3525    2.5213    7.5575    1.7875   10.7148    3.5887
+    8.6416    8.8458    4.2308    6.3638    5.6379    3.6127   10.5910    2.5712   15.2344    5.0702
+    6.6132    6.4056    3.3165    4.5517    4.0479    2.8073    8.1196    2.0966   11.5987    3.9959
+    7.2944    7.5158    3.6321    5.4321    4.8335    3.0580    9.0816    2.2985   12.8331    4.4162
+   11.1903   11.6055    5.7530    8.4704    7.5258    4.9098   13.9732    3.4261   19.9193    6.8549
+</div><div class="horizontalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div><div class="verticalEllipsis hide" style="white-space: nowrap; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"></div></div></div></div></div></div><div class="inlineWrapper outputs"><div  class = 'S7'><span style="white-space: pre;"><span>all(all(FID(1, :) == FD(I(1), :) &amp; FID(2, :) == FD(I(2), :) &amp; FID(3, :) == FD(I(3), :)))</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="ACAA515F" data-testid="output_71" data-width="1172" data-height="34" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = <span class="headerElement">logical</span></span></div><div>   0
+</div></div></div></div></div></div><div  class = 'S8'><span>Yes it is!</span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span>This is the notebook's end, you have now a global view of what the Faust class is able and what kind of high-level algorithms it is ready for. You might be interested to read other notebooks, just go back to the </span><a href = "https://faustgrp.gitlabpages.inria.fr/faust/last-doc/html/index.html"><span>page</span></a><span> where you got this one.</span></div><div  class = 'S0'><span style=' font-weight: bold;'>Note:</span><span> this livescript was executed using the following matfaust version:</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S5'><span style="white-space: pre;"><span>matfaust.version()</span></span></div><div  class = 'S6'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="A7CDA7FB" data-testid="output_72" data-width="1172" data-height="20" data-hashorizontaloverflow="false" style="width: 1202px; max-height: 261px;"><div class="textElement"><div><span class="variableNameElement">ans = </span>'2.10.29'</div></div></div></div></div></div><div  class = 'S8'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'><span></span></div><div  class = 'S0'></div></div><br>
 <!-- 
 ##### SOURCE BEGIN #####
 %% 
@@ -325,31 +329,33 @@
 %% Table of Contents:
 % 
 % 
-% 1. Getting Basic Information about a Faust Object
+% <internal:H_E9BF5BFF 1. Getting Basic Information about a Faust Object>
+% 
+% <internal:H_95BE1343 1.1 Obtaining Dimension and Scalar Type Information>
+% 
+% <internal:H_0602CE09 1.2 Obtaining Other Faust Specific Information>
 % 
-% 1.1 Obtaining Dimension and Scalar Type Information
+% <internal:H_2CF60B15 1.3 Plotting a Faust>
 % 
-% 1.2 Obtaining Other Faust Specific Information
+% <internal:H_C5C21250 1.4 About Sparsity!>
 % 
-% 1.3 Plotting a Faust
 % 
-% 1.4 About Sparsity!
 % 
-% 2. Faust Algebra and other Operations
+% <internal:H_73387A87 2. Faust Algebra and other Operations>
 % 
-% 2.1 Transpose, conjugate, transconjugate
+% <internal:H_5E556DD4 2.1 Transpose, conjugate, transconjugate>
 % 
-% 2.2 Add, Subtract and Multiply
+% <internal:H_99DA98B4 2.2 Add, Subtract and Multiply>
 % 
-% 2.3 Faust Multiplication by a Vector or a Matrix
+% <internal:H_BD8A7C70 2.3 Faust Multiplication by a Vector or a Matrix>
 % 
-% 2.4 Faust Norms
+% <internal:H_7AF16EFF 2.4 Faust Norms>
 % 
-% 2.5 Faust Normalizations
+% <internal:H_1070C649 2.5 Faust Normalizations>
 % 
-% 2.6 Faust Concatenation
+% <internal:H_B081D439 2.6 Faust Concatenation>
 % 
-% 2.7 Faust Indexing and Slicing
+% <internal:H_EBCC81E9 2.7 Faust Indexing and Slicing>
 % 
 % 
 %% 1. Getting Basic Information about a Faust Object
@@ -450,8 +456,21 @@ Faust({factors(F, 3), factors(F, 4)})
 %% 1.3 Plotting a Faust
 % 
 % 
-% Available soon!
+% It's quite useful to print a |Faust| as we've seen before, calling disp(F), 
+% |display(F)| or just |F| in an interactive terminal but this is wordy.  How 
+% about plotting a Faust in a more graphical fashion ?
+
+imagesc(F)
+%% 
+% What do we see above ? On the bottom right is the dense matrix associated 
+% to F, obtained with |full(F)|. On the top are the indexed factors of F. Note 
+% that you can change the default <https://www.mathworks.com/help/matlab/ref/colormap.html 
+% colormap> in matplotlib parameters.
 % 
+% Let's look at a last example:
+
+imagesc(Faust({eye(5,4),eye(4,10)}))
+%% 
 % 
 %% 1.4 About Sparsity!
 % 
@@ -481,6 +500,7 @@ rcg(F)
 % According to its RCG, this Faust doesn't seem to be of any help for optimization 
 % but look at the graphic the next script generates:
 
+figure()
 nfactors = 3;
 startd = 0.01;
 endd = 1;
@@ -812,7 +832,6 @@ all(all(FID(1, :) == FD(I(1), :) & FID(2, :) == FD(I(2), :) & FID(3, :) == FD(I(
 % *Note:* this livescript was executed using the following matfaust version:
 
 matfaust.version()
-
 %% 
 % 
 % 
@@ -824,8 +843,6 @@ matfaust.version()
 % 
 % 
 % 
-% 
-% 
 %
 ##### SOURCE END #####
 --></body></html>
\ No newline at end of file
-- 
GitLab