U
    KvfI                     @   sr  d dl mZ d dlmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlZd dlZd dlmZ zd dlmZ W n ek
r|   Y nX d dlmZmZmZmZmZmZ ejjdd	 Zejjd
d Zejjdd Zejjdd Z ejjdd Z!ejj"ejjdd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)d d! Z*d"d# Z+d$d% Z,ejjd&d' Z-ejjd(d) Z.dS )*    )lrange)BytesIO)productN)assert_assert_raises)datasets)_hierarchical_split_key_splitting_normalize_split_reduce_dict_split_rectmosaicc                 C   sD  dd l }tdd\}}dddd}t||d dd	d
 ||}t||d dd	d
 dddg}t||d dd	d
 t|}t||d dd	d
 td ddddd}t||d dd	d
 t||d dddgd	d ||}t||d dd	d
 t||d dddgd ddgddgg}t||d dd	d
 t||d d ddgd tddgddgg}t||d! d"d	d
 t||d# d$ddgd	d td d%d%d%d&d&d&g}d'd(d(d'd(d'g}|	||d)}t|d*g|d+ d,d	d
 t|d-g|d. d/d	d
 t|d*d-g|d0 d1d	d
 t|d-d*g|d2 d3d	d
 td t
d4 d S )5Nr               )axbxcxr   r   z
basic dictFr   title
axes_labelr   r   zbasic series)r   r   z
basic list)r   r   zbasic arrayall))r   r   )r   r   )r   dx)r   r   r   r   zcompound dict)r   r   zinverted keys dict)r   r   indexr   r   r   zcompound series)r   r   zinverted keys series)r   r   r   )r   r   zcompound list)r   r   zinverted keys list)r   r   zcompound array)r   r   zinverted keys arraymalefemalecatdog)genderpetr#   )r   r   zdataframe by key 1r$   )r   r   zdataframe by key 2)r   r   z	both keys)r   r   zkeys invertedz%testing data conversion (plot 1 of 4))pandaspltsubplotsr   ZSeriesnpZasarrayclosearray	DataFramesuptitle)close_figuresr%   _r   datar#   r$    r0   N/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/graphics/tests/test_mosaicplot.pytest_data_conversion    sB    






r2   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 }ddi|d< ddi|d< |D ]2}d	|krfd|krddd||< qfddd||< qft|d|dd td d S )Nr   r    oldadultyoungworker
unemployedhealtyillr   colorb)r   rr    Z
BlueViolet+)r:   ZhatchZCrimson皙?F)gap
propertiesr   z)syntetic data, 4 categories (plot 2 of 4))	listr   dictziprangelenr   r&   r,   )r-   key_setkeysr/   propskeyr0   r0   r1   test_mosaic_simpleK   s      rK   c                 C   s.  t j }|j}|jdk|d< |ddg}ddddd	d
}|d ||d< ddddd}|d ||d< ddd}|d ||d< tdd\}}t	|ddg|d dd t	|ddg|d dd t	|dddg|d ddd d |d 
d |d d t	|ddg|d dd d! td" d S )#Nr   ZcheatedZrate_marriageZ	religiousZawfulbadZintermediateZgoodZ	wonderful)r   r   r   r      znon religiouszpoorly religiouszvery religious)r   r   r   r   Zfaithful)FTr   r   zby marriage happiness)r   r   r   zby religiosityr   zby bothc                 S   s   dS )N r0   kr0   r0   r1   <lambda>       ztest_mosaic.<locals>.<lambda>)r   r   	labelizerzmarriage ratingzreligion statusr   zinter-dependenceFr   z"extramarital affairs (plot 3 of 4))r   ZfairZload_pandasZexogZendogsort_valuesmapr&   r'   r   Z
set_xlabelZ
set_ylabelr,   )r-   ZaffairsZdatasZnum_to_descZnum_to_faithZnum_to_cheatr.   r   r0   r0   r1   test_mosaich   sB    
 
  rV   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 }ddi|d< ddi|d< t|}t||\}}t|D ]4}	t|D ]$}
tt|	t|	|
f|	|
kr.||	|	f j
dd||	 ddd ||	|	f g  ||	|	f g  ||	|	f g  ||	|	f g  qt|	|
t|	|
 t fdd| D }t | }|D ].}t||d d }|||d d < ||= qpt|||	|
f d|d|	|
kd qqtd d S )Nr#   ZageZhealthZworkr   r    r3   r5   r8   r9   r7   r   r:   r<   )r   r3   Zpinkr=         ?center)Zhavac                    s:   g | ]2\ }    ft  fd dD  |fqS )c                 3   s   | ]} | V  qd S Nr0   ).0r<   rO   r0   r1   	<genexpr>   s     z6test_mosaic_very_complex.<locals>.<listcomp>.<genexpr>)tuple)r[   vZijZjimrO   r1   
<listcomp>   s   z,test_mosaic_very_complex.<locals>.<listcomp>r   Fr?   )r   r   rA   r@   
horizontalz0old males should look bright red,  (plot 4 of 4))rB   r   rC   rD   rE   rF   r&   r'   set
differencetextZ
set_xticksZset_xticklabelsZ
set_yticksZset_yticklabelsmaxminitemsrH   r   r   r,   )r-   Zkey_nameZkey_baserH   r/   rI   Lr.   ZaxesijZ	temp_datarP   valuer0   r_   r1   test_mosaic_very_complex   sP     
 


  
rm   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d }tjdddd\}\}}t	|||ddd t	|||dddddgd |
d d S )Nr   )randr   r    r3   r4   r5   r6   r7   yesnoc                 S   s   d dd | D S )NrN   c                 s   s   | ]}|d  V  qdS )r   Nr0   )r[   sr0   r0   r1   r\      s     z7test_axes_labeling.<locals>.<lambda>.<locals>.<genexpr>)joinrO   r0   r0   r1   rQ      rR   z$test_axes_labeling.<locals>.<lambda>r   r   )      )ZfigsizeT-   )r   rS   rb   Zlabel_rotationFZ   z$correct alignment of the axes labels)Znumpy.randomrn   rB   r   rC   rD   rF   r&   r'   r   r,   )	r-   rn   rG   rH   r/   ZlabfigZax1Zax2r0   r0   r1   test_axes_labeling   s     

rx   c                 C   s   dd l }|dddddddddddddd	d
d
dddd
d
d
d
dd}||j|j}t|j \}}t|ddg\}}d S )Nr   ZAngelicaZDXW_UIDZcasuid01ZEC93_uidZAtmosFox)@   A   B   C   D   E   F   <   =   >   ?   ZTGPZRetention01defaultZMusa_EC_9_3)id2id1r   r   )r%   r+   Zcrosstabr   r   r   TZunstack)r-   pdZmydatactr.   valsr0   r0   r1   test_mosaic_empty_cells   s:              r   c                 C   s   t t| |S rZ   )r   r(   Zallclose)xyr0   r0   r1   rQ      rR   rQ   c                  C   s   t td} tt| dgt|  }t|dd}tt | | k d|d< d|d< t tdd	} tt| dgt|  }t|dd}tt | | k d
|d< d|d< d|d< d|d< d|d< d|d< d S )Nmfr   r   )r@           r   rW         ?r`   rW   r   rW   r   )fZyao)r   r   rW   UUUUUU?)r`   r   )r   r   rW   r   )r`   a)r   UUUUUU?rW   r   r`   o)rW   r   rW   r   )r   r   )rW   r   rW   r   )r   r   )rW   r   rW   r   )r   r   )rB   r   rC   rD   rF   r   r   rH   )rH   r/   resr0   r0   r1   test_recursive_split   s     r   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   ZoyZwnr   rt   r   r   r   r   )r`   r   w   r   )rC   rD   rB   r   eqr   r   )r/   r0   r0   r1   test__reduce_dict   s     r   c                  C   s  t  di} t| ddgddgt  dd}tt| ddgk t|d d	 t|d d
 t|ddgddgddd}tt| dddgk t|d d t|d d t|d d
 ddi} t| ddgddgddd}tt| dd dD k t|d d t|d d d S )N)r   r   r   r   r   r;   r   Tr   )r   )r;   )r   r   rW   r   )rW   r   rW   r   cdF)r   r   )r   r   )r   r   rW   rW   )r   rW   rW   rW   totalr   c                 S   s   g | ]}d |f qS )r   r0   )r[   er0   r0   r1   ra     s     z'test__key_splitting.<locals>.<listcomp>)r   r;   )r   r   )r   r   r   r   )r   r;   )r   r   r   r   )r]   r	   r   rB   rH   r   )Z	base_rectr   Zres_bisr0   r0   r1   test__key_splitting   s    
r   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 dD ]} t t| d| dg qdD ](\} }t t| |gd| | |  dg qdD ]D\} }}t t| ||gd| | | |  | | | | |  dg qd S )	Nr   r   g       @rW   )g333333?rW   g?))      ?rW   )皙?g?)      $@      >@))r   r   r   )r   rW   gffffff?)r   r   (   )r   r
   r   
ValueError)r   r   zr0   r0   r1   test_proportion_normalization  s*    "&r   c                  C   st  ddddg} t dgddd}t dgddd}tt| ||  tt| ||  t dgddd}t dgddd}tt| ||  tt| ||  ddddg}t dgddd}tt||| t dgddd}tt||| ddddg}t dgddd}tttf|| t ddgddd}tttf|| t dgddd}tttf|| t ddgddd}tttf|| d S )	Nr   r   r   TZ
proportionr@   rb   FrW         )rC   r   r   r   r   )pure_squareconf_hconf_vnull_squareconfZ
neg_squarer0   r0   r1   test_false_split1  s.    r   c                  C   s  ddddg} ddg}t ddgddd}tt| || dd	g}t ddgdd
d}tt| || ddg}t ddgddd}tt| || ddg}t ddgdd
d}tt| || dddg}t dddgddd}tt| || dddg}t dddgdd
d}tt| || dddg}t dddgddd}tt| || dddg}t dddgdd
d}tt| || ddddg}t ddgddd}tt||||g t ddgddd}tt||||g d S )Nr   r   r   r   r   Tr   )r   r   r   rW   )r   rW   r   rW   F)r   r   r   r   )r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   rW   r         ?r   r   r   )r   r   r   r   )r   r   r   rW   )r   r   r   r   rC   r   r   )r   h_2splitr   v_2splitr   r   r   r0   r0   r1   test_rect_pure_splitQ  s<    



r   c                  C   s   ddddg} ddg}t ddgddd	}tt| || d
dg}t ddgddd	}tt| || ddg}t ddgddd	}tt| || ddg}t ddgddd	}tt| || d S )Nr   r   rW   )r   r   rW   rW   )g      ?r   rW   rW   r   r   Tr   )r   r   r   r   )r   g      r   r   F)r   r   r   rW   )gUUUUUU?r   r   rW   r   )r   r   r   UUUUUU?)r   gr   r   r   )Znon_pure_squarer   r   r   r   r0   r0   r1   test_rect_deformed_split  s    r   c                  C   s   ddddg} t dgddd}tt| ||  ddg}t ddgddd}tt| || dd	g}t dd
gddd}tt| || d S )Nr   r   r   Tr   r   r   )r   r   r   r   r   r   r   )r   r   r   r0   r0   r1   test_gap_split  s    r   c              	   C   s<   t ddddddgddddddgd}ttt|dd d S )Nsmalllargelongshort)sizelengthZfoobar)r/   r   )r   r+   r   r   r   )r-   Zdfr0   r0   r1   test_default_arg_index  s    
r   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 ||d}t j|d dddgd|d< |d}t|d	dg\}}t }|j|d
d d S )Nr"   r!   Zmediumr   r   )animalr   r   )
categoriesr   Zpng)format)r   r+   ZCategoricalrT   r   r   Zsavefig)r-   r   r   Ztestdatarw   r.   Zbior0   r0   r1   test_missing_category  s&         


r   )/Zstatsmodels.compat.pythonr   ior   	itertoolsr   Znumpyr(   Znumpy.testingr   r   r%   r   ZpytestZstatsmodels.apir   Zmatplotlib.pyplotZpyplotr&   ImportErrorZstatsmodels.graphics.mosaicplotr   r	   r
   r   r   r   markZ
matplotlibr2   rK   rV   rm   rx   Zsmoker   r   r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   <module>   sL    

*

$
(
 2
	