Documentation updated

This commit is contained in:
fjosw 2022-05-12 14:17:16 +00:00
parent 6fa3b1a201
commit 1a40fad8a7
2 changed files with 108 additions and 104 deletions

View file

@ -298,86 +298,88 @@
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="k">def</span> <span class="nf">cholesky</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="sd">&quot;&quot;&quot;Cholesky decomposition of Obs or CObs valued matrices.&quot;&quot;&quot;</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="k">return</span> <span class="n">_mat_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cholesky</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a><span class="k">def</span> <span class="nf">det</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="sd">&quot;&quot;&quot;Determinant of Obs valued matrices.&quot;&quot;&quot;</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="n">_scalar_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">det</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a><span class="k">def</span> <span class="nf">_scalar_mat_op</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="sd">&quot;&quot;&quot;Computes the matrix to scalar operation op to a given matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">def</span> <span class="nf">_mat</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">dim</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)))</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">mat</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">dim</span><span class="p">):</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">dim</span><span class="p">):</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="n">dim</span> <span class="o">*</span> <span class="n">i</span><span class="p">])</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">mat</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">mat</span><span class="p">))</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="sd">&quot;&quot;&quot;Cholesky decomposition of Obs valued matrices.&quot;&quot;&quot;</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">ravel</span><span class="p">()):</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Cholesky decomposition is not implemented for CObs.&quot;</span><span class="p">)</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">return</span> <span class="n">_mat_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cholesky</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a><span class="k">def</span> <span class="nf">det</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="sd">&quot;&quot;&quot;Determinant of Obs valued matrices.&quot;&quot;&quot;</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">return</span> <span class="n">_scalar_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">det</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a><span class="k">def</span> <span class="nf">_scalar_mat_op</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="sd">&quot;&quot;&quot;Computes the matrix to scalar operation op to a given matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">def</span> <span class="nf">_mat</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">dim</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)))</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">mat</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">dim</span><span class="p">):</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">dim</span><span class="p">):</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="n">dim</span> <span class="o">*</span> <span class="n">i</span><span class="p">])</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">mat</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">raveled_obs</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o">*</span> <span class="p">(</span><span class="n">obs</span><span class="o">.</span><span class="n">ravel</span><span class="p">()))</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Unproper type of input.&#39;</span><span class="p">)</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="n">_mat</span><span class="p">,</span> <span class="n">raveled_obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a><span class="k">def</span> <span class="nf">_mat_mat_op</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="sd">&quot;&quot;&quot;Computes the matrix to matrix operation op to a given matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="c1"># Use real representation to calculate matrix operations for complex matrices</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs</span><span class="o">.</span><span class="n">ravel</span><span class="p">()):</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">obs</span><span class="p">)</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">B</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">obs</span><span class="p">)</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">obs</span><span class="p">):</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="s1">&#39;real&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="s1">&#39;imag&#39;</span><span class="p">):</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">A</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">real</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">B</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">imag</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">A</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">B</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.0</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">big_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">block</span><span class="p">([[</span><span class="n">A</span><span class="p">,</span> <span class="o">-</span><span class="n">B</span><span class="p">],</span> <span class="p">[</span><span class="n">B</span><span class="p">,</span> <span class="n">A</span><span class="p">]])</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">op_big_matrix</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">op</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="p">[</span><span class="n">big_matrix</span><span class="p">],</span> <span class="n">array_mode</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">dim</span> <span class="o">=</span> <span class="n">op_big_matrix</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">op_A</span> <span class="o">=</span> <span class="n">op_big_matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">:</span> <span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">]</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">op_B</span> <span class="o">=</span> <span class="n">op_big_matrix</span><span class="p">[</span><span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">:,</span> <span class="mi">0</span><span class="p">:</span> <span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">]</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">op_A</span><span class="p">)</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">op_A</span><span class="p">):</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">res</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">CObs</span><span class="p">(</span><span class="n">op_A</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">],</span> <span class="n">op_B</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">])</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="n">res</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">op</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="p">[</span><span class="n">obs</span><span class="p">],</span> <span class="n">array_mode</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a><span class="k">def</span> <span class="nf">eigh</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues and eigenvectors of a given hermitian matrix of Obs according to np.linalg.eigh.&quot;&quot;&quot;</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">v</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="k">return</span> <span class="n">w</span><span class="p">,</span> <span class="n">v</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="k">def</span> <span class="nf">eig</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues of a given matrix of Obs according to np.linalg.eig.&quot;&quot;&quot;</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eig</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">return</span> <span class="n">w</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="k">def</span> <span class="nf">pinv</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="sd">&quot;&quot;&quot;Computes the Moore-Penrose pseudoinverse of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">pinv</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="k">def</span> <span class="nf">svd</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="sd">&quot;&quot;&quot;Computes the singular value decomposition of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">u</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">vh</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">2</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="k">return</span> <span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">vh</span><span class="p">)</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="n">op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">mat</span><span class="p">))</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">raveled_obs</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o">*</span> <span class="p">(</span><span class="n">obs</span><span class="o">.</span><span class="n">ravel</span><span class="p">()))</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Unproper type of input.&#39;</span><span class="p">)</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="n">_mat</span><span class="p">,</span> <span class="n">raveled_obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a><span class="k">def</span> <span class="nf">_mat_mat_op</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="sd">&quot;&quot;&quot;Computes the matrix to matrix operation op to a given matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="c1"># Use real representation to calculate matrix operations for complex matrices</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs</span><span class="o">.</span><span class="n">ravel</span><span class="p">()):</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">obs</span><span class="p">)</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">B</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">obs</span><span class="p">)</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">obs</span><span class="p">):</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="s1">&#39;real&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="s1">&#39;imag&#39;</span><span class="p">):</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">A</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">real</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">B</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">imag</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">A</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">B</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.0</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">big_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">block</span><span class="p">([[</span><span class="n">A</span><span class="p">,</span> <span class="o">-</span><span class="n">B</span><span class="p">],</span> <span class="p">[</span><span class="n">B</span><span class="p">,</span> <span class="n">A</span><span class="p">]])</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">op_big_matrix</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">op</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="p">[</span><span class="n">big_matrix</span><span class="p">],</span> <span class="n">array_mode</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">dim</span> <span class="o">=</span> <span class="n">op_big_matrix</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">op_A</span> <span class="o">=</span> <span class="n">op_big_matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">:</span> <span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">]</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">op_B</span> <span class="o">=</span> <span class="n">op_big_matrix</span><span class="p">[</span><span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">:,</span> <span class="mi">0</span><span class="p">:</span> <span class="n">dim</span> <span class="o">//</span> <span class="mi">2</span><span class="p">]</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">op_A</span><span class="p">)</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">op_A</span><span class="p">):</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">res</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">CObs</span><span class="p">(</span><span class="n">op_A</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">],</span> <span class="n">op_B</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">])</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="n">res</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">op</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="p">[</span><span class="n">obs</span><span class="p">],</span> <span class="n">array_mode</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a><span class="k">def</span> <span class="nf">eigh</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues and eigenvectors of a given hermitian matrix of Obs according to np.linalg.eigh.&quot;&quot;&quot;</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">v</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="n">w</span><span class="p">,</span> <span class="n">v</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="k">def</span> <span class="nf">eig</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues of a given matrix of Obs according to np.linalg.eig.&quot;&quot;&quot;</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eig</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="n">w</span>
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="k">def</span> <span class="nf">pinv</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="sd">&quot;&quot;&quot;Computes the Moore-Penrose pseudoinverse of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">pinv</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a><span class="k">def</span> <span class="nf">svd</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="sd">&quot;&quot;&quot;Computes the singular value decomposition of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">u</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">vh</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">2</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">return</span> <span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">vh</span><span class="p">)</span>
</span></pre></div>
</details>
@ -686,13 +688,15 @@ Obs valued.</li>
<details>
<summary>View Source</summary>
<div class="pdoc-code codehilite"><pre><span></span><span id="cholesky-202"><a href="#cholesky-202"><span class="linenos">202</span></a><span class="k">def</span> <span class="nf">cholesky</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="cholesky-203"><a href="#cholesky-203"><span class="linenos">203</span></a> <span class="sd">&quot;&quot;&quot;Cholesky decomposition of Obs or CObs valued matrices.&quot;&quot;&quot;</span>
</span><span id="cholesky-204"><a href="#cholesky-204"><span class="linenos">204</span></a> <span class="k">return</span> <span class="n">_mat_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cholesky</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="cholesky-203"><a href="#cholesky-203"><span class="linenos">203</span></a> <span class="sd">&quot;&quot;&quot;Cholesky decomposition of Obs valued matrices.&quot;&quot;&quot;</span>
</span><span id="cholesky-204"><a href="#cholesky-204"><span class="linenos">204</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">ravel</span><span class="p">()):</span>
</span><span id="cholesky-205"><a href="#cholesky-205"><span class="linenos">205</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Cholesky decomposition is not implemented for CObs.&quot;</span><span class="p">)</span>
</span><span id="cholesky-206"><a href="#cholesky-206"><span class="linenos">206</span></a> <span class="k">return</span> <span class="n">_mat_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cholesky</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span></pre></div>
</details>
<div class="docstring"><p>Cholesky decomposition of Obs or CObs valued matrices.</p>
<div class="docstring"><p>Cholesky decomposition of Obs valued matrices.</p>
</div>
@ -707,9 +711,9 @@ Obs valued.</li>
<details>
<summary>View Source</summary>
<div class="pdoc-code codehilite"><pre><span></span><span id="det-207"><a href="#det-207"><span class="linenos">207</span></a><span class="k">def</span> <span class="nf">det</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="det-208"><a href="#det-208"><span class="linenos">208</span></a> <span class="sd">&quot;&quot;&quot;Determinant of Obs valued matrices.&quot;&quot;&quot;</span>
</span><span id="det-209"><a href="#det-209"><span class="linenos">209</span></a> <span class="k">return</span> <span class="n">_scalar_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">det</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="det-209"><a href="#det-209"><span class="linenos">209</span></a><span class="k">def</span> <span class="nf">det</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="det-210"><a href="#det-210"><span class="linenos">210</span></a> <span class="sd">&quot;&quot;&quot;Determinant of Obs valued matrices.&quot;&quot;&quot;</span>
</span><span id="det-211"><a href="#det-211"><span class="linenos">211</span></a> <span class="k">return</span> <span class="n">_scalar_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">det</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span></pre></div>
</details>
@ -729,11 +733,11 @@ Obs valued.</li>
<details>
<summary>View Source</summary>
<div class="pdoc-code codehilite"><pre><span></span><span id="eigh-259"><a href="#eigh-259"><span class="linenos">259</span></a><span class="k">def</span> <span class="nf">eigh</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="eigh-260"><a href="#eigh-260"><span class="linenos">260</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues and eigenvectors of a given hermitian matrix of Obs according to np.linalg.eigh.&quot;&quot;&quot;</span>
</span><span id="eigh-261"><a href="#eigh-261"><span class="linenos">261</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="eigh-262"><a href="#eigh-262"><span class="linenos">262</span></a> <span class="n">v</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="eigh-263"><a href="#eigh-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="n">w</span><span class="p">,</span> <span class="n">v</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="eigh-261"><a href="#eigh-261"><span class="linenos">261</span></a><span class="k">def</span> <span class="nf">eigh</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="eigh-262"><a href="#eigh-262"><span class="linenos">262</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues and eigenvectors of a given hermitian matrix of Obs according to np.linalg.eigh.&quot;&quot;&quot;</span>
</span><span id="eigh-263"><a href="#eigh-263"><span class="linenos">263</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="eigh-264"><a href="#eigh-264"><span class="linenos">264</span></a> <span class="n">v</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="eigh-265"><a href="#eigh-265"><span class="linenos">265</span></a> <span class="k">return</span> <span class="n">w</span><span class="p">,</span> <span class="n">v</span>
</span></pre></div>
</details>
@ -753,10 +757,10 @@ Obs valued.</li>
<details>
<summary>View Source</summary>
<div class="pdoc-code codehilite"><pre><span></span><span id="eig-266"><a href="#eig-266"><span class="linenos">266</span></a><span class="k">def</span> <span class="nf">eig</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="eig-267"><a href="#eig-267"><span class="linenos">267</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues of a given matrix of Obs according to np.linalg.eig.&quot;&quot;&quot;</span>
</span><span id="eig-268"><a href="#eig-268"><span class="linenos">268</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eig</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="eig-269"><a href="#eig-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="n">w</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="eig-268"><a href="#eig-268"><span class="linenos">268</span></a><span class="k">def</span> <span class="nf">eig</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="eig-269"><a href="#eig-269"><span class="linenos">269</span></a> <span class="sd">&quot;&quot;&quot;Computes the eigenvalues of a given matrix of Obs according to np.linalg.eig.&quot;&quot;&quot;</span>
</span><span id="eig-270"><a href="#eig-270"><span class="linenos">270</span></a> <span class="n">w</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eig</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="eig-271"><a href="#eig-271"><span class="linenos">271</span></a> <span class="k">return</span> <span class="n">w</span>
</span></pre></div>
</details>
@ -776,9 +780,9 @@ Obs valued.</li>
<details>
<summary>View Source</summary>
<div class="pdoc-code codehilite"><pre><span></span><span id="pinv-272"><a href="#pinv-272"><span class="linenos">272</span></a><span class="k">def</span> <span class="nf">pinv</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="pinv-273"><a href="#pinv-273"><span class="linenos">273</span></a> <span class="sd">&quot;&quot;&quot;Computes the Moore-Penrose pseudoinverse of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="pinv-274"><a href="#pinv-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">pinv</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">obs</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="pinv-274"><a href="#pinv-274"><span class="linenos">274</span></a><span class="k">def</span> <span class="nf">pinv</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="pinv-275"><a href="#pinv-275"><span class="linenos">275</span></a> <span class="sd">&quot;&quot;&quot;Computes the Moore-Penrose pseudoinverse of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="pinv-276"><a href="#pinv-276"><span class="linenos">276</span></a> <span class="k">return</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">pinv</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">obs</span><span class="p">)</span>
</span></pre></div>
</details>
@ -798,12 +802,12 @@ Obs valued.</li>
<details>
<summary>View Source</summary>
<div class="pdoc-code codehilite"><pre><span></span><span id="svd-277"><a href="#svd-277"><span class="linenos">277</span></a><span class="k">def</span> <span class="nf">svd</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="svd-278"><a href="#svd-278"><span class="linenos">278</span></a> <span class="sd">&quot;&quot;&quot;Computes the singular value decomposition of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="svd-279"><a href="#svd-279"><span class="linenos">279</span></a> <span class="n">u</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="svd-280"><a href="#svd-280"><span class="linenos">280</span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="svd-281"><a href="#svd-281"><span class="linenos">281</span></a> <span class="n">vh</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">2</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="svd-282"><a href="#svd-282"><span class="linenos">282</span></a> <span class="k">return</span> <span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">vh</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="svd-279"><a href="#svd-279"><span class="linenos">279</span></a><span class="k">def</span> <span class="nf">svd</span><span class="p">(</span><span class="n">obs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="svd-280"><a href="#svd-280"><span class="linenos">280</span></a> <span class="sd">&quot;&quot;&quot;Computes the singular value decomposition of a matrix of Obs.&quot;&quot;&quot;</span>
</span><span id="svd-281"><a href="#svd-281"><span class="linenos">281</span></a> <span class="n">u</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="svd-282"><a href="#svd-282"><span class="linenos">282</span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="svd-283"><a href="#svd-283"><span class="linenos">283</span></a> <span class="n">vh</span> <span class="o">=</span> <span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">full_matrices</span><span class="o">=</span><span class="kc">False</span><span class="p">)[</span><span class="mi">2</span><span class="p">],</span> <span class="n">obs</span><span class="p">)</span>
</span><span id="svd-284"><a href="#svd-284"><span class="linenos">284</span></a> <span class="k">return</span> <span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">vh</span><span class="p">)</span>
</span></pre></div>
</details>

File diff suppressed because one or more lines are too long