ó
áp7]c           @   sB  d  d l  m Z d  d l m Z m Z m Z m Z m Z d  d l m	 Z	 d  d l
 m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z y d  d l j Z Wn e k
 rØ n Xd  d	 l m Z d  d
 l m Z d  d l m Z d  d l m  Z  d  d l m! Z! d  d l m" Z" e j# j$ d „  ƒ Z% e j# j$ d „  ƒ Z& e j# j$ d „  ƒ Z' e j# j$ d „  ƒ Z( e j# j$ d „  ƒ Z) e j# j* e j# j$ d „  ƒ ƒ Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 e j# j$ d „  ƒ Z5 e j# j$ d „  ƒ Z6 d S(    iÿÿÿÿ(   t   division(   t   iterkeyst   zipt   lranget	   iteritemst   range(   t   OrderedDict(   t   BytesIO(   t   productN(   t   assert_t   assert_raises(   t   datasets(   t   mosaic(   t   _hierarchical_split(   t   _reduce_dict(   t   _key_splitting(   t   _normalize_split(   t   _split_rectc      
   C   sv  d d  l  } t j d d ƒ \ } } i d d 6d d 6d d 6} t | d | d% d
 d d t ƒ| j | ƒ } t | d | d& d
 d d t ƒd d d g } t | d | d' d
 d d t ƒt j | ƒ } t | d | d( d
 d d t ƒi d d) 6d d* 6d d+ 6d d, 6} t | d | d- d
 d d t ƒt | d | d. d
 d d d d	 g d t ƒ| j | ƒ } t | d | d/ d
 d d t ƒt | d | d0 d
 d d d d	 g ƒd d g d d g g } t | d | d1 d
 d d t ƒt | d | d2 d
 d d d d	 g ƒt j d d g d d g g ƒ } t | d | d3 d
 d d t ƒt | d | d4 d
 d d d d	 g d t ƒd d d d d d g } d d d d d d g } | j	 i | d 6| d 6ƒ } t | d g d | d5 d
 d  d t ƒt | d g d | d6 d
 d! d t ƒt | d d g d | d7 d
 d" d t ƒt | d d g d | d8 d
 d# d t ƒt j
 d$ ƒ d  S(9   Niÿÿÿÿi   i   t   axi   t   bxi   t   cxi    t   titles
   basic dictt
   axes_labels   basic seriess
   basic lists   basic arrayt   dxs   compound dicts   inverted keys dictt   indexs   compound seriess   inverted keys seriess   compound lists   inverted keys lists   compound arrays   inverted keys arrayt   malet   femalet   catt   dogt   gendert   pets   dataframe by key 1s   dataframe by key 2s	   both keyss   keys inverteds%   testing data conversion (plot 1 of 4)(   i    i    (   i    i   (   i    i   (   i    i   (   R   R   (   R   R   (   R   R   (   R   R   (   i   i    (   i   i    (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i    (   i   i   (   i   i   (   i   i   (   t   pandast   pltt   subplotsR   t   Falset   Seriest   npt   asarrayt   arrayt	   DataFramet   suptitle(   t   close_figuresR   t   _R   t   dataR   R   (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_data_conversion!   s<        " , & &! ,&&))c         C   s  d d g d d d g d d g d d	 g f } t  t | Œ  ƒ } t t | t d
 d
 t | ƒ ƒ ƒ ƒ } i  } i d d 6| d <i d d 6| d <x\ | D]T } d	 | k r– d | k rÏ i d d 6d d 6| | <qê i d d 6d d 6| | <q– q– Wt | d d d | d t ƒt j	 d ƒ d  S(   NR   R   t   oldt   adultt   youngt   workert
   unemployedt   healtyt   illi   t   bt   colort   rt
   BlueViolett   +t   hatcht   Crimsont   gapgš™™™™™©?t
   propertiesR   s)   syntetic data, 4 categories (plot 2 of 4)(   R   (   R   (
   t   listR   R   R   R   t   lenR   R"   R    R(   (   R)   t   key_sett   keysR+   t   propst   key(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_mosaic_simpleJ   s    (c      	   C   sÍ  t  j j ƒ  } | j } | j d k | d <| j d d g ƒ } i d d 6d d 6d	 d
 6d d 6d d 6} | d j | ƒ | d <i d d 6d d 6d d
 6d d 6} | d j | ƒ | d <i d t 6d t 6} | d j | ƒ | d <t	 j
 d d ƒ \ } } t | d d g d | d d d ƒt | d d g d | d  d d ƒt | d d d g d | d! d d d d „  ƒ| d" j d ƒ | d# j d ƒ t | d d g d | d$ d d d t ƒt	 j d ƒ d  S(%   Ni    t   cheatedt   rate_marriaget	   religioust   awfuli   t   badi   t   intermediatei   t   goodi   t	   wonderfuli   s   non religiouss   poorly religiouss   very religioust   faithfulR   R   s   by marriage happinesss   by religiositys   by botht	   labelizerc         S   s   d S(   Nt    (    (   t   k(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   <lambda>„   RN   s   marriage ratings   religion statuss   inter-dependenceR   s"   extramarital affairs (plot 3 of 4)(   i    i    (   i    i   (   i   i    (   i   i    (   i   i    (   i   i   (   R   t   fairt   load_pandast   exogt   endogt   sort_valuest   mapR"   t   TrueR    R!   R   t
   set_xlabelt
   set_ylabelR(   (   R)   t   affairst   datast   num_to_desct   num_to_faitht   num_to_cheatR*   R   (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_mosaicg   s0    	
c            sº  d d d d g } d d g d d g d	 d
 g d d g f } t  t | Œ  ƒ } t t | t d d t | ƒ ƒ ƒ ƒ } i  } i d d 6| d <i d d 6| d <t | ƒ } t j | | ƒ \ } } xät | ƒ D]Ö}	 xÍt | ƒ D]¿}
 t t | ƒ ƒ j	 t |	 |
 f ƒ ƒ } |	 |
 k r§| |	 |	 f j
 d d | |	 d d d d ƒ| |	 |	 f j g  ƒ | |	 |	 f j g  ƒ | |	 |	 f j g  ƒ | |	 |	 f j g  ƒ qâ t |	 |
 ƒ } t |	 |
 ƒ } t g  t | ƒ D]@ \ ‰  } ˆ  | ˆ  | f t ‡  f d †  | Dƒ ƒ | f ^ qÕƒ } t  t | ƒ ƒ } x6 | D]. ‰  t | ˆ  d  ƒ } | | ˆ  d  <| ˆ  =q7Wt | d | |	 |
 f d t d | d d d |	 |
 k ƒqâ WqÏ Wt j d ƒ d  S(   NR   t   aget   healtht   workR   R   R-   R/   R2   R3   R1   i   R6   R5   t   pinkg      à?t   hat   centert   vac         3   s   |  ] } ˆ  | Vq d  S(   N(    (   t   .0R6   (   RO   (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pys	   <genexpr>¨   s    i   R   R   R<   R;   gš™™™™™©?t
   horizontals0   old males should look bright red,  (plot 4 of 4)(   R   R-   (   R   (   R=   R   R   R   R   R>   R    R!   t   sett
   differencet   textt
   set_xtickst   set_xticklabelst
   set_ytickst   set_yticklabelst   maxt   minR   t   tupleR   R   R   R"   R(   (   R)   t   key_namet   key_baseR@   R+   RA   t   LR*   t   axest   it   jt   mt   jit   ijt   vt	   temp_datat   value(    (   RO   sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_mosaic_very_complexŒ   s@    (' S!c   	      C   sþ   d d l  m } d d g d d d g d d	 g d
 d g f } t t | Œ  ƒ } t t | | t | ƒ ƒ ƒ ƒ } d „  } t j d d d d ƒ\ } \ } } t	 | d | d | d t
 d d ƒt	 | d | d | d t d d d d d g ƒ| j d ƒ d  S(   Niÿÿÿÿ(   t   randR   R   R-   R.   R/   R0   R1   t   yest   noc         S   s   d j  d „  |  Dƒ ƒ S(   NRN   c         s   s   |  ] } | d  Vq d S(   i    N(    (   Rg   t   s(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pys	   <genexpr>¾   s    (   t   join(   RO   (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyRP   ¾   RN   i   i   t   figsizei   i   R   RM   Rh   t   label_rotationi-   i    iZ   s$   correct alignment of the axes labels(   i   i   (   t   numpy.randomR€   R=   R   R   R   R>   R    R!   R   RW   R"   R(   (	   R)   R€   R?   R@   R+   t   labt   figt   ax1t   ax2(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_axes_labelingµ   s    !	$"c         C   s  d d  l  } | j i i d d 6d d 6d d 6d d 6d	 d
 6d	 d 6d	 d 6d d 6d d 6d d 6d d 6d 6i d d 6d d 6d d 6d d 6d d
 6d d 6d d 6d d 6d d 6d d 6d d 6d 6ƒ } | j | j | j ƒ } t | j j ƒ  ƒ \ } } t | d d g ƒ \ } } d  S(   Niÿÿÿÿt   Angelicai@   t   DXW_UIDiA   t   casuid01iB   iC   t   EC93_uidiD   iE   iF   i<   t   AtmosFoxi=   i>   i?   t   id2t   TGPt   Retention01t   defaultt   Musa_EC_9_3t   id1(   R   R'   t   crosstabR—   R’   R   t   Tt   unstack(   R)   t   pdt   mydatat   ctR*   t   vals(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_mosaic_empty_cellsÇ   s     
c         C   s   t  t j |  | ƒ ƒ S(   N(   R	   R$   t   allclose(   t   xt   y(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyRP   Þ   RN   c          C   sc  t  t d ƒ ƒ }  t t |  d g t |  ƒ ƒ ƒ } t | d d ƒ} t t  t | ƒ ƒ |  k ƒ d | d <d | d <t  t d d
 ƒ ƒ }  t t |  d g t |  ƒ ƒ ƒ } t | d d ƒ} t t  t | ƒ ƒ |  k ƒ d d d d f | d <d d d d f | d <d d d d f | d <d d d d f | d <d d d d f | d  <d d! d d" f | d# <d  S($   Nt   mfi   R;   i    g        g      à?g      ð?Ry   t   ft   yaoi   R¢   t   ai   t   o(   g        g        g      à?g      ð?(   Ry   (   g      à?g        g      à?g      ð?(   R¤   gUUUUUUÕ?(   Ry   R¢   gUUUUUUÕ?gUUUUUUÕ?(   Ry   R¦   gUUUUUUå?gUUUUUUÕ?(   Ry   R§   gUUUUUUÕ?(   R¤   R¢   gUUUUUUÕ?gUUUUUUÕ?(   R¤   R¦   gUUUUUUå?gUUUUUUÕ?(   R¤   R§   (   R=   R   R   R   R>   R   R	   R   (   R@   R+   t   res(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_recursive_splitá   s     "

"c          C   sã   t  t t t d d d ƒ ƒ d g d ƒ ƒ }  t t |  d ƒ d ƒ t t |  d ƒ d	 ƒ t t |  d ƒ d ƒ t  t t t d d d ƒ ƒ t d ƒ ƒ ƒ }  t t |  d ƒ d ƒ t t |  d ƒ d ƒ t t |  d ƒ d ƒ d  S(   NR£   t   oyt   wni   i   Ry   i   R§   i   t   wi   i    (   Ry   (   Ry   R§   (   Ry   R§   R¬   (   Ry   (   Ry   R§   (   Ry   R§   R¬   (   R   R   R=   R   t   eqR   R   (   R+   (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test__reduce_dictô   s    .-c          C   s«  i d t  ƒ  6}  t |  d d g d d g t  ƒ  t d ƒ } t t t | ƒ ƒ d d g k ƒ t | d d ƒ t | d d ƒ t | d d g d d g d t d ƒ } t t t | ƒ ƒ d d d g k ƒ t | d d ƒ t | d d ƒ t | d d ƒ i d d 6}  t |  d d g d d
 g d t d ƒ } t t t | ƒ ƒ g  d d g D] } d  | f ^ qPk ƒ t | d! d d d" d f ƒ t | d# d$ d d% d f ƒ d  S(&   Ni    i   R¦   R4   g      à?t   ct   dg        t   totali   i   (   i    i    i   i   (   R¦   (   R4   (   R¦   (   i    i    g      à?i   (   R4   (   g      à?i    g      à?i   (   R¦   (   R¦   R¯   (   R¦   R°   (   R4   (   R¦   R¯   (   g        g        g      à?g      à?(   R¦   R°   (   g        g      à?g      à?g      à?(   R4   (   g      à?i    g      à?i   (   i    i    i   i   (   R±   (   R±   (   R±   (   R±   R¦   gUUUUUUÕ?(   R±   R4   gUUUUUUÕ?gUUUUUUå?(   Rr   R   RW   R	   R=   R   R­   R"   (   t	   base_rectR¨   t   res_bist   e(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test__key_splittingÿ   s    *"'%'<c          C   sû  t  t d ƒ d d d g ƒ t  t d ƒ d d d g ƒ t  t d ƒ d d d g ƒ t t t d ƒ t t t d d g ƒ t t t d d d g ƒ t t t d g ƒ t t t d d g ƒ t  t d g ƒ d d g ƒ t  t d g ƒ d d g ƒ t  t d g ƒ d d g ƒ x3 d d d g D]" }  t  t |  ƒ d |  d g ƒ q WxG d d d g D]6 \ }  } t  t |  | g ƒ d |  |  | d g ƒ qVWxd d d d g D]S \ }  } } t  t |  | | g ƒ d |  |  | | |  | |  | | d g ƒ q Wd  S(   Ng        g      ð?g       @iÿÿÿÿg      à?g333333Ó?gÍÌÌÌÌÌì?g      Ð?gš™™™™™¹?gš™™™™™é?g      $@g      >@gffffffæ?i(   (   g      Ð?g      à?(   gš™™™™™¹?gš™™™™™é?(   g      $@g      >@(   g      ð?g      ð?g      ð?(   gš™™™™™¹?g      à?gffffffæ?(   g      $@g      >@i(   (   R­   R   R
   t
   ValueError(   R¡   R¢   t   z(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_proportion_normalization  s$     .c          C   s<  d d d d g }  t  d d g d d d t ƒ } t  d d g d d d t ƒ } t t |  | Ž  |  ƒ t t |  | Ž  |  ƒ t  d d g d d d t ƒ } t  d d g d d d t ƒ } t t |  | Ž  |  ƒ t t |  | Ž  |  ƒ d d d d g } t  d d g d d d t ƒ } t t | | Ž  | ƒ t  d d g d d d t ƒ } t t | | Ž  | ƒ d d d d g } t  d d g d d d t ƒ } t t t | | Ž t  d d d g d d d t ƒ } t t t | | Ž t  d d g d d d t ƒ } t t t | | Ž t  d d d g d d d t ƒ } t t t | | Ž d  S(	   Ng        g      ð?t
   proportioni   R;   Rh   g      à?g      ð¿(   t   dictRW   R"   R­   R   R
   R¶   (   t   pure_squaret   conf_ht   conf_vt   null_squaret   conft
   neg_square(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_false_split0  s.    !!c          C   s’  d d d d g }  d d g } t  d d d g d d d t ƒ } t t |  | Ž  | ƒ d d g } t  d d d g d d d t ƒ } t t |  | Ž  | ƒ d d d d f d d d d f g } t  d d d	 g d d d t ƒ } t t |  | Ž  | ƒ d d d d f d d d d f g } t  d d d	 g d d d t ƒ } t t |  | Ž  | ƒ d d d d f d d d d f d d d d f g } t  d d d d g d d d t ƒ } t t |  | Ž  | ƒ d d d d f d d d d f d d d d f g } t  d d d d g d d d t ƒ } t t |  | Ž  | ƒ d d d d f d  d d! d f d" d d# d f g } t  d d d	 d g d d d t ƒ } t t |  | Ž  | ƒ d d d d$ f d d% d d& f d d' d d( f g } t  d d d	 d g d d d t ƒ } t t |  | Ž  | ƒ d d d d g } t  d d d g d d d t ƒ } t t | | Ž  | | g ƒ t  d d d	 g d d d t ƒ } t t | | Ž  | | g ƒ d  S()   Ng        g      ð?g      à?R¹   i   R;   Rh   i   i   i   (   g        g        g      à?g      ð?(   g      à?g        g      à?g      ð?(   g        g        g      ð?g      à?(   g        g      à?g      ð?g      à?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUå?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUå?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUå?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUå?gUUUUUUÕ?g      Ð?g      Ð?g      à?g      è?g      Ð?g      Ð?g      Ð?g      à?g      è?g      Ð?(   Rº   RW   R­   R   R"   (   R»   t   h_2splitR¼   t   v_2splitR½   R¾   R¿   (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_rect_pure_splitP  sD    !!$!$!$$$$$$$$!!c          C   sV  d d d d g }  d d g } t  d d d g d d d	 t ƒ } t t |  | Ž  | ƒ d d g } t  d d d g d d d	 t ƒ } t t |  | Ž  | ƒ d d d d f d d d d d f g } t  d d d g d d d	 t ƒ } t t |  | Ž  | ƒ d d d d f d d d d f g } t  d d d g d d d	 t ƒ } t t |  | Ž  | ƒ d  S(   Ng      ð?g      ð¿g      à?g      ø?R¹   i   R;   g        Rh   g      Ð?g      è¿i   i   i   (   g      ð?g      ð¿g      à?g      à?(   g      ø?g      ð¿g      à?g      à?(   g      ð?g      ð¿g      ð?g      Ð?(   g      ð?g      è¿g      ð?g      Ð?gUUUUUUÕ?gUUUUUUÕ?gUUUUUUå?gUUUUUUÅ?gUUUUUUÅ?g«ªªªªªê¿gUUUUUUÕ?(   Rº   RW   R­   R   R"   (   t   non_pure_squareRÂ   R¼   RÃ   R½   (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_rect_deformed_split‚  s    !!(!$!c          C   sì   d d d d g }  t  d d g d d d t ƒ } t t |  | Ž  |  ƒ d d g } t  d d d g d d d t ƒ } t t |  | Ž  | ƒ d d d d f d
 d d d d f g } t  d d d g d d d t ƒ } t t |  | Ž  | ƒ d  S(   Ng        g      ð?R¹   i   R;   Rh   g      Ð?g      è?i   g      à?i   i   (   g        g        g      Ð?g      ð?(   g      è?g        g      Ð?g      ð?gUUUUUUÅ?gUUUUUUÅ?gUUUUUUÕ?(   Rº   RW   R­   R   (   R»   R¼   RÂ   (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_gap_split—  s    !(!c         C   s^   t  j i d d d d d d g d 6d d d d d d g d 6ƒ } t t t d | d d	 ƒd  S(
   Nt   smallt   larget   sizet   longt   shortt   lengthR+   R   t   foobar(   R›   R'   R
   R¶   R   (   R)   t   df(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_default_arg_index©  s
    
c      
   C   sÕ   d d d d d d d d d d g
 } d d d d d d d d d d g
 } t  j i | d 6| d 6ƒ } t  j | d d d d d g ƒ| d <| j d ƒ } t | d d g ƒ \ } } t ƒ  } | j | d	 d
 ƒd  S(   NR   R   t   mediumRÉ   RÈ   t   animalRÊ   t
   categoriest   formatt   png(   R›   R'   t   CategoricalRU   R   R   t   savefig(   R)   RÒ   RÊ   t   testdataR‰   R*   t   bio(    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   test_missing_category³  s    	(7   t
   __future__R    t   statsmodels.compat.pythonR   R   R   R   R   t   collectionsR   t   ioR   t	   itertoolsR   t   numpyR$   R   R›   t   pytestt   numpy.testingR	   R
   t   statsmodels.apiR   t   matplotlib.pyplott   pyplotR    t   ImportErrort   statsmodels.graphics.mosaicplotR   R   R   R   R   R   t   markt
   matplotlibR,   RC   R_   R   RŒ   t   smokeRŸ   R­   R©   R®   Rµ   R¸   RÁ   RÄ   RÆ   RÇ   RÐ   RÚ   (    (    (    sI   lib/python2.7/site-packages/statsmodels/graphics/tests/test_mosaicplot.pyt   <module>   sJ   ()%)							 	2		
