ó
x\c           @   s/  d  d l  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	 m
 Z
 d  d l j j Z d  d l m Z d  d l m Z m Z d  d l j j Z d  d l m Z m Z d  d l j Z d  d l m Z d	   Z d
   Z e j d e  f d     Y Z! d d  Z" d   Z# d S(   i˙˙˙˙N(   t   random(   t	   iteritemst   zip(   t   cache_readonly(   t   is_list_like(   t	   DataFramet   Series(   t"   assert_is_valid_plot_return_objectt   ensure_clean(   t   _flattenc          C   s9   y d d l  m }  Wn t k
 r4 t j d  n Xd  S(   Ni˙˙˙˙(   t   gaussian_kdes*   scipy version doesn't support gaussian_kde(   t   scipy.statsR
   t   ImportErrort   pytestt   skip(   R
   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _skip_if_no_scipy_gaussian_kde   s    c         C   s<   |  d k r8 y d d l  m } Wq8 t k
 r4 t SXn  t S(   Nt   kdet   densityi˙˙˙˙(   R
   (   R   R   (   R   R
   R   t   Falset   True(   t   kindR
   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _ok_for_gaussian_kde&   s    t   TestPlotBasec           B   sţ   e  Z d    Z d   Z e d    Z e d    Z d e d  Z	 d   Z
 e d  Z d   Z d d d d  Z d	   Z d d d d d
  Z d d d  Z d d d d  Z d   Z d   Z d d d  Z d e d  Z i  d  Z d d  Z RS(   c         C   sĹ  d d  l  } | j   t j j   |  _ t j j   |  _ t j j   |  _	 t j j
   |  _ t j j   |  _ d |  _ d |  _ d |  _ d |  _ d } t j d  Š t j j d	 d
 g d | } t j j d d d g d | } t i | d 6| d 6t j d d d | d 6t j d d d | d 6t j d d | d 6 |  _ Wd  QXt j   |  _ t i t j j d d  d 6t j j d d  d 6t j d  t j j d d  d 6 |  _ d  S(   Ni˙˙˙˙i   i   g@g333333@t   leftid   i*   t   Malet   Femalet   sizet   At   Bt   Ct   gendert	   classroomiB   i   t   heightiĄ   i    t   weightt   categoryi   (   g@g333333@(    t
   matplotlibt
   rcdefaultst   plottingt   _compatt   _mpl_ge_2_0_1t   mpl_ge_2_0_1t   _mpl_ge_2_1_0t   mpl_ge_2_1_0t   _mpl_ge_2_2_0t   mpl_ge_2_2_0t   _mpl_ge_2_2_2t   mpl_ge_2_2_2t   _mpl_ge_3_0_0t   mpl_ge_3_0_0t   bp_n_objectst   polycollection_factort   default_figsizet   default_tick_positiont   tmt
   RNGContextt   npR    t   choiceR   t   normalt   randintt   hist_dft   makeTimeDataFramet   tdft   uniformt   aranget	   hexbin_df(   t   selft   methodt   mplt   nR   R   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   setup_method3   s2    
				!%c         C   s   t  j   d  S(   N(   R5   t   close(   RA   RB   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   teardown_methodT   s    c         C   s   d d  l  j } | S(   Ni˙˙˙˙(   t   matplotlib.pyplott   pyplot(   RA   t   plt(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyRJ   W   s    c         C   s   d d  l  j } | j S(   Ni˙˙˙˙(   t   matplotlib.colorst   colorst   colorConverter(   RA   RL   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   colorconverter\   s    c         C   s   | r! | d k r! t d   n  |  j |  } xc | D][ } | rz | j   d k	 s[ t  |  j | j   j   |  q7 | j   d k s7 t  q7 Wd S(   sQ  
        Check each axes has expected legend labels

        Parameters
        ----------
        axes : matplotlib Axes object, or its list-like
        labels : list-like
            expected legend labels
        visible : bool
            expected legend visibility. labels are checked only when visible is
            True
        s-   labels must be specified when visible is TrueN(   t   Nonet
   ValueErrort   _flatten_visiblet
   get_legendt   AssertionErrort   _check_text_labelst	   get_texts(   RA   t   axest   labelst   visiblet   ax(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_legend_labelsa   s    c         C   s|   | j    } | j    } d   } t |  t |  k s? t  g  t | |  D] \ } } | | |  ^ qO t j   d S(   s¤   
        Check each axes has identical lines

        Parameters
        ----------
        xp : matplotlib Axes object
        rs : matplotlib Axes object
        c         S   s,   |  j    } | j    } t j | |  d  S(   N(   t
   get_xydataR5   t   assert_almost_equal(   t   xplt   rslt   xpdatat   rsdata(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt
   check_line   s    N(   t	   get_linest   lenRS   R   R5   RF   (   RA   t   xpt   rst   xp_linest   rs_linesRa   R]   R^   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_datay   s    		/c         C   sf   d d l  m } t | |  r9 t |  r9 | g } n  x& | D] } | j   | k s@ t  q@ Wd S(   s   
        Check each artist is visible or not

        Parameters
        ----------
        collections : matplotlib Artist or its list-like
            target Artist or its list or collection
        visible : bool
            expected visibility
        i˙˙˙˙(   t
   CollectionN(   t   matplotlib.collectionsRi   t
   isinstanceR   t   get_visibleRS   (   RA   t   collectionsRX   Ri   t   patch(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_visible   s    c         C   s?   | j    } t t | |   } g  | j D] } | | ^ q+ S(   N(   t   uniquet   dictR   t   values(   RA   t   seriesRL   Rp   t   mappedt   v(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _get_colors_mappedĄ   s    c         C   s-  d d l  m } d d l m } m } m } |  j }	 | d k	 r;| d k	 rr |  j | |  } | t	 |   } n  t	 |  t	 |  k s t
  x¨ t | |  D] \ }
 } t |
 |  rŮ |
 j   } |	 j |  } n: t |
 | | f  rt |
 j   d  } n |
 j   } |	 j |  } | | k s  t
  q  Wn  | d k	 r)| d k	 rx|  j | |  } | t	 |   } n  t	 |  t	 |  k st
  x t | |  D]| \ }
 } t |
 |  rÔ|
 j   d } n |
 j   } t | t j  rt |  } n  |	 j |  } | | k sŚt
  qŚWn  d S(   s3  
        Check each artist has expected line colors and face colors

        Parameters
        ----------
        collections : list-like
            list or collection of target artist
        linecolors : list-like which has the same length as collections
            list of expected line colors
        facecolors : list-like which has the same length as collections
            list of expected face colors
        mapping : Series
            Series used for color grouping key
            used for andrew_curves, parallel_coordinates, radviz test
        i˙˙˙˙(   t   Line2D(   Ri   t   PolyCollectiont   LineCollectioni    N(   t   matplotlib.linesRw   Rj   Ri   Rx   Ry   RN   RO   Rv   Rc   RS   R   Rk   t	   get_colort   to_rgbat   tuplet   get_edgecolort   get_facecolorR7   t   ndarray(   RA   Rm   t
   linecolorst
   facecolorst   mappingRw   Ri   Rx   Ry   t   convRn   t   colort   resultt   expected(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_colors¨   s<    	c         C   s   t  |  s' | j   | k s t  no g  | D] } | j   ^ q. } t |  t |  k sd t  x/ t | |  D] \ } } | | k st t  qt Wd S(   s.  
        Check each text has expected labels

        Parameters
        ----------
        texts : matplotlib Text object, or its list-like
            target text, or its list
        expected : str or list-like which has the same length as texts
            expected text label, or its list
        N(   R   t   get_textRS   Rc   R   (   RA   t   textsR   t   tRW   t   labelt   e(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyRT   ç   s    c   
      C   s  d d l  m } |  j |  } xh| D]`} | s8 | rŮ t | j j   |  r_ | j   } n | j   | j d t  } x[ | D]P }	 | d k	 r­ t	 j
 |	 j   |  n  | d k	 r t	 j
 |	 j   |  q q Wn  | sĺ | r& t | j j   |  r| j   } n | j   | j d t  } x[ | D]P }	 | d k	 rZt	 j
 |	 j   |  n  | d k	 r/t	 j
 |	 j   |  q/q/Wq& q& Wd S(   s  
        Check each axes has expected tick properties

        Parameters
        ----------
        axes : matplotlib Axes object, or its list-like
        xlabelsize : number
            expected xticks font size
        xrot : number
            expected xticks rotation
        ylabelsize : number
            expected yticks font size
        yrot : number
            expected yticks rotation
        i˙˙˙˙(   t   NullFormattert   minorN(   t   matplotlib.tickerR   RQ   Rk   t   xaxist   get_minor_formattert   get_xticklabelsR   RO   R5   R\   t   get_fontsizet   get_rotationt   yaxist   get_yticklabels(
   RA   RV   t
   xlabelsizet   xrott
   ylabelsizet   yrotR   RY   RW   R   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_ticks_propsú   s2    

 

t   linearc         C   sZ   |  j  |  } xD | D]< } | j j   | k s7 t  | j j   | k s t  q Wd S(   s  
        Check each axes has expected scales

        Parameters
        ----------
        axes : matplotlib Axes object, or its list-like
        xaxis : {'linear', 'log'}
            expected xaxis scale
        yaxis :  {'linear', 'log'}
            expected yaxis scale
        N(   RQ   R   t	   get_scaleRS   R   (   RA   RV   R   R   RY   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_ax_scales,  s    c         C   sć   | d k r |  j } n  |  j |  } | d k	 r} t |  | k sK t  x/ | D]$ } t | j    d k sR t  qR Wn  | d k	 rł |  j t |   } | | k sł t  n  t j	 | d j
 j   t j | d t j  d S(   sĎ  
        Check expected number of axes is drawn in expected layout

        Parameters
        ----------
        axes : matplotlib Axes object, or its list-like
        axes_num : number
            expected number of axes. Unnecessary axes should be set to
            invisible.
        layout :  tuple
            expected layout, (expected number of rows , columns)
        figsize : tuple
            expected figsize. default is matplotlib default
        i    t   dtypeN(   RO   R3   RQ   Rc   RS   t   get_childrent   _get_axes_layoutR	   R5   t   assert_numpy_array_equalt   figuret   get_size_inchesR7   t   arrayt   float64(   RA   RV   t   axes_numt   layoutt   figsizet   visible_axesRY   R   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_axes_shape=  s    %c         C   su   t    } t    } xJ | D]B } | j   j   } | j | d d  | j | d d  q Wt |  t |  f S(   Ni    i   (   t   sett   get_positiont
   get_pointst   addRc   (   RA   RV   t   x_sett   y_setRY   t   points(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyR˘   _  s    		c         C   s5   t  |  } g  | D] } | j   r | ^ q } | S(   s   
        Flatten axes, and filter only visible

        Parameters
        ----------
        axes : matplotlib Axes object, or its list-like

        (   R	   Rl   (   RA   RV   RY   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyRQ   i  s    	%i    c         C   s¸   |  j  |  } x˘ | D] } | j } d } d } xX | D]P } t | d t  }	 t | d t  }
 |	 ru | d 7} n  |
 r8 | d 7} q8 q8 W| | k s t  | | k s t  q Wd S(   s  
        Check axes has expected number of errorbars

        Parameters
        ----------
        axes : matplotlib Axes object, or its list-like
        xerr : number
            expected number of x errorbar
        yerr : number
            expected number of y errorbar
        i    t   has_xerrt   has_yerri   N(   RQ   t
   containerst   getattrR   RS   (   RA   RV   t   xerrt   yerrRY   Rś   t
   xerr_countt
   yerr_countt   cR´   Rľ   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_has_errorbarsv  s    	c         C   s9  d d l  m } i t d 6| d 6t d 6} | d k r§ | d k rL d } n  t | | |  se t  | d k r5t | j |  s t  t | j t  s¤ t  q5n| d k rć x, |  j	 |  D] } t | |  sĂ t  qĂ Wd St | t
  sű t  t | j    t |  k st  xt |  D]\ } }	 t |	 | |  sQt  | d k r| r1|	 j   | k s~t  q1q,| d k rä| rą|	 j j   | k sąt  n  t |	 j |  sÉt  t |	 j t  s1t  q,| d k r+|	 d d }
 |
 j } | r1| j   | k s(t  q1q,t  q,Wd S(	   st  
        Check box returned type is correct

        Parameters
        ----------
        returned : object to be tested, returned from boxplot
        return_type : str
            return_type passed to boxplot
        expected_keys : list-like, optional
            group labels in subplot case. If not passed,
            the function checks assuming boxplot uses single ax
        check_ax_title : bool
            Whether to check the ax.title is the same as expected_key
            Intended to be checked by calling from ``boxplot``.
            Normal ``plot`` doesn't attach ``ax.title``, it must be disabled.
        i˙˙˙˙(   t   AxesRq   RV   t   bothNt   mediansi    (   t   matplotlib.axesRž   Rq   R}   RO   Rk   RS   RY   t   linesRQ   R   t   sortedt   keysR   t	   get_titleRV   (   RA   t   returnedt   return_typet   expected_keyst   check_ax_titleRž   t   typest   rt   keyt   valuet   lineRV   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_box_return_type  s>    	$	c            sá  d d  l  }   f d   } d } xš| D]ą} t |  s@ q( n    j j d d t |  |  | d 7} | j d d t | j d | |  |   s  t    j j d d t |  |  | d 7} | j d d t	 | j d | d t |  |   st  | d k r(   j j d d t |  |  | d 7} | j d d t	 | j d | |  |   sqt    j j d d t |  |  | d 7} | j d d t | j d | d t	 |  |   sŮt  q( q( Wd  S(	   Ni˙˙˙˙c             s[   t  d     j j   j j   D  }  t  d     j j   j j   D  } |  oY | S(   Nc         s   s   |  ] } | j  Vq d  S(   N(   t   gridOn(   t   .0t   g(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pys	   <genexpr>Ń  s   c         s   s   |  ] } | j  Vq d  S(   N(   RĐ   (   RŃ   RŇ   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pys	   <genexpr>Ó  s   (   t   allRJ   t   gcaR   t   get_major_ticksR   (   t   xofft   yoff(   RA   (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt
   is_grid_onĐ  s
    		i   i   RV   t   gridR   t   pie(
   R#   R   RJ   t   subplotRc   t   rcR   t   plotRS   R   (   RA   t   objt   kindst   kwsRC   RŘ   t   spndxR   (    (   RA   s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_grid_settingsË  s6     
 
 
 
R   c         C   s   g  | d D] } | | ^ q S(   sT   
        Auxiliary function for correctly unpacking cycler after MPL >= 1.5
        s   axes.prop_cycle(    (   RA   t   rcParamst   fieldRu   (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _unpack_cyclerő  s    N(   t   __name__t
   __module__RE   RG   R   RJ   RN   RO   R   RZ   Rh   Ro   Rv   R   RT   R   R   RŹ   R˘   RQ   R˝   RĎ   Râ   Rĺ   (    (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyR   0   s.   	!			>	1!	
	9*t   alwaysc      
   K   s!  d d  l  j } d  } t j   ú t j |  zÓ y | d } Wn t k
 r_ | j   } n X| j   | j	 d | j
 d   } |  |   } t |  y# | j
 d  | d <|  |   } Wn t k
 rŃ n Xt |  t d t   } | j |  Wd  QXWd  t j |  X| SWd  QXd  S(   Ni˙˙˙˙R¤   RY   iÓ   iÔ   t   return_filelike(   RH   RI   RO   t   warningst   catch_warningst   simplefiltert   KeyErrort   gcft   clft   gett   add_subplotR   t	   ExceptionR   R   t   savefigR5   RF   (   t   ft   filterwarningst   kwargsRJ   t   rett   figRY   t   path(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   _check_plot_worksü  s.    


c          C   s(   t  j j t  j j t   \ }  } |  S(   N(   t   osRů   t   splitt   abspatht   __file__(   t   ptht   _(    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   curpath  s    $($   Rű   Rę   t   numpyR7   R    R   t   pandas.compatR   R   t   pandas.util._decoratorsR   t   pandas.util._test_decoratorst   utilt   _test_decoratorst   tdt   pandas.core.dtypes.apiR   t   pandasR   R   t   pandas.util.testingt   testingR5   R   R   t   pandas.plottingR%   t   pandas.plotting._toolsR	   R   R   t   skip_if_no_mplt   objectR   Rú   R  (    (    (    s;   lib/python2.7/site-packages/pandas/tests/plotting/common.pyt   <module>   s(   		
	˙ Ě"