+
    xȇi                       ^ RI Ht ^ RIt^ RIHtHtHt ^ RIt^ RIt	^ RI
Ht ^ RIHu Ht ^ RIHtHt ^ RIHt ^ RIHt ^ RIHtHt ^ R	IHtHtHtHt ^ R
IH t  ^ RI!H"t"H#t# ^ RI$H%u H&t' ^ RI$H(t(H)t) ^ RI*H+t+ ^ RI,H-t- ^ RI.H/t/ ^ RI0H1t1 ^ RI2H3t3H4t4H5t5 ^ RI6H7t7 ^ RI8H9t9 ^ RI:H;t;H<t<H=t=H>t>H?t? ]'       d   ^ RI@HAtAHBtBHCtC ^ RIDHEtE ^ RIFHGtG  ! R R4      tHR4R R lltI]R5R R ll4       tJ]R5R R ll4       tJR4R  R! lltJR4R" R# lltKR$ R% ltLR6R& R' lltMR7R( R) lltNR* R+ ltOR6R, R- lltPR. R/ ltQR0 R1 ltRR2 R3 ltSR# )8    )annotationsN)TYPE_CHECKINGcastoverload)
get_option)Pandas4Warning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)isnanotna)	factorizeunique)NDArrayBackedExtensionArray)factorize_from_iterable)ensure_wrapped_if_datetimelike)	DataFrame)Index
MultiIndexdefault_index)concat)Series)compress_group_indexdecons_obs_group_idsget_compressed_idsget_group_indexget_group_index_sorter)	ArrayLikeLevelnpt)ExtensionArray)
FrozenListc                      ] tR t^JtRtRR R llt]R R l4       t]R R l4       tR R	 lt	R
 R lt
]R R l4       t]R R l4       tR R ltRR ltR R lt]R R l4       t]R R l4       tRtR# )
_UnstackeraX  
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               (    V ^8  d   QhRRRRRRRR/# )	   indexr   levelr&   sortboolreturnNone )formats   "k/Users/max/.openclaw/workspace/postharvest/venv/lib/python3.14/site-packages/pandas/core/reshape/reshape.py__annotate___Unstacker.__annotate__y   s,     7 77(-7BF7	7    c                	   W0n         W@n        VP                  4       V n        V P                  P	                  V4      V n        RV P                  P                  V P
                  ,          9   V n        V P                  ;'       d    V P                  pV'       d   ^M^ V n        \        V P                  P                  4      V n        \        V P                  P                  4      V n        V P                  P                  V P
                  4      V n        V P                  P                  V P
                  4      V n        VP                  V P
                  ,          V n        RV n        V P                  '       g   \'        V P                  P                  V P
                  ,          4      pV P                  '       d1   VR8H  pWg( ,          p\(        P*                  ! V4      ^ ,          V n        V P                   P-                  V4      V n        V P"                  P-                  V4      V n        \/        R4      '       d   \1        R V P                   4       4      pV P                   P2                  p	W,          p
V
\(        P4                  ! \(        P6                  4      P0                  8  d*   \8        P:                  ! RV
 R2\<        \?        4       R7       V PA                  4        R# )   performance_warningsc              3  8   "   T F  qP                   x  K  	  R # 5iN)size).0index_levels   & r6   	<genexpr>&_Unstacker.__init__.<locals>.<genexpr>   s     U?T++?T   z%The following operation may generate z& cells in the resulting pandas object.
stacklevelN)!constructorr0   remove_unused_levelsr.   _get_level_numberr/   codeshas_nanliftlistlevelsnew_index_levelsnamesnew_index_namespopremoved_nameremoved_levelremoved_level_fullunique_nan_indexr   npflatnonzerotaker   maxr?   iinfoint32warningswarnr	   r   _make_selectors)selfr.   r/   rH   r0   should_liftunique_codesnan_masknum_rowsnum_columns	num_cellss   &&&&&      r6   __init___Unstacker.__init__y   s    '	//1
ZZ11%8
 TZZ--djj99ll00tyy$A!	 !%TZZ%6%6 7#DJJ$4$45 0044TZZ@!2266tzzB"',,tzz":%'yyy'-djj.>.>tzz.J'KL|||'2-+I6(*x(@(C%!%!3!3!8!8!FD&*&=&=&B&B<&PD#,--
 Ut?T?TUUH,,11K !.I288BHH-111;I; G6 7&/1	 	r9   c                   V ^8  d   QhRR/# )r-   r2   z-tuple[npt.NDArray[np.intp], list[np.ndarray]]r4   )r5   s   "r6   r7   r8      s        
 r9   c                	t   V P                   p\        V P                  P                  4      pV P                  '       g"   V Uu. uF  p\        V4      ^ ,          NK  	  pp\        V P                  P                  4      pVRV W!^,           R ,           W!,          .,           p\        ;QJ d5    . R VRV WA^,           R ,           WA,          .,            4       F  NK  	  5M.! R VRV WA^,           R ,           WA,          .,            4       4      p\        WV4      w  rx\        V4      p	\        Wy4      p
W3# u upi )r   Nc              3  8   "   T F  p\        V4      x  K  	  R # 5ir>   lenr@   xs   & r6   rB   2_Unstacker._indexer_and_to_sort.<locals>.<genexpr>   s     K&Jc!ff&JrD   )r/   rN   r.   rK   r0   r   rO   tupler"   rn   r$   )ra   vrK   codelevsto_sortsizes
comp_indexobs_idsngroupsindexers   &          r6   _indexer_and_to_sort_Unstacker._indexer_and_to_sort   s    JJTZZ%%&yyy49:EDYt_Q''EE:DJJ%%&)eEGn,z9Kd2Ah!eg&>$'&JKKd2Ah!eg&>$'&JKK0@
g,(= ;s   D5c                   V ^8  d   QhRR/# )r-   r2   zlist[np.ndarray]r4   )r5   s   "r6   r7   r8      s      / r9   c                	    V P                   w  rV P                  '       d!   V Uu. uF  q3P                  V4      NK  	  up# V# u upi r>   )r|   r0   rZ   )ra   r{   rv   lines   &   r6   sorted_labels_Unstacker.sorted_labels   s?    449993:;74IIg&7;; <s   Ac                    V ^8  d   QhRRRR/# )r-   values
np.ndarrayr2   r4   )r5   s   "r6   r7   r8      s      *  r9   c                	R    V P                   w  r#\        P                  ! W^ R7      pV# )r   )axis)r|   algostake_nd)ra   r   r{   _sorted_valuess   &&   r6   _make_sorted_values_Unstacker._make_sorted_values   s%    ..
fA>r9   c                   V ^8  d   QhRR/# )r-   r2   r3   r4   )r5   s   "r6   r7   r8      s     S S Sr9   c                	   V P                   pV P                  R R p\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\        W#4      w  rE\	        V4      p\        V4      pV P                  P                  V P                  ,          V P                  ,           pWg3V n
        V P                  R,          Wt,          ,           V P                  ,           p\        P                  ! \        P                  ! V P                  4      \        R7      p	V	P!                  VR4       V	P#                  4       \	        V P                  4      8  d   \%        R4      hW@n        Wn        V P*                  '       d-   VP-                  \        P.                  ! V4      4      V n        R # \        P*                  ! \        P2                  ! VRR7      ^,          4      V n        R # )Nc              3  8   "   T F  p\        V4      x  K  	  R # 5ir>   rm   ro   s   & r6   rB   -_Unstacker._make_selectors.<locals>.<genexpr>   s     7JqCFFJrD   dtypeTz0Index contains duplicate entries, cannot reshape)return_indexrG   )rP   r   rr   r"   rn   r   r.   levshaper/   rL   
full_shaperM   rX   zerosprodr1   putsum
ValueErrorgroup_indexmaskr0   searchsortedarange
compressorr   )
ra   
new_levelsremaining_labelslevel_sizesrx   ry   rz   strideselectorr   s
   &         r6   r`   _Unstacker._make_selectors   sH   **
  --cr2e7J7ee7J7701AO
g,(4
$$TZZ04<<?!/%%b)F,??$))Kxx0=4 88:DJJ'OPP%	999(55bii6HIDO ggbii
&Nq&QRDOr9   c                   V ^8  d   QhRR/# )r-   r2   r1   r4   )r5   s   "r6   r7   r8      s     % %$ %r9   c                	H    \        V P                  P                  4       4      # r>   )r1   r   all)ra   s   &r6   mask_all_Unstacker.mask_all   s    DIIMMO$$r9   c                   V ^8  d   QhRR/# )r-   r2   z2tuple[npt.NDArray[np.intp], npt.NDArray[np.bool_]]r4   )r5   s   "r6   r7   r8      s     ' 'Q 'r9   c                	    \         P                  ! \        V P                  4      \         P                  R 7      pV P                  VRR7      w  r#W#P                  ^ 4      3# )r   
fill_valuerG   )rX   r   rn   r.   intpget_new_valuesany)ra   	dummy_arr
new_valuesr   s   &   r6   arange_result_Unstacker.arange_result   sI     IIc$**oRWW=	..yR.H
88A;&&r9   c                   V ^8  d   QhRR/# )r-   r2   r   r4   )r5   s   "r6   r7   r8      s      I r9   c                	   VP                   pVP                  ^8X  d   VR\        P                  3,          pVf$   VP                  ^,          ^8w  d   \        R4      hV P                  WC4      w  rVV P                  V4      pV P                  pV P                  WXWuP                  RR7      p	\        V\        P                  4      '       d   VP                  VP                  rME\        V\        4      '       d-   VP                  P                  VP                  P                  rM^^rWJ d&   V	P                   P#                  VP                   4       V	# )r;   NNNz-must pass column labels for multi-column dataF)r.   columnsr   copy)_valuesndimrX   newaxisshaper   r   get_new_columns	new_indexrH   r   
isinstancendarraybaser   _ndarray_mgradd_references)ra   objvalue_columnsr   r   r   r   r   r.   resultr   new_bases   &&&&        r6   
get_result_Unstacker.get_result   s   ;;!ArzzM*F V\\!_%9LMM++F?
&&}5!!W<L<LSX " 
 fbjj))#[[*//( ;<<#__11:3F3F3K3K((KK&&sxx0r9   Nc                	   VP                   ^8X  d   VR\        P                  3,          pV P                  V4      pV P                  w  rEVP
                  ^,          pWV,          pWG3pV P                  p	V P                  p
V
'       db   \        V4      '       dQ   VP                  WEV4      P                  ^^4      P                  V4      p\        P                  ! V\        R7      pW3# VP                  p\        V\        4      '       d0   VP!                  4       pVP#                  WR7      pV
'       g   W+R&   MV
'       g   Tp\%        W4      w  rW8w  dn   VP&                  R9  d'   \(        P*                  ! R\,        \/        4       R7       M6\1        V4      '       g&   \(        P*                  ! R\,        \/        4       R7       \        P2                  ! WR7      pV
'       g   VP5                  V4       VP6                  p\        P8                  ! V\        R7      p\;        VP                  4      '       d$   VP=                  R4      pVP=                  R4      pMVP?                  VRR7      p\@        PB                  ! VV	P=                  R	4      VVVVVP=                  R	4      4       \;        VP                  4      '       d8   VP=                  R
4      p\E        V4      pVP=                  VP                  4      pW3# )r;   r   r   iubznUsing a fill_value that cannot be held in the existing dtype is deprecated and will raise in a future version.rE   i8Fr   u1zM8[ns])#r   rX   r   r   r   r   r   r   rn   reshapeswapaxesonesr1   r   r   r   construct_array_type_emptyr   kindr^   r_   r   r   r   emptyfillnamer   r   viewastype
libreshapeunstackr   )ra   r   r   r   lengthwidthr   result_widthresult_shaper   r   r   new_maskr   cls	old_dtyper   s   &&&              r6   r   _Unstacker.get_new_values  sb   ;;!ArzzM*F008 a~-yy== F
 %%fV<!Q& 
 ww|48H''e^,, ,,.CL>J *1!	$1%$D!% ~~U2 V*'7'9 "*-- V*'7'9 ,<J
+zz88L5
 v||,,)..t4M#.J)00E0BM 	IIdOMM$	
 v||,, $2J7
CJ#6J##r9   c                   V ^8  d   QhRR/# )r-   r   zIndex | Noner4   )r5   s   "r6   r7   r8   v  s     !
 !
\ !
r9   c                	   Vf   V P                   '       g'   V P                  P                  V P                  R7      # V P                  P	                  ^ V P                  P
                  R7      pVP                  V P                  4      # \        V P                  4      V P                   ,           p\        V4      p\        P                  ! \        P                  ! V4      V4      p\        V\        4      '       dg   VP                  V P                  3,           pVP                  V P                  3,           pVP                    Uu. uF  qP#                  V4      NK  	  p	pM)VV P                  .pVP$                  V P                  .pV.p	V P&                  p
V	P)                  \        P*                  ! W4      4       \        WiVRR7      # u upi )Nr   )itemFrO   rK   rQ   verify_integrity)rL   rU   _renamerT   insert	_na_valuerenamern   rX   repeatr   r   r   rO   rV   rQ   rK   rZ   r   	_repeaterappendtile)ra   r   levr   r   
propagatorr   	new_nameslab	new_codesrepeaters   &&         r6   r   _Unstacker.get_new_columnsv  s    <<<))11t7H7H1II$$++AD4F4F4P4P+QC::d//00T''(4<<7M"YYryy/8
 mZ00&--1H1H0JJJ%++t/@/@.BBI9F9L9LM9L#*-9LIMI ''J '++T->->?I#I>> 	12iRW
 	
 Ns   G	c                   V ^8  d   QhRR/# )r-   r2   r   r4   )r5   s   "r6   r7   r8     s      : r9   c                	t   \        V P                  4      \        V P                  4      8w  dR   V P                  P                  V P                  4      pV P                  '       d   \
        P                  ! V^ R4      pV# \        V P                  4      V P                  ,           p\
        P                  ! V4      V P                  ,
          pV P                  '       d[   V P                  '       gI   V P                  R8  g   Q R4       hRWP                  &   WP                  ^,           R;;; ^,          uuu% V# )r   z+`unique_nan_index` not properly initializedNrG   )rn   rV   rU   get_indexerrL   rX   r   r   rM   r0   rW   )ra   r   r   s   &  r6   r   _Unstacker._repeater  s     t&&'3t/A/A+BB..::4;M;MNH|||99Xq"5  ++,t||;Fyy(4994H|||DIII,,r1 A1 35../..245:5r9   c                   V ^8  d   QhRR/# )r-   r2   MultiIndex | Indexr4   )r5   s   "r6   r7   r8     s     
 
- 
r9   c                	   V P                   '       d   V P                  R R pM@V P                  p\        V P                  P
                  4      pVR V W2^,           R  ,           pV Uu. uF  qDP                  V P                  4      NK  	  pp\        V P                  4      ^8X  d   V P                  ^ ,          V^ ,          rvVR8H  P                  4       '       d&   VP                  \        V4      VP                  4      pVP                  V4      P                  V P                  ^ ,          4      # \        V P                  VV P                  RR7      # u upi )NFr   rG   )r0   r   r/   rN   r.   rK   rZ   r   rn   rP   r   r   r   r   rR   r   )ra   labelsrs   rK   r   result_codesr/   level_codess   &       r6   r   _Unstacker.new_index  s    999'',F

A))*E2AY1uw/F=CDVc1VD t$$%*!%!6!6q!9<?;r!&&((SZA::k*11$2F2Fq2IJJ((&&"	
 	
 Es   '#E)r   rH   r   r   rL   r.   r/   rM   r   rP   rR   rU   rV   rT   r0   rW   )Tr>   )__name__
__module____qualname____firstlineno____doc__rh   r
   r|   r   r   r`   r   r   r   r   r   r   r   __static_attributes__r4   r9   r6   r+   r+   J   s    ,\7r    ,  
S8 % % ' '4]$~!
F  . 
 
r9   r+   c                    V ^8  d   QhRRRR/# )r-   dataSeries | DataFramer0   r1   r4   )r5   s   "r6   r7   r7     s      ^ ^
^<@^r9   c                  a \        V4      ^ 8X  d   V # V P                  p\        \        V4      pWP                  9   d   V.pV Uu. uF  qTP                  V4      NK  	  pp\        VP                  4       Uu. uF  qUV9  g   K  VNK  	  ppV Uu. uF  qTP                  V,          NK  	  ppV Uu. uF  qTP                  V,          NK  	  ppV Uu. uF  qTP                  V,          NK  	  p	pV Uu. uF  qTP                  V,          NK  	  p
pV Uu. uF  qTP                  V,          NK  	  ppV Uu. uF  qTP                  V,          NK  	  pp\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\        WRRR7      p\        VRR7      w  pp\        VVWRR7      pV'       g   \        VRRR7      pM\        . V
OVN. VOVN. VORNRR7      p\        V \         4      '       d5   V P#                  RR	7      pVVn        VP%                  RW#R
7      pTpT	pTpEMD\        V P&                  \        4      '       dT   T pV'       dH   VP)                  ^ 4      pVP%                  VW#R
7      pV Uu. uF  pVV8  d   TMV^,
          NK  	  ppKO  V# V P#                  RR	7      pVVn        VP%                  RW#R
7      p\        V\         4      '       d   VP                  oMVP&                  o\        S\        4      '       g   Q hSP                  ^ ,          .VOpV P&                  P*                  .V	OpSP                  ^ ,          .pVP-                  V3R lV 4       4       \        VVVRR7      p\        V\         4      '       d
   VVn        V# VVn        V# u upi u upi u upi u upi u upi u upi u upi u upi u upi )r   c              3  8   "   T F  p\        V4      x  K  	  R # 5ir>   rm   ro   s   & r6   rB   $_unstack_multiple.<locals>.<genexpr>  s     *'Q#a&&'rD   F)r0   xnullr0   )r  __placeholder__)r   r   r   deepr   r0   c              3  f   <"   T F&  qP                  SP                  R,          4      x  K(  	  R# 5i)r;   NrG   )rZ   rK   )r@   recunstcolss   & r6   rB   r    s$     N#(.."455s   .1)rn   r.   r   r   rQ   rJ   rangenlevelsrO   rK   rr   r#   r    r!   r   r   r   r   r   r   rS   r   extend)r  clocsr   r0   r.   irlocsclevelsccodescnamesrlevelsrcodesrnamesr   r   comp_idsry   recons_codesdummy_indexdummy	unstackedr   r   r   r   valrs   dummy_dfnew_columnsr  s   &&&&                         @r6   _unstack_multipler1    s    5zQ JJEU#E 167A$$Q'E7emm,?,1QQ,E?(-.1||AG.&+,ekk!nneF,&+,ekk!nneF,(-.1||AG.&+,ekk!nneF,&+,ekk!nneF,E*'*EE*'**E!&e5IK,[uEHg''5PUVLG*;%H &W&g&%F%H%.F.-."	
 $		u	%!MM"3
MV	
	 	dllJ//Fiil  J (  ;@@%Qa#g1q50%@M 99%9($ $$* % 
	 i(( H ((H(J////ooa(373
\\&&00	^^A&'	NNN)eK )V$$%	  (	_ 8?.,,.,,J As<   N$9N)N)N.3N3N85N=O7O;Oc               $    V ^8  d   QhRRRRRR/# )r-   r   r   r0   r1   r2   r   r4   )r5   s   "r6   r7   r7   -  s     S S Sd SY Sr9   c                    R # r>   r4   r   r/   r   r0   s   &&&&r6   r   r   ,  s    PSr9   c               $    V ^8  d   QhRRRRRR/# r-   r   r  r0   r1   r2   r4   )r5   s   "r6   r7   r7   1  s$      	:>r9   c                    R # r>   r4   r4  s   &&&&r6   r   r   0  s     r9   c               $    V ^8  d   QhRRRRRR/# r6  r4   )r5   s   "r6   r7   r7   6  s)     !T !T	!T;?!T!Tr9   c                   \        V\        \        34      '       d'   \        V4      ^8w  d   \	        WW#R7      # V^ ,          p\        V4      '       g#   VR8X  g   V P                  P                  V4       \        V \        4      '       dH   \        V P                  \        4      '       d   \        WW#R7      # V P                  P                  4       # \        V P                  \        4      '       g#   \        R\        V P                  4       R24      h\        V P                   4      '       d   \#        WW#R7      # \%        V P                  WP&                  VR7      pVP)                  V RVR7      # )	r;   r  r  z'index must be a MultiIndex to unstack, z was passedr  r/   rH   r0   Nr   r   )r   rr   rN   rn   r1  r   r.   rJ   r   r   _unstack_frameTstackr   typer   r   _unstack_extension_seriesr+   _constructor_expanddimr   )r   r/   r   r0   	unstackers   &&&& r6   r   r   6  s!    %%''u:? %SJRR!HEeU.?%?		##E*#y!!cii,,!#OO55;;= 		:.. 5d399o5FkR
 	
 syy)),SOOIIU0J0JQU
	 ##Ct
#SSr9   c               $    V ^8  d   QhRRRRRR/# )r-   r   r   r0   r1   r2   r4   )r5   s   "r6   r7   r7   Z  s$     
 
	
26

r9   c                X   \        V P                  \        4      '       g   Q h\        V P                  WP                  VR 7      pV P
                  '       g9   V P                  P                  WBR7      pV P                  WUP                  R7      # VP                  W P                  VR7      # )r:  r   )axesr;  )r   r.   r   r+   _constructor_can_fast_transposer   r   _constructor_from_mgrrE  r   r   )r   r/   r   r0   rB  mgrs   &&&&  r6   r<  r<  Z  s     cii,,,,		,<,<4I """hhy@((88(<<##{{z $ 
 	
r9   c               $    V ^8  d   QhRRRRRR/# )r-   seriesr   r0   r1   r2   r   r4   )r5   s   "r6   r7   r7   k  s$     $ $$-1$$r9   c                    V P                  4       pVP                  WVR7      pVP                  P                  ^ .4      Vn        V# )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.
)r/   r   r0   )to_framer   r   _drop_level_numbers)rK  r/   r   r0   dfr   s   &&&&  r6   r@  r@  k  sC    8 
	BZZeZFF ^^77<FN Mr9   c               (    V ^8  d   QhRRRRRRRR/# )r-   framer   dropnar1   r0   r2   r  r4   )r5   s   "r6   r7   r7     s8     NB NBNB(,NB;?NBNBr9   c                   R pV P                   w  rVV P                  P                  V4      p\        V P                  \        4      '       d   \        WW#R7      # \        V P                  \        4      '       d   \        V P                  P                  4      pV P                  P                   U	u. uF  qP                  V4      NK  	  p
p	V! V P                  4      w  rVP                  V4       V
P                  \        P                  ! W4      P                  4       4       \        V P                  P                  4      pVP                  V P                  P                   4       \	        WVRR7      pM\#        \%        W@P                  V P                  34      RR/ w  pw  ppVP                  V4      \        P                  ! W4      P                  4       3p\	        VVV P                  P                   V P                  P                   .RR7      pV P&                  '       g   V P(                  '       d   \        V P*                  P,                  4      pV^ ,          p\        V\.        4      '       d\   VP1                  4       pTP3                  V P5                  4        UUu. uF  w  ppVP,                  NK  	  upp4      p\7        VWV4      pM5V P,                  P                  4       pMV P,                  P                  4       pV'       d   \9        V4      pVV,          pVV,          pV P;                  VVR7      # u up	i u uppi )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                    V P                   '       d"   V \        P                  ! \        V 4      4      3# \	        V 4      w  rW!3# r>   )	is_uniquerX   r   rn   r   )r.   rK   
categoriess   &  r6   stack_factorizestack.<locals>.stack_factorize  s9    ???"))CJ///3E:  r9   )	level_numrR  r0   Fr   strictTr.   )r   r   rJ   r   r   _stack_multi_columnsr.   rN   rO   rK   r   r   rX   r   ravelrQ   r   zipmapr   _is_homogeneous_typedtypesr   r   r   _concat_same_typeitems"_reorder_for_extension_array_stackr   _constructor_sliced)rQ  r/   rR  r0   rW  NKrY  r   r   r   clevclabr   r   rO   ilabrK   ra  r   arrr   colr   r   s   &&&&                     r6   r>  r>    s   ! ;;DA //6I%--,,#v
 	
 
EKK	,	,%++,,-
.3kk.?.?@.?sZZ].?	@$U]]3
$)//12**+	++,iRW
	  #;;">? 
HL 
t A 0 6 6 88;;##U]]%7%78"	
	 ;;;5555 ell**+q	e^,,,,.C..+0;;=9=C=9J <JMJ ,,.J ]]((*
Z %
dO	$$Zy$AAc AB :s   1L?%M
c               $    V ^8  d   QhRRRRRR/# )r-   rQ  r   rR  r1   r0   r4   )r5   s   "r6   r7   r7     s!     " ") "D "t "r9   c                D  a  \         ;QJ d    V 3R  lV 4       F  '       d   K   RM	  RM! V 3R  lV 4       4      '       d   S pV F  p\        WEW#R7      pK  	  V# \         ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       dx   S pV Uu. uF  pS P                  P                  V4      NK   	  ppV'       dA   VP	                  ^ 4      p\        WEW#R7      pV Uu. uF  qfV8:  d   TMV^,
          NK  	  ppKH   V# \        R4      hu upi u upi )c              3  T   <"   T F  qSP                   P                  9   x  K  	  R # 5ir>   )r   rQ   )r@   r   rQ  s   & r6   rB   !stack_multiple.<locals>.<genexpr>  s     
7#%--%%%s   %(FT)rR  r0   c              3  B   "   T F  p\        V\        4      x  K  	  R # 5ir>   )r   int)r@   r   s   & r6   rB   rp    s     3UcZS!!Us   zTlevel should contain all level names or all level numbers, not a mixture of the two.)r   r>  r   rJ   rS   r   )rQ  r/   rR  r0   r   r   rs   s   f&&&   r6   stack_multiplers    s	    s
7
7sss
7
777C 6vAF : M/ 
3U3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   $D,Dc                    V ^8  d   QhRRRR/# )r-   r   r   r2   r  r4   )r5   s   "r6   r7   r7     s      z 6H r9   c                J   \        V P                  4      ^8:  d5   V P                  ^ ,          P                  V P                  ^ ,          R7      # R \	        V P                  RR
 V P
                  RR
 RR7       4       p\	        VRR/ pR \        P                  ! V4       4       p\	        VRR/ p\        P                  ! \	        W@P                  RR
 RR7       UUu. uF$  w  rVRV9  d   \        WVP                  R7      MTNK&  	  uppV P                  RR
 R	7      # u uppi )zBCreates a MultiIndex from the first N-1 levels of this MultiIndex.r   c              3  p   "   T F'  w  rV Uu. uF  q3^ 8  d	   W,          MRNK  	  upx  K)  	  R# u upi 5i)r   Nr4   )r@   r   rK   cs   &   r6   rB   ,_stack_multi_column_index.<locals>.<genexpr>  s8      SJC .33U6t	#U3S 	4s   616NT)rZ  rZ  c              3  *   "   T F	  w  rVx  K  	  R # 5ir>   r4   )r@   keyr   s   &  r6   rB   rx    s     A'@VSS'@s   r   rQ   rG   )rn   rO   r   rQ   r^  rK   	itertoolsgroupbyr   from_arraysr   r   )r   ru   tuplesunique_tuplesnew_levsnew_levr   s   &      r6   _stack_multi_column_indexr    s   
7>>a~~a ((gmmA.>(??gnnSb17=="3EdSD $$t$FAy'8'8'@AMM/$/H !! !$HnnSb.A$ O	
 !P 047/BE'+O O	

 mmCR  	
s   *D
c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r-   rQ  r   rY  rr  rR  r1   r0   r2   r4   )r5   s   "r6   r7   r7   #  s;     A AA!$A37AFJAAr9   c                   R  R lpV P                  RR7      pVP                  p\        V\        4      '       g   Q hWP                  ^,
          8w  dX   Tp\        WP                  ^,
          4       F,  pV! W4      p	V! V^,           V4      p
VP                  W4      pK.  	  T;Vn        pVP                  4       '       g1   V'       d)   V! ^ V4      pVP                  V^R7      pVP                  p\        \        V4      p\        V4      p/ pVP                  R,          p\        VP                  R,          4      pV'       d   \        P                  ! V4      pVP!                  \#        V4      R4      p\        P$                  ! VV4      p\#        V4      p. pV EF  p VP                  P'                  V4      p\        T\,        4      '       g   \#        T4      pMTP.                  TP0                  ,
          pTT8w  dv   TP2                  RTP                  T,          3,          pTP%                  TP                  P                  R,          4      Tn        TP5                  TR7      P6                  pEMTP8                  RT3,          p\;        TP<                  P?                  4       4      p\        T\@        4      '       d   TPC                  4       PE                  TPG                  4        UUu. uF#  w  ppTPH                  PK                  TRR7      NK%  	  upp4      pTPL                  w  pp\        PN                  ! TT,          4      PQ                  TT4      PR                  PQ                  R4      pTP%                  T4      pMTP6                  pTPT                  ^8  d   TPW                  4       pTTT&   EK"  	  \#        V4      ^ 8  d   VPY                  V4      p\#        V4      p\        VPZ                  \        4      '       dt   \]        VPZ                  P                  4      p \]        VPZ                  P^                  4      p!VPZ                  P                   U"u. uF  p"V"Pa                  V4      NK  	  p#p"MD\c        VPZ                  4      w  p$p%V%.p V$Pa                  V4      .p#VPZ                  Pd                  .p!V P+                  V4       V#P+                  \        Pf                  ! VV4      4       V!P+                  V P                  P^                  V,          4       \        V V#V!RR	7      p&V Pi                  VV&VR
7      p'V P                  P                  ^8  dU   V P                  Pk                  V.4      P                  4       p(V'P                  Pm                  V(4      '       g
   V'V(,          p'V'       d   V'Po                  ^ RR7      p'V'#   \(         d    TP+                  T4        EKY  i ; iu uppi u up"i )c                    V ^8  d   QhRRRR/# )r-   rY  rr  r   r   r4   )r5   s   "r6   r7   *_stack_multi_columns.<locals>.__annotate__&  s       u r9   c                L    WP                   9   d   VP                   V ,          # V # )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{  )rY  r   s   &&r6   _convert_level_number3_stack_multi_columns.<locals>._convert_level_number&  s#     %==++r9   Fr  )r/   r   Nr   )r   r   r   )r.   r   r   )r   howrG   )8r   r   r   r   r  r  	swaplevel_is_lexsorted
sort_indexr   r  rO   r   rK   rX   r0   r   rn   rZ   get_locKeyErrorr   slicestopstartlocreindexr   ilocr   ra  tolistr   r   rb  rc  r   r   r   r   r   r=  r   r]  
differencer.   rN   rQ   r   r   r   r   rF  rN  equalsrR  ))rQ  rY  rR  r0   r  thismi_colsroll_columnsr!  lev1lev2level_to_sortr0  new_data
level_valsr  level_vals_nanlevel_vals_usedlevsize	drop_colsrz  r  	slice_lenchunkvalue_slicesubsetr   r   rp   rf  rg  idxr   r   r   r   	old_codes
old_levelsr   r   desired_columnss)   &&&&                                     r6   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>>rB)..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   !W1)W9"W?W65W6c               (    V ^8  d   QhRRRRRRRR/# )r-   rk  r(   n_rowsrr  	n_columnsr2   r4   )r5   s   "r6   r7   r7     s,     " "	"!$"14""r9   c                    \         P                  ! W,          4      P                  W!4      P                  P                  R4      pV P	                  V4      # )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')
rG   )rX   r   r   r=  rZ   )rk  r  r  r  s   &&& r6   rd  rd    s@    B ))F&
'
/
/	
B
D
D
L
LR
PC88C=r9   c               $    V ^8  d   QhRRRRRR/# )r-   rQ  r   r/   	list[int]r2   r  r4   )r5   s   "r6   r7   r7     s'     O OI Oi O4F Or9   c           	     :	   V P                   P                  4       \        V P                   4      8w  d   \        R 4      h\        V4      '       g   V # \	        V4      pV P                   P                  \        V P                   P                  ^,
          R	R	4       Uu. uF  q3V9  g   K  VNK  	  up4      p\        V P                   \        4      '       g   \        V P                   4      ^ 8  d;   V P                  '       d)   V P                  P                  ^ ,          P                  pMRpV P                  V P                  P!                  R	RR7      VR7      pM\#        WW$4      pV P$                  '       d   ^ M\        V4      \        V 4      ,          p\        V P&                  \        4      '       dN   V P&                  P(                  p\+        \,        P.                  ! V P&                  P0                  ^V34      4      p	M>\3        V P&                  RR7      w  rV.p\+        \,        P.                  ! V
^V34      4      p	\        V4      ^8  dA   \,        P4                  ! V4      p\        V\        4      '       g   Q hVP7                  V4      pMTpVP9                  4       p\        V\        4      '       d(   VP(                  pVP;                  4       P0                  pMV.p\3        VRR7      ^ ,          .pV U
u. uF#  p
\,        P<                  ! V
\        V 4      4      NK%  	  pp
\        W,           V	V,           V P&                  P>                  \+        VP>                  4      ,           RR7      Vn        \        V 4      p\        V4      p\,        P@                  ! V4      p\,        P.                  ! VV,          V4      \,        P<                  ! \,        P@                  ! V4      V4      ,           pVPC                  V4      pVPD                  ^8X  di   V P                   P                  \        V4      8X  dE   \        VP                   4      ^ 8X  d   \G        VP&                  R7      pMVPH                  R
,          pVPD                  ^8X  d   RVn%        V# u upi u up
i )z8Columns with duplicate values are not supported in stackNF)orderr   F)use_na_sentinelr   r[  rG   )r   r   )&r   nuniquern   r   setrN  r  r  r   r   r`  r   blocksr   re  r   r   stack_reshaper   r.   rO   rN   rX   r   rK   r   argsort_reorder_ilevelsr   drop_duplicatesr   rQ   r   rZ   r   r   r  r   )rQ  r/   
set_levelsk
stack_colsr   r   ratioindex_levelsindex_codesrK   uniquessorterordered_stack_colsordered_stack_cols_uniquecolumn_levelscolumn_codeslen_df	n_uniquesr{   idxss   &&                   r6   stack_v3r    s   }}#emm"44STTu::UJ22%--//!3R<T<q@S<TJ
 emmZ00 u}}!e&@&@&@JJ%%a(..EE**MM!!"C!0 + 
 uZD A#f+U";E %++z**{{))2775;;#4#4q%jAB"5;;Fy27751e*56
5zA~E"*j1111'88@' 2 9 9 ;$j11*11)99;AA23!";USTUVW ?KKlUBIIeSZ0lLK+L(kk$'9'?'?"@@	FL ZF-.Iii	"G776G#V,ryy69JI/VVD[[F {{aEMM11SZ?v~~!#&,,/F[[&F{{aMQ 	U` Ls   R(R;)Rc          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r-   rQ  r   r/   r  r  zset[int]r  r   r2   r  r4   )r5   s   "r6   r7   r7     s;     F FF&F4<FJOFFr9   c                  aa \        V P                  \        4      '       g   Q h\        VRR7      p. pVP	                  4        EFu  p\        V P                  4      ^8X  d   V P                  RR7      pM\        V4      ^8X  d   V3p\        V4      o\        ;QJ d5    . VV3R l\        V P                  P                  4       4       F  NK  	  5M.! VV3R l\        V P                  P                  4       4       4      pV P                  RV3,          p\        V4      V P                  P                  8  d"   VP                  P                  V4      Vn        MMVP                  ^8X  d=   VP                  ^8X  d	   ^ Vn        M#\        \        VP                  4      4      Vn        VP!                  V4       EKx  	  \        V4      ^ 8  d!   V P"                  '       g   \%        VRR7      p	Mq\        V4      V P                  P                  8  d+   V P                  P                  V4      P	                  4       p
M^ .p
\'        WP(                  P*                  R7      p	\        V4      V P                  P                  8  dS   V P                  P                  V4      P	                  4       pV	P                  P-                  V4      '       g	   W,          p	V	# )	a  Reshape the data of a frame for stack.

This function takes care of most of the work that stack needs to do. Caller
will sort the result once the appropriate index is set.

Parameters
----------
frame: DataFrame
    DataFrame that is to be stacked.
level: list of ints.
    Levels of the columns to stack.
set_levels: set of ints.
    Same as level, but as a set.
stack_cols: Index.
    Columns of the result when the DataFrame is stacked.

Returns
-------
The data of behind the stacked DataFrame.
T)reverseFr  c              3  ^   <"   T F"  pVS9   d   \        S4      M
\        R 4      x  K$  	  R # 5ir>   )nextr  )r@   r  genr  s   & r6   rB    stack_reshape.<locals>.<genexpr>D  s+      #5A *_S	%+=5s   *-r   )ignore_index)r   r   )r   r   r   sortedr   rn   r   iterrr   r  r  r  rN  r   r   r   r   r   r   r   r   r   r  )rQ  r/   r  r  drop_levnumsbufr  r  column_indexerr   r0  r  r  s   &&f&        @r6   r  r    s   0 emmZ0000%.L C  "u}}"::5:)D 5zQfs)C"U #u}}445#UU #u}}445# N 99Q./Du:---<<;;LIDL1$yyA~	,S->?

4+ #. 3x!|EKKK$/ u:-----;;LIPPRK#K;mm6I6IJ
5zEMM)))--;;LIPPR~~$$_55,FMr9   )NT)..)rG   TT)TT)T
__future__r   r|  typingr   r   r   r^   numpyrX   pandas._config.configr   pandas._libs.reshape_libsr   r   pandas.errorsr   r	   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   r   pandas.core.algorithmscore
algorithmsr   r   r   pandas.core.arrays._mixinsr   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+   r1  r   r<  r@  r>  rs  r  r\  rd  r  r  r4   r9   r6   <module>r     s   "  
   , ) ) 3 4  5
 ' & C B C ' 
 . %    25~
 ~
B^B 
 S 
 S 
 

!TH
"$NNBb"J6AH"JOdFr9   