
    !gI                        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 d dlmZmZmZmZmZmZ ej6                  j8                  d        Zej6                  j8                  d	        Zej6                  j8                  d
        Zej6                  j8                  d        Z ej6                  j8                  d        Z!ej6                  jD                  ej6                  j8                  d               Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,ej6                  j8                  d        Z-ej6                  j8                  d        Z.y# e$ r Y -w xY w)    )lrange)BytesIO)productN)assert_assert_raises)datasets)_hierarchical_split_key_splitting_normalize_split_reduce_dict_split_rectmosaicc                 \   dd l }t        j                  dd      \  }}dddd}t        ||d   dd	
       |j	                  |      }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	       |j	                  |      }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'}|j                  ||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       y )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          g/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/graphics/tests/test_mosaicplot.pytest_data_conversionr5       s7    LLAEAr1A&D
4BtHLUC==D
4BtHNuED
4BtHLUC::dD
4BtHMeDIIe1AQOD
4BtHOF
4BtH$8ASXY==D
4BtH$5%H
4BtH$:1a&IFQFD
4BtHOF
4BtH$8AG88aVaV$%D
4BtH$4G
4BtH$9!QTYZIIeCF
4Cvc:;D
4(40DQVW
4%RX-AeT
4(E"r$x{uU
4%"r$xSXYIIeLL89    c                 B   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 sd|v r	ddd||<   ddd||<    t        |d|d       t        j                  d       y )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%1s4y=123D E~E)!3E+ AC<}'3sCc
'0C@c
A 4Te>LL<=r6   c                    t         j                  j                         }|j                  }|j                  dkD  |d<   |j                  ddg      }ddddd	d
}|d   j                  |      |d<   ddddd}|d   j                  |      |d<   ddd}|d   j                  |      |d<   t        j                  dd      \  }}t        |ddg|d   d       t        |ddg|d   d       t        |g d|d   dd        |d   j                  d       |d   j                  d       t        |ddg|d   dd !       t        j                  d"       y )#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                      y)N  ks    r4   <lambda>ztest_mosaic.<locals>.<lambda>   s    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   su   
 mm'')GLLE}}q(E) <=E%N.K"?377DE/&+=+')L{+//=E+%Y7LY'++L9E)LLAEAr
5?I.2d8(*
5;	*r$x!#
5;4k3tH)*tH)*
5;0RX#7LL5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 ]b  }	t	        |      D ]P  }
t        t	        |            j                  |	|
h      }|	|
k(  rw||	|	f   j                  dd||	   dd       ||	|	f   j                  g        ||	|	f   j                  g        ||	|	f   j                  g        ||	|	f   j                  g        t        |	|
      }t!        |	|
      }|j#                         D ci c]%  \  }|   |   ft%        fd|D              z   |' }}}t        |j'                               }|D ]  t)        |d d       }||d d <   |=  t+        |||	|
f   d|d|	|
kD         S e t        j,                  d       y c c}}w )N)r%   agehealthworkr!   r"   r9   r;   r>   r?   rx   r=   r   r@   rB   )r!   r9   pinkrC         ?center)havac              3   (   K   | ]	  }|     y wNrb   ).0rB   rd   s     r4   	<genexpr>z+test_mosaic_very_complex.<locals>.<genexpr>   s     3DQAaD3Ds   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itemstuplerQ   r   r   r0   )r1   key_namekey_baserQ   r3   rR   Lr2   axesijmjiijrd   v	temp_datavalues                 `   r4   test_mosaic_very_complexr      sP   
 3H"UG$45!FL#9;H"#DD%1s4y=123DE%s^E/!6*E+HAll1a GAt1X Eq 	EAE!H((!Q0AAvQT
S(1+#+   :QT
%%b)QT
**2.QT
%%b)QT
**2.AYAY.2jjl< <&*a  eQrU^e3D!3D.DDaG <	 < INN,- %A(AbqE:E',Iae$!!% yT!Q$ZE"'Ta!eE)	EE. LLCD<s   /*H
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       |j                  d       y )Nr   )randr!   r"   r8   r<   r=   yesnoc                 2    dj                  d | D              S )Nra   c              3   &   K   | ]	  }|d      yw)r   Nrb   )r   ss     r4   r   z7test_axes_labeling.<locals>.<lambda>.<locals>.<genexpr>   s     ,QAaD,s   )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$s4y/*+D
,Cll1a9OC#s
4C34K
4C35(* LL7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                  j                               \  }}t        |ddg      \  }}y )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 (-'4)'0m'4-'0i'0i#AB CF 
VZZ	,BRTT\\^$GAtVeE]+GAtr6   c                 @    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        |j                               | k(         d|d<   d|d<   t        t        dd	            } t        t        | dgt	        |       z              }t        |d      }t        t        |j                               | k(         d
|d<   d|d<   d|d<   d|d<   d|d<   d|d<   y )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
Or6   c                     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       y )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3aS1W=>D|D&!1%|D*%q)|D/*A.DtT23VAY?@D|D&!1%|D*%q)|D/*A.r6   c                     t               di} t        | ddgddgt               dd      }t        t        |j	                               ddgk(         t        |d   d	       t        |d   d
       t        |ddgddgddd      }t        t        |j	                               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        |j	                               dD cg c]  }d|fz   
 c}k(         t        |d   d       t        |d   d       y c c}w )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   )r   rA   )r   r   )r   r   r   r   )r   rA   )r   r   r   r   )r   r
   r   rK   rQ   r   )	base_rectr   res_bises       r4   test__key_splittingr      s@   ,'I
S#JAq
ICD 001s6{N#s6{$%S3*q!ffeQGGD $DDEwz01wz01wv()\*I
S#JA
D!
LCDJ Gqqd!2 GGHs>,-s>01 !Hs   E
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 ]7  \  } }}t        t        | ||g      d| | |z   |z   z  | |z   | |z   |z   z  dg       9 y )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     sx    _-_-_-*.3*.R9*.=*.5*.R9c
+Sz*Sz* .
AQ-. 6 =1
QF#b!q1u+s%;<=B K1a
1IQ!a%!)_q1uQ.CSI	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|i | t        ddgdd      }t        t        t        g|i | t        dgdd      }t        t        t        g|i | t        ddgdd      }t        t        t        g|i | y )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{K*6*K8aScd;FaSce<F{K*6*K8{K*6*K8 #KA3CD9D{K(4(+6A3CD9D{K(4(+6 #JA3CD9D*k?J?$?Aq6st<D*k?J?$?A3CD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       y )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$&:;HaV?F{K*6*H5 '(@AHaV>F{K*6*H5&(@AHaV?F{K*6*H5HYCDAF{K*6*H5HYCEBF{K*6*H5HYCDAF{K*6*H5HYCEBF{K*6*H5 #KAq6st<D{K(4(;*DEAq6st<D{K(4(;*DEr6   c                  T   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 ||       y )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&(?@HaV?F{O.v.9 ()FGHaV>F{O.v.9')EFHaV?F{O.v.9r6   c                      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 ||       y )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 &'=>HaV>F{K*6*H5 '(FGHaV>F{K*6*H5r6   c                 j    t        j                  g dg dd      }t        t        t        |d       y )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%    s1     
 !*#,- 
.B *f2X>r6   c                     g d}g d}t        j                  ||d      }t        j                  |d   g d      |d<   |j                  d      }t	        |ddg      \  }}t               }|j                  |d	       y )
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_categoryr0    s}    #F0D||vt<=H~~hv&61MOHV##F+HHx0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%  r0  rb   r6   r4   <module>r?     s   ,    0   $	#  ': ':T > >8 !7 !7H %E %EP 9 9" ,  ,* -/&/2*K8@@/Fd:*6$ ? ? # #I  		s   E E"!E"