U
    Kvf8                     @   s   d dl mZmZ d dlZd dlmZ d dlZd dl	Z	d dl
mZ d dlmZmZmZmZmZ d dlmZmZ G dd dZG d	d
 d
eZG dd deZdd Zdd Ze	jjdd Ze	jjdd Zdd ZdS )    )assert_frame_equalassert_series_equalN)assert_equal)sparse)dummy_sparseGroupingGroupcombine_indices
group_sums)grunfeldanes96c                   @   s\   e Zd Zejjdd Zdd Zdd Zdd Z	d	d
 Z
dd Zejjdd Zdd ZdS )CheckGroupingc                 C   s   | j | j j d S N)groupingZreindexindexself r   K/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tools/tests/test_grouputils.pytest_reindex   s    zCheckGrouping.test_reindexc                 C   s&   | j jdd tj| j j| j d S )Nr   level)r   Zcount_categoriesnptestingr   countsexpected_countsr   r   r   r   test_count_categories   s    z#CheckGrouping.test_count_categoriesc                 C   sX  | j | j\}}| j }t|| tjt|t	j
 tj|| j j  t|drrtj|| j  | j | jj\}}tj||j tjt|tj | j| jjd  }| j |\}}| }t|| tjt|t	j t|drtj||  |j}| j |\}}| j}tj|| tjt|tj d S )Nequalsr   )r   sortdataZ
sort_indexr   r   r   Zassert_
isinstancepdZ	DataFramer   r   hasattrvaluesassert_array_equalZndarraycolumnsr   Series)r   Zsorted_datar   Zexpected_sorted_dataZseriesarrayr   r   r   	test_sort   s0    




zCheckGrouping.test_sortc                 C   s  | j jj}| jj| j dd dd}|d gt| j j }| j  | |d }|| j j j	dd}|
dd }tj||j t|dkr| jj| j dd dd}|d gt| j j }| j  | |d }|j	dd}|
dd | j j }tj||j d S )	Nc                 S   s   |   S r   meanxr   r   r   <lambda>A       z8CheckGrouping.test_transform_dataframe.<locals>.<lambda>r   r   c                 S   s   |   S r   r)   r+   r   r   r   r-   F   r.      c                 S   s   |   S r   r)   r+   r   r   r   r-   L   r.   c                 S   s   |   S r   r)   r+   r   r   r   r-   Q   r.   )r   r   namesr   Ztransform_dataframelistr%   reset_index	set_indexgroupbyapplyr   r   assert_allcloser#   len)r   r0   Ztransformed_dataframecolsdfgroupedexpectedr   r   r   test_transform_dataframe=   s4    
 z&CheckGrouping.test_transform_dataframec                 C   s  | j jj}| jj| j jdd dd}|d gt| j j }| j  | 	|d }|| j j j
dd}|dd }tj||j t|dkr| jj| j jdd dd}|d gt| j j }| j  | 	|d }|| j j j
dd}|dd | j j }tj||j d S )	Nc                 S   s   |   S r   r)   r+   r   r   r   r-   Y   r.   z4CheckGrouping.test_transform_array.<locals>.<lambda>r   r   c                 S   s   |   S r   r)   r+   r   r   r   r-   ^   r.   r/   c                 S   s   |   S r   r)   r+   r   r   r   r-   e   r.   c                 S   s   |   S r   r)   r+   r   r   r   r-   i   r.   )r   r   r0   r   Ztransform_arrayr#   r1   r%   r2   r3   r4   r5   r   r   r6   r7   )r   r0   Ztransformed_arrayr8   r9   r:   r;   r   r   r   test_transform_arrayU   s4    
 z"CheckGrouping.test_transform_arrayc                 C   s   | j jj}| jj| j jdd dd}| j  |d | j j 	 }t
jj||jddd t|dkr| jj| j jd	d dd}| j  |d | j j 	 }t
jj||jddd d S )
Nc                 S   s
   |  dS Nr   r)   r,   idxr   r   r   r-   r   r.   z5CheckGrouping.test_transform_slices.<locals>.<lambda>r   r   g-q=g}:)ZrtolZatolr/   c                 S   s
   |  dS r>   r)   r?   r   r   r   r-   |   r.   )r   r   r0   r   Ztransform_slicesr#   r2   r4   r%   r*   r   r   r6   r7   )r   r0   Ztransformed_slicesr;   r   r   r   test_transform_slicesn   s<    

 
 z#CheckGrouping.test_transform_slicesc                 C   s,   | j   t| j jdkr(| j jdd d S )Nr/   r   )r   Zdummies_groupsr7   group_namesr   r   r   r   test_dummies_groups   s    
z!CheckGrouping.test_dummies_groupsc                 C   s   | j }| j  |jdj}tjtj|dddd}t	j
| jj | t| jjdkr| jjdd |jdj}tjtj|dddd}t	j
| jj | d S )Nr   categoryZdtypeF)Z
drop_firstr/   r   )r   r   r   r   get_level_valuesr#   r!   Zget_dummiesr&   r   r   r   Z_dummiesZtoarrayr7   rB   )r   r   r#   r;   r   r   r   test_dummy_sparse   s     
zCheckGrouping.test_dummy_sparseN)__name__
__module____qualname__pytestmarksmoker   r   r(   r<   r=   rA   rC   rG   r   r   r   r   r      s   
%
r   c                   @   s   e Zd Zedd ZdS )TestMultiIndexGroupingc                 C   s>   t  j}|ddg}|j}t|| _|| _dgd | _d S )Nfirmyear      r   load_pandasr   r3   r   r   r   r   )cls	grun_dataZmulti_index_datamulti_index_panelr   r   r   setup_class   s    

z"TestMultiIndexGrouping.setup_classNrH   rI   rJ   classmethodrX   r   r   r   r   rN      s   rN   c                   @   s   e Zd Zedd ZdS )TestIndexGroupingc                 C   s<   t  j}|dg}|j}t|| _|| _dgd | _d S )NrO   rQ   rR   rS   )rU   rV   Z
index_dataindex_groupr   r   r   rX      s    

zTestIndexGrouping.setup_classNrY   r   r   r   r   r[      s   r[   c            	      C   sB  t  j} | ddgj}t|}tj|j	ddg tj|j
d tj|jddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgdddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
dddddddddddddddddd	dd
ddddddddddgg t|ddgd}tj|j	ddg t j}|dddgj}t|}tj|j	dddg tj|j
d | }t|ddgd}tj|j	ddg tj|j
d | }t|dddgd}tj|j	dddg tj|j
d |d}t|}tj|j	dg tj|j
d |d }t|}tj|j	dg tj|j
d  t|}tj|j	dd!d"g d S )#NrO   rP   )rR   rQ               r/      	   
         r   rR                           Zfirms)r0   ZeducZincomeZTVnews)ra      r^   )   group0ro   group1Zgroup2)r   rT   r   r3   r   r   r   r   r$   rB   Zindex_shapelabelsr   tolistrF   )	rV   rW   r   Z	anes_dataZmulti_index_groupsZ
list_panelZlist_groupsr\   Z
list_groupr   r   r   test_init_api   s   

"                                                                                                                                                                                               "                                                                                                                                                                                               




rt   c            	      C   s   t jd t jjdddd} t| dd\}}}}t| dd	dd
\}}}}t ddg| d d df  }t ddg| d d df  }t||fdd	dd
\}}}}t||fdddd
\}}}}t || }t jddddddddddg
dd}t|| d S )Ni	 r   r`   )rc   r`   )sizeT)return_labelszg1,g2=,)prefixseprv   Zsector0Zsector1Zregion0Zregion1r/   zsector,region= .zsector1.region0zsector0.region1zsector0.region0zsector1.region1z|U15rE   )r   randomseedrandintr	   r'   r   )	groupsZuvZuxulabelrp   rq   Zgroup_jointZgroup_joint_expectedr   r   r   test_combine_indices  s<        r   c               
   C   s   t ddddddddg} tt t| d d t| dd| ddj tt t| d d t| ddd d d d df |  tt t| d d t| ddd d d d df |  d S )Nr   r/   r`   re   F)Zuse_bincount)r   r'   r
   aranger7   reshapeT)gr   r   r   test_group_sums   s    &<r   c               
   C   s`   t ddddddddg} t t| d jt| ddd}t| }|j || |  d S )Nr   r/   r`   re   F)order)	r   r'   r   r7   r   r   Z	group_intr
   rr   )r   r,   Zmygroupr   r   r   test_group_class+  s    "
r   c               
   C   s   t dddddddg} t| }t|tjs0t| }t jdddgdddgdddgdddgdddgdddgdddggt j	d}t
|| t ddddddg} t| }| }t jdddgdddgdddgdddgdddgdddggt j	d}t
|| d S )Nr   r`   r/   rE   )r   r'   r   r    r   Z
csr_matrixAssertionErrorZtodenseZmatrixZint8r   )r   Zindiresultr;   r   r   r   rG   8  s8    
rG   )Zstatsmodels.compat.pandasr   r   Znumpyr   Znumpy.testingr   Zpandasr!   rK   Zscipyr   Zstatsmodels.tools.grouputilsr   r   r   r	   r
   Zstatsmodels.datasetsr   r   r   rN   r[   rt   r   rL   rM   r   r   rG   r   r   r   r   <module>   s$    R


