U
    ÎZjxt  ã                   @   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   úe/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/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s‚t‚|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s„t‚|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)Ú
categoriesÚ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   ©Z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   Ú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]kïSUÕ?ç³Ñ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sèt‚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 )NiðvŒ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Ú   )Ú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     ^