Documentation updated

This commit is contained in:
fjosw 2022-05-26 08:59:38 +00:00
parent 7de2f954d9
commit 1992836f67

View file

@ -585,15 +585,15 @@
</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">chol_inv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">inv</span><span class="p">(</span><span class="n">chol</span><span class="p">)</span>
</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">chol_inv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="n">covdiag</span><span class="p">)</span>
</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a>
</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="k">def</span> <span class="nf">chisqfunc</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="k">def</span> <span class="nf">chisqfunc_corr</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">chisqfunc</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">chisqfunc</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;method&#39;</span><span class="p">,</span> <span class="s1">&#39;Levenberg-Marquardt&#39;</span><span class="p">)</span>
</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
@ -602,246 +602,251 @@
</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">!=</span> <span class="s1">&#39;Levenberg-Marquardt&#39;</span><span class="p">:</span>
</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;migrad&#39;</span><span class="p">:</span>
</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">iminuit</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-4</span><span class="p">)</span> <span class="c1"># Stopping criterion 0.002 * tol * errordef</span>
</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;method&#39;</span><span class="p">),</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-12</span><span class="p">)</span>
</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nit</span>
</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a>
</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span>
</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a>
</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">def</span> <span class="nf">chisqfunc_residuals</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span>
</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a>
</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">def</span> <span class="nf">chisqfunc_residuals</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="p">((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span>
</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a>
</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">least_squares</span><span class="p">(</span><span class="n">chisqfunc_residuals</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;lm&#39;</span><span class="p">,</span> <span class="n">ftol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">gtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">xtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">)</span>
</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a>
</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>
</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a>
</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">success</span><span class="p">:</span>
</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;The minimization procedure did not converge.&#39;</span><span class="p">)</span>
</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">iminuit</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc_corr</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-4</span><span class="p">)</span> <span class="c1"># Stopping criterion 0.002 * tol * errordef</span>
</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;method&#39;</span><span class="p">),</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-12</span><span class="p">)</span>
</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc_corr</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;method&#39;</span><span class="p">),</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-12</span><span class="p">)</span>
</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nit</span>
</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>
</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span>
</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a>
</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="k">def</span> <span class="nf">chisqfunc_residuals_corr</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span>
</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>
</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">def</span> <span class="nf">chisqfunc_residuals</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="p">((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span>
</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a>
</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">least_squares</span><span class="p">(</span><span class="n">chisqfunc_residuals</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;lm&#39;</span><span class="p">,</span> <span class="n">ftol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">gtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">xtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">)</span>
</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">least_squares</span><span class="p">(</span><span class="n">chisqfunc_residuals_corr</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;lm&#39;</span><span class="p">,</span> <span class="n">ftol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">gtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">xtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">)</span>
</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a>
</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a>
</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="n">chisquare</span> <span class="o">/</span> <span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span><span class="p">)</span>
</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;nan&#39;</span><span class="p">)</span>
</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>
</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">success</span><span class="p">:</span>
</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;The minimization procedure did not converge.&#39;</span><span class="p">)</span>
</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a>
</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="n">output</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">message</span>
</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;chisquare/d.o.f.:&#39;</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span><span class="p">)</span>
</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="n">chisquare</span> <span class="o">/</span> <span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span><span class="p">)</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;nan&#39;</span><span class="p">)</span>
</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a>
</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;expected_chisquare&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="n">W</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">))</span>
</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">W</span> <span class="o">@</span> <span class="n">jacobian</span><span class="p">(</span><span class="n">func</span><span class="p">)(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="n">P_phi</span> <span class="o">=</span> <span class="n">A</span> <span class="o">@</span> <span class="n">np</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">A</span><span class="o">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">A</span><span class="p">)</span> <span class="o">@</span> <span class="n">A</span><span class="o">.</span><span class="n">T</span>
</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="n">expected_chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">trace</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">identity</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">P_phi</span><span class="p">)</span> <span class="o">@</span> <span class="n">W</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">W</span><span class="p">)</span>
</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span> <span class="o">=</span> <span class="n">chisquare</span> <span class="o">/</span> <span class="n">expected_chisquare</span>
</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;chisquare/expected_chisquare:&#39;</span><span class="p">,</span>
</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span><span class="p">)</span>
</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a>
</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="n">fitp</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span>
</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="n">hess</span> <span class="o">=</span> <span class="n">jacobian</span><span class="p">(</span><span class="n">jacobian</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">))(</span><span class="n">fitp</span><span class="p">)</span>
</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;It is required to use autograd.numpy instead of numpy within fit functions, see the documentation for details.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="bp">None</span>
</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="n">condn</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cond</span><span class="p">(</span><span class="n">hess</span><span class="p">)</span>
</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="k">if</span> <span class="n">condn</span> <span class="o">&gt;</span> <span class="mf">1e8</span><span class="p">:</span>
</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Hessian matrix might be ill-conditioned (</span><span class="si">{0:1.2e}</span><span class="s2">), error propagation might be unreliable.</span><span class="se">\n</span><span class="s2"> </span><span class="se">\</span>
</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a><span class="s2"> Maybe try rescaling the problem such that all parameters are of O(1).&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">condn</span><span class="p">),</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">hess_inv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">inv</span><span class="p">(</span><span class="n">hess</span><span class="p">)</span>
</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="k">except</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">LinAlgError</span><span class="p">:</span>
</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Cannot invert hessian matrix.&quot;</span><span class="p">)</span>
</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Unkown error in connection with Hessian inverse.&quot;</span><span class="p">)</span>
</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a>
</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="k">def</span> <span class="nf">chisqfunc_compact</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">d</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">],</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a>
</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="k">def</span> <span class="nf">chisqfunc_compact</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">d</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">],</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a>
</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="n">jac_jac</span> <span class="o">=</span> <span class="n">jacobian</span><span class="p">(</span><span class="n">jacobian</span><span class="p">(</span><span class="n">chisqfunc_compact</span><span class="p">))(</span><span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">fitp</span><span class="p">,</span> <span class="n">y_f</span><span class="p">)))</span>
</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a>
</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="o">-</span><span class="n">hess_inv</span> <span class="o">@</span> <span class="n">jac_jac</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">:]</span>
</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a>
</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-586"><a href="#L-586"><span class="linenos">586</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">n_parms</span><span class="p">):</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</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="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">*</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="nb">list</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">man_grad</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a>
</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_parameters</span> <span class="o">=</span> <span class="n">result</span>
</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a>
</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">=</span> <span class="n">chisqfunc</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="n">output</span><span class="o">.</span><span class="n">dof</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span>
</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="n">output</span><span class="o">.</span><span class="n">p_value</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">chi2</span><span class="o">.</span><span class="n">cdf</span><span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">chisquare</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span><span class="p">)</span>
</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a>
</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;resplot&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="n">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a>
</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;qqplot&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="n">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a>
</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="n">output</span>
</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="n">output</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">message</span>
</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;chisquare/d.o.f.:&#39;</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span><span class="p">)</span>
</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a>
</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;expected_chisquare&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="n">W</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">))</span>
</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">W</span> <span class="o">@</span> <span class="n">jacobian</span><span class="p">(</span><span class="n">func</span><span class="p">)(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="n">P_phi</span> <span class="o">=</span> <span class="n">A</span> <span class="o">@</span> <span class="n">np</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">A</span><span class="o">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">A</span><span class="p">)</span> <span class="o">@</span> <span class="n">A</span><span class="o">.</span><span class="n">T</span>
</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">expected_chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">trace</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">identity</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">P_phi</span><span class="p">)</span> <span class="o">@</span> <span class="n">W</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">W</span><span class="p">)</span>
</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span> <span class="o">=</span> <span class="n">chisquare</span> <span class="o">/</span> <span class="n">expected_chisquare</span>
</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;chisquare/expected_chisquare:&#39;</span><span class="p">,</span>
</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span><span class="p">)</span>
</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a>
</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="n">fitp</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span>
</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="n">hess</span> <span class="o">=</span> <span class="n">jacobian</span><span class="p">(</span><span class="n">jacobian</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">))(</span><span class="n">fitp</span><span class="p">)</span>
</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;It is required to use autograd.numpy instead of numpy within fit functions, see the documentation for details.&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="bp">None</span>
</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">condn</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cond</span><span class="p">(</span><span class="n">hess</span><span class="p">)</span>
</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="k">if</span> <span class="n">condn</span> <span class="o">&gt;</span> <span class="mf">1e8</span><span class="p">:</span>
</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Hessian matrix might be ill-conditioned (</span><span class="si">{0:1.2e}</span><span class="s2">), error propagation might be unreliable.</span><span class="se">\n</span><span class="s2"> </span><span class="se">\</span>
</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a><span class="s2"> Maybe try rescaling the problem such that all parameters are of O(1).&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">condn</span><span class="p">),</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="n">hess_inv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">inv</span><span class="p">(</span><span class="n">hess</span><span class="p">)</span>
</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="k">except</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">LinAlgError</span><span class="p">:</span>
</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Cannot invert hessian matrix.&quot;</span><span class="p">)</span>
</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Unkown error in connection with Hessian inverse.&quot;</span><span class="p">)</span>
</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a>
</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;correlated_fit&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="k">def</span> <span class="nf">chisqfunc_compact</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">d</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">],</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a>
</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="k">def</span> <span class="nf">chisqfunc_compact</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">d</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">],</span> <span class="n">x</span><span class="p">)</span>
</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a>
</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="n">jac_jac</span> <span class="o">=</span> <span class="n">jacobian</span><span class="p">(</span><span class="n">jacobian</span><span class="p">(</span><span class="n">chisqfunc_compact</span><span class="p">))(</span><span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">fitp</span><span class="p">,</span> <span class="n">y_f</span><span class="p">)))</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a>
</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="o">-</span><span class="n">hess_inv</span> <span class="o">@</span> <span class="n">jac_jac</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">:]</span>
</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a>
</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos">591</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">n_parms</span><span class="p">):</span>
</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</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="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">*</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="nb">list</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">man_grad</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a>
</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_parameters</span> <span class="o">=</span> <span class="n">result</span>
</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a>
</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">=</span> <span class="n">chisqfunc</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="n">output</span><span class="o">.</span><span class="n">dof</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span>
</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="n">output</span><span class="o">.</span><span class="n">p_value</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">chi2</span><span class="o">.</span><span class="n">cdf</span><span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">chisquare</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span><span class="p">)</span>
</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a>
</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;resplot&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="n">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a>
</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a>
</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="sd">&quot;&quot;&quot;Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a>
</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a><span class="sd"> Parameters</span>
</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a><span class="sd"> ----------</span>
</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a><span class="sd"> x : list</span>
</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
</span><span id="L-612"><a href="#L-612"><span class="linenos">612</span></a><span class="sd"> y : list</span>
</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a>
</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="n">y</span>
</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a>
</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</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-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Unsupported types for x&#39;</span><span class="p">)</span>
</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a>
</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a>
</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="sd">&quot;&quot;&quot;Generates a quantile-quantile plot of the fit result which can be used to</span>
</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;qqplot&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <span class="n">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a>
</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="k">return</span> <span class="n">output</span>
</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a>
</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a>
</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a> <span class="sd">&quot;&quot;&quot;Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a>
</span><span id="L-612"><a href="#L-612"><span class="linenos">612</span></a><span class="sd"> Parameters</span>
</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a><span class="sd"> ----------</span>
</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a><span class="sd"> x : list</span>
</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a><span class="sd"> y : list</span>
</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a>
</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="k">return</span> <span class="n">y</span>
</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a>
</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</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-629"><a href="#L-629"><span class="linenos">629</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Unsupported types for x&#39;</span><span class="p">)</span>
</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a>
</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a>
</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">)</span>
</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">&#39;k--&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Standard normal distribution&#39;</span><span class="p">)</span>
</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Least squares fit, r=&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">)</span>
</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a>
</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;Theoretical quantiles&#39;</span><span class="p">)</span>
</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Ordered Values&#39;</span><span class="p">)</span>
</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a> <span class="sd">&quot;&quot;&quot;Generates a quantile-quantile plot of the fit result which can be used to</span>
</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a>
</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">)</span>
</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">&#39;k--&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Standard normal distribution&#39;</span><span class="p">)</span>
</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Least squares fit, r=&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">)</span>
</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a>
</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a>
</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="sd">&quot;&quot;&quot; Generates a plot which compares the fit to the data and displays the corresponding residuals&quot;&quot;&quot;</span>
</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a>
</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Data&#39;</span><span class="p">)</span>
</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Fit&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a>
</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">&#39;ko&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">&#39;out&#39;</span><span class="p">)</span>
</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">)</span>
</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">&#39;Residuals&#39;</span><span class="p">)</span>
</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a>
</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a>
</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="sd">&quot;&quot;&quot;Returns the error band for an array of sample values x, for given fit function func with optimized parameters beta.&quot;&quot;&quot;</span>
</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Covariance matrix is not symmetric within floating point precision&quot;</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a>
</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a>
</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</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="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;Theoretical quantiles&#39;</span><span class="p">)</span>
</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Ordered Values&#39;</span><span class="p">)</span>
</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a>
</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a>
</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="sd">&quot;&quot;&quot; Generates a plot which compares the fit to the data and displays the corresponding residuals&quot;&quot;&quot;</span>
</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a>
</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Data&#39;</span><span class="p">)</span>
</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Fit&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a>
</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">&#39;ko&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
</span><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">&#39;out&#39;</span><span class="p">)</span>
</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">)</span>
</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">&#39;Residuals&#39;</span><span class="p">)</span>
</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a>
</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a>
</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="sd">&quot;&quot;&quot;Returns the error band for an array of sample values x, for given fit function func with optimized parameters beta.&quot;&quot;&quot;</span>
</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Covariance matrix is not symmetric within floating point precision&quot;</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a>
</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a>
</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="n">err</span>
</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a>
</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a>
</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a> <span class="sd">&quot;&quot;&quot;Performs a KolmogorovSmirnov test for the p-values of all fit object.</span>
</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a>
</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a><span class="sd"> Parameters</span>
</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a><span class="sd"> ----------</span>
</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a><span class="sd"> objects : list</span>
</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a>
</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a>
</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a>
</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;p-value&#39;</span><span class="p">)</span>
</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Cumulative probability&#39;</span><span class="p">)</span>
</span><span id="L-730"><a href="#L-730"><span class="linenos">730</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; p-values&#39;</span><span class="p">)</span>
</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a>
</span><span id="L-732"><a href="#L-732"><span class="linenos">732</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
</span><span id="L-738"><a href="#L-738"><span class="linenos">738</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">&#39;&lt;-&gt;&#39;</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
</span><span id="L-739"><a href="#L-739"><span class="linenos">739</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a>
</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">&#39;uniform&#39;</span><span class="p">))</span>
</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</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="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a>
</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="n">err</span>
</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a>
</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a>
</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a> <span class="sd">&quot;&quot;&quot;Performs a KolmogorovSmirnov test for the p-values of all fit object.</span>
</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a>
</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a><span class="sd"> Parameters</span>
</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a><span class="sd"> ----------</span>
</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a><span class="sd"> objects : list</span>
</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a>
</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a>
</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a>
</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
</span><span id="L-730"><a href="#L-730"><span class="linenos">730</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-732"><a href="#L-732"><span class="linenos">732</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;p-value&#39;</span><span class="p">)</span>
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Cumulative probability&#39;</span><span class="p">)</span>
</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; p-values&#39;</span><span class="p">)</span>
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a>
</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
</span><span id="L-738"><a href="#L-738"><span class="linenos">738</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="L-739"><a href="#L-739"><span class="linenos">739</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
</span><span id="L-743"><a href="#L-743"><span class="linenos">743</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">&#39;&lt;-&gt;&#39;</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a>
</span><span id="L-746"><a href="#L-746"><span class="linenos">746</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">&#39;uniform&#39;</span><span class="p">))</span>
</span></pre></div>
@ -1355,30 +1360,30 @@ has to be calculated (default False).</li>
</div>
<a class="headerlink" href="#fit_lin"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="fit_lin-605"><a href="#fit_lin-605"><span class="linenos">605</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="fit_lin-606"><a href="#fit_lin-606"><span class="linenos">606</span></a> <span class="sd">&quot;&quot;&quot;Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
</span><span id="fit_lin-607"><a href="#fit_lin-607"><span class="linenos">607</span></a>
</span><span id="fit_lin-608"><a href="#fit_lin-608"><span class="linenos">608</span></a><span class="sd"> Parameters</span>
</span><span id="fit_lin-609"><a href="#fit_lin-609"><span class="linenos">609</span></a><span class="sd"> ----------</span>
</span><span id="fit_lin-610"><a href="#fit_lin-610"><span class="linenos">610</span></a><span class="sd"> x : list</span>
</span><span id="fit_lin-611"><a href="#fit_lin-611"><span class="linenos">611</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
</span><span id="fit_lin-612"><a href="#fit_lin-612"><span class="linenos">612</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
</span><span id="fit_lin-613"><a href="#fit_lin-613"><span class="linenos">613</span></a><span class="sd"> y : list</span>
</span><span id="fit_lin-614"><a href="#fit_lin-614"><span class="linenos">614</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
</span><span id="fit_lin-615"><a href="#fit_lin-615"><span class="linenos">615</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="fit_lin-616"><a href="#fit_lin-616"><span class="linenos">616</span></a>
</span><span id="fit_lin-617"><a href="#fit_lin-617"><span class="linenos">617</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
</span><span id="fit_lin-618"><a href="#fit_lin-618"><span class="linenos">618</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
</span><span id="fit_lin-619"><a href="#fit_lin-619"><span class="linenos">619</span></a> <span class="k">return</span> <span class="n">y</span>
</span><span id="fit_lin-620"><a href="#fit_lin-620"><span class="linenos">620</span></a>
</span><span id="fit_lin-621"><a href="#fit_lin-621"><span class="linenos">621</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
</span><span id="fit_lin-622"><a href="#fit_lin-622"><span class="linenos">622</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="fit_lin-623"><a href="#fit_lin-623"><span class="linenos">623</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="fit_lin-624"><a href="#fit_lin-624"><span class="linenos">624</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</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="fit_lin-625"><a href="#fit_lin-625"><span class="linenos">625</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="fit_lin-626"><a href="#fit_lin-626"><span class="linenos">626</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="fit_lin-627"><a href="#fit_lin-627"><span class="linenos">627</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="fit_lin-628"><a href="#fit_lin-628"><span class="linenos">628</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Unsupported types for x&#39;</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="fit_lin-610"><a href="#fit_lin-610"><span class="linenos">610</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="fit_lin-611"><a href="#fit_lin-611"><span class="linenos">611</span></a> <span class="sd">&quot;&quot;&quot;Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
</span><span id="fit_lin-612"><a href="#fit_lin-612"><span class="linenos">612</span></a>
</span><span id="fit_lin-613"><a href="#fit_lin-613"><span class="linenos">613</span></a><span class="sd"> Parameters</span>
</span><span id="fit_lin-614"><a href="#fit_lin-614"><span class="linenos">614</span></a><span class="sd"> ----------</span>
</span><span id="fit_lin-615"><a href="#fit_lin-615"><span class="linenos">615</span></a><span class="sd"> x : list</span>
</span><span id="fit_lin-616"><a href="#fit_lin-616"><span class="linenos">616</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
</span><span id="fit_lin-617"><a href="#fit_lin-617"><span class="linenos">617</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
</span><span id="fit_lin-618"><a href="#fit_lin-618"><span class="linenos">618</span></a><span class="sd"> y : list</span>
</span><span id="fit_lin-619"><a href="#fit_lin-619"><span class="linenos">619</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
</span><span id="fit_lin-620"><a href="#fit_lin-620"><span class="linenos">620</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="fit_lin-621"><a href="#fit_lin-621"><span class="linenos">621</span></a>
</span><span id="fit_lin-622"><a href="#fit_lin-622"><span class="linenos">622</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
</span><span id="fit_lin-623"><a href="#fit_lin-623"><span class="linenos">623</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
</span><span id="fit_lin-624"><a href="#fit_lin-624"><span class="linenos">624</span></a> <span class="k">return</span> <span class="n">y</span>
</span><span id="fit_lin-625"><a href="#fit_lin-625"><span class="linenos">625</span></a>
</span><span id="fit_lin-626"><a href="#fit_lin-626"><span class="linenos">626</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
</span><span id="fit_lin-627"><a href="#fit_lin-627"><span class="linenos">627</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="fit_lin-628"><a href="#fit_lin-628"><span class="linenos">628</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="fit_lin-629"><a href="#fit_lin-629"><span class="linenos">629</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</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="fit_lin-630"><a href="#fit_lin-630"><span class="linenos">630</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="fit_lin-631"><a href="#fit_lin-631"><span class="linenos">631</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
</span><span id="fit_lin-632"><a href="#fit_lin-632"><span class="linenos">632</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="fit_lin-633"><a href="#fit_lin-633"><span class="linenos">633</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Unsupported types for x&#39;</span><span class="p">)</span>
</span></pre></div>
@ -1408,30 +1413,30 @@ List of Obs, the dvalues of the Obs are used as yerror for the fit.</li>
</div>
<a class="headerlink" href="#qqplot"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="qqplot-631"><a href="#qqplot-631"><span class="linenos">631</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
</span><span id="qqplot-632"><a href="#qqplot-632"><span class="linenos">632</span></a> <span class="sd">&quot;&quot;&quot;Generates a quantile-quantile plot of the fit result which can be used to</span>
</span><span id="qqplot-633"><a href="#qqplot-633"><span class="linenos">633</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
</span><span id="qqplot-634"><a href="#qqplot-634"><span class="linenos">634</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="qqplot-635"><a href="#qqplot-635"><span class="linenos">635</span></a>
</span><span id="qqplot-636"><a href="#qqplot-636"><span class="linenos">636</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="qqplot-637"><a href="#qqplot-637"><span class="linenos">637</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
</span><span id="qqplot-638"><a href="#qqplot-638"><span class="linenos">638</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
</span><span id="qqplot-639"><a href="#qqplot-639"><span class="linenos">639</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
</span><span id="qqplot-640"><a href="#qqplot-640"><span class="linenos">640</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
</span><span id="qqplot-641"><a href="#qqplot-641"><span class="linenos">641</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
</span><span id="qqplot-642"><a href="#qqplot-642"><span class="linenos">642</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</span><span id="qqplot-643"><a href="#qqplot-643"><span class="linenos">643</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="qqplot-644"><a href="#qqplot-644"><span class="linenos">644</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">)</span>
</span><span id="qqplot-645"><a href="#qqplot-645"><span class="linenos">645</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="qqplot-646"><a href="#qqplot-646"><span class="linenos">646</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="qqplot-647"><a href="#qqplot-647"><span class="linenos">647</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="qqplot-648"><a href="#qqplot-648"><span class="linenos">648</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">&#39;k--&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Standard normal distribution&#39;</span><span class="p">)</span>
</span><span id="qqplot-649"><a href="#qqplot-649"><span class="linenos">649</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Least squares fit, r=&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">)</span>
</span><span id="qqplot-650"><a href="#qqplot-650"><span class="linenos">650</span></a>
</span><span id="qqplot-651"><a href="#qqplot-651"><span class="linenos">651</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;Theoretical quantiles&#39;</span><span class="p">)</span>
</span><span id="qqplot-652"><a href="#qqplot-652"><span class="linenos">652</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Ordered Values&#39;</span><span class="p">)</span>
</span><span id="qqplot-653"><a href="#qqplot-653"><span class="linenos">653</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="qqplot-654"><a href="#qqplot-654"><span class="linenos">654</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="qqplot-636"><a href="#qqplot-636"><span class="linenos">636</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
</span><span id="qqplot-637"><a href="#qqplot-637"><span class="linenos">637</span></a> <span class="sd">&quot;&quot;&quot;Generates a quantile-quantile plot of the fit result which can be used to</span>
</span><span id="qqplot-638"><a href="#qqplot-638"><span class="linenos">638</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
</span><span id="qqplot-639"><a href="#qqplot-639"><span class="linenos">639</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="qqplot-640"><a href="#qqplot-640"><span class="linenos">640</span></a>
</span><span id="qqplot-641"><a href="#qqplot-641"><span class="linenos">641</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="qqplot-642"><a href="#qqplot-642"><span class="linenos">642</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
</span><span id="qqplot-643"><a href="#qqplot-643"><span class="linenos">643</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
</span><span id="qqplot-644"><a href="#qqplot-644"><span class="linenos">644</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
</span><span id="qqplot-645"><a href="#qqplot-645"><span class="linenos">645</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
</span><span id="qqplot-646"><a href="#qqplot-646"><span class="linenos">646</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
</span><span id="qqplot-647"><a href="#qqplot-647"><span class="linenos">647</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</span><span id="qqplot-648"><a href="#qqplot-648"><span class="linenos">648</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="qqplot-649"><a href="#qqplot-649"><span class="linenos">649</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">)</span>
</span><span id="qqplot-650"><a href="#qqplot-650"><span class="linenos">650</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="qqplot-651"><a href="#qqplot-651"><span class="linenos">651</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="qqplot-652"><a href="#qqplot-652"><span class="linenos">652</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="qqplot-653"><a href="#qqplot-653"><span class="linenos">653</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">&#39;k--&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Standard normal distribution&#39;</span><span class="p">)</span>
</span><span id="qqplot-654"><a href="#qqplot-654"><span class="linenos">654</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Least squares fit, r=&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">)</span>
</span><span id="qqplot-655"><a href="#qqplot-655"><span class="linenos">655</span></a>
</span><span id="qqplot-656"><a href="#qqplot-656"><span class="linenos">656</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;Theoretical quantiles&#39;</span><span class="p">)</span>
</span><span id="qqplot-657"><a href="#qqplot-657"><span class="linenos">657</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Ordered Values&#39;</span><span class="p">)</span>
</span><span id="qqplot-658"><a href="#qqplot-658"><span class="linenos">658</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="qqplot-659"><a href="#qqplot-659"><span class="linenos">659</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span></pre></div>
@ -1452,34 +1457,34 @@ check if the residuals of the fit are gaussian distributed.</p>
</div>
<a class="headerlink" href="#residual_plot"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="residual_plot-657"><a href="#residual_plot-657"><span class="linenos">657</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
</span><span id="residual_plot-658"><a href="#residual_plot-658"><span class="linenos">658</span></a> <span class="sd">&quot;&quot;&quot; Generates a plot which compares the fit to the data and displays the corresponding residuals&quot;&quot;&quot;</span>
</span><span id="residual_plot-659"><a href="#residual_plot-659"><span class="linenos">659</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</span><span id="residual_plot-660"><a href="#residual_plot-660"><span class="linenos">660</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="residual_plot-661"><a href="#residual_plot-661"><span class="linenos">661</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
</span><span id="residual_plot-662"><a href="#residual_plot-662"><span class="linenos">662</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="residual_plot-663"><a href="#residual_plot-663"><span class="linenos">663</span></a>
</span><span id="residual_plot-664"><a href="#residual_plot-664"><span class="linenos">664</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="residual_plot-665"><a href="#residual_plot-665"><span class="linenos">665</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
</span><span id="residual_plot-666"><a href="#residual_plot-666"><span class="linenos">666</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="residual_plot-667"><a href="#residual_plot-667"><span class="linenos">667</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Data&#39;</span><span class="p">)</span>
</span><span id="residual_plot-668"><a href="#residual_plot-668"><span class="linenos">668</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Fit&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</span><span id="residual_plot-669"><a href="#residual_plot-669"><span class="linenos">669</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="residual_plot-670"><a href="#residual_plot-670"><span class="linenos">670</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="residual_plot-671"><a href="#residual_plot-671"><span class="linenos">671</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="residual_plot-672"><a href="#residual_plot-672"><span class="linenos">672</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="residual_plot-673"><a href="#residual_plot-673"><span class="linenos">673</span></a>
</span><span id="residual_plot-674"><a href="#residual_plot-674"><span class="linenos">674</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
</span><span id="residual_plot-675"><a href="#residual_plot-675"><span class="linenos">675</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</span><span id="residual_plot-676"><a href="#residual_plot-676"><span class="linenos">676</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">&#39;ko&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
</span><span id="residual_plot-677"><a href="#residual_plot-677"><span class="linenos">677</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">&#39;out&#39;</span><span class="p">)</span>
</span><span id="residual_plot-678"><a href="#residual_plot-678"><span class="linenos">678</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="residual_plot-679"><a href="#residual_plot-679"><span class="linenos">679</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
</span><span id="residual_plot-680"><a href="#residual_plot-680"><span class="linenos">680</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">)</span>
</span><span id="residual_plot-681"><a href="#residual_plot-681"><span class="linenos">681</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="residual_plot-682"><a href="#residual_plot-682"><span class="linenos">682</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">&#39;Residuals&#39;</span><span class="p">)</span>
</span><span id="residual_plot-683"><a href="#residual_plot-683"><span class="linenos">683</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</span><span id="residual_plot-684"><a href="#residual_plot-684"><span class="linenos">684</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="residual_plot-662"><a href="#residual_plot-662"><span class="linenos">662</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
</span><span id="residual_plot-663"><a href="#residual_plot-663"><span class="linenos">663</span></a> <span class="sd">&quot;&quot;&quot; Generates a plot which compares the fit to the data and displays the corresponding residuals&quot;&quot;&quot;</span>
</span><span id="residual_plot-664"><a href="#residual_plot-664"><span class="linenos">664</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</span><span id="residual_plot-665"><a href="#residual_plot-665"><span class="linenos">665</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="residual_plot-666"><a href="#residual_plot-666"><span class="linenos">666</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
</span><span id="residual_plot-667"><a href="#residual_plot-667"><span class="linenos">667</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
</span><span id="residual_plot-668"><a href="#residual_plot-668"><span class="linenos">668</span></a>
</span><span id="residual_plot-669"><a href="#residual_plot-669"><span class="linenos">669</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
</span><span id="residual_plot-670"><a href="#residual_plot-670"><span class="linenos">670</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
</span><span id="residual_plot-671"><a href="#residual_plot-671"><span class="linenos">671</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="residual_plot-672"><a href="#residual_plot-672"><span class="linenos">672</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Data&#39;</span><span class="p">)</span>
</span><span id="residual_plot-673"><a href="#residual_plot-673"><span class="linenos">673</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;Fit&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</span><span id="residual_plot-674"><a href="#residual_plot-674"><span class="linenos">674</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="residual_plot-675"><a href="#residual_plot-675"><span class="linenos">675</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="residual_plot-676"><a href="#residual_plot-676"><span class="linenos">676</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
</span><span id="residual_plot-677"><a href="#residual_plot-677"><span class="linenos">677</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="residual_plot-678"><a href="#residual_plot-678"><span class="linenos">678</span></a>
</span><span id="residual_plot-679"><a href="#residual_plot-679"><span class="linenos">679</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
</span><span id="residual_plot-680"><a href="#residual_plot-680"><span class="linenos">680</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</span><span id="residual_plot-681"><a href="#residual_plot-681"><span class="linenos">681</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">&#39;ko&#39;</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
</span><span id="residual_plot-682"><a href="#residual_plot-682"><span class="linenos">682</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">&#39;out&#39;</span><span class="p">)</span>
</span><span id="residual_plot-683"><a href="#residual_plot-683"><span class="linenos">683</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="residual_plot-684"><a href="#residual_plot-684"><span class="linenos">684</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
</span><span id="residual_plot-685"><a href="#residual_plot-685"><span class="linenos">685</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;k&#39;</span><span class="p">)</span>
</span><span id="residual_plot-686"><a href="#residual_plot-686"><span class="linenos">686</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
</span><span id="residual_plot-687"><a href="#residual_plot-687"><span class="linenos">687</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">&#39;Residuals&#39;</span><span class="p">)</span>
</span><span id="residual_plot-688"><a href="#residual_plot-688"><span class="linenos">688</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</span><span id="residual_plot-689"><a href="#residual_plot-689"><span class="linenos">689</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span></pre></div>
@ -1499,22 +1504,22 @@ check if the residuals of the fit are gaussian distributed.</p>
</div>
<a class="headerlink" href="#error_band"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="error_band-687"><a href="#error_band-687"><span class="linenos">687</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
</span><span id="error_band-688"><a href="#error_band-688"><span class="linenos">688</span></a> <span class="sd">&quot;&quot;&quot;Returns the error band for an array of sample values x, for given fit function func with optimized parameters beta.&quot;&quot;&quot;</span>
</span><span id="error_band-689"><a href="#error_band-689"><span class="linenos">689</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
</span><span id="error_band-690"><a href="#error_band-690"><span class="linenos">690</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
</span><span id="error_band-691"><a href="#error_band-691"><span class="linenos">691</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Covariance matrix is not symmetric within floating point precision&quot;</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="error_band-692"><a href="#error_band-692"><span class="linenos">692</span></a>
</span><span id="error_band-693"><a href="#error_band-693"><span class="linenos">693</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="error_band-694"><a href="#error_band-694"><span class="linenos">694</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="error_band-695"><a href="#error_band-695"><span class="linenos">695</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
</span><span id="error_band-696"><a href="#error_band-696"><span class="linenos">696</span></a>
</span><span id="error_band-697"><a href="#error_band-697"><span class="linenos">697</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="error_band-698"><a href="#error_band-698"><span class="linenos">698</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="error_band-699"><a href="#error_band-699"><span class="linenos">699</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</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="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
</span><span id="error_band-700"><a href="#error_band-700"><span class="linenos">700</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="error_band-692"><a href="#error_band-692"><span class="linenos">692</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
</span><span id="error_band-693"><a href="#error_band-693"><span class="linenos">693</span></a> <span class="sd">&quot;&quot;&quot;Returns the error band for an array of sample values x, for given fit function func with optimized parameters beta.&quot;&quot;&quot;</span>
</span><span id="error_band-694"><a href="#error_band-694"><span class="linenos">694</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
</span><span id="error_band-695"><a href="#error_band-695"><span class="linenos">695</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
</span><span id="error_band-696"><a href="#error_band-696"><span class="linenos">696</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Covariance matrix is not symmetric within floating point precision&quot;</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="error_band-697"><a href="#error_band-697"><span class="linenos">697</span></a>
</span><span id="error_band-698"><a href="#error_band-698"><span class="linenos">698</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="error_band-699"><a href="#error_band-699"><span class="linenos">699</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="error_band-700"><a href="#error_band-700"><span class="linenos">700</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
</span><span id="error_band-701"><a href="#error_band-701"><span class="linenos">701</span></a>
</span><span id="error_band-702"><a href="#error_band-702"><span class="linenos">702</span></a> <span class="k">return</span> <span class="n">err</span>
</span><span id="error_band-702"><a href="#error_band-702"><span class="linenos">702</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="error_band-703"><a href="#error_band-703"><span class="linenos">703</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span><span id="error_band-704"><a href="#error_band-704"><span class="linenos">704</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</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="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
</span><span id="error_band-705"><a href="#error_band-705"><span class="linenos">705</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
</span><span id="error_band-706"><a href="#error_band-706"><span class="linenos">706</span></a>
</span><span id="error_band-707"><a href="#error_band-707"><span class="linenos">707</span></a> <span class="k">return</span> <span class="n">err</span>
</span></pre></div>
@ -1534,44 +1539,44 @@ check if the residuals of the fit are gaussian distributed.</p>
</div>
<a class="headerlink" href="#ks_test"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ks_test-705"><a href="#ks_test-705"><span class="linenos">705</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="ks_test-706"><a href="#ks_test-706"><span class="linenos">706</span></a> <span class="sd">&quot;&quot;&quot;Performs a KolmogorovSmirnov test for the p-values of all fit object.</span>
</span><span id="ks_test-707"><a href="#ks_test-707"><span class="linenos">707</span></a>
</span><span id="ks_test-708"><a href="#ks_test-708"><span class="linenos">708</span></a><span class="sd"> Parameters</span>
</span><span id="ks_test-709"><a href="#ks_test-709"><span class="linenos">709</span></a><span class="sd"> ----------</span>
</span><span id="ks_test-710"><a href="#ks_test-710"><span class="linenos">710</span></a><span class="sd"> objects : list</span>
</span><span id="ks_test-711"><a href="#ks_test-711"><span class="linenos">711</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
</span><span id="ks_test-712"><a href="#ks_test-712"><span class="linenos">712</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ks_test-713"><a href="#ks_test-713"><span class="linenos">713</span></a>
</span><span id="ks_test-714"><a href="#ks_test-714"><span class="linenos">714</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="ks_test-715"><a href="#ks_test-715"><span class="linenos">715</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="ks_test-716"><a href="#ks_test-716"><span class="linenos">716</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
</span><span id="ks_test-717"><a href="#ks_test-717"><span class="linenos">717</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
</span><span id="ks_test-718"><a href="#ks_test-718"><span class="linenos">718</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
</span><span id="ks_test-719"><a href="#ks_test-719"><span class="linenos">719</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ks_test-720"><a href="#ks_test-720"><span class="linenos">720</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
</span><span id="ks_test-721"><a href="#ks_test-721"><span class="linenos">721</span></a>
</span><span id="ks_test-722"><a href="#ks_test-722"><span class="linenos">722</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
</span><span id="ks_test-723"><a href="#ks_test-723"><span class="linenos">723</span></a>
</span><span id="ks_test-724"><a href="#ks_test-724"><span class="linenos">724</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="ks_test-725"><a href="#ks_test-725"><span class="linenos">725</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
</span><span id="ks_test-726"><a href="#ks_test-726"><span class="linenos">726</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="ks_test-727"><a href="#ks_test-727"><span class="linenos">727</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="ks_test-728"><a href="#ks_test-728"><span class="linenos">728</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="ks_test-729"><a href="#ks_test-729"><span class="linenos">729</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;p-value&#39;</span><span class="p">)</span>
</span><span id="ks_test-730"><a href="#ks_test-730"><span class="linenos">730</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Cumulative probability&#39;</span><span class="p">)</span>
</span><span id="ks_test-731"><a href="#ks_test-731"><span class="linenos">731</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; p-values&#39;</span><span class="p">)</span>
</span><span id="ks_test-732"><a href="#ks_test-732"><span class="linenos">732</span></a>
</span><span id="ks_test-733"><a href="#ks_test-733"><span class="linenos">733</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
</span><span id="ks_test-734"><a href="#ks_test-734"><span class="linenos">734</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="ks_test-735"><a href="#ks_test-735"><span class="linenos">735</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span><span id="ks_test-736"><a href="#ks_test-736"><span class="linenos">736</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
</span><span id="ks_test-737"><a href="#ks_test-737"><span class="linenos">737</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
</span><span id="ks_test-738"><a href="#ks_test-738"><span class="linenos">738</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
</span><span id="ks_test-739"><a href="#ks_test-739"><span class="linenos">739</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">&#39;&lt;-&gt;&#39;</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
</span><span id="ks_test-740"><a href="#ks_test-740"><span class="linenos">740</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="ks_test-741"><a href="#ks_test-741"><span class="linenos">741</span></a>
</span><span id="ks_test-742"><a href="#ks_test-742"><span class="linenos">742</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">&#39;uniform&#39;</span><span class="p">))</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ks_test-710"><a href="#ks_test-710"><span class="linenos">710</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="ks_test-711"><a href="#ks_test-711"><span class="linenos">711</span></a> <span class="sd">&quot;&quot;&quot;Performs a KolmogorovSmirnov test for the p-values of all fit object.</span>
</span><span id="ks_test-712"><a href="#ks_test-712"><span class="linenos">712</span></a>
</span><span id="ks_test-713"><a href="#ks_test-713"><span class="linenos">713</span></a><span class="sd"> Parameters</span>
</span><span id="ks_test-714"><a href="#ks_test-714"><span class="linenos">714</span></a><span class="sd"> ----------</span>
</span><span id="ks_test-715"><a href="#ks_test-715"><span class="linenos">715</span></a><span class="sd"> objects : list</span>
</span><span id="ks_test-716"><a href="#ks_test-716"><span class="linenos">716</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
</span><span id="ks_test-717"><a href="#ks_test-717"><span class="linenos">717</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ks_test-718"><a href="#ks_test-718"><span class="linenos">718</span></a>
</span><span id="ks_test-719"><a href="#ks_test-719"><span class="linenos">719</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="ks_test-720"><a href="#ks_test-720"><span class="linenos">720</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="ks_test-721"><a href="#ks_test-721"><span class="linenos">721</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
</span><span id="ks_test-722"><a href="#ks_test-722"><span class="linenos">722</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
</span><span id="ks_test-723"><a href="#ks_test-723"><span class="linenos">723</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
</span><span id="ks_test-724"><a href="#ks_test-724"><span class="linenos">724</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ks_test-725"><a href="#ks_test-725"><span class="linenos">725</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
</span><span id="ks_test-726"><a href="#ks_test-726"><span class="linenos">726</span></a>
</span><span id="ks_test-727"><a href="#ks_test-727"><span class="linenos">727</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
</span><span id="ks_test-728"><a href="#ks_test-728"><span class="linenos">728</span></a>
</span><span id="ks_test-729"><a href="#ks_test-729"><span class="linenos">729</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="ks_test-730"><a href="#ks_test-730"><span class="linenos">730</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
</span><span id="ks_test-731"><a href="#ks_test-731"><span class="linenos">731</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="ks_test-732"><a href="#ks_test-732"><span class="linenos">732</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="ks_test-733"><a href="#ks_test-733"><span class="linenos">733</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="ks_test-734"><a href="#ks_test-734"><span class="linenos">734</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;p-value&#39;</span><span class="p">)</span>
</span><span id="ks_test-735"><a href="#ks_test-735"><span class="linenos">735</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;Cumulative probability&#39;</span><span class="p">)</span>
</span><span id="ks_test-736"><a href="#ks_test-736"><span class="linenos">736</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; p-values&#39;</span><span class="p">)</span>
</span><span id="ks_test-737"><a href="#ks_test-737"><span class="linenos">737</span></a>
</span><span id="ks_test-738"><a href="#ks_test-738"><span class="linenos">738</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
</span><span id="ks_test-739"><a href="#ks_test-739"><span class="linenos">739</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
</span><span id="ks_test-740"><a href="#ks_test-740"><span class="linenos">740</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span><span id="ks_test-741"><a href="#ks_test-741"><span class="linenos">741</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
</span><span id="ks_test-742"><a href="#ks_test-742"><span class="linenos">742</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
</span><span id="ks_test-743"><a href="#ks_test-743"><span class="linenos">743</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
</span><span id="ks_test-744"><a href="#ks_test-744"><span class="linenos">744</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">&#39;&lt;-&gt;&#39;</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
</span><span id="ks_test-745"><a href="#ks_test-745"><span class="linenos">745</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="ks_test-746"><a href="#ks_test-746"><span class="linenos">746</span></a>
</span><span id="ks_test-747"><a href="#ks_test-747"><span class="linenos">747</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">&#39;uniform&#39;</span><span class="p">))</span>
</span></pre></div>