pyerrors/docs/pyerrors/fits.html
2022-09-27 09:06:57 +00:00

1800 lines
No EOL
373 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 12.2.0"/>
<title>pyerrors.fits API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
<style>/*! syntax-highlighting.css */pre{line-height:125%;}span.linenos{color:inherit; background-color:transparent; padding-left:5px; padding-right:20px;}.pdoc-code .hll{background-color:#ffffcc}.pdoc-code{background:#f8f8f8;}.pdoc-code .c{color:#3D7B7B; font-style:italic}.pdoc-code .err{border:1px solid #FF0000}.pdoc-code .k{color:#008000; font-weight:bold}.pdoc-code .o{color:#666666}.pdoc-code .ch{color:#3D7B7B; font-style:italic}.pdoc-code .cm{color:#3D7B7B; font-style:italic}.pdoc-code .cp{color:#9C6500}.pdoc-code .cpf{color:#3D7B7B; font-style:italic}.pdoc-code .c1{color:#3D7B7B; font-style:italic}.pdoc-code .cs{color:#3D7B7B; font-style:italic}.pdoc-code .gd{color:#A00000}.pdoc-code .ge{font-style:italic}.pdoc-code .gr{color:#E40000}.pdoc-code .gh{color:#000080; font-weight:bold}.pdoc-code .gi{color:#008400}.pdoc-code .go{color:#717171}.pdoc-code .gp{color:#000080; font-weight:bold}.pdoc-code .gs{font-weight:bold}.pdoc-code .gu{color:#800080; font-weight:bold}.pdoc-code .gt{color:#0044DD}.pdoc-code .kc{color:#008000; font-weight:bold}.pdoc-code .kd{color:#008000; font-weight:bold}.pdoc-code .kn{color:#008000; font-weight:bold}.pdoc-code .kp{color:#008000}.pdoc-code .kr{color:#008000; font-weight:bold}.pdoc-code .kt{color:#B00040}.pdoc-code .m{color:#666666}.pdoc-code .s{color:#BA2121}.pdoc-code .na{color:#687822}.pdoc-code .nb{color:#008000}.pdoc-code .nc{color:#0000FF; font-weight:bold}.pdoc-code .no{color:#880000}.pdoc-code .nd{color:#AA22FF}.pdoc-code .ni{color:#717171; font-weight:bold}.pdoc-code .ne{color:#CB3F38; font-weight:bold}.pdoc-code .nf{color:#0000FF}.pdoc-code .nl{color:#767600}.pdoc-code .nn{color:#0000FF; font-weight:bold}.pdoc-code .nt{color:#008000; font-weight:bold}.pdoc-code .nv{color:#19177C}.pdoc-code .ow{color:#AA22FF; font-weight:bold}.pdoc-code .w{color:#bbbbbb}.pdoc-code .mb{color:#666666}.pdoc-code .mf{color:#666666}.pdoc-code .mh{color:#666666}.pdoc-code .mi{color:#666666}.pdoc-code .mo{color:#666666}.pdoc-code .sa{color:#BA2121}.pdoc-code .sb{color:#BA2121}.pdoc-code .sc{color:#BA2121}.pdoc-code .dl{color:#BA2121}.pdoc-code .sd{color:#BA2121; font-style:italic}.pdoc-code .s2{color:#BA2121}.pdoc-code .se{color:#AA5D1F; font-weight:bold}.pdoc-code .sh{color:#BA2121}.pdoc-code .si{color:#A45A77; font-weight:bold}.pdoc-code .sx{color:#008000}.pdoc-code .sr{color:#A45A77}.pdoc-code .s1{color:#BA2121}.pdoc-code .ss{color:#19177C}.pdoc-code .bp{color:#008000}.pdoc-code .fm{color:#0000FF}.pdoc-code .vc{color:#19177C}.pdoc-code .vg{color:#19177C}.pdoc-code .vi{color:#19177C}.pdoc-code .vm{color:#19177C}.pdoc-code .il{color:#666666}</style>
<style>/*! theme.css */:root{--pdoc-background:#fff;}.pdoc{--text:#212529;--muted:#6c757d;--link:#3660a5;--link-hover:#1659c5;--code:#f8f8f8;--active:#fff598;--accent:#eee;--accent2:#c1c1c1;--nav-hover:rgba(255, 255, 255, 0.5);--name:#0066BB;--def:#008800;--annotation:#007020;}</style>
<style>/*! layout.css */html, body{width:100%;height:100%;}html, main{scroll-behavior:smooth;}body{background-color:var(--pdoc-background);}@media (max-width:769px){#navtoggle{cursor:pointer;position:absolute;width:50px;height:40px;top:1rem;right:1rem;border-color:var(--text);color:var(--text);display:flex;opacity:0.8;}#navtoggle:hover{opacity:1;}#togglestate + div{display:none;}#togglestate:checked + div{display:inherit;}main, header{padding:2rem 3vw;}header + main{margin-top:-3rem;}.git-button{display:none !important;}nav input[type="search"]{max-width:77%;}nav input[type="search"]:first-child{margin-top:-6px;}nav input[type="search"]:valid ~ *{display:none !important;}}@media (min-width:770px){:root{--sidebar-width:clamp(12.5rem, 28vw, 22rem);}nav{position:fixed;overflow:auto;height:100vh;width:var(--sidebar-width);}main, header{padding:3rem 2rem 3rem calc(var(--sidebar-width) + 3rem);width:calc(54rem + var(--sidebar-width));max-width:100%;}header + main{margin-top:-4rem;}#navtoggle{display:none;}}#togglestate{position:absolute;height:0;opacity:0;}nav.pdoc{--pad:clamp(0.5rem, 2vw, 1.75rem);--indent:1.5rem;background-color:var(--accent);border-right:1px solid var(--accent2);box-shadow:0 0 20px rgba(50, 50, 50, .2) inset;padding:0 0 0 var(--pad);overflow-wrap:anywhere;scrollbar-width:thin; scrollbar-color:var(--accent2) transparent }nav.pdoc::-webkit-scrollbar{width:.4rem; }nav.pdoc::-webkit-scrollbar-thumb{background-color:var(--accent2); }nav.pdoc > div{padding:var(--pad) 0;}nav.pdoc .module-list-button{display:inline-flex;align-items:center;color:var(--text);border-color:var(--muted);margin-bottom:1rem;}nav.pdoc .module-list-button:hover{border-color:var(--text);}nav.pdoc input[type=search]{display:block;outline-offset:0;width:calc(100% - var(--pad));}nav.pdoc .logo{max-width:calc(100% - var(--pad));max-height:35vh;display:block;margin:0 auto 1rem;transform:translate(calc(-.5 * var(--pad)), 0);}nav.pdoc ul{list-style:none;padding-left:0;}nav.pdoc > div > ul{margin-left:calc(0px - var(--pad));}nav.pdoc li a{padding:.2rem 0 .2rem calc(var(--pad) + var(--indent));}nav.pdoc > div > ul > li > a{padding-left:var(--pad);}nav.pdoc li{transition:all 100ms;}nav.pdoc li:hover{background-color:var(--nav-hover);}nav.pdoc a, nav.pdoc a:hover{color:var(--text);}nav.pdoc a{display:block;}nav.pdoc > h2:first-of-type{margin-top:1.5rem;}nav.pdoc .class:before{content:"class ";color:var(--muted);}nav.pdoc .function:after{content:"()";color:var(--muted);}nav.pdoc footer:before{content:"";display:block;width:calc(100% - var(--pad));border-top:solid var(--accent2) 1px;margin-top:1.5rem;padding-top:.5rem;}nav.pdoc footer{font-size:small;}</style>
<style>/*! content.css */.pdoc{color:var(--text);box-sizing:border-box;line-height:1.5;background:none;}.pdoc .pdoc-button{display:inline-block;border:solid black 1px;border-radius:2px;font-size:.75rem;padding:calc(0.5em - 1px) 1em;transition:100ms all;}.pdoc .pdoc-alert{padding:1rem 1rem 1rem calc(1.5rem + 24px);border:1px solid transparent;border-radius:.25rem;background-repeat:no-repeat;background-position:1rem center;margin-bottom:1rem;}.pdoc .pdoc-alert > *:last-child{margin-bottom:0;}.pdoc .pdoc-alert-note {color:#084298;background-color:#cfe2ff;border-color:#b6d4fe;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23084298%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8%2016A8%208%200%201%200%208%200a8%208%200%200%200%200%2016zm.93-9.412-1%204.705c-.07.34.029.533.304.533.194%200%20.487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703%200-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381%202.29-.287zM8%205.5a1%201%200%201%201%200-2%201%201%200%200%201%200%202z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23664d03%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8.982%201.566a1.13%201.13%200%200%200-1.96%200L.165%2013.233c-.457.778.091%201.767.98%201.767h13.713c.889%200%201.438-.99.98-1.767L8.982%201.566zM8%205c.535%200%20.954.462.9.995l-.35%203.507a.552.552%200%200%201-1.1%200L7.1%205.995A.905.905%200%200%201%208%205zm.002%206a1%201%200%201%201%200%202%201%201%200%200%201%200-2z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23842029%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M5.52.359A.5.5%200%200%201%206%200h4a.5.5%200%200%201%20.474.658L8.694%206H12.5a.5.5%200%200%201%20.395.807l-7%209a.5.5%200%200%201-.873-.454L6.823%209.5H3.5a.5.5%200%200%201-.48-.641l2.5-8.5z%22/%3E%3C/svg%3E");}.pdoc .visually-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important;}.pdoc h1, .pdoc h2, .pdoc h3{font-weight:300;margin:.3em 0;padding:.2em 0;}.pdoc > section:not(.module-info) h1{font-size:1.5rem;font-weight:500;}.pdoc > section:not(.module-info) h2{font-size:1.4rem;font-weight:500;}.pdoc > section:not(.module-info) h3{font-size:1.3rem;font-weight:500;}.pdoc > section:not(.module-info) h4{font-size:1.2rem;}.pdoc > section:not(.module-info) h5{font-size:1.1rem;}.pdoc a{text-decoration:none;color:var(--link);}.pdoc a:hover{color:var(--link-hover);}.pdoc blockquote{margin-left:2rem;}.pdoc pre{border-top:1px solid var(--accent2);border-bottom:1px solid var(--accent2);margin-top:0;margin-bottom:1em;padding:.5rem 0 .5rem .5rem;overflow-x:auto;background-color:var(--code);}.pdoc code{color:var(--text);padding:.2em .4em;margin:0;font-size:85%;background-color:var(--code);border-radius:6px;}.pdoc a > code{color:inherit;}.pdoc pre > code{display:inline-block;font-size:inherit;background:none;border:none;padding:0;}.pdoc > section:not(.module-info){margin-bottom:1.5rem;}.pdoc .modulename{margin-top:0;font-weight:bold;}.pdoc .modulename a{color:var(--link);transition:100ms all;}.pdoc .git-button{float:right;border:solid var(--link) 1px;}.pdoc .git-button:hover{background-color:var(--link);color:var(--pdoc-background);}.view-source-toggle-state,.view-source-toggle-state ~ .pdoc-code{display:none;}.view-source-toggle-state:checked ~ .pdoc-code{display:block;}.view-source-button{display:inline-block;float:right;font-size:.75rem;line-height:1.5rem;color:var(--muted);padding:0 .4rem 0 1.3rem;cursor:pointer;text-indent:-2px;}.view-source-button > span{visibility:hidden;}.module-info .view-source-button{float:none;display:flex;justify-content:flex-end;margin:-1.2rem .4rem -.2rem 0;}.view-source-button::before{position:absolute;content:"View Source";display:list-item;list-style-type:disclosure-closed;}.view-source-toggle-state:checked ~ .attr .view-source-button::before,.view-source-toggle-state:checked ~ .view-source-button::before{list-style-type:disclosure-open;}.pdoc .docstring{margin-bottom:1.5rem;}.pdoc section:not(.module-info) .docstring{margin-left:clamp(0rem, 5vw - 2rem, 1rem);}.pdoc .docstring .pdoc-code{margin-left:1em;margin-right:1em;}.pdoc h1:target,.pdoc h2:target,.pdoc h3:target,.pdoc h4:target,.pdoc h5:target,.pdoc h6:target,.pdoc .pdoc-code > pre > span:target{background-color:var(--active);box-shadow:-1rem 0 0 0 var(--active);}.pdoc .pdoc-code > pre > span:target{display:block;}.pdoc div:target > .attr,.pdoc section:target > .attr,.pdoc dd:target > a{background-color:var(--active);}.pdoc *{scroll-margin:2rem;}.pdoc .pdoc-code .linenos{user-select:none;}.pdoc .attr:hover{filter:contrast(0.95);}.pdoc section, .pdoc .classattr{position:relative;}.pdoc .headerlink{--width:clamp(1rem, 3vw, 2rem);position:absolute;top:0;left:calc(0rem - var(--width));transition:all 100ms ease-in-out;opacity:0;}.pdoc .headerlink::before{content:"#";display:block;text-align:center;width:var(--width);height:2.3rem;line-height:2.3rem;font-size:1.5rem;}.pdoc .attr:hover ~ .headerlink,.pdoc *:target > .headerlink,.pdoc .headerlink:hover{opacity:1;}.pdoc .attr{display:block;margin:.5rem 0 .5rem;padding:.4rem .4rem .4rem 1rem;background-color:var(--accent);overflow-x:auto;}.pdoc .classattr{margin-left:2rem;}.pdoc .name{color:var(--name);font-weight:bold;}.pdoc .def{color:var(--def);font-weight:bold;}.pdoc .signature{background-color:transparent;}.pdoc .param, .pdoc .return-annotation{white-space:pre;}.pdoc .signature.multiline .param{display:block;}.pdoc .signature.condensed .param{display:inline-block;}.pdoc .annotation{color:var(--annotation);}.pdoc .inherited{margin-left:2rem;}.pdoc .inherited dt{font-weight:700;}.pdoc .inherited dt, .pdoc .inherited dd{display:inline;margin-left:0;margin-bottom:.5rem;}.pdoc .inherited dd:not(:last-child):after{content:", ";}.pdoc .inherited .class:before{content:"class ";}.pdoc .inherited .function a:after{content:"()";}.pdoc .search-result .docstring{overflow:auto;max-height:25vh;}.pdoc .search-result.focused > .attr{background-color:var(--active);}.pdoc .attribution{margin-top:2rem;display:block;opacity:0.5;transition:all 200ms;filter:grayscale(100%);}.pdoc .attribution:hover{opacity:1;filter:grayscale(0%);}.pdoc .attribution img{margin-left:5px;height:35px;vertical-align:middle;width:70px;transition:all 200ms;}.pdoc table{display:block;width:max-content;max-width:100%;overflow:auto;margin-bottom:1rem;}.pdoc table th{font-weight:600;}.pdoc table th, .pdoc table td{padding:6px 13px;border:1px solid var(--accent2);}</style>
<style>/*! custom.css */</style><script>
window.MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']]
}
};
</script>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script>
/* Re-invoke MathJax when DOM content changes, for example during search. */
document.addEventListener("DOMContentLoaded", () => {
new MutationObserver(() => MathJax.typeset()).observe(
document.querySelector("main.pdoc").parentNode,
{childList: true}
);
})
</script></head>
<body>
<nav class="pdoc">
<label id="navtoggle" for="togglestate" class="pdoc-button"><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke-linecap='round' stroke="currentColor" stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg></label>
<input id="togglestate" type="checkbox" aria-hidden="true" tabindex="-1">
<div> <a class="pdoc-button module-list-button" href="../pyerrors.html">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-in-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M10 3.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 1 0v2A1.5 1.5 0 0 1 9.5 14h-8A1.5 1.5 0 0 1 0 12.5v-9A1.5 1.5 0 0 1 1.5 2h8A1.5 1.5 0 0 1 11 3.5v2a.5.5 0 0 1-1 0v-2z"/>
<path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
</svg> &nbsp;pyerrors</a>
<input type="search" placeholder="Search..." role="searchbox" aria-label="search"
pattern=".+" required>
<h2>API Documentation</h2>
<ul class="memberlist">
<li>
<a class="class" href="#Fit_result">Fit_result</a>
<ul class="memberlist">
<li>
<a class="function" href="#Fit_result.__init__">Fit_result</a>
</li>
<li>
<a class="function" href="#Fit_result.gamma_method">gamma_method</a>
</li>
</ul>
</li>
<li>
<a class="function" href="#least_squares">least_squares</a>
</li>
<li>
<a class="function" href="#total_least_squares">total_least_squares</a>
</li>
<li>
<a class="function" href="#fit_lin">fit_lin</a>
</li>
<li>
<a class="function" href="#qqplot">qqplot</a>
</li>
<li>
<a class="function" href="#residual_plot">residual_plot</a>
</li>
<li>
<a class="function" href="#error_band">error_band</a>
</li>
<li>
<a class="function" href="#ks_test">ks_test</a>
</li>
</ul>
<a class="attribution" title="pdoc: Python API documentation generator" href="https://pdoc.dev" target="_blank">
built with <span class="visually-hidden">pdoc</span><img
alt="pdoc logo"
src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20role%3D%22img%22%20aria-label%3D%22pdoc%20logo%22%20width%3D%22300%22%20height%3D%22150%22%20viewBox%3D%22-1%200%2060%2030%22%3E%3Ctitle%3Epdoc%3C/title%3E%3Cpath%20d%3D%22M29.621%2021.293c-.011-.273-.214-.475-.511-.481a.5.5%200%200%200-.489.503l-.044%201.393c-.097.551-.695%201.215-1.566%201.704-.577.428-1.306.486-2.193.182-1.426-.617-2.467-1.654-3.304-2.487l-.173-.172a3.43%203.43%200%200%200-.365-.306.49.49%200%200%200-.286-.196c-1.718-1.06-4.931-1.47-7.353.191l-.219.15c-1.707%201.187-3.413%202.131-4.328%201.03-.02-.027-.49-.685-.141-1.763.233-.721.546-2.408.772-4.076.042-.09.067-.187.046-.288.166-1.347.277-2.625.241-3.351%201.378-1.008%202.271-2.586%202.271-4.362%200-.976-.272-1.935-.788-2.774-.057-.094-.122-.18-.184-.268.033-.167.052-.339.052-.516%200-1.477-1.202-2.679-2.679-2.679-.791%200-1.496.352-1.987.9a6.3%206.3%200%200%200-1.001.029c-.492-.564-1.207-.929-2.012-.929-1.477%200-2.679%201.202-2.679%202.679A2.65%202.65%200%200%200%20.97%206.554c-.383.747-.595%201.572-.595%202.41%200%202.311%201.507%204.29%203.635%205.107-.037.699-.147%202.27-.423%203.294l-.137.461c-.622%202.042-2.515%208.257%201.727%2010.643%201.614.908%203.06%201.248%204.317%201.248%202.665%200%204.492-1.524%205.322-2.401%201.476-1.559%202.886-1.854%206.491.82%201.877%201.393%203.514%201.753%204.861%201.068%202.223-1.713%202.811-3.867%203.399-6.374.077-.846.056-1.469.054-1.537zm-4.835%204.313c-.054.305-.156.586-.242.629-.034-.007-.131-.022-.307-.157-.145-.111-.314-.478-.456-.908.221.121.432.25.675.355.115.039.219.051.33.081zm-2.251-1.238c-.05.33-.158.648-.252.694-.022.001-.125-.018-.307-.157-.217-.166-.488-.906-.639-1.573.358.344.754.693%201.198%201.036zm-3.887-2.337c-.006-.116-.018-.231-.041-.342.635.145%201.189.368%201.599.625.097.231.166.481.174.642-.03.049-.055.101-.067.158-.046.013-.128.026-.298.004-.278-.037-.901-.57-1.367-1.087zm-1.127-.497c.116.306.176.625.12.71-.019.014-.117.045-.345.016-.206-.027-.604-.332-.986-.695.41-.051.816-.056%201.211-.031zm-4.535%201.535c.209.22.379.47.358.598-.006.041-.088.138-.351.234-.144.055-.539-.063-.979-.259a11.66%2011.66%200%200%200%20.972-.573zm.983-.664c.359-.237.738-.418%201.126-.554.25.237.479.548.457.694-.006.042-.087.138-.351.235-.174.064-.694-.105-1.232-.375zm-3.381%201.794c-.022.145-.061.29-.149.401-.133.166-.358.248-.69.251h-.002c-.133%200-.306-.26-.45-.621.417.091.854.07%201.291-.031zm-2.066-8.077a4.78%204.78%200%200%201-.775-.584c.172-.115.505-.254.88-.378l-.105.962zm-.331%202.302a10.32%2010.32%200%200%201-.828-.502c.202-.143.576-.328.984-.49l-.156.992zm-.45%202.157l-.701-.403c.214-.115.536-.249.891-.376a11.57%2011.57%200%200%201-.19.779zm-.181%201.716c.064.398.194.702.298.893-.194-.051-.435-.162-.736-.398.061-.119.224-.3.438-.495zM8.87%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zm-.735-.389a1.15%201.15%200%200%200-.314.783%201.16%201.16%200%200%200%201.162%201.162c.457%200%20.842-.27%201.032-.653.026.117.042.238.042.362a1.68%201.68%200%200%201-1.679%201.679%201.68%201.68%200%200%201-1.679-1.679c0-.843.626-1.535%201.436-1.654zM5.059%205.406A1.68%201.68%200%200%201%203.38%207.085a1.68%201.68%200%200%201-1.679-1.679c0-.037.009-.072.011-.109.21.3.541.508.935.508a1.16%201.16%200%200%200%201.162-1.162%201.14%201.14%200%200%200-.474-.912c.015%200%20.03-.005.045-.005.926.001%201.679.754%201.679%201.68zM3.198%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zM1.375%208.964c0-.52.103-1.035.288-1.52.466.394%201.06.64%201.717.64%201.144%200%202.116-.725%202.499-1.738.383%201.012%201.355%201.738%202.499%201.738.867%200%201.631-.421%202.121-1.062.307.605.478%201.267.478%201.942%200%202.486-2.153%204.51-4.801%204.51s-4.801-2.023-4.801-4.51zm24.342%2019.349c-.985.498-2.267.168-3.813-.979-3.073-2.281-5.453-3.199-7.813-.705-1.315%201.391-4.163%203.365-8.423.97-3.174-1.786-2.239-6.266-1.261-9.479l.146-.492c.276-1.02.395-2.457.444-3.268a6.11%206.11%200%200%200%201.18.115%206.01%206.01%200%200%200%202.536-.562l-.006.175c-.802.215-1.848.612-2.021%201.25-.079.295.021.601.274.837.219.203.415.364.598.501-.667.304-1.243.698-1.311%201.179-.02.144-.022.507.393.787.213.144.395.26.564.365-1.285.521-1.361.96-1.381%201.126-.018.142-.011.496.427.746l.854.489c-.473.389-.971.914-.999%201.429-.018.278.095.532.316.713.675.556%201.231.721%201.653.721.059%200%20.104-.014.158-.02.207.707.641%201.64%201.513%201.64h.013c.8-.008%201.236-.345%201.462-.626.173-.216.268-.457.325-.692.424.195.93.374%201.372.374.151%200%20.294-.021.423-.068.732-.27.944-.704.993-1.021.009-.061.003-.119.002-.179.266.086.538.147.789.147.15%200%20.294-.021.423-.069.542-.2.797-.489.914-.754.237.147.478.258.704.288.106.014.205.021.296.021.356%200%20.595-.101.767-.229.438.435%201.094.992%201.656%201.067.106.014.205.021.296.021a1.56%201.56%200%200%200%20.323-.035c.17.575.453%201.289.866%201.605.358.273.665.362.914.362a.99.99%200%200%200%20.421-.093%201.03%201.03%200%200%200%20.245-.164c.168.428.39.846.68%201.068.358.273.665.362.913.362a.99.99%200%200%200%20.421-.093c.317-.148.512-.448.639-.762.251.157.495.257.726.257.127%200%20.25-.024.37-.071.427-.17.706-.617.841-1.314.022-.015.047-.022.068-.038.067-.051.133-.104.196-.159-.443%201.486-1.107%202.761-2.086%203.257zM8.66%209.925a.5.5%200%201%200-1%200c0%20.653-.818%201.205-1.787%201.205s-1.787-.552-1.787-1.205a.5.5%200%201%200-1%200c0%201.216%201.25%202.205%202.787%202.205s2.787-.989%202.787-2.205zm4.4%2015.965l-.208.097c-2.661%201.258-4.708%201.436-6.086.527-1.542-1.017-1.88-3.19-1.844-4.198a.4.4%200%200%200-.385-.414c-.242-.029-.406.164-.414.385-.046%201.249.367%203.686%202.202%204.896.708.467%201.547.7%202.51.7%201.248%200%202.706-.392%204.362-1.174l.185-.086a.4.4%200%200%200%20.205-.527c-.089-.204-.326-.291-.527-.206zM9.547%202.292c.093.077.205.114.317.114a.5.5%200%200%200%20.318-.886L8.817.397a.5.5%200%200%200-.703.068.5.5%200%200%200%20.069.703l1.364%201.124zm-7.661-.065c.086%200%20.173-.022.253-.068l1.523-.893a.5.5%200%200%200-.506-.863l-1.523.892a.5.5%200%200%200-.179.685c.094.158.261.247.432.247z%22%20transform%3D%22matrix%28-1%200%200%201%2058%200%29%22%20fill%3D%22%233bb300%22/%3E%3Cpath%20d%3D%22M.3%2021.86V10.18q0-.46.02-.68.04-.22.18-.5.28-.54%201.34-.54%201.06%200%201.42.28.38.26.44.78.76-1.04%202.38-1.04%201.64%200%203.1%201.54%201.46%201.54%201.46%203.58%200%202.04-1.46%203.58-1.44%201.54-3.08%201.54-1.64%200-2.38-.92v4.04q0%20.46-.04.68-.02.22-.18.5-.14.3-.5.42-.36.12-.98.12-.62%200-1-.12-.36-.12-.52-.4-.14-.28-.18-.5-.02-.22-.02-.68zm3.96-9.42q-.46.54-.46%201.18%200%20.64.46%201.18.48.52%201.2.52.74%200%201.24-.52.52-.52.52-1.18%200-.66-.48-1.18-.48-.54-1.26-.54-.76%200-1.22.54zm14.741-8.36q.16-.3.54-.42.38-.12%201-.12.64%200%201.02.12.38.12.52.42.16.3.18.54.04.22.04.68v11.94q0%20.46-.04.7-.02.22-.18.5-.3.54-1.7.54-1.38%200-1.54-.98-.84.96-2.34.96-1.8%200-3.28-1.56-1.48-1.58-1.48-3.66%200-2.1%201.48-3.68%201.5-1.58%203.28-1.58%201.48%200%202.3%201v-4.2q0-.46.02-.68.04-.24.18-.52zm-3.24%2010.86q.52.54%201.26.54.74%200%201.22-.54.5-.54.5-1.18%200-.66-.48-1.22-.46-.56-1.26-.56-.8%200-1.28.56-.48.54-.48%201.2%200%20.66.52%201.2zm7.833-1.2q0-2.4%201.68-3.96%201.68-1.56%203.84-1.56%202.16%200%203.82%201.56%201.66%201.54%201.66%203.94%200%201.66-.86%202.96-.86%201.28-2.1%201.9-1.22.6-2.54.6-1.32%200-2.56-.64-1.24-.66-2.1-1.92-.84-1.28-.84-2.88zm4.18%201.44q.64.48%201.3.48.66%200%201.32-.5.66-.5.66-1.48%200-.98-.62-1.46-.62-.48-1.34-.48-.72%200-1.34.5-.62.5-.62%201.48%200%20.96.64%201.46zm11.412-1.44q0%20.84.56%201.32.56.46%201.18.46.64%200%201.18-.36.56-.38.9-.38.6%200%201.46%201.06.46.58.46%201.04%200%20.76-1.1%201.42-1.14.8-2.8.8-1.86%200-3.58-1.34-.82-.64-1.34-1.7-.52-1.08-.52-2.36%200-1.3.52-2.34.52-1.06%201.34-1.7%201.66-1.32%203.54-1.32.76%200%201.48.22.72.2%201.06.4l.32.2q.36.24.56.38.52.4.52.92%200%20.5-.42%201.14-.72%201.1-1.38%201.1-.38%200-1.08-.44-.36-.34-1.04-.34-.66%200-1.24.48-.58.48-.58%201.34z%22%20fill%3D%22green%22/%3E%3C/svg%3E"/>
</a>
</div>
</nav>
<main class="pdoc">
<section class="module-info">
<h1 class="modulename">
<a href="./../pyerrors.html">pyerrors</a><wbr>.fits </h1>
<input id="mod-fits-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-source-button" for="mod-fits-view-source"><span>View Source</span></label>
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">import</span> <span class="nn">gc</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a><span class="kn">from</span> <span class="nn">collections.abc</span> <span class="kn">import</span> <span class="n">Sequence</span>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">warnings</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">import</span> <span class="nn">autograd.numpy</span> <span class="k">as</span> <span class="nn">anp</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">import</span> <span class="nn">scipy.optimize</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">import</span> <span class="nn">scipy.stats</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">gridspec</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">from</span> <span class="nn">scipy.odr</span> <span class="kn">import</span> <span class="n">ODR</span><span class="p">,</span> <span class="n">Model</span><span class="p">,</span> <span class="n">RealData</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">import</span> <span class="nn">iminuit</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span> <span class="nn">autograd</span> <span class="kn">import</span> <span class="n">jacobian</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">from</span> <span class="nn">autograd</span> <span class="kn">import</span> <span class="n">elementwise_grad</span> <span class="k">as</span> <span class="n">egrad</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">from</span> <span class="nn">.obs</span> <span class="kn">import</span> <span class="n">Obs</span><span class="p">,</span> <span class="n">derived_observable</span><span class="p">,</span> <span class="n">covariance</span><span class="p">,</span> <span class="n">cov_Obs</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="k">class</span> <span class="nc">Fit_result</span><span class="p">(</span><span class="n">Sequence</span><span class="p">):</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="sd">&quot;&quot;&quot;Represents fit results.</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="sd"> Attributes</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="sd"> ----------</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="sd"> fit_parameters : list</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="sd"> results for the individual fit parameters,</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="sd"> also accessible via indices.</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">):</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">)</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="k">def</span> <span class="nf">gamma_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="sd">&quot;&quot;&quot;Apply the gamma method to all fit parameters&quot;&quot;&quot;</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">gamma_method</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">]</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">my_str</span> <span class="o">=</span> <span class="s1">&#39;Goodness of fit:</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;chisquare_by_dof&#39;</span><span class="p">):</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\u03C7\u00b2</span><span class="s1">/d.o.f. = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">chisquare_by_dof</span><span class="si">:</span><span class="s1">2.6f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;residual_variance&#39;</span><span class="p">):</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;residual variance = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">residual_variance</span><span class="si">:</span><span class="s1">2.6f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;chisquare_by_expected_chisquare&#39;</span><span class="p">):</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\u03C7\u00b2</span><span class="s1">/</span><span class="se">\u03C7\u00b2</span><span class="s1">exp = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span><span class="si">:</span><span class="s1">2.6f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;p_value&#39;</span><span class="p">):</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;p-value = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">p_value</span><span class="si">:</span><span class="s1">2.4f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;Fit parameters:</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">for</span> <span class="n">i_par</span><span class="p">,</span> <span class="n">par</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">):</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">i_par</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">par</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">par</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">par</span> <span class="o">&lt;</span> <span class="mf">0.0</span><span class="p">))</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="n">my_str</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">m</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span> <span class="o">+</span> <span class="mi">1</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">return</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">key</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;: &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">())])</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="k">def</span> <span class="nf">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">func</span><span class="p">,</span> <span class="n">priors</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="sa">r</span><span class="sd">&#39;&#39;&#39;Performs a non-linear fit to y = func(x).</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="sd"> Parameters</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="sd"> ----------</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="sd"> x : list</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a><span class="sd"> list of floats.</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a><span class="sd"> y : list</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a><span class="sd"> list of Obs.</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="sd"> func : object</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd"> fit function, has to be of the form</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="sd"> ```python</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="sd"> import autograd.numpy as anp</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="sd"> def func(a, x):</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="sd"> return a[0] + a[1] * x + a[2] * anp.sinh(x)</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> ```</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd"> For multiple x values func can be of the form</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> ```python</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> def func(a, x):</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="sd"> (x1, x2) = x</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="sd"> return a[0] * x1 ** 2 + a[1] * x2</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="sd"> ```</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> It is important that all numpy functions refer to autograd.numpy, otherwise the differentiation</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> will not work.</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> priors : list, optional</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> priors has to be a list with an entry for every parameter in the fit. The entries can either be</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> Obs (e.g. results from a previous fit) or strings containing a value and an error formatted like</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="sd"> 0.548(23), 500(40) or 0.5(0.4)</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> silent : bool, optional</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> If true all output to the console is omitted (default False).</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a><span class="sd"> initial_guess : list</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> can provide an initial guess for the input parameters. Relevant for</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> non-linear fits with many parameters. In case of correlated fits the guess is used to perform</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> an uncorrelated fit which then serves as guess for the correlated fit.</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="sd"> method : str, optional</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="sd"> can be used to choose an alternative method for the minimization of chisquare.</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="sd"> The possible methods are the ones which can be used for scipy.optimize.minimize and</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="sd"> migrad of iminuit. If no method is specified, Levenberg-Marquard is used.</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="sd"> Reliable alternatives are migrad, Powell and Nelder-Mead.</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="sd"> correlated_fit : bool</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="sd"> If True, use the full inverse covariance matrix in the definition of the chisquare cost function.</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="sd"> For details about how the covariance matrix is estimated see `pyerrors.obs.covariance`.</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="sd"> In practice the correlation matrix is Cholesky decomposed and inverted (instead of the covariance matrix).</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="sd"> This procedure should be numerically more stable as the correlation matrix is typically better conditioned (Jacobi preconditioning).</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="sd"> At the moment this option only works for `prior==None` and when no `method` is given.</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="sd"> expected_chisquare : bool</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a><span class="sd"> If True estimates the expected chisquare which is</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a><span class="sd"> corrected by effects caused by correlated input data (default False).</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="sd"> resplot : bool</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="sd"> If True, a plot which displays fit, data and residuals is generated (default False).</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="sd"> qqplot : bool</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="sd"> If True, a quantile-quantile plot of the fit result is generated (default False).</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="sd"> &#39;&#39;&#39;</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="n">priors</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="n">_prior_fit</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">priors</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="n">silent</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">_standard_fit</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">silent</span><span class="o">=</span><span class="n">silent</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="k">def</span> <span class="nf">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">func</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="sa">r</span><span class="sd">&#39;&#39;&#39;Performs a non-linear fit to y = func(x) and returns a list of Obs corresponding to the fit parameters.</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="sd"> Parameters</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a><span class="sd"> ----------</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a><span class="sd"> x : list</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a><span class="sd"> list of Obs, or a tuple of lists of Obs</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a><span class="sd"> y : list</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="sd"> list of Obs. The dvalues of the Obs are used as x- and yerror for the fit.</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a><span class="sd"> func : object</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a><span class="sd"> func has to be of the form</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a><span class="sd"> ```python</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a><span class="sd"> import autograd.numpy as anp</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a><span class="sd"> def func(a, x):</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a><span class="sd"> return a[0] + a[1] * x + a[2] * anp.sinh(x)</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a><span class="sd"> ```</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a><span class="sd"> For multiple x values func can be of the form</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a><span class="sd"> ```python</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="sd"> def func(a, x):</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a><span class="sd"> (x1, x2) = x</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a><span class="sd"> return a[0] * x1 ** 2 + a[1] * x2</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="sd"> ```</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="sd"> It is important that all numpy functions refer to autograd.numpy, otherwise the differentiation</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="sd"> will not work.</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="sd"> silent : bool, optional</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a><span class="sd"> If true all output to the console is omitted (default False).</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="sd"> initial_guess : list</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd"> can provide an initial guess for the input parameters. Relevant for non-linear</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="sd"> fits with many parameters.</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> expected_chisquare : bool</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> If true prints the expected chisquare which is</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="sd"> corrected by effects caused by correlated input data.</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> This can take a while as the full correlation matrix</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> has to be calculated (default False).</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="sd"> Notes</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="sd"> -----</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a><span class="sd"> Based on the orthogonal distance regression module of scipy</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="sd"> &#39;&#39;&#39;</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">Fit_result</span><span class="p">()</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_function</span> <span class="o">=</span> <span class="n">func</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">x</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">x</span><span class="p">)</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">x_shape</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;func has to be a function.&#39;</span><span class="p">)</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</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="mi">42</span><span class="p">):</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">func</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="n">x</span><span class="o">.</span><span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">continue</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">continue</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">break</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Fit function is not valid.&quot;</span><span class="p">)</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">n_parms</span> <span class="o">=</span> <span class="n">i</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</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-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Fit with&#39;</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">,</span> <span class="s1">&#39;parameter&#39;</span> <span class="o">+</span> <span class="s1">&#39;s&#39;</span> <span class="o">*</span> <span class="p">(</span><span class="n">n_parms</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">))</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">x_f</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vectorize</span><span class="p">(</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">value</span><span class="p">)(</span><span class="n">x</span><span class="p">)</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">dx_f</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vectorize</span><span class="p">(</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)(</span><span class="n">x</span><span class="p">)</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">y_f</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">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><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">dy_f</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">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-200"><a href="#L-200"><span class="linenos">200</span></a>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="k">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">asarray</span><span class="p">(</span><span class="n">dx_f</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">):</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;No x errors available, run the gamma method first.&#39;</span><span class="p">)</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</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">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">):</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;No y errors available, run the gamma method first.&#39;</span><span class="p">)</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="k">if</span> <span class="s1">&#39;initial_guess&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">x0</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;initial_guess&#39;</span><span class="p">)</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_parms</span><span class="p">:</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Initial guess does not have the correct length: </span><span class="si">%d</span><span class="s1"> vs. </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">),</span> <span class="n">n_parms</span><span class="p">))</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">x0</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">n_parms</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">data</span> <span class="o">=</span> <span class="n">RealData</span><span class="p">(</span><span class="n">x_f</span><span class="p">,</span> <span class="n">y_f</span><span class="p">,</span> <span class="n">sx</span><span class="o">=</span><span class="n">dx_f</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="n">dy_f</span><span class="p">)</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">Model</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">odr</span> <span class="o">=</span> <span class="n">ODR</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">partol</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-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">odr</span><span class="o">.</span><span class="n">set_job</span><span class="p">(</span><span class="n">fit_type</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">deriv</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">odr</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">output</span><span class="o">.</span><span class="n">residual_variance</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">res_var</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="s1">&#39;ODR&#39;</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">output</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">stopreason</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">output</span><span class="o">.</span><span class="n">xplus</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Method: ODR&#39;</span><span class="p">)</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="nb">print</span><span class="p">(</span><span class="o">*</span><span class="n">out</span><span class="o">.</span><span class="n">stopreason</span><span class="p">)</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Residual variance:&#39;</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">residual_variance</span><span class="p">)</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">info</span> <span class="o">&gt;</span> <span class="mi">3</span><span class="p">:</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</span></a>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">x_f</span><span class="o">.</span><span class="n">size</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">def</span> <span class="nf">odr_chisquare</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</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">n_parms</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</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 class="o">+</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">x_f</span> <span class="o">-</span> <span class="n">p</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</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">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">dy_f</span><span class="o">.</span><span class="n">ravel</span><span class="p">(),</span> <span class="n">dx_f</span><span class="o">.</span><span class="n">ravel</span><span class="p">()))))</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</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;covariance&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">cov</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;covariance&#39;</span><span class="p">)</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</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">y</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">number_of_x_parameters</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span> <span class="o">/</span> <span class="n">x_f</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><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">old_jac</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">out</span><span class="o">.</span><span class="n">beta</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="p">)</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">fused_row1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">old_jac</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">number_of_x_parameters</span> <span class="o">*</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">old_jac</span><span class="o">.</span><span class="n">shape</span><span class="p">)]),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)))</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">fused_row2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">jacobian</span><span class="p">(</span><span class="k">lambda</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">y</span><span class="p">,</span> <span class="n">x</span><span class="p">))(</span><span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">beta</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_f</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="n">x_f</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">number_of_x_parameters</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">number_of_x_parameters</span> <span class="o">*</span> <span class="n">old_jac</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])))</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">new_jac</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">fused_row1</span><span class="p">,</span> <span class="n">fused_row2</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">W</span> <span class="o">@</span> <span class="n">new_jac</span>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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">P_phi</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</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-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">if</span> <span class="n">expected_chisquare</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">:</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Negative expected_chisquare.&quot;</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">expected_chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">expected_chisquare</span><span class="p">)</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</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">odr_chisquare</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">out</span><span class="o">.</span><span class="n">beta</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span> <span class="o">/</span> <span class="n">expected_chisquare</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</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-267"><a href="#L-267"><span class="linenos">267</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-268"><a href="#L-268"><span class="linenos">268</span></a>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="n">fitp</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">beta</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</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">odr_chisquare</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">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</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-274"><a href="#L-274"><span class="linenos">274</span></a>
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">def</span> <span class="nf">odr_chisquare_compact_x</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</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">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span>
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</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 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="o">+</span> <span class="n">m</span><span class="p">:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">jac_jac_x</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">odr_chisquare_compact_x</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">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">(),</span> <span class="n">x_f</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>
</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="c1"># Compute hess^{-1} @ jac_jac_x[:n_parms + m, n_parms + m:] using LAPACK dgesv</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">deriv_x</span> <span class="o">=</span> <span class="o">-</span><span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">hess</span><span class="p">,</span> <span class="n">jac_jac_x</span><span class="p">[:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">,</span> <span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">:])</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</span></a>
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="k">def</span> <span class="nf">odr_chisquare_compact_y</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</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">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span>
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</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="o">+</span> <span class="n">m</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 class="o">+</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">x_f</span> <span class="o">-</span> <span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">jac_jac_y</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">odr_chisquare_compact_y</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">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">(),</span> <span class="n">y_f</span><span class="p">)))</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>
</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="c1"># Compute hess^{-1} @ jac_jac_y[:n_parms + m, n_parms + m:] using LAPACK dgesv</span>
</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">deriv_y</span> <span class="o">=</span> <span class="o">-</span><span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">hess</span><span class="p">,</span> <span class="n">jac_jac_y</span><span class="p">[:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">,</span> <span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">:])</span>
</span><span id="L-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-300"><a href="#L-300"><span class="linenos">300</span></a>
</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</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">my_var</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">my_var</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">x</span><span class="o">.</span><span class="n">ravel</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">out</span><span class="o">.</span><span class="n">beta</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">x</span><span class="o">.</span><span class="n">ravel</span><span class="p">())</span> <span class="o">+</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_x</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">deriv_y</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>
</span><span id="L-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</span></a>
</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">output</span><span class="o">.</span><span class="n">odr_chisquare</span> <span class="o">=</span> <span class="n">odr_chisquare</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">out</span><span class="o">.</span><span class="n">beta</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="L-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</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">scipy</span><span class="o">.</span><span class="n">stats</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">odr_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-310"><a href="#L-310"><span class="linenos">310</span></a>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="k">return</span> <span class="n">output</span>
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>
</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a><span class="k">def</span> <span class="nf">_prior_fit</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">priors</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">Fit_result</span><span class="p">()</span>
</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_function</span> <span class="o">=</span> <span class="n">func</span>
</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">x</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">x</span><span class="p">)</span>
</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;func has to be a function.&#39;</span><span class="p">)</span>
</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>
</span><span id="L-324"><a href="#L-324"><span class="linenos">324</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="mi">100</span><span class="p">):</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">func</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="k">continue</span>
</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="k">continue</span>
</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="k">break</span>
</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Fit function is not valid.&quot;</span><span class="p">)</span>
</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>
</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">n_parms</span> <span class="o">=</span> <span class="n">i</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>
</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="k">if</span> <span class="n">n_parms</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">priors</span><span class="p">):</span>
</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Priors does not have the correct length.&#39;</span><span class="p">)</span>
</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>
</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="k">def</span> <span class="nf">extract_val_and_dval</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">split_string</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;(&#39;</span><span class="p">)</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="s1">&#39;.&#39;</span> <span class="ow">in</span> <span class="n">split_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;.&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">split_string</span><span class="p">[</span><span class="mi">1</span><span class="p">][:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">factor</span> <span class="o">=</span> <span class="mi">10</span> <span class="o">**</span> <span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">split_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)[</span><span class="mi">2</span><span class="p">])</span>
</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">factor</span> <span class="o">=</span> <span class="mi">1</span>
</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">split_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="nb">float</span><span class="p">(</span><span class="n">split_string</span><span class="p">[</span><span class="mi">1</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">factor</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>
</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">loc_priors</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">for</span> <span class="n">i_n</span><span class="p">,</span> <span class="n">i_prior</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">priors</span><span class="p">):</span>
</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i_prior</span><span class="p">,</span> <span class="n">Obs</span><span class="p">):</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">loc_priors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i_prior</span><span class="p">)</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">loc_val</span><span class="p">,</span> <span class="n">loc_dval</span> <span class="o">=</span> <span class="n">extract_val_and_dval</span><span class="p">(</span><span class="n">i_prior</span><span class="p">)</span>
</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">loc_priors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cov_Obs</span><span class="p">(</span><span class="n">loc_val</span><span class="p">,</span> <span class="n">loc_dval</span> <span class="o">**</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;#prior&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i_n</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;_</span><span class="si">{</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">2147483647</span><span class="p">)</span><span class="si">:</span><span class="s2">010d</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">))</span>
</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>
</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">output</span><span class="o">.</span><span class="n">priors</span> <span class="o">=</span> <span class="n">loc_priors</span>
</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</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-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Fit with&#39;</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">,</span> <span class="s1">&#39;parameter&#39;</span> <span class="o">+</span> <span class="s1">&#39;s&#39;</span> <span class="o">*</span> <span class="p">(</span><span class="n">n_parms</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">))</span>
</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>
</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">y_f</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">y</span><span class="p">]</span>
</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">dy_f</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><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>
</span><span id="L-365"><a href="#L-365"><span class="linenos">365</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">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">):</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;No y errors available, run the gamma method first.&#39;</span><span class="p">)</span>
</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>
</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">p_f</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">loc_priors</span><span class="p">]</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">dp_f</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">loc_priors</span><span class="p">]</span>
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</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">asarray</span><span class="p">(</span><span class="n">dp_f</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">):</span>
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;No prior errors available, run the gamma method first.&#39;</span><span class="p">)</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="s1">&#39;initial_guess&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">x0</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;initial_guess&#39;</span><span class="p">)</span>
</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_parms</span><span class="p">:</span>
</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Initial guess does not have the correct length.&#39;</span><span class="p">)</span>
</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">x0</span> <span class="o">=</span> <span class="n">p_f</span>
</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>
</span><span id="L-381"><a href="#L-381"><span class="linenos">381</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-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</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 class="o">+</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">p_f</span> <span class="o">-</span> <span class="n">p</span><span class="p">)</span> <span class="o">/</span> <span class="n">dp_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>
</span><span id="L-386"><a href="#L-386"><span class="linenos">386</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-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Method: migrad&#39;</span><span class="p">)</span>
</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>
</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">iminuit</span><span class="o">.</span><span class="n">Minuit</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">)</span>
</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">m</span><span class="o">.</span><span class="n">errordef</span> <span class="o">=</span> <span class="mi">1</span>
</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">m</span><span class="o">.</span><span class="n">print_level</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="s1">&#39;tol&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">m</span><span class="o">.</span><span class="n">tol</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;tol&#39;</span><span class="p">)</span>
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">m</span><span class="o">.</span><span class="n">tol</span> <span class="o">=</span> <span class="mf">1e-4</span>
</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">m</span><span class="o">.</span><span class="n">migrad</span><span class="p">()</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">params</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">m</span><span class="o">.</span><span class="n">values</span><span class="p">)</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>
</span><span id="L-399"><a href="#L-399"><span class="linenos">399</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">m</span><span class="o">.</span><span class="n">fval</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a>
</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <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><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>
</span><span id="L-403"><a href="#L-403"><span class="linenos">403</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-404"><a href="#L-404"><span class="linenos">404</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-405"><a href="#L-405"><span class="linenos">405</span></a>
</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">m</span><span class="o">.</span><span class="n">fmin</span><span class="o">.</span><span class="n">is_valid</span><span class="p">:</span>
</span><span id="L-407"><a href="#L-407"><span class="linenos">407</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-408"><a href="#L-408"><span class="linenos">408</span></a>
</span><span id="L-409"><a href="#L-409"><span class="linenos">409</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">pinv</span><span class="p">(</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">params</span><span class="p">))</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a>
</span><span id="L-411"><a href="#L-411"><span class="linenos">411</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-412"><a href="#L-412"><span class="linenos">412</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-413"><a href="#L-413"><span class="linenos">413</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="n">n_parms</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</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 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="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">):]</span> <span class="o">-</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">dp_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>
</span><span id="L-416"><a href="#L-416"><span class="linenos">416</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">params</span><span class="p">,</span> <span class="n">y_f</span><span class="p">,</span> <span class="n">p_f</span><span class="p">)))</span>
</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>
</span><span id="L-418"><a href="#L-418"><span class="linenos">418</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-419"><a href="#L-419"><span class="linenos">419</span></a>
</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-421"><a href="#L-421"><span class="linenos">421</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-422"><a href="#L-422"><span class="linenos">422</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">params</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="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">loc_priors</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-423"><a href="#L-423"><span class="linenos">423</span></a>
</span><span id="L-424"><a href="#L-424"><span class="linenos">424</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-425"><a href="#L-425"><span class="linenos">425</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">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">params</span><span class="p">))</span>
</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a>
</span><span id="L-427"><a href="#L-427"><span class="linenos">427</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-428"><a href="#L-428"><span class="linenos">428</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-429"><a href="#L-429"><span class="linenos">429</span></a>
</span><span id="L-430"><a href="#L-430"><span class="linenos">430</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-431"><a href="#L-431"><span class="linenos">431</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-432"><a href="#L-432"><span class="linenos">432</span></a>
</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="n">output</span>
</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>
</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>
</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a><span class="k">def</span> <span class="nf">_standard_fit</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">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>
</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">Fit_result</span><span class="p">()</span>
</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>
</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_function</span> <span class="o">=</span> <span class="n">func</span>
</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a>
</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">x</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">x</span><span class="p">)</span>
</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a>
</span><span id="L-444"><a href="#L-444"><span class="linenos">444</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="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">):</span>
</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;x and y input have to have the same length&#39;</span><span class="p">)</span>
</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a>
</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="k">if</span> <span class="nb">len</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">&gt;</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Unknown format for x values&#39;</span><span class="p">)</span>
</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>
</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;func has to be a function.&#39;</span><span class="p">)</span>
</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a>
</span><span id="L-453"><a href="#L-453"><span class="linenos">453</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="mi">42</span><span class="p">):</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">func</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="n">x</span><span class="o">.</span><span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="k">continue</span>
</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">continue</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">break</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Fit function is not valid.&quot;</span><span class="p">)</span>
</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>
</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">n_parms</span> <span class="o">=</span> <span class="n">i</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a>
</span><span id="L-467"><a href="#L-467"><span class="linenos">467</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-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Fit with&#39;</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">,</span> <span class="s1">&#39;parameter&#39;</span> <span class="o">+</span> <span class="s1">&#39;s&#39;</span> <span class="o">*</span> <span class="p">(</span><span class="n">n_parms</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">))</span>
</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a>
</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">y_f</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">y</span><span class="p">]</span>
</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">dy_f</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><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a>
</span><span id="L-473"><a href="#L-473"><span class="linenos">473</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">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">):</span>
</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;No y errors available, run the gamma method first.&#39;</span><span class="p">)</span>
</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>
</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="k">if</span> <span class="s1">&#39;initial_guess&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">x0</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;initial_guess&#39;</span><span class="p">)</span>
</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_parms</span><span class="p">:</span>
</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Initial guess does not have the correct length: </span><span class="si">%d</span><span class="s1"> vs. </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">),</span> <span class="n">n_parms</span><span class="p">))</span>
</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">x0</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.1</span><span class="p">]</span> <span class="o">*</span> <span class="n">n_parms</span>
</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a>
</span><span id="L-483"><a href="#L-483"><span class="linenos">483</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-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">corr</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">correlation</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">covdiag</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-486"><a href="#L-486"><span class="linenos">486</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">corr</span><span class="p">)</span>
</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="n">condn</span> <span class="o">&gt;</span> <span class="mf">0.1</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="nb">float</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">:</span>
</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot invert correlation matrix as its condition number exceeds machine precision (</span><span class="si">{</span><span class="n">condn</span><span class="si">:</span><span class="s2">1.2e</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">if</span> <span class="n">condn</span> <span class="o">&gt;</span> <span class="mf">1e13</span><span class="p">:</span>
</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Correlation matrix may be ill-conditioned, condition number: {</span><span class="si">%1.2e</span><span class="s2">}&quot;</span> <span class="o">%</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-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">chol</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">cholesky</span><span class="p">(</span><span class="n">corr</span><span class="p">)</span>
</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">chol_inv</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve_triangular</span><span class="p">(</span><span class="n">chol</span><span class="p">,</span> <span class="n">covdiag</span><span class="p">,</span> <span class="n">lower</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
</span><span id="L-494"><a href="#L-494"><span class="linenos">494</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-495"><a href="#L-495"><span class="linenos">495</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-496"><a href="#L-496"><span class="linenos">496</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-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a>
</span><span id="L-499"><a href="#L-499"><span class="linenos">499</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-500"><a href="#L-500"><span class="linenos">500</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-501"><a href="#L-501"><span class="linenos">501</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-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
</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">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-505"><a href="#L-505"><span class="linenos">505</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-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Method:&#39;</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span><span class="p">)</span>
</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a>
</span><span id="L-508"><a href="#L-508"><span class="linenos">508</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-509"><a href="#L-509"><span class="linenos">509</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-510"><a href="#L-510"><span class="linenos">510</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-511"><a href="#L-511"><span class="linenos">511</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-512"><a href="#L-512"><span class="linenos">512</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-513"><a href="#L-513"><span class="linenos">513</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-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-515"><a href="#L-515"><span class="linenos">515</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-516"><a href="#L-516"><span class="linenos">516</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-517"><a href="#L-517"><span class="linenos">517</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-518"><a href="#L-518"><span class="linenos">518</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-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="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-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="k">else</span><span class="p">:</span>
</span><span id="L-523"><a href="#L-523"><span class="linenos">523</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-524"><a href="#L-524"><span class="linenos">524</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-525"><a href="#L-525"><span class="linenos">525</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-526"><a href="#L-526"><span class="linenos">526</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-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="k">return</span> <span class="n">chisq</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="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-530"><a href="#L-530"><span class="linenos">530</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-531"><a href="#L-531"><span class="linenos">531</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-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a>
</span><span id="L-534"><a href="#L-534"><span class="linenos">534</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-535"><a href="#L-535"><span class="linenos">535</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-536"><a href="#L-536"><span class="linenos">536</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-537"><a href="#L-537"><span class="linenos">537</span></a>
</span><span id="L-538"><a href="#L-538"><span class="linenos">538</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-539"><a href="#L-539"><span class="linenos">539</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-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="k">assert</span> <span class="n">np</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">chisquare</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">atol</span><span class="o">=</span><span class="mf">1e-14</span><span class="p">)</span>
</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="k">assert</span> <span class="n">np</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">chisquare</span><span class="p">,</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 class="n">atol</span><span class="o">=</span><span class="mf">1e-14</span><span class="p">)</span>
</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>
</span><span id="L-544"><a href="#L-544"><span class="linenos">544</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-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="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-547"><a href="#L-547"><span class="linenos">547</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-548"><a href="#L-548"><span class="linenos">548</span></a>
</span><span id="L-549"><a href="#L-549"><span class="linenos">549</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-550"><a href="#L-550"><span class="linenos">550</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-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-552"><a href="#L-552"><span class="linenos">552</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-553"><a href="#L-553"><span class="linenos">553</span></a>
</span><span id="L-554"><a href="#L-554"><span class="linenos">554</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-555"><a href="#L-555"><span class="linenos">555</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-556"><a href="#L-556"><span class="linenos">556</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-557"><a href="#L-557"><span class="linenos">557</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-558"><a href="#L-558"><span class="linenos">558</span></a>
</span><span id="L-559"><a href="#L-559"><span class="linenos">559</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-560"><a href="#L-560"><span class="linenos">560</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-561"><a href="#L-561"><span class="linenos">561</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-562"><a href="#L-562"><span class="linenos">562</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-563"><a href="#L-563"><span class="linenos">563</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-564"><a href="#L-564"><span class="linenos">564</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-565"><a href="#L-565"><span class="linenos">565</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-566"><a href="#L-566"><span class="linenos">566</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-567"><a href="#L-567"><span class="linenos">567</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-568"><a href="#L-568"><span class="linenos">568</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-569"><a href="#L-569"><span class="linenos">569</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-570"><a href="#L-570"><span class="linenos">570</span></a>
</span><span id="L-571"><a href="#L-571"><span class="linenos">571</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-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-573"><a href="#L-573"><span class="linenos">573</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-574"><a href="#L-574"><span class="linenos">574</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_corr</span><span class="p">))(</span><span class="n">fitp</span><span class="p">)</span>
</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="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-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-578"><a href="#L-578"><span class="linenos">578</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-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">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-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">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-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="k">else</span><span class="p">:</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos">587</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-588"><a href="#L-588"><span class="linenos">588</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-589"><a href="#L-589"><span class="linenos">589</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-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a>
</span><span id="L-592"><a href="#L-592"><span class="linenos">592</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-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="c1"># Compute hess^{-1} @ jac_jac[:n_parms, n_parms:] using LAPACK dgesv</span>
</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="o">-</span><span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">hess</span><span class="p">,</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-597"><a href="#L-597"><span class="linenos">597</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-598"><a href="#L-598"><span class="linenos">598</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-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="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-601"><a href="#L-601"><span class="linenos">601</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-602"><a href="#L-602"><span class="linenos">602</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-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="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-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="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">=</span> <span class="n">chisquare</span>
</span><span id="L-607"><a href="#L-607"><span class="linenos">607</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-608"><a href="#L-608"><span class="linenos">608</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">scipy</span><span class="o">.</span><span class="n">stats</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-609"><a href="#L-609"><span class="linenos">609</span></a>
</span><span id="L-610"><a href="#L-610"><span class="linenos">610</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-611"><a href="#L-611"><span class="linenos">611</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-612"><a href="#L-612"><span class="linenos">612</span></a>
</span><span id="L-613"><a href="#L-613"><span class="linenos">613</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-614"><a href="#L-614"><span class="linenos">614</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-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">return</span> <span class="n">output</span>
</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a>
</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a>
</span><span id="L-619"><a href="#L-619"><span class="linenos">619</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-620"><a href="#L-620"><span class="linenos">620</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-621"><a href="#L-621"><span class="linenos">621</span></a>
</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a><span class="sd"> Parameters</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a><span class="sd"> ----------</span>
</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a><span class="sd"> x : list</span>
</span><span id="L-625"><a href="#L-625"><span class="linenos">625</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-626"><a href="#L-626"><span class="linenos">626</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-627"><a href="#L-627"><span class="linenos">627</span></a><span class="sd"> y : list</span>
</span><span id="L-628"><a href="#L-628"><span class="linenos">628</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-629"><a href="#L-629"><span class="linenos">629</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a>
</span><span id="L-631"><a href="#L-631"><span class="linenos">631</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-632"><a href="#L-632"><span class="linenos">632</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-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="k">return</span> <span class="n">y</span>
</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="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-636"><a href="#L-636"><span class="linenos">636</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-637"><a href="#L-637"><span class="linenos">637</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-638"><a href="#L-638"><span class="linenos">638</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-639"><a href="#L-639"><span class="linenos">639</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-640"><a href="#L-640"><span class="linenos">640</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-641"><a href="#L-641"><span class="linenos">641</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-642"><a href="#L-642"><span class="linenos">642</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-643"><a href="#L-643"><span class="linenos">643</span></a>
</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a>
</span><span id="L-645"><a href="#L-645"><span class="linenos">645</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-646"><a href="#L-646"><span class="linenos">646</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-647"><a href="#L-647"><span class="linenos">647</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a><span class="sd"> &quot;&quot;&quot;</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">residuals</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-651"><a href="#L-651"><span class="linenos">651</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-652"><a href="#L-652"><span class="linenos">652</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-653"><a href="#L-653"><span class="linenos">653</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-654"><a href="#L-654"><span class="linenos">654</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-655"><a href="#L-655"><span class="linenos">655</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-656"><a href="#L-656"><span class="linenos">656</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-657"><a href="#L-657"><span class="linenos">657</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-658"><a href="#L-658"><span class="linenos">658</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-659"><a href="#L-659"><span class="linenos">659</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-660"><a href="#L-660"><span class="linenos">660</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-661"><a href="#L-661"><span class="linenos">661</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-662"><a href="#L-662"><span class="linenos">662</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-663"><a href="#L-663"><span class="linenos">663</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-664"><a href="#L-664"><span class="linenos">664</span></a>
</span><span id="L-665"><a href="#L-665"><span class="linenos">665</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-666"><a href="#L-666"><span class="linenos">666</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-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</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">draw</span><span class="p">()</span>
</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a>
</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a>
</span><span id="L-671"><a href="#L-671"><span class="linenos">671</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-672"><a href="#L-672"><span class="linenos">672</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-673"><a href="#L-673"><span class="linenos">673</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-674"><a href="#L-674"><span class="linenos">674</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-675"><a href="#L-675"><span class="linenos">675</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-676"><a href="#L-676"><span class="linenos">676</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-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">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-679"><a href="#L-679"><span class="linenos">679</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-680"><a href="#L-680"><span class="linenos">680</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-681"><a href="#L-681"><span class="linenos">681</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-682"><a href="#L-682"><span class="linenos">682</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-683"><a href="#L-683"><span class="linenos">683</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-684"><a href="#L-684"><span class="linenos">684</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-685"><a href="#L-685"><span class="linenos">685</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-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a>
</span><span id="L-688"><a href="#L-688"><span class="linenos">688</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-689"><a href="#L-689"><span class="linenos">689</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-690"><a href="#L-690"><span class="linenos">690</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-691"><a href="#L-691"><span class="linenos">691</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-692"><a href="#L-692"><span class="linenos">692</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-693"><a href="#L-693"><span class="linenos">693</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-694"><a href="#L-694"><span class="linenos">694</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-695"><a href="#L-695"><span class="linenos">695</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-696"><a href="#L-696"><span class="linenos">696</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-697"><a href="#L-697"><span class="linenos">697</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-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a>
</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">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-702"><a href="#L-702"><span class="linenos">702</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-703"><a href="#L-703"><span class="linenos">703</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-704"><a href="#L-704"><span class="linenos">704</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-705"><a href="#L-705"><span class="linenos">705</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-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="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-708"><a href="#L-708"><span class="linenos">708</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-709"><a href="#L-709"><span class="linenos">709</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-710"><a href="#L-710"><span class="linenos">710</span></a>
</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-712"><a href="#L-712"><span class="linenos">712</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-713"><a href="#L-713"><span class="linenos">713</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-714"><a href="#L-714"><span class="linenos">714</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-715"><a href="#L-715"><span class="linenos">715</span></a>
</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="n">err</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><span id="L-719"><a href="#L-719"><span class="linenos">719</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-720"><a href="#L-720"><span class="linenos">720</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-721"><a href="#L-721"><span class="linenos">721</span></a>
</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a><span class="sd"> Parameters</span>
</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a><span class="sd"> ----------</span>
</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a><span class="sd"> objects : list</span>
</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a><span class="sd"> &quot;&quot;&quot;</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="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-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-730"><a href="#L-730"><span class="linenos">730</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-731"><a href="#L-731"><span class="linenos">731</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-732"><a href="#L-732"><span class="linenos">732</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-733"><a href="#L-733"><span class="linenos">733</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a>
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</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-737"><a href="#L-737"><span class="linenos">737</span></a>
</span><span id="L-738"><a href="#L-738"><span class="linenos">738</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-739"><a href="#L-739"><span class="linenos">739</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-740"><a href="#L-740"><span class="linenos">740</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-741"><a href="#L-741"><span class="linenos">741</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-742"><a href="#L-742"><span class="linenos">742</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-743"><a href="#L-743"><span class="linenos">743</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-744"><a href="#L-744"><span class="linenos">744</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-745"><a href="#L-745"><span class="linenos">745</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-746"><a href="#L-746"><span class="linenos">746</span></a>
</span><span id="L-747"><a href="#L-747"><span class="linenos">747</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-748"><a href="#L-748"><span class="linenos">748</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-749"><a href="#L-749"><span class="linenos">749</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-750"><a href="#L-750"><span class="linenos">750</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-751"><a href="#L-751"><span class="linenos">751</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-752"><a href="#L-752"><span class="linenos">752</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-753"><a href="#L-753"><span class="linenos">753</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-754"><a href="#L-754"><span class="linenos">754</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a>
</span><span id="L-756"><a href="#L-756"><span class="linenos">756</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>
</section>
<section id="Fit_result">
<input id="Fit_result-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Fit_result</span><wbr>(<span class="base">collections.abc.Sequence</span>):
<label class="view-source-button" for="Fit_result-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Fit_result"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Fit_result-18"><a href="#Fit_result-18"><span class="linenos">18</span></a><span class="k">class</span> <span class="nc">Fit_result</span><span class="p">(</span><span class="n">Sequence</span><span class="p">):</span>
</span><span id="Fit_result-19"><a href="#Fit_result-19"><span class="linenos">19</span></a> <span class="sd">&quot;&quot;&quot;Represents fit results.</span>
</span><span id="Fit_result-20"><a href="#Fit_result-20"><span class="linenos">20</span></a>
</span><span id="Fit_result-21"><a href="#Fit_result-21"><span class="linenos">21</span></a><span class="sd"> Attributes</span>
</span><span id="Fit_result-22"><a href="#Fit_result-22"><span class="linenos">22</span></a><span class="sd"> ----------</span>
</span><span id="Fit_result-23"><a href="#Fit_result-23"><span class="linenos">23</span></a><span class="sd"> fit_parameters : list</span>
</span><span id="Fit_result-24"><a href="#Fit_result-24"><span class="linenos">24</span></a><span class="sd"> results for the individual fit parameters,</span>
</span><span id="Fit_result-25"><a href="#Fit_result-25"><span class="linenos">25</span></a><span class="sd"> also accessible via indices.</span>
</span><span id="Fit_result-26"><a href="#Fit_result-26"><span class="linenos">26</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Fit_result-27"><a href="#Fit_result-27"><span class="linenos">27</span></a>
</span><span id="Fit_result-28"><a href="#Fit_result-28"><span class="linenos">28</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Fit_result-29"><a href="#Fit_result-29"><span class="linenos">29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Fit_result-30"><a href="#Fit_result-30"><span class="linenos">30</span></a>
</span><span id="Fit_result-31"><a href="#Fit_result-31"><span class="linenos">31</span></a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">):</span>
</span><span id="Fit_result-32"><a href="#Fit_result-32"><span class="linenos">32</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span>
</span><span id="Fit_result-33"><a href="#Fit_result-33"><span class="linenos">33</span></a>
</span><span id="Fit_result-34"><a href="#Fit_result-34"><span class="linenos">34</span></a> <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Fit_result-35"><a href="#Fit_result-35"><span class="linenos">35</span></a> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">)</span>
</span><span id="Fit_result-36"><a href="#Fit_result-36"><span class="linenos">36</span></a>
</span><span id="Fit_result-37"><a href="#Fit_result-37"><span class="linenos">37</span></a> <span class="k">def</span> <span class="nf">gamma_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="Fit_result-38"><a href="#Fit_result-38"><span class="linenos">38</span></a> <span class="sd">&quot;&quot;&quot;Apply the gamma method to all fit parameters&quot;&quot;&quot;</span>
</span><span id="Fit_result-39"><a href="#Fit_result-39"><span class="linenos">39</span></a> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">gamma_method</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">]</span>
</span><span id="Fit_result-40"><a href="#Fit_result-40"><span class="linenos">40</span></a>
</span><span id="Fit_result-41"><a href="#Fit_result-41"><span class="linenos">41</span></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Fit_result-42"><a href="#Fit_result-42"><span class="linenos">42</span></a> <span class="n">my_str</span> <span class="o">=</span> <span class="s1">&#39;Goodness of fit:</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="Fit_result-43"><a href="#Fit_result-43"><span class="linenos">43</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;chisquare_by_dof&#39;</span><span class="p">):</span>
</span><span id="Fit_result-44"><a href="#Fit_result-44"><span class="linenos">44</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\u03C7\u00b2</span><span class="s1">/d.o.f. = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">chisquare_by_dof</span><span class="si">:</span><span class="s1">2.6f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="Fit_result-45"><a href="#Fit_result-45"><span class="linenos">45</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;residual_variance&#39;</span><span class="p">):</span>
</span><span id="Fit_result-46"><a href="#Fit_result-46"><span class="linenos">46</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;residual variance = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">residual_variance</span><span class="si">:</span><span class="s1">2.6f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="Fit_result-47"><a href="#Fit_result-47"><span class="linenos">47</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;chisquare_by_expected_chisquare&#39;</span><span class="p">):</span>
</span><span id="Fit_result-48"><a href="#Fit_result-48"><span class="linenos">48</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\u03C7\u00b2</span><span class="s1">/</span><span class="se">\u03C7\u00b2</span><span class="s1">exp = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span><span class="si">:</span><span class="s1">2.6f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="Fit_result-49"><a href="#Fit_result-49"><span class="linenos">49</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;p_value&#39;</span><span class="p">):</span>
</span><span id="Fit_result-50"><a href="#Fit_result-50"><span class="linenos">50</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;p-value = &#39;</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">p_value</span><span class="si">:</span><span class="s1">2.4f</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="Fit_result-51"><a href="#Fit_result-51"><span class="linenos">51</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="s1">&#39;Fit parameters:</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="Fit_result-52"><a href="#Fit_result-52"><span class="linenos">52</span></a> <span class="k">for</span> <span class="n">i_par</span><span class="p">,</span> <span class="n">par</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">):</span>
</span><span id="Fit_result-53"><a href="#Fit_result-53"><span class="linenos">53</span></a> <span class="n">my_str</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">i_par</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">par</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">par</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">par</span> <span class="o">&lt;</span> <span class="mf">0.0</span><span class="p">))</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
</span><span id="Fit_result-54"><a href="#Fit_result-54"><span class="linenos">54</span></a> <span class="k">return</span> <span class="n">my_str</span>
</span><span id="Fit_result-55"><a href="#Fit_result-55"><span class="linenos">55</span></a>
</span><span id="Fit_result-56"><a href="#Fit_result-56"><span class="linenos">56</span></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Fit_result-57"><a href="#Fit_result-57"><span class="linenos">57</span></a> <span class="n">m</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span> <span class="o">+</span> <span class="mi">1</span>
</span><span id="Fit_result-58"><a href="#Fit_result-58"><span class="linenos">58</span></a> <span class="k">return</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">key</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;: &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">())])</span>
</span></pre></div>
<div class="docstring"><p>Represents fit results.</p>
<h6 id="attributes">Attributes</h6>
<ul>
<li><strong>fit_parameters</strong> (list):
results for the individual fit parameters,
also accessible via indices.</li>
</ul>
</div>
<div id="Fit_result.__init__" class="classattr">
<input id="Fit_result.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">Fit_result</span><span class="signature pdoc-code condensed">()</span>
<label class="view-source-button" for="Fit_result.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Fit_result.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Fit_result.__init__-28"><a href="#Fit_result.__init__-28"><span class="linenos">28</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Fit_result.__init__-29"><a href="#Fit_result.__init__-29"><span class="linenos">29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span> <span class="o">=</span> <span class="kc">None</span>
</span></pre></div>
</div>
<div id="Fit_result.gamma_method" class="classattr">
<input id="Fit_result.gamma_method-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">gamma_method</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Fit_result.gamma_method-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Fit_result.gamma_method"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Fit_result.gamma_method-37"><a href="#Fit_result.gamma_method-37"><span class="linenos">37</span></a> <span class="k">def</span> <span class="nf">gamma_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="Fit_result.gamma_method-38"><a href="#Fit_result.gamma_method-38"><span class="linenos">38</span></a> <span class="sd">&quot;&quot;&quot;Apply the gamma method to all fit parameters&quot;&quot;&quot;</span>
</span><span id="Fit_result.gamma_method-39"><a href="#Fit_result.gamma_method-39"><span class="linenos">39</span></a> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">gamma_method</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_parameters</span><span class="p">]</span>
</span></pre></div>
<div class="docstring"><p>Apply the gamma method to all fit parameters</p>
</div>
</div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
<div><dt>collections.abc.Sequence</dt>
<dd id="Fit_result.index" class="function">index</dd>
<dd id="Fit_result.count" class="function">count</dd>
</div>
</dl>
</div>
</section>
<section id="least_squares">
<input id="least_squares-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">least_squares</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">x</span>, </span><span class="param"><span class="n">y</span>, </span><span class="param"><span class="n">func</span>, </span><span class="param"><span class="n">priors</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="n">silent</span><span class="o">=</span><span class="kc">False</span>, </span><span class="param"><span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="least_squares-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#least_squares"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="least_squares-61"><a href="#least_squares-61"><span class="linenos"> 61</span></a><span class="k">def</span> <span class="nf">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">func</span><span class="p">,</span> <span class="n">priors</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="least_squares-62"><a href="#least_squares-62"><span class="linenos"> 62</span></a> <span class="sa">r</span><span class="sd">&#39;&#39;&#39;Performs a non-linear fit to y = func(x).</span>
</span><span id="least_squares-63"><a href="#least_squares-63"><span class="linenos"> 63</span></a>
</span><span id="least_squares-64"><a href="#least_squares-64"><span class="linenos"> 64</span></a><span class="sd"> Parameters</span>
</span><span id="least_squares-65"><a href="#least_squares-65"><span class="linenos"> 65</span></a><span class="sd"> ----------</span>
</span><span id="least_squares-66"><a href="#least_squares-66"><span class="linenos"> 66</span></a><span class="sd"> x : list</span>
</span><span id="least_squares-67"><a href="#least_squares-67"><span class="linenos"> 67</span></a><span class="sd"> list of floats.</span>
</span><span id="least_squares-68"><a href="#least_squares-68"><span class="linenos"> 68</span></a><span class="sd"> y : list</span>
</span><span id="least_squares-69"><a href="#least_squares-69"><span class="linenos"> 69</span></a><span class="sd"> list of Obs.</span>
</span><span id="least_squares-70"><a href="#least_squares-70"><span class="linenos"> 70</span></a><span class="sd"> func : object</span>
</span><span id="least_squares-71"><a href="#least_squares-71"><span class="linenos"> 71</span></a><span class="sd"> fit function, has to be of the form</span>
</span><span id="least_squares-72"><a href="#least_squares-72"><span class="linenos"> 72</span></a>
</span><span id="least_squares-73"><a href="#least_squares-73"><span class="linenos"> 73</span></a><span class="sd"> ```python</span>
</span><span id="least_squares-74"><a href="#least_squares-74"><span class="linenos"> 74</span></a><span class="sd"> import autograd.numpy as anp</span>
</span><span id="least_squares-75"><a href="#least_squares-75"><span class="linenos"> 75</span></a>
</span><span id="least_squares-76"><a href="#least_squares-76"><span class="linenos"> 76</span></a><span class="sd"> def func(a, x):</span>
</span><span id="least_squares-77"><a href="#least_squares-77"><span class="linenos"> 77</span></a><span class="sd"> return a[0] + a[1] * x + a[2] * anp.sinh(x)</span>
</span><span id="least_squares-78"><a href="#least_squares-78"><span class="linenos"> 78</span></a><span class="sd"> ```</span>
</span><span id="least_squares-79"><a href="#least_squares-79"><span class="linenos"> 79</span></a>
</span><span id="least_squares-80"><a href="#least_squares-80"><span class="linenos"> 80</span></a><span class="sd"> For multiple x values func can be of the form</span>
</span><span id="least_squares-81"><a href="#least_squares-81"><span class="linenos"> 81</span></a>
</span><span id="least_squares-82"><a href="#least_squares-82"><span class="linenos"> 82</span></a><span class="sd"> ```python</span>
</span><span id="least_squares-83"><a href="#least_squares-83"><span class="linenos"> 83</span></a><span class="sd"> def func(a, x):</span>
</span><span id="least_squares-84"><a href="#least_squares-84"><span class="linenos"> 84</span></a><span class="sd"> (x1, x2) = x</span>
</span><span id="least_squares-85"><a href="#least_squares-85"><span class="linenos"> 85</span></a><span class="sd"> return a[0] * x1 ** 2 + a[1] * x2</span>
</span><span id="least_squares-86"><a href="#least_squares-86"><span class="linenos"> 86</span></a><span class="sd"> ```</span>
</span><span id="least_squares-87"><a href="#least_squares-87"><span class="linenos"> 87</span></a>
</span><span id="least_squares-88"><a href="#least_squares-88"><span class="linenos"> 88</span></a><span class="sd"> It is important that all numpy functions refer to autograd.numpy, otherwise the differentiation</span>
</span><span id="least_squares-89"><a href="#least_squares-89"><span class="linenos"> 89</span></a><span class="sd"> will not work.</span>
</span><span id="least_squares-90"><a href="#least_squares-90"><span class="linenos"> 90</span></a><span class="sd"> priors : list, optional</span>
</span><span id="least_squares-91"><a href="#least_squares-91"><span class="linenos"> 91</span></a><span class="sd"> priors has to be a list with an entry for every parameter in the fit. The entries can either be</span>
</span><span id="least_squares-92"><a href="#least_squares-92"><span class="linenos"> 92</span></a><span class="sd"> Obs (e.g. results from a previous fit) or strings containing a value and an error formatted like</span>
</span><span id="least_squares-93"><a href="#least_squares-93"><span class="linenos"> 93</span></a><span class="sd"> 0.548(23), 500(40) or 0.5(0.4)</span>
</span><span id="least_squares-94"><a href="#least_squares-94"><span class="linenos"> 94</span></a><span class="sd"> silent : bool, optional</span>
</span><span id="least_squares-95"><a href="#least_squares-95"><span class="linenos"> 95</span></a><span class="sd"> If true all output to the console is omitted (default False).</span>
</span><span id="least_squares-96"><a href="#least_squares-96"><span class="linenos"> 96</span></a><span class="sd"> initial_guess : list</span>
</span><span id="least_squares-97"><a href="#least_squares-97"><span class="linenos"> 97</span></a><span class="sd"> can provide an initial guess for the input parameters. Relevant for</span>
</span><span id="least_squares-98"><a href="#least_squares-98"><span class="linenos"> 98</span></a><span class="sd"> non-linear fits with many parameters. In case of correlated fits the guess is used to perform</span>
</span><span id="least_squares-99"><a href="#least_squares-99"><span class="linenos"> 99</span></a><span class="sd"> an uncorrelated fit which then serves as guess for the correlated fit.</span>
</span><span id="least_squares-100"><a href="#least_squares-100"><span class="linenos">100</span></a><span class="sd"> method : str, optional</span>
</span><span id="least_squares-101"><a href="#least_squares-101"><span class="linenos">101</span></a><span class="sd"> can be used to choose an alternative method for the minimization of chisquare.</span>
</span><span id="least_squares-102"><a href="#least_squares-102"><span class="linenos">102</span></a><span class="sd"> The possible methods are the ones which can be used for scipy.optimize.minimize and</span>
</span><span id="least_squares-103"><a href="#least_squares-103"><span class="linenos">103</span></a><span class="sd"> migrad of iminuit. If no method is specified, Levenberg-Marquard is used.</span>
</span><span id="least_squares-104"><a href="#least_squares-104"><span class="linenos">104</span></a><span class="sd"> Reliable alternatives are migrad, Powell and Nelder-Mead.</span>
</span><span id="least_squares-105"><a href="#least_squares-105"><span class="linenos">105</span></a><span class="sd"> correlated_fit : bool</span>
</span><span id="least_squares-106"><a href="#least_squares-106"><span class="linenos">106</span></a><span class="sd"> If True, use the full inverse covariance matrix in the definition of the chisquare cost function.</span>
</span><span id="least_squares-107"><a href="#least_squares-107"><span class="linenos">107</span></a><span class="sd"> For details about how the covariance matrix is estimated see `pyerrors.obs.covariance`.</span>
</span><span id="least_squares-108"><a href="#least_squares-108"><span class="linenos">108</span></a><span class="sd"> In practice the correlation matrix is Cholesky decomposed and inverted (instead of the covariance matrix).</span>
</span><span id="least_squares-109"><a href="#least_squares-109"><span class="linenos">109</span></a><span class="sd"> This procedure should be numerically more stable as the correlation matrix is typically better conditioned (Jacobi preconditioning).</span>
</span><span id="least_squares-110"><a href="#least_squares-110"><span class="linenos">110</span></a><span class="sd"> At the moment this option only works for `prior==None` and when no `method` is given.</span>
</span><span id="least_squares-111"><a href="#least_squares-111"><span class="linenos">111</span></a><span class="sd"> expected_chisquare : bool</span>
</span><span id="least_squares-112"><a href="#least_squares-112"><span class="linenos">112</span></a><span class="sd"> If True estimates the expected chisquare which is</span>
</span><span id="least_squares-113"><a href="#least_squares-113"><span class="linenos">113</span></a><span class="sd"> corrected by effects caused by correlated input data (default False).</span>
</span><span id="least_squares-114"><a href="#least_squares-114"><span class="linenos">114</span></a><span class="sd"> resplot : bool</span>
</span><span id="least_squares-115"><a href="#least_squares-115"><span class="linenos">115</span></a><span class="sd"> If True, a plot which displays fit, data and residuals is generated (default False).</span>
</span><span id="least_squares-116"><a href="#least_squares-116"><span class="linenos">116</span></a><span class="sd"> qqplot : bool</span>
</span><span id="least_squares-117"><a href="#least_squares-117"><span class="linenos">117</span></a><span class="sd"> If True, a quantile-quantile plot of the fit result is generated (default False).</span>
</span><span id="least_squares-118"><a href="#least_squares-118"><span class="linenos">118</span></a><span class="sd"> &#39;&#39;&#39;</span>
</span><span id="least_squares-119"><a href="#least_squares-119"><span class="linenos">119</span></a> <span class="k">if</span> <span class="n">priors</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="least_squares-120"><a href="#least_squares-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">_prior_fit</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">priors</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="n">silent</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="least_squares-121"><a href="#least_squares-121"><span class="linenos">121</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="least_squares-122"><a href="#least_squares-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="n">_standard_fit</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">silent</span><span class="o">=</span><span class="n">silent</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Performs a non-linear fit to y = func(x).</p>
<h6 id="parameters">Parameters</h6>
<ul>
<li><strong>x</strong> (list):
list of floats.</li>
<li><strong>y</strong> (list):
list of Obs.</li>
<li><p><strong>func</strong> (object):
fit function, has to be of the form</p>
<div class="pdoc-code codehilite">
<pre><span></span><code><span class="kn">import</span> <span class="nn">autograd.numpy</span> <span class="k">as</span> <span class="nn">anp</span>
<span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="k">return</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 class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">*</span> <span class="n">anp</span><span class="o">.</span><span class="n">sinh</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</code></pre>
</div>
<p>For multiple x values func can be of the form</p>
<div class="pdoc-code codehilite">
<pre><span></span><code><span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">)</span> <span class="o">=</span> <span class="n">x</span>
<span class="k">return</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">x1</span> <span class="o">**</span> <span class="mi">2</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">x2</span>
</code></pre>
</div>
<p>It is important that all numpy functions refer to autograd.numpy, otherwise the differentiation
will not work.</p></li>
<li><strong>priors</strong> (list, optional):
priors has to be a list with an entry for every parameter in the fit. The entries can either be
Obs (e.g. results from a previous fit) or strings containing a value and an error formatted like
0.548(23), 500(40) or 0.5(0.4)</li>
<li><strong>silent</strong> (bool, optional):
If true all output to the console is omitted (default False).</li>
<li><strong>initial_guess</strong> (list):
can provide an initial guess for the input parameters. Relevant for
non-linear fits with many parameters. In case of correlated fits the guess is used to perform
an uncorrelated fit which then serves as guess for the correlated fit.</li>
<li><strong>method</strong> (str, optional):
can be used to choose an alternative method for the minimization of chisquare.
The possible methods are the ones which can be used for scipy.optimize.minimize and
migrad of iminuit. If no method is specified, Levenberg-Marquard is used.
Reliable alternatives are migrad, Powell and Nelder-Mead.</li>
<li><strong>correlated_fit</strong> (bool):
If True, use the full inverse covariance matrix in the definition of the chisquare cost function.
For details about how the covariance matrix is estimated see <code><a href="obs.html#covariance">pyerrors.obs.covariance</a></code>.
In practice the correlation matrix is Cholesky decomposed and inverted (instead of the covariance matrix).
This procedure should be numerically more stable as the correlation matrix is typically better conditioned (Jacobi preconditioning).
At the moment this option only works for <code>prior==None</code> and when no <code>method</code> is given.</li>
<li><strong>expected_chisquare</strong> (bool):
If True estimates the expected chisquare which is
corrected by effects caused by correlated input data (default False).</li>
<li><strong>resplot</strong> (bool):
If True, a plot which displays fit, data and residuals is generated (default False).</li>
<li><strong>qqplot</strong> (bool):
If True, a quantile-quantile plot of the fit result is generated (default False).</li>
</ul>
</div>
</section>
<section id="total_least_squares">
<input id="total_least_squares-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">total_least_squares</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">x</span>, </span><span class="param"><span class="n">y</span>, </span><span class="param"><span class="n">func</span>, </span><span class="param"><span class="n">silent</span><span class="o">=</span><span class="kc">False</span>, </span><span class="param"><span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="total_least_squares-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#total_least_squares"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="total_least_squares-125"><a href="#total_least_squares-125"><span class="linenos">125</span></a><span class="k">def</span> <span class="nf">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">func</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="total_least_squares-126"><a href="#total_least_squares-126"><span class="linenos">126</span></a> <span class="sa">r</span><span class="sd">&#39;&#39;&#39;Performs a non-linear fit to y = func(x) and returns a list of Obs corresponding to the fit parameters.</span>
</span><span id="total_least_squares-127"><a href="#total_least_squares-127"><span class="linenos">127</span></a>
</span><span id="total_least_squares-128"><a href="#total_least_squares-128"><span class="linenos">128</span></a><span class="sd"> Parameters</span>
</span><span id="total_least_squares-129"><a href="#total_least_squares-129"><span class="linenos">129</span></a><span class="sd"> ----------</span>
</span><span id="total_least_squares-130"><a href="#total_least_squares-130"><span class="linenos">130</span></a><span class="sd"> x : list</span>
</span><span id="total_least_squares-131"><a href="#total_least_squares-131"><span class="linenos">131</span></a><span class="sd"> list of Obs, or a tuple of lists of Obs</span>
</span><span id="total_least_squares-132"><a href="#total_least_squares-132"><span class="linenos">132</span></a><span class="sd"> y : list</span>
</span><span id="total_least_squares-133"><a href="#total_least_squares-133"><span class="linenos">133</span></a><span class="sd"> list of Obs. The dvalues of the Obs are used as x- and yerror for the fit.</span>
</span><span id="total_least_squares-134"><a href="#total_least_squares-134"><span class="linenos">134</span></a><span class="sd"> func : object</span>
</span><span id="total_least_squares-135"><a href="#total_least_squares-135"><span class="linenos">135</span></a><span class="sd"> func has to be of the form</span>
</span><span id="total_least_squares-136"><a href="#total_least_squares-136"><span class="linenos">136</span></a>
</span><span id="total_least_squares-137"><a href="#total_least_squares-137"><span class="linenos">137</span></a><span class="sd"> ```python</span>
</span><span id="total_least_squares-138"><a href="#total_least_squares-138"><span class="linenos">138</span></a><span class="sd"> import autograd.numpy as anp</span>
</span><span id="total_least_squares-139"><a href="#total_least_squares-139"><span class="linenos">139</span></a>
</span><span id="total_least_squares-140"><a href="#total_least_squares-140"><span class="linenos">140</span></a><span class="sd"> def func(a, x):</span>
</span><span id="total_least_squares-141"><a href="#total_least_squares-141"><span class="linenos">141</span></a><span class="sd"> return a[0] + a[1] * x + a[2] * anp.sinh(x)</span>
</span><span id="total_least_squares-142"><a href="#total_least_squares-142"><span class="linenos">142</span></a><span class="sd"> ```</span>
</span><span id="total_least_squares-143"><a href="#total_least_squares-143"><span class="linenos">143</span></a>
</span><span id="total_least_squares-144"><a href="#total_least_squares-144"><span class="linenos">144</span></a><span class="sd"> For multiple x values func can be of the form</span>
</span><span id="total_least_squares-145"><a href="#total_least_squares-145"><span class="linenos">145</span></a>
</span><span id="total_least_squares-146"><a href="#total_least_squares-146"><span class="linenos">146</span></a><span class="sd"> ```python</span>
</span><span id="total_least_squares-147"><a href="#total_least_squares-147"><span class="linenos">147</span></a><span class="sd"> def func(a, x):</span>
</span><span id="total_least_squares-148"><a href="#total_least_squares-148"><span class="linenos">148</span></a><span class="sd"> (x1, x2) = x</span>
</span><span id="total_least_squares-149"><a href="#total_least_squares-149"><span class="linenos">149</span></a><span class="sd"> return a[0] * x1 ** 2 + a[1] * x2</span>
</span><span id="total_least_squares-150"><a href="#total_least_squares-150"><span class="linenos">150</span></a><span class="sd"> ```</span>
</span><span id="total_least_squares-151"><a href="#total_least_squares-151"><span class="linenos">151</span></a>
</span><span id="total_least_squares-152"><a href="#total_least_squares-152"><span class="linenos">152</span></a><span class="sd"> It is important that all numpy functions refer to autograd.numpy, otherwise the differentiation</span>
</span><span id="total_least_squares-153"><a href="#total_least_squares-153"><span class="linenos">153</span></a><span class="sd"> will not work.</span>
</span><span id="total_least_squares-154"><a href="#total_least_squares-154"><span class="linenos">154</span></a><span class="sd"> silent : bool, optional</span>
</span><span id="total_least_squares-155"><a href="#total_least_squares-155"><span class="linenos">155</span></a><span class="sd"> If true all output to the console is omitted (default False).</span>
</span><span id="total_least_squares-156"><a href="#total_least_squares-156"><span class="linenos">156</span></a><span class="sd"> initial_guess : list</span>
</span><span id="total_least_squares-157"><a href="#total_least_squares-157"><span class="linenos">157</span></a><span class="sd"> can provide an initial guess for the input parameters. Relevant for non-linear</span>
</span><span id="total_least_squares-158"><a href="#total_least_squares-158"><span class="linenos">158</span></a><span class="sd"> fits with many parameters.</span>
</span><span id="total_least_squares-159"><a href="#total_least_squares-159"><span class="linenos">159</span></a><span class="sd"> expected_chisquare : bool</span>
</span><span id="total_least_squares-160"><a href="#total_least_squares-160"><span class="linenos">160</span></a><span class="sd"> If true prints the expected chisquare which is</span>
</span><span id="total_least_squares-161"><a href="#total_least_squares-161"><span class="linenos">161</span></a><span class="sd"> corrected by effects caused by correlated input data.</span>
</span><span id="total_least_squares-162"><a href="#total_least_squares-162"><span class="linenos">162</span></a><span class="sd"> This can take a while as the full correlation matrix</span>
</span><span id="total_least_squares-163"><a href="#total_least_squares-163"><span class="linenos">163</span></a><span class="sd"> has to be calculated (default False).</span>
</span><span id="total_least_squares-164"><a href="#total_least_squares-164"><span class="linenos">164</span></a>
</span><span id="total_least_squares-165"><a href="#total_least_squares-165"><span class="linenos">165</span></a><span class="sd"> Notes</span>
</span><span id="total_least_squares-166"><a href="#total_least_squares-166"><span class="linenos">166</span></a><span class="sd"> -----</span>
</span><span id="total_least_squares-167"><a href="#total_least_squares-167"><span class="linenos">167</span></a><span class="sd"> Based on the orthogonal distance regression module of scipy</span>
</span><span id="total_least_squares-168"><a href="#total_least_squares-168"><span class="linenos">168</span></a><span class="sd"> &#39;&#39;&#39;</span>
</span><span id="total_least_squares-169"><a href="#total_least_squares-169"><span class="linenos">169</span></a>
</span><span id="total_least_squares-170"><a href="#total_least_squares-170"><span class="linenos">170</span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">Fit_result</span><span class="p">()</span>
</span><span id="total_least_squares-171"><a href="#total_least_squares-171"><span class="linenos">171</span></a>
</span><span id="total_least_squares-172"><a href="#total_least_squares-172"><span class="linenos">172</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_function</span> <span class="o">=</span> <span class="n">func</span>
</span><span id="total_least_squares-173"><a href="#total_least_squares-173"><span class="linenos">173</span></a>
</span><span id="total_least_squares-174"><a href="#total_least_squares-174"><span class="linenos">174</span></a> <span class="n">x</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">x</span><span class="p">)</span>
</span><span id="total_least_squares-175"><a href="#total_least_squares-175"><span class="linenos">175</span></a>
</span><span id="total_least_squares-176"><a href="#total_least_squares-176"><span class="linenos">176</span></a> <span class="n">x_shape</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span>
</span><span id="total_least_squares-177"><a href="#total_least_squares-177"><span class="linenos">177</span></a>
</span><span id="total_least_squares-178"><a href="#total_least_squares-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
</span><span id="total_least_squares-179"><a href="#total_least_squares-179"><span class="linenos">179</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;func has to be a function.&#39;</span><span class="p">)</span>
</span><span id="total_least_squares-180"><a href="#total_least_squares-180"><span class="linenos">180</span></a>
</span><span id="total_least_squares-181"><a href="#total_least_squares-181"><span class="linenos">181</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="mi">42</span><span class="p">):</span>
</span><span id="total_least_squares-182"><a href="#total_least_squares-182"><span class="linenos">182</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="total_least_squares-183"><a href="#total_least_squares-183"><span class="linenos">183</span></a> <span class="n">func</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="n">x</span><span class="o">.</span><span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="total_least_squares-184"><a href="#total_least_squares-184"><span class="linenos">184</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="total_least_squares-185"><a href="#total_least_squares-185"><span class="linenos">185</span></a> <span class="k">continue</span>
</span><span id="total_least_squares-186"><a href="#total_least_squares-186"><span class="linenos">186</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
</span><span id="total_least_squares-187"><a href="#total_least_squares-187"><span class="linenos">187</span></a> <span class="k">continue</span>
</span><span id="total_least_squares-188"><a href="#total_least_squares-188"><span class="linenos">188</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="total_least_squares-189"><a href="#total_least_squares-189"><span class="linenos">189</span></a> <span class="k">break</span>
</span><span id="total_least_squares-190"><a href="#total_least_squares-190"><span class="linenos">190</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="total_least_squares-191"><a href="#total_least_squares-191"><span class="linenos">191</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Fit function is not valid.&quot;</span><span class="p">)</span>
</span><span id="total_least_squares-192"><a href="#total_least_squares-192"><span class="linenos">192</span></a>
</span><span id="total_least_squares-193"><a href="#total_least_squares-193"><span class="linenos">193</span></a> <span class="n">n_parms</span> <span class="o">=</span> <span class="n">i</span>
</span><span id="total_least_squares-194"><a href="#total_least_squares-194"><span class="linenos">194</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
</span><span id="total_least_squares-195"><a href="#total_least_squares-195"><span class="linenos">195</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Fit with&#39;</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">,</span> <span class="s1">&#39;parameter&#39;</span> <span class="o">+</span> <span class="s1">&#39;s&#39;</span> <span class="o">*</span> <span class="p">(</span><span class="n">n_parms</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">))</span>
</span><span id="total_least_squares-196"><a href="#total_least_squares-196"><span class="linenos">196</span></a>
</span><span id="total_least_squares-197"><a href="#total_least_squares-197"><span class="linenos">197</span></a> <span class="n">x_f</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vectorize</span><span class="p">(</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">value</span><span class="p">)(</span><span class="n">x</span><span class="p">)</span>
</span><span id="total_least_squares-198"><a href="#total_least_squares-198"><span class="linenos">198</span></a> <span class="n">dx_f</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vectorize</span><span class="p">(</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)(</span><span class="n">x</span><span class="p">)</span>
</span><span id="total_least_squares-199"><a href="#total_least_squares-199"><span class="linenos">199</span></a> <span class="n">y_f</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">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><span id="total_least_squares-200"><a href="#total_least_squares-200"><span class="linenos">200</span></a> <span class="n">dy_f</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">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="total_least_squares-201"><a href="#total_least_squares-201"><span class="linenos">201</span></a>
</span><span id="total_least_squares-202"><a href="#total_least_squares-202"><span class="linenos">202</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">asarray</span><span class="p">(</span><span class="n">dx_f</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">):</span>
</span><span id="total_least_squares-203"><a href="#total_least_squares-203"><span class="linenos">203</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;No x errors available, run the gamma method first.&#39;</span><span class="p">)</span>
</span><span id="total_least_squares-204"><a href="#total_least_squares-204"><span class="linenos">204</span></a>
</span><span id="total_least_squares-205"><a href="#total_least_squares-205"><span class="linenos">205</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">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">):</span>
</span><span id="total_least_squares-206"><a href="#total_least_squares-206"><span class="linenos">206</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;No y errors available, run the gamma method first.&#39;</span><span class="p">)</span>
</span><span id="total_least_squares-207"><a href="#total_least_squares-207"><span class="linenos">207</span></a>
</span><span id="total_least_squares-208"><a href="#total_least_squares-208"><span class="linenos">208</span></a> <span class="k">if</span> <span class="s1">&#39;initial_guess&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
</span><span id="total_least_squares-209"><a href="#total_least_squares-209"><span class="linenos">209</span></a> <span class="n">x0</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;initial_guess&#39;</span><span class="p">)</span>
</span><span id="total_least_squares-210"><a href="#total_least_squares-210"><span class="linenos">210</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_parms</span><span class="p">:</span>
</span><span id="total_least_squares-211"><a href="#total_least_squares-211"><span class="linenos">211</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Initial guess does not have the correct length: </span><span class="si">%d</span><span class="s1"> vs. </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">),</span> <span class="n">n_parms</span><span class="p">))</span>
</span><span id="total_least_squares-212"><a href="#total_least_squares-212"><span class="linenos">212</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="total_least_squares-213"><a href="#total_least_squares-213"><span class="linenos">213</span></a> <span class="n">x0</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">n_parms</span>
</span><span id="total_least_squares-214"><a href="#total_least_squares-214"><span class="linenos">214</span></a>
</span><span id="total_least_squares-215"><a href="#total_least_squares-215"><span class="linenos">215</span></a> <span class="n">data</span> <span class="o">=</span> <span class="n">RealData</span><span class="p">(</span><span class="n">x_f</span><span class="p">,</span> <span class="n">y_f</span><span class="p">,</span> <span class="n">sx</span><span class="o">=</span><span class="n">dx_f</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="n">dy_f</span><span class="p">)</span>
</span><span id="total_least_squares-216"><a href="#total_least_squares-216"><span class="linenos">216</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">Model</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
</span><span id="total_least_squares-217"><a href="#total_least_squares-217"><span class="linenos">217</span></a> <span class="n">odr</span> <span class="o">=</span> <span class="n">ODR</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">partol</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="total_least_squares-218"><a href="#total_least_squares-218"><span class="linenos">218</span></a> <span class="n">odr</span><span class="o">.</span><span class="n">set_job</span><span class="p">(</span><span class="n">fit_type</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">deriv</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="total_least_squares-219"><a href="#total_least_squares-219"><span class="linenos">219</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">odr</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
</span><span id="total_least_squares-220"><a href="#total_least_squares-220"><span class="linenos">220</span></a>
</span><span id="total_least_squares-221"><a href="#total_least_squares-221"><span class="linenos">221</span></a> <span class="n">output</span><span class="o">.</span><span class="n">residual_variance</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">res_var</span>
</span><span id="total_least_squares-222"><a href="#total_least_squares-222"><span class="linenos">222</span></a>
</span><span id="total_least_squares-223"><a href="#total_least_squares-223"><span class="linenos">223</span></a> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="s1">&#39;ODR&#39;</span>
</span><span id="total_least_squares-224"><a href="#total_least_squares-224"><span class="linenos">224</span></a>
</span><span id="total_least_squares-225"><a href="#total_least_squares-225"><span class="linenos">225</span></a> <span class="n">output</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">stopreason</span>
</span><span id="total_least_squares-226"><a href="#total_least_squares-226"><span class="linenos">226</span></a>
</span><span id="total_least_squares-227"><a href="#total_least_squares-227"><span class="linenos">227</span></a> <span class="n">output</span><span class="o">.</span><span class="n">xplus</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span>
</span><span id="total_least_squares-228"><a href="#total_least_squares-228"><span class="linenos">228</span></a>
</span><span id="total_least_squares-229"><a href="#total_least_squares-229"><span class="linenos">229</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
</span><span id="total_least_squares-230"><a href="#total_least_squares-230"><span class="linenos">230</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Method: ODR&#39;</span><span class="p">)</span>
</span><span id="total_least_squares-231"><a href="#total_least_squares-231"><span class="linenos">231</span></a> <span class="nb">print</span><span class="p">(</span><span class="o">*</span><span class="n">out</span><span class="o">.</span><span class="n">stopreason</span><span class="p">)</span>
</span><span id="total_least_squares-232"><a href="#total_least_squares-232"><span class="linenos">232</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Residual variance:&#39;</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">residual_variance</span><span class="p">)</span>
</span><span id="total_least_squares-233"><a href="#total_least_squares-233"><span class="linenos">233</span></a>
</span><span id="total_least_squares-234"><a href="#total_least_squares-234"><span class="linenos">234</span></a> <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">info</span> <span class="o">&gt;</span> <span class="mi">3</span><span class="p">:</span>
</span><span id="total_least_squares-235"><a href="#total_least_squares-235"><span class="linenos">235</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="total_least_squares-236"><a href="#total_least_squares-236"><span class="linenos">236</span></a>
</span><span id="total_least_squares-237"><a href="#total_least_squares-237"><span class="linenos">237</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">x_f</span><span class="o">.</span><span class="n">size</span>
</span><span id="total_least_squares-238"><a href="#total_least_squares-238"><span class="linenos">238</span></a>
</span><span id="total_least_squares-239"><a href="#total_least_squares-239"><span class="linenos">239</span></a> <span class="k">def</span> <span class="nf">odr_chisquare</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
</span><span id="total_least_squares-240"><a href="#total_least_squares-240"><span class="linenos">240</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">n_parms</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span>
</span><span id="total_least_squares-241"><a href="#total_least_squares-241"><span class="linenos">241</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 class="o">+</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">x_f</span> <span class="o">-</span> <span class="n">p</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="total_least_squares-242"><a href="#total_least_squares-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="total_least_squares-243"><a href="#total_least_squares-243"><span class="linenos">243</span></a>
</span><span id="total_least_squares-244"><a href="#total_least_squares-244"><span class="linenos">244</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="total_least_squares-245"><a href="#total_least_squares-245"><span class="linenos">245</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">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">dy_f</span><span class="o">.</span><span class="n">ravel</span><span class="p">(),</span> <span class="n">dx_f</span><span class="o">.</span><span class="n">ravel</span><span class="p">()))))</span>
</span><span id="total_least_squares-246"><a href="#total_least_squares-246"><span class="linenos">246</span></a>
</span><span id="total_least_squares-247"><a href="#total_least_squares-247"><span class="linenos">247</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;covariance&#39;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="total_least_squares-248"><a href="#total_least_squares-248"><span class="linenos">248</span></a> <span class="n">cov</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;covariance&#39;</span><span class="p">)</span>
</span><span id="total_least_squares-249"><a href="#total_least_squares-249"><span class="linenos">249</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="total_least_squares-250"><a href="#total_least_squares-250"><span class="linenos">250</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</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">y</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="total_least_squares-251"><a href="#total_least_squares-251"><span class="linenos">251</span></a>
</span><span id="total_least_squares-252"><a href="#total_least_squares-252"><span class="linenos">252</span></a> <span class="n">number_of_x_parameters</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span> <span class="o">/</span> <span class="n">x_f</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><span id="total_least_squares-253"><a href="#total_least_squares-253"><span class="linenos">253</span></a>
</span><span id="total_least_squares-254"><a href="#total_least_squares-254"><span class="linenos">254</span></a> <span class="n">old_jac</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">out</span><span class="o">.</span><span class="n">beta</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="p">)</span>
</span><span id="total_least_squares-255"><a href="#total_least_squares-255"><span class="linenos">255</span></a> <span class="n">fused_row1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">old_jac</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">number_of_x_parameters</span> <span class="o">*</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">old_jac</span><span class="o">.</span><span class="n">shape</span><span class="p">)]),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)))</span>
</span><span id="total_least_squares-256"><a href="#total_least_squares-256"><span class="linenos">256</span></a> <span class="n">fused_row2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">jacobian</span><span class="p">(</span><span class="k">lambda</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">y</span><span class="p">,</span> <span class="n">x</span><span class="p">))(</span><span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">beta</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_f</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="n">x_f</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">number_of_x_parameters</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">number_of_x_parameters</span> <span class="o">*</span> <span class="n">old_jac</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])))</span>
</span><span id="total_least_squares-257"><a href="#total_least_squares-257"><span class="linenos">257</span></a> <span class="n">new_jac</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">fused_row1</span><span class="p">,</span> <span class="n">fused_row2</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span><span id="total_least_squares-258"><a href="#total_least_squares-258"><span class="linenos">258</span></a>
</span><span id="total_least_squares-259"><a href="#total_least_squares-259"><span class="linenos">259</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">W</span> <span class="o">@</span> <span class="n">new_jac</span>
</span><span id="total_least_squares-260"><a href="#total_least_squares-260"><span class="linenos">260</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="total_least_squares-261"><a href="#total_least_squares-261"><span class="linenos">261</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">P_phi</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</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="total_least_squares-262"><a href="#total_least_squares-262"><span class="linenos">262</span></a> <span class="k">if</span> <span class="n">expected_chisquare</span> <span class="o">&lt;=</span> <span class="mf">0.0</span><span class="p">:</span>
</span><span id="total_least_squares-263"><a href="#total_least_squares-263"><span class="linenos">263</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">&quot;Negative expected_chisquare.&quot;</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
</span><span id="total_least_squares-264"><a href="#total_least_squares-264"><span class="linenos">264</span></a> <span class="n">expected_chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">expected_chisquare</span><span class="p">)</span>
</span><span id="total_least_squares-265"><a href="#total_least_squares-265"><span class="linenos">265</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">odr_chisquare</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">out</span><span class="o">.</span><span class="n">beta</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span> <span class="o">/</span> <span class="n">expected_chisquare</span>
</span><span id="total_least_squares-266"><a href="#total_least_squares-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
</span><span id="total_least_squares-267"><a href="#total_least_squares-267"><span class="linenos">267</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="total_least_squares-268"><a href="#total_least_squares-268"><span class="linenos">268</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="total_least_squares-269"><a href="#total_least_squares-269"><span class="linenos">269</span></a>
</span><span id="total_least_squares-270"><a href="#total_least_squares-270"><span class="linenos">270</span></a> <span class="n">fitp</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">beta</span>
</span><span id="total_least_squares-271"><a href="#total_least_squares-271"><span class="linenos">271</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="total_least_squares-272"><a href="#total_least_squares-272"><span class="linenos">272</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">odr_chisquare</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">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="total_least_squares-273"><a href="#total_least_squares-273"><span class="linenos">273</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="total_least_squares-274"><a href="#total_least_squares-274"><span class="linenos">274</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="total_least_squares-275"><a href="#total_least_squares-275"><span class="linenos">275</span></a>
</span><span id="total_least_squares-276"><a href="#total_least_squares-276"><span class="linenos">276</span></a> <span class="k">def</span> <span class="nf">odr_chisquare_compact_x</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="total_least_squares-277"><a href="#total_least_squares-277"><span class="linenos">277</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">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span>
</span><span id="total_least_squares-278"><a href="#total_least_squares-278"><span class="linenos">278</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 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="o">+</span> <span class="n">m</span><span class="p">:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="total_least_squares-279"><a href="#total_least_squares-279"><span class="linenos">279</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="total_least_squares-280"><a href="#total_least_squares-280"><span class="linenos">280</span></a>
</span><span id="total_least_squares-281"><a href="#total_least_squares-281"><span class="linenos">281</span></a> <span class="n">jac_jac_x</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">odr_chisquare_compact_x</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">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">(),</span> <span class="n">x_f</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="total_least_squares-282"><a href="#total_least_squares-282"><span class="linenos">282</span></a>
</span><span id="total_least_squares-283"><a href="#total_least_squares-283"><span class="linenos">283</span></a> <span class="c1"># Compute hess^{-1} @ jac_jac_x[:n_parms + m, n_parms + m:] using LAPACK dgesv</span>
</span><span id="total_least_squares-284"><a href="#total_least_squares-284"><span class="linenos">284</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="total_least_squares-285"><a href="#total_least_squares-285"><span class="linenos">285</span></a> <span class="n">deriv_x</span> <span class="o">=</span> <span class="o">-</span><span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">hess</span><span class="p">,</span> <span class="n">jac_jac_x</span><span class="p">[:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">,</span> <span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">:])</span>
</span><span id="total_least_squares-286"><a href="#total_least_squares-286"><span class="linenos">286</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="total_least_squares-287"><a href="#total_least_squares-287"><span class="linenos">287</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="total_least_squares-288"><a href="#total_least_squares-288"><span class="linenos">288</span></a>
</span><span id="total_least_squares-289"><a href="#total_least_squares-289"><span class="linenos">289</span></a> <span class="k">def</span> <span class="nf">odr_chisquare_compact_y</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span><span id="total_least_squares-290"><a href="#total_least_squares-290"><span class="linenos">290</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">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span>
</span><span id="total_least_squares-291"><a href="#total_least_squares-291"><span class="linenos">291</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="o">+</span> <span class="n">m</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 class="o">+</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">x_f</span> <span class="o">-</span> <span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">x_shape</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="total_least_squares-292"><a href="#total_least_squares-292"><span class="linenos">292</span></a> <span class="k">return</span> <span class="n">chisq</span>
</span><span id="total_least_squares-293"><a href="#total_least_squares-293"><span class="linenos">293</span></a>
</span><span id="total_least_squares-294"><a href="#total_least_squares-294"><span class="linenos">294</span></a> <span class="n">jac_jac_y</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">odr_chisquare_compact_y</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">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">(),</span> <span class="n">y_f</span><span class="p">)))</span>
</span><span id="total_least_squares-295"><a href="#total_least_squares-295"><span class="linenos">295</span></a>
</span><span id="total_least_squares-296"><a href="#total_least_squares-296"><span class="linenos">296</span></a> <span class="c1"># Compute hess^{-1} @ jac_jac_y[:n_parms + m, n_parms + m:] using LAPACK dgesv</span>
</span><span id="total_least_squares-297"><a href="#total_least_squares-297"><span class="linenos">297</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="total_least_squares-298"><a href="#total_least_squares-298"><span class="linenos">298</span></a> <span class="n">deriv_y</span> <span class="o">=</span> <span class="o">-</span><span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">hess</span><span class="p">,</span> <span class="n">jac_jac_y</span><span class="p">[:</span><span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">,</span> <span class="n">n_parms</span> <span class="o">+</span> <span class="n">m</span><span class="p">:])</span>
</span><span id="total_least_squares-299"><a href="#total_least_squares-299"><span class="linenos">299</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="total_least_squares-300"><a href="#total_least_squares-300"><span class="linenos">300</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="total_least_squares-301"><a href="#total_least_squares-301"><span class="linenos">301</span></a>
</span><span id="total_least_squares-302"><a href="#total_least_squares-302"><span class="linenos">302</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="total_least_squares-303"><a href="#total_least_squares-303"><span class="linenos">303</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="total_least_squares-304"><a href="#total_least_squares-304"><span class="linenos">304</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">my_var</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">my_var</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">x</span><span class="o">.</span><span class="n">ravel</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">out</span><span class="o">.</span><span class="n">beta</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">x</span><span class="o">.</span><span class="n">ravel</span><span class="p">())</span> <span class="o">+</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_x</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">deriv_y</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
</span><span id="total_least_squares-305"><a href="#total_least_squares-305"><span class="linenos">305</span></a>
</span><span id="total_least_squares-306"><a href="#total_least_squares-306"><span class="linenos">306</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="total_least_squares-307"><a href="#total_least_squares-307"><span class="linenos">307</span></a>
</span><span id="total_least_squares-308"><a href="#total_least_squares-308"><span class="linenos">308</span></a> <span class="n">output</span><span class="o">.</span><span class="n">odr_chisquare</span> <span class="o">=</span> <span class="n">odr_chisquare</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">out</span><span class="o">.</span><span class="n">beta</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">xplus</span><span class="o">.</span><span class="n">ravel</span><span class="p">())))</span>
</span><span id="total_least_squares-309"><a href="#total_least_squares-309"><span class="linenos">309</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="total_least_squares-310"><a href="#total_least_squares-310"><span class="linenos">310</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">scipy</span><span class="o">.</span><span class="n">stats</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">odr_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="total_least_squares-311"><a href="#total_least_squares-311"><span class="linenos">311</span></a>
</span><span id="total_least_squares-312"><a href="#total_least_squares-312"><span class="linenos">312</span></a> <span class="k">return</span> <span class="n">output</span>
</span></pre></div>
<div class="docstring"><p>Performs a non-linear fit to y = func(x) and returns a list of Obs corresponding to the fit parameters.</p>
<h6 id="parameters">Parameters</h6>
<ul>
<li><strong>x</strong> (list):
list of Obs, or a tuple of lists of Obs</li>
<li><strong>y</strong> (list):
list of Obs. The dvalues of the Obs are used as x- and yerror for the fit.</li>
<li><p><strong>func</strong> (object):
func has to be of the form</p>
<div class="pdoc-code codehilite">
<pre><span></span><code><span class="kn">import</span> <span class="nn">autograd.numpy</span> <span class="k">as</span> <span class="nn">anp</span>
<span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="k">return</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 class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">*</span> <span class="n">anp</span><span class="o">.</span><span class="n">sinh</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</code></pre>
</div>
<p>For multiple x values func can be of the form</p>
<div class="pdoc-code codehilite">
<pre><span></span><code><span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
<span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">)</span> <span class="o">=</span> <span class="n">x</span>
<span class="k">return</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">x1</span> <span class="o">**</span> <span class="mi">2</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">x2</span>
</code></pre>
</div>
<p>It is important that all numpy functions refer to autograd.numpy, otherwise the differentiation
will not work.</p></li>
<li><strong>silent</strong> (bool, optional):
If true all output to the console is omitted (default False).</li>
<li><strong>initial_guess</strong> (list):
can provide an initial guess for the input parameters. Relevant for non-linear
fits with many parameters.</li>
<li><strong>expected_chisquare</strong> (bool):
If true prints the expected chisquare which is
corrected by effects caused by correlated input data.
This can take a while as the full correlation matrix
has to be calculated (default False).</li>
</ul>
<h6 id="notes">Notes</h6>
<p>Based on the orthogonal distance regression module of scipy</p>
</div>
</section>
<section id="fit_lin">
<input id="fit_lin-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">fit_lin</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">x</span>, </span><span class="param"><span class="n">y</span>, </span><span class="param"><span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="fit_lin-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#fit_lin"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="fit_lin-620"><a href="#fit_lin-620"><span class="linenos">620</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-621"><a href="#fit_lin-621"><span class="linenos">621</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-622"><a href="#fit_lin-622"><span class="linenos">622</span></a>
</span><span id="fit_lin-623"><a href="#fit_lin-623"><span class="linenos">623</span></a><span class="sd"> Parameters</span>
</span><span id="fit_lin-624"><a href="#fit_lin-624"><span class="linenos">624</span></a><span class="sd"> ----------</span>
</span><span id="fit_lin-625"><a href="#fit_lin-625"><span class="linenos">625</span></a><span class="sd"> x : list</span>
</span><span id="fit_lin-626"><a href="#fit_lin-626"><span class="linenos">626</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-627"><a href="#fit_lin-627"><span class="linenos">627</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-628"><a href="#fit_lin-628"><span class="linenos">628</span></a><span class="sd"> y : list</span>
</span><span id="fit_lin-629"><a href="#fit_lin-629"><span class="linenos">629</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-630"><a href="#fit_lin-630"><span class="linenos">630</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="fit_lin-631"><a href="#fit_lin-631"><span class="linenos">631</span></a>
</span><span id="fit_lin-632"><a href="#fit_lin-632"><span class="linenos">632</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-633"><a href="#fit_lin-633"><span class="linenos">633</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-634"><a href="#fit_lin-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="n">y</span>
</span><span id="fit_lin-635"><a href="#fit_lin-635"><span class="linenos">635</span></a>
</span><span id="fit_lin-636"><a href="#fit_lin-636"><span class="linenos">636</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-637"><a href="#fit_lin-637"><span class="linenos">637</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-638"><a href="#fit_lin-638"><span class="linenos">638</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-639"><a href="#fit_lin-639"><span class="linenos">639</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-640"><a href="#fit_lin-640"><span class="linenos">640</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-641"><a href="#fit_lin-641"><span class="linenos">641</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-642"><a href="#fit_lin-642"><span class="linenos">642</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="fit_lin-643"><a href="#fit_lin-643"><span class="linenos">643</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>
<div class="docstring"><p>Performs a linear fit to y = n + m * x and returns two Obs n, m.</p>
<h6 id="parameters">Parameters</h6>
<ul>
<li><strong>x</strong> (list):
Can either be a list of floats in which case no xerror is assumed, or
a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</li>
<li><strong>y</strong> (list):
List of Obs, the dvalues of the Obs are used as yerror for the fit.</li>
</ul>
</div>
</section>
<section id="qqplot">
<input id="qqplot-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">qqplot</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">x</span>, </span><span class="param"><span class="n">o_y</span>, </span><span class="param"><span class="n">func</span>, </span><span class="param"><span class="n">p</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="qqplot-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#qqplot"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="qqplot-646"><a href="#qqplot-646"><span class="linenos">646</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-647"><a href="#qqplot-647"><span class="linenos">647</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-648"><a href="#qqplot-648"><span class="linenos">648</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
</span><span id="qqplot-649"><a href="#qqplot-649"><span class="linenos">649</span></a><span class="sd"> &quot;&quot;&quot;</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">residuals</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="qqplot-652"><a href="#qqplot-652"><span class="linenos">652</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-653"><a href="#qqplot-653"><span class="linenos">653</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-654"><a href="#qqplot-654"><span class="linenos">654</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-655"><a href="#qqplot-655"><span class="linenos">655</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-656"><a href="#qqplot-656"><span class="linenos">656</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-657"><a href="#qqplot-657"><span class="linenos">657</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-658"><a href="#qqplot-658"><span class="linenos">658</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-659"><a href="#qqplot-659"><span class="linenos">659</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-660"><a href="#qqplot-660"><span class="linenos">660</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-661"><a href="#qqplot-661"><span class="linenos">661</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-662"><a href="#qqplot-662"><span class="linenos">662</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-663"><a href="#qqplot-663"><span class="linenos">663</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-664"><a href="#qqplot-664"><span class="linenos">664</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-665"><a href="#qqplot-665"><span class="linenos">665</span></a>
</span><span id="qqplot-666"><a href="#qqplot-666"><span class="linenos">666</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-667"><a href="#qqplot-667"><span class="linenos">667</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-668"><a href="#qqplot-668"><span class="linenos">668</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span><span id="qqplot-669"><a href="#qqplot-669"><span class="linenos">669</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Generates a quantile-quantile plot of the fit result which can be used to
check if the residuals of the fit are gaussian distributed.</p>
</div>
</section>
<section id="residual_plot">
<input id="residual_plot-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">residual_plot</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">x</span>, </span><span class="param"><span class="n">y</span>, </span><span class="param"><span class="n">func</span>, </span><span class="param"><span class="n">fit_res</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="residual_plot-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#residual_plot"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="residual_plot-672"><a href="#residual_plot-672"><span class="linenos">672</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-673"><a href="#residual_plot-673"><span class="linenos">673</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-674"><a href="#residual_plot-674"><span class="linenos">674</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-675"><a href="#residual_plot-675"><span class="linenos">675</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-676"><a href="#residual_plot-676"><span class="linenos">676</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-677"><a href="#residual_plot-677"><span class="linenos">677</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-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">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-680"><a href="#residual_plot-680"><span class="linenos">680</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-681"><a href="#residual_plot-681"><span class="linenos">681</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-682"><a href="#residual_plot-682"><span class="linenos">682</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-683"><a href="#residual_plot-683"><span class="linenos">683</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-684"><a href="#residual_plot-684"><span class="linenos">684</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-685"><a href="#residual_plot-685"><span class="linenos">685</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-686"><a href="#residual_plot-686"><span class="linenos">686</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-687"><a href="#residual_plot-687"><span class="linenos">687</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-688"><a href="#residual_plot-688"><span class="linenos">688</span></a>
</span><span id="residual_plot-689"><a href="#residual_plot-689"><span class="linenos">689</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-690"><a href="#residual_plot-690"><span class="linenos">690</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-691"><a href="#residual_plot-691"><span class="linenos">691</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-692"><a href="#residual_plot-692"><span class="linenos">692</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-693"><a href="#residual_plot-693"><span class="linenos">693</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-694"><a href="#residual_plot-694"><span class="linenos">694</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-695"><a href="#residual_plot-695"><span class="linenos">695</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-696"><a href="#residual_plot-696"><span class="linenos">696</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-697"><a href="#residual_plot-697"><span class="linenos">697</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-698"><a href="#residual_plot-698"><span class="linenos">698</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-699"><a href="#residual_plot-699"><span class="linenos">699</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Generates a plot which compares the fit to the data and displays the corresponding residuals</p>
</div>
</section>
<section id="error_band">
<input id="error_band-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">error_band</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">x</span>, </span><span class="param"><span class="n">func</span>, </span><span class="param"><span class="n">beta</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="error_band-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#error_band"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="error_band-702"><a href="#error_band-702"><span class="linenos">702</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-703"><a href="#error_band-703"><span class="linenos">703</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-704"><a href="#error_band-704"><span class="linenos">704</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-705"><a href="#error_band-705"><span class="linenos">705</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-706"><a href="#error_band-706"><span class="linenos">706</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-707"><a href="#error_band-707"><span class="linenos">707</span></a>
</span><span id="error_band-708"><a href="#error_band-708"><span class="linenos">708</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="error_band-709"><a href="#error_band-709"><span class="linenos">709</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-710"><a href="#error_band-710"><span class="linenos">710</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-711"><a href="#error_band-711"><span class="linenos">711</span></a>
</span><span id="error_band-712"><a href="#error_band-712"><span class="linenos">712</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="error_band-713"><a href="#error_band-713"><span class="linenos">713</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-714"><a href="#error_band-714"><span class="linenos">714</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-715"><a href="#error_band-715"><span class="linenos">715</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-716"><a href="#error_band-716"><span class="linenos">716</span></a>
</span><span id="error_band-717"><a href="#error_band-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="n">err</span>
</span></pre></div>
<div class="docstring"><p>Returns the error band for an array of sample values x, for given fit function func with optimized parameters beta.</p>
</div>
</section>
<section id="ks_test">
<input id="ks_test-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">ks_test</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">objects</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="ks_test-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ks_test"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ks_test-720"><a href="#ks_test-720"><span class="linenos">720</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-721"><a href="#ks_test-721"><span class="linenos">721</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-722"><a href="#ks_test-722"><span class="linenos">722</span></a>
</span><span id="ks_test-723"><a href="#ks_test-723"><span class="linenos">723</span></a><span class="sd"> Parameters</span>
</span><span id="ks_test-724"><a href="#ks_test-724"><span class="linenos">724</span></a><span class="sd"> ----------</span>
</span><span id="ks_test-725"><a href="#ks_test-725"><span class="linenos">725</span></a><span class="sd"> objects : list</span>
</span><span id="ks_test-726"><a href="#ks_test-726"><span class="linenos">726</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
</span><span id="ks_test-727"><a href="#ks_test-727"><span class="linenos">727</span></a><span class="sd"> &quot;&quot;&quot;</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="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-730"><a href="#ks_test-730"><span class="linenos">730</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="ks_test-731"><a href="#ks_test-731"><span class="linenos">731</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-732"><a href="#ks_test-732"><span class="linenos">732</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-733"><a href="#ks_test-733"><span class="linenos">733</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-734"><a href="#ks_test-734"><span class="linenos">734</span></a> <span class="k">else</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">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
</span><span id="ks_test-736"><a href="#ks_test-736"><span class="linenos">736</span></a>
</span><span id="ks_test-737"><a href="#ks_test-737"><span class="linenos">737</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-738"><a href="#ks_test-738"><span class="linenos">738</span></a>
</span><span id="ks_test-739"><a href="#ks_test-739"><span class="linenos">739</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-740"><a href="#ks_test-740"><span class="linenos">740</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-741"><a href="#ks_test-741"><span class="linenos">741</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-742"><a href="#ks_test-742"><span class="linenos">742</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-743"><a href="#ks_test-743"><span class="linenos">743</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-744"><a href="#ks_test-744"><span class="linenos">744</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-745"><a href="#ks_test-745"><span class="linenos">745</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-746"><a href="#ks_test-746"><span class="linenos">746</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-747"><a href="#ks_test-747"><span class="linenos">747</span></a>
</span><span id="ks_test-748"><a href="#ks_test-748"><span class="linenos">748</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-749"><a href="#ks_test-749"><span class="linenos">749</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-750"><a href="#ks_test-750"><span class="linenos">750</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-751"><a href="#ks_test-751"><span class="linenos">751</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-752"><a href="#ks_test-752"><span class="linenos">752</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-753"><a href="#ks_test-753"><span class="linenos">753</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-754"><a href="#ks_test-754"><span class="linenos">754</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-755"><a href="#ks_test-755"><span class="linenos">755</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-756"><a href="#ks_test-756"><span class="linenos">756</span></a>
</span><span id="ks_test-757"><a href="#ks_test-757"><span class="linenos">757</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>
<div class="docstring"><p>Performs a KolmogorovSmirnov test for the p-values of all fit object.</p>
<h6 id="parameters">Parameters</h6>
<ul>
<li><strong>objects</strong> (list):
List of fit results to include in the analysis (optional).</li>
</ul>
</div>
</section>
</main>
<script>
function escapeHTML(html) {
return document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML;
}
const originalContent = document.querySelector("main.pdoc");
let currentContent = originalContent;
function setContent(innerHTML) {
let elem;
if (innerHTML) {
elem = document.createElement("main");
elem.classList.add("pdoc");
elem.innerHTML = innerHTML;
} else {
elem = originalContent;
}
if (currentContent !== elem) {
currentContent.replaceWith(elem);
currentContent = elem;
}
}
function getSearchTerm() {
return (new URL(window.location)).searchParams.get("search");
}
const searchBox = document.querySelector(".pdoc input[type=search]");
searchBox.addEventListener("input", function () {
let url = new URL(window.location);
if (searchBox.value.trim()) {
url.hash = "";
url.searchParams.set("search", searchBox.value);
} else {
url.searchParams.delete("search");
}
history.replaceState("", "", url.toString());
onInput();
});
window.addEventListener("popstate", onInput);
let search, searchErr;
async function initialize() {
try {
search = await new Promise((resolve, reject) => {
const script = document.createElement("script");
script.type = "text/javascript";
script.async = true;
script.onload = () => resolve(window.pdocSearch);
script.onerror = (e) => reject(e);
script.src = "../search.js";
document.getElementsByTagName("head")[0].appendChild(script);
});
} catch (e) {
console.error("Cannot fetch pdoc search index");
searchErr = "Cannot fetch search index.";
}
onInput();
document.querySelector("nav.pdoc").addEventListener("click", e => {
if (e.target.hash) {
searchBox.value = "";
searchBox.dispatchEvent(new Event("input"));
}
});
}
function onInput() {
setContent((() => {
const term = getSearchTerm();
if (!term) {
return null
}
if (searchErr) {
return `<h3>Error: ${searchErr}</h3>`
}
if (!search) {
return "<h3>Searching...</h3>"
}
window.scrollTo({top: 0, left: 0, behavior: 'auto'});
const results = search(term);
let html;
if (results.length === 0) {
html = `No search results for '${escapeHTML(term)}'.`
} else {
html = `<h4>${results.length} search result${results.length > 1 ? "s" : ""} for '${escapeHTML(term)}'.</h4>`;
}
for (let result of results.slice(0, 10)) {
let doc = result.doc;
let url = `../${doc.modulename.replaceAll(".", "/")}.html`;
if (doc.qualname) {
url += `#${doc.qualname}`;
}
let heading;
switch (result.doc.type) {
case "function":
if (doc.fullname.endsWith(".__init__")) {
heading = `<span class="name">${doc.fullname.replace(/\.__init__$/, "")}</span>${doc.signature}`;
} else {
heading = `<span class="def">${doc.funcdef}</span> <span class="name">${doc.fullname}</span>${doc.signature}`;
}
break;
case "class":
heading = `<span class="def">class</span> <span class="name">${doc.fullname}</span>`;
if (doc.bases)
heading += `<wbr>(<span class="base">${doc.bases}</span>)`;
heading += `:`;
break;
case "variable":
heading = `<span class="name">${doc.fullname}</span>`;
if (doc.annotation)
heading += `<span class="annotation">${doc.annotation}</span>`;
if (doc.default_value)
heading += `<span class="default_value">${doc.default_value}</span>`;
break;
default:
heading = `<span class="name">${doc.fullname}</span>`;
break;
}
html += `
<section class="search-result">
<a href="${url}" class="attr ${doc.type}">${heading}</a>
<div class="docstring">${doc.doc}</div>
</section>
`;
}
return html;
})());
}
if (getSearchTerm()) {
initialize();
searchBox.value = getSearchTerm();
onInput();
} else {
searchBox.addEventListener("focus", initialize, {once: true});
}
searchBox.addEventListener("keydown", e => {
if (["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) {
let focused = currentContent.querySelector(".search-result.focused");
if (!focused) {
currentContent.querySelector(".search-result").classList.add("focused");
} else if (
e.key === "ArrowDown"
&& focused.nextElementSibling
&& focused.nextElementSibling.classList.contains("search-result")
) {
focused.classList.remove("focused");
focused.nextElementSibling.classList.add("focused");
focused.nextElementSibling.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "nearest"
});
} else if (
e.key === "ArrowUp"
&& focused.previousElementSibling
&& focused.previousElementSibling.classList.contains("search-result")
) {
focused.classList.remove("focused");
focused.previousElementSibling.classList.add("focused");
focused.previousElementSibling.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "nearest"
});
} else if (
e.key === "Enter"
) {
focused.querySelector("a").click();
}
}
});
</script></body>
</html>