ó
áp7]c           @   sµ   d  Z  d d l Z d d l Z d d l m Z d d l Z d d l m Z m	 Z	 d d l
 Z d d l j j Z d e f d „  ƒ  YZ d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d S(   sí   Testing helper functions

Warning: current status experimental, mostly copy paste

Warning: these functions will be changed without warning as the need
during refactoring arises.

The first group of functions provide consistency checks

iÿÿÿÿN(   t   LooseVersion(   t   assert_allcloset   assert_t   PytestTesterc           B   s#   e  Z d d  „ Z d e d „ Z RS(   c         C   s   t  j d ƒ } | d  k rN | j j d d  ƒ } | d  k rN t d ƒ ‚ qN n  t j j | ƒ |  _	 | j j d d  ƒ |  _
 d  S(   Ni   t   __file__s   Unable to determine patht   __name__(   t   syst	   _getframet   Nonet   f_localst   gett
   ValueErrort   ost   patht   dirnamet   package_patht   package_name(   t   selfR   t   f(    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   __init__   s    c         C   sº   y– d d  l  } t | j ƒ t d ƒ k s3 t ‚ n  | d  k rN d d g } n  |  j g | } d d j | ƒ GH| j | ƒ } | r• t j	 | ƒ n  Wn t k
 rµ t d ƒ ‚ n Xd  S(   Niÿÿÿÿs   3.0s
   --tb=shorts   --disable-pytest-warningss   Running pytest t    s"   pytest>=3 required to run the test(
   t   pytestR    t   __version__t   ImportErrorR   R   t   joint   mainR   t   exit(   R   t
   extra_argsR   R   t   cmdt   status(    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   __call__    s    	N(   R   t
   __module__R   R   t   FalseR   (    (    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyR      s   	c         C   s…   t  |  t j ƒ r% t j |  | ƒ n\ t  |  t j ƒ rJ t j |  | ƒ n7 t  |  t j ƒ ro t j |  | ƒ n t	 t
 |  ƒ ƒ ‚ d S(   sV  
    pandas >= 0.24.0 has `tm.assert_equal` that works for any of
    Index, Series, and DataFrame inputs.  Until statsmodels requirements
    catch up to that, we implement a version of that here.

    Parameters
    ----------
    left : pd.Index, pd.Series, or pd.DataFrame
    right : object

    Raises
    ------
    AssertionError
    N(   t
   isinstancet   pdt   Indext   tmt   assert_index_equalt   Seriest   assert_series_equalt	   DataFramet   assert_frame_equalt	   TypeErrort   type(   t   leftt   right(    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   assert_equal0   s    c         C   se  |  } t  j t | j ƒ ƒ } | j | ƒ } t | j | j d d ƒt t  j | j ƒ | j	 d d ƒt t  j | j
 ƒ | j d d ƒt | j | j d d ƒt | j ƒ  | j ƒ  d d ƒt  j | j | j	 | j | j | j ƒ  f ƒ } | j ƒ  j } t | | d d ƒt t | d ƒ ƒ | j | d ƒ } | j ƒ  t | j | j d d d ƒd  S(   Nt   rtolgê-™—q=g»½×Ùß|Û=g•Ö&è.>t   use_ti    (   t   npt   eyet   lent   paramst   t_testR   t   effectt   squeezet   sdt   bset   tvaluet   tvaluest   pvaluet   pvaluest   conf_intt   column_stackt   summary_framet   valuesR   t   hasattrt   summary(   t   resultst   rest   matt   ttt	   table_rest   table2(    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   check_ttest_tvaluesI   s     ""
c   	      C   sD  |  } | j  } t | j ƒ } g  t | ƒ D]+ } | j t j | ƒ | d | ƒj ^ q+ } t | | j	 d d d d ƒg  t | ƒ D]% } | j t j | ƒ | ƒ j ^ q… } t | | j	 d d d d ƒ| t
 k rÞ d n d } t | j ƒ  ƒ } t | | k ƒ y t | j ƒ  ƒ } Wn t k
 r/n Xt | | k ƒ d S(	   sN  
    Check that the outputs of `res.wald_test` produces pvalues that
    match res.pvalues.

    Check that the string representations of `res.summary()` and (possibly)
    `res.summary2()` correctly label either the t or z-statistic.

    Parameters
    ----------
    results : Results

    Raises
    ------
    AssertionError
    t   use_fR/   g•Ö&è.>t   atolgÙ}ÚõÐò¾:s   P>|z|s   P>|t|N(   R0   R3   R4   t   ranget	   wald_testR1   R2   R<   R   R=   R    t   strRC   R   t   summary2t   AttributeError(	   RD   RE   R0   t   k_varst   kt   pvalst   string_use_tt   summt   summ2(    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   check_ftest_pvaluese   s"    	;5c         C   s¾   d d  l  } d d l m } d d l m } t |  d |  ƒ }  t |  | | f ƒ rr | j d j t	 |  ƒ ƒ ƒ n  |  } | j
 } t | j j | | j d d ƒt | | j ƒ  d d ƒd  S(   Niÿÿÿÿ(   t
   GLMResults(   t   DiscreteResultst   _resultss   Not supported for {0}R/   gê-™—q=(   R   t+   statsmodels.genmod.generalized_linear_modelRY   t#   statsmodels.discrete.discrete_modelRZ   t   getattrR!   t   skipt   formatR+   t   fittedvaluesR   t   modelt   endogt   residt   predict(   RD   R   RY   RZ   RE   t   fitted(    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   check_fitted‘   s    	 c         C   sì  |  } t  j t  j | j j d  ƒ ƒ } d d l m } d d l m } t	 |  d |  ƒ }  t
 |  | | f ƒ r© | j | ƒ | j | j ƒ  ƒ | j | d j ƒ  ƒ n?| j d  } t | | j | ƒ d d ƒt | | j t  j | ƒ j ƒ  ƒ d d ƒt | d	  | j | d j ƒ  ƒ d d ƒt | d	  | j | d ƒ d d ƒt t | ƒ ƒ } | j | ƒ } | j d	 k r„t j n t j } | j | | d
 | ƒƒ }	 | j d	 k rÀt j n t j } | | d
 | ƒ}
 t |
 |	 ƒ d S(   sÊ   
    Check that the `predict` method of the given results object produces the
    correct output type.

    Parameters
    ----------
    results : Results

    Raises
    ------
    AssertionError
    i   iÿÿÿÿ(   RY   (   RZ   R[   i    R/   gê-™—q=i   t   indexN(   R1   R7   t   asarrayRb   t   exogR\   RY   R]   RZ   R^   R!   Re   t   tolistRa   R   RM   R3   t   ndimR"   R&   R(   R.   (   RD   RE   t   p_exogRY   RZ   Rf   t
   exog_indext	   predictedt   clst   predicted_pandast   predicted_expected(    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   check_predict_types¤   s0    "$#!!(   t   __doc__R   R   t   distutils.versionR    t   numpyR1   t   numpy.testingR   R   t   pandasR"   t   pandas.util.testingt   utilt   testingR$   t   objectR   R.   RJ   RX   Rg   Rs   (    (    (    s9   lib/python2.7/site-packages/statsmodels/tools/_testing.pyt   <module>
   s   			,	