o
    dw                     @   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   V/app/.heroku/python/lib/python3.10/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&dAS )B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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      rC   r4   r>   )r2      r2   rE   r2   )r5   r6   r7   df)r2   rE   r2   dtyperC   r   r;   namer2   rE   r<   r>   r@   )	r   r   arrayr&   r   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s7J |jjddgksAJ |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 i8rS   rJ   rD   )r   r   r=   r   r   r>   r?   r@   r   r    r%   r   lenr   r   r   rK   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s8J |jjddgksBJ |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 d    n1 sw   Y  qd S )Nr   rO   r0   r1   r2   r/   r4   r5   r8   TTOTAL)r9   r:   rP   margins_namerQ   r6   r7   )r`   rT   rU   rJ   rD   z&margins_name argument must be a stringi  match)r   r   r=   r   r   r>   r?   r@   r   r    r%   r   rV   r   r   r   rK   r"   rW   rX   rY   r$   r&   pytestraises
ValueError)r(   r5   r6   r7   r   r)   rZ   r[   r\   r]   r^   msgra   r   r   r   %test_crosstab_margins_set_margin_name   sR   	
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   rO   r0   r1   r2   r/   r	   r
   baz)aggfuncr9   r:   )r	   r
   ri   valuesrk   )r>   r@   rj   )
r   r   r=   r   r   sumr   Zpivot_tabler"   r#   )r(   r5   r6   r7   rk   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	   rH   )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   rM   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;   rI   rK   r<   rL   )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rP   rq   rC   r   rC   rC   r2   rE   )rx   r2   r/         ?       @rS   r5   rJ   r2   rE   rS   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   rJ         @      @rS   r6   r   r   r   r   r   test_margin_dropna2
     *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   rJ   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   rJ   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   rJ   r   r6   r   r   r   r   r   test_margin_dropna5)  r   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 )Nro   rH   r   r   rp   r5   r6   r7   TF)r9   r:   rP   rq   )r   r   r   r   rS   )r   r   r   r   rT   rr   )rC   r   rC   r   rx   )rx   r   rC   rC   r/   )r2   r   rx   rC   rO   )r@   r
   r	   rS   rJ   )r
   r
   r	   r	   rS   )r   r   r   r   rT   r   )rx   r   rx   r   )r/   rx   rO   rD   )r   r   rS   )r/   rC   ry   )r   rM   rs   r   r   r   from_arraysr   r   r>   r"   r#   r@   )r(   r5   r6   r7   r}   rv   r*   r   r   r   test_margin_dropna63  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   rJ   r2   rE   r6   皙?r   333333?rL   r         ?      ?      ?all	normalizeTr>   r@   皙?rC   rx   rS   rs   rK   rI   )r   r   r   )r   r   皙?r   )r   r   r   )r   r   r   r   r   rC   r   rP   )	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_normalized  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   rJ   rL   countr   T)rj   r   rP   r   rE   r2   )r   r           r   )r   r   r   r   rM   r   r5   r6   r7   r"   r#   rl   )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	|| q2t dtjgddggtddgddd	td
dgddd}|rm|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   rJ   rL   )Tr>   r@   r   )rk   rj   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 s0w   Y  d}tjt|d t|j|jtj
d	 W d    n1 sSw   Y  d
}tjt|d t|j|jdd W d    n1 suw   Y  tjt|d t|j|jdd W d    n1 sw   Y  d}tjt|d t|j|jddd W d    d S 1 sw   Y  d S )Nr   r   rC   r4   z)values cannot be used without an aggfunc.rb   )rk   z%aggfunc cannot be used without values)rj   zNot a valid normalize argumentZ42r   *   zNot a valid margins argumentr   r   )r   r   r   rd   re   rf   r   r5   r6   r7   mean)r(   r   errorr   r   r   test_crosstab_errors  s,   "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   rJ   F)
categoriesZorderedrK   )rx   r   r   )rx   r   rC   r   rC   r   rL   )	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@   rP   rj   rk   )rS   r   r   r   )rT   r   r   r   )
rC   rC   rC   rx   rx   rx   r2   r2   r2   r   )
rC   rx   r2   rC   rx   r2   rC   rx   r2   r   Zlevelscodesr?   r   rs   rz   )r   r   r   r   )      (@r   g      8@rL   rS   r&   )r   r   r   r   r   r    r   r   rM   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	   rJ   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_names8  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   rJ   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_nameT  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   rJ   )r7   rF   r&   rH   rL   )	r   r   r   r   eyer   r   r"   r#   )r(   r{   r|   r*   r)   r   r   r   test_crosstab_both_tuple_names_  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;   rJ   ))rC   rE   )rx   ry   )r2   r/   r6   r5   rr   )rC   r   r   r   )r   r   rC   rL   )
r   r   r>   r6   r5   r   r   rt   r"   r#   )r(   r   r)   Ze_idxZ	e_columnsr*   r   r   r   test_crosstab_unsorted_orderl  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)rk   rj   r   rP      rC   rH   r3   r2   r   rs   r   rz   )
)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   rR   r   r   rr   )r@   r>   )r   r   r   r   r   r   r   rl   rM   floatZreshaper   r   rt   r"   r#   r'   r   r   r   (test_crosstab_normalize_multiple_columnsv  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   rO   	rx   rE   r/   r/   ry   ry   r   	   r   r   T	Sub-Totalr   )rP   ra   r   r   g]QJVU?F]kSU?rC   9?q?'c`?)r   r
   r	   rT   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@   rP   ra   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>   rK   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)rC   rx   rx   rC   )r2   r2   rE   r/   )            $@r   r   r,   ZFloat64rH   r   r   r   rl   T)rk   rj   rP   r   r         "@r   g      &@)r   r   r   g      4@r   rs   rz   )r   r   g      @rS   )r>   r@   rI   )r   r   r   ZNAr   r"   r#   r'   r   r   r   test_margin_support_Float  s*   
z&TestCrosstab.test_margin_support_FloatN)'__name__
__module____qualname__r+   r-   rd   markparametrizer   rM   listtuplerA   rN   r_   rh   rn   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   r   F   s@    
2


13$ -


(Q-r   a_dtyper   r&   b_dtypec                 C   sh  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}
|
rm| jd dksmJ t||ddd	}g dg dg dg dg}t|||}	|
s|	jg d }	|	d d|	d< t| t|	 t|	jg d  t	
||	 d S )Nivr   r2   r0   r1   rx   TFr   )r   rC   rS   rs   r<   rz   )r   rC   rx   rS   r;   )      "   )r   r       )4   0   r0   rC   )r   r   r   )r   r   B   )r   rx   rS   rS   r&   )r   r   ZRandomStater   r=   r%   r   r   r   r"   r#   rX   r   rI   Zvalue_countsrepr)r   r   gr5   r6   r)   r@   r>   rk   r*   Za_is_catr   r   r   test_categoricals7  s,   
r  )numpyr   rd   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     v