ó
élÔQc           @   s¨   d  d l  Z  d  d l m Z d  d l m Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 d „ Z e d „ Z e d „ Z d „  Z d „  Z e d „ Z d S(   iÿÿÿÿN(   t   optimize(   t   pearsonrc         C   sÒ   yG g  t  d t t |  ƒ t | ƒ ƒ ƒ D] } |  | | | ^ q( } Wn t k
 rb d GH‚  n Xt |  ƒ } g  } x0 t  d | ƒ D] } | j | | |  | ƒ q… Wt | ƒ | t |  ƒ t | ƒ | d S(   Ni    s   Dimension mismatchi   (   t   ranget   maxt   lent
   IndexErrort   appendt   sum(   t   xlistt   ylistt   it   sumlistt   nt   prodlist(    (    s	   linreg.pyt   covar   s    Gc         C   s   t  |  |  ƒ S(   N(   R   (   R   (    (    s	   linreg.pyt   var   s    c         C   s*   t  |  | ƒ t j t |  ƒ t | ƒ ƒ S(   N(   R   t   matht   sqrtR   (   R   R	   (    (    s	   linreg.pyt   correl   s    c         C   s   t  |  ƒ t |  ƒ S(   N(   R   R   (   t   list(    (    s	   linreg.pyt   mean   s    c         C   s?   t  |  | ƒ t |  ƒ } t | ƒ | t |  ƒ } | | | S(   N(   R   R   R   (   R   R	   t   xvart   bt   a(    (    s	   linreg.pyt   linregbx   s    c         C   s>   g  } x+ t  |  | | ƒ D] } | j | d ƒ q Wt | ƒ S(   Ni   (   t   residR   R   (   R   R	   t   ft   mt   item(    (    s	   linreg.pyt   residsq    s    g:Œ0âŽyE>c         C   sæ   y |  | ƒ } Wn1 t  k
 r+ d GH‚  n t k
 rC d GH‚  n Xg  } x• t d t | ƒ ƒ D]~ } | d | !} | j | | | ƒ x2 t | d t | ƒ ƒ D] } | j | | ƒ q¢ W| j |  | ƒ |  | ƒ | ƒ q` W| S(   Ns   Not enough argumentss   Argument must be a vectori    i   (   R   t	   TypeErrorR   R   R   (   R   t   xvectt   ht   blowt   diffR
   t   holdingt   k(    (    s	   linreg.pyt   partdiff&   s      %c            s¡  | r d GHn  xO t  d t ˆ ƒ ƒ D]8 } y ˆ d ˆ | } Wq$ t k
 r[ d GH‚  q$ Xq$ W| rn d GHn  ˆ  ‰ d d g ‰ xt  d t ˆ d ƒ ƒ D]ú } ‡  ‡ ‡ f d †  } t j | ˆ ƒ j j ƒ  } | ‰ | rê d ˆ f GHn  ‡ f d †  } g  t  d t ˆ  ƒ ƒ D] }	 | ˆ |	 ƒ ^ q}
 | r?d	 t f GHn  g  t  d t ˆ  ƒ ƒ D] } ˆ | |
 | ^ qU‰ | r‡d
 ˆ f GHn  ˆ j d ƒ qš Wd GHˆ S(   Ns   Testing dimensions...i   i    s   Not a valid matrixs   Dimension test okay!c      	      s‘   d } x{ t  d t |  ƒ ƒ D]d } | t g  t  d t ˆ  ƒ ƒ D]4 } |  | ˆ | | d |  d ˆ | d ^ q> ƒ d } q Wt j | ƒ S(   Ni    i   i   (   R   R   R   R   R   (   t   brackt   tempR
   R$   (   R	   t	   currylistt   xmat(    s	   linreg.pyt   lineG   s    bs   Current coefficient list is c            sH   ˆ  d } x7 t  d t ˆ  ƒ ƒ D]  } | ˆ  | |  | d } q  W| S(   Ni    i   (   R   R   (   t   xR'   R
   (   t   coeff(    s	   linreg.pyR   P   s    
s   Current x list is s   Current residuals list is s3   The furst entry in the output is the constant term.(	   R   R   R   R    t   linearmixingR+   t   tolistt	   currxlistR   (   R)   R	   t   verboseR
   R!   t   indexR*   t   leastR   R$   t   reglist(    (   R	   R,   R(   R)   s	   linreg.pyt   multireg8   s8     24c            s>  | r d GHn  xO t  d t |  ƒ ƒ D]8 } y |  d |  | } Wq$ t k
 r[ d GH‚  q$ Xq$ Wxb t  d t t |  ƒ t | ƒ ƒ ƒ D]< } y |  | d | | } Wq… t k
 rÀ d GH‚  q… Xq… W| rÓ d GHn  d „  } | |  | ƒ ‰  ‡  f d †  } | |  | ƒ } ‡  f d	 †  }	 |	 |  | ƒ }
 d
 „  } | | ƒ g ‰ x. t  d t |  d ƒ ƒ D] } ˆ j d ƒ qYW| r¬d ˆ  ˆ ƒ f GHd |
 ˆ ƒ f GHd | ˆ ƒ f GHn  t j |
 ˆ ƒ } | rÌ| GHn  | j j	 ƒ  ‰ | rd ˆ  ˆ ƒ f GHd |
 ˆ ƒ f GHd | ˆ ƒ f GHn  | r+d ˆ f GHn  ‡ f d †  } | S(   Ns   Testing dimensions...i   i    s   Not a valid matrixs   Dimension mismatchs   Dimension test okay!c            s   ‡ ‡  f d †  S(   Nc      	      sz   g  t  d t ˆ  ƒ ƒ D]` } t g  t  d t ˆ d ƒ d ƒ D]  } |  | ˆ | | d ^ q= ƒ |  d ˆ  | ^ q S(   Ni    i   (   R   R   R   (   t	   lincoeffsR$   R
   (   R	   R)   (    s	   linreg.pyt   <lambda>q   s    (    (   R)   R	   (    (   R)   R	   s	   linreg.pyR   p   s    c            s   ‡  f d †  S(   Nc            s   t  ˆ  |  ƒ ƒ S(   N(   R   (   R5   (   R   (    s	   linreg.pyR6   t   s    (    (   R)   R	   (   R   (    s	   linreg.pyt   sumresids   s    c            s   ‡  f d †  S(   Nc            s>   t  g  t d t |  ƒ d ƒ D] } ˆ  |  ƒ | d ^ q ƒ S(   Ni    i   i   (   R   R   R   (   R5   R
   (   R   (    s	   linreg.pyR6   w   s    (    (   R)   R	   (   R   (    s	   linreg.pyR   v   s    c         S   s   t  |  ƒ t |  ƒ S(   N(   R   R   (   R+   (    (    s	   linreg.pyR   y   s    s   Initial residuals: s   Initial residual square sum: s   Initial sum of residuals: s   Final residuals: s   Final residual square sum: s   Final sum of residuals: s   Coefficients: c            sH   ˆ  d t  g  t d t |  ƒ d ƒ D] } ˆ  | |  | d ^ q$ ƒ S(   Ni    i   (   R   R   R   (   R+   R
   (   R,   (    s	   linreg.pyt   out   s    (
   R   R   R   R   R   R   R    R-   R+   R.   (   R)   R	   R0   R
   R!   R$   R   R7   t   gR   R    R   R2   R8   (    (   R   R,   s	   linreg.pyt   multilinreg_   sT    +		 c         C   sW   y t  d |  ƒ } Wn d GH‚  n X|  d k  r@ t d ƒ ‚ n  t t j |  d ƒ ƒ S(   Ni    s   Arg must be type ints   Arg must be nonnegativei   (   R   t
   ValueErrort   intR   t   gamma(   R+   t   brony(    (    s	   linreg.pyt	   factorial‘   s    c         C   s†   y t  d |  ƒ } Wn d GH‚  n X|  d k  r@ t d ƒ ‚ nB |  d k rP d Sd } x% t  d |  d ƒ D] } | | } qj W| Sd  S(   Ni    s   Arg must be type ints   Arg must be nonnegativei   (   R   R;   (   R+   R>   t   outputR
   (    (    s	   linreg.pyt
   factorial2›   s    c         C   sÃ   y | o | Wn d GH‚  n Xd GHg  } t  |  ƒ } x„ t d | ƒ D]s } | rb d | f GHn  g  } x5 t d | ƒ D]$ } | j t |  | |  | ƒ ƒ qx W| j | ƒ | rH d GHqH qH W| S(   Ns+   Second positional argument must be Boolean.s!   Correlation matrix of row vectorsi    t	   Iterations   Correlation row stored.(   R   R   R   R   (   R)   R0   t   resultR   R
   t   templistt   j(    (    s	   linreg.pyt   corrmat«   s$    "(   R   t   scipyR    t   scipy.stats.statsR   R   R   R   R   R   R   R%   t   FalseR4   R:   R?   RA   RF   (    (    (    s	   linreg.pyt   <module>   s   						'2	
	