
    Owge                        d dl mZ d dlZd dlmZmZ d dlZd dlZd dl	m
c mZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZmZmZ d d	lmZ d d
lmZ d dlm c m!Z" d dlm#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 erd dl9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@  G d d      ZA	 d"	 	 	 d#dZBd"d$dZC	 d"	 	 	 	 	 d%dZD	 	 	 	 	 	 d&dZEd'd(dZFd)d(dZGd*dZH	 d'	 	 	 	 	 	 	 	 	 d+dZI	 	 	 	 	 	 	 	 d,d ZJd-d!ZKy).    )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                      e Zd ZdZ	 d	 	 	 	 	 	 	 ddZe	 	 dd       Zedd       ZddZd Z	edd       Z
edd       Zdd	ZddZddZedd       Zedd       Zy
)
_Unstackera	  
    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                   || _         || _        |j                         | _        | j                  j	                  |      | _        d| j                  j                  | j
                     v rdnd| _        t        | j                  j                        | _
        t        | j                  j                        | _        | j                  j                  | j
                        | _        | j                  j                  | j
                        | _        |j                  | j
                     | _        | j                  slt#        | j                  j                  | j
                           }| j                  j%                  |      | _        | j                   j%                  |      | _        t'        j(                  | j                  D cg c]  }|j*                   c}      }| j                  j*                  }||z  }	|	t'        j,                  t&        j.                        j(                  kD  r(t1        j2                  d|	 dt4        t7                      | j9                          y c c}w )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.   r0   r+   r,   unique_codesindex_levelnum_rowsnum_columns	num_cellss
             R/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/core/reshape/reshape.py__init__z_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;++UV((-- {*	 rxx)---MM7	{ C2 3"+-	 	 Vs   Ic                ^   | j                   }t        | j                  j                        }t        | j                  j                        }|d | ||dz   d  z   ||   gz   }t        d |d | ||dz   d  z   ||   gz   D              }t        ||      \  }}t        |      }t        ||      }	|	|fS )Nr)   c              3  2   K   | ]  }t        |        y wNlen.0xs     rK   	<genexpr>z2_Unstacker._indexer_and_to_sort.<locals>.<genexpr>   s     Kc!fK   )	r0   r3   r.   r1   r4   tupler   rQ   r   )
rE   vr1   levsto_sortsizes
comp_indexobs_idsngroupsindexers
             rK   _indexer_and_to_sortz_Unstacker._indexer_and_to_sort   s     JJTZZ%%&DJJ%%&)eAEGn,az9Kd2Aha!eg&>$q'&JKK0%@
Gg,(W=    c                    | j                   \  }}| j                  r|D cg c]  }|j                  |       c}S |S c c}w rO   )r`   r,   r<   )rE   r_   rZ   lines       rK   sorted_labelsz_Unstacker.sorted_labels   s=    44993:;4DIIg&;; <s   =c                p    | j                   r)| j                  \  }}t        j                  ||d      }|S |S )Nr   )axis)r,   r`   algostake_nd)rE   valuesr_   _sorted_valuess        rK   _make_sorted_valuesz_Unstacker._make_sorted_values   s5    9922JGQ!MM&'BM  ra   c                @   | j                   }| j                  d d }t        d |D              }t        ||      \  }}t	        |      }t        |      }| j                  j                  | j                     | j                  z   }||f| _
        | j                  d   ||z  z   | j                  z   }t        j                  t        j                  | j                        t              }	|	j                  |d       |	j!                         t	        | j                        k  rt#        d      || _        |	| _        | j(                  r*|j+                  t        j,                  |            | _        y t        j(                  t        j0                  |d      d         | _        y )Nr(   c              3  2   K   | ]  }t        |        y wrO   rP   rR   s     rK   rU   z-_Unstacker._make_selectors.<locals>.<genexpr>   s     7qCF7rV   dtypeTz0Index contains duplicate entries, cannot reshape)return_indexr)   )r5   rd   rW   r   rQ   r   r.   levshaper0   r2   
full_shaper=   zerosprodboolputsum
ValueErrorgroup_indexmaskr,   searchsortedarange
compressorr   )
rE   
new_levelsremaining_labelslevel_sizesr\   r]   r^   strideselectorr{   s
             rK   rD   z_Unstacker._make_selectors   sD   **
  --cr27J7701A;O
Gg,(4
$$TZZ0499<!6/%%b)FZ,??$))Kxx0=4 88:DJJ'OPP%	99(55bii6HIDO ggbii
&Nq&QRDOra   c                H    t        | j                  j                               S rO   )rv   r{   all)rE   s    rK   mask_allz_Unstacker.mask_all   s    DIIMMO$$ra   c                    t        j                  t        | j                        t         j                        }| j                  |d      \  }}||j                  d      fS )Nro   r(   
fill_valuer   )r=   r}   rQ   r.   intpget_new_valuesany)rE   	dummy_arr
new_valuesr{   s       rK   arange_resultz_Unstacker.arange_result   sM     IIc$**oRWW=	..yR.H
D488A;&&ra   c                .   |j                   dk(  r|d d t        j                  f   }||j                  d   dk7  rt	        d      | j                  ||      \  }}| j                  |      }| j                  }| j                  ||||j                        S )Nr)   z-must pass column labels for multi-column data)r.   columnsrp   )
ndimr=   newaxisshapery   r   get_new_columns	new_indexr+   rp   )rE   ri   value_columnsr   rj   r   r.   s          rK   
get_resultz_Unstacker.get_result   s    ;;!ArzzM*F V\\!_%9LMM''
;	&&}5%   
 	
ra   Nc                   |j                   dk(  r|d d t        j                  f   }| j                  |      }| j                  \  }}|j
                  d   }||z  }||f}| j                  }	| j                  }
|
r\t        |      rQ|j                  |||      j                  dd      j                  |      }t        j                  |t              }||fS |j                  }|
r$|j                  }t        j                  ||      }npt        |t               r)|j#                         }|j%                  ||      }||d d  n7t'        ||      \  }}t        j                  ||      }|j)                  |       |j*                  }t        j,                  |t              }t/        |j                        r#|j1                  d      }|j1                  d      }n|j3                  |d      }t5        j6                  ||	j1                  d      |||||j1                  d             t/        |j                        r7|j1                  d      }t9        |      }|j1                  |j                        }||fS )	Nr)      ro   i8Fcopyu1zM8[ns])r   r=   r   rl   rs   r   r{   r   rQ   reshapeswapaxesonesrv   rp   empty
isinstancer   construct_array_type_emptyr
   fillnamert   r   viewastype
libreshapeunstackr   )rE   ri   r   rk   lengthwidthr   result_widthresult_shaper{   r   r   new_maskrp   clsr   s                   rK   r   z_Unstacker.get_new_values   s%   ;;!ArzzM*F008 av~-yy== F
 %%feV<!Q& 
 ww|48Hx'' LLE,e<J%0 002 ZZEZB
 *
1$1%$D!zXXl%@

+zz88L5
 v||,)..t4M#.J)00E0BM 	IIdOMM$	
 v||, $2J7
CJ#6J8##ra   c                j   || j                   dk(  r&| j                  j                  | j                        S | j                  j	                  d| j                  j
                        }|j                  | j                        S t        | j                        | j                   z   }t        |      }t        j                  t        j                  |      |      }t        |t              r]|j                  | j                  fz   }|j                  | j                  fz   }|j                   D cg c]  }|j#                  |       }	}n)|| j                  g}|j$                  | j                  g}|g}	| j&                  }
|	j)                  t        j*                  |
|             t        ||	|d      S c c}w )Nr   r   )itemFr4   r1   r6   verify_integrity)r2   r:   _renamer9   insert	_na_valuerenamerQ   r=   repeatr}   r   r   r4   r;   r6   r1   r<   r   	_repeaterappendtile)rE   r   levr   r   
propagatorr   	new_nameslab	new_codesrepeaters              rK   r   z_Unstacker.get_new_columnsE  s    yyA~))11t7H7H1II$$++AD4F4F4P4P+QC::d//00T''(4994M"YYryy/8
 mZ0&--''1 J &++t/@/@.BBI9F9L9LM#*-MIM ''J '++T->->?I#I>> 	512YiRW
 	
 Ns   ,F0c                x   t        | j                        t        | j                        k7  rJ| j                  j                  | j                        }| j                  rt        j                  |dd      }|S t        | j                        | j                  z   }t        j                  |      | j                  z
  }|S )Nr   r(   )rQ   r;   r:   get_indexerr2   r=   r   r}   )rE   r   r   s      rK   r   z_Unstacker._repeaterk  s     t&&'3t/A/A+BB..::4;M;MNHyy99Xq"5  ++,tyy8Fyy(4994Hra   c                   | j                   d d D cg c]  }|j                  | j                         }}t        | j                        dk(  ry| j                  d   |d   }}|dk(  j                         r%|j                  t        |      |j                        }|j                  |      j                  | j                  d         S t        | j                  || j                  d      S c c}w )Nr(   r)   r   Fr   )rd   r<   r~   rQ   r5   r   r   r   r   r7   r   )rE   r   result_codesr0   level_codess        rK   r   z_Unstacker.new_indexz  s     >B=O=OPSQS=TUc1UU t$$%*!%!6!6q!9<?;Er!&&(SZA::k*11$2F2Fq2IJJ((&&"	
 	
 Vs   "C*)T)r.   r   r0   r!   r,   rv   returnNone)r   z-tuple[npt.NDArray[np.intp], list[np.ndarray]])r   zlist[np.ndarray])ri   
np.ndarrayr   r   )r   rv   )r   z2tuple[npt.NDArray[np.intp], npt.NDArray[np.bool_]])r   r   rO   )r   zIndex | None)r   r   )r   r   )__name__
__module____qualname____doc__rL   r   r`   rd   rl   rD   r   r   r   r   r   r   r    ra   rK   r&   r&   @   s    +\ JN,,(-,BF,	,\  
   &  S8 % % ' '
M$^$
L   
 
ra   r&   c                   t        |      dk(  r| S | j                  }t        t        |      }||j                  v r|g}|D cg c]  }|j                  |       }}t        |j                        D cg c]	  }||vs| }}|D cg c]  }|j                  |    }}|D cg c]  }|j                  |    }}|D cg c]  }|j                  |    }	}|D cg c]  }|j                  |    }
}|D cg c]  }|j                  |    }}|D cg c]  }|j                  |    }}t        d |D              }t        ||dd      }t        |d      \  }}t        ||||d      }|st        |d      }nt        |
|gz   ||gz   |dgz   d	      }t        | t               r3| j#                         }||_        |j%                  d||
      }|}|	}|}n t        | j&                  t              rG| }|rA|j)                  d      }|j%                  |||
      }|D cg c]  }||k  r|n|dz
   }}|rA|S | j#                  d      }||_        |j%                  d||
      }t        |t               r|j                  n|j&                  t        t              sJ j                  d   g|z   }| j&                  j*                  g|	z   }j                  d   g}|j-                  fd|D               t        |||d	      }t        |t               r	||_        |S ||_        |S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nr   c              3  2   K   | ]  }t        |        y wrO   rP   rR   s     rK   rU   z$_unstack_multiple.<locals>.<genexpr>  s     *Q#a&*rV   F)r,   xnullr,   )r   __placeholder__r   r   r   r,   r)   deepc              3  Z   K   | ]"  }|j                  j                  d           $ yw)r(   N)r<   r1   )rS   recunstcolss     rK   rU   z$_unstack_multiple.<locals>.<genexpr>  s#     N#(.."45Ns   (+)rQ   r.   r   r   r6   r/   rangenlevelsr4   r1   rW   r   r   r   r   r   r   r   r   r   r8   r   extend)dataclocsr   r,   r.   irlocsclevelsccodescnamesrlevelsrcodesrnamesr   rz   comp_idsr]   recons_codesdummy_indexdummy	unstackedr   r   r   resultvalrX   dummy_dfnew_columnsr   s                                @rK   _unstack_multipler     sc    5zQ JJEU#E 167AU$$Q'7E7emm,?1Q?E?(-.1u||A.G.&+,ekk!n,F,&+,ekk!n,F,(-.1u||A.G.&+,ekk!n,F,&+,ekk!n,F,*'**E!&%e5IK,[uEHg''5&PUVLG*;< gY&H:%-.."	
 $		!MM"3
QUMV	
	 	dllJ/Fiil
N:?@Qa#g1q50@@ 
 M 99%9($$$*4 % 
	 i( H ((H(J///ooa()G3
\\&&'&0	^^A&'	NNN)eK )V$%	  (	S 8?.,,.,,B As<   L,4	L1>L1L6$L; M M8M
M"Mc                   t        |t        t        f      r"t        |      dk7  rt	        | |||      S |d   }t        |      s |dk(  s| j                  j                  |       t        | t              rEt        | j                  t              rt        | |||      S | j                  j                  d      S t        | j                  t              s"t        dt        | j                         d      t        | j                         rt#        | |||	      S t%        | j                  || j&                  |
      }|j)                  | j*                  d |      S )Nr)   r   r   r   T)future_stackz'index must be a MultiIndex to unstack, z was passedr   r0   r+   r,   r   r   )r   rW   r3   rQ   r   r   r.   r/   r   r   _unstack_frameTstackry   typer   rp   _unstack_extension_seriesr&   _constructor_expanddimr   _values)objr0   r   r,   	unstackers        rK   r   r     s+   %%'u:? %S%JTRR!HEeU.?%?		##E*#y!cii,!#u$OO55;;D;11		:. 5d399o5FkR
 	
 syy),S%$OOIIU0J0JQU
	 ##KKt
 $ 
 	
ra   c                \   t        | j                  t              sJ t        | j                  || j                  |      }| j
                  s:| j                  j                  ||      }| j                  ||j                        S |j                  | j                  | j                  |      S )Nr   r   )axesr   )r   r.   r   r&   _constructor_can_fast_transpose_mgrr   _constructor_from_mgrr  r   r   r   )r   r0   r   r,   r   mgrs         rK   r   r     s     cii,,,		C,<,<4I ""hhyZ@((388(<<##KKs{{z $ 
 	
ra   c                    | j                         }|j                  |||      }|j                  j                  dg      |_        |S )an  
    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.
    )r0   r   r,   r   )to_framer   r   _drop_level_numbers)seriesr0   r   r,   dfr   s         rK   r   r     sC    8 
	BZZe
ZFF ^^77<FNMra   c                6   d }| j                   \  }}| j                  j                  |      }t        | j                  t              rt        | |||      S t        | j                  t              rt        | j                  j                        }| j                  j                  D 	cg c]  }	|	j                  |       }
}	 || j                        \  }}|j                  |       |
j                  t        j                  ||      j                                t        | j                  j                        }|j                  | j                  j                          t	        ||
|d      }nt#        t%        || j                  | j                  f       \  }\  }}|j                  |      t        j                  ||      j                         f}t	        ||| j                  j                   | j                  j                   gd      }| j&                  s| j(                  rt        | j*                  j,                        }|d   }t        |t.              rZ|j1                         }|j3                  | j5                         D cg c]  \  }}|j,                   c}}      }t7        |||      }n5| j,                  j                         }n| j,                  j                         }|rt9        |      }||   }||   }| j;                  ||      S c c}	w c c}}w )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                ~    | j                   r | t        j                  t        |             fS t	        |       \  }}||fS rO   )	is_uniquer=   r}   rQ   r   )r.   r1   
categoriess      rK   stack_factorizezstack.<locals>.stack_factorizeM  s;    ??"))CJ///3E:z5  ra   )	level_numdropnar,   Fr   r   r.   )r   r   r/   r   r   _stack_multi_columnsr.   r3   r4   r1   r   r   r=   r   ravelr6   r   zipmapr   _is_homogeneous_typedtypesr   r   r   _concat_same_typeitems"_reorder_for_extension_array_stackr   _constructor_sliced)framer0   r  r,   r  NKr  r   r   r   clevclabr   r   r4   ilabr1   r  rp   arrrj   colr   r{   s                            rK   r   r   C  s   ! ;;DAq //6I%--,#YvD
 	
 
EKK	,%++,,-
.3kk.?.?@sSZZ]@	@$U]]3
d$q)//12**+	++,YiRW
	  #C%++u}}9U$VWtAa 0 6 6 88;;##U]]%7%78"	
	 ;;555 ell**+q	e^,,,.C..+0;;=9C9J <J1MJ ,,.J ]]((*
Z %
dO	$$Zy$AA_ A> :s   (LL
c                    t         fd|D              r }|D ]  }t        ||||      } |S t        d |D              rj }|D cg c]  } j                  j                  |       }}|r<|j	                  d      }t        ||||      }|D cg c]  }||k  r|n|dz
   }}|r<|S t        d      c c}w c c}w )Nc              3  N   K   | ]  }|j                   j                  v   y wrO   )r   r6   )rS   r   r  s     rK   rU   z!stack_multiple.<locals>.<genexpr>  s      
7#3%--%%%
7s   "%)r  r,   c              3  <   K   | ]  }t        |t                y wrO   )r   int)rS   r   s     rK   rU   z!stack_multiple.<locals>.<genexpr>  s     3cZS!3s   r   r)   zTlevel should contain all level names or all level numbers, not a mixture of the two.)r   r   r   r/   r8   ry   )r  r0   r  r,   r   r   rX   s   `      rK   stack_multipler+    s     
7
77 	BC63vDAF	B2 M+ 
3U3	3  BGG#005GG))A,C63vDAF 8==!!s(QA-=E=  M 1
 	
 H >s   "B7B<c           
     v   t        | j                        dk  r,| j                  d   j                  | j                  d         S t	        | j                  dd | j
                  dd       D cg c]  \  }}|D cg c]  }|dk\  r||   nd c}! }}}}t	        | }d t        j                  |      D        }t	        | }t        j                  t	        || j                        D cg c]"  \  }}d|vrt        ||j                        n|$ c}}| j                  dd       S c c}w c c}}}w c c}}w )	zBCreates a MultiIndex from the first N-1 levels of this MultiIndex.r   r   r   Nr(   c              3  &   K   | ]	  \  }}|  y wrO   r   )rS   keyrj   s      rK   rU   z,_stack_multi_column_index.<locals>.<genexpr>  s     AVS!SAs   ro   r6   )rQ   r4   r   r6   r  r1   	itertoolsgroupbyr   from_arraysr   rp   )	r   r   r1   crY   tuplesunique_tuplesnew_levsnew_levs	            rK   _stack_multi_column_indexr8    s6   
7>>a~~a ((gmmA.>(?? gnnSb17=="3EF C .3316Qt	#3D  $ZFAy'8'8'@AMM"H !! !$Hgnn =	
  047/BE'+O	

 mmCR   	4	
s   /D.;D)D.+'D5
)D.c                   dd}| j                  d      }|j                  }t        |t              sJ ||j                  dz
  k7  rP|}t        ||j                  dz
        D ])  } |||      }	 ||dz   |      }
|j                  |	|
      }+ |x|_        }|j                         s*|r( |d|      }|j                  |d      }|j                  }t        t        |      }t        |      }i }|j                  d   }t        |j                  d         }|rt        j                  |      }|j!                  t#        |      d       }t        j$                  ||      }t#        |      }g }|D ]  }	 |j                  j'                  |      }t        |t,              st#        |      }n|j.                  |j0                  z
  }||k7  rk|j2                  d d |j                  |   f   }|j%                  |j                  j                  d         |_        |j5                  |      j6                  }n|j8                  d d |f   }t;        |j<                  j?                               }t        |t@              r|jC                         jE                  |jG                         D cg c]"  \  }}|jH                  jK                  |d	      $ c}}      }|jL                  \  }}t        jN                  ||z        jQ                  ||      jR                  jU                         }|j%                  |      }n|j6                  }|jV                  dkD  r|jU                         }|||<    t#        |      dkD  r|jY                  |      }t#        |      }t        |jZ                  t              rqt]        |jZ                  j                        } t]        |jZ                  j^                        }!|jZ                  j                  D "cg c]  }"|"ja                  |       }#}"nDtc        |jZ                        \  }$}%|%g} |$ja                  |      g}#|jZ                  jd                  g}!| j+                  |       |#j+                  t        jf                  ||             |!j+                  | j                  j^                  |          t        | |#|!d
      }&| ji                  ||&|      }'| j                  j                  dkD  rJ| j                  jk                  |g      j                         }(|'j                  jm                  |(      s|'|(   }'|r|'jo                  dd      }'|'S # t(        $ r |j+                  |       Y w xY wc c}}w c c}"w )Nc                @    | |j                   v r|j                   |    S | S )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`.
        r/  )r  r   s     rK   _convert_level_numberz3_stack_multi_columns.<locals>._convert_level_number  s%     %==++ra   Fr   r)   r   )r0   rf   r(   )r   r   r   )r.   r   r   )rf   how)r  r*  r   r   )8r   r   r   r   r   r   	swaplevel_is_lexsorted
sort_indexr   r8  r4   r   r1   r=   r,   r   rQ   r<   get_locKeyErrorr   slicestopstartlocreindexri   ilocr	   r  tolistr   r   r  r  r   r   r   r}   r   r   r  r   
differencer.   r3   r6   r   r   r   r   r  r
  equalsr  ))r  r  r  r,   r;  thismi_colsroll_columnsr   lev1lev2level_to_sortr   new_data
level_valsr   level_vals_nanlevel_vals_usedlevsize	drop_colsr.  rE  	slice_lenchunkvalue_slicesubsetrp   rj   rT   r   r!  idxr   r   r   r   	old_codes
old_levelsr   r   desired_columnss)                                            rK   r  r    s    ::5:!DllGgz*** GOOa''y'//A"56 	>A(L9D(Q=D'11$=L		>
 ".-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 $88:LLEK\\^TTQ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ESSZZ(E	E 7

 C	: \
%%g./	ZZ__%	j!RWW[!,-U]]((34)eI 	;OF}}q --;;YKHOOQ~~$$_5O,F A51MS  	S!	0 U, Fs   1U#'U; VU87U8c                    t        j                  ||z        j                  ||      j                  j	                         }| j                  |      S )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<   )r%  n_rows	n_columnsr[  s       rK   r  r  P  sB    B ))FY&
'
/
/	6
B
D
D
J
J
LC88C=ra   c           	        | j                   j                         t        | j                         k7  rt        d      t	        d      }| j                   j                  t        | j                   j                        D cg c]	  }|vs| c}d d d         }t              dkD  r't        j                        }|j                  |      }n|}|j                         }|j                         }g }	|D ]*  }
t        | j                         dk(  r| j                         }nat              dk(  r|
f}
t        |
      t        fdt        | j                   j                        D              }| j                  d d |f   }t              | j                   j                  k  r!|j                   j                  |      |_         nI|j                  dk(  r:|j                   dk(  rd|_        n#t%        t        |j                               |_         |	j'                  |       - t        |	      dkD  r/| j(                  s#t+        |	      }t        |      t        |       z  }nrt              | j                   j                  k  r*| j                   j                  |      j                         }ndg}t-        || j.                  j0                        }d}t              | j                   j                  k  rI| j                   j                  |      j                         }|j                   j3                  |      s||   }t5        | j6                  t8              rL| j6                  j:                  }t=        t        j>                  | j6                  j@                  d|f            }n>tC        | j6                  d	
      \  }}|g}t=        t        j>                  |d|f            }t5        |t8              r'|j:                  }|jE                         j@                  }n"|j                         g}tC        |d	
      d   g}|D cg c]!  }t        jF                  |t        |             # }}t9        ||z   ||z   | j6                  jH                  t=        |jH                        z   d	      |_        t        |       }t        |      }t        jJ                  |      }t        j>                  ||z  |      t        jF                  t        jJ                  |      |      z   }|jM                  |      }|j                   dk(  rd| j                   j                  t              k(  rBt        |j                         dk(  rtO        |j6                        }n|jP                  d d df   }|j                   dk(  rd |_        |S c c}w c c}w )Nz8Columns with duplicate values are not supported in stackT)reverser(   r)   c              3  R   K   | ]  }|v rt              n
t        d          y wrO   )nextrB  )rS   kgenr0   s     rK   rU   zstack_v3.<locals>.<genexpr>  s,      # %ZS	U4[8#s   $'r   )r   rp   F)use_na_sentinelr   r   r  ))r   nuniquerQ   ry   sortedr
  r   r   r=   argsort_reorder_ilevelsr   r   iterrW   rE  r   r   r   r   r   r   r   r   rp   rJ  r   r.   r   r4   r3   r   r1   r   drop_duplicatesr   r6   r}   r<   r   rG  )r  r0   drop_levnumsrf  
stack_colssorterordered_stack_colsstack_cols_uniqueordered_stack_cols_uniquebufr[  r   column_indexerr   ratior   r^  index_levelsindex_codesr1   uniquescolumn_levelscolumn_codeslen_df	n_uniquesr_   idxsrg  s    `                         @rK   stack_v3r  u  s   }}#emm"44STT %.L22%--//0CqAUN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;emm6I6IJ
5zEMM)))--;;LIPPR~~$$_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KUBIIeSZ0KL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   	V6V6 &V;)NT)r   Series | DataFramer,   rv   )r   r  r,   rv   )r   r   r,   rv   r   r   )r  r   r,   rv   r   r   )r(   TT)r  r   r  rv   r,   rv   )TT)r   r   r   r   )
r  r   r  r*  r  rv   r,   rv   r   r   )r%  r#   r`  r*  ra  r*  r   r#   )r  r   r0   z	list[int]r   r  )L
__future__r   r0  typingr   r   rB   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
algorithmsrg   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+  r8  r  r  r  r   ra   rK   <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ra   