
    Mhe                    J   S SK Jr  S SKrS SKJrJr  S SKrS SKrS SK	J
s  Jr  S SKJr  S SKJr  S SKJr  S SKJrJr  S SKJrJrJrJr  S S	KJr  S S
KJr  S SKJ s  J!r"  S SKJ#r#J$r$  S SK%J&r&  S SK'J(r(  S SK)J*r*  S SK+J,r,J-r-J.r.  S SK/J0r0  S SK1J2r2  S SK3J4r4J5r5J6r6J7r7J8r8  \(       a  S SK9J:r:J;r;J<r<  S SK=J>r>  S SK?J@r@   " S S5      rA S"   S#S jjrBS"S$S jjrC S"     S%S jjrD      S&S jrES'S(S jjrFS)S(S jjrGS*S jrH S'         S+S jjrI        S,S  jrJS-S! jrKg).    )annotationsN)TYPE_CHECKINGcast)PerformanceWarning)cache_readonly)find_stack_level)find_common_typemaybe_promote)ensure_platform_intis_1d_only_ea_dtype
is_integerneeds_i8_conversion)ExtensionDtype)notna)	factorizeunique)factorize_from_iterable)ensure_wrapped_if_datetimelike)	DataFrame)Index
MultiIndex
RangeIndex)concat)Series)compress_group_indexdecons_obs_group_idsget_compressed_idsget_group_indexget_group_index_sorter)	ArrayLikeLevelnpt)ExtensionArray)
FrozenListc                      \ rS rSrSr S       SS jjr\  SS j5       r\SS j5       rSS jr	S r
\SS j5       r\SS	 j5       rSS
 jrSS jrSS jr\SS j5       r\SS j5       rSrg)
_Unstacker@   aq  
Helper class to unstack data / pivot with multi-level index

Parameters
----------
index : MultiIndex
level : int or str, default last level
    Level to "unstack". Accepts a name for the level.
fill_value : scalar, optional
    Default value to fill in missing values if subgroups do not have the
    same set of labels. By default, missing values will be replaced with
    the default fill value for that data type, NaN for float, NaT for
    datetimelike, etc. For integer types, by default data will converted to
    float and missing values will be set to NaN.
constructor : object
    Pandas ``DataFrame`` or subclass used to create unstacked
    response.  If None, DataFrame will be used.

Examples
--------
>>> index = pd.MultiIndex.from_tuples([('one', 'a'), ('one', 'b'),
...                                    ('two', 'a'), ('two', 'b')])
>>> s = pd.Series(np.arange(1, 5, dtype=np.int64), index=index)
>>> s
one  a    1
     b    2
two  a    3
     b    4
dtype: int64

>>> s.unstack(level=-1)
     a  b
one  1  2
two  3  4

>>> s.unstack(level=0)
   one  two
a    1    3
b    2    4

Returns
-------
unstacked : DataFrame
c                   X0l         X@l        UR                  5       U l        U R                  R	                  U5      U l        SU R                  R                  U R
                     ;   a  SOSU l        [        U R                  R                  5      U l
        [        U R                  R                  5      U l        U R                  R                  U R
                  5      U l        U R                  R                  U R
                  5      U l        UR                  U R
                     U l        U R                  (       dl  [#        U R                  R                  U R
                     5      nU R                  R%                  U5      U l        U R                   R%                  U5      U l        [&        R(                  " U R                   Vs/ s H  ofR*                  PM     sn5      nU R                  R*                  nXx-  n	U	[&        R,                  " [&        R.                  5      R(                  :  a&  [0        R2                  " SU	 S3[4        [7        5       S9  U R9                  5         g s  snf )N   r   z%The following operation may generate z& cells in the resulting pandas object.)
stacklevel)constructorsortremove_unused_levelsindex_get_level_numberlevelcodesliftlistlevelsnew_index_levelsnamesnew_index_namespopremoved_nameremoved_levelremoved_level_fullr   takenpmaxsizeiinfoint32warningswarnr   r   _make_selectors)
selfr/   r1   r,   r-   unique_codesindex_levelnum_rowsnum_columns	num_cellss
             M/var/www/html/env/lib/python3.13/site-packages/pandas/core/reshape/reshape.py__init___Unstacker.__init__n   s    '	//1
ZZ11%8
 tzz//

;;A	 !%TZZ%6%6 7#DJJ$4$45 0044TZZ@!2266tzzB"',,tzz":yy!$**"2"24::">?L!%!3!3!8!8!FD&*&=&=&B&B<&PD# 66t?T?TU?T++?TUV((-- *	 rxx)---MM7	{ C2 3"+-	 	 Vs   I&c                N   U R                   n[        U R                  R                  5      n[        U R                  R                  5      nUS U X!S-   S  -   X!   /-   n[        S US U X1S-   S  -   X1   /-    5       5      n[        XE5      u  pg[        U5      n[        Xh5      n	X4$ )Nr*   c              3  8   #    U  H  n[        U5      v   M     g 7fNlen.0xs     rL   	<genexpr>2_Unstacker._indexer_and_to_sort.<locals>.<genexpr>   s     K&Jc!ff&J   )	r1   r4   r/   r2   r5   tupler   rS   r   )
rF   vr2   levsto_sortsizes
comp_indexobs_idsngroupsindexers
             rL   _indexer_and_to_sort_Unstacker._indexer_and_to_sort   s     JJTZZ%%&DJJ%%&)eEGn,z9Kd2Ah!eg&>$'&JKK0@
g,(=    c                    U R                   u  pU R                  (       a!  U Vs/ s H  o3R                  U5      PM     sn$ U$ s  snf rQ   )rc   r-   r=   )rF   rb   r]   lines       rL   sorted_labels_Unstacker.sorted_labels   s=    44993:;74IIg&7;; <s   Ac                r    U R                   (       a%  U R                  u  p#[        R                  " XSS9nU$ U$ )Nr   )axis)r-   rc   algostake_nd)rF   valuesrb   _sorted_valuess        rL   _make_sorted_values_Unstacker._make_sorted_values   s1    9922JG!MM&BM  re   c                >   U R                   nU R                  S S n[        S U 5       5      n[        X#5      u  pE[	        U5      n[        U5      nU R                  R                  U R                     U R                  -   nXg4U l
        U R                  S   Xt-  -   U R                  -   n[        R                  " [        R                  " U R                  5      [        S9n	U	R                  US5        U	R!                  5       [	        U R                  5      :  a  [#        S5      eX@l        Xl        U R(                  (       a+  UR+                  [        R,                  " U5      5      U l        g [        R(                  " [        R0                  " USS9S   5      U l        g )Nr)   c              3  8   #    U  H  n[        U5      v   M     g 7frQ   rR   rT   s     rL   rW   -_Unstacker._make_selectors.<locals>.<genexpr>   s     7JqCFFJrY   dtypeTz0Index contains duplicate entries, cannot reshape)return_indexr*   )r6   rh   rZ   r   rS   r   r/   levshaper1   r3   
full_shaper>   zerosprodboolputsum
ValueErrorgroup_indexmaskr-   searchsortedarange
compressorr   )
rF   
new_levelsremaining_labelslevel_sizesr_   r`   ra   strideselectorr   s
             rL   rE   _Unstacker._make_selectors   s8   **
  --cr27J7701AO
g,(4
$$TZZ0499<!/%%b)F,??$))Kxx0=4 88:DJJ'OPP%	99(55bii6HIDO ggbii
&Nq&QRDOre   c                H    [        U R                  R                  5       5      $ rQ   )r}   r   all)rF   s    rL   mask_all_Unstacker.mask_all   s    DIIMMO$$re   c                    [         R                  " [        U R                  5      [         R                  S9nU R                  USS9u  p#X#R                  S5      4$ )Nrv   r)   
fill_valuer   )r>   r   rS   r/   intpget_new_valuesany)rF   	dummy_arr
new_valuesr   s       rL   arange_result_Unstacker.arange_result   sI     IIc$**oRWW=	..yR.H
88A;&&re   c                &   UR                   S:X  a  US S 2[        R                  4   nUc  UR                  S   S:w  a  [	        S5      eU R                  X5      u  pU R                  U5      nU R                  nU R                  XXQR                  S9$ )Nr*   z-must pass column labels for multi-column data)r/   columnsrw   )
ndimr>   newaxisshaper   r   get_new_columns	new_indexr,   rw   )rF   rn   value_columnsr   ro   r   r/   s          rL   
get_result_Unstacker.get_result   s    ;;!ArzzM*F V\\!_%9LMM'';	&&}5   
 	
re   Nc                   UR                   S:X  a  US S 2[        R                  4   nU R                  U5      nU R                  u  pEUR
                  S   nXV-  nXG4nU R                  n	U R                  n
U
(       a]  [        U5      (       aM  UR                  XEU5      R                  SS5      R                  U5      n[        R                  " U[        S9nX4$ UR                  nU
(       a!  UR                  n[        R                  " XS9nOk[        U[         5      (       a$  UR#                  5       nUR%                  XS9nX+S S & O2['        X5      u  p[        R                  " XS9nUR)                  U5        UR*                  n[        R,                  " U[        S9n[/        UR                  5      (       a#  UR1                  S5      nUR1                  S5      nOUR3                  USS9n[4        R6                  " UU	R1                  S5      UUUUUR1                  S5      5        [/        UR                  5      (       a7  UR1                  S5      n[9        U5      nUR1                  UR                  5      nX4$ )	Nr*      rv   i8Fcopyu1zM8[ns])r   r>   r   rq   rz   r   r   r   rS   reshapeswapaxesonesr}   rw   empty
isinstancer   construct_array_type_emptyr
   fillnamer{   r   viewastype
libreshapeunstackr   )rF   rn   r   rp   lengthwidthr   result_widthresult_shaper   r   r   new_maskrw   clsr   s                   rL   r   _Unstacker.get_new_values   s   ;;!ArzzM*F008 a~-yy== F
 %%fV<!Q& 
 ww|48H'' LLE,<J%00 002 ZZZB
 *1$1%$D!XXl@

+zz88L5
 v||,,)..t4M#.J)00E0BM 	IIdOMM$	
 v||,, $2J7
CJ#6J##re   c                l   Uc|  U R                   S:X  a#  U R                  R                  U R                  S9$ U R                  R	                  SU R                  R
                  S9nUR                  U R                  5      $ [        U R                  5      U R                   -   n[        U5      n[        R                  " [        R                  " U5      U5      n[        U[        5      (       a_  UR                  U R                  4-   nUR                  U R                  4-   nUR                    Vs/ s H  oR#                  U5      PM     n	nO)UU R                  /nUR$                  U R                  /nU/n	U R&                  n
U	R)                  [        R*                  " X5      5        [        XiUSS9$ s  snf )Nr   r   )itemFr5   r2   r7   verify_integrity)r3   r;   _renamer:   insert	_na_valuerenamerS   r>   repeatr   r   r   r5   r<   r7   r2   r=   r   	_repeaterappendtile)rF   r   levr   r   
propagatorr   	new_nameslab	new_codesrepeaters              rL   r   _Unstacker.get_new_columnsE  s    yyA~))11t7H7H1II$$++AD4F4F4P4P+QC::d//00T''(4994M"YYryy/8
 mZ00&--''1 J &++t/@/@.BBI9F9L9LM9L#*-9LIMI ''J '++T->->?I#I>> 	12iRW
 	
 Ns   /F1c                   [        U R                  5      [        U R                  5      :w  aP  U R                  R                  U R                  5      nU R                  (       a  [
        R                  " USS5      nU$ [        U R                  5      U R                  -   n[
        R                  " U5      U R                  -
  nU$ )Nr   r)   )rS   r<   r;   get_indexerr3   r>   r   r   )rF   r   r   s      rL   r   _Unstacker._repeaterk  s     t&&'3t/A/A+BB..::4;M;MNHyy99Xq"5  ++,tyy8Fyy(4994Hre   c                   U R                   S S  Vs/ s H  oR                  U R                  5      PM     nn[        U R                  5      S:X  a}  U R                  S   US   pCUS:H  R                  5       (       a%  UR                  [        U5      UR                  5      nUR                  U5      R                  U R                  S   5      $ [        U R                  UU R                  SS9$ s  snf )Nr)   r*   r   Fr   )rh   r=   r   rS   r6   r   r   r   r   r8   r   )rF   r   result_codesr1   level_codess        rL   r   _Unstacker.new_indexz  s     >B=O=OPSQS=TU=Tc1=TU t$$%*!%!6!6q!9<?;r!&&((SZA::k*11$2F2Fq2IJJ((&&"	
 	
 Vs   $C.)r   r,   rz   r   r/   r1   r3   r   r6   r8   r;   r<   r:   r-   )T)r/   r   r1   r!   r-   r}   returnNone)r   z-tuple[npt.NDArray[np.intp], list[np.ndarray]])r   zlist[np.ndarray])rn   
np.ndarrayr   r   )r   r}   )r   z2tuple[npt.NDArray[np.intp], npt.NDArray[np.bool_]])r   r   rQ   )r   zIndex | None)r   r   )r   r   )__name__
__module____qualname____firstlineno____doc__rM   r   rc   rh   rq   rE   r   r   r   r   r   r   r   __static_attributes__ re   rL   r&   r&   @   s    +\ JN,,(-,BF,	,\  
   &  S8 % % ' '
M$^$
L   
 
re   r&   c                  ^ [        U5      S:X  a  U $ U R                  n[        [        U5      nXR                  ;   a  U/nU Vs/ s H  oTR                  U5      PM     nn[        UR                  5       Vs/ s H  oUU;  d  M
  UPM     nnU Vs/ s H  oTR                  U   PM     nnU Vs/ s H  oTR                  U   PM     nnU Vs/ s H  oTR                  U   PM     n	nU Vs/ s H  oTR                  U   PM     n
nU Vs/ s H  oTR                  U   PM     nnU Vs/ s H  oTR                  U   PM     nn[        S U 5       5      n[        XSSS9n[        USS9u  nn[        UUXSS9nU(       d  [        USS9nO[        U
U/-   X/-   US/-   SS	9n[        U [         5      (       a/  U R#                  5       nUUl        UR%                  SX#S
9nUnU	nUnGO4[        U R&                  [        5      (       aR  U nU(       aG  UR)                  S5      nUR%                  UX#S
9nU Vs/ s H  nUU:  a  UOUS-
  PM     nnU(       a  MG  U$ U R#                  SS9nUUl        UR%                  SX#S
9n[        U[         5      (       a  UR                  mOUR&                  m[        T[        5      (       d   eTR                  S   /U-   nU R&                  R*                  /U	-   nTR                  S   /nUR-                  U4S jU 5       5        [        UUUSS	9n[        U[         5      (       a	  UUl        U$ UUl        U$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nr   c              3  8   #    U  H  n[        U5      v   M     g 7frQ   rR   rT   s     rL   rW   $_unstack_multiple.<locals>.<genexpr>  s     *'Q#a&&'rY   F)r-   xnullr-   )r   __placeholder__r   r   r   r-   r*   deepc              3  ^   >#    U  H"  oR                  TR                  S    5      v   M$     g7f)r)   N)r=   r2   )rU   recunstcolss     rL   rW   r     s$     N#(.."455s   *-)rS   r/   r   r   r7   r0   rangenlevelsr5   r2   rZ   r   r   r   r   r   r   r   r   r   r9   r   extend)dataclocsr   r-   r/   irlocsclevelsccodescnamesrlevelsrcodesrnamesr   r   comp_idsr`   recons_codesdummy_indexdummy	unstackedr   r   r   resultvalr[   dummy_dfnew_columnsr   s                                @rL   _unstack_multipler    s`    5zQ JJEU#E 167A$$Q'E7emm,?,1Q,E?(-.1||AG.&+,ekk!neF,&+,ekk!neF,(-.1||AG.&+,ekk!neF,&+,ekk!neF,*'**E!&e5IK,[uEHg''5PUVLG*;< gY&:%-.."	
 $		!MM"3
MV	
	 	dllJ//Fiil
N:?@%Qa#g1q50%@ %
 M 99%9($$$* % 
	 i(( H ((H(J////ooa()G3
\\&&'&0	^^A&'	NNN)eK )V$$%	  (	S 8?.,,.,,B As<   M8	MMM/MM+M$	M)'M.1M3c                   [        U[        [        45      (       a  [        U5      S:w  a
  [	        XX#S9$ US   n[        U5      (       d!  US:X  d  U R                  R                  U5        [        U [        5      (       aB  [        U R                  [        5      (       a
  [        XX#S9$ U R                  R                  SS9$ [        U R                  [        5      (       d"  [        S[        U R                  5       S35      e[        U R                   5      (       a
  [#        XX#S	9$ [%        U R                  XR&                  US
9nUR)                  U R*                  S US9$ )Nr*   r   r   r   T)future_stackz'index must be a MultiIndex to unstack, z was passedr   r1   r,   r-   r   r   )r   rZ   r4   rS   r  r   r/   r0   r   r   _unstack_frameTstackr   typer   rw   _unstack_extension_seriesr&   _constructor_expanddimr   _values)objr1   r   r-   	unstackers        rL   r   r     s/   %%''u:? %SJRR!HEeU.?%?		##E*#y!!cii,,!#OO55;;D;11		:.. 5d399o5FkR
 	
 syy)),SOOIIU0J0JQU
	 ##KKt
 $ 
 	
re   c                R   [        U R                  [        5      (       d   e[        U R                  XR                  US9nU R
                  (       d2  U R                  R                  XBS9nU R                  XUR                  S9$ UR                  U R                  U R                  US9$ )Nr  r   )axesr	  )r   r/   r   r&   _constructor_can_fast_transpose_mgrr   _constructor_from_mgrr  r   r  r   )r  r1   r   r-   r  mgrs         rL   r
  r
    s     cii,,,,		,<,<4I ""hhy@((88(<<##KKs{{z $ 
 	
re   c                    U R                  5       nUR                  XUS9nUR                  R                  S/5      Ul        U$ )a  
Unstack an ExtensionArray-backed Series.

The ExtensionDtype is preserved.

Parameters
----------
series : Series
    A Series with an ExtensionArray for values
level : Any
    The level name or number.
fill_value : Any
    The user-level (not physical storage) fill value to use for
    missing values introduced by the reshape. Passed to
    ``series.values.take``.
sort : bool
    Whether to sort the resulting MuliIndex levels

Returns
-------
DataFrame
    Each column of the DataFrame will have the same dtype as
    the input Series.
)r1   r   r-   r   )to_framer   r   _drop_level_numbers)seriesr1   r   r-   dfr  s         rL   r  r    sA    8 
	BZZeZFF ^^77<FNMre   c                V   S nU R                   u  pVU R                  R                  U5      n[        U R                  [        5      (       a
  [        XX#S9$ [        U R                  [        5      (       a  [        U R                  R                  5      nU R                  R                   V	s/ s H  oR                  U5      PM     n
n	U" U R                  5      u  pUR                  U5        U
R                  [        R                  " X5      R                  5       5        [        U R                  R                  5      nUR                  U R                  R                   5        [	        XUSS9nO[#        [%        X@R                  U R                  45      6 u  nu  nnUR                  U5      [        R                  " X5      R                  5       4n[	        UUU R                  R                   U R                  R                   /SS9nU R&                  (       d  U R(                  (       a  [        U R*                  R,                  5      nUS   n[        U[.        5      (       a\  UR1                  5       nUR3                  U R5                  5        VVs/ s H  u  nnUR,                  PM     snn5      n[7        UXV5      nO5U R,                  R                  5       nOU R,                  R                  5       nU(       a  [9        U5      nUU   nUU   nU R;                  UUS9$ s  sn	f s  snnf )z
Convert DataFrame to Series with multi-level Index. Columns become the
second level of the resulting hierarchical index

Returns
-------
stacked : Series or DataFrame
c                    U R                   (       a!  U [        R                  " [        U 5      5      4$ [	        U 5      u  pX!4$ rQ   )	is_uniquer>   r   rS   r   )r/   r2   
categoriess      rL   stack_factorizestack.<locals>.stack_factorizeM  s7    ??"))CJ///3E:  re   )	level_numdropnar-   Fr   r   r/   )r   r   r0   r   r   _stack_multi_columnsr/   r4   r5   r2   r   r   r>   r   ravelr7   r   zipmapr   _is_homogeneous_typedtypesr  r   r   _concat_same_typeitems"_reorder_for_extension_array_stackr   _constructor_sliced)framer1   r&  r-   r#  NKr%  r   r   r   clevclabr   r   r5   ilabr2   r-  rw   arrro   colr   r   s                            rL   r  r  C  s   ! ;;DA //6I%--,,#v
 	
 
EKK	,	,%++,,-
.3kk.?.?@.?sZZ].?	@$U]]3
$)//12**+	++,iRW
	  #C++u}}9U$VWtA 0 6 6 88;;##U]]%7%78"	
	 ;;555 ell**+q	e^,,,,.C..+0;;=9=C=9J <JMJ ,,.J ]]((*
Z %
dO	$$Zy$AA_ A> :s   ,L L%
c                  ^  [        U 4S jU 5       5      (       a  T nU H  n[        XEX#S9nM     U$ [        S U 5       5      (       av  T nU Vs/ s H  nT R                  R                  U5      PM      nnU(       a@  UR	                  S5      n[        XEX#S9nU Vs/ s H  ofU::  a  UOUS-
  PM     nnU(       a  M@  U$ [        S5      es  snf s  snf )Nc              3  T   >#    U  H  oTR                   R                  ;   v   M     g 7frQ   )r   r7   )rU   r   r2  s     rL   rW   !stack_multiple.<locals>.<genexpr>  s     
7#%--%%%s   %()r&  r-   c              3  B   #    U  H  n[        U[        5      v   M     g 7frQ   )r   int)rU   r   s     rL   rW   r<    s     3UcZS!!Us   r   r*   zTlevel should contain all level names or all level numbers, not a mixture of the two.)r   r  r   r0   r9   r   )r2  r1   r&  r-   r  r   r[   s   `      rL   stack_multipler?    s     
7
777C6vAF 2 M+ 
3U3	3	3  BGG#005G))A,C6vAF 8==u!s(QA-uE= e M 1
 	
 H >s   %CCc                v   [        U R                  5      S::  a)  U R                  S   R                  U R                  S   S9$ [	        U R                  SS U R
                  SS 5       VVVs/ s H!  u  pU Vs/ s H  o3S:  a  X   OSPM     snPM#     nnnn[	        U6 nS [        R                  " U5       5       n[	        U6 n[        R                  " [	        XpR                  5       VVs/ s H   u  pSU;  a  [        XR                  S9OUPM"     snnU R                  SS S9$ s  snf s  snnnf s  snnf )	zBCreates a MultiIndex from the first N-1 levels of this MultiIndex.r   r   r   Nr)   c              3  *   #    U  H	  u  pUv   M     g 7frQ   r   )rU   keyro   s      rL   rW   ,_stack_multi_column_index.<locals>.<genexpr>  s     A'@VSS'@s   rv   r7   )rS   r5   r   r7   r*  r2   	itertoolsgroupbyr   from_arraysr   rw   )	r   r   r2   cr\   tuplesunique_tuplesnew_levsnew_levs	            rL   _stack_multi_column_indexrM    s1   
7>>a~~a ((gmmA.>(?? gnnSb17=="3EFFJC .33U6t	#U3F 	  $ZFAy'8'8'@AMM"H !! !$Hnn =	
 !> 047/BE'+O =	

 mmCR   	4	
s   -D.9D)D..'D5
)D.c                `   SS jnU R                  SS9nUR                  n[        U[        5      (       d   eXR                  S-
  :w  aO  Un[        XR                  S-
  5       H(  nU" X5      n	U" US-   U5      n
UR                  X5      nM*     U=Ul        nUR                  5       (       d,  U(       a%  U" SU5      nUR                  USS9nUR                  n[        [        U5      n[        U5      n0 nUR                  S   n[        UR                  S   5      nU(       a  [        R                  " U5      nUR!                  [#        U5      S 5      n[        R$                  " UU5      n[#        U5      n/ nU GH  n UR                  R'                  U5      n[        U[,        5      (       d  [#        U5      nOUR.                  UR0                  -
  nUU:w  ah  UR2                  S S 2UR                  U   4   nUR%                  UR                  R                  S   5      Ul        UR5                  US9R6                  nGOUR8                  S S 2U4   n[;        UR<                  R?                  5       5      n[        U[@        5      (       a  URC                  5       RE                  URG                  5        VVs/ s H   u  nnURH                  RK                  USS	9PM"     snn5      nURL                  u  nn[        RN                  " UU-  5      RQ                  UU5      RR                  RU                  5       nUR%                  U5      nOUR6                  nURV                  S:  a  URU                  5       nUUU'   GM     [#        U5      S:  a  URY                  U5      n[#        U5      n[        URZ                  [        5      (       at  []        URZ                  R                  5      n []        URZ                  R^                  5      n!URZ                  R                   V"s/ s H  n"U"Ra                  U5      PM     n#n"OD[c        URZ                  5      u  n$n%U%/n U$Ra                  U5      /n#URZ                  Rd                  /n!U R+                  U5        U#R+                  [        Rf                  " UU5      5        U!R+                  U R                  R^                  U   5        [        U U#U!SS
9n&U Ri                  UU&US9n'U R                  R                  S:  aO  U R                  Rk                  U/5      R                  5       n(U'R                  Rm                  U(5      (       d  U'U(   n'U(       a  U'Ro                  SSS9n'U'$ ! [(         a    UR+                  U5         GM%  f = fs  snnf s  sn"f )Nc                B    XR                   ;   a  UR                   U    $ U $ )z
Logic for converting the level number to something we can safely pass
to swaplevel.

If `level_num` matches a column name return the name from
position `level_num`, otherwise return `level_num`.
rD  )r%  r   s     rL   _convert_level_number3_stack_multi_columns.<locals>._convert_level_number  s#     %==++re   Fr   r*   r   )r1   rk   r)   )r   r   r   )r/   r   r   )rk   how)r%  r>  r   r   )8r   r   r   r   r   r   	swaplevel_is_lexsorted
sort_indexr   rM  r5   r   r2   r>   r-   r   rS   r=   get_locKeyErrorr   slicestopstartlocreindexrn   ilocr	   r-  tolistr   r   r.  r/  r  r   r   r   r   r  r)  r   
differencer/   r4   r7   r   r   r   r   r  r  equalsr&  ))r2  r%  r&  r-   rP  thismi_colsroll_columnsr   lev1lev2level_to_sortr  new_data
level_valsr   level_vals_nanlevel_vals_usedlevsize	drop_colsrB  r[  	slice_lenchunkvalue_slicesubsetrw   ro   rV   r3  r4  idxr   r   r   r   	old_codes
old_levelsr   r  desired_columnss)                                            rL   r(  r(    s    ::5:!DllGgz**** OOa''y//A"56A(9D(Q=D'11$=L	 7
 ".-w  ""t .a9];,,:w'G+G4K H#Jr*+Kggk*&&s:=Nggnk:O+GI	,,&&s+C #u%%CI399,IHHQS 112E*//0C0CB0GHEM---@GGKYYq#v&F$V]]%9%9%;<E%00 $88:LLEK\\^T^TQQYY%%e%%8^T ||1iiA&..q!466<<>)..s3$mma%++-K#O R 9~!,,Y7D	A$**j))$**++,
))*	48JJ4D4DE4DSSZZ(4D	E	 7

 C	: \
%%g./	ZZ__%	j!RWW[!,-U]]((34)eI 	;OF}}q --;;YKHOOQ~~$$_55O,F A51MS  	S!	0 U, Fs   V;'V%"V+V"!V"c                    [         R                  " X-  5      R                  X!5      R                  R	                  5       nU R                  U5      $ )a  
Re-orders the values when stacking multiple extension-arrays.

The indirect stacking method used for EAs requires a followup
take to get the order correct.

Parameters
----------
arr : ExtensionArray
n_rows, n_columns : int
    The number of rows and columns in the original DataFrame.

Returns
-------
taken : ExtensionArray
    The original `arr` with elements re-ordered appropriately

Examples
--------
>>> arr = np.array(['a', 'b', 'c', 'd', 'e', 'f'])
>>> _reorder_for_extension_array_stack(arr, 2, 3)
array(['a', 'c', 'e', 'b', 'd', 'f'], dtype='<U1')

>>> _reorder_for_extension_array_stack(arr, 3, 2)
array(['a', 'd', 'b', 'e', 'c', 'f'], dtype='<U1')
)r>   r   r   r  r)  r=   )r8  n_rows	n_columnsrq  s       rL   r0  r0  P  s>    B ))F&
'
/
/	
B
D
D
J
J
LC88C=re   c           	       ^^ U R                   R                  5       [        U R                   5      :w  a  [        S5      e[	        TSS9nU R                   R                  [        U R                   R                  5       Vs/ s H  o3T;  d  M
  UPM     snS S S2   5      n[        T5      S:  a(  [        R                  " T5      nUR                  U5      nOUnUR                  5       nUR                  5       n/ n	U GH1  n
[        U R                   5      S:X  a  U R                  5       nOc[        T5      S:X  a  U
4n
[        U
5      m[        UU4S j[        U R                   R                  5       5       5      nU R                  S S 2U4   n[        T5      U R                   R                  :  a!  UR                   R                  U5      Ul         OKUR                  S:X  a;  UR                   S:X  a  SUl        O#[%        [        UR                   5      5      Ul         U	R'                  U5        GM4     [        U	5      S:  a4  U R(                  (       d#  [+        U	5      n[        U5      [        U 5      -  nOo[        T5      U R                   R                  :  a*  U R                   R                  U5      R                  5       nOS/n[-        XR.                  R0                  S9nSn[        T5      U R                   R                  :  aN  U R                   R                  U5      R                  5       nUR                   R3                  U5      (       d  UU   n[5        U R6                  [8        5      (       aM  U R6                  R:                  n[=        [        R>                  " U R6                  R@                  SU45      5      nO<[C        U R6                  S	S
9u  nnU/n[=        [        R>                  " USU45      5      n[5        U[8        5      (       a'  UR:                  nURE                  5       R@                  nOUR                  5       /n[C        US	S
9S   /nU Vs/ s H#  n[        RF                  " U[        U 5      5      PM%     nn[9        UU-   UU-   U R6                  RH                  [=        URH                  5      -   S	S9Ul        [        U 5      n[        U5      n[        RJ                  " U5      n[        R>                  " UU-  U5      [        RF                  " [        RJ                  " U5      U5      -   nURM                  U5      nUR                   S:X  ac  U R                   R                  [        T5      :X  a@  [        UR                   5      S:X  a  [O        UR6                  S9nOURP                  S S 2S4   nUR                   S:X  a  S Ul        U$ s  snf s  snf )Nz8Columns with duplicate values are not supported in stackT)reverser)   r*   c              3  \   >#    U  H!  nUT;   a  [        T5      O
[        S 5      v   M#     g 7frQ   )nextrX  )rU   kgenr1   s     rL   rW   stack_v3.<locals>.<genexpr>  s+      #5A %ZS	U4[85s   ),r   )r   rw   F)use_na_sentinelr   r   r'  ))r   nuniquerS   r   sortedr  r   r   r>   argsort_reorder_ilevelsr   r   iterrZ   r[  r   r   r   r   r   r   r   r  rw   r`  r   r/   r   r5   r4   r   r2   r   drop_duplicatesr   r7   r   r=   r   r]  )r2  r1   drop_levnumsr|  
stack_colssorterordered_stack_colsstack_cols_uniqueordered_stack_cols_uniquebufrq  r   column_indexerr  ratior  rt  index_levelsindex_codesr2   uniquescolumn_levelscolumn_codeslen_df	n_uniquesrb   idxsr}  s    `                         @rL   stack_v3r  u  s   }}#emm"44STT %.L22%--//0C0qUN0CDbDIJ 5zA~E"'88@'"))+ 2 9 9 ; C u}}"::<D 5zQfs)C" #u}}445# N 99Q./Du:---<<;;LIDL1$yyA~	)#dll*;<

4+ !0 3x!|EKKFs5z) u:-----;;LIPPRK#K;mm6I6IJ
5zEMM)))--;;LIPPR~~$$_55O,F
 %++z**{{))2775;;#4#4q%jAB"5;;Fwy27751e*56*j))*11)99;AA+2245!";USTUVW>JKlUBIIeSZ0lLKm+L(kk$'9'?'?"@@	FL ZF-.Iii	"G776G#V,ryy69JI/VVD[[F {{aEMM11SZ?v~~!#&,,/F[[A&F{{aMC 	DR Ls   ?	WW*W)NT)r   Series | DataFramer-   r}   )r  r  r-   r}   )r  r   r-   r}   r   r   )r  r   r-   r}   r   r   )r)   TT)r2  r   r&  r}   r-   r}   )TT)r   r   r   r   )
r2  r   r%  r>  r&  r}   r-   r}   r   r   )r8  r#   rv  r>  rw  r>  r   r#   )r2  r   r1   z	list[int]r   r  )L
__future__r   rE  typingr   r   rC   numpyr>   pandas._libs.reshape_libsr   r   pandas.errorsr   pandas.util._decoratorsr   pandas.util._exceptionsr   pandas.core.dtypes.castr	   r
   pandas.core.dtypes.commonr   r   r   r   pandas.core.dtypes.dtypesr   pandas.core.dtypes.missingr   pandas.core.algorithmscore
algorithmsrl   r   r   pandas.core.arrays.categoricalr   pandas.core.constructionr   pandas.core.framer   pandas.core.indexes.apir   r   r   pandas.core.reshape.concatr   pandas.core.seriesr   pandas.core.sortingr   r   r   r   r   pandas._typingr    r!   r"   pandas.core.arraysr#   pandas.core.indexes.frozenr$   r&   r  r   r
  r  r  r?  rM  r(  r0  r  r   re   rL   <module>r     su   "    ) ) , 2 4  5 , & & C C ' 
 . %    25K
 K
^
 DHX
X<@Xv!
J :>
	
26

"""-1""JJBZB8 NRAA!$A37AFJAAH"	"!$"14""Jhre   