
    M/Ph8                     *   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          Z G d	 d
e          Z G d de          Zd Zd Ze	j        j        d             Ze	j        j        d             Zd ZdS )    )assert_frame_equalassert_series_equalN)assert_equal)sparse)dummy_sparseGroupingGroupcombine_indices
group_sums)grunfeldanes96c                       e Zd Zej        j        d             Zd Zd Zd Z	d Z
d Zej        j        d             Zd Zd	S )
CheckGroupingc                 N    | j                             | j         j                   d S N)groupingreindexindexselfs    g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/tools/tests/test_grouputils.pytest_reindexzCheckGrouping.test_reindex   s#    dm122222    c                     | j                             d           t          j                            | j         j        | j                   d S )Nr   level)r   count_categoriesnptestingr   countsexpected_countsr   s    r   test_count_categoriesz#CheckGrouping.test_count_categories   sA    &&Q&///

 4d6JKKKKKr   c                    | j                             | j                  \  }}| j                                        }t	          ||           t
          j                            t          |t          j
                             t
          j                            |                    | j         j                              t          |d          r8t
          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          r3t
          j                            |                    |                      |j        }| j                             |          \  }}|                                j        }t
          j                            ||           t
          j                            t          |t
          j                             d S )Nequalsr   )r   sortdata
sort_indexr   r   r   assert_
isinstancepd	DataFramer$   r   hasattrvaluesassert_array_equalndarraycolumnsr   Series)r   sorted_datar   expected_sorted_dataseriesarrays         r   	test_sortzCheckGrouping.test_sort   s^   !]//	::U#y3355;(<===

:k2<@@AAA

u||DM,?@@@AAA ;)) 	BJ;#5#5di#@#@@AAA "]//	0@AAU

%%k&:&A	C 	C 	C

:k2:>>??? 49,Q/0!]//77U%0022K)=>>>

:k29==>>>;)) 	?J;#5#5f#=#==>>> !]//66U%00229

%%k3GHHH

:k2:>>?????r   c                    | j         j        j        }| j                            | j         d d          }|d         gt          | j         j                  z   }| j                                         |                             |d                   }|| j         j                 	                    d          }|
                    d           }t          j                            ||j                   t          |          dk    r| j                            | j         d d          }|d         gt          | j         j                  z   }| j                                         |                             |d                   }|	                    d          }|
                    d           | j         j                 }t          j                            ||j                   d S d S )Nc                 *    |                                  S r   meanxs    r   <lambda>z8CheckGrouping.test_transform_dataframe.<locals>.<lambda>A       qvvxx r   r   r   c                 *    |                                  S r   r9   r;   s    r   r=   z8CheckGrouping.test_transform_dataframe.<locals>.<lambda>F   s    AFFHH r      c                 *    |                                  S r   r9   r;   s    r   r=   z8CheckGrouping.test_transform_dataframe.<locals>.<lambda>L   s    !&&(( r   c                 *    |                                  S r   r9   r;   s    r   r=   z8CheckGrouping.test_transform_dataframe.<locals>.<lambda>Q       qvvxx r   )r&   r   namesr   transform_dataframelistr0   reset_index	set_indexgroupbyapplyr   r   assert_allcloser-   len)r   rD   transformed_dataframecolsdfgroupedexpecteds          r   test_transform_dataframez&CheckGrouping.test_transform_dataframe=   s   	% $ A A,0I,?,?23 !B !5 !5 azD!2333Y""$$T*44U1X>>TY&'//a/88==!4!455

""#8#+?	4 	4 	4 u::>>$(M$E$E,0I7J7J23 %F %5 %5! !H:TY%6 7 77D&&((.88qBBBjjqj))G}}%7%7889JKHJ&&'<'/8 8 8 8 8 >r   c                    | j         j        j        }| j                            | j         j        d d          }|d         gt          | j         j                  z   }| j                                         |         	                    |d                   }|| j         j                 
                    d          }|                    d           }t          j                            ||j                   t          |          dk    r| j                            | j         j        d d          }|d         gt          | j         j                  z   }| j                                         |         	                    |d                   }|| j         j                 
                    d          }|                    d           | j         j                 }t          j                            ||j                   d S d S )Nc                 *    |                                  S r   r9   r;   s    r   r=   z4CheckGrouping.test_transform_array.<locals>.<lambda>Y   r>   r   r   r   c                 *    |                                  S r   r9   r;   s    r   r=   z4CheckGrouping.test_transform_array.<locals>.<lambda>^   s    16688 r   r@   c                 *    |                                  S r   r9   r;   s    r   r=   z4CheckGrouping.test_transform_array.<locals>.<lambda>e   r>   r   c                 *    |                                  S r   r9   r;   s    r   r=   z4CheckGrouping.test_transform_array.<locals>.<lambda>i   rC   r   )r&   r   rD   r   transform_arrayr-   rF   r0   rG   rH   rI   rJ   r   r   rK   rL   )r   rD   transformed_arrayrN   rO   rP   rQ   s          r   test_transform_arrayz"CheckGrouping.test_transform_arrayU   s   	% M99,0I,<,?,?23 : 5 5 azD!2333Y""$$T*44U1X>>TY&'//a/88==!3!344

""#4#+?	4 	4 	4 u::>> $ = =,0I,<,?,?q !> !J !J !H:TY%6 7 77D&&((.88qBBB*+33!3<<G}}%7%7889JKHJ&&'8'/8 8 8 8 8 >r   c                    | j         j        j        }| j                            | j         j        d d          }| j                                                             |d                   | j         j                 	                                }t          j                            ||j        dd           t          |          dk    r| j                            | j         j        d d          }| j                                                             |d                   | j         j                 	                                }t          j                            ||j        dd           d S d S )	Nc                 ,    |                      d          S Nr   r9   r<   idxs     r   r=   z5CheckGrouping.test_transform_slices.<locals>.<lambda>r       AFF1II r   r   r   g-q=g}:)rtolatolr@   c                 ,    |                      d          S r]   r9   r^   s     r   r=   z5CheckGrouping.test_transform_slices.<locals>.<lambda>|   r`   r   )r&   r   rD   r   transform_slicesr-   rG   rI   r0   r:   r   r   rK   rL   )r   rD   transformed_slicesrQ   s       r   test_transform_slicesz#CheckGrouping.test_transform_slicesn   sm   	%!];;,0I,<,E,E23 < 5 5 9((**22!H i'))- 	

""#5x(-E 	# 	; 	; 	; u::>>!%!?!?,0I,<,E,E23 "@ "5 "5 y,,..66a )+--1TVV J&&'98?,1 ' ? ? ? ? ? >r   c                     | j                                          t          | j         j                  dk    r| j                             d           d S d S )Nr@   r   )r   dummies_groupsrL   group_namesr   s    r   test_dummies_groupsz!CheckGrouping.test_dummies_groups   sW     	$$&&&t}())A--M((q(11111 .-r   c                    | j         }| j                                         |j                            d          j        }t          j        t          j        |d          d          }t          j
                            | j        j                                        |           t          | j        j                  dk    r| j                            d           |j                            d          j        }t          j        t          j        |d          d          }t          j
                            | j        j                                        |           d S d S )Nr   categorydtypeF)
drop_firstr@   r   )r&   r   r   r   get_level_valuesr-   r*   get_dummiesr1   r   r   r   _dummiestoarrayrL   ri   )r   r&   r-   rQ   s       r   test_dummy_sparsezCheckGrouping.test_dummy_sparse   s=   y""$$$,,Q//6>")F*"E"E"E-24 4 4

 6 > > @ @(KKKt}())A--M&&Q&///Z0033:F~bij&I&I&I168 8 8HJ##DM$:$B$B$D$D$,. . . . . .-r   N)__name__
__module____qualname__pytestmarksmoker   r"   r6   rR   rZ   rf   rj   rt    r   r   r   r      s        [3 3 3L L L#@ #@ #@J8 8 808 8 82? ? ?* [2 2 2. . . . .r   r   c                   $    e Zd Zed             ZdS )TestMultiIndexGroupingc                     t          j                    j        }|                    ddg          }|j        }t          |          | _        || _        dgdz  | _        d S )Nfirmyear      r   load_pandasr&   rH   r   r   r   r!   )cls	grun_datamulti_index_datamulti_index_panels       r   setup_classz"TestMultiIndexGrouping.setup_class   s`    (**/	$../?@@,2 122#!dRir   Nru   rv   rw   classmethodr   r{   r   r   r}   r}      -        ( ( [( ( (r   r}   c                   $    e Zd Zed             ZdS )TestIndexGroupingc                     t          j                    j        }|                    dg          }|j        }t          |          | _        || _        dgdz  | _        d S )Nr   r   r   r   )r   r   
index_dataindex_groups       r   r   zTestIndexGrouping.setup_class   sZ    (**/	((&22
 &,,!dRir   Nr   r{   r   r   r   r      r   r   r   c                  $   t          j                    j        } |                     ddg          j        }t          |          }t          j                            |j	        ddg           t          j                            |j
        d           t          j                            |j        g dg dg           t          |ddg          }t          j                            |j	        ddg           t          j                    j        }|                    g d          j        }t          |          }t          j                            |j	        g d           t          j                            |j
        d	           |                                }t          |ddg          }t          j                            |j	        ddg           t          j                            |j
        d           |                                }t          |g d          }t          j                            |j	        g d           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	        g d           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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   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   firms)rD   )educincomeTVnews)r      r   r   )   group0r   )r   group1group2)r   r   r&   rH   r   r   r   r   r.   ri   index_shapelabelsr   tolistrp   )	r   r   r   	anes_datamulti_index_groups
list_panellist_groupsr   
list_groups	            r   test_init_apir      sh   $&&+I!++VV,<==C)**HJ!!("68HIIIJ!!("6AAAJ!!(/9 9 9C C CDE E E6 )'61BCCCHJ!!("6&8IJJJ "$$)I",, .8 .8 .8 9 99> *++HJ!!("6">">">@ @ @J!!("6
CCC #))++J
7F*;<<<HJ!!("6&8IJJJJ!!("6AAA %++--K+G+G+GHHHHJ!!("6">">">@ @ @J!!("6
CCC $44Q77K$$HJ!!("6	BBBJ!!("6??? #33A66==??J
##HJ!!("6
CCCJ!!("6>>> $$HJ!!("6"@"@"@B B B B Br   c                  r   t           j                            d           t           j                            ddd          } t	          | d          \  }}}}t	          | dd	d
          \  }}}}t          j        ddg          | d d df                  }t          j        ddg          | d d df                  }t	          ||fdd	d
          \  }}}}t	          ||fddd
          \  }}}}t          j        |          |j                 }t          j        g dd          }t          ||           d S )Ni	 r   r   )r   r   )sizeT)return_labelszg1,g2=,)prefixsepr   sector0sector1region0region1r@   zsector,region= .)
sector1.region0sector0.region1sector0.region0r   zsector1.region1r   r   r   r   r   z|U15rm   )r   randomseedrandintr
   r5   flatr   )	groupsuvuxulabelr   r   group_jointgroup_joint_expecteds	            r   test_combine_indicesr     st   INN6Yq!'22F&vTBBBBAu&vhC59; ; ;BAu Xy),--fQQQTl;FXy),--fQQQTl;F&'7.>+.59; ; ;BAu ''759; ; ;BAu(5//"'*K8 %K %K %K
 +12 2 2 233333r   c                  ~   t          j        g d          } t          t          j        t	          |           dz  dz                                t	          |           dd          | d          j         t          t          j        t	          |           dz  dz                                t	          |           dd          d d d d df         |            t          t          j        t	          |           dz  dz                                t	          |           dd          d d d d df         |            d S )Nr   r   r@   r   r@   r@   r   r   r   r   F)use_bincountr   r@   )r   r5   r   arangerL   reshapeT)gs    r   test_group_sumsr      s    	)))**AryQ!$$,,SVVQ::A!# # ##$1ryQ!$$,,SVVQ::111aaa7CQGGGryQ!$$,,SVVQ::111aaa7CQGGGGGr   c                  >   t          j        g d          } t          j        t          |           dz                                t          |           dd          }t          |           }|j         |                    |           |                                 d S )Nr   r   F)order)	r   r5   r   rL   r   r	   	group_intr   r   )r   r<   mygroups      r   test_group_classr   +  s     	)))**A
	#a&&(##CFFAS#99AAhhGqNNr   c            
      0   t          j        g d          } t          |           }t          |t          j                  sJ |                                }t          j        g dg dg dg dg dg dg dgt           j                  }t          ||           t          j        g d          } t          |           }|                                }t          j        g dg dg dg dg dg dgt           j                  }t          ||           d S )N)r   r   r   r@   r@   r   r   )r@   r   r   )r   r   r@   )r   r@   r   rm   )r   r   r   r   r   r   )
r   r5   r   r)   r   
csr_matrixtodensematrixint8r   )r   indiresultrQ   s       r   rt   rt   8  sB    	&&&''A??DdF-.....\\^^Fy)))""""""$ ,.74 4 4H """ 	###$$A??D\\^^Fy)))"""""$
 ,.74 4 4H """""r   )statsmodels.compat.pandasr   r   numpyr   numpy.testingr   pandasr*   rx   scipyr   statsmodels.tools.grouputilsr   r   r	   r
   r   statsmodels.datasetsr   r   r   r}   r   r   r   ry   rz   r   r   rt   r{   r   r   <module>r      s   M M M M M M M M     & & & & & &           G G G G G G G G G G G G G G 1 1 1 1 1 1 1 1K. K. K. K. K. K. K. K.\	( 	( 	( 	( 	(] 	( 	( 	(	( 	( 	( 	( 	( 	( 	( 	(OB OB OBd4 4 44 H H H 	 	 	# # # # #r   