U
    +ifcu                     @   s   d dl Zd dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
mZmZ d dlmZ G dd dZejdddgejd	ddgd
d ZdS )    N)is_categorical_dtype)CategoricalIndex	DataFrameIndex
MultiIndexSeriescrosstabc                   @   s$  e Zd Zdd Zdd Zdd Zejde	j
eeg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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d0d1d2gd3d4ggd5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?d@ Z&dAS )BTestCrosstabc                 C   s   t dddddddddddgdddddddddddgdddddddddddgtjdtjdtjdd}tj||gd	d
| _d S )Nfoobaronetwodullshiny   )ABCDEFT)Zignore_index)r   nprandomrandnpdconcatdf)selfmethodr    r   U/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/reshape/test_crosstab.pysetup_method   sV    


/zTestCrosstab.setup_methodc                 C   sL   | j }t|d |d }|ddg  }t||dt	j
 d S )Nr   r   r   )r   r   groupbysizeunstacktmassert_frame_equalfillnaastyper   int64r   r   resultexpectedr   r   r    test_crosstab_singleE   s    z!TestCrosstab.test_crosstab_singlec                 C   s   | j }t|d |d |d g}|dddg }|dddtj}t	
|| t|d |d g|d }|dddg }|ddtj}t	
|| d S )Nr   r   r   r   )r   r   r"   r#   r$   r'   r(   r   r)   r%   r&   r*   r   r   r    test_crosstab_multipleK   s    z#TestCrosstab.test_crosstab_multipleboxc                 C   s
  |t jjdddd}|t jjdddd}|t jjdddd}t|||d}t|||gdgd	d
}t|d |d |d g}t|| t||g|dgd	d}t|d |d g|d }t|| t||}t|d |d }dg|j_dg|j	_t|| d S )Nr      d   r#      
   abcr6   r7   r8   )rownamescolnamesr7   r8   )r;   r:   row_0col_0)
r   r   randintr   r   r%   r&   indexnamescolumns)r   r/   r6   r7   r8   r   r+   r,   r   r   r    test_crosstab_ndarrayX   s    


z"TestCrosstab.test_crosstab_ndarrayc                 C   s   t dddgdddgd}t dddddgdddd	d
gd}tdddg}tddgddggtddgddtddgddd}t||}t|| t||}t|| d S )Nr      r6   r7   r8   r?   r3      dfr<   namer=   r?   rA   )r   r   arrayr   r   r   r%   r&   )r   r6   r7   r8   r,   r+   r   r   r    test_crosstab_non_alignedp   s     

z&TestCrosstab.test_crosstab_non_alignedc                 C   sP  t jjdddd}t jjdddd}t jjdddd}t|||d}t|||gdgd	d
d}|jjdksnt|jjddgkst|d }|	dg
 d}tt|gtdgddd}t||g}d|_t|| |jd }	|	ddg
 d}
t|
tt|gdgdg}
d|
_|
|	j}
|
dt j}
t|	|
 d S )Nr      r1   r2   r3   r0   r5   r6   r9   T)r:   r;   marginsr6   r7   r8   All i8rQ   rH   rD   )r   r   r>   r   r   r?   r@   AssertionErrorrA   r"   r#   r(   r   lenr   r   r   rI   r%   assert_series_equallocreindexr'   r)   )r   r6   r7   r8   r   r+   all_colsexp_cols
exp_marginall_rowsexp_rowsr   r   r    test_crosstab_margins   s(    
z"TestCrosstab.test_crosstab_marginsc              
   C   s  t jjdddd}t jjdddd}t jjdddd}t|||d}t|||gdgd	d
dd}|jjdkspt|jjddgkst|d }|	dg
 d}tt|gtdgddd}t||g}d|_t|| |jd }	|	ddg
 d}
t|
tt|gdgdg}
d|
_|
|	j}
|
dt j}
t|	|
 d}dd ddgfD ]:}tjt|d  t|||gdgd	d
|d W 5 Q R X q`d S )Nr   rM   r1   r2   r3   r0   r5   r6   r9   TTOTAL)r:   r;   rN   margins_namerO   r7   r8   )r_   rR   rS   rH   rD   z&margins_name argument must be a stringi  match)r   r   r>   r   r   r?   r@   rT   rA   r"   r#   r(   r   rU   r   r   r   rI   r%   rV   rW   rX   r'   r)   pytestraises
ValueError)r   r6   r7   r8   r   r+   rY   rZ   r[   r\   r]   msgr`   r   r   r    %test_crosstab_margins_set_margin_name   sL    	
z2TestCrosstab.test_crosstab_margins_set_margin_namec                 C   s   t jjdddd}t jjdddd}t jjdddd}t jd}t||g||t jddgd	gd
}t||||d}|jdddgd	t jd}t	|| d S )Nr   rM   r1   r2   r3   r0   r
   r   baz)aggfuncr:   r;   )r
   r   rh   valuesrj   )r?   rA   ri   )
r   r   r>   r   r   sumr   Zpivot_tabler%   r&   )r   r6   r7   r8   rj   tabler   r,   r   r   r    test_crosstab_pass_values   s(            z&TestCrosstab.test_crosstab_pass_valuesc                 C   s   t jdddddddgtd}t jdddddddgtd}t jdddddddgtd}t|||gdgd	d
gdd}tjddddgd	d
gd}t|j| d S )Nr
   r   dtyper   r   r   r   r6   r7   r8   F)r:   r;   dropna)r   r   )r   r   )r   r   )r   r   r@   )	r   rK   objectr   r   from_tuplesr%   Zassert_index_equalrA   )r   r6   r7   r8   resmr   r   r    test_crosstab_dropna   s     
z!TestCrosstab.test_crosstab_dropnac                 C   sj   t dddgdddgd}t dddgdddgd}t||}ttg dd	d
tg ddd
d}t|| d S )NrC      r3   rD   rE   r0      r)   r<   ro   rI   r=   rJ   )r   r   r   r   r%   r&   )r   s1s2actualr,   r   r   r    test_crosstab_no_overlap   s    
z%TestCrosstab.test_crosstab_no_overlapc                 C   s   t dddddtjgddddddgd}t|j|jddd}t dddgdddgddd	gg}td
ddgdd|_tdddgdd|_t	
|| d S )NrC   rw   r3   rE   r6   r7   TrN   rp   r   r0         ?       @rQ   r6   rH   r7   r   r   nanr   r6   r7   r   r?   rA   r%   r&   r   r   r|   r,   r   r   r    test_margin_dropna   s    ( zTestCrosstab.test_margin_dropnac                 C   s   t dtjtjtjdtjgdtjddddgd}t|j|jddd}t dddgdddgdddgg}td	d
dgdd|_tdddgdd|_t	
|| d S )NrC   rw   r3   rE   r~   Tr   r   r   r   rQ   r6   rH         @      @r7   r   r   r   r   r    test_margin_dropna2  s    * z TestCrosstab.test_margin_dropna2c                 C   s   t dtjtjtjtjdgddddddgd}t|j|jddd}t dddgdddgdddgg}td	d
dgdd|_tdddgdd|_t	
|| d S )NrC   rw   r3   rE   r~   Tr   r   r   r   rQ   r6   rH   r7   r   r   r   r   r    test_margin_dropna3  s    ( z TestCrosstab.test_margin_dropna3c                 C   s   t dddddtjgddddddgd}t|j|jddd}t dd	dgdddgddd
gg}tdddgdd|_tdddgdd|_t	
|| d S )NrC   rw   r3   rE   r~   TFr   r   rx   r   r   rQ   r6   rH   r7   r   r   r   r   r    test_margin_dropna4!  s    ( z TestCrosstab.test_margin_dropna4c                 C   s   t dtjtjtjdtjgdtjddddgd}t|j|jddd}t dd	dgd	ddgddd
gg}tdddgdd|_tdddgdd|_t	
|| d S )NrC   rw   r3   rE   r~   TFr   r   rx   r   r   rQ   r6   rH   r   r   r7   r   r   r   r   r    test_margin_dropna5,  s    * z TestCrosstab.test_margin_dropna5c                 C   s*  t jdddddddgtd}t jdddddt jdgtd}t jdddddddgtd}t|||gdgd	d
gddd}tjdddddgdddddggd	d
gd}tdddddgdddddgdddddgg|d}tdddgdd|_	t
|| t||g|dd	gd
gddd}tjdddddgdddddggdd	gd}tdddgdddgdddgdddgdddgg|d}tdddgd
d|_t
|| t||g|dd	gd
gddd}tjdddddgdddddggdd	gd}tdddgdddgdddgdddgdddgg|d}tdddgd
d|_t
|| d S )Nr
   r   rn   r   r   r   r   r6   r7   r8   TF)r:   r;   rN   rp   rQ   rR   rq   rC   r   rw   r0   r3   rM   )rA   rH   rD   rx   )r   rK   rr   r   r   r   from_arraysr   r   r?   r%   r&   rA   )r   r6   r7   r8   r|   ru   r,   r   r   r    test_margin_dropna66  s|          &      *      * z TestCrosstab.test_margin_dropna6c           
      C   sn  t dddddgdddddgddtjddgd}tddgdd}tddgdd}t d	d
gd	dgg||d}t dd
gddgg||d}t dd
gddgg||d}tt|j|jdd| tt|j|jdd| tt|j|jdd| tt|j|jdd| tt|j|jddt|j|jdd tt|j|jd
dt|j|jdd t dd
gddgddggtdddgdddtddgdddd}t dd
d	gdddggtddgdddtdddgdddd}t d	d
d	gd	ddgdddggtdddgdddtdddgdddd}	tt|j|jddd| tt|j|jddd| tt|j|jddd|	 d S )NrC   rw   r3   rE   r5   r6   rH   r7   皙?r   333333?rJ   r         ?      ?      ?all	normalizeTr?   rA   皙?rQ   rr   rI   ro   g?r   rN   )	r   r   r   r   r%   r&   r   r6   r7   )
r   r   rindexZcindexZfull_normalZ
row_normalZ
col_normalZrow_normal_marginsZcol_normal_marginsZall_normal_marginsr   r   r    test_crosstab_normalizeg  s^    *    z$TestCrosstab.test_crosstab_normalizec                 C   st  t dddddgdddddgddtjddgd}ttddddgtddddggtddddg t dddgddd	gdddggtddd
gdddtddd
gddd}t|j|j|jdddd}t	
|| t dddddgdddddgddtjddgd}t dddgdddgdddggtddd
gdddtddd
gdddd}t|j|j|jtjddd}t	
|| d S )NrC   rw   r3   rE   r5   r   r   r   r   rQ   r6   rr   r   r7   rH   rJ   countr   T)ri   r   rN           r   r   )r   r   r   r   rK   r   r6   r7   r8   r%   r&   rk   )r   r   Znorm_countsZ	test_caseZnorm_sumr   r   r    test_crosstab_normalize_arrays  sL    *"      *     z+TestCrosstab.test_crosstab_normalize_arraysc                 C   s  t dddddgdddddgtjtjtjtjtjgd}t ddgddggtddgddd	tddgd
dd}dD ](}t|j|j|jd|d}t	|| qpt dtjgddggtddgddd	tddgd
dd}|r|d 
d|d< t|j|j|jddd}t	|| d S )NrC   rw   r3   rE   r5   r   r6   r)   r   r7   rH   rJ   )Tr?   rA   r   )rj   ri   r   F)r   r   r   r   r   r6   r7   r8   r%   r&   r(   )r   Zusing_array_managerr   emptyiZ
calculatedZnansr   r   r    test_crosstab_with_empties  s.    z'TestCrosstab.test_crosstab_with_emptiesc              	   C   s&  t dddddgdddddgddtjddgd}d}tjt|d t|j|j|j	d W 5 Q R X d	}tjt|d t|j|jtj
d
 W 5 Q R X d}tjt|d t|j|jdd W 5 Q R X tjt|d t|j|jdd W 5 Q R X d}tjt|d t|j|jddd W 5 Q R X d S )NrC   rw   r3   rE   r5   z)values cannot be used without an aggfunc.ra   )rj   z%aggfunc cannot be used without values)ri   zNot a valid normalize argumentZ42r   *   zNot a valid margins argumentr   r   )r   r   r   rc   rd   re   r   r6   r7   r8   Zmean)r   r   errorr   r   r    test_crosstab_errors  s"    *z!TestCrosstab.test_crosstab_errorsc                 C   s   t ddddddgddddddgd}dddg}|d d	j||d< t|d
 |d }tdddgd
d}t||ddd}dddgdddgdddgg}t |||d}t|| d S )NZHondaZAcuraZTeslaZSedanZElectricZPickup)MAKEMODELr   categoryr   rH   F)
categoriesZorderedrI   rw   r   rC   rJ   )	r   r(   catZset_categoriesr   r   r   r%   r&   )r   r   r   r+   expected_indexZexpected_columnsexpected_datar,   r   r   r    %test_crosstab_with_categorial_columns  s,    
     z2TestCrosstab.test_crosstab_with_categorial_columnsc                 C   sp  t ddddgd dddgd d	d	d	d
d
d
gd tjdtjdd}t|d |d g|d gdtj|d d}tddddgddddggddddddddddg
ddddddddddg
gddgd}td
d	dgddd}tdddgdddgdddgdtj	dgtj	ddgdtj	dgtj	ddgdtj	dgtj	ddgdddgg
}t |||d}|d 
d|d< t|| d S ) Nr   r   threerx   r   r   r      r
   r   rE      r   r   r   r   r   Tr   )r?   rA   rN   ri   rj   rQ   rR   rC   rw   r3   r   Zlevelscodesr@   rr   ry   r   r   g      (@g      8@rJ   r)   )r   r   r   r   r   r#   r   r   rK   r   r(   r%   r&   )r   r   r+   r   Zexpected_columnr   r,   r   r   r    test_crosstab_with_numpy_size  sR    

	.





  z*TestCrosstab.test_crosstab_with_numpy_sizec                 C   s   t tddd}t tdddd}t tdddd}t tddd}ddi}t||}t||j|dd}t|| t||g|}t||g|j|d	d
}t|| t|||g}t|||gj|dd}t|| d S )Nr3   r
   rH   rC   rE   r   Zwaldo)rA   axisr   )r?   r   )r   ranger   Zrename_axisr%   r&   )r   rz   Zs2_fooZs2_barZs3Zmapperr+   r,   r   r   r    test_crosstab_duplicate_names;  s    
z*TestCrosstab.test_crosstab_duplicate_namesr@   r6   r9   r~   r8   c                 C   sv   t td|d d}t tdd|d d}tjtdtddg|d}t d|djddd}t||}t|| d S )	Nr3   r   rH   rC   rE   rq   rD   )Z
fill_value)r   r   r   r   r$   r   r%   r&   )r   r@   rz   r{   mir,   r+   r   r   r    test_crosstab_tuple_nameW  s    
z%TestCrosstab.test_crosstab_tuple_namec                 C   sj   t tddd}t tddd}ttjdddttdddttdddd}t||}t|| d S )Nr3   r~   rH   )r8   rF   r)   rn   rJ   )	r   r   r   r   eyer   r   r%   r&   )r   rz   r{   r,   r+   r   r   r    test_crosstab_both_tuple_namesb  s    
z+TestCrosstab.test_crosstab_both_tuple_namesc                 C   s   t dddgdddgddd	d
gd}t|j|j|jg}td	d
dgdd}tjdddgddgd}t dddgdddgdddgg||d}t	|| d S )Nr3   rC   rw   r0   rE   rx   )r7   r6   r   r   r   rD   r<   rH   )rC   rE   )rw   rx   )r3   r0   r7   r6   rq   r   rJ   )
r   r   r?   r7   r6   r   r   rs   r%   r&   )r   r   r+   Ze_idxZ	e_columnsr,   r   r   r    test_crosstab_unsorted_ordero  s    $  z)TestCrosstab.test_crosstab_unsorted_orderc                 C   s   t ddddgd dddgd d	d	d	d
d
d
gd dgd dgd d}t|j|jg|j|jtjddd}t tjdgd dg t	d
ddtd
d	dgdddtjdddddddd d!d"g
ddgd#d$}t|| d S )%Nr   r   r   rx   r   r   r   r   r
   r   rE   r   r   r   T)rj   ri   r   rN      rC   rn   r4   r3   rQ   rr   ry   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   rP   rq   )rA   r?   )r   r   r   r   r   r   r   rk   rK   floatZreshaper   r   rs   r%   r&   r*   r   r   r    (test_crosstab_normalize_multiple_columnsy  sF    	
 z5TestCrosstab.test_crosstab_normalize_multiple_columnsc                 C   sT  t dddddddddg	dddddddddg	dddddddddg	dddd	d	d
dddg	dd
dddddddg	d}t|j|jg|jdddd}t ddgddgddgddgddgg}tdddgdddggdddddgdddddggddgd|_tddgddd |_t	
|| t|j|jg|jdddd}t d!d"d#gd!d"d#gdd"dgdd$d#gg}tdddgddd |_tddgddggddddgddddggddgd|_t	
|| t|j|jg|jdddd}t d%d%d#gd%d%d#gd#d%dgd&d#d#gdd'dgg}tdddgddd |_tdddgdddggdddddgdddddggddgd|_t	
|| d S )(Nr
   r   r   r   smalllargerC   rw   r3   rE   r0   rx   rM   r   	   r   Tz	Sub-Totalr   )rN   r`   r   r   g]QJVU?F]kSU?9?q?'c`?rR   r   r   r   rr   r   ry   r   r   9?q?r   9?q?r   g#G?)r   r   r   r   r   r   r?   r   rA   r%   r&   r*   r   r   r    test_margin_normalize  s    
     
      
    	  z"TestCrosstab.test_margin_normalizec                 C   s  t dddddddddg	dddddddddg	dddddddddg	dddd	d	d
dddg	dd
dddddddg	d}t|j|j|jgdddd}t dddddgdddddgdddddggdddgd}tdddgdddggdddddgdddddggddgd |_d!|j_t	
|| d S )"Nr
   r   r   r   r   r   rC   rw   r3   rE   r0   rx   rM   r   r   r   Tmargin)r?   rA   rN   r`   r   r   r   r   r   r   r   r   rD   rR   r   r   r   r   r   )r   r   r   r   r   r   rA   r?   rI   r%   r&   r*   r   r   r    &test_margin_normalize_multiple_columns  sL    
z3TestCrosstab.test_margin_normalize_multiple_columnsN)'__name__
__module____qualname__r!   r-   r.   rc   markparametrizer   rK   listtuplerB   rL   r^   rg   rm   rv   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	      s>   2
2
13$ -


(Qr	   a_dtyper   r)   b_dtypec                 C   s  t jd}t|jdddd| }t|jdddd|}t||ddd	}tdd
dgddd}tdd
ddgddd}dddgdddgdddgdddgg}t|||}	t	
||	 d|j|d
k< t|j}
|
r| jd
 dkstt||ddd	}dddgdddgdddgdddgg}t|||}	|
sP|	jdddg }	|	d d|	d< t| t|	 t|	jdddg  t	
||	 d S )Nivr   r3   r1   r2   rw   TFr   rC   rQ   rr   r=   ry   r<         "       4   0   B   r)   )r   r   ZRandomStater   r>   r(   r   r   r   r%   r&   rW   r   ro   Zvalue_countsrT   repr)r   r   gr6   r7   r+   rA   r?   rj   r,   Za_is_catr   r   r    test_categoricals   s,    $
$r   )numpyr   rc   Zpandas.core.dtypes.commonr   Zpandasr   r   r   r   r   r   r   Zpandas._testingZ_testingr%   r	   r   r   r   r   r   r   r    <module>   s          