
    M/PhI                     N   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 	 d dlmZ n# e$ r Y nw xY wd dlmZmZmZmZmZ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 Z(d Z)d Z*d Z+d Z,ej        j        d             Z-ej        j        d             Z.dS )    )lrange)BytesIO)productN)assert_assert_raises)datasets)_hierarchical_split_key_splitting_normalize_split_reduce_dict_split_rectmosaicc                 H   dd l }t          j        dd          \  }}dddd}t          ||d         dd	
           |                    |          }t          ||d         dd	
           g d}t          ||d         dd	
           t          j        |          }t          ||d         dd	
           t          j        d           ddddd}t          ||d         dd	
           t          ||d         dddgd	           |                    |          }t          ||d         dd	
           t          ||d         dddg           ddgddgg}t          ||d         dd	
           t          ||d          d!ddg           t          j        ddgddgg          }t          ||d"         d#d	
           t          ||d$         d%ddgd	           t          j        d           g d&}g d'}|	                    ||d(          }t          |d)g|d*         d+d	
           t          |d,g|d-         d.d	
           t          |d)d,g|d/         d0d	
           t          |d,d)g|d1         d2d	
           t          j        d           t          j
        d3           d S )4Nr               )axbxcxr   r   z
basic dictFr   title
axes_labelr   r   zbasic series)r   r   r   )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)maler!   r!   femaler"   r"   )catdogr$   r#   r$   r#   )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   Seriesnpasarrayclosearray	DataFramesuptitle)close_figuresr'   _r   datar%   r&   s          j/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/graphics/tests/test_mosaicplot.pytest_data_conversionr5       s    MMMLAEAr1A&&D
4BtHLUCCCC==D
4BtHNuEEEE99D
4BtHLUCCCC:dD
4BtHMeDDDDIe1AQOOD
4BtHOFFFF
4BtH$8ASXYYYY==D
4BtH$5%HHHH
4BtH$:1a&IIIIFQFD
4BtHOFFFF
4BtH$8AGGGG8aVaV$%%D
4BtH$4GGGG
4BtH$9!QTYZZZZIeCCCF
4
4
4Cvc::;;D
4(40DQVWWWW
4%RX-AeTTTT
4(E"r$x{uUUUU
4%"r$xSXYYYYIeL899999    c                 n   ddgg dddgddgf}t          t          |           }t          t          |t	          ddt          |          z                                 }i }d	d
i|d<   d	di|d<   |D ]}d|v rd|v r	ddd||<   ddd||<   t          |d|d           t          j        d           d S )Nr!   r"   oldadultyoungworker
unemployedhealtyillr   colorb)r!   rr"   
BlueViolet+)r@   hatchCrimson皙?F)gap
propertiesr   z)syntetic data, 4 categories (plot 2 of 4))	listr   dictziprangelenr   r(   r0   )r1   key_setkeysr3   propskeys         r4   test_mosaic_simplerT   K   s   
 !#<#<#<,'(E):<G !""DD%1s4yy=112233D E~E)!3E+ A AC<<}}'3sCCc

'0C@@c

4Te>>>>L<=====r6   c                    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          j        dd          \  }}t          |ddg|d         d           t          |ddg|d         d           t          |g d|d         dd            |d         
                    d           |d                             d           t          |ddg|d         dd !           t          j        d"           d S )#Nr   cheatedrate_marriage	religiousawfulbadintermediategood	wonderful)r   r   r   r      znon religiouszpoorly religiouszvery religious)r   r   r   r   faithful)FTr   r   zby marriage happiness)r   r   r   zby religiosity)rW   rX   rV   r   zby bothc                     dS )N  ks    r4   <lambda>ztest_mosaic.<locals>.<lambda>   s    r r6   )r   r   	labelizerzmarriage ratingzreligion statusr    zinter-dependenceFr   z"extramarital affairs (plot 3 of 4))r   fairload_pandasexogendogsort_valuesmapr(   r)   r   
set_xlabel
set_ylabelr0   )r1   affairsdatasnum_to_descnum_to_faithnum_to_cheatr2   r   s           r4   test_mosaicrt   h   s   
 m''))GLE}q(E) <==E%N. .K"?377DDE/&+=+') )L{+//==E+%Y77LY'++L99E)LAEAr
5?I.2d8(* * * *
5;	*r$x!# # # #
5;;;4kk3 3 3 3tH)***tH)***
5;0RX#7 7 7 7L566666r6   c                    g d}ddgddgddgdd	gf}t          t          |           }t          t          |t	          d
d
t          |          z                                 }i }ddi|d<   ddi|d<   t          |          }t          j        ||          \  }}t	          |          D ]}	t	          |          D ]}
t          t	          |                    	                    |	|
h          |	|
k    r||	|	f         
                    dd||	         dd           ||	|	f                             g            ||	|	f                             g            ||	|	f                             g            ||	|	f                             g            t          |	|
          t!          |	|
          fd|                                D             }t          |                                          }|D ]*}t'          ||d d                   }|||d d         <   ||= +t)          |||	|
f         d|d|	|
k               t          j        d           d S )N)r%   agehealthworkr!   r"   r9   r;   r>   r?   rx   r=   r   r@   rB   )r!   r9   pinkrC         ?center)havac                 r    i | ]2\  }                  ft          fd D                       z   |3S )c              3   (   K   | ]}|         V  d S Nrb   ).0rB   rd   s     r4   	<genexpr>z6test_mosaic_very_complex.<locals>.<dictcomp>.<genexpr>   s'      3D3DQAaD3D3D3D3D3D3Dr6   )tuple)r   vrd   ijjims     @r4   
<dictcomp>z,test_mosaic_very_complex.<locals>.<dictcomp>   s^     < < <&*a  eQrU^e3D3D3D3D!3D3D3D.D.DDa < < <r6   r   FrH   )r   r   rJ   rI   
horizontalz0old males should look bright red,  (plot 4 of 4))rK   r   rL   rM   rN   rO   r(   r)   set
differencetext
set_xticksset_xticklabels
set_yticksset_yticklabelsmaxminitemsrQ   r   r   r0   )r1   key_namekey_baserQ   r3   rR   Lr2   axesij	temp_datard   valuer   r   r   s                 @@@r4   test_mosaic_very_complexr      s   
 322H"UG$45!FL#9;H"##DD%1s4yy=112233DE%s^E/!6*E+HAl1a  GAt1XX E Eq 	E 	EAE!HH((!Q00AAvvQT
S(1+#+   : : :QT
%%b)))QT
**2...QT
%%b)))QT
**2....AYYAYY< < < < < <.2jjll< < <	 INN,,-- % %A(AbqbE::E',Iae$!!yT!Q$ZE"'Ta!eE E E E E)	E, LCDDDDDr6   c           
      ~   ddl m} ddgg dddgdd	gf}t          t          |           }t	          t          | |t          |                                        }d
 }t          j        ddd          \  }\  }}t          |||dd           t          |||dg d           |
                    d           d S )Nr   )randr!   r"   r8   r<   r=   yesnoc                 @    d                     d | D                       S )Nra   c              3   &   K   | ]}|d          V  dS )r   Nrb   )r   ss     r4   r   z7test_axes_labeling.<locals>.<lambda>.<locals>.<genexpr>   s&      ,,QAaD,,,,,,r6   )joinrc   s    r4   re   z$test_axes_labeling.<locals>.<lambda>   s!    BGG,,!,,,,, r6   r   r   )      )figsizeT-   )r   rf   r   label_rotationF)r   r   Z   r   z$correct alignment of the axes labels)numpy.randomr   rK   r   rL   rM   rO   r(   r)   r   r0   )	r1   r   rP   rQ   r3   labfigax1ax2s	            r4   test_axes_labelingr      s    !!!!!!!#<#<#<,'%8G !""DD$$s4yy//**++D
,
,Cl1a999OC#s
4C34KKKK
4C35(..* * * * LL788888r6   c                    dd l } |j        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        |j                  }t          |j                                                  \  }}t          |ddg          \  }}d S )Nr   AngelicaDXW_UIDcasuid01EC93_uidAtmosFox)@   A   B   C   D   E   F   <   =   >   ?   TGPRetention01defaultMusa_EC_9_3)id2id1r   r   )r'   r/   crosstabr   r   r   Tunstack)r1   pdmydatactr2   valss         r4   test_mosaic_empty_cellsr      s     R\z'0j'1z'1z'0z'0i#A #A (-'4)'0m'4-'0i'0i#A #AB B C CF 
VZ	,	,BRT\\^^$$GAtVeE]++GAtttr6   c                 F    t          t          j        | |                    S r   )r   r+   allclose)xys     r4   re   re      s    '"+a++,, r6   c            	         t          t          d                    } t          t          | dgt	          |           z                      }t          |d          }t          t          |                                          | k               d|d<   d|d<   t          t          dd	                    } t          t          | dgt	          |           z                      }t          |d          }t          t          |                                          | k               d
|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d S )Nmfr   r   )rI           r   rz         ?r   rz   r   rz   r   )fyao)r   r   rz   UUUUUU?)r   r   )r   r   rz   r   )r   a)r   UUUUUU?rz   r   r   o)rz   r   rz   r   )r   r   )rz   r   rz   r   )r   r   )rz   r   rz   r   )r   r   )rK   r   rL   rM   rO   r	   r   rQ   )rQ   r3   ress      r4   test_recursive_splitr      s(   DD1#D		/**++D
d
*
*
*CD$%%%&CK&CKe$$%%DD1#D		/**++D
d
*
*
*CD$%%%,C
O.C
O.C
O,C
O.C
O.C
OOOr6   c                  t   t          t          t          t          ddd                    dgdz                      } 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   oywnr   r   r   r   r   r   )r   r   w   r   )rL   rM   rK   r   eqr   r   )r3   s    r4   test__reduce_dictr      s   DtT2233aS1W==>>D|D&!!1%%%|D*%%q)))|D/**A...DtT2233VAYY??@@D|D&!!1%%%|D*%%q)))|D/**A.....r6   c                  R   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          |                                          g d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             k               t          |d         d           t          |d         d           d S )N)r   r   r   r   r   rA   r   Tr   )r   rA   )r   r   rz   r   )rz   r   rz   r   cdF)r   r   r   r   r   r   )r   r   rz   rz   r   )r   rz   rz   rz   totalr   c                     g | ]}d |fz   	S )r   rb   )r   es     r4   
<listcomp>z'test__key_splitting.<locals>.<listcomp>  s     G G Gqqd!2 G G Gr6   )r   rA   )r   r   )r   r   r   r   )r   rA   )r   r   r   r   )r   r
   r   rK   rQ   r   )	base_rectr   res_biss      r4   test__key_splittingr      s   ,'I
S#JAq
I
ICD 00111s6{N###s6{$%%%S3*q!ffeQGGGD  $D$D$DDEEEwz0111wz0111wv()))\*I
S#JA
D!
L
LCD G GJ G G GGHHHs>,---s>011111r6   c            	         t          t          d          g d           t          t          d          g d           t          t          d          g d           t          t          t          d           t          t          t          ddg           t          t          t          g d           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           #d
D ]-\  } }t          t          | |g          d| | |z   z  dg           .dD ]?\  } }}t          t          | ||g          d| | |z   |z   z  | |z   | |z   |z   z  dg           @d S )Nr   )r   r   r   r   )r   r   r   g       @)r   r   r   rz   )g333333?rz   g?))      ?rz   )皙?g?)      $@      >@))r   r   r   )r   rz   gffffff?)r   r   (   )r   r   r   
ValueError)r   r   zs      r4   test_proportion_normalizationr    s    ___---___---___---*.333*.R999*.===*.555*.R999c
+++Sz***Sz*** . .
AQ----5 = =1
QF##b!q1u+s%;<<<<B K K1a
1I Q!a%!)_q1uQ.CSI	K 	K 	K 	KK Kr6   c                     g d} t          dgdd          }t          dgdd          }t          t          | i ||            t          t          | i ||            t          dgdd          }t          dgdd          }t          t          | i ||            t          t          | i ||            g d}t          dgdd          }t          t          |i ||           t          dgd	d          }t          t          |i ||           g d
}t          dgdd          }t          t          t          g|R i | t          ddgdd          }t          t          t          g|R i | t          dgdd          }t          t          t          g|R i | t          ddgdd          }t          t          t          g|R i | d S )Nr   r   r   r   r   r   T
proportionrI   r   Frz   r   r   r   r   r   )r   r         r   )rL   r   r   r   r   )pure_squareconf_hconf_vnull_squareconf
neg_squares         r4   test_false_splitr  1  s=    #""KaScd;;;FaSce<<<F{K*6**K888{K*6**K888aScd;;;FaSce<<<F{K*6**K888{K*6**K888 #""KA3CD999D{K(4((+666A3CD999D{K(4((+666 #""JA3CD999D*k?J???$???Aq6st<<<D*k?J???$???A3CD999D*k?J???$???Aq6st<<<D*k?J???$?????r6   c                     g d} ddg}t          ddgdd          }t          t          | i ||           dd	g}t          ddgdd
          }t          t          | i ||           ddg}t          ddgdd          }t          t          | i ||           ddg}t          ddgdd
          }t          t          | i ||           g d}t          g ddd          }t          t          | i ||           g d}t          g ddd
          }t          t          | i ||           g d}t          g ddd          }t          t          | i ||           g d}t          g ddd
          }t          t          | i ||           g d}t          ddgdd          }t          t          |i |||g           t          ddgdd          }t          t          |i |||g           d S )Nr  r   r   r   r   Tr  )r   r   r   rz   )r   rz   r   rz   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   r   r   r   )r   r   rz   r         ?r   r   r   )r   r   r   ))r   r   r   r   )r   r   r   rz   )r   r  r   r   r  r   rL   r   r   )r	  h_2splitr
  v_2splitr  r  r  s          r4   test_rect_pure_splitr  Q  s   """K$&:;HaV>>>F{K*6**H555$&:;HaV???F{K*6**H555 '(@AHaV>>>F{K*6**H555&(@AHaV???F{K*6**H555  HYYYCDAAAF{K*6**H555  HYYYCEBBBF{K*6**H555  HYYYCDAAAF{K*6**H555  HYYYCEBBBF{K*6**H555 #""KAq6st<<<D{K(4((;*DEEEAq6st<<<D{K(4((;*DEEEEEr6   c                     g d} ddg}t          ddgdd          }t          t          | i ||           dd	g}t          ddgdd
          }t          t          | i ||           ddg}t          ddgdd          }t          t          | i ||           ddg}t          ddgdd
          }t          t          | i ||           d S )N)r   r  r   rz   )r   r  rz   rz   )g      ?r  rz   rz   r   r   Tr  )r   r  r   r   )r   g      r   r   F)r   r  r   rz   )gUUUUUU?r  r   rz   r   )r   r  r   UUUUUU?)r   gr   r   r  )non_pure_squarer  r
  r  r  s        r4   test_rect_deformed_splitr    s   (((O%'<=HaV>>>F{O.v..999&(?@HaV???F{O.v..999 ()FGHaV>>>F{O.v..999')EFHaV???F{O.v..99999r6   c                  0   g d} t          dgdd          }t          t          | i ||            ddg}t          ddgdd          }t          t          | i ||           dd	g}t          dd
gdd          }t          t          | i ||           d S )Nr  r   r   Tr  r  r  )r   r   r  r   r  r   r  )r	  r
  r  s      r4   test_gap_splitr     s    """K aScd;;;F{K*6**K888 &'=>HaV>>>F{K*6**H555 '(FGHaV>>>F{K*6**H55555r6   c                 v    t          j        g dg dd          }t          t          t          |d           d S )N)smalllarger#  r"  r#  r"  )longshortr%  r$  r$  r%  )sizelengthfoobar)r3   r   )r   r/   r   r   r   )r1   dfs     r4   test_default_arg_indexr*    s\     
 !* !* !*#, #, #,- - 
. 
.B *f2X>>>>>>r6   c                 $   g d}g d}t          j        ||d          }t          j        |d         g d          |d<   |                    d          }t	          |ddg          \  }}t                      }|                    |d	           d S )
N)
r$   r$   r$   r#   r$   r#   r#   r$   r$   r#   )
mediumr#  r,  r,  r,  r,  r#  r#  r#  r"  )animalr&  r&  )r"  r,  r#  )
categoriesr-  png)format)r   r/   Categoricalrk   r   r   savefig)r1   r-  r&  testdatar   r2   bios          r4   test_missing_categoryr5    s    # # #F0 0 0D|vt<<==H~hv&61M1M1MO O OHV##F++HHx011FC
))CKKEK"""""r6   )/statsmodels.compat.pythonr   ior   	itertoolsr   numpyr+   numpy.testingr   r   r'   r   pyteststatsmodels.apir   matplotlib.pyplotpyplotr(   ImportErrorstatsmodels.graphics.mosaicplotr	   r
   r   r   r   r   mark
matplotlibr5   rT   rt   r   r   smoker   r   r   r   r   r  r  r  r  r   r*  r5  rb   r6   r4   <module>rD     s   , , , , , ,                 0 0 0 0 0 0 0 0      $ $ $ $ $ $	####### 	 	 	D	
                ': ': ':T > > >8 !7 !7 !7H %E %E %EP 9 9 9" , ,  ,* -,/ / /&/ / /2 2 2*K K K8@ @ @@/F /F /Fd: : :*6 6 6$ ? ? ? # # # # #s   5 ==