ó
šxŠ\c           @   sX  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m	 Z	 m
 Z
 m Z d  d l j Z d  d l m Z m Z d  d l m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m  Z  m! Z! m" Z" d  d l# m$ Z$ d  d l% m& Z& m' Z' m( Z( d  d l) j* j+ Z, d  d l- m. Z. e/ Z0 d	 Z1 y\ d  d l2 Z3 e3 j4 Z5 e e5 ƒ e e1 ƒ k Z0 e0 s²e j6 d
 j7 d e5 d e1 ƒ e8 ƒ n  Wn e9 k
 rÆn Xe/ a: e; d „ Z< e< e. d ƒ ƒ d e= f d „  ƒ  YZ> d e= f d „  ƒ  YZ? d „  Z@ d „  ZA d d d „ ZC d d e/ e; d d „ ZD d „  ZE d „  ZF d d „ ZG d „  ZH d e; d d „ ZI d e; d d „ ZJ e> d ƒ d e; d d d „ ƒ ZK e> d e$ ƒ e? ƒ  d e; d d  „ ƒ ƒ ZL e> d ƒ e? ƒ  d e; d d! „ ƒ ƒ ZM eN d" „ ZO e> d ƒ e? d# d$ ƒ d e; d$ d d% „ ƒ ƒ ZP e> d ƒ e? d# d$ ƒ d e; d$ d d& „ ƒ ƒ ZQ e> d d' ƒ d e; d$ d d( „ ƒ ZR d) „  ZS eS d* d+ d, ƒZT eS d- d+ d. ƒZU e> d/ ƒ d e; d d0 „ ƒ ZV e> d/ ƒ d e; d d1 „ ƒ ZW e> d d' ƒ d e; d d2 „ ƒ ZX e> d d' ƒ d e; d d3 „ ƒ ZY e> d d' ƒ d e; d d d4 „ ƒ ZZ d5 „  Z[ eN d6 „ Z\ d$ d7 „ Z] d8 „  Z^ e> d d' ƒ d9 d d: „ ƒ Z_ d; „  Z` e> d d' ƒ d d< „ ƒ Za d= „  Zb d> „  Zc ec e jd ƒ Ze ec e jf ƒ Zg ec e jh ƒ Zi ec e jj ƒ Zk ec e jl ƒ Zm ec e jn ƒ Zo d? „  Zp d@ „  Zq d S(A   iÿÿÿÿ(   t   LooseVersionN(   t   iNaTt   libt   tslibs(   t
   _int64_maxt   maybe_upcast_putmask(   t
   _get_dtypet   is_any_int_dtypet   is_bool_dtypet
   is_complext   is_complex_dtypet   is_datetime64_dtypet   is_datetime64tz_dtypet   is_datetime_or_timedelta_dtypet   is_floatt   is_float_dtypet
   is_integert   is_integer_dtypet   is_numeric_dtypet   is_object_dtypet	   is_scalart   is_timedelta64_dtypet   pandas_dtype(   t   DatetimeTZDtype(   t   isnat   na_value_for_dtypet   notna(   t
   get_options   1.0.0sˆ   The installed version of bottleneck {ver} is not supported in pandas and will be not be used
The minimum supported version is {min_ver}
t   vert   min_verc         C   s   t  r |  a n  d  S(   N(   t   _BOTTLENECK_INSTALLEDt   _USE_BOTTLENECK(   t   v(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   set_use_bottleneck/   s    s   compute.use_bottleneckt   disallowc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         G   s0   t  t |  ƒ j ƒ  t d „  | Dƒ ƒ |  _ d  S(   Nc         s   s   |  ] } t  | ƒ j Vq d  S(   N(   R   t   type(   t   .0t   dtype(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pys	   <genexpr>=   s    (   t   superR"   t   __init__t   tuplet   dtypes(   t   selfR)   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyR'   ;   s    c         C   s%   t  | d ƒ o$ t | j j |  j ƒ S(   NR%   (   t   hasattrt
   issubclassR%   R#   R)   (   R*   t   obj(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   check?   s    c            s%   t  j ˆ  ƒ ‡  ‡ f d †  ƒ } | S(   Nc             sÍ   t  j |  t j | ƒ ƒ } t ‡ f d †  | Dƒ ƒ rg d } t | j d ˆ  j j d d ƒ ƒ ƒ ‚ n  y* t	 j
 d d ƒ  ˆ  |  | Ž  SWd  QXWn5 t k
 rÈ } t |  d ƒ rÂ t | ƒ ‚ n  ‚  n Xd  S(	   Nc         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R.   (   R$   R-   (   R*   (    s1   lib/python2.7/site-packages/pandas/core/nanops.pys	   <genexpr>G   s    s7   reduction operation {name!r} not allowed for this dtypet   namet   nant    t   invalidt   ignorei    (   t	   itertoolst   chaint   compatt
   itervaluest   anyt	   TypeErrort   formatt   __name__t   replacet   npt   errstatet
   ValueErrorR   (   t   argst   kwargst   obj_itert   msgt   e(   t   fR*   (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _fD   s    *(   t	   functoolst   wraps(   R*   RE   RF   (    (   RE   R*   s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   __call__C   s    !(   R;   t
   __module__R'   R.   RI   (    (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyR"   9   s   		t   bottleneck_switchc           B   s   e  Z d  „  Z d „  Z RS(   c         K   s   | |  _  d  S(   N(   RA   (   R*   RA   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyR'   [   s    c            sm   ˆ  j  ‰ y t t ˆ ƒ ‰ Wn t t f k
 r; d  ‰ n Xt j ˆ  ƒ d  t ‡  ‡ ‡ ‡ f d † ƒ } | S(   Nc            so  t  ˆ j ƒ d k rT x< t j ˆ j ƒ D]% \ } } | | k r( | | | <q( q( Wn  y° |  j d k rˆ | j d ƒ d  k rˆ t |  | ƒ St rè | rè t	 |  j
 ˆ ƒ rè ˆ |  d | | } t | ƒ rˆ  |  d | d | | } qn ˆ  |  d | d | | } Wnd t k
 rjy ˆ  |  d | d | | } Wqkt k
 rf} t |  ƒ r`t | ƒ ‚ n  ‚  qkXn X| S(   Ni    t	   min_countt   axist   skipna(   t   lenRA   R6   t	   iteritemst   sizet   gett   Nonet   _na_for_min_countR   t   _bn_ok_dtypeR%   t	   _has_infst	   ExceptionR?   R   R9   (   t   valuesRM   RN   t   kwdst   kR    t   resultRD   (   t   altt   bn_funct   bn_nameR*   (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRE   f   s*    $!(	   R;   t   getattrt   bnt   AttributeErrort	   NameErrorRS   RG   RH   t   True(   R*   R\   RE   (    (   R\   R]   R^   R*   s1   lib/python2.7/site-packages/pandas/core/nanops.pyRI   ^   s    	
!((   R;   RJ   R'   RI   (    (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRK   Y   s   	c         C   s>   t  |  ƒ r: t |  ƒ p" t |  ƒ r: | d k r6 t St St S(   Nt   nansumt   nanprod(   Rd   Re   (   R   R   R   t   FalseRc   (   t   dtR/   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRU   ’   s    
c         C   s   t  |  t j ƒ rY |  j d k r4 t j |  j ƒ  ƒ S|  j d k rY t j |  j ƒ  ƒ Sn  y t j |  ƒ j	 ƒ  SWn t
 t f k
 rŠ t SXd  S(   Nt   f8t   f4(   t
   isinstanceR=   t   ndarrayR%   R   t   has_infs_f8t   ravelt   has_infs_f4t   isinfR8   R9   t   NotImplementedErrorRf   (   R[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRV   §   s    c         C   s{   | d k	 r | St |  ƒ rM | d k r/ t j S| d k rB t j St j Sn* | d k r` t j S| d k rp t St j Sd S(   s;    return the correct fill value for the dtype of the values s   +infN(   RS   t   _na_ok_dtypeR=   R0   t   infR   R   R   (   R%   t
   fill_valuet   fill_value_typ(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _get_fill_value´   s    c         C   s‘  t  |  ƒ r* |  j } t |  d |  ƒ }  n t j |  ƒ }  |  j } | d k rr | rc t |  ƒ } qr t |  ƒ } n  t |  ƒ sŠ t  |  ƒ r± t |  d |  ƒ }  |  j	 t
 j ƒ }  n  t | ƒ } t | d | d | ƒ} | r'| rð |  j ƒ  }  n  | rt
 j |  | | ƒ q<t |  | | ƒ \ }  }	 n | r<|  j ƒ  }  n  | }
 t | ƒ sZt | ƒ rft
 j }
 n t | ƒ r~t
 j }
 n  |  | | |
 | f S(   s“    utility to get the values view, mask, dtype
    if necessary copy and mask using the specified fill_value
    copy = True will force the copy
    t   _valuest   asi8Rs   Rt   N(   R   R%   R_   t   comt   values_from_objectRS   t	   _isfiniteR   R   t   viewR=   t   int64Rq   Ru   t   copyt   putmaskR   R   R   R   t   float64(   RX   RN   Rs   Rt   t   isfiniteR}   t   maskR%   t   dtype_okt   changedt	   dtype_max(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _get_valuesË   s:    			c         C   sk   t  |  ƒ r t |  ƒ St |  ƒ sF t |  ƒ sF t |  ƒ sF t |  ƒ rT t j |  ƒ St j |  j d ƒ ƒ S(   NR   (	   R   R   R
   R   R   R   R=   R€   t   astype(   RX   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRz     s    
c         C   s#   t  |  j t j t j t j f ƒ S(   N(   R,   R#   R=   t   integert   timedelta64t
   datetime64(   R%   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRq     s    	c         C   s=  t  | ƒ s t | ƒ r¬ | d k r- t } n  t |  t j ƒ sš t | d d ƒ } t | ƒ sj t	 d ƒ ‚ |  | k r‚ t j
 }  n  t j |  d | ƒ}  q9|  j | ƒ }  n t | ƒ r9t |  t j ƒ s|  | k râ t j
 }  n  t j |  ƒ t k rt d ƒ ‚ n  t j |  d d ƒ}  q9|  j d ƒ j | ƒ }  n  |  S(   s    wrap our results if needed t   tzs   Expected non-null fill_values   overflow in timedelta operationt   unitt   nst   i8N(   R   R   RS   R   Rj   R=   Rk   R_   R   t   AssertionErrorR0   R   t	   TimestampR{   R   t   fabsR   R?   t	   TimedeltaR†   (   R[   R%   Rs   RŠ   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _wrap_results  s&    	c         C   s‰   t  |  ƒ r |  j d ƒ }  n  t |  j ƒ } |  j d k r@ | S|  j |  |  j | d } t j | d |  j ƒ} | j | ƒ | Sd S(   s]  Return the missing value for `values`

    Parameters
    ----------
    values : ndarray
    axis : int or None
        axis for the reduction

    Returns
    -------
    result : scalar or ndarray
        For 1-D values, returns a scalar of the correct missing type.
        For 2-D values, returns a 1-D array where each element is missing.
    R   i   R%   N(	   R   R†   R   R%   t   ndimt   shapeR=   t   emptyt   fill(   RX   RM   Rs   t   result_shapeR[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRT   3  s    
c         C   s:   t  |  | t d | d | ƒ\ }  } } } } |  j | ƒ S(   s  
    Check if any elements along an axis evaluate to True.

    Parameters
    ----------
    values : ndarray
    axis : int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : bool

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 2])
    >>> nanops.nanany(s)
    True

    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([np.nan])
    >>> nanops.nanany(s)
    False
    R}   R   (   R…   Rf   R8   (   RX   RM   RN   R   R%   t   _(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nananyQ  s    c         C   s:   t  |  | t d | d | ƒ\ }  } } } } |  j | ƒ S(   s  
    Check if all elements along an axis evaluate to True.

    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : bool

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 2, np.nan])
    >>> nanops.nanall(s)
    True

    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 0])
    >>> nanops.nanall(s)
    False
    R}   R   (   R…   Rc   t   all(   RX   RM   RN   R   R%   R˜   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nanallr  s    t   M8i    c   
      C   s”   t  |  | d d | ƒ\ }  } } } } | } t | ƒ rB | } n t | ƒ rZ t j } n  |  j | d | ƒ}	 t |	 | | d | ƒ}	 t |	 | ƒ S(   s¾  
    Sum the elements along an axis ignoring NaNs

    Parameters
    ----------
    values : ndarray[dtype]
    axis: int, optional
    skipna : bool, default True
    min_count: int, default 0
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : dtype

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 2, np.nan])
    >>> nanops.nansum(s)
    3.0
    i    R   R%   RL   (   R…   R   R   R=   R   t   sumt   _maybe_null_outR’   (
   RX   RM   RN   RL   R   R%   R„   R˜   t	   dtype_sumt   the_sum(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRd   “  s    !	c         C   sU  t  |  | d d | ƒ\ }  } } } } | } t j } t | ƒ sf t | ƒ sf t | ƒ sf t | ƒ rr t j } n t | ƒ r | } | } n  t | | d | ƒ}	 t	 |  j
 | d | ƒƒ }
 | d k	 r)t |
 d t ƒ r)t j d d ƒ  |
 |	 } Wd QX|	 d k } | j ƒ  rHt j | | <qHn |	 d k r?|
 |	 n t j } t | | ƒ S(   s  
    Compute the mean of the element along an axis ignoring NaNs

    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : float
        Unless input is a float array, in which case use the same
        precision as the input array.

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 2, np.nan])
    >>> nanops.nanmean(s)
    1.5
    i    R   R%   R“   Rš   R3   N(   R…   R=   R   R   R   R   R   R   t   _get_countst   _ensure_numericR   RS   R_   Rf   R>   R8   R0   R’   (   RX   RM   RN   R   R%   R„   R˜   RŸ   t   dtype_countt   countR    t   the_meant   ct_mask(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nanmean¹  s(    $		c            sN  ‡  f d †  } t  |  ˆ  d | ƒ\ }  } } } } t |  ƒ s^ |  j d ƒ }  t j |  | <n  | d k ry |  j ƒ  }  n  |  j } |  j d k r,| rÒ ˆ  s¹ t	 t j
 | | |  ƒ | ƒ St	 t j |  | ƒ | ƒ St j |  j ƒ }	 t j |  j ƒ }
 t j |	 |
 | k ƒ } | j t j ƒ t	 | | ƒ St	 | rA| |  ƒ n t j | ƒ S(   sÕ  
    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : float
        Unless input is a float array, in which case use the same
        precision as the input array.

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, np.nan, 2, 2])
    >>> nanops.nanmedian(s)
    2.0
    c            s8   t  |  ƒ } ˆ  r' | j ƒ  r' t j St j |  | ƒ S(   N(   R   Rš   R=   R0   t	   nanmedian(   t   xR   (   RN   (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt
   get_median  s    R   Rh   i   N(   R…   R   R†   R=   R0   RS   Rm   RQ   R“   R’   t   apply_along_axisR¨   t   arrayR”   t   arangeR•   R–   (   RX   RM   RN   R   Rª   R%   R„   R˜   t   notemptyt   shpt   dimst   ret(    (   RN   s1   lib/python2.7/site-packages/pandas/core/nanops.pyR¨   î  s(    $	c         C   sµ   t  | ƒ } t |  | d | ƒ} | | j | ƒ } t | ƒ rd | | k r« t j } t j } q« nG | | k } | j ƒ  r« t j | | t j ƒ t j | | t j ƒ n  | | f S(   NR%   (   R   R¡   R#   R   R=   R0   R8   R~   (   R   RM   t   ddofR%   R¤   t   dt   mask2(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _get_counts_nanvar1  s    	R²   i   c         C   s=   t  j t |  d | d | d | d | ƒƒ } t | |  j ƒ S(   s¸  
    Compute the standard deviation along given axis while ignoring NaNs

    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    ddof : int, default 1
        Delta Degrees of Freedom. The divisor used in calculations is N - ddof,
        where N represents the number of elements.
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : float
        Unless input is a float array, in which case use the same
        precision as the input array.

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, np.nan, 2, 3])
    >>> nanops.nanstd(s)
    1.0
    RM   RN   R²   R   (   R=   t   sqrtt   nanvarR’   R%   (   RX   RM   RN   R²   R   R[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nanstdC  s    !c         C   s…  t  j |  ƒ }  |  j } | d k r3 t |  ƒ } n  t |  ƒ r^ |  j d ƒ }  t j |  | <n  t	 |  ƒ r‹ t
 | | | |  j ƒ \ } } n t
 | | | ƒ \ } } | rË |  j ƒ  }  t j |  | d ƒ n  t |  j d | d t j ƒ ƒ | } | d k	 rt j | | ƒ } n  t | |  d ƒ }	 t j |	 | d ƒ |	 j d | d t j ƒ | }
 t	 | ƒ ru|
 j | ƒ }
 n  t |
 |  j ƒ S(   s®  
    Compute the variance along given axis while ignoring NaNs

    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    ddof : int, default 1
        Delta Degrees of Freedom. The divisor used in calculations is N - ddof,
        where N represents the number of elements.
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : float
        Unless input is a float array, in which case use the same
        precision as the input array.

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, np.nan, 2, 3])
    >>> nanops.nanvar(s)
    1.0
    Rh   i    RM   R%   i   N(   Rx   Ry   R%   RS   R   R   R†   R=   R0   R   Rµ   R}   R~   R¢   R   R   t   expand_dimsR’   (   RX   RM   RN   R²   R   R%   R¤   R³   t   avgt   sqrR[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyR·   f  s,    	!%t   m8c         C   s¨   t  |  | | d | d | ƒ| d k r7 t |  ƒ } n  t |  j ƒ sX |  j d ƒ }  n  t | | | |  j ƒ \ } } t  |  | | d | ƒ} t j | ƒ t j | ƒ S(   sÒ  
    Compute the standard error in the mean along given axis while ignoring NaNs

    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    ddof : int, default 1
        Delta Degrees of Freedom. The divisor used in calculations is N - ddof,
        where N represents the number of elements.
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : float64
        Unless input is a float array, in which case use the same
        precision as the input array.

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, np.nan, 2, 3])
    >>> nanops.nansem(s)
     0.5773502691896258
    R²   R   Rh   N(	   R·   RS   R   R   R%   R†   Rµ   R=   R¶   (   RX   RM   RN   R²   R   R¤   R˜   t   var(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nansemª  s     c            s5   t  ƒ  d  t d  ‡  ‡ f d † ƒ } d ˆ | _ | S(   Nc            só   t  |  | d ˆ  d | ƒ\ }  } } } } | d  k	 rI |  j | d k sX |  j d k r¼ y/ t |  ˆ ƒ | d | ƒ} | j t j ƒ WqÑ t t	 t
 t j j j f k
 r¸ t j } qÑ Xn t |  ˆ ƒ | ƒ } t | | | ƒ } t | | | ƒ S(   NRt   R   i    R%   (   R…   RS   R”   RQ   R_   R–   R=   R0   Ra   R9   R?   t   coret	   _internalt	   AxisErrorR’   Rž   (   RX   RM   RN   R   R%   R„   Rs   R[   (   Rt   t   meth(    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt	   reduction×  s    'R0   (   RK   RS   Rc   R;   (   RÂ   Rt   RÃ   (    (   Rt   RÂ   s1   lib/python2.7/site-packages/pandas/core/nanops.pyt
   _nanminmaxÖ  s    t   minRt   s   +inft   maxs   -inft   Oc         C   sR   t  |  | d d d | ƒ\ }  } } } } |  j | ƒ } t | | | | ƒ } | S(   s³  
    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    --------
    result : int
        The index of max value in specified axis or -1 in the NA case

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 2, 3, np.nan, 4])
    >>> nanops.nanargmax(s)
    4
    Rt   s   -infR   (   R…   t   argmaxt   _maybe_arg_null_out(   RX   RM   RN   R   R%   R˜   R[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt	   nanargmaxó  s
    'c         C   sR   t  |  | d d d | ƒ\ }  } } } } |  j | ƒ } t | | | | ƒ } | S(   s³  
    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    --------
    result : int
        The index of min value in specified axis or -1 in the NA case

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 2, 3, np.nan, 4])
    >>> nanops.nanargmin(s)
    0
    Rt   s   +infR   (   R…   t   argminRÉ   (   RX   RM   RN   R   R%   R˜   R[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt	   nanargmin  s
    'c         C   s<  t  j |  ƒ }  | d k r* t |  ƒ } n  t |  j ƒ sZ |  j d ƒ }  t | | ƒ } n t | | d |  j ƒ} | rš |  j ƒ  }  t	 j
 |  | d ƒ n  |  j | d t	 j ƒ| } | d k	 r× t	 j | | ƒ } n  |  | } | rý t	 j
 | | d ƒ n  | d } | | } | j | d t	 j ƒ}	 | j | d t	 j ƒ}
 t |	 ƒ }	 t |
 ƒ }
 t	 j d d d d ƒ + | | d d	 | d |
 |	 d
 } Wd QX|  j } t | ƒ rÅ| j | ƒ } n  t | t	 j ƒ r	t	 j |	 d k d | ƒ } t	 j | | d k  <| S|	 d k rd n | } | d k  r4t	 j S| Sd S(   sÈ   Compute the sample skewness.

    The statistic computed here is the adjusted Fisher-Pearson standardized
    moment coefficient G1. The algorithm computes this coefficient directly
    from the second and third central moment.

    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : float64
        Unless input is a float array, in which case use the same
        precision as the input array.

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1,np.nan, 1, 2])
    >>> nanops.nanskew(s)
    1.7320508075688787
    Rh   R%   i    i   R2   R3   t   dividei   g      à?g      ø?Ni   (   Rx   Ry   RS   R   R   R%   R†   R¡   R}   R=   R~   R   R   R¹   t   _zero_out_fperrR>   Rj   Rk   t   whereR0   (   RX   RM   RN   R   R¤   t   meant   adjustedt	   adjusted2t	   adjusted3t   m2t   m3R[   R%   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nanskew/  sF    


,	c         C   s¡  t  j |  ƒ }  | d
 k r* t |  ƒ } n  t |  j ƒ sZ |  j d ƒ }  t | | ƒ } n t | | d |  j ƒ} | rš |  j ƒ  }  t	 j
 |  | d ƒ n  |  j | d t	 j ƒ| } | d
 k	 r× t	 j | | ƒ } n  |  | } | rý t	 j
 | | d ƒ n  | d } | d } | j | d t	 j ƒ}	 | j | d t	 j ƒ}
 t	 j d d d d ƒ [ d | d	 d | d | d } | | d	 | d	 |
 } | d | d |	 d } Wd
 QXt | ƒ } t | ƒ } t | t	 j ƒ s| d k  rót	 j S| d k rd Sn  t	 j d d d d ƒ  | | | } Wd
 QX|  j } t | ƒ rZ| j | ƒ } n  t | t	 j ƒ rt	 j | d k d | ƒ } t	 j | | d k  <n  | S(   s¸  
    Compute the sample excess kurtosis

    The statistic computed here is the adjusted Fisher-Pearson standardized
    moment coefficient G2, computed directly from the second and fourth
    central moment.

    Parameters
    ----------
    values : ndarray
    axis: int, optional
    skipna : bool, default True
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : float64
        Unless input is a float array, in which case use the same
        precision as the input array.

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1,np.nan, 1, 3, 2])
    >>> nanops.nankurt(s)
    -1.2892561983471076
    Rh   R%   i    i   R2   R3   RÍ   i   i   Ni   (   Rx   Ry   RS   R   R   R%   R†   R¡   R}   R=   R~   R   R   R¹   R>   RÎ   Rj   Rk   R0   RÏ   (   RX   RM   RN   R   R¤   RÐ   RÑ   RÒ   t	   adjusted4RÔ   t   m4t   adjt   numert   denomR[   R%   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nankurt~  sP    


" 	c         C   sl   | d k r t |  ƒ } n  | rG t |  ƒ rG |  j ƒ  }  d |  | <n  |  j | ƒ } t | | | d | ƒS(   sô  
    Parameters
    ----------
    values : ndarray[dtype]
    axis: int, optional
    skipna : bool, default True
    min_count: int, default 0
    mask : ndarray[bool], optional
        nan-mask if known

    Returns
    -------
    result : dtype

    Examples
    --------
    >>> import pandas.core.nanops as nanops
    >>> s = pd.Series([1, 2, 3, np.nan])
    >>> nanops.nanprod(s)
    6.0

    Returns
    --------
    The product of all elements on a given axis. ( NaNs are treated as 1)
    i   RL   N(   RS   R   R   R}   t   prodRž   (   RX   RM   RN   RL   R   R[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRe   ×  s    c         C   s™   | d  k s t |  d t ƒ rU | r= | j ƒ  rR d }  qR q• | j ƒ  r• d }  q• n@ | rm | j | ƒ } n | j | ƒ } | j ƒ  r• d |  | <n  |  S(   NR“   iÿÿÿÿ(   RS   R_   Rf   Rš   R8   (   R[   RM   R   RN   t   na_mask(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRÉ   û  s    c         C   sž   t  | ƒ } | d  k r2 | j |  j |  j ƒ  ƒ S|  j | |  j | ƒ } t | ƒ re | j | ƒ Sy | j | ƒ SWn! t k
 r™ t	 j
 | d | ƒSXd  S(   NR%   (   R   RS   R#   RQ   R   R”   R   R†   Ra   R=   R¬   (   R   RM   R%   R¤   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyR¡     s    c         C   sî   | d  k	 r­ t |  d t ƒ r­ | j | | j | ƒ | d k  } t j | ƒ rê t |  ƒ r t j |  ƒ r~ |  j	 d ƒ }  n |  j	 d ƒ }  t j
 |  | <qª d  |  | <qê n= |  t j k	 rê | j | j ƒ  } | | k  rê t j
 }  qê n  |  S(   NR“   i    t   c16Rh   (   RS   R_   Rf   R”   R   R=   R8   R   t   iscomplexobjR†   R0   R   t   NaTRQ   (   R[   RM   R   RL   t	   null_mask(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRž     s    $c         C   s}   t  |  t j ƒ rP t j d d ƒ ' t j t j |  ƒ d k  d |  ƒ SWd  QXn) t j |  ƒ d k  ru |  j j d ƒ S|  Sd  S(   NR2   R3   g›+¡†›„=i    (   Rj   R=   Rk   R>   RÏ   t   absR%   R#   (   t   arg(    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRÎ   1  s    +t   pearsonc         C   s§   t  |  ƒ t  | ƒ k r' t d ƒ ‚ n  | d k r< d } n  t |  ƒ t | ƒ @} | j ƒ  su |  | }  | | } n  t  |  ƒ | k  rŽ t j St | ƒ } | |  | ƒ S(   s   
    a, b: ndarrays
    s'   Operands to nancorr must have same sizei   N(   RO   RŽ   RS   R   Rš   R=   R0   t   get_corr_func(   t   at   bt   methodt   min_periodst   validRE   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nancorr:  s    	
c            s   |  d	 k r% d d l  m ‰  m ‰ n t |  ƒ r5 |  Sd „  } ‡  f d †  } ‡ f d †  } i | d 6| d 6| d 6} | |  S(
   Nt   kendallt   spearmaniÿÿÿÿ(   t
   kendalltaut	   spearmanrc         S   s   t  j |  | ƒ d S(   Ni    i   (   i    i   (   R=   t   corrcoef(   Rç   Rè   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _pearsonW  s    c            s*   ˆ  |  | ƒ } t  | t ƒ r& | d S| S(   Ni    (   Rj   R(   (   Rç   Rè   t   rs(   Rï   (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _kendallZ  s    c            s   ˆ  |  | ƒ d S(   Ni    (    (   Rç   Rè   (   Rð   (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt	   _spearman`  s    Rå   (   Rí   Rî   (   t   scipy.statsRï   Rð   t   callable(   Ré   Rò   Rô   Rõ   t   _cor_methods(    (   Rï   Rð   s1   lib/python2.7/site-packages/pandas/core/nanops.pyRæ   Q  s    	
c         C   s¢   t  |  ƒ t  | ƒ k r' t d ƒ ‚ n  | d  k r< d } n  t |  ƒ t | ƒ @} | j ƒ  su |  | }  | | } n  t  |  ƒ | k  rŽ t j St j |  | ƒ d S(   Ns&   Operands to nancov must have same sizei   i    (   i    i   (   RO   RŽ   RS   R   Rš   R=   R0   t   cov(   Rç   Rè   Rê   Rë   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nancovk  s    	
c         C   s<  t  |  t j ƒ r± t |  ƒ s* t |  ƒ r? |  j t j ƒ }  q8t |  ƒ r8y |  j t j ƒ }  Wn) t	 t
 f k
 rŒ |  j t j ƒ }  q® Xt j |  j ƒ s® |  j }  q® q8n‡ t |  ƒ pÒ t |  ƒ pÒ t |  ƒ s8y t |  ƒ }  Wq8t k
 r4y t |  ƒ }  Wq5t k
 r0t	 d j d |  ƒ ƒ ‚ q5Xq8Xn  |  S(   Ns&   Could not convert {value!s} to numerict   value(   Rj   R=   Rk   R   R   R†   R   R   t
   complex128R9   R?   R8   t   imagt   realR   R   R	   t   floatRW   t   complexR:   (   R©   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyR¢   ~  s(    $c            s   ‡  f d †  } | S(   Nc            s‘   t  |  ƒ } t  | ƒ } | | B} t j d d ƒ  ˆ  |  | ƒ } Wd  QX| j ƒ  r t | ƒ rt | j d ƒ } n  t j | | t j ƒ n  | S(   NRš   R3   RÇ   (   R   R=   R>   R8   R   R†   R~   R0   (   R©   t   yt   xmaskt   ymaskR   R[   (   t   op(    s1   lib/python2.7/site-packages/pandas/core/nanops.pyRE   ™  s    
(    (   R  RE   (    (   R  s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   make_nancomp˜  s    c         C   sl   |  | }  t  |  ƒ d k rV t j | ƒ r0 | St j | g t  | ƒ d |  j ƒSn  t j |  | d | ƒS(   sÚ  
    Wraper for np.percentile that skips missing values, specialized to
    1-dimensional case.

    Parameters
    ----------
    values : array over which to find quantiles
    mask : ndarray[bool]
        locations in values that should be considered missing
    q : scalar or array of quantile indices to find
    na_value : scalar
        value to return for empty or all-null values
    interpolation : str

    Returns
    -------
    quantiles : scalar or array
    i    R%   t   interpolation(   RO   R   R   R=   R¬   R%   t
   percentile(   RX   R   t   qt   na_valueR  (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   _nanpercentile_1d³  s    c   
   	   C   s  t  j | ƒ rú | j ƒ  rú | d k rA t |  | | | d | ƒS| j |  j k  rh | j |  j ƒ } n  | d k r‰ |  j }  | j } n  g  t t	 |  ƒ t	 | ƒ ƒ D]' \ } } t | | | | d | ƒ^ q¥ }	 t
 j |	 d |  j d t ƒj }	 |	 Sn t
 j |  | d | d | ƒSd S(   s×  
    Wraper for np.percentile that skips missing values.

    Parameters
    ----------
    values : array over which to find quantiles
    q : scalar or array of quantile indices to find
    axis : {0, 1}
    na_value : scalar
        value to return for empty or all-null values
    mask : ndarray[bool]
        locations in values that should be considered missing
    ndim : {1, 2}
    interpolation : str

    Returns
    -------
    quantiles : scalar or array
    i   R  i    R%   R}   RM   N(   R   R   R8   R
  R“   t   reshapeR”   t   Tt   zipt   listR=   R¬   R%   Rf   R  (
   RX   R  RM   R	  R   R“   R  t   valt   mR[   (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   nanpercentileÓ  s    	F!(r   t   distutils.versionR    RG   R4   t   operatort   warningst   numpyR=   t   pandas._libsR   R   R   t   pandas.compatR6   t   pandas.core.dtypes.castR   R   t   pandas.core.dtypes.commonR   R   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   t   pandas.core.dtypes.dtypesR   t   pandas.core.dtypes.missingR   R   R   t   pandas.core.commonR¿   t   commonRx   t   pandas.core.configR   Rf   R   t   _MIN_BOTTLENECK_VERSIONt
   bottleneckR`   t   __version__R   t   warnR:   t   UserWarningt   ImportErrorR   Rc   R!   t   objectR"   RK   RU   RV   RS   Ru   R…   Rz   Rq   R’   RT   R™   R›   Rd   R§   R¨   Rÿ   Rµ   R¸   R·   R¾   RÄ   t   nanmint   nanmaxRÊ   RÌ   RÖ   RÜ   Re   RÉ   R¡   Rž   RÎ   Rì   Ræ   Rú   R¢   R  t   gtt   nangtt   get   nanget   ltt   nanltt   let   nanlet   eqt   naneqt   net   nanneR
  R  (    (    (    s1   lib/python2.7/site-packages/pandas/core/nanops.pyt   <module>   s¶   p			 9		9				!!	%3	A	!	B+			NX#							 