U
    sVcxt                     @   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 ejdd 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                  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
S )Nfoobaronetwodullshiny   )ABCDEFT)Zignore_index)r   nprandomrandnpdconcat)df r   F/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/reshape/test_crosstab.pyr      sV    


/r   c                   @   s  e Z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d.d/d0gd1d2ggd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?S )@TestCrosstabc                 C   sF   t |d |d }|ddg  }t||dtj	 d S )Nr   r   r   )
r   groupbysizeunstacktmassert_frame_equalfillnaastyper   int64selfr   resultexpectedr   r   r   test_crosstab_singleG   s    z!TestCrosstab.test_crosstab_singlec                 C   s   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   test_crosstab_multipleL   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cr4   r5   r6   )rownamescolnamesr5   r6   )r9   r8   row_0col_0)
r   r   randintr   r   r"   r#   indexnamescolumns)r(   r-   r4   r5   r6   r   r)   r*   r   r   r   test_crosstab_ndarrayW   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      r4   r5   r6   r=   r1      dfr:   namer;   r=   r?   )r   r   arrayr   r   r   r"   r#   )r(   r4   r5   r6   r*   r)   r   r   r   test_crosstab_non_alignedo   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      r/   r0   r1   r.   r3   r4   r7   T)r8   r9   marginsr4   r5   r6   All i8rO   rF   rB   )r   r   r<   r   r   r=   r>   AssertionErrorr?   r   r    r%   r   lenr   r   r   rG   r"   assert_series_equallocreindexr$   r&   )r(   r4   r5   r6   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   rK   r/   r0   r1   r.   r3   r4   r7   TTOTAL)r8   r9   rL   margins_namerM   r5   r6   )r]   rP   rQ   rF   rB   z&margins_name argument must be a stringi  match)r   r   r<   r   r   r=   r>   rR   r?   r   r    r%   r   rS   r   r   r   rG   r"   rT   rU   rV   r$   r&   pytestraises
ValueError)r(   r4   r5   r6   r   r)   rW   rX   rY   rZ   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   rK   r/   r0   r1   r.   r	   r
   baz)aggfuncr8   r9   )r	   r
   rf   valuesrh   )r=   r?   rg   )
r   r   r<   r   r   sumr   Zpivot_tabler"   r#   )r(   r4   r5   r6   rh   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   r4   r5   r6   F)r8   r9   dropna)r   r   )r   r   )r   r   )r   r   r>   )	r   rI   objectr   r   from_tuplesr"   Zassert_index_equalr?   )r(   r4   r5   r6   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 )NrA      r1   rB   rC   r.      r&   r:   rm   rG   r;   rH   )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 )NrA   ru   r1   rC   r4   r5   TrL   rn   r   r.         ?       @rO   r4   rF   r5   r   r   nanr   r4   r5   r   r=   r?   r"   r#   r(   r   rz   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 )NrA   ru   r1   rC   r|   Tr}   r   r~   r   rO   r4   rF         @      @r5   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 )NrA   ru   r1   rC   r|   Tr}   r   r~   r   rO   r4   rF   r5   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 )NrA   ru   r1   rC   r|   TFr}   r   rv   r~   r   rO   r4   rF   r5   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 )NrA   ru   r1   rC   r|   TFr}   r   rv   r~   r   rO   r4   rF   r   r   r5   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
   rl   r   r   r   r   r4   r5   r6   TF)r8   r9   rL   rn   rO   rP   ro   rA   r   ru   r.   r1   rK   )r?   rF   rB   rv   )r   rI   rp   r   r   r   from_arraysr   r   r=   r"   r#   r?   )r(   r4   r5   r6   rz   rs   r*   r   r   r   test_margin_dropna65  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 )NrA   ru   r1   rC   r3   r4   rF   r5   皙?r   333333?rH   r~         ?      ?      ?all	normalizeTr=   r?   皙?rO   rp   rG   rm   g?r   rL   )	r   r   r   r   r"   r#   r   r4   r5   )
r(   r   rindexZcindexZfull_normalZ
row_normalZ
col_normalZrow_normal_marginsZcol_normal_marginsZall_normal_marginsr   r   r   test_crosstab_normalizef  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 )NrA   ru   r1   rC   r3   r   r   r   r   rO   r4   rp   r   r5   rF   rH   countr   T)rg   r   rL           r   r   )r   r   r   r   rI   r   r4   r5   r6   r"   r#   ri   )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 )NrA   ru   r1   rC   r3   r   r4   r&   r   r5   rF   rH   )Tr=   r?   r   )rh   rg   r   F)r   r   r   r   r   r4   r5   r6   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 )NrA   ru   r1   rC   r3   z)values cannot be used without an aggfunc.r_   )rh   z%aggfunc cannot be used without values)rg   zNot a valid normalize argumentZ42r   *   zNot a valid margins argumentr   r   )r   r   r   ra   rb   rc   r   r4   r5   r6   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   rF   F)
categoriesZorderedrG   ru   r   rA   rH   )	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   threerv   r   r   r      r	   r
   rC      r   r   r   r   r   Tr   )r=   r?   rL   rg   rh   rO   rP   rA   ru   r1   r   levelscodesr>   rp   rw   r   r   g      (@g      8@rH   r&   )r   r   r   r   r   r    r   r   rI   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 )Nr1   r	   rF   rA   rC   r
   Zwaldo)r?   axisr   )r=   r   )r   ranger   Zrename_axisr"   r#   )r(   rx   Zs2_fooZs2_barZs3Zmapperr)   r*   r   r   r   test_crosstab_duplicate_names:  s    
z*TestCrosstab.test_crosstab_duplicate_namesr>   r4   r7   r|   r6   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 )	Nr1   r   rF   rA   rC   ro   rB   )Z
fill_value)r   r   r   r   r!   r   r"   r#   )r(   r>   rx   ry   mir*   r)   r   r   r   test_crosstab_tuple_nameV  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 )Nr1   r|   rF   )r6   rD   r&   rl   rH   )	r   r   r   r   Zeyer   r   r"   r#   )r(   rx   ry   r*   r)   r   r   r   test_crosstab_both_tuple_namesa  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 )Nr1   rA   ru   r.   rC   rv   )r5   r4   r   r   r   rB   r:   rF   )rA   rC   )ru   rv   )r1   r.   r5   r4   ro   r   rH   )
r   r   r=   r5   r4   r   r   rq   r"   r#   )r(   r   r)   Ze_idxZ	e_columnsr*   r   r   r   test_crosstab_unsorted_ordern  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   rv   r   r   r   r   r	   r
   rC   r   r   r   T)rh   rg   r   rL      rA   rl   r2   r1   rO   rp   rw   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   rN   ro   )r?   r=   )r   r   r   r   r   r   r   ri   rI   floatZreshaper   r   rq   r"   r#   r'   r   r   r   (test_crosstab_normalize_multiple_columnsx  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largerA   ru   r1   rC   r.   rv   rK   r   	   r   Tz	Sub-Totalr   )rL   r^   r   r   g]QJVU?F]kSU?9?q?'c`?rP   r   r   r   rp   r   rw   r   r   9?q?r   9?q?r   g#G?)r   r   r   r   r   r   r=   r   r?   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   rA   ru   r1   rC   r.   rv   rK   r   r   r   Tmargin)r=   r?   rL   r^   r   r   r   r   r   r   r   r~   rB   rP   r   r   r   r   r   )r   r   r   r   r   r   r?   r=   rG   r"   r#   r'   r   r   r   &test_margin_normalize_multiple_columns  sL    
z3TestCrosstab.test_margin_normalize_multiple_columnsN)&__name__
__module____qualname__r+   r,   ra   markparametrizer   rI   listtupler@   rJ   r\   re   rk   rt   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   F   s<   
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   r1   r/   r0   ru   TFr}   rA   rO   rp   r;   rw   r:         "       4   0   B   r&   )r   r   ZRandomStater   r<   r%   r   r   r   r"   r#   rU   r   rm   Zvalue_countsrR   repr)r   r   gr4   r5   r)   r?   r=   rh   r*   Za_is_catr   r   r   test_categoricals  s,    $
$r   )Znumpyr   ra   Zpandas.core.dtypes.commonr   Zpandasr   r   r   r   r   r   r   Zpandas._testingZ_testingr"   Zfixturer   r   r   r   r   r   r   r   r   <module>   s     
3     ^