a
    j=icxt                     @   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   sL   t g dg dg dtjdtjdtjdd} tj| | gddS )N)foor	   r	   r	   barr
   r
   r
   r	   r	   r	   )oner   r   twor   r   r   r   r   r   r   )dullr   shinyr   r   r   r   r   r   r   r      )ABCDEFT)Zignore_index)r   nprandomrandnpdconcat)df r   s/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/tests/reshape/test_crosstab.pyr      s    


/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}|g d }|dddtj}t	|| t |d |d g|d }|g d }|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"   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cr5   r6   r7   )rownamescolnamesr6   r7   )r:   r9   row_0col_0)
r   r   randintr   r   r"   r#   indexnamescolumns)r(   r.   r5   r6   r7   r   r)   r*   r   r   r   test_crosstab_ndarrayW   s    


z"TestCrosstab.test_crosstab_ndarrayc                 C   s   t g dg dd}t g dg dd}tg d}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 )Nr      rC   r4   r>   )r2      r2   rE   r2   )r5   r6   r7   df)r2   rE   r2   rC   r   r;   namer2   rE   r<   r>   r@   )r   r   arrayr   r   r   r"   r#   )r(   r5   r6   r7   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snJ |jjddgksJ |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      r0   r1   r2   r/   r4   r5   r8   T)r9   r:   marginsr5   r6   r7   All i8rQ   rH   rD   )r   r   r=   r   r   r>   r?   r@   r   r    r%   r   lenr   r   r   rI   r"   assert_series_equallocreindexr$   r&   )r(   r5   r6   r7   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spJ |jjddgksJ |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 ]P}tjt|d* t|||gdgd	d
|d W d    n1 s0    Y  q`d S )Nr   rM   r0   r1   r2   r/   r4   r5   r8   TTOTAL)r9   r:   rN   margins_namerO   r6   r7   )r^   rR   rS   rH   rD   z&margins_name argument must be a stringi  match)r   r   r=   r   r   r>   r?   r@   r   r    r%   r   rT   r   r   r   rI   r"   rU   rV   rW   r$   r&   pytestraises
ValueError)r(   r5   r6   r7   r   r)   rX   rY   rZ   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   r0   r1   r2   r/   r	   r
   baz)aggfuncr9   r:   )r	   r
   rg   valuesri   )r>   r@   rh   )
r   r   r=   r   r   sumr   Zpivot_tabler"   r#   )r(   r5   r6   r7   ri   tabler   r*   r   r   r   test_crosstab_pass_values   s    z&TestCrosstab.test_crosstab_pass_valuesc                 C   sz   t jg dtd}t jg dtd}t jg dtd}t|||gdgddgdd	}tjg d
ddgd}t|j| d S )Nr	   r	   r	   r
   r
   r	   r	   dtype)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r6   r7   F)r9   r:   dropna))r   r   )r   r   )r   r   )r   r   r?   )	r   rK   objectr   r   from_tuplesr"   Zassert_index_equalr@   )r(   r5   r6   r7   resmr   r   r   test_crosstab_dropna   s    z!TestCrosstab.test_crosstab_dropnac                 C   sb   t g dg dd}t g dg dd}t||}ttg dddtg dddd}t|| d S )	N)rC      r2   rD   )rE   r/      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g dd}t|j|jddd}t g dg dg d	g}tg d
dd|_tg ddd|_t	
|| d S )NrC   rx   r2   r2   rE   rE   rE   rE   r5   r6   TrN   rq   rC   r   rC   rC   r2   rE   )rx   r2   r/         ?       @rQ   r5   rH   r2   rE   rQ   r6   r   r   nanr   r5   r6   r   r>   r@   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 g dg d	g d
g}tg ddd|_tg ddd|_t	
|| d S )NrC   rx   r2   rE   r   Tr   r   rB   rC   rC   rx   r   r5   rH   g      @      @rQ   r6   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g dd}t|j|jddd}t g dg dg d	g}tg d
dd|_tg ddd|_t	
|| d S )NrC   rx   r   r   Tr   r   rB   r   r   r5   rH   r   r6   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g dd}t|j|jddd}t g dg d	g d
g}tg ddd|_tg ddd|_t	
|| d S )NrC   rx   r   r   TFr   r   r   )rx   rE   ry   r   r5   rH   r   r6   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 g d	g d
g dg}tg ddd|_tg ddd|_t	
|| d S )NrC   rx   r2   rE   r   TFr   r   rB   )rC   rE   ry   r   r5   rH   r   r6   r   r   r   r   r   test_margin_dropna5+  s    *z TestCrosstab.test_margin_dropna5c                 C   s  t jg dtd}t jdddddt jdgtd}t jg dtd}t|||gdgddgd	d
d}tjg dg dgddgd}tg dg dg dg|d}tg ddd|_	t
|| t||g|ddgdgd	d
d}tjg dg dgddgd}tg dg dg dg dg dg|d}tg ddd|_t
|| t||g|ddgdgd	d	d}tjg dg dgddgd}tg dg dg dg dg dg|d}tg ddd|_t
|| d S )Nrm   rn   r   r   rp   r5   r6   r7   TF)r9   r:   rN   rq   )r   r   r   r   rQ   )r   r   r   r   rR   rr   )rC   r   rC   r   rx   )rx   r   rC   rC   r/   )r2   r   rx   rC   rM   )r@   r
   r	   rQ   rH   )r
   r
   r	   r	   rQ   )r   r   r   r   rR   r   )rx   r   rx   r   )r/   rx   rM   rD   )r   r   rQ   )r/   rC   ry   )r   rK   rs   r   r   r   from_arraysr   r   r>   r"   r#   r@   )r(   r5   r6   r7   r}   rv   r*   r   r   r   test_margin_dropna65  sV    ""z TestCrosstab.test_margin_dropna6c           
      C   sP  t g dg d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g ddddtdd	gd
ddd}t g dg dgtddgdddtg dd
ddd}t g dg d g d!gtg ddddtg d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 )#NrC   rx   rx   rx   rx   r2   r2   rE   rE   rE   rC   r4   rx   r5   rH   r2   rE   r6   皙?r   333333?rJ   r         ?      ?      ?all	normalizeTr>   r@   皙?rC   rx   rQ   rs   rI   ro   )r   r   r   )r   r   皙?r   )r   r   r   )r   r   r   r   r   rC   r   rN   )	r   r   r   r   r"   r#   r   r5   r6   )
r(   r   rindexZcindexZfull_normalZ
row_normalZ
col_normalZrow_normal_marginsZcol_normal_marginsZall_normal_marginsr   r   r   test_crosstab_normalizef  sV     z$TestCrosstab.test_crosstab_normalizec                 C   s<  t g dg dddtjddgd}ttg dtg dgtg d t g dg dg d	gtg d
dddtg dddd}t|j|j|jdddd}t	
|| t g dg dddtjddgd}t g dg dg dgtg d
dddtg ddddd}t|j|j|jtjddd}t	
|| d S )Nr   r   rC   r4   )rC   rC   rx   rx   )rC   rx   rC   rx   )r   r   r   )r   r   r   )r   r   rC   r   r5   rs   r   r   r6   rH   rJ   countr   T)rh   r   rN   r   rE   r2   )r   r           r   )r   r   r   r   rK   r   r5   r6   r7   r"   r#   rj   )r(   r   Znorm_countsZ	test_caseZnorm_sumr   r   r   test_crosstab_normalize_arrays  s6    &z+TestCrosstab.test_crosstab_normalize_arraysc                 C   s  t g dg d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	|| qdt 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 )Nr   r   r4   r   rC   rx   r5   r&   r   r2   rE   r6   rH   rJ   )Tr>   r@   r   )ri   rh   r   F)r   r   r   r   r   r5   r6   r7   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 g dg dddtjddgd}d}tjt|d$ t|j|j|j	d W d    n1 s`0    Y  d}tjt|d$ t|j|jtj
d	 W d    n1 s0    Y  d
}tjt|d" t|j|jdd W d    n1 s0    Y  tjt|d" t|j|jdd W d    n1 s,0    Y  d}tjt|d$ t|j|jddd W d    n1 st0    Y  d S )Nr   r   rC   r4   z)values cannot be used without an aggfunc.r`   )ri   z%aggfunc cannot be used without values)rh   zNot a valid normalize argumentZ42r   *   zNot a valid margins argumentr   r   )r   r   r   rb   rc   rd   r   r5   r6   r7   mean)r(   r   errorr   r   r   test_crosstab_errors  s"    2202z!TestCrosstab.test_crosstab_errorsc                 C   s   t g dg dd}g d}|d dj||d< t|d |d }tg ddd	}t||d
dd}g dg dg dg}t |||d}t|| d S )N)HondaAcuraTeslar   r   r   )Sedanr   ElectricPickupr   r   )MAKEMODEL)r   r   r   r   categoryr   )r   r   r   rH   F)
categoriesZorderedrI   )rx   r   r   )rx   r   rC   r   rC   r   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   s0  t g dd g dd g dd tjdtjdd}t|d	 |d
 g|d gdtj|d d}tg dg dgg dg dgd	d
gd}tg dddd}tg dg dg d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g dg
}t |||d}|d 
d|d< t|| d S )Nr   r   r   threery   r,      r	   r	   r	   r
   r
   r
   rE      r   r   r   r   r   r   r   r   Tr   )r>   r@   rN   rh   ri   )rQ   r   r   r   )rR   r   r   r   )
rC   rC   rC   rx   rx   rx   r2   r2   r2   r   )
rC   rx   r2   rC   rx   r2   rC   rx   r2   r   levelscodesr?   r   rs   rz   )r   r   r   r   )      (@r   g      8@rJ   rQ   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  sN    




	





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 )Nr2   r	   rH   rC   rE   r
   Zwaldo)r@   axisr   )r>   r   )r   ranger   Zrename_axisr"   r#   )r(   r{   Zs2_fooZs2_barZs3Zmapperr)   r*   r   r   r   test_crosstab_duplicate_names:  s    
z*TestCrosstab.test_crosstab_duplicate_namesr?   r5   r8   r   r7   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 )	Nr2   r   rH   rC   rE   rr   rD   )Z
fill_value)r   r   r   r   r!   r   r"   r#   )r(   r?   r{   r|   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 )Nr2   r   rH   )r7   rF   r&   rn   rJ   )	r   r   r   r   eyer   r   r"   r#   )r(   r{   r|   r*   r)   r   r   r   test_crosstab_both_tuple_namesa  s    
z+TestCrosstab.test_crosstab_both_tuple_namesc                 C   s   t g dg ddg dd}t|j|j|jg}tg ddd}tjg d	d
dgd}t g dg dg dg||d}t	|| d S )N)r2   rC   rx   )r/   rE   ry   )r6   r5   )r   r   r   rD   r,   r;   rH   ))rC   rE   )rx   ry   )r2   r/   r6   r5   rr   )rC   r   r   r   )r   r   rC   rJ   )
r   r   r>   r6   r5   r   r   rt   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 g dd g dd g d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g ddddtjg dddgdd}t|| d S )Nr   ry   r,   r   r   rE   r   r   r   T)ri   rh   r   rN      rC   rn   r3   r2   r   rs   r   rz   )
)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   rP   r   r   rr   )r@   r>   )r   r   r   r   r   r   r   rj   rK   floatZreshaper   r   rt   r"   r#   r'   r   r   r   (test_crosstab_normalize_multiple_columnsx  s2    


	
 z5TestCrosstab.test_crosstab_normalize_multiple_columnsc                 C   s  t g dg dg dg dg d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g dg dgg dg dgddgd|_tddgddd|_t	
|| t|j|jg|jdddd
}t g dg dg dg dg}tg d ddd|_td!d"gd#d$ggg d%g d&gddgd|_t	
|| t|j|jg|jdddd
}t g d'g d'g d(g d)g d*g}tg d ddd|_tg dg dgg dg dgddgd|_t	
|| d S )+N	r	   r	   r	   r	   r	   r
   r
   r
   r
   	r   r   r   r   r   r   r   r   r   	smalllarger   r   r   r   r   r   r   	rC   rx   rx   r2   r2   rE   r/   ry   rM   	rx   rE   r/   r/   ry   ry   r   	   r   r   T	Sub-Totalr   )rN   r_   r   r   g]QJVU?F]kSU?rC   9?q?'c`?)r   r
   r	   rR   r   r   )rC   rC   rx   rx   r   rC   rx   rC   rx   r   r   r   r   r   r   rs   r   rz   )r   r   9?q?)r   r   r   )r   r   r   )r   r   r   r
   r	   r   r   )r   r   rC   rC   )r   rC   r   rC   )9?q?r   r   )r   r   r   )r   r   r   )r   g#G?rC   )r   r   r   r   r   r   r>   r   r@   r"   r#   r'   r   r   r   test_margin_normalize  sx     
	
z"TestCrosstab.test_margin_normalizec                 C   s   t g dg dg dg dg dd}t|j|j|jgdddd	}t g d
g dg dgg dd}tg dg dgg dg dgddgd|_d|j_t	
|| d S )Nr   r   r   r   r   r   Tmargin)r>   r@   rN   r_   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   rD   )r
   r	   r   r   )r   r   rC   rC   rx   r   r   r   r   r   )r   r   r   r   r   r   r@   r>   rI   r"   r#   r'   r   r   r   &test_margin_normalize_multiple_columns  s:    
z3TestCrosstab.test_margin_normalize_multiple_columnsN)&__name__
__module____qualname__r+   r-   rb   markparametrizer   rK   listtuplerA   rL   r]   rf   rl   rw   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   sj  t jd}t|jdddd| }t|jdddd|}t||ddd	}tg d
ddd}tg dddd}g dg dg dg dg}t|||}	t	
||	 d|j|dk< t|j}
|
r| jd dksJ t||ddd	}g dg dg dg dg}t|||}	|
s8|	jg d }	|	d d|	d< t| t|	 t|	jg d  t	
||	 d S )Nivr   r2   r0   r1   rx   TFr   )r   rC   rQ   rs   r<   rz   )r   rC   rx   rQ   r;   )      "   )r   r       )4   0   r0   rC   )r   r   r   )r   r   B   )r   rx   rQ   rQ   r&   )r   r   ZRandomStater   r=   r%   r   r   r   r"   r#   rV   r   ro   Zvalue_countsrepr)r   r   gr5   r6   r)   r@   r>   ri   r*   Za_is_catr   r   r   test_categoricals  s,    
r   )numpyr   rb   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     ^