ó
¦–Õ\c           @   s  d  Z  d d l Z d d l Z d d l j Z d d l m Z d d l	 m
 Z
 d d l m Z y d d l Z Wn e k
 rŒ e d ƒ ‚ n Xd d l m Z d d l m Z d d	 l m Z m Z m Z m Z m Z m Z m Z m Z d
 d d d d d d d d d d d g Z e e j j ƒ d e d „ ƒ Z e e j j ƒ d d d „ ƒ Z e e j j  ƒ d d d „ ƒ Z  e e j j! ƒ d d d d „ ƒ Z! e e j j# ƒ d d d d d „ ƒ Z# e e j j$ ƒ d e d d „ ƒ Z$ e e j j% ƒ d d d „ ƒ Z% e e j j& ƒ d e e d d „ ƒ Z& e e j j' ƒ d d d  „ ƒ Z' e e j j( ƒ d d d! „ ƒ Z( e e j j) ƒ d" „  ƒ Z) e e j j* ƒ d# d d d$ „ ƒ Z* e
 e j+ ƒ Z, e
 e j- ƒ Z. d% „  Z/ d& „  Z0 d' „  Z1 d( „  Z2 d d) „ Z3 d d* „ Z4 d d+ „ Z5 d S(,   su   
Statistical functions and tests, following scipy.stats.

Some differences

- We don't handle missing values at all

iÿÿÿÿN(   t	   doc_wraps(   t   wrap_elemwise(   t   delayeds4   `dask.array.stats` requires `scipy` to be installed.(   t   distributions(   t   special(   t   Ttest_indResultt   Ttest_1sampResultt   Ttest_relResultt   Power_divergenceResultt   NormaltestResultt   SkewtestResultt   KurtosistestResultt   F_onewayResultt	   ttest_indt   ttest_1sampt	   ttest_relt	   chisquaret   power_divergencet   skewt   skewtestt   kurtosist   kurtosistestt
   normaltestt   f_onewayt   momenti    c         C   sÌ   t  j |  | d d ƒ} t  j | | d d ƒ} |  j | } | j | } | rn t | | | | ƒ \ } }	 n t | | | | ƒ \ } }	 t t  j |  | ƒ t  j | | ƒ |	 | ƒ }
 t t d d ƒ|
 Œ  S(   Nt   ddofi   t   nouti   (	   t   dat   vart   shapet   _equal_var_ttest_denomt   _unequal_var_ttest_denomt   _ttest_ind_from_statst   meanR   R   (   t   at   bt   axist	   equal_vart   v1t   v2t   n1t   n2t   dft   denomt   res(    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   =   s    -t	   propagatec         C   sØ   | d k r t  d ƒ ‚ n  |  j | } | d } t j |  | ƒ | } t j |  | d d ƒ} t j | t | ƒ ƒ } t j d d d d ƒ  t j	 | | ƒ }	 Wd  QXt
 | |	 ƒ \ }	 }
 t t d d	 ƒ|	 |
 ƒ S(
   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.i   R   t   dividet   ignoret   invalidR   i   (   t   NotImplementedErrorR   R   R!   R   t   sqrtt   floatt   npt   errstateR.   t   _ttest_finishR   R   (   R"   t   popmeanR$   t
   nan_policyt   nR*   t   dt   vR+   t   tt   prob(    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   N   s    
c         C   sð   | d k r t  d ƒ ‚ n  |  j | } t | d ƒ } |  | j t j ƒ } t j | | d d ƒ} t j | | ƒ } t j	 | t | ƒ ƒ }	 t j
 d d d d ƒ  t j | |	 ƒ }
 Wd  QXt | |
 ƒ \ }
 } t t d d	 ƒ|
 | ƒ S(
   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.i   R   R.   R/   R0   R   i   (   R1   R   R3   t   astypeR4   t   float64R   R   R!   R2   R5   R.   R6   R   R   (   R"   R#   R$   R8   R9   R*   R:   R;   t   dmR+   R<   R=   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   `   s    c      
   C   s"   t  |  d | d | d | d d ƒS(   Nt   f_expR   R$   t   lambda_t   pearson(   R   (   t   f_obsRA   R   R$   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   u   s    c   
      C   s²  t  | t ƒ r} | t j j j k rg t t t j j j j ƒ  ƒ ƒ d d !} t d j	 | | ƒ ƒ ‚ n  t j j j | } n | d  k r’ d } n  | d  k	 r¡ n |  j d | d t ƒ } | d k rÚ |  | d | } nx | d k r d t |  |  | ƒ } nR | d k r&d t | | |  ƒ } n, |  |  | | d } | d	 | | d :} | j d | ƒ } t | d | ƒ} t t j j ƒ | | d | ƒ }	 t t d
 d ƒ| |	 ƒ S(   Ni   iÿÿÿÿs9   invalid string for lambda_: {0!r}.  Valid strings are {1}R$   t   keepdimsi   i    g       @g      à?R   (   t
   isinstancet   strt   scipyt   statst   _power_div_lambda_namest   reprt   listt   keyst
   ValueErrort   formatt   NoneR!   t   Truet   _xlogyt   sumt   _countR   R   t   chi2t   sfR   (
   RD   RA   R   R$   RB   t   namest   termst   statt   num_obst   p(    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   {   s.    (		#c   	      C   s¢   | d k r t  d ƒ ‚ n  |  j | } t |  d | ƒ } t |  d | ƒ } | d k } t j | | | d d ƒ } | s‹ t  d ƒ ‚ n  | j d k rž | S| S(	   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.i   i   i    g      ø?g        s   bias=False is not implemented.(   R1   R   R   R   t   wheret   ndim(	   R"   R$   t   biasR8   R9   t   m2t   m3t   zerot   vals(    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   ¨   s    c         C   s¦  | d k r t  d ƒ ‚ n  t |  | ƒ } t |  j | ƒ } | d k  rb t d t | ƒ ƒ ‚ n  | t j | d | d d | d ƒ } d	 | d d
 | d | d | d | d | d | d | d } d t j d | d ƒ } d t j d t j | ƒ ƒ } t j d | d ƒ }	 t	 j
 | d k d | ƒ } | t	 j | |	 t	 j | |	 d d ƒ ƒ }
 t t d d ƒ|
 d t j j t	 j |
 ƒ ƒ ƒ S(   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.i   sF   skewtest is not valid with less than 8 samples; %i samples were given.i   i   g      @i   g      @i   iF   g       @i   i   i	   iÿÿÿÿg      à?i    R   (   R1   R   R3   R   RN   t   intt   mathR2   t   logR4   R\   R   R
   R   t   normRV   t   abs(   R"   R$   R8   t   b2R9   t   yt   beta2t   W2t   deltat   alphat   Z(    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   Â   s"    +'# 0c         C   sÚ   | d k r t  d ƒ ‚ n  |  j | } t |  d | ƒ } t |  d | ƒ } | d k } t j d d ƒ }	 z! t j | d | | d ƒ }
 Wd  t j |	   X| s± t  d	 ƒ ‚ n  |
 j d k rÄ |
 S| rÒ |
 d
 S|
 Sd  S(   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.i   i   i    t   allR/   g       @s   bias=False is not implemented.i   (   R1   R   R   R4   t   seterrR   R\   R]   (   R"   R$   t   fisherR^   R8   R9   R_   t   m4Ra   t   olderrRb   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   Ú   s"    !c         C   s?  | d k r t  d ƒ ‚ n  t |  j | ƒ } t |  | d t ƒ} d | d | d } d | | d | d | d | d	 | d | d
 } | | t j | ƒ } d | | d
 | d | d | d t j d | d | d
 | | d | d ƒ } d d | d | t j d d | d ƒ }	 d d d |	 }
 d | t j d |	 d ƒ } t j | d k  d | ƒ } t j | d k  |
 t j d d |	 | d d ƒ ƒ } |
 | t j d d |	 ƒ } t j | d k d | ƒ } | j	 d k r| d } n  t
 t d d ƒ| d t j j t j | ƒ ƒ ƒ S(   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.Rq   g      @i   g      8@i   i   g      ð?i   g      @i   i	   g       @g       @g      @g      "@i    ic   R   (    (   R1   R3   R   R   t   FalseR4   R2   R\   t   powerR]   R   R   R   Rf   RV   Rg   (   R"   R$   R8   R9   Rh   t   Et   varb2t   xt	   sqrtbeta1t   At   term1R+   t   term2Rn   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   ø   s&    :@/7c         C   s…   | d k r t  d ƒ ‚ n  t |  | ƒ \ } } t |  | ƒ \ } } | | | | } t t d d ƒ| t t j j ƒ | d ƒ ƒ S(   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.R   i   (   R1   R   R   R   R	   R   RU   RV   (   R"   R$   R8   t   st   _t   kt   k2(    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR     s    c          G   s%  t  |  ƒ } t j |  ƒ } t  | ƒ } | j ƒ  } | | 8} t | ƒ t | ƒ t | ƒ } d } x2 |  D]* } | t | | ƒ t t  | ƒ ƒ 7} qj W| t | ƒ t | ƒ 8} | | } | d }	 | | }
 | t |	 ƒ } | t |
 ƒ } | | } t |	 |
 | ƒ } t t	 d d ƒ| | ƒ S(   Ni    i   R   i   (
   t   lenR   t   concatenateR!   t   _sum_of_squarest   _square_of_sumsR3   t   _fdtrcR   R   (   t   argst
   num_groupst   alldatat   bignt   offsett   sstott   ssbnR"   t   sswnt   dfbnt   dfwnt   msbt   mswt   fR=   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   "  s$    
 (



i   c         C   s1   | d k r t  d ƒ ‚ n  t j |  | d | ƒS(   NR-   s>   `nan_policy` other than 'propagate' have not been implemented.R$   (   R1   R   R   (   R"   R   R$   R8   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   E  s    c         C   sU   | | d } | d |  | d | | } t  j | d | d | ƒ } | | f S(   Ng       @i   g      ð?(   R   R2   (   R&   R(   R'   R)   R*   t   svarR+   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   V  s    c      	   C   sœ   |  | } | | } t  j d d d d ƒ 3 | | d | d | d | d | d } Wd  QXt j t j | ƒ d | ƒ } t j | | ƒ } | | f S(   NR.   R/   R0   i   i   (   R4   R5   R   R\   t   isnanR2   (   R&   R(   R'   R)   t   vn1t   vn2R*   R+   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR   ]  s    

4c         C   sZ   |  | } t  j d d d d ƒ  t j | | ƒ } Wd  QXt | | ƒ \ } } | | f S(   NR.   R/   R0   (   R4   R5   R   R.   R6   (   t   mean1t   mean2R+   R*   R:   R<   R=   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR    j  s
    
c         C   sN   t  t j j ƒ t j | ƒ |  ƒ d } | j d k rD | d } n  | | f S(   s+   Common code between all 3 t-test functions.i   i    (    (   R   R   R<   RV   R   t   absoluteR]   (   R*   R<   R=   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR6   t  s
    c         C   s"   | d  k r |  j S|  j | Sd  S(   N(   RP   t   sizeR   (   Rx   R$   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyRT   €  s    c         C   s   t  j |  |  | ƒ S(   sü  
    Squares each element of the input array, and returns the sum(s) of that.
    Parameters
    ----------
    a : array_like
        Input array.
    axis : int or None, optional
        Axis along which to calculate. Default is 0. If None, compute over
        the whole array `a`.
    Returns
    -------
    sum_of_squares : ndarray
        The sum along the given axis for (a**2).
    See also
    --------
    _square_of_sums : The square(s) of the sum(s) (the opposite of
    `_sum_of_squares`).
    (   R   RS   (   R"   R$   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyRƒ   ‡  s    c         C   s   t  j |  | ƒ } | | S(   sñ  
    Sums elements of the input array, and returns the square(s) of that sum.
    Parameters
    ----------
    a : array_like
        Input array.
    axis : int or None, optional
        Axis along which to calculate. Default is 0. If None, compute over
        the whole array `a`.
    Returns
    -------
    square_of_sums : float or ndarray
        The square of the sum over `axis`.
    See also
    --------
    _sum_of_squares : The sum of squares (the opposite of `square_of_sums`).
    (   R   RS   (   R"   R$   R}   (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyR„     s    (6   t   __doc__Rd   t   numpyR4   t
   dask.arrayt   arrayR   t   dask.array.randomR    t   dask.array.ufuncR   t   daskR   t   scipy.statsRH   t   ImportErrorR   R   t   scipy.stats.statsR   R   R   R   R	   R
   R   R   t   __all__RI   R   RQ   R   R   R   RP   R   R   R   R   R   R   R   R   t   xlogyRR   t   fdtrcR…   R   R   R    R6   RT   Rƒ   R„   (    (    (    s/   lib/python2.7/site-packages/dask/array/stats.pyt   <module>   s`   :	,#			
	