
p7]c           @   s.  d  Z  d d l m Z m Z m Z m Z m Z d d l Z d d l	 m
 Z
 m Z m Z m Z d d l j j Z d d l m Z m Z d d l m Z d   Z d   Z d	   Z d
 e f d     YZ d e f d     YZ d e f d     YZ d   Z d   Z e  d d  Z! d   Z" d e  d  Z# d S(   sr   
Base tools for handling various kinds of data structures, attaching metadata to
results, and doing data cleaning
i(   t   reducet	   iteritemst   lmapt   zipt   rangeN(   t	   DataFramet   Seriest   isnullt
   MultiIndex(   t   cache_readonlyt   cache_writable(   t   MissingDataErrorc         C   s>   t  j |   j d k r: t  j |   j   j d k r: d  Sd  S(   Ni   (   t   npt   asarrayt   ndimt   squeeze(   t   x(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   _asarray_2dcolumns   s    6c         C   s`   t  j |   }  |  j d k r7 |  d d  d f }  n  t  j t |   d d d d  d f S(   sy   
    Makes sure input is an array and is 2d. Makes sure output is 2d. True
    indicates a null in the rows of 2d x.
    i   Nt   axis(   R   R   R   t   Nonet   anyR   (   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   _asarray_2d_null_rows   s    c          G   sD   t  |   d k r( |  t g g f 7}  n  d   } t | |   j   S(   s   
    Returns a boolean array which is True where any of the rows in any
    of the _2d_ arrays in arrs are NaNs. Inputs can be any mixture of Series,
    DataFrames or array-like.
    i   c         S   sD   t  |  d  o! |  j t k o! |  } t j t |   | t |  B S(   Nt   dtype(   t   hasattrR   t   boolR   t
   logical_orR   (   R   t   yt   x_is_boolean_array(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   _nan_row_maybe_two_inputs*   s    $(   t   lent   FalseR    R   (   t   arrsR   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt	   _nan_rows!   s    	t	   ModelDatac           B   sX  e  Z d  Z d Z d d d d  Z d   Z d   Z d   Z e	 d    Z
 e	 d    Z e	 d    Z d	   Z e   d
    Z e   d    Z e d    Z e j d    Z e d    Z d   Z d   Z d   Z d   Z d   Z d d d  Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ RS(    si   
    Class responsible for handling input data and extracting metadata into the
    appropriate form
    t   nonec         K   s:  d | k r! | j  d  |  _ n  d | k rB | j  d  |  _ n  | d k r |  j | | | |  \ } } | |  _ |  j j |  |  j |  _ |  j	 |  _
 |  j |  j |  j	  \ |  _ |  _	 n@ |  j j |  | |  _ | |  _
 |  j | |  \ |  _ |  _	 d  |  _ d |  _ |  j |  |  j   i  |  _ d  S(   Nt   design_infot   formulaR"   i    (   t   popR#   R$   t   handle_missingt   missing_row_idxt   __dict__t   updatet   endogt
   orig_endogt   exogt	   orig_exogt   _convert_endog_exogR   t	   const_idxt
   k_constantt   _handle_constantt   _check_integrityt   _cache(   t   selfR*   R,   t   missingt   hasconstt   kwargst   arrayst   nan_idx(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   __init__9   s,    					
c         C   sC   d d l  m  } | |  j  } d | k r? | d =t | d <n  | S(   Ni(   t   copyR#   t   restore_design_info(   R;   R(   t   True(   R4   R;   t   d(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   __getstate__T   s    c   
      C   s  d | k r d d l  m } m } g  } y | d } Wn( t k
 r` | d j | d  } n Xxz d d d	 d
 d g D]Y } y* | | d | d | d d \ } } PWqw t | f k
 r }	 | j |	  qw Xqw W| d  | j |  _ | d =n  |  j j	 |  d  S(   NR<   i(   t	   dmatricest
   PatsyErrort   frameR+   R-   i   i   i   i    i   R$   t   eval_envt   return_typet	   dataframe(
   t   patsyR@   RA   t   KeyErrort   joint	   NameErrort   appendR#   R(   R)   (
   R4   R>   R@   RA   t   exct   datat   deptht   _t   designt   e(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   __setstate__\   s&    

c         C   sQ  | t  k s |  j d  k r0 d |  _ d  |  _ nt  } t j |  j d d } t j |  j   sr t	 d   n  t j
 | d k  d j   } | j |  _ |  j d k r |  j d  d   | f j   d k r | |  _ qt } n |  j d k rg  } x | D]T } |  j d  d   | f j   } | d k rId |  _ | |  _ Pn  | j |  qWt j |  d k } | j   rd |  _ | | j   |  _ qt } n |  j d k rt } n  | r;| r;t j t j |  j j d  |  j f  }	 t j j |	  }
 t j j |  j  } t | |
 k  |  _ d  |  _ n | rMd |  _ n  d  S(   Ni    R   s   exog contains inf or nansi   (   R   R,   R   R0   R/   R   t   ptpt   isfinitet   allR   t   whereR   t   sizet   meanR=   RJ   t   arrayR   t   argmaxt   column_stackt   onest   shapet   linalgt   matrix_rankt   int(   R4   R6   t   check_implicitt   ptp_R/   t   valuest   idxt   valuet   post   augmented_exogt	   rank_augmt	   rank_orig(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR1   u   sL    	%						%c         C   s   | | S(   N(    (   t   clsR   t   nan_mask(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt
   _drop_nans   s    c         C   s   | | d  d   | f S(   N(    (   Ri   R   Rj   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   _drop_nans_2d   s    c            s  g  } | j  d d
  } | d
 k	 rO d } g  } | d
 k r | d g 7} q nF | d
 k	 rv | | f } d d g } n | f } d g } | d g 7} d }	 g  }
 t |  rx t |  D] \ } } | d
 k s | j d k r | | g 7} q n  | j d k r)| t j |  f 7} | | g 7} q | j   j d k rd| t j |  f 7} | | g 7} q | j d k r|	 t j |  f 7}	 |
 | g 7}
 q t d   q Wn  | d
 k	 r|  d
 } | rt	 |   } | j
 d  j
 d k rt d   n  |  }  | O n  |	 rt	 |	  } | j
 d  j
 d k rRt d	   n  | d
 k	 rp| |  O} n |  }  | O qn8 t	 |    |	 rt	  d
 d
  d
 f f |	    n  t j   st t | |   } |	 r| j t t |
 |	    n  | r>| j t t | d
 g t |     n  | d
 k	 r| j i | d 6 | d
 k	 r| j i | d 6 qn  | g  f S| d k rt d   nr| d k r     f d   }    f d   } t t | t | |    } | d
 k	 r| d
 k	 rS| }   j | |  } | d
 k	 rS  j | |  } qSn  | j i | d 6 | d
 k	 r| j i | d 6 qn  |	 r| j t t |
 t | |	     n  | r| j t t | d
 g t |     n  | t j   d j   f St d |   d
 S(   su   
        This returns a dictionary with keys endog, exog and the keys of
        kwargs. It preserves Nones.
        t   missing_idxR,   R*   i    i   i   s5   Arrays with more than 2 dimensions aren't yet handledsB   Shape mismatch between endog/exog and extra arrays given to model.sE   Shape mismatch between endog/exog and extra 2d arrays given to model.Nt   raises!   NaNs were encountered in the datat   dropc            s     j  |    S(   N(   Rk   (   R   (   Ri   Rj   (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   <lambda>  t    c            s     j  |    S(   N(   Rl   (   R   (   Ri   Rj   (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyRp     Rq   s    missing option %s not understood(    (    (   R%   R   R   R   R   R   R   R   t
   ValueErrorR    R\   R   t   dictR   R)   R   R   Rk   RU   t   tolist(   Ri   R*   R,   R5   R7   t   none_array_namesRm   t   combinedt   combined_namest   combined_2dt   combined_2d_namest   keyt   value_arrayt   updated_row_maskt   combined_nanst   combined_2d_nanst	   drop_nanst   drop_nans_2d(    (   Ri   Rj   s4   lib/python2.7/site-packages/statsmodels/base/data.pyR&      s    		&
c         C   s   |  j  |  } d  } | d  k	 ry |  j |  } | j d k rX | d  d   d  f } n  | j d k ry t d   qy n  | | f S(   Ni   i   s   exog is not 1d or 2d(   t	   _get_yarrR   t	   _get_xarrR   Rr   (   R4   R*   R,   t   yarrt   xarr(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR.   4  s    c         C   sX   |  j  } |  j |  } | s0 t |  j  } n  t |  d k rJ | d St |  Sd  S(   Ni   i    (   R+   t
   _get_namest   _make_endog_namesR*   R   t   list(   R4   R*   t   ynames(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   B  s    	c         C   sJ   |  j  } | d  k	 rF |  j |  } | s< t |  j  } n  t |  Sd  S(   N(   R-   R   R   t   _make_exog_namesR,   R   (   R4   R,   t   xnames(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   N  s    	
c         C   s   |  j  p |  j S(   N(   t   _param_namesR   (   R4   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   param_namesX  s    c         C   s   | |  _  d  S(   N(   R   (   R4   Rb   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   ]  s    c         C   sC   |  j  } | d  k	 r' |  j |  } n |  j } |  j |  } | S(   N(   R-   R   t   _get_row_labelsR+   (   R4   R,   t
   row_labelsR*   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   a  s    		c         C   s   d  S(   N(   R   (   R4   t   arr(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   k  s    c         C   s   t  | t  r^ t  | j t  rN g  | j D] } d j d   | D  ^ q+ St | j  SnK t  | t  r | j r | j g Sd  Sn" y | j j	 SWn t
 k
 r n Xd  S(   NRN   c         s   s   |  ] } | r | Vq d  S(   N(    (   t   .0t   level(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pys	   <genexpr>r  s    (   t
   isinstanceR   t   columnsR   RH   R   R   t   nameR   t   namest   AttributeErrorR   (   R4   R   t   c(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   n  s    *	
c         C   s   t  j |  r! t  j |  } n  t j |  } t |  d k r} | j d k rU | S| j d k r} t j | j   g  Sn  | j   S(   Ni   (   t	   data_utilt   _is_structured_ndarrayt   struct_to_ndarrayR   R   R   R   R   (   R4   R*   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s.   t  j |  r! t  j |  } n  t j |  S(   N(   R   R   R   R   R   (   R4   R,   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   sC   |  j  d  k	 r? t |  j   t |  j  k r? t d   q? n  d  S(   Ns+   endog and exog matrices are different sizes(   R,   R   R   R*   Rr   (   R4   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR2     s    R   c         C   s   | d k r |  j  |  S| d k r2 |  j |  S| d k rK |  j |  S| d k rd |  j |  S| d k r} |  j |  S| d k r |  j |  S| d k r |  j | |  S| d k r |  j | |  S| d	 k r |  j |  S| Sd  S(
   NR   t   rowst   covt   datest
   columns_eqt   cov_eqt   generic_columnst   generic_columns_2dR   (	   t   attach_columnst   attach_rowst
   attach_covt   attach_datest   attach_columns_eqt   attach_cov_eqt   attach_generic_columnst   attach_generic_columns_2dt   attach_ynames(   R4   t   objt   howR   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   wrap_output  s&    c         C   s   | S(   N(    (   R4   t   result(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | S(   N(    (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | S(   N(    (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | S(   N(    (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | S(   N(    (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | S(   N(    (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         O   s   | S(   N(    (   R4   R   t   argsR7   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         O   s   | S(   N(    (   R4   R   R   R7   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | S(   N(    (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    N(%   t   __name__t
   __module__t   __doc__R   R   R:   R?   RQ   R1   t   classmethodRk   Rl   R&   R.   R
   R   R   t   propertyR   t   setterR	   R   R   R   R   R   R2   R   R   R   R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR!   2   s<   			<{	

													t	   PatsyDatac           B   s   e  Z d    Z RS(   c         C   s
   | j  j S(   N(   R#   t   column_names(   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    (   R   R   R   (    (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s   t
   PandasDatac           B   s   e  Z d  Z d d  Z e d    Z e d    Z d   Z d   Z	 d   Z
 d d  Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z RS(   s^   
    Data handling class which knows how to reattach pandas metadata to model
    results
    c         C   s   t  j |  } | d  k r! | n t  j |  } | j t k sZ | d  k	 ri | j t k ri t d   n  t t |   j | |  S(   NsR   Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).(	   R   R   R   R   t   objectRr   t   superR   R.   (   R4   R*   R,   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR.     s
    !*c         C   s=   t  | t t f  r  | j | St t |   j | |  Sd  S(   N(   R   R   R   t   locR   R   Rk   (   Ri   R   Rj   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyRk     s    c         C   sP   t  | t t f  r3 | j | j d  d   | f St t |   j | |  Sd  S(   N(   R   R   R   R   R   R   Rl   (   Ri   R   Rj   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyRl     s    c         C   s   |  j  |  j } } | d  k	 rh t | d  rh t | d  rh |  j  j j |  j j  rh t d   n  t t |   j	   d  S(   Nt   indexs.   The indices for endog and exog are not aligned(
   R+   R-   R   R   R   t   equalsRr   R   R   R2   (   R4   R*   R,   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR2     s    c         C   s*   y | j  SWn t k
 r% |  j j  SXd  S(   N(   R   R   R+   (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s"   t  |  | d   } t | d | S(   NR   (   t   getattrR   R   (   R4   R   R   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   sF   | p	 | } t  |  | d   } t  |  | d   } t | d | d | S(   NR   R   (   R   R   R   (   R4   R   t   rownamest   colnames(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s9   | j  d k r" t | d |  j St | d |  j Sd  S(   Ni   R   (   R   R   R   R   (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   	  s    c         C   s   t  | d |  j d |  j S(   NR   R   (   R   R   R   (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   t  | d |  j d |  j S(   NR   R   (   R   R   (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   t  | d |  j d |  j S(   NR   R   (   R   R   (   R4   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | j    } t j |  j d d j d } | d k rb | j | f k rb | d  d  d   f } n  | j d k  r t | d |  j t	 |  St
 | d |  j t	 |  d |  j Sd  S(   Nt   ndmini   i    i   R   R   (   R   R   RX   R   R\   R   R   R   R   R   R   (   R4   R   t   squeezedt   k_endog(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s    c         C   s   | j    } t j |  j d d j d } | d k rb | j | f k rb | d  d  d   f } n  | j d k  r t | d |  j St	 | d |  j d |  j Sd  S(   NR   i   i    i   R   R   (
   R   R   RX   R   R\   R   R   R   t   predict_datesR   (   R4   R   R   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   *  s    c         C   sE   | j    } | j d k  r. t | d |  j St | d |  j Sd  S(   Ni   R   R   (   R   R   R   R   R   (   R4   R   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   6  s    N(   R   R   R   R   R.   R   Rk   Rl   R2   R   R   R   R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR     s   												c         C   s`   |  j  d k s" |  j d d k r. d g } n. g  t |  j d  D] } d | d ^ qB } | S(   Ni   R   s   y%d(   R   R\   R   (   R*   R   t   i(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   ?  s    ".c         C   s   |  j  d  } | d k j   rm | j   } g  t d |  j d  D] } d | ^ qD } | j | d  n1 g  t d |  j d d  D] } d | ^ q } | S(   Ni    i   s   x%dt   const(   t   varR   t   argminR   R\   t   insert(   R,   t   exog_varR/   R   t
   exog_names(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   H  s    -1R"   c         K   s`   t  |  |  } | d k rG t d |  d |  } | j |  | d  f S| j |  | d | | S(   NR"   R*   R,   R5   (   t   handle_data_class_factoryRs   R)   R   R&   (   R*   R,   R5   R7   t   klasst   ret_dict(    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR&   V  s    
c         C   s   t  j |  |  r t } ns t  j |  |  r6 t } nX t  j |  |  rQ t } n= t  j |  |  rl t } n" t d t	 |   t	 |  f   | S(   s   
    Given inputs
    s%   unrecognized data structures: %s / %s(
   R   t   _is_using_ndarray_typeR!   t   _is_using_pandasR   t   _is_using_patsyR   t   _is_using_ndarrayRr   t   type(   R*   R,   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyR   _  s    				c      	   K   s|   t  |  t t f  r' t j |   }  n  t  | t t f  rN t j |  } n  t |  |  } | |  d | d | d | | S(   NR,   R5   R6   (   R   R   t   tupleR   R   R   (   R*   R,   R5   R6   R7   R   (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   handle_datar  s    ($   R   t   statsmodels.compat.pythonR    R   R   R   R   t   numpyR   t   pandasR   R   R   R   t   statsmodels.tools.datat   toolsRL   R   t   statsmodels.tools.decoratorsR	   R
   t   statsmodels.tools.sm_exceptionsR   R   R   R    R   R!   R   R   R   R   R   R&   R   R   (    (    (    s4   lib/python2.7/site-packages/statsmodels/base/data.pyt   <module>   s$   ("			 o					