2021-11-07 20:53:18 +00:00
<!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 8.0.1" / >
< title > pyerrors API documentation< / title >
< link rel = "icon" type = "image/svg+xml" href = "data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2264%22%20height%3D%2264%22%20viewBox%3D%2244.5%202.5%2015%2015%22%3E%3Cpath%20d%3D%22M49.351%2021.041c-.233-.721-.546-2.408-.772-4.076-.042-.09-.067-.187-.046-.288-.166-1.347-.277-2.625-.241-3.351-1.378-1.008-2.271-2.586-2.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%201.202-2.679%202.679-2.679.791%200%201.496.352%201.987.9a6.3%206.3%200%200%201%201.001.029c.492-.564%201.207-.929%202.012-.929%201.477%200%202.679%201.202%202.679%202.679a2.65%202.65%200%200%201-.269%201.148c.383.747.595%201.572.595%202.41%200%202.311-1.507%204.29-3.635%205.107.037.699.147%202.27.423%203.294l.137.461c.156%202.136-4.612%205.166-5.199%203.215zm.127-4.919a4.78%204.78%200%200%200%20.775-.584c-.172-.115-.505-.254-.88-.378zm.331%202.302l.828-.502c-.202-.143-.576-.328-.984-.49zm.45%202.157l.701-.403c-.214-.115-.536-.249-.891-.376l.19.779zM49.13%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%201%20.314.783%201.16%201.16%200%200%201-1.162%201.162c-.457%200-.842-.27-1.032-.653-.026.117-.042.238-.042.362a1.68%201.68%200%200%200%201.679%201.679%201.68%201.68%200%200%200%201.679-1.679c0-.843-.626-1.535-1.436-1.654zm3.076%201.654a1.68%201.68%200%200%200%201.679%201.679%201.68%201.68%200%200%200%201.679-1.679c0-.037-.009-.072-.011-.109-.21.3-.541.508-.935.508a1.16%201.16%200%200%201-1.162-1.162%201.14%201.14%200%200%201%20.474-.912c-.015%200-.03-.005-.045-.005-.926.001-1.679.754-1.679%201.68zm1.861-1.265c0%20.152.123.276.276.276s.275-.124.275-.276-.123-.276-.276-.276-.275.124-.275.276zm1.823%204.823c0-.52-.103-1.035-.288-1.52-.466.394-1.06.64-1.717.64-1.144%200-2.116-.725-2.499-1.738-.383%201.012-1.355%201.738-2.499%201.738-.867%200-1.631-.421-2.121-1.062-.307.605-.478%201.267-.478%201.942%200%202.486%202.153%204.51%204.801%204.51s4.801-2.023%204.801-4.51zm-3.032%209.156l-.146-.492c-.276-1.02-.395-2.457-.444-3.268a6.11%206.11%200%200%201-1.18.115%206.01%206.01%200%200%201-2.536-.562l.006.175c.802.215%201.848.612%202.021%201.25.079.295-.021.601-.274.837l-.598.501c.667.304%201.243.698%201.311%201.179.02.144.022.507-.393.787l-.564.365c1.285.521%201.361.96%201.381%201.126.018.142.011.496-.427.746l-.854.489c.064-1.19%201.985-2.585%202.697-3.248zM49.34%209.925c0-.667%201-.667%201%200%200%20.653.818%201.205%201.787%201.205s1.787-.552%201.787-1.205c0-.667%201-.667%201%200%200%201.216-1.25%202.205-2.787%202.205s-2.787-.989-2.787-2.205zm-.887-7.633c-.093.077-.205.114-.317.114a.5.5%200%200%201-.318-.886L49.183.397a.5.5%200%200%201%20.703.068.5.5%200%200%201-.069.703zm7.661-.065c-.086%200-.173-.022-.253-.068l-1.523-.893c-.575-.337-.069-1.2.506-.863l1.523.892a.5.5%200%200%201%20.179.685c-.094.158-.261.247-.432.247z%22%20fill%3D%22%233bb300%22/%3E%3C/svg%3E" / >
< 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 >
< style > / * ! * B o o t s t r a p R e b o o t v 5 . 0 . 0 ( h t t p s : / / g e t b o o t s t r a p . c o m / ) * C o p y r i g h t 2 0 1 1 - 2 0 2 1 T h e B o o t s t r a p A u t h o r s * C o p y r i g h t 2 0 1 1 - 2 0 2 1 T w i t t e r , I n c . * L i c e n s e d u n d e r M I T ( h t t p s : / / g i t h u b . c o m / t w b s / b o o t s t r a p / b l o b / m a i n / L I C E N S E ) * F o r k e d f r o m N o r m a l i z e . c s s , l i c e n s e d M I T ( h t t p s : / / g i t h u b . c o m / n e c o l a s / n o r m a l i z e . c s s / b l o b / m a s t e r / L I C E N S E . m d ) * / * , : : a f t e r , : : b e f o r e { b o x - s i z i n g : b o r d e r - b o x } @ m e d i a ( p r e f e r s - r e d u c e d - m o t i o n : n o - p r e f e r e n c e ) { : r o o t { s c r o l l - b e h a v i o r : s m o o t h } } b o d y { m a r g i n : 0 ; f o n t - f a m i l y : s y s t e m - u i , - a p p l e - s y s t e m , " S e g o e U I " , R o b o t o , " H e l v e t i c a N e u e " , A r i a l , " N o t o S a n s " , " L i b e r a t i o n S a n s " , s a n s - s e r i f , " A p p l e C o l o r E m o j i " , " S e g o e U I E m o j i " , " S e g o e U I S y m b o l " , " N o t o C o l o r E m o j i " ; f o n t - s i z e : 1 r e m ; f o n t - w e i g h t : 4 0 0 ; l i n e - h e i g h t : 1 . 5 ; c o l o r : # 2 1 2 5 2 9 ; b a c k g r o u n d - c o l o r : # f f f ; - w e b k i t - t e x t - s i z e - a d j u s t : 1 0 0 % ; - w e b k i t - t a p - h i g h l i g h t - c o l o r : t r a n s p a r e n t } h r { m a r g i n : 1 r e m 0 ; c o l o r : i n h e r i t ; b a c k g r o u n d - c o l o r : c u r r e n t C o l o r ; b o r d e r : 0 ; o p a c i t y : . 2 5 } h r : n o t ( [ s i z e ] ) { h e i g h t : 1 p x } h 1 , h 2 , h 3 , h 4 , h 5 , h 6 { m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : . 5 r e m ; f o n t - w e i g h t : 5 0 0 ; l i n e - h e i g h t : 1 . 2 } h 1 { f o n t - s i z e : c a l c ( 1 . 3 7 5 r e m + 1 . 5 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 1 { f o n t - s i z e : 2 . 5 r e m } } h 2 { f o n t - s i z e : c a l c ( 1 . 3 2 5 r e m + . 9 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 2 { f o n t - s i z e : 2 r e m } } h 3 { f o n t - s i z e : c a l c ( 1 . 3 r e m + . 6 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 3 { f o n t - s i z e : 1 . 7 5 r e m } } h 4 { f o n t - s i z e : c a l c ( 1 . 2 7 5 r e m + . 3 v w ) } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { h 4 { f o n t - s i z e : 1 . 5 r e m } } h 5 { f o n t - s i z e : 1 . 2 5 r e m } h 6 { f o n t - s i z e : 1 r e m } p { m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : 1 r e m } a b b r [ d a t a - b s - o r i g i n a l - t i t l e ] , a b b r [ t i t l e ] { - w e b k i t - t e x t - d e c o r a t i o n : u n d e r l i n e d o t t e d ; t e x t - d e c o r a t i o n : u n d e r l i n e d o t t e d ; c u r s o r : h e l p ; - w e b k i t - t e x t - d e c o r a t i o n - s k i p - i n k : n o n e ; t e x t - d e c o r a t i o n - s k i p - i n k : n o n e } a d d r e s s { m a r g i n - b o t t o m : 1 r e m ; f o n t - s t y l e : n o r m a l ; l i n e - h e i g h t : i n h e r i t } o l , u l { p a d d i n g - l e f t : 2 r e m } d l , o l , u l { m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : 1 r e m } o l o l , o l u l , u l o l , u l u l { m a r g i n - b o t t o m : 0 } d t { f o n t - w e i g h t : 7 0 0 } d d { m a r g i n - b o t t o m : . 5 r e m ; m a r g i n - l e f t : 0 } b l o c k q u o t e { m a r g i n : 0 0 1 r e m } b , s t r o n g { f o n t - w e i g h t : b o l d e r } s m a l l { f o n t - s i z e : . 8 7 5 e m } m a r k { p a d d i n g : . 2 e m ; b a c k g r o u n d - c o l o r : # f c f 8 e 3 } s u b , s u p { p o s i t i o n : r e l a t i v e ; f o n t - s i z e : . 7 5 e m ; l i n e - h e i g h t : 0 ; v e r t i c a l - a l i g n : b a s e l i n e } s u b { b o t t o m : - . 2 5 e m } s u p { t o p : - . 5 e m } a { c o l o r : # 0 d 6 e f d ; t e x t - d e c o r a t i o n : u n d e r l i n e } a : h o v e r { c o l o r : # 0 a 5 8 c a } a : n o t ( [ h r e f ] ) : n o t ( [ c l a s s ] ) , a : n o t ( [ h r e f ] ) : n o t ( [ c l a s s ] ) : h o v e r { c o l o r : i n h e r i t ; t e x t - d e c o r a t i o n : n o n e } c o d e , k b d , p r e , s a m p { f o n t - f a m i l y : S F M o n o - R e g u l a r , M e n l o , M o n a c o , C o n s o l a s , " L i b e r a t i o n M o n o " , " C o u r i e r N e w " , m o n o s p a c e ; f o n t - s i z e : 1 e m ; d i r e c t i o n : l t r ; u n i c o d e - b i d i : b i d i - o v e r r i d e } p r e { d i s p l a y : b l o c k ; m a r g i n - t o p : 0 ; m a r g i n - b o t t o m : 1 r e m ; o v e r f l o w : a u t o ; f o n t - s i z e : . 8 7 5 e m } p r e c o d e { f o n t - s i z e : i n h e r i t ; c o l o r : i n h e r i t ; w o r d - b r e a k : n o r m a l } c o d e { f o n t - s i z e : . 8 7 5 e m ; c o l o r : # d 6 3 3 8 4 ; w o r d - w r a p : b r e a k - w o r d } a > c o d e { c o l o r : i n h e r i t } k b d { p a d d i n g : . 2 r e m . 4 r e m ; f o n t - s i z e : . 8 7 5 e m ; c o l o r : # f f f ; b a c k g r o u n d - c o l o r : # 2 1 2 5 2 9 ; b o r d e r - r a d i u s : . 2 r e m } k b d k b d { p a d d i n g : 0 ; f o n t - s i z e : 1 e m ; f o n t - w e i g h t : 7 0 0 } f i g u r e { m a r g i n : 0 0 1 r e m } i m g , s v g { v e r t i c a l - a l i g n : m i d d l e } t a b l e { c a p t i o n - s i d e : b o t t o m ; b o r d e r - c o l l a p s e : c o l l a p s e } c a p t i o n { p a d d i n g - t o p : . 5 r e m ; p a d d i n g - b o t t o m : . 5 r e m ; c o l o r : # 6 c 7 5 7 d ; t e x t - a l i g n : l e f t } t h { t e x t - a l i g n : i n h e r i t ; t e x t - a l i g n : - w e b k i t - m a t c h - p a r e n t } t b o d y , t d , t f o o t , t h , t h e a d , t r { b o r d e r - c o l o r : i n h e r i t ; b o r d e r - s t y l e : s o l i d ; b o r d e r - w i d t h : 0 } l a b e l { d i s p l a y : i n l i n e - b l o c k } b u t t o n { b o r d e r - r a d i u s : 0 } b u t t o n : f o c u s : n o t ( : f o c u s - v i s i b l e ) { o u t l i n e : 0 } b u t t o n , i n p u t , o p t g r o u p , s e l e c t , t e x t a r e a { m a r g i n : 0 ; f o n t - f a m i l y : i n h e r i t ; f o n t - s i z e : i n h e r i t ; l i n e - h e i g h t : i n h e r i t } b u t t o n , s e l e c t { t e x t - t r a n s f o r m : n o n e } [ r o l e = b u t t o n ] { c u r s o r : p o i n t e r } s e l e c t { w o r d - w r a p : n o r m a l } s e l e c t : d i s a b l e d { o p a c i t y : 1 } [ l i s t ] : : - w e b k i t - c a l e n d a r - p i c k e r - i n d i c a t o r { d i s p l a y : n o n e } [ t y p e = b u t t o n ] , [ t y p e = r e s e t ] , [ t y p e = s u b m i t ] , b u t t o n { - w e b k i t - a p p e a r a n c e : b u t t o n } [ t y p e = b u t t o n ] : n o t ( : d i s a b l e d ) , [ t y p e = r e s e t ] : n o t ( : d i s a b l e d ) , [ t y p e = s u b m i t ] : n o t ( : d i s a b l e d ) , b u t t o n : n o t ( : d i s a b l e d ) { c u r s o r : p o i n t e r } : : - m o z - f o c u s - i n n e r { p a d d i n g : 0 ; b o r d e r - s t y l e : n o n e } t e x t a r e a { r e s i z e : v e r t i c a l } f i e l d s e t { m i n - w i d t h : 0 ; p a d d i n g : 0 ; m a r g i n : 0 ; b o r d e r : 0 } l e g e n d { f l o a t : l e f t ; w i d t h : 1 0 0 % ; p a d d i n g : 0 ; m a r g i n - b o t t o m : . 5 r e m ; f o n t - s i z e : c a l c ( 1 . 2 7 5 r e m + . 3 v w ) ; l i n e - h e i g h t : i n h e r i t } @ m e d i a ( m i n - w i d t h : 1 2 0 0 p x ) { l e g e n d { f o n t - s i z e : 1 . 5 r e m } } l e g e n d + * { c l e a r : l e f t } : : - w e b k i t - d a t e t i m e - e d i t - d a y - f i e l d , : : - w e b k i t - d a t e t i m e - e d i t - f i e l d s - w r a p p e r , : : - w e b k i t - d a t e t i m e - e d i t - h o u r - f i e l d , : : - w e b k i t - d a t e t i m e - e d i t - m i n u t e , : : - w e b k i t - d a t e t i m e - e d i t - m o n t h - f i e l d , :
< style > /*! pygments syntax highlighting */ pre { line-height : 125 % ; } td . linenos pre { color : #000000 ; background-color : #f0f0f0 ; padding-left : 5 px ; padding-right : 5 px ; } span . linenos { color : #000000 ; background-color : #f0f0f0 ; padding-left : 5 px ; padding-right : 5 px ; } td . linenos pre . special { color : #000000 ; background-color : #ffffc0 ; padding-left : 5 px ; padding-right : 5 px ; } span . linenos . special { color : #000000 ; background-color : #ffffc0 ; padding-left : 5 px ; padding-right : 5 px ; } . pdoc . hll { background-color : #ffffcc } . pdoc { background : #f8f8f8 ; } . pdoc . c { color : #408080 ; font-style : italic } . pdoc . err { border : 1 px solid #FF0000 } . pdoc . k { color : #008000 ; font-weight : bold } . pdoc . o { color : #666666 } . pdoc . ch { color : #408080 ; font-style : italic } . pdoc . cm { color : #408080 ; font-style : italic } . pdoc . cp { color : #BC7A00 } . pdoc . cpf { color : #408080 ; font-style : italic } . pdoc . c1 { color : #408080 ; font-style : italic } . pdoc . cs { color : #408080 ; font-style : italic } . pdoc . gd { color : #A00000 } . pdoc . ge { font-style : italic } . pdoc . gr { color : #FF0000 } . pdoc . gh { color : #000080 ; font-weight : bold } . pdoc . gi { color : #00A000 } . pdoc . go { color : #888888 } . pdoc . gp { color : #000080 ; font-weight : bold } . pdoc . gs { font-weight : bold } . pdoc . gu { color : #800080 ; font-weight : bold } . pdoc . gt { color : #0044DD } . pdoc . kc { color : #008000 ; font-weight : bold } . pdoc . kd { color : #008000 ; font-weight : bold } . pdoc . kn { color : #008000 ; font-weight : bold } . pdoc . kp { color : #008000 } . pdoc . kr { color : #008000 ; font-weight : bold } . pdoc . kt { color : #B00040 } . pdoc . m { color : #666666 } . pdoc . s { color : #BA2121 } . pdoc . na { color : #7D9029 } . pdoc . nb { color : #008000 } . pdoc . nc { color : #0000FF ; font-weight : bold } . pdoc . no { color : #880000 } . pdoc . nd { color : #AA22FF } . pdoc . ni { color : #999999 ; font-weight : bold } . pdoc . ne { color : #D2413A ; font-weight : bold } . pdoc . nf { color : #0000FF } . pdoc . nl { color : #A0A000 } . pdoc . nn { color : #0000FF ; font-weight : bold } . pdoc . nt { color : #008000 ; font-weight : bold } . pdoc . nv { color : #19177C } . pdoc . ow { color : #AA22FF ; font-weight : bold } . pdoc . w { color : #bbbbbb } . pdoc . mb { color : #666666 } . pdoc . mf { color : #666666 } . pdoc . mh { color : #666666 } . pdoc . mi { color : #666666 } . pdoc . mo { color : #666666 } . pdoc . sa { color : #BA2121 } . pdoc . sb { color : #BA2121 } . pdoc . sc { color : #BA2121 } . pdoc . dl { color : #BA2121 } . pdoc . sd { color : #BA2121 ; font-style : italic } . pdoc . s2 { color : #BA2121 } . pdoc . se { color : #BB6622 ; font-weight : bold } . pdoc . sh { color : #BA2121 } . pdoc . si { color : #BB6688 ; font-weight : bold } . pdoc . sx { color : #008000 } . pdoc . sr { color : #BB6688 } . pdoc . s1 { color : #BA2121 } . pdoc . ss { color : #19177C } . pdoc . bp { color : #008000 } . pdoc . fm { color : #0000FF } . pdoc . vc { color : #19177C } . pdoc . vg { color : #19177C } . pdoc . vi { color : #19177C } . pdoc . vm { color : #19177C } . pdoc . il { color : #666666 } < / style >
< style > / * ! p d o c * / : r o o t { - - p d o c - b a c k g r o u n d : # f f f ; } . p d o c { - - t e x t : # 2 1 2 5 2 9 ; - - m u t e d : # 6 c 7 5 7 d ; - - l i n k : # 3 6 6 0 a 5 ; - - l i n k - h o v e r : # 1 6 5 9 c 5 ; - - c o d e : # f 7 f 7 f 7 ; - - a c t i v e : # f f f 5 9 8 ; - - a c c e n t : # e e e ; - - a c c e n t 2 : # c 1 c 1 c 1 ; - - n a v - h o v e r : r g b a ( 2 5 5 , 2 5 5 , 2 5 5 , 0 . 5 ) ; - - n a m e : # 0 0 6 6 B B ; - - d e f : # 0 0 8 8 0 0 ; - - a n n o t a t i o n : # 0 0 7 0 2 0 ; } b o d y { b a c k g r o u n d - c o l o r : v a r ( - - p d o c - b a c k g r o u n d ) ; } h t m l , b o d y { w i d t h : 1 0 0 % ; h e i g h t : 1 0 0 % ; } @ m e d i a ( m a x - w i d t h : 7 6 9 p x ) { # n a v t o g g l e { c u r s o r : p o i n t e r ; p o s i t i o n : a b s o l u t e ; w i d t h : 5 0 p x ; h e i g h t : 4 0 p x ; t o p : 1 r e m ; r i g h t : 1 r e m ; b o r d e r - c o l o r : v a r ( - - t e x t ) ; c o l o r : v a r ( - - t e x t ) ; d i s p l a y : f l e x ; o p a c i t y : 0 . 8 ; } # n a v t o g g l e : h o v e r { o p a c i t y : 1 ; } # t o g g l e s t a t e + d i v { d i s p l a y : n o n e ; } # t o g g l e s t a t e : c h e c k e d + d i v { d i s p l a y : i n h e r i t ; } m a i n , h e a d e r { p a d d i n g : 2 r e m 3 v w ; } . g i t - b u t t o n { d i s p l a y : n o n e ! i m p o r t a n t ; } n a v i n p u t [ t y p e = " s e a r c h " ] : v a l i d ~ * { d i s p l a y : n o n e ! i m p o r t a n t ; } } @ m e d i a ( m i n - w i d t h : 7 7 0 p x ) { : r o o t { - - s i d e b a r - w i d t h : c l a m p ( 1 2 . 5 r e m , 2 8 v w , 2 2 r e m ) ; } n a v { p o s i t i o n : f i x e d ; o v e r f l o w : a u t o ; h e i g h t : 1 0 0 v h ; w i d t h : v a r ( - - s i d e b a r - w i d t h ) ; } m a i n , h e a d e r { p a d d i n g : 3 r e m 2 r e m 3 r e m c a l c ( v a r ( - - s i d e b a r - w i d t h ) + 3 r e m ) ; w i d t h : c a l c ( 5 4 r e m + v a r ( - - s i d e b a r - w i d t h ) ) ; m a x - w i d t h : 1 0 0 % ; } # n a v t o g g l e { d i s p l a y : n o n e ; } } # t o g g l e s t a t e { d i s p l a y : n o n e ; } n a v . p d o c { - - p a d : 1 . 7 5 r e m ; - - i n d e n t : 1 . 5 r e m ; b a c k g r o u n d - c o l o r : v a r ( - - a c c e n t ) ; b o r d e r - r i g h t : 1 p x s o l i d v a r ( - - a c c e n t 2 ) ; b o x - s h a d o w : 0 0 2 0 p x r g b a ( 5 0 , 5 0 , 5 0 , . 2 ) i n s e t ; p a d d i n g : 0 0 0 v a r ( - - p a d ) ; o v e r f l o w - w r a p : a n y w h e r e ; s c r o l l b a r - w i d t h : t h i n ; s c r o l l b a r - c o l o r : v a r ( - - a c c e n t 2 ) t r a n s p a r e n t } n a v . p d o c : : - w e b k i t - s c r o l l b a r { w i d t h : . 4 r e m ; } n a v . p d o c : : - w e b k i t - s c r o l l b a r - t h u m b { b a c k g r o u n d - c o l o r : v a r ( - - a c c e n t 2 ) ; } n a v . p d o c > d i v { p a d d i n g : v a r ( - - p a d ) 0 ; } n a v . p d o c . m o d u l e - l i s t - b u t t o n { d i s p l a y : i n l i n e - f l e x ; a l i g n - i t e m s : c e n t e r ; c o l o r : v a r ( - - t e x t ) ; b o r d e r - c o l o r : v a r ( - - m u t e d ) ; m a r g i n - b o t t o m : 1 r e m ; } n a v . p d o c . m o d u l e - l i s t - b u t t o n : h o v e r { b o r d e r - c o l o r : v a r ( - - t e x t ) ; } n a v . p d o c i n p u t [ t y p e = s e a r c h ] { d i s p l a y : b l o c k ; o u t l i n e - o f f s e t : 0 ; w i d t h : c a l c ( 1 0 0 % - v a r ( - - p a d ) ) ; } n a v . p d o c . l o g o { m a x - w i d t h : c a l c ( 1 0 0 % - v a r ( - - p a d ) ) ; m a x - h e i g h t : 3 5 v h ; d i s p l a y : b l o c k ; m a r g i n : 0 a u t o 1 r e m ; t r a n s f o r m : t r a n s l a t e ( c a l c ( - . 5 * v a r ( - - p a d ) ) , 0 ) ; } n a v . p d o c u l { l i s t - s t y l e : n o n e ; p a d d i n g - l e f t : 0 ; } n a v . p d o c l i { d i s p l a y : b l o c k ; m a r g i n : 0 ; p a d d i n g : . 2 r e m 0 . 2 r e m v a r ( - - i n d e n t ) ; t r a n s i t i o n : a l l 1 0 0 m s ; } n a v . p d o c > d i v > u l > l i { p a d d i n g - l e f t : 0 ; } n a v . p d o c l i : h o v e r { b a c k g r o u n d - c o l o r : v a r ( - - n a v - h o v e r ) ; } n a v . p d o c a , n a v . p d o c a : h o v e r { c o l o r : v a r ( - - t e x t ) ; } n a v . p d o c a { d i s p l a y : b l o c k ; } n a v . p d o c > h 2 : f i r s t - o f - t y p e { m a r g i n - t o p : 1 . 5 r e m ; } n a v . p d o c . c l a s s : b e f o r e { c o n t e n t : " c l a s s " ; c o l o r : v a r ( - - m u t e d ) ; } n a v . p d o c . f u n c t i o n : a f t e r { c o n t e n t : " ( ) " ; c o l o r : v a r ( - - m u t e d ) ; } n a v . p d o c f o o t e r : b e f o r e { c o n t e n t : " " ; d i s p l a y : b l o c k ; w i d t h : c a l c ( 1 0 0 % - v a r ( - - p a d ) ) ; b o r d e r - t o p : s o l i d v a r ( - - a c c e n t 2 ) 1 p x ; m a r g i n - t o p : 1 . 5 r e m ; p a d d i n g - t o p : . 5 r e m ; } n a v . p d o c f o o t e r { f o n t - s i z e : s m a l l ; } h t m l , m a i n { s c r o l l - b e h a v i o r : s m o o t h ; } . p d o c { c o l o r : v a r ( - - t e x t ) ; b o x - s i z i n g : b o r d e r - b o x ; l i n e - h e i g h t : 1 . 5 ; b a c k g r o u n d : n o n e ; } . p d o c . p d o c - b u t t o n { d i s p l a y : i n l i n e - b l o c k ; b o r d e r : s o l i d b l a c k 1 p x ; b o r d e r - r a d i u s : 2 p x ; f o n t - s i z e : . 7 5 r e m ; p a d d i n g : c a l c ( 0 . 5 e m - 1 p x ) 1 e m ; t r a n s i t i o n : 1 0 0 m s a l l ; } . p d o c . v i s u a l l y - h i d d e n { p o s i t i o n : a b s o l u t e ! i m p o r t a n t ; w i d t h : 1 p x ! i m p o r t a n t ; h e i g h t : 1 p x ! i m p o r t a n t ; p a d d i n g : 0 ! i m p o r t a n t ; m a r g i n : - 1 p x ! i m p o r t a n t ; o v e r f l o w : h i d d e n ! i m p o r t a n t ; c l i p : r e c t ( 0 , 0 , 0 , 0 ) ! i m p o r t a n t ; w h i t e - s p a c e : n o w r a p ! i m p o r t a n t ; b o r d e r : 0 ! i m p o r t a n t ; } . p d o c h 1 , . p d o c h 2 , . p d o c h 3 { f o n t - w e i g h t : 3 0 0 ; m a r g i n : . 3 e m 0 ; p a d d i n g : . 2 e m 0 ; } . p d o c a { t e x t - d e c o r a t i o n : n o n e ; c o l o r : v a r ( - - l i n k ) ; } . p d o c a : h o v e r { c o l o r : v a r ( - - l i n k - h o v e r ) ; } . p d o c b l o c k q u o t e { m a r g i n - l e f t : 2 r e m ; } . p d o c p r e { b a c k g r o u n d - c o l o r : v a r ( - - c o d e ) ; b o r d e r - t o p : 1 p x s o l i d v a r ( - - a c c e n t 2 ) ; b o r d e r - b o t t o m : 1 p x s o l i d v a r ( - - a c c e n t 2 ) ; m a r g i n - b o t t o m : 1 e m ; p a d d i n g : . 5 r e m 0 . 5 r e m . 5 r e m ; o v e r f l o w - x : a u t o ; } . p d o c c o d e { c o l o r : v a r ( - - t e x t ) ; p a d d i n g : . 2 e m . 4 e m ; m a r g i n : 0 ; f o n t - s i z e : 8 5 % ; b a c k g r o u n d - c o l o r : v a r ( - - c o d e ) ; b o r d e r - r a d i u s : 6 p x ; } . p d o c a > c o d e { c o l o r : i n h e r i t ; } . p d o c p r e > c o d e { d i s p l a y : i n l i n e - b l o c k ; f o n t - s i z e : i n h e r i t ; b a c k g r o u n d : n o n e ; b o r d e r : n o n e ; p a d d i n g : 0 ; } . p d o c . m o d u l e n a m e { m a r g i n - t o p : 0 ; f o n t - w e i g h t : b o l d ; } . p d o c . m o d u l e n a m e a { c o l o r : v a r ( - - l i n k ) ; t r a n s i t i o n : 1 0 0 m s a l l ; } . p d o c . g i t - b u t t o n { f l o a t : r i g h t ; b o r d e r : s o l i d v a r ( - - l i n k ) 1 p x ; } . p d o c . g i t - b u t t o n : h o v e r { b a c k g r o u n d - c o l o r : v a r ( - - l i n k ) ; c o l o r : v a r ( - - p d o c - b a c k g r o u n d ) ; } . p d o c d e t a i l s { - - s h i f t : - 4 0 p x ; t e x t - a l i g n : r i g h t ; m a r g i n - t o p : v a r ( - - s h i f t ) ; m a r g i n - b o t t o m : c a l c ( 0 p x - v a r ( - - s h i f t ) ) ; c l e a r :
< / 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" >
< div >
< a class = "pdoc-button module-list-button" href = "index.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 >
Module Index
< / a >
< input type = "search" placeholder = "Search..." role = "searchbox" aria-label = "search"
pattern=".+" required>
< h2 > Contents< / h2 >
< ul >
< li > < a href = "#what-is-pyerrors" > What is pyerrors?< / a >
< ul >
< li > < a href = "#getting-started" > Getting started< / a > < / li >
< / ul > < / li >
< li > < a href = "#the-obs-class" > The < code > Obs< / code > class< / a >
< ul >
2021-11-09 11:51:27 +00:00
< li > < a href = "#error-propagation" > Error propagation< / a > < / li >
< li > < a href = "#error-estimation" > Error estimation< / a >
< ul >
< li > < a href = "#exponential-tails" > Exponential tails< / a > < / li >
< / ul > < / li >
2021-11-15 10:12:16 +00:00
< li > < a href = "#multiple-ensemblesreplica" > Multiple ensembles/replica< / a >
< ul >
< li > < a href = "#error-estimation-for-multiple-ensembles" > Error estimation for multiple ensembles< / a > < / li >
< / ul > < / li >
2021-11-07 20:53:18 +00:00
< li > < a href = "#irregular-monte-carlo-chains" > Irregular Monte Carlo chains< / a > < / li >
< / ul > < / li >
2021-11-07 21:09:48 +00:00
< li > < a href = "#correlators" > Correlators< / a > < / li >
2021-11-07 20:53:18 +00:00
< li > < a href = "#complex-observables" > Complex observables< / a > < / li >
2021-11-09 11:51:27 +00:00
< li > < a href = "#optimization-fits-roots" > Optimization / fits / roots< / a > < / li >
2021-11-07 20:53:18 +00:00
< li > < a href = "#matrix-operations" > Matrix operations< / a > < / li >
< li > < a href = "#input" > Input< / a > < / li >
< / ul >
< h2 > Submodules< / h2 >
< ul >
< li > < a href = "pyerrors/correlators.html" > pyerrors.correlators< / a > < / li >
< li > < a href = "pyerrors/dirac.html" > pyerrors.dirac< / a > < / li >
< li > < a href = "pyerrors/fits.html" > pyerrors.fits< / a > < / li >
< li > < a href = "pyerrors/input.html" > pyerrors.input< / a > < / li >
< li > < a href = "pyerrors/linalg.html" > pyerrors.linalg< / a > < / li >
< li > < a href = "pyerrors/misc.html" > pyerrors.misc< / a > < / li >
< li > < a href = "pyerrors/mpm.html" > pyerrors.mpm< / a > < / li >
< li > < a href = "pyerrors/npr.html" > pyerrors.npr< / a > < / li >
< li > < a href = "pyerrors/obs.html" > pyerrors.obs< / a > < / li >
< li > < a href = "pyerrors/roots.html" > pyerrors.roots< / a > < / li >
< li > < a href = "pyerrors/version.html" > pyerrors.version< / a > < / li >
< / ul >
< a class = "attribution" title = "pdoc: Python API documentation generator" href = "https://pdoc.dev" >
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.2
< / a >
< / div >
< / nav >
< main class = "pdoc" >
< section >
< h1 class = "modulename" >
pyerrors < / h1 >
< div class = "docstring" > < h1 id = "what-is-pyerrors" > What is pyerrors?< / h1 >
2021-11-07 21:04:06 +00:00
< p > < code > < a href = "" > pyerrors< / a > < / code > is a python package for error computation and propagation of Markov chain Monte Carlo data.
It is based on the < strong > gamma method< / strong > < a href = "https://arxiv.org/abs/hep-lat/0306017" > arXiv:hep-lat/0306017< / a > . Some of its features are:< / p >
< ul >
< li > < strong > automatic differentiation< / strong > as suggested in < a href = "https://arxiv.org/abs/1809.01289" > arXiv:1809.01289< / a > (partly based on the < a href = "https://github.com/HIPS/autograd" > autograd< / a > package)< / li >
< li > < strong > treatment of slow modes< / strong > in the simulation as suggested in < a href = "https://arxiv.org/abs/1009.5228" > arXiv:1009.5228< / a > < / li >
< li > coherent < strong > error propagation< / strong > for data from < strong > different Markov chains< / strong > < / li >
2021-11-15 10:57:31 +00:00
< li > < strong > non-linear fits with x- and y-errors< / strong > and exact linear error propagation based on automatic differentiation as introduced in < a href = "https://arxiv.org/abs/1809.01289" > arXiv:1809.01289< / a > < / li >
2021-11-07 21:04:06 +00:00
< li > < strong > real and complex matrix operations< / strong > and their error propagation based on automatic differentiation (cholesky decomposition, calculation of eigenvalues and eigenvectors, singular value decomposition...)< / li >
< / ul >
2021-11-07 20:53:18 +00:00
< h2 id = "getting-started" > Getting started< / h2 >
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "kn" > import< / span > < span class = "nn" > numpy< / span > < span class = "k" > as< / span > < span class = "nn" > np< / span >
< span class = "kn" > import< / span > < span class = "nn" > pyerrors< / span > < span class = "k" > as< / span > < span class = "nn" > pe< / span >
< span class = "n" > my_obs< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble_name' < / span > < span class = "p" > ])< / span >
2021-11-15 13:13:15 +00:00
< span class = "n" > my_new_obs< / span > < span class = "o" > =< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "n" > np< / span > < span class = "o" > .< / span > < span class = "n" > log< / span > < span class = "p" > (< / span > < span class = "n" > my_obs< / span > < span class = "p" > )< / span > < span class = "o" > /< / span > < span class = "n" > my_obs< / span > < span class = "o" > **< / span > < span class = "mi" > 2< / span >
2021-11-07 20:53:18 +00:00
< span class = "n" > my_new_obs< / span > < span class = "o" > .< / span > < span class = "n" > gamma_method< / span > < span class = "p" > ()< / span >
< span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > my_new_obs< / span > < span class = "p" > )< / span >
2021-11-15 13:13:15 +00:00
< span class = "o" > > < / span > < span class = "mf" > 0.31498< / span > < span class = "p" > (< / span > < span class = "mi" > 72< / span > < span class = "p" > )< / span >
< span class = "n" > iamzero< / span > < span class = "o" > =< / span > < span class = "n" > my_new_obs< / span > < span class = "o" > -< / span > < span class = "n" > my_new_obs< / span >
< span class = "n" > iamzero< / span > < span class = "o" > .< / span > < span class = "n" > gamma_method< / span > < span class = "p" > ()< / span >
< span class = "nb" > print< / span > < span class = "p" > (< / span > < span class = "n" > iamzero< / span > < span class = "p" > )< / span >
< span class = "o" > > < / span > < span class = "mf" > 0.0< / span >
2021-11-07 20:53:18 +00:00
< / code > < / pre > < / div >
< h1 id = "the-obs-class" > The < code > Obs< / code > class< / h1 >
2021-11-09 11:51:27 +00:00
< p > < code > < a href = "" > pyerrors< / a > < / code > introduces a new datatype, < code > Obs< / code > , which simplifies error propagation and estimation for auto- and cross-correlated data.
2021-11-15 10:57:31 +00:00
An < code > Obs< / code > object can be initialized with two arguments, the first is a list containing the samples for an Observable from a Monte Carlo chain.
2021-11-09 11:51:27 +00:00
The samples can either be provided as python list or as numpy array.
The second argument is a list containing the names of the respective Monte Carlo chains as strings. These strings uniquely identify a Monte Carlo chain/ensemble.< / p >
< p > Example:< / p >
2021-11-07 20:53:18 +00:00
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "kn" > import< / span > < span class = "nn" > pyerrors< / span > < span class = "k" > as< / span > < span class = "nn" > pe< / span >
< span class = "n" > my_obs< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble_name' < / span > < span class = "p" > ])< / span >
< / code > < / pre > < / div >
2021-11-09 11:51:27 +00:00
< h2 id = "error-propagation" > Error propagation< / h2 >
< p > When performing mathematical operations on < code > Obs< / code > objects the correct error propagation is intrinsically taken care using a first order Taylor expansion
$$\delta_f^i=\sum_\alpha \bar{f}_\alpha \delta_\alpha^i\,,\quad \delta_\alpha^i=a_\alpha^i-\bar{a}_\alpha$$
as introduced in < a href = "https://arxiv.org/abs/hep-lat/0306017" > arXiv:hep-lat/0306017< / a > .< / p >
< p > The required derivatives $\bar{f}_\alpha$ are evaluated up to machine precision via automatic differentiation as suggested in < a href = "https://arxiv.org/abs/1809.01289" > arXiv:1809.01289< / a > .< / p >
< p > The < code > Obs< / code > class is designed such that mathematical numpy functions can be used on < code > Obs< / code > just as for regular floats.< / p >
< p > Example:< / p >
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "kn" > import< / span > < span class = "nn" > numpy< / span > < span class = "k" > as< / span > < span class = "nn" > np< / span >
< span class = "kn" > import< / span > < span class = "nn" > pyerrors< / span > < span class = "k" > as< / span > < span class = "nn" > pe< / span >
< span class = "n" > my_obs1< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples1< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble_name' < / span > < span class = "p" > ])< / span >
< span class = "n" > my_obs2< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples2< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble_name' < / span > < span class = "p" > ])< / span >
< span class = "n" > my_sum< / span > < span class = "o" > =< / span > < span class = "n" > my_obs1< / span > < span class = "o" > +< / span > < span class = "n" > my_obs2< / span >
< span class = "n" > my_m_eff< / span > < span class = "o" > =< / span > < span class = "n" > np< / span > < span class = "o" > .< / span > < span class = "n" > log< / span > < span class = "p" > (< / span > < span class = "n" > my_obs1< / span > < span class = "o" > /< / span > < span class = "n" > my_obs2< / span > < span class = "p" > )< / span >
< / code > < / pre > < / div >
< h2 id = "error-estimation" > Error estimation< / h2 >
2021-11-15 10:57:31 +00:00
< p > The error estimation within < code > < a href = "" > pyerrors< / a > < / code > is based on the gamma method introduced in < a href = "https://arxiv.org/abs/hep-lat/0306017" > arXiv:hep-lat/0306017< / a > .< / p >
2021-11-09 11:51:27 +00:00
2021-11-15 10:57:31 +00:00
< p > After having arrived at the derived quantity of interest the < code > gamma_method< / code > can be called as detailed in the following example.< / p >
2021-11-15 10:12:16 +00:00
< p > Example:< / p >
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > gamma_method< / span > < span class = "p" > ()< / span >
< span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > details< / span > < span class = "p" > ()< / span >
2021-11-15 10:43:47 +00:00
< span class = "o" > > < / span > < span class = "n" > Result< / span > < span class = "mf" > 1.70000000e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 3.89934513e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 5.84901770e-01< / span > < span class = "p" > (< / span > < span class = "mf" > 229.373< / span > < span class = "o" > %< / span > < span class = "p" > )< / span >
< span class = "o" > > < / span > < span class = "n" > t_int< / span > < span class = "mf" > 3.72133617e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 9.81032454e-01< / span > < span class = "n" > S< / span > < span class = "o" > =< / span > < span class = "mf" > 2.00< / span >
< span class = "o" > > < / span > < span class = "mi" > 1000< / span > < span class = "n" > samples< / span > < span class = "ow" > in< / span > < span class = "mi" > 1< / span > < span class = "n" > ensemble< / span > < span class = "p" > :< / span >
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Ensemble< / span > < span class = "s1" > ' ensemble_name' < / span > < span class = "p" > :< / span > < span class = "mi" > 1000< / span > < span class = "n" > configurations< / span > < span class = "p" > (< / span > < span class = "kn" > from< / span > < span class = "mi" > 1< / span > < span class = "n" > to< / span > < span class = "mi" > 1000< / span > < span class = "p" > )< / span >
2021-11-15 10:12:16 +00:00
< / code > < / pre > < / div >
< p > The standard value for the automatic windowing procedure is $S=2$. Other values for $S$ can be passed to the < code > gamma_method< / code > as parameter.< / p >
< p > Example:< / p >
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > gamma_method< / span > < span class = "p" > (< / span > < span class = "n" > S< / span > < span class = "o" > =< / span > < span class = "mf" > 3.0< / span > < span class = "p" > )< / span >
< span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > details< / span > < span class = "p" > ()< / span >
2021-11-15 10:43:47 +00:00
< span class = "o" > > < / span > < span class = "n" > Result< / span > < span class = "mf" > 1.70000000e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 3.77151850e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 6.47779576e-01< / span > < span class = "p" > (< / span > < span class = "mf" > 221.854< / span > < span class = "o" > %< / span > < span class = "p" > )< / span >
< span class = "o" > > < / span > < span class = "n" > t_int< / span > < span class = "mf" > 3.48135280e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 1.06547679e+00< / span > < span class = "n" > S< / span > < span class = "o" > =< / span > < span class = "mf" > 3.00< / span >
< span class = "o" > > < / span > < span class = "mi" > 1000< / span > < span class = "n" > samples< / span > < span class = "ow" > in< / span > < span class = "mi" > 1< / span > < span class = "n" > ensemble< / span > < span class = "p" > :< / span >
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Ensemble< / span > < span class = "s1" > ' ensemble_name' < / span > < span class = "p" > :< / span > < span class = "mi" > 1000< / span > < span class = "n" > configurations< / span > < span class = "p" > (< / span > < span class = "kn" > from< / span > < span class = "mi" > 1< / span > < span class = "n" > to< / span > < span class = "mi" > 1000< / span > < span class = "p" > )< / span >
2021-11-15 10:12:16 +00:00
< / code > < / pre > < / div >
< p > The integrated autocorrelation time $\tau_\mathrm{int}$ and the autocorrelation function $\rho(W)$ can be monitored via the methods ´ < a href = "pyerrors/obs.html#Obs.plot_tauint" > pyerrors.obs.Obs.plot_tauint< / a > < code > and ´ < a href = "pyerrors/obs.html#Obs.plot_tauint" > pyerrors.obs.Obs.plot_tauint< / a > < / code > .< / p >
< p > Example:< / p >
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > plot_tauint< / span > < span class = "p" > ()< / span >
< span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > plot_rho< / span > < span class = "p" > ()< / span >
< / code > < / pre > < / div >
2021-11-09 11:51:27 +00:00
< h3 id = "exponential-tails" > Exponential tails< / h3 >
2021-11-15 10:57:31 +00:00
< p > Slow modes in the Monte Carlo history can be accounted for by attaching an exponential tail to the autocorrelation function $\rho$ as suggested in < a href = "https://arxiv.org/abs/1009.5228" > arXiv:1009.5228< / a > . The longest autocorrelation time in the history, $\tau_\mathrm{exp}$, can be passed to the < code > gamma_method< / code > as parameter. In this case the automatic windowing procedure is vacated and the parameter $S$ does not affect the error estimate.< / p >
2021-11-15 10:12:16 +00:00
< p > Example:< / p >
2021-11-15 10:43:47 +00:00
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > gamma_method< / span > < span class = "p" > (< / span > < span class = "n" > tau_exp< / span > < span class = "o" > =< / span > < span class = "mf" > 7.2< / span > < span class = "p" > )< / span >
2021-11-15 10:12:16 +00:00
< span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > details< / span > < span class = "p" > ()< / span >
2021-11-15 10:43:47 +00:00
< span class = "o" > > < / span > < span class = "n" > Result< / span > < span class = "mf" > 1.70000000e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 3.77806247e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 3.48320149e-01< / span > < span class = "p" > (< / span > < span class = "mf" > 222.239< / span > < span class = "o" > %< / span > < span class = "p" > )< / span >
< span class = "o" > > < / span > < span class = "n" > t_int< / span > < span class = "mf" > 3.49344429e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 7.62747210e-01< / span > < span class = "n" > tau_exp< / span > < span class = "o" > =< / span > < span class = "mf" > 7.20< / span > < span class = "p" > ,< / span > < span class = "n" > N_sigma< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span >
< span class = "o" > > < / span > < span class = "mi" > 1000< / span > < span class = "n" > samples< / span > < span class = "ow" > in< / span > < span class = "mi" > 1< / span > < span class = "n" > ensemble< / span > < span class = "p" > :< / span >
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Ensemble< / span > < span class = "s1" > ' ensemble_name' < / span > < span class = "p" > :< / span > < span class = "mi" > 1000< / span > < span class = "n" > configurations< / span > < span class = "p" > (< / span > < span class = "kn" > from< / span > < span class = "mi" > 1< / span > < span class = "n" > to< / span > < span class = "mi" > 1000< / span > < span class = "p" > )< / span >
2021-11-15 10:12:16 +00:00
< / code > < / pre > < / div >
< p > For the full API see < code > < a href = "pyerrors/obs.html#Obs.gamma_method" > pyerrors.obs.Obs.gamma_method< / a > < / code > < / p >
2021-11-07 20:53:18 +00:00
< h2 id = "multiple-ensemblesreplica" > Multiple ensembles/replica< / h2 >
2021-11-15 10:57:31 +00:00
< p > Error propagation for multiple ensembles (Markov chains with different simulation parameters) is handled automatically. Ensembles are uniquely identified by their < code > name< / code > .< / p >
2021-11-08 14:53:27 +00:00
2021-11-08 15:04:55 +00:00
< p > Example:< / p >
2021-11-08 14:53:27 +00:00
2021-11-08 15:04:55 +00:00
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "n" > obs1< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples1< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble1' < / span > < span class = "p" > ])< / span >
2021-11-09 12:09:45 +00:00
< span class = "n" > obs2< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples2< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble2' < / span > < span class = "p" > ])< / span >
2021-11-08 14:53:27 +00:00
< span class = "n" > my_sum< / span > < span class = "o" > =< / span > < span class = "n" > obs1< / span > < span class = "o" > +< / span > < span class = "n" > obs2< / span >
< span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > details< / span > < span class = "p" > ()< / span >
2021-11-15 09:55:51 +00:00
< span class = "o" > > < / span > < span class = "n" > Result< / span > < span class = "mf" > 2.00697958e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 0.00000000e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 0.00000000e+00< / span > < span class = "p" > (< / span > < span class = "mf" > 0.000< / span > < span class = "o" > %< / span > < span class = "p" > )< / span >
2021-11-08 14:53:27 +00:00
< span class = "o" > > < / span > < span class = "mi" > 1500< / span > < span class = "n" > samples< / span > < span class = "ow" > in< / span > < span class = "mi" > 2< / span > < span class = "n" > ensembles< / span > < span class = "p" > :< / span >
2021-11-15 09:55:51 +00:00
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Ensemble< / span > < span class = "s1" > ' ensemble1' < / span > < span class = "p" > :< / span > < span class = "mi" > 1000< / span > < span class = "n" > configurations< / span > < span class = "p" > (< / span > < span class = "kn" > from< / span > < span class = "mi" > 1< / span > < span class = "n" > to< / span > < span class = "mi" > 1000< / span > < span class = "p" > )< / span >
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Ensemble< / span > < span class = "s1" > ' ensemble2' < / span > < span class = "p" > :< / span > < span class = "mi" > 500< / span > < span class = "n" > configurations< / span > < span class = "p" > (< / span > < span class = "kn" > from< / span > < span class = "mi" > 1< / span > < span class = "n" > to< / span > < span class = "mi" > 500< / span > < span class = "p" > )< / span >
2021-11-08 14:53:27 +00:00
< / code > < / pre > < / div >
< p > < code > < a href = "" > pyerrors< / a > < / code > identifies multiple replica (independent Markov chains with identical simulation parameters) by the vertical bar < code > |< / code > in the name of the dataset.< / p >
2021-11-08 15:04:55 +00:00
< p > Example:< / p >
2021-11-08 14:53:27 +00:00
2021-11-08 15:04:55 +00:00
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "n" > obs1< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples1< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble1|r01' < / span > < span class = "p" > ])< / span >
2021-11-09 12:09:45 +00:00
< span class = "n" > obs2< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples2< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble1|r02' < / span > < span class = "p" > ])< / span >
2021-11-08 14:53:27 +00:00
2021-11-15 09:55:51 +00:00
< span class = "o" > > < / span > < span class = "n" > my_sum< / span > < span class = "o" > =< / span > < span class = "n" > obs1< / span > < span class = "o" > +< / span > < span class = "n" > obs2< / span >
< span class = "o" > > < / span > < span class = "n" > my_sum< / span > < span class = "o" > .< / span > < span class = "n" > details< / span > < span class = "p" > ()< / span >
< span class = "o" > > < / span > < span class = "n" > Result< / span > < span class = "mf" > 2.00697958e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 0.00000000e+00< / span > < span class = "o" > +/-< / span > < span class = "mf" > 0.00000000e+00< / span > < span class = "p" > (< / span > < span class = "mf" > 0.000< / span > < span class = "o" > %< / span > < span class = "p" > )< / span >
2021-11-08 14:53:27 +00:00
< span class = "o" > > < / span > < span class = "mi" > 1500< / span > < span class = "n" > samples< / span > < span class = "ow" > in< / span > < span class = "mi" > 1< / span > < span class = "n" > ensemble< / span > < span class = "p" > :< / span >
2021-11-15 09:55:51 +00:00
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Ensemble< / span > < span class = "s1" > ' ensemble1' < / span >
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Replicum< / span > < span class = "s1" > ' r01' < / span > < span class = "p" > :< / span > < span class = "mi" > 1000< / span > < span class = "n" > configurations< / span > < span class = "p" > (< / span > < span class = "kn" > from< / span > < span class = "mi" > 1< / span > < span class = "n" > to< / span > < span class = "mi" > 1000< / span > < span class = "p" > )< / span >
< span class = "o" > > < / span > < span class = "err" > ·< / span > < span class = "n" > Replicum< / span > < span class = "s1" > ' r02' < / span > < span class = "p" > :< / span > < span class = "mi" > 500< / span > < span class = "n" > configurations< / span > < span class = "p" > (< / span > < span class = "kn" > from< / span > < span class = "mi" > 1< / span > < span class = "n" > to< / span > < span class = "mi" > 500< / span > < span class = "p" > )< / span >
2021-11-08 14:53:27 +00:00
< / code > < / pre > < / div >
2021-11-15 10:12:16 +00:00
< h3 id = "error-estimation-for-multiple-ensembles" > Error estimation for multiple ensembles< / h3 >
2021-11-15 10:57:31 +00:00
< p > In order to keep track of different error analysis parameters for different ensembles one can make use of global dictionaries as detailed in the following example.< / p >
2021-11-15 10:12:16 +00:00
< p > Example:< / p >
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "o" > .< / span > < span class = "n" > S_dict< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble1' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "mf" > 2.5< / span >
< span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "o" > .< / span > < span class = "n" > tau_exp_dict< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble2' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "mf" > 8.0< / span >
< span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "o" > .< / span > < span class = "n" > tau_exp_dict< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble3' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "mf" > 2.0< / span >
< / code > < / pre > < / div >
2021-11-15 10:43:47 +00:00
< p > In case the < code > gamma_method< / code > is called without any parameters it will use the values specified in the dictionaries for the respective ensembles.
Passing arguments to the < code > gamma_method< / code > still dominates over the dictionaries.< / p >
2021-11-07 20:53:18 +00:00
< h2 id = "irregular-monte-carlo-chains" > Irregular Monte Carlo chains< / h2 >
2021-11-15 10:57:31 +00:00
< p > Irregular Monte Carlo chains can be initialized with the parameter < code > idl< / code > .< / p >
2021-11-08 14:53:27 +00:00
2021-11-08 15:04:55 +00:00
< p > Example:< / p >
2021-11-08 14:53:27 +00:00
2021-11-08 15:04:55 +00:00
< div class = "codehilite" > < pre > < span > < / span > < code > < span class = "c1" > # Observable defined on configurations 20 to 519< / span >
< span class = "n" > obs1< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples1< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble1' < / span > < span class = "p" > ],< / span > < span class = "n" > idl< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "mi" > 20< / span > < span class = "p" > ,< / span > < span class = "mi" > 520< / span > < span class = "p" > )])< / span >
2021-11-08 15:10:26 +00:00
2021-11-08 15:04:55 +00:00
< span class = "c1" > # Observable defined on every second configuration between 5 and 1003< / span >
< span class = "n" > obs2< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples2< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble1' < / span > < span class = "p" > ],< / span > < span class = "n" > idl< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "mi" > 5< / span > < span class = "p" > ,< / span > < span class = "mi" > 1005< / span > < span class = "p" > ,< / span > < span class = "mi" > 2< / span > < span class = "p" > )])< / span >
2021-11-08 15:10:26 +00:00
2021-11-08 15:04:55 +00:00
< span class = "c1" > # Observable defined on configurations 2, 9, 28, 29 and 501< / span >
< span class = "n" > obs3< / span > < span class = "o" > =< / span > < span class = "n" > pe< / span > < span class = "o" > .< / span > < span class = "n" > Obs< / span > < span class = "p" > ([< / span > < span class = "n" > samples3< / span > < span class = "p" > ],< / span > < span class = "p" > [< / span > < span class = "s1" > ' ensemble1' < / span > < span class = "p" > ],< / span > < span class = "n" > idl< / span > < span class = "o" > =< / span > < span class = "p" > [[< / span > < span class = "mi" > 2< / span > < span class = "p" > ,< / span > < span class = "mi" > 9< / span > < span class = "p" > ,< / span > < span class = "mi" > 28< / span > < span class = "p" > ,< / span > < span class = "mi" > 29< / span > < span class = "p" > ,< / span > < span class = "mi" > 501< / span > < span class = "p" > ]])< / span >
2021-11-08 14:53:27 +00:00
< / code > < / pre > < / div >
2021-11-08 15:04:55 +00:00
< p > < strong > Warning:< / strong > Irregular Monte Carlo chains can result in odd patterns in the autocorrelation functions.
2021-11-15 10:57:31 +00:00
Make sure to check the autocorrelation time with e.g. < code > < a href = "pyerrors/obs.html#Obs.plot_rho" > pyerrors.obs.Obs.plot_rho< / a > < / code > or < code > < a href = "pyerrors/obs.html#Obs.plot_tauint" > pyerrors.obs.Obs.plot_tauint< / a > < / code > .< / p >
2021-11-08 15:04:55 +00:00
2021-11-09 11:51:27 +00:00
< p > For the full API see < code > < a href = "pyerrors/obs.html#Obs" > pyerrors.obs.Obs< / a > < / code > < / p >
2021-11-07 20:53:18 +00:00
2021-11-09 11:51:27 +00:00
< h1 id = "correlators" > Correlators< / h1 >
2021-11-07 20:53:18 +00:00
2021-11-09 11:51:27 +00:00
< p > For the full API see < code > < a href = "pyerrors/correlators.html#Corr" > pyerrors.correlators.Corr< / a > < / code > < / p >
2021-11-07 20:53:18 +00:00
2021-11-09 11:51:27 +00:00
< h1 id = "complex-observables" > Complex observables< / h1 >
2021-11-07 21:09:48 +00:00
2021-11-09 11:51:27 +00:00
< p > < code > < a href = "pyerrors/obs.html#CObs" > pyerrors.obs.CObs< / a > < / code > < / p >
2021-11-07 21:09:48 +00:00
2021-11-07 20:53:18 +00:00
< h1 id = "optimization-fits-roots" > Optimization / fits / roots< / h1 >
2021-11-07 21:09:48 +00:00
< p > < code > < a href = "pyerrors/fits.html" > pyerrors.fits< / a > < / code >
< code > < a href = "pyerrors/roots.html" > pyerrors.roots< / a > < / code > < / p >
2021-11-07 20:53:18 +00:00
< h1 id = "matrix-operations" > Matrix operations< / h1 >
2021-11-07 21:09:48 +00:00
< p > < code > < a href = "pyerrors/linalg.html" > pyerrors.linalg< / a > < / code > < / p >
2021-11-07 20:53:18 +00:00
< h1 id = "input" > Input< / h1 >
2021-11-07 21:09:48 +00:00
< p > < code > < a href = "pyerrors/input.html" > pyerrors.input< / a > < / code > < / p >
2021-11-07 20:53:18 +00:00
< / div >
< details >
< summary > View Source< / summary >
< div class = "codehilite" > < pre > < span > < / span > < span class = "sa" > r< / span > < span class = "sd" > ' ' ' < / span >
< span class = "sd" > # What is pyerrors?< / span >
< span class = "sd" > `pyerrors` is a python package for error computation and propagation of Markov chain Monte Carlo data.< / span >
2021-11-07 21:04:06 +00:00
< span class = "sd" > It is based on the **gamma method** [arXiv:hep-lat/0306017](https://arxiv.org/abs/hep-lat/0306017). Some of its features are:< / span >
< span class = "sd" > - **automatic differentiation** as suggested in [arXiv:1809.01289](https://arxiv.org/abs/1809.01289) (partly based on the [autograd](https://github.com/HIPS/autograd) package)< / span >
< span class = "sd" > - **treatment of slow modes** in the simulation as suggested in [arXiv:1009.5228](https://arxiv.org/abs/1009.5228)< / span >
< span class = "sd" > - coherent **error propagation** for data from **different Markov chains**< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > - **non-linear fits with x- and y-errors** and exact linear error propagation based on automatic differentiation as introduced in [arXiv:1809.01289](https://arxiv.org/abs/1809.01289)< / span >
2021-11-07 21:04:06 +00:00
< span class = "sd" > - **real and complex matrix operations** and their error propagation based on automatic differentiation (cholesky decomposition, calculation of eigenvalues and eigenvectors, singular value decomposition...)< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > ## Getting started< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > import numpy as np< / span >
< span class = "sd" > import pyerrors as pe< / span >
< span class = "sd" > my_obs = pe.Obs([samples], [' ensemble_name' ])< / span >
2021-11-15 13:13:15 +00:00
< span class = "sd" > my_new_obs = 2 * np.log(my_obs) / my_obs ** 2< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > my_new_obs.gamma_method()< / span >
< span class = "sd" > print(my_new_obs)< / span >
2021-11-15 13:13:15 +00:00
< span class = "sd" > > 0.31498(72)< / span >
< span class = "sd" > iamzero = my_new_obs - my_new_obs< / span >
< span class = "sd" > iamzero.gamma_method()< / span >
< span class = "sd" > print(iamzero)< / span >
< span class = "sd" > > 0.0< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > ```< / span >
2021-11-15 13:13:15 +00:00
2021-11-07 20:53:18 +00:00
< span class = "sd" > # The `Obs` class< / span >
2021-11-09 11:51:27 +00:00
< span class = "sd" > `pyerrors` introduces a new datatype, `Obs`, which simplifies error propagation and estimation for auto- and cross-correlated data.< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > An `Obs` object can be initialized with two arguments, the first is a list containing the samples for an Observable from a Monte Carlo chain.< / span >
2021-11-09 11:51:27 +00:00
< span class = "sd" > The samples can either be provided as python list or as numpy array.< / span >
< span class = "sd" > The second argument is a list containing the names of the respective Monte Carlo chains as strings. These strings uniquely identify a Monte Carlo chain/ensemble.< / span >
< span class = "sd" > Example:< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > ```python< / span >
< span class = "sd" > import pyerrors as pe< / span >
< span class = "sd" > my_obs = pe.Obs([samples], [' ensemble_name' ])< / span >
< span class = "sd" > ```< / span >
2021-11-09 11:51:27 +00:00
< span class = "sd" > ## Error propagation< / span >
< span class = "sd" > When performing mathematical operations on `Obs` objects the correct error propagation is intrinsically taken care using a first order Taylor expansion< / span >
< span class = "sd" > $$\delta_f^i=\sum_\alpha \bar{f}_\alpha \delta_\alpha^i\,,\quad \delta_\alpha^i=a_\alpha^i-\bar{a}_\alpha$$< / span >
< span class = "sd" > as introduced in [arXiv:hep-lat/0306017](https://arxiv.org/abs/hep-lat/0306017).< / span >
< span class = "sd" > The required derivatives $\bar{f}_\alpha$ are evaluated up to machine precision via automatic differentiation as suggested in [arXiv:1809.01289](https://arxiv.org/abs/1809.01289).< / span >
< span class = "sd" > The `Obs` class is designed such that mathematical numpy functions can be used on `Obs` just as for regular floats.< / span >
< span class = "sd" > Example:< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > import numpy as np< / span >
< span class = "sd" > import pyerrors as pe< / span >
< span class = "sd" > my_obs1 = pe.Obs([samples1], [' ensemble_name' ])< / span >
< span class = "sd" > my_obs2 = pe.Obs([samples2], [' ensemble_name' ])< / span >
< span class = "sd" > my_sum = my_obs1 + my_obs2< / span >
< span class = "sd" > my_m_eff = np.log(my_obs1 / my_obs2)< / span >
< span class = "sd" > ```< / span >
< span class = "sd" > ## Error estimation< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > The error estimation within `pyerrors` is based on the gamma method introduced in [arXiv:hep-lat/0306017](https://arxiv.org/abs/hep-lat/0306017).< / span >
2021-11-09 11:51:27 +00:00
2021-11-15 10:57:31 +00:00
< span class = "sd" > After having arrived at the derived quantity of interest the `gamma_method` can be called as detailed in the following example.< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > Example:< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > my_sum.gamma_method()< / span >
< span class = "sd" > my_sum.details()< / span >
2021-11-15 10:43:47 +00:00
< span class = "sd" > > Result 1.70000000e+00 +/- 3.89934513e+00 +/- 5.84901770e-01 (229.373%)< / span >
< span class = "sd" > > t_int 3.72133617e+00 +/- 9.81032454e-01 S = 2.00< / span >
< span class = "sd" > > 1000 samples in 1 ensemble:< / span >
< span class = "sd" > > · Ensemble ' ensemble_name' : 1000 configurations (from 1 to 1000)< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > ```< / span >
< span class = "sd" > The standard value for the automatic windowing procedure is $S=2$. Other values for $S$ can be passed to the `gamma_method` as parameter.< / span >
< span class = "sd" > Example:< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > my_sum.gamma_method(S=3.0)< / span >
< span class = "sd" > my_sum.details()< / span >
2021-11-15 10:43:47 +00:00
< span class = "sd" > > Result 1.70000000e+00 +/- 3.77151850e+00 +/- 6.47779576e-01 (221.854%)< / span >
< span class = "sd" > > t_int 3.48135280e+00 +/- 1.06547679e+00 S = 3.00< / span >
< span class = "sd" > > 1000 samples in 1 ensemble:< / span >
< span class = "sd" > > · Ensemble ' ensemble_name' : 1000 configurations (from 1 to 1000)< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > ```< / span >
< span class = "sd" > The integrated autocorrelation time $\tau_\mathrm{int}$ and the autocorrelation function $\rho(W)$ can be monitored via the methods ´ pyerrors.obs.Obs.plot_tauint` and ´ pyerrors.obs.Obs.plot_tauint`.< / span >
< span class = "sd" > Example:< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > my_sum.plot_tauint()< / span >
< span class = "sd" > my_sum.plot_rho()< / span >
< span class = "sd" > ```< / span >
2021-11-09 11:51:27 +00:00
< span class = "sd" > ### Exponential tails< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > Slow modes in the Monte Carlo history can be accounted for by attaching an exponential tail to the autocorrelation function $\rho$ as suggested in [arXiv:1009.5228](https://arxiv.org/abs/1009.5228). The longest autocorrelation time in the history, $\tau_\mathrm{exp}$, can be passed to the `gamma_method` as parameter. In this case the automatic windowing procedure is vacated and the parameter $S$ does not affect the error estimate.< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > Example:< / span >
< span class = "sd" > ```python< / span >
2021-11-15 10:43:47 +00:00
< span class = "sd" > my_sum.gamma_method(tau_exp=7.2)< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > my_sum.details()< / span >
2021-11-15 10:43:47 +00:00
< span class = "sd" > > Result 1.70000000e+00 +/- 3.77806247e+00 +/- 3.48320149e-01 (222.239%)< / span >
< span class = "sd" > > t_int 3.49344429e+00 +/- 7.62747210e-01 tau_exp = 7.20, N_sigma = 1< / span >
< span class = "sd" > > 1000 samples in 1 ensemble:< / span >
< span class = "sd" > > · Ensemble ' ensemble_name' : 1000 configurations (from 1 to 1000)< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > ```< / span >
< span class = "sd" > For the full API see `pyerrors.obs.Obs.gamma_method`< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > ## Multiple ensembles/replica< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > Error propagation for multiple ensembles (Markov chains with different simulation parameters) is handled automatically. Ensembles are uniquely identified by their `name`.< / span >
2021-11-08 14:53:27 +00:00
2021-11-08 15:04:55 +00:00
< span class = "sd" > Example:< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > ```python< / span >
< span class = "sd" > obs1 = pe.Obs([samples1], [' ensemble1' ])< / span >
2021-11-09 12:09:45 +00:00
< span class = "sd" > obs2 = pe.Obs([samples2], [' ensemble2' ])< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > my_sum = obs1 + obs2< / span >
< span class = "sd" > my_sum.details()< / span >
2021-11-15 09:55:51 +00:00
< span class = "sd" > > Result 2.00697958e+00 +/- 0.00000000e+00 +/- 0.00000000e+00 (0.000%)< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > > 1500 samples in 2 ensembles:< / span >
2021-11-15 09:55:51 +00:00
< span class = "sd" > > · Ensemble ' ensemble1' : 1000 configurations (from 1 to 1000)< / span >
< span class = "sd" > > · Ensemble ' ensemble2' : 500 configurations (from 1 to 500)< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > ```< / span >
< span class = "sd" > `pyerrors` identifies multiple replica (independent Markov chains with identical simulation parameters) by the vertical bar `|` in the name of the dataset.< / span >
2021-11-08 15:04:55 +00:00
< span class = "sd" > Example:< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > ```python< / span >
< span class = "sd" > obs1 = pe.Obs([samples1], [' ensemble1|r01' ])< / span >
2021-11-09 12:09:45 +00:00
< span class = "sd" > obs2 = pe.Obs([samples2], [' ensemble1|r02' ])< / span >
2021-11-08 14:53:27 +00:00
2021-11-15 09:55:51 +00:00
< span class = "sd" > > my_sum = obs1 + obs2< / span >
< span class = "sd" > > my_sum.details()< / span >
< span class = "sd" > > Result 2.00697958e+00 +/- 0.00000000e+00 +/- 0.00000000e+00 (0.000%)< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > > 1500 samples in 1 ensemble:< / span >
2021-11-15 09:55:51 +00:00
< span class = "sd" > > · Ensemble ' ensemble1' < / span >
< span class = "sd" > > · Replicum ' r01' : 1000 configurations (from 1 to 1000)< / span >
< span class = "sd" > > · Replicum ' r02' : 500 configurations (from 1 to 500)< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > ```< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > ### Error estimation for multiple ensembles< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > In order to keep track of different error analysis parameters for different ensembles one can make use of global dictionaries as detailed in the following example.< / span >
2021-11-15 10:12:16 +00:00
< span class = "sd" > Example:< / span >
< span class = "sd" > ```python< / span >
< span class = "sd" > pe.Obs.S_dict[' ensemble1' ] = 2.5< / span >
< span class = "sd" > pe.Obs.tau_exp_dict[' ensemble2' ] = 8.0< / span >
< span class = "sd" > pe.Obs.tau_exp_dict[' ensemble3' ] = 2.0< / span >
< span class = "sd" > ```< / span >
2021-11-15 10:43:47 +00:00
< span class = "sd" > In case the `gamma_method` is called without any parameters it will use the values specified in the dictionaries for the respective ensembles.< / span >
< span class = "sd" > Passing arguments to the `gamma_method` still dominates over the dictionaries.< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > ## Irregular Monte Carlo chains< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > Irregular Monte Carlo chains can be initialized with the parameter `idl`.< / span >
2021-11-08 15:04:55 +00:00
< span class = "sd" > Example:< / span >
2021-11-08 14:53:27 +00:00
< span class = "sd" > ```python< / span >
2021-11-08 15:04:55 +00:00
< span class = "sd" > # Observable defined on configurations 20 to 519< / span >
< span class = "sd" > obs1 = pe.Obs([samples1], [' ensemble1' ], idl=[range(20, 520)])< / span >
2021-11-08 15:10:26 +00:00
2021-11-08 15:04:55 +00:00
< span class = "sd" > # Observable defined on every second configuration between 5 and 1003< / span >
< span class = "sd" > obs2 = pe.Obs([samples2], [' ensemble1' ], idl=[range(5, 1005, 2)])< / span >
2021-11-08 15:10:26 +00:00
2021-11-08 15:04:55 +00:00
< span class = "sd" > # Observable defined on configurations 2, 9, 28, 29 and 501< / span >
< span class = "sd" > obs3 = pe.Obs([samples3], [' ensemble1' ], idl=[[2, 9, 28, 29, 501]])< / span >
< span class = "sd" > ```< / span >
2021-11-08 14:53:27 +00:00
2021-11-08 15:04:55 +00:00
< span class = "sd" > **Warning:** Irregular Monte Carlo chains can result in odd patterns in the autocorrelation functions.< / span >
2021-11-15 10:57:31 +00:00
< span class = "sd" > Make sure to check the autocorrelation time with e.g. `pyerrors.obs.Obs.plot_rho` or `pyerrors.obs.Obs.plot_tauint`.< / span >
2021-11-08 14:53:27 +00:00
2021-11-09 11:51:27 +00:00
< span class = "sd" > For the full API see `pyerrors.obs.Obs`< / span >
2021-11-07 20:53:18 +00:00
2021-11-07 21:09:48 +00:00
< span class = "sd" > # Correlators< / span >
2021-11-09 11:51:27 +00:00
< span class = "sd" > For the full API see `pyerrors.correlators.Corr`< / span >
< span class = "sd" > # Complex observables< / span >
< span class = "sd" > `pyerrors.obs.CObs`< / span >
2021-11-07 21:09:48 +00:00
2021-11-07 20:53:18 +00:00
< span class = "sd" > # Optimization / fits / roots< / span >
2021-11-07 21:09:48 +00:00
< span class = "sd" > `pyerrors.fits`< / span >
< span class = "sd" > `pyerrors.roots`< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > # Matrix operations< / span >
2021-11-07 21:09:48 +00:00
< span class = "sd" > `pyerrors.linalg`< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > # Input< / span >
2021-11-07 21:09:48 +00:00
< span class = "sd" > `pyerrors.input`< / span >
2021-11-07 20:53:18 +00:00
< span class = "sd" > ' ' ' < / span >
< span class = "kn" > from< / span > < span class = "nn" > .obs< / span > < span class = "kn" > import< / span > < span class = "o" > *< / span >
< span class = "kn" > from< / span > < span class = "nn" > .correlators< / span > < span class = "kn" > import< / span > < span class = "o" > *< / span >
< span class = "kn" > from< / span > < span class = "nn" > .fits< / span > < span class = "kn" > import< / span > < span class = "o" > *< / span >
< span class = "kn" > from< / span > < span class = "nn" > .< / span > < span class = "kn" > import< / span > < span class = "n" > dirac< / span >
2021-11-11 10:51:37 +00:00
< span class = "kn" > from< / span > < span class = "nn" > .< / span > < span class = "kn" > import< / span > < span class = "nb" > input< / span >
2021-11-07 20:53:18 +00:00
< span class = "kn" > from< / span > < span class = "nn" > .< / span > < span class = "kn" > import< / span > < span class = "n" > linalg< / span >
< span class = "kn" > from< / span > < span class = "nn" > .< / span > < span class = "kn" > import< / span > < span class = "n" > misc< / span >
< span class = "kn" > from< / span > < span class = "nn" > .< / span > < span class = "kn" > import< / span > < span class = "n" > mpm< / span >
< span class = "kn" > from< / span > < span class = "nn" > .< / span > < span class = "kn" > import< / span > < span class = "n" > npr< / span >
< span class = "kn" > from< / span > < span class = "nn" > .< / span > < span class = "kn" > import< / span > < span class = "n" > roots< / span >
< span class = "kn" > from< / span > < span class = "nn" > .version< / span > < span class = "kn" > import< / span > < span class = "n" > __version__< / span >
< / pre > < / div >
< / details >
< / 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":
heading = `< span class = "def" > ${doc.funcdef}< / span > < span class = "name" > ${doc.fullname}< / span > < span class = "signature" > (${doc.parameters.join(", ")})< / span > `;
break;
case "class":
heading = `< span class = "def" > class< / span > < span class = "name" > ${doc.fullname}< / 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 >