a
    PfB                     @   s   d dl Zd dlZd dlZd dlmZ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)CategoricalDtypeCategoricalIndex	DataFrameIndex
MultiIndexSeriescrosstabc               	   C   s^   t g dg dg dtjddtjddtjd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default_rngstandard_normalpdconcat)df r   [/var/www/ai-form-bot/venv/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?d@ Z&dAdB Z'dCS )D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_singleF   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_multipleK   s    z#TestCrosstab.test_crosstab_multipleboxc                 C   s  |t jdjdddd}|t jdjdddd}|t jd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   r      d   r"      
   abcr7   r8   r9   )rownamescolnamesr8   r9   )r<   r;   row_0col_0)r   r   r   integersr   r   r$   r%   indexnamescolumns)r*   r0   r7   r8   r9   r   r+   r,   r   r   r   test_crosstab_ndarrayV   s    


z"TestCrosstab.test_crosstab_ndarrayc                 C   s   t g dg dd}t g dg dd}tjg dtj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      rE   r6   r@   )r4      r4   rG   r4   )r7   r8   r9   df)r4   rG   r4   dtyperE   r   r=   namer4   rG   r>   r@   rB   )	r   r   arrayr(   r   r   r   r$   r%   )r*   r7   r8   r9   r,   r+   r   r   r   test_crosstab_non_alignedn   s    

z&TestCrosstab.test_crosstab_non_alignedc                 C   sb  t jdjdddd}t jdjdddd}t jdjdddd}t|||d}t|||gd	gd
dd}|jjdksJ |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   r      r2   r3   r4   r1   r6   r7   r:   T)r;   r<   marginsr7   r8   r9   All i8rU   rL   rF   )r   r   r   r?   r   r   r@   rA   rB   r!   r"   r'   r   lenr   r   r   rM   r$   assert_series_equallocreindexr&   r(   )r*   r7   r8   r9   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djdddd}t jdjdddd}t jdjdddd}t|||d}t|||gd	gd
ddd}|jjdksJ |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  qrd S )Nr   r   rQ   r2   r3   r4   r1   r6   r7   r:   TTOTAL)r;   r<   rR   margins_namerS   r8   r9   )rb   rV   rW   rL   rF   z&margins_name argument must be a stringi  match)r   r   r   r?   r   r   r@   rA   rB   r!   r"   r'   r   rX   r   r   r   rM   r$   rY   rZ   r[   r&   r(   pytestraises
ValueError)r*   r7   r8   r9   r   r+   r\   r]   r^   r_   r`   msgrc   r   r   r   %test_crosstab_margins_set_margin_name   sL    	
z2TestCrosstab.test_crosstab_margins_set_margin_namec                 C   s   t jdjdddd}t jdjdddd}t jdjdddd}t jdd}t||g||dd	d
gdgd}t||||d}|jdd	d
gddd}t	|| d S )Nr   r   rQ   r2   r3   r4   r1   sumr	   r
   baz)aggfuncr;   r<   )r	   r
   rl   valuesrn   )r@   rB   rm   )
r   r   r   r?   r   r   r   Zpivot_tabler$   r%   )r*   r7   r8   r9   rn   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	   rJ   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r8   r9   F)r;   r<   dropna))r   r   )r   r   )r   r   )r   r   rA   )	r   rO   objectr   r   from_tuplesr$   Zassert_index_equalrB   )r*   r7   r8   r9   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)rE   r   r4   rF   )rG   r1      r(   r=   rK   rM   r>   rN   )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 )NrE   r   r4   r4   rG   rG   rG   rG   r7   r8   TrR   rs   rE   r   rE   )rE   r4   rG   )r   r4   r1         ?       @rU   r7   rL   r4   rG   rU   r8   r   r   nanr   r7   r8   r   r@   rB   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 )NrE   r   r4   rG   r   Tr   r   rD   rE   rE   r   r   r7   rL   )      @      @rU   r8   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 )NrE   r   r   r   Tr   r   rD   r   r   r7   rL   r   r8   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	d
dtjgg dg}tddtjdgdd|_tg ddd|_t	
|| d S )NrE   r   r   r   TFr   rE   r   r   )rE   r4   r   r   )r   rG         @r   r   rU   r7   rL   r   r8   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
dddtjgg dg}tddtjdgdd|_tddtjdgdd|_t	
|| d S )NrE   r   r4   rG   r   TFr   )rE   r   r   r   )r   rE   r   r   r   )rE   rG   r   r   r   r   rU   r7   rL   r   r   r8   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ddddt jt jdg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ddt jddt jdggddgd}tg dg dddt jgg dg dddt jg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 )%Nrq   rJ   r   r   rr   r7   r8   r9   TF)r;   r<   rR   rs   rU   )r   r   r   r   r   r   rV   rt   )rE   r   rE   r   r   r   r   )r   r   rE   rE   r   rE   r1   )r4   r   r   rE   r   r   rQ   )rB   r
   r	   rU   rL   )r
   r
   r
   r	   r	   r	   rU   rV   r   r   )r   r   r   )rE   rE   r   rE   )r1   r   g      @rF   )r   r   rU   )r
   r
   r	   r	   rU   )r   r   r   r   rV   r   )r   r   r   r   )r1   rE   rz   )r   rO   ru   r   r   r   from_arraysr   r   r@   r$   r%   rB   )r*   r7   r8   r9   r~   rx   r,   r   r   r   test_margin_dropna66  sl    

	"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rE   r   r   r   r   r4   r4   rG   rG   rG   rE   r6   r   r7   rL   r4   rG   r8   皙?r   333333?rN   r         ?      ?      ?all	normalizeTr@   rB   皙?rE   r   rU   ru   rM   rK   )r   r   r   )r   r   皙?r   )r   r   r   )r   r   r   r   r   rE   r   rR   )	r   r   r   r   r$   r%   r   r7   r8   )
r*   r   rindexZcindexZfull_normalZ
row_normalZ
col_normalZrow_normal_marginsZcol_normal_marginsZall_normal_marginsr   r   r   test_crosstab_normalizeu  sV     z$TestCrosstab.test_crosstab_normalizec              	   C   sp  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}d}t	jt|d, t|j|j|jtjddd}W d    n1 sV0    Y  t	
|| d S )Nr   r   rE   r6   )rE   rE   r   r   )rE   r   rE   r   )r   r   r   )r   r   r   )r   r   rE   r   r7   ru   r   r   r8   rL   rN   countr   T)rm   r   rR   r   rG   r4   )r   r           r   using DataFrameGroupBy.sumrd   )r   r   r   r   rO   r   r7   r8   r9   r$   r%   assert_produces_warningFutureWarningrk   )r*   r   Znorm_countsZ	test_caseZnorm_sumri   r   r   r   test_crosstab_normalize_arrays  s:    &&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   r6   r   rE   r   r7   r(   r   r4   rG   r8   rL   rN   )Tr@   rB   r   )rn   rm   r   F)r   r   r   r   r   r7   r8   r9   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   rE   r6   z)values cannot be used without an aggfunc.rd   )rn   z%aggfunc cannot be used without values)rm   zNot a valid normalize argumentZ42r   *   zNot a valid margins argumentr   r   )r   r   r   rf   rg   rh   r   r7   r8   r9   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   rL   F)
categoriesorderedrM   )r   r   r   )r   r   rE   r   rE   r   rN   )	r   r'   catZset_categoriesr   r   r   r$   r%   )r*   r   r   r+   expected_indexexpected_columnsexpected_datar,   r   r   r   %test_crosstab_with_categorial_columns  s"    z2TestCrosstab.test_crosstab_with_categorial_columnsc                 C   s:  t g dd g dd g dd tjddtjd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}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   threerz   r.      r	   r	   r	   r
   r
   r
   rG   r      r   r   r   r   r   r   r   r   Tr   )r@   rB   rR   rm   rn   )rU   r   r   r   )rV   r   r   r   )
rE   rE   rE   r   r   r   r4   r4   r4   r   )
rE   r   r4   rE   r   r4   rE   r   r4   r   ZlevelscodesrA   r   rL   )r   r   r   r   )      (@r   g      8@rN   rU   r(   )r   r   r   r   r   r   r"   r   r   rO   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 )Nr4   r	   rL   rE   rG   r
   Zwaldo)rB   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_namesK  s    
z*TestCrosstab.test_crosstab_duplicate_namesrA   r7   r:   r   r9   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 )	Nr4   r   rL   rE   rG   rt   rF   )Z
fill_value)r   r   r   r   r#   r   r$   r%   )r*   rA   r|   r}   mir,   r+   r   r   r   test_crosstab_tuple_nameg  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 )Nr4   r   rL   )r9   rH   r(   rJ   rN   )	r   r   r   r   eyer   r   r$   r%   )r*   r|   r}   r,   r+   r   r   r   test_crosstab_both_tuple_namesr  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)r4   rE   r   )r1   rG   rz   )r8   r7   r   r   r   rF   r.   r=   rL   ))rE   rG   )r   rz   )r4   r1   r8   r7   rt   )rE   r   r   r   )r   r   rE   rN   )
r   r   r@   r8   r7   r   r   rv   r$   r%   )r*   r   r+   Ze_idxZ	e_columnsr,   r   r   r   test_crosstab_unsorted_order  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	}d
}tjt|d2 t|j|jg|j|jt	j
ddd}W d    n1 s0    Y  t t	jdgd dg tdddtg dddtjg dddgdd}t|| d S )Nr   rz   r.   r   r   rG   r   r   r   r   rd   T)rn   rm   r   rR      rE   rJ   r5   r4   r   r   rL   )
)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   rT   r   r   rt   )rB   r@   )r   r$   r   r   r   r   r   r   r   r   rk   rO   floatZreshaper   r   rv   r%   )r*   r   ri   r+   r,   r   r   r   (test_crosstab_normalize_multiple_columns  s6    




$ 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|_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|_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|_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   	rE   r   r   r4   r4   rG   r1   rz   rQ   	r   rG   r1   r1   rz   rz   r   	   r   r   T	Sub-Totalr   )rR   rc   r   r   g]QJVU?F]kSU?rE   9?q?'c`?)r   r
   r	   rV   r   r   )rE   rE   r   r   r   rE   r   rE   r   r   r   r   r   r   r   r   rL   )r   r   9?q?)r   r   r   )r   r   r   )r   r   r   r
   r	   r   r   )r   r   rE   rE   r   rE   r   rE   )9?q?r   r   )r   r   r   )r   r   r   )r   g#G?rE   )r   r   r   r   r   r   r@   r   rB   r$   r%   r)   r   r   r   test_margin_normalize  sp     	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@   rB   rR   rc   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   rF   )r
   r	   r   r   )r   r   rE   rE   r   r   r   r   r   r   )r   r   r   r   r   r   rB   r@   rM   r$   r%   r)   r   r   r   &test_margin_normalize_multiple_columns  s:    
z3TestCrosstab.test_margin_normalize_multiple_columnsc                 C   s   t g dg dg dddd}t|d |d |d	 d
dd}t dtjddgddtjdgg dgtg ddddtg dddddd}t|| d S )N)rE   r   r   rE   )r4   r4   rG   r1   )            $@r   r   r.   ZFloat64rJ   r   r   r   rk   T)rn   rm   rR   r   r         "@r   g      &@)r   r   r   g      4@r   ru   r{   )r   r   g      @rU   )r@   rB   rK   )r   r   r   ZNAr   r$   r%   r)   r   r   r   test_margin_support_Float.  s*    
z&TestCrosstab.test_margin_support_Floatc                 C   s   t g dg dd}|d tdd|d< g d}|d j||d< t|d |d dd	}tg d
dd}tg ddd}g dg dg dg dg}t |||d}t|| d S )N)r   r   r   r   r   r   )r   r   r   r   r   r   )FirstSecondr   T)r   r   r   )rR   )r   r   r   rU   rL   )r   r   r   rU   )rE   rE   r   r   r   )r   rE   r   r4   )rE   r4   r   rz   rN   )	r   r'   r   r   Zreorder_categoriesr   r   r$   r%   )r*   r   Zcustomized_categories_orderr+   r   r   r   r,   r   r   r   +test_margin_with_ordered_categorical_columnH  s     z8TestCrosstab.test_margin_with_ordered_categorical_columnN)(__name__
__module____qualname__r-   r/   rf   markparametrizer   rO   listtuplerC   rP   ra   rj   rp   ry   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    E   s@   
2

?3& -


+M-r    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t}
|
r| jd dksJ t||ddd}g dg dg dg dg}t|||}	|
s:|	jg d }	|	d d|	d< t	
||	 d S )Nr   r   r4   r2   r3   TFr   )r   rE   rU   ru   r>   r{   )r   rE   r   rU   r=   )r5         )      '   )   r  !   )2   r	  r2   rE   )r   r   r   )(       H   )r   r   rU   rU   r(   )r   r   r   r   r?   r'   r   r   r   r$   r%   rZ   
isinstancerK   r   Zvalue_counts)r   r  gr7   r8   r+   rB   r@   rn   r,   Za_is_catr   r   r   test_categoricals^  s&    r  )numpyr   rf   Zpandasr   r   r   r   r   r   r   r   Zpandas._testingZ_testingr$   Zfixturer   r    r   r   r  r   r   r   r   <module>   s    $	
3      