Ë
    AúYjº�  ã                  ó°  — d dl mZ d dlZd dlmZmZmZ d dlZd dl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mZ d d	lmZmZmZmZ d d
lm Z  d dl!m"Z"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l0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z? erd dl@mAZAmBZBmCZC d dlDmEZE d dlFmGZG  G d„ d«      ZH	 d'	 	 	 d(d„ZIed)d*d„«       ZJe	 d)	 	 	 	 	 d+d„«       ZJ	 d'	 	 	 	 	 d+d„ZJ	 d'	 	 	 	 	 d,d„ZK	 	 	 	 	 	 d-d„ZL	 d.	 	 	 	 	 	 	 d/d „ZMd0d1d!„ZNd2d"„ZO	 d.	 	 	 	 	 	 	 	 	 d3d#„ZP	 	 	 	 	 	 	 	 d4d$„ZQd5d%„ZR	 	 	 	 	 	 	 	 	 	 d6d&„ZSy)7é    )Ú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                  óÂ   — e Zd ZdZ	 d	 	 	 	 	 	 	 dd„Ze	 	 dd„«       Zedd„«       Zdd„Zd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                óV  — || _         || _        |j                  «       | _        | j                  j	                  |«      | _        d| j                  j                  | j
                     v | _        | j                  xr | j                  }|rdnd| _        t        | j                  j                  «      | _        t        | j                  j                  «      | _        | j                  j                  | j
                  «      | _        | j                  j                  | j
                  «      | _        |j                  | j
                     | _        d| _        | j                  s t'        | j                  j                  | j
                     «      }| j                  r(|dk(  }||    }t)        j*                  |«      d   | _        | j                   j-                  |«      | _        | j"                  j-                  |«      | _        t/        d«      r�t1        d„ | j                  D «       «      }| j                   j2                  }	||	z  }
|
t)        j4                  t(        j6                  «      j0                  kD  r(t9        j:                  d|
› d�t<        t?        «       ¬«       | jA                  «        y )	Néÿÿÿÿé   r   Úperformance_warningsc              3  ó4   K  — | ]  }|j                   –— Œ y ­w©N)Úsize)Ú.0Úindex_levels     úf/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/pandas/core/reshape/reshape.pyú	<genexpr>z&_Unstacker.__init__.<locals>.<genexpr>¢   s   è ø€ ÒU°˜;×+Õ+ÑUùs   ‚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Ú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   Úmaxr2   ÚiinfoÚint32ÚwarningsÚwarnr	   r   Ú_make_selectors)Úselfr<   r>   r9   r:   Úshould_liftÚunique_codesÚnan_maskÚnum_rowsÚnum_columnsÚ	num_cellss              r5   Ú__init__z_Unstacker.__init__y   s  € ð 'ˆÔØˆŒ	à×/Ñ/Ó1ˆŒ
à—Z‘Z×1Ñ1°%Ó8ˆŒ
ð ˜TŸZ™Z×-Ñ-¨d¯j©jÑ9Ð9ˆŒØ—l‘lÒ0 t§y¡yˆÙ$‘A¨!ˆŒ	ô !% T§Z¡Z×%6Ñ%6Ó 7ˆÔÜ# D§J¡J×$4Ñ$4Ó5ˆÔà ×0Ñ0×4Ñ4°T·Z±ZÓ@ˆÔØ!×2Ñ2×6Ñ6°t·z±zÓBˆÔØ"'§,¡,¨t¯z©zÑ":ˆÔØ%'ˆÔØ�yŠyÜ'-¨d¯j©j×.>Ñ.>¸t¿z¹zÑ.JÓ'KˆLØ�|Š|à'¨2Ñ-�à+¨X¨IÑ6�Ü(*¯©°xÓ(@ÀÑ(C�Ô%à!%×!3Ñ!3×!8Ñ!8¸Ó!FˆDÔØ&*×&=Ñ&=×&BÑ&BÀ<Ó&PˆDÔ#äÐ,Ô-ô
 ÑU¸t×?TÑ?TÔUÓUˆHØ×,Ñ,×1Ñ1ˆKð ! ;Ñ.ˆIØœ2Ÿ8™8¤B§H¡HÓ-×1Ñ1Ò1Ü—‘Ø;¸I¸;ð G6ð 7ä&Ü/Ó1õ	ð 	×ÑÕó    c                ó¶  — | j                   }t        | j                  j                  «      }| j                  s|D �cg c]  }t        |«      d   ‘Œ }}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 c c}w )Nr   r.   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr1   ©Úlen©r3   Úxs     r5   r6   z2_Unstacker._indexer_and_to_sort.<locals>.<genexpr>Á   s   è ø€ ÒK ”c˜!—fÑKùó   ‚)r>   rB   r<   r?   r:   r   rC   Útupler"   ra   r$   )rU   Úvr?   ÚcodeÚlevsÚto_sortÚsizesÚ
comp_indexÚobs_idsÚngroupsÚindexers              r5   Ú_indexer_and_to_sortz_Unstacker._indexer_and_to_sort²   sã   € ð �J‰Jˆä�T—Z‘Z×%Ñ%Ó&ˆØ�yŠyà49Ö:¨D”Y˜t“_ QÓ'Ð:ˆEÐ:Ü�D—J‘J×%Ñ%Ó&ˆØ˜˜�)˜e A¨¡E G˜nÑ,°°a±¨zÑ9ˆÜÑK d¨2¨A h°°a¸!±e°g°Ñ&>À$ÀqÁ'ÀÑ&JÔKÓKˆä0°¸%Ó@Ñˆ
�GÜ�g“,ˆä(¨°WÓ=ˆØ˜ÐÐùò ;s   ¼Cc                ó„   — | j                   \  }}| j                  r|D �cg c]  }|j                  |«      ‘Œ c}S |S c c}w r1   )ro   r:   rN   )rU   rn   ri   Úlines       r5   Úsorted_labelsz_Unstacker.sorted_labelsÉ   s=   € à×4Ñ4Ñˆ�Ø�9Š9Ø3:Ö;¨4�D—I‘I˜gÕ&Ò;Ð;Øˆùò <s    =c                óT   — | j                   \  }}t        j                  ||d¬«      }|S )Nr   )Úaxis)ro   ÚalgosÚtake_nd)rU   Úvaluesrn   Ú_Úsorted_valuess        r5   Ú_make_sorted_valuesz_Unstacker._make_sorted_valuesÐ   s)   € Ø×.Ñ.‰
ˆ�ÜŸ™ f¨g¸AÔ>ˆØÐr]   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        j2                  |d¬«      d   «      | _        y )Nr-   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr1   r`   rb   s     r5   r6   z-_Unstacker._make_selectors.<locals>.<genexpr>Ú   s   è ø€ Ò7 qœC ŸFÑ7ùrd   ©ÚdtypeTz0Index contains duplicate entries, cannot reshape)Úreturn_indexr.   )rD   rr   re   r"   ra   r   r<   Úlevshaper>   r@   Ú
full_shaperA   rL   ÚzerosÚprodÚboolÚputÚsumÚ
ValueErrorÚgroup_indexÚmaskr:   ÚsearchsortedÚarangeÚ
compressorr   )
rU   Ú
new_levelsÚremaining_labelsÚlevel_sizesrk   rl   rm   ÚstrideÚselectorr‰   s
             r5   rT   z_Unstacker._make_selectorsÕ   sD  € Ø×*Ñ*ˆ
ð  ×-Ñ-¨c¨rÐ2ÐÜÑ7¨JÔ7Ó7ˆä0Ð1AÀ;ÓOÑˆ
�GÜ�g“,ˆä(¨Ó4ˆ
Ø—‘×$Ñ$ T§Z¡ZÑ0°4·<±<Ñ?ˆØ! 6˜/ˆŒà×%Ñ% bÑ)¨F°ZÑ,?Ñ?À$Ç)Á)ÑKˆÜ�x‰xœŸ™ §¡Ó0¼Ô=ˆØ�‰�˜4Ô à�8‰8‹:œ˜DŸJ™J›Ò'ÜÐOÓPÐPà%ˆÔØˆŒ	Ø�9Š9Ø(×5Ñ5´b·i±iÀÓ6HÓIˆD�Oä Ÿg™g¤b§i¡i°
ÈÔ&NÈqÑ&QÓRˆD�Or]   c                óH   — t        | j                  j                  «       «      S r1   )r„   r‰   Úall)rU   s    r5   Úmask_allz_Unstacker.mask_allñ   s   € ä�D—I‘I—M‘M“OÓ$Ð$r]   c                óÄ   — t        j                  t        | j                  «      t         j                  ¬«      }| j                  |d¬«      \  }}||j                  d«      fS )Nr}   r-   ©Ú
fill_valuer   )rL   r‹   ra   r<   ÚintpÚget_new_valuesÚany)rU   Ú	dummy_arrÚ
new_valuesr‰   s       r5   Úarange_resultz_Unstacker.arange_resultõ   sM   € ô —I‘Iœc $§*¡*›o´R·W±WÔ=ˆ	Ø×.Ñ.¨yÀRÐ.ÓHÑˆ
�DØ˜4Ÿ8™8 A›;Ð&Ð&r]   c                óˆ  — |j                   }|j                  dk(  r|d d …t        j                  f   }|€|j                  d   dk7  rt        d«      ‚| j                  ||«      \  }}| j                  |«      }| j                  }| j                  ||||j                  d¬«      }	t        |t        j                  «      r|j                  |j                  }}
nBt        |t        «      r-|j                  j                  |j                  j                  }}
nd\  }
}|
|u r%|	j                   j#                  |j                   «       |	S )Nr.   z-must pass column labels for multi-column dataF)r<   Úcolumnsr~   Úcopy)r.   é   )Ú_valuesÚndimrL   ÚnewaxisÚshaper‡   r™   Úget_new_columnsÚ	new_indexr9   r~   Ú
isinstanceÚndarrayÚbaser   Ú_ndarrayÚ_mgrÚadd_references)rU   ÚobjÚvalue_columnsr—   rw   rœ   rx   rŸ   r<   Úresultrª   Únew_bases               r5   Ú
get_resultz_Unstacker.get_resultý   s  € Ø—‘ˆØ�;‰;˜!ÒØšAœrŸz™z˜MÑ*ˆFàÐ  V§\¡\°!¡_¸Ò%9ÜÐLÓMÐMà×+Ñ+¨F°JÓ?‰ˆ
�AØ×&Ñ& }Ó5ˆØ—‘ˆà×!Ñ!Ø˜e¨W¸J×<LÑ<LÐSXð "ó 
ˆô �fœbŸj™jÔ)Ø#Ÿ[™[¨*¯/©/�(‰DÜ˜Ô ;Ô<Ø#Ÿ_™_×1Ñ1°:×3FÑ3F×3KÑ3K�(‰Dà!‰NˆD�(Ø�8Ñà�K‰K×&Ñ& s§x¡xÔ0Øˆr]   Nc                óv  — |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                  }t        |t        «      r+|j!                  «       }|j#                  ||¬«      }|
sª||d d  n¤|
sx|}t%        ||«      \  }}||k7  rb|j&                  dvr%t)        j*                  dt,        t/        «       ¬«       n/t1        |«      s$t)        j*                  dt,        t/        «       ¬«       t        j2                  ||¬«      }|
s|j5                  |«       |j6                  }t        j8                  |t        ¬«      }t;        |j                  «      r#|j=                  d«      }|j=                  d«      }n|j?                  |d¬	«      }tA        jB                  ||	j=                  d
«      |||||j=                  d
«      «       t;        |j                  «      r7|j=                  d«      }tE        |«      }|j=                  |j                  «      }||fS )Nr.   r¡   r}   ÚiubznUsing a fill_value that cannot be held in the existing dtype is deprecated and will raise in a future version.r7   Úi8F©r    Úu1zM8[ns])#r£   rL   r¤   rz   r�   r¥   r‰   r”   ra   ÚreshapeÚswapaxesÚonesr„   r~   r¨   r   Úconstruct_array_typeÚ_emptyr   ÚkindrR   rS   r   r   r   ÚemptyÚfillÚnamer‚   r   ÚviewÚastypeÚ
libreshapeÚunstackr   )rU   rw   r—   ry   ÚlengthÚwidthr�   Úresult_widthÚresult_shaper‰   r”   rœ   Únew_maskr~   ÚclsÚ	old_dtyperÀ   s                    r5   r™   z_Unstacker.get_new_values  sk  € Ø�;‰;˜!ÒØšAœrŸz™z˜MÑ*ˆFà×0Ñ0°Ó8ˆð Ÿ™‰ˆ�Ø—‘˜a‘ˆØ˜v‘~ˆØ Ð-ˆØ�y‰yˆØ—=‘=ˆñ œ˜Fœð
 ×%Ñ% f¨e°VÓ<ß‘˜!˜Q“ß‘˜Ó&ð ô
 —w‘w˜|´4Ô8ˆHØ˜xÐ'Ð'à—‘ˆä�eœ^Ô,ð ×,Ñ,Ó.ˆCØŸ™ L¸˜Ó>ˆJÙØ *�
™1‘áØ!�	Ü$1°%¸Ó$DÑ!��zØ Ò%Ø —~‘~¨UÑ2Ü Ÿ™ðVä*Ü'7Ó'9öô " *Ô-Ü Ÿ™ðVä*Ü'7Ó'9õô Ÿ™ ,°eÔ<ˆJÙØ—‘ 
Ô+à�z‰zˆÜ—8‘8˜L´Ô5ˆô
 ˜vŸ|™|Ô,Ø)×.Ñ.¨tÓ4ˆMØ#Ÿ™¨Ó.‰Jà)×0Ñ0°¸EÐ0ÓBˆMô 	×ÑØØ�I‰I�d‹OØØØØØ�M‰M˜$Óô	
ô ˜vŸ|™|Ô,ð $Ÿ™¨Ó2ˆJÜ7¸
ÓCˆJØ#Ÿ™¨¯©Ó6ˆJà˜8Ð#Ð#r]   c                ód  — |€~| j                   s&| 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 )N©rÀ   r   )ÚitemF©rC   r?   rE   Úverify_integrity)r@   rI   Ú_renamerH   ÚinsertÚ	_na_valueÚrenamera   rL   Úrepeatr‹   r¨   r   rC   rJ   rE   r?   rN   rÀ   Ú	_repeaterÚappendÚtile)rU   r¯   Úlevr�   rÆ   Ú
propagatorr�   Ú	new_namesÚlabÚ	new_codesÚrepeaters              r5   r¦   z_Unstacker.get_new_columnsv  s|  € ØÐ Ø—<’<Ø×)Ñ)×1Ñ1°t×7HÑ7HÐ1ÓIÐIà×$Ñ$×+Ñ+¨A°D×4FÑ4F×4PÑ4PÐ+ÓQˆCØ—:‘:˜d×/Ñ/Ó0Ð0ä�T×'Ñ'Ó(¨4¯<©<Ñ7ˆÜ�MÓ"ˆÜ—Y‘YœrŸy™y¨Ó/°Ó8ˆ
ô �m¤ZÔ0Ø&×-Ñ-°×1HÑ1HÐ0JÑJˆJØ%×+Ñ+¨t×/@Ñ/@Ð.BÑBˆIà9F×9LÑ9LÖM°#˜Ÿ™ *Õ-ÐMˆIÑMð Ø×'Ñ'ðˆJð '×+Ñ+¨T×->Ñ->Ð?ˆIØ#˜ˆIà—>‘>ˆð 	×ÑœŸ™ ¨5Ó1Ô2ÜØ Y°iÐRWô
ð 	
ùò Ns   Ä)F-c                ó(  — t        | j                  «      t        | j                  «      k7  rJ| j                  j                  | j                  «      }| j                  rt        j                  |dd«      }|S t        | j                  «      | j                  z   }t        j                  |«      | j                  z
  }| j                  rL| j                  s@| j                  dkD  sJ d«       ‚d|| j                  <   || j                  dz   d xxx dz  ccc |S )Nr   r-   z+`unique_nan_index` not properly initializedr.   )ra   rJ   rI   Úget_indexerr@   rL   rÒ   r‹   rA   r:   rK   )rU   rÞ   r�   s      r5   rÖ   z_Unstacker._repeater™  sð   € ô ˆt×&Ñ&Ó'¬3¨t×/AÑ/AÓ+BÒBà×.Ñ.×:Ñ:¸4×;MÑ;MÓNˆHØ�|Š|äŸ9™9 X¨q°"Ó5�ð ˆô ˜×+Ñ+Ó,¨t¯|©|Ñ;ˆFÜ—y‘y Ó(¨4¯9©9Ñ4ˆHØ�|Š| D§I¢IØ×,Ñ,¨rÒ1ð ØAóÐ1ð 35�˜×.Ñ.Ñ/à˜×.Ñ.°Ñ2Ð4Ó5¸Ñ:Ó5àˆr]   c                ón  — | j                   r| j                  d d }n9| j                  }t        | j                  j
                  «      }|d | ||dz   d  z   }|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Ï   )r:   rr   r>   rB   r<   r?   rN   rŒ   ra   rD   rš   rÒ   rÓ   rÔ   rF   r   )rU   Úlabelsrf   r?   rÜ   Úresult_codesr>   Úlevel_codess           r5   r§   z_Unstacker.new_index±  s  € ð �9Š9Ø×'Ñ'¨¨Ð,‰Fà—
‘
ˆAÜ˜Ÿ™×)Ñ)Ó*ˆEØ˜2˜A�Y  q¨1¡u w Ñ/ˆFØ=CÖD°c˜Ÿ™ §¡Õ1ÐDˆÐDô ˆt×$Ñ$Ó%¨Ò*Ø!%×!6Ñ!6°qÑ!9¸<È¹?�;ˆEØ˜rÑ!×&Ñ&Ô(ØŸ™¤S¨£Z°·±ÓA�Ø—:‘:˜kÓ*×1Ñ1°$×2FÑ2FÀqÑ2IÓJÐJäØ×(Ñ(ØØ×&Ñ&Ø"ô	
ð 	
ùò Es   Á"D2)T)r<   r   r>   r&   r:   r„   ÚreturnÚNone)rå   z-tuple[npt.NDArray[np.intp], list[np.ndarray]])rå   zlist[np.ndarray])rw   ú
np.ndarrayrå   rç   )rå   ræ   )rå   r„   )rå   z2tuple[npt.NDArray[np.intp], npt.NDArray[np.bool_]])rå   r   r1   )r¯   zIndex | None)rå   rç   )rå   úMultiIndex | Index)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r\   r
   ro   rr   rz   rT   r”   r�   r²   r™   r¦   rÖ   r§   © r]   r5   r+   r+   J   sÔ   „ ñ,ð^ JNð7Øð7Ø(-ð7ØBFð7à	ó7ðr ð ð
ò ó ð ð, òó ðóó
Sð8 ò%ó ð%ð ò'ó ð'óó4]$ó~!
ðF òó ðð. ò
ó ñ
r]   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d¬«      }nt        g |
¢|‘g |¢|‘g |¢d‘d¬	«      }t        | t         «      r5| j#                  d¬
«      }||_        |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|¢}| j&                  j*                  g|	¢}‰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r1   r`   rb   s     r5   r6   z$_unstack_multiple.<locals>.<genexpr>å  s   è ø€ Ò*˜Q”#�a—&Ñ*ùrd   F)r:   Úxnull©r:   )rð   Ú__placeholder__)rÀ   r    rÏ   ©Údeep©r—   r:   r.   c              3  óZ   •K  — | ]"  }|j                  ‰j                  d    «      –— Œ$ y­w)r-   N)rN   r?   )r3   ÚrecÚunstcolss     €r5   r6   z$_unstack_multiple.<locals>.<genexpr>  s#   øè ø€ ÒN¸#˜Ÿ™ (§.¡.°Ñ"4×5ÑNùs   ƒ(+)ra   r<   r   r   rE   r=   ÚrangeÚnlevelsrC   r?   re   r#   r    r!   r   r¨   r   r    rÄ   rŸ   rG   rÀ   Úextend)ÚdataÚclocsr—   r:   r<   ÚiÚrlocsÚclevelsÚccodesÚcnamesÚrlevelsÚrcodesÚrnamesr¥   rˆ   Úcomp_idsrl   Úrecons_codesÚdummy_indexÚdummyÚ	unstackedr�   rÛ   rÝ   r°   Úvalrf   Údummy_dfÚnew_columnsrø   s                                @r5   Ú_unstack_multipler  Ë  s  ø€ ô ˆ5ƒz�Q‚Øˆð �J‰J€EÜ”˜UÓ#€Eð �—‘ÑØ�ˆØ16Ö7¨AˆU×$Ñ$ QÕ'Ð7€EÐ7ä˜eŸm™mÓ,Ö?�1°¸²ŠQÐ?€EÐ?à(-Ö. 1ˆu�|‰|˜A‹Ð.€GÐ.Ø&+Ö, ˆe�k‰k˜!‹nÐ,€FÐ,Ø&+Ö, ˆe�k‰k˜!‹nÐ,€FÐ,Ø(-Ö. 1ˆu�|‰|˜A‹Ð.€GÐ.Ø&+Ö, ˆe�k‰k˜!‹nÐ,€FÐ,Ø&+Ö, ˆe�k‰k˜!‹nÐ,€FÐ,äÑ* 'Ô*Ó*€EÜ! &¨%°eÀ5ÔI€Kä,¨[¸uÔEÑ€HˆgÜ'¨°'¸5À&ÐPUÔV€Láä˜GÐ*;À%ÔH‰ä Ø&�WÐ&˜gÐ&Ø%�FÐ%˜HÐ%Ø.�FÐ.Ð-Ð.Ø"ô	
ˆô �$œÔØ—	‘	˜u�	Ó%ˆØ!ˆŒà—M‘MÐ"3À
ÐQU�MÓVˆ	Øˆ
Øˆ	Ø Š	ä�d—l‘l¤JÔ/ØˆFÙØ—i‘i “l�ð  Ÿ™Ø J°Tð (ó �ð ;@Ö@°Q˜a #šg™¨1¨q©5Ñ0Ð@�Ð@ò ð ˆMð —9‘9 %�9Ó(ˆØ$ˆŒð ×$Ñ$Ø¨*¸4ð %ó 
ˆ	ô �i¤Ô(Ø —‘‰Hà ×(Ñ(ˆHÜ˜(¤JÔ/Ð/Ð/Ø—o‘o aÑ(Ð3¨7Ð3ˆ
Ø—\‘\×&Ñ&Ð0¨Ð0ˆ	à—^‘^ AÑ&Ð'ˆ	Ø×ÑÓNÀÔNÔNäØ °)Èeô€Kô �)œVÔ$Ø%ˆ	Œð Ðð (ˆ	ÔàÐùò_ 8ùâ?ùâ.ùÚ,ùÚ,ùÚ.ùÚ,ùÚ,ùòJ As<   ÁL-Á4	L2Á>L2ÂL7Â$L<Ã MÃMÃ8MÄMÈ%Mc                 ó   — y r1   rí   ©r®   r>   r—   r:   s       r5   rÄ   rÄ   ,  s   € ØPSr]   c                 ó   — y r1   rí   r  s       r5   rÄ   rÄ   0  s   € ð r]   c                óœ  — t        |t        t        f«      r"t        |«      dk7  rt	        | |||¬«      S |d   }t        |«      s |dk(  s| j                  j                  |«       t        | t        «      rCt        | j                  t        «      rt        | |||¬«      S | j                  j                  «       S t        | j                  t        «      s"t        dt        | j                  «      › d�«      ‚t        | j                   «      rt#        | |||¬«      S t%        | j                  || j&                  |¬«      }|j)                  | d |¬	«      S )
Nr.   rõ   r   rò   z'index must be a MultiIndex to unstack, z was passedrñ   ©r>   r9   r:   ©r¯   r—   )r¨   re   rB   ra   r  r   r<   r=   r   r   Ú_unstack_frameÚTÚstackr‡   Útyper   r~   Ú_unstack_extension_seriesr+   Ú_constructor_expanddimr²   )r®   r>   r—   r:   Ú	unstackers        r5   rÄ   rÄ   6  s  € ô �%œ%¤˜Ô'Üˆu‹:˜Š?ô % S¨%¸JÈTÔRÐRà˜!‘HˆEä�eÔ UÐ.?Ò%?à�	‰	×#Ñ# EÔ*ä�#”yÔ!Ü�c—i‘i¤Ô,Ü! # u¸È$ÔOÐOà—5‘5—;‘;“=Ð Ü˜Ÿ	™	¤:Ô.ô Ø5´d¸3¿9¹9³oÐ5FÀkÐRó
ð 	
ô ˜sŸy™yÔ)Ü,¨S°%¸È$ÔOÐOÜØ�I‰I˜U°×0JÑ0JÐQUô
ˆ	ð ×#Ñ# C°tÈ
Ð#ÓSÐSr]   c                óH  — t        | j                  t        «      sJ ‚t        | j                  || j                  |¬«      }| j
                  s:| j                  j                  ||¬«      }| j                  ||j                  ¬«      S |j                  | | j                  |¬«      S )Nr  r–   )Úaxesr  )r¨   r<   r   r+   Ú_constructorÚ_can_fast_transposer¬   rÄ   Ú_constructor_from_mgrr  r²   rŸ   )r®   r>   r—   r:   r  Úmgrs         r5   r  r  Z  s–   € ô �c—i‘i¤Ô,Ð,Ð,ÜØ�	‰	˜¨C×,<Ñ,<À4ô€Ið ×"Ò"Ø�h‰h×Ñ˜y°ZÐÓ@ˆØ×(Ñ(¨°3·8±8Ð(Ó<Ð<à×#Ñ#Ø˜sŸ{™{°zð $ó 
ð 	
r]   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.
    )r>   r—   r:   r   )Úto_framerÄ   rŸ   Ú_drop_level_numbers)Úseriesr>   r—   r:   Údfr°   s         r5   r  r  k  sE   € ð8 
�‰Ó	€BØ�Z‰Z˜e°
ÀˆZÓF€Fð —^‘^×7Ñ7¸¸Ó<€F„Nð €Mr]   c                ó<  — d„ }| j                   \  }}| j                  j                  |«      }t        | j                  t        «      rt        | |||¬«      S t        | j                  t        «      rþt        | j                  j                  «      }| j                  j                  D �	cg c]  }	|	j                  |«      ‘Œ }
}	 || j                  «      \  }}|j                  |«       |
j                  t        j                  ||«      j                  «       «       t        | j                  j                  «      }|j                  | j                  j                   «       t	        ||
|d¬«      }nŸt#        t%        || j                  | j                  f«      ddiŽ\  }\  }}|j                  |«      t        j                  ||«      j                  «       f}t	        ||| j                  j                   | j                  j                   gd¬«      }| j&                  sµ| j(                  r©t        | 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 r1   )Ú	is_uniquerL   r‹   ra   r   )r<   r?   Ú
categoriess      r5   Ústack_factorizezstack.<locals>.stack_factorizež  s;   € Ø�?Š?Øœ"Ÿ)™)¤C¨£JÓ/Ð/Ð/Ü3°EÓ:ÑˆˆzØ˜5Ð Ð r]   )Ú	level_numÚdropnar:   FrÏ   ÚstrictTr   ©r<   )r¥   rŸ   r=   r¨   r   Ú_stack_multi_columnsr<   rB   rC   r?   rÕ   r×   rL   rØ   ÚravelrE   rÀ   ÚzipÚmapr¾   Ú_is_homogeneous_typeÚdtypesr¢   r   r»   Ú_concat_same_typeÚitemsÚ"_reorder_for_extension_array_stackr   Ú_constructor_sliced)Úframer>   r-  r:   r+  ÚNÚKr,  r�   rÜ   rÝ   ÚclevÚclabrÛ   r§   rC   Úilabr?   r5  r~   Úarrrx   Úcolrœ   r‰   s                            r5   r  r  ’  s•  € ò!ð �;‰;�D€A€qð —‘×/Ñ/°Ó6€Iä�%—-‘-¤Ô,Ü#Ø˜Y¨v¸Dô
ð 	
ô 
�E—K‘K¤Ô	,Ü˜%Ÿ+™+×,Ñ,Ó-ˆ
Ø.3¯k©k×.?Ñ.?Ö@ s�S—Z‘Z •]Ð@ˆ	Ð@á$ U§]¡]Ó3‰
ˆˆdØ×Ñ˜$ÔØ×ÑœŸ™  qÓ)×/Ñ/Ó1Ô2ä˜Ÿ™×*Ñ*Ó+ˆ	Ø×Ñ˜Ÿ™×+Ñ+Ô,ÜØ Y°iÐRWô
‰	ô  #Ü� 5§;¡;°·±Ð">Ó?ð 
ØHLñ 
Ñˆ‘��tð —‘˜A“¤§¡¨¨aÓ 0× 6Ñ 6Ó 8Ð8ˆÜØØØ—;‘;×#Ñ# U§]¡]×%7Ñ%7Ð8Ø"ô	
ˆ	ð �;Š;˜5×5Ò5ô �e—l‘l×*Ñ*Ó+ˆØ�q‘	ˆä�eœ^Ô,Ø×,Ñ,Ó.ˆCØ×.Ñ.Ø+0¯;©;«=×9¡  C�—“Ó9óˆJô <¸JÈÈ1ÓM‰Jð Ÿ™×,Ñ,Ó.‰Jð —]‘]×(Ñ(Ó*ˆ
áÜ�ZÓ ˆØ Ñ%ˆ
Ø˜d‘Oˆ	à×$Ñ$ Z°yÐ$ÓAÐAùòc AùóB :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r1   )rŸ   rE   )r3   rÙ   r:  s     €r5   r6   z!stack_multiple.<locals>.<genexpr>æ  s    øè ø€ Ò
7¨#ˆ3�%—-‘-×%Ñ%Ô%Ñ
7ùs   ƒ"%)r-  r:   c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr1   )r¨   Úint)r3   rÙ   s     r5   r6   z!stack_multiple.<locals>.<genexpr>î  s   è ø€ Ò3 cŒZ˜œS×!Ñ3ùs   ‚r   r.   zTlevel should contain all level names or all level numbers, not a mixture of the two.)r“   r  rŸ   r=   rG   r‡   )r:  r>   r-  r:   r°   rÙ   rf   s   `      r5   Ústack_multiplerF  ã  sð   ø€ ô Ó
7°Ô
7Ô7ØˆØò 	BˆCô ˜6 3¨v¸DÔA‰Fð	Bð: €Mô/ 
Ñ3¨UÔ3Ô	3ð ˆð BGÖG¸#�—‘×0Ñ0°Õ5ÐGˆÐGáØ—)‘)˜A“,ˆCô ˜6 3¨v¸DÔAˆFð 8=Ö=°!˜!˜sš(‘Q¨¨A©Ñ-Ð=ˆEÐ=ò ð €Mô ð1ó
ð 	
ùò Hùò >s   Á"B7ÂB<c           
     ó.  — t        | j                  «      dk  r,| j                  d   j                  | j                  d   ¬«      S d„ t	        | j                  dd | j
                  dd d¬«      D «       }t	        |d	diŽ}d
„ t        j                  |«      D «       }t	        |d	diŽ}t        j                  t	        || j                  dd d¬«      D ��cg c]"  \  }}d|vrt        ||j                  ¬«      n|‘Œ$ c}}| j                  dd ¬«      S c c}}w )zBCreates a MultiIndex from the first N-1 levels of this MultiIndex.r¡   r   rÍ   c              3  ó`   K  — | ]!  \  }}|D �cg c]  }|d k\  r||   nd‘Œ c}–— Œ# yc c}w ­w)r   Nrí   )r3   rÙ   r?   Úcs       r5   r6   z,_stack_multi_column_index.<locals>.<genexpr>  s9   è ø€ ò áˆC�ð .3Ö3¨�1˜’6ˆˆQŠ˜tÑ	#Ö3ñùÚ3ùs   ‚.Ž)¡.Nr-   T)r.  r.  c              3  ó&   K  — | ]	  \  }}|–— Œ y ­wr1   rí   )r3   Úkeyrx   s      r5   r6   z,_stack_multi_column_index.<locals>.<genexpr>  s   è ø€ ÒA™V˜S !”SÑAùs   ‚r}   ©rE   )ra   rC   rÑ   rE   r2  r?   Ú	itertoolsÚgroupbyr   Úfrom_arraysr   r~   )rŸ   rh   ÚtuplesÚunique_tuplesÚnew_levsÚnew_levrÙ   s          r5   Ú_stack_multi_column_indexrT    s  € ä
ˆ7�>‰>Ó˜aÒØ�~‰~˜aÑ ×(Ñ(¨g¯m©m¸AÑ.>Ð(Ó?Ð?ñä˜gŸn™n¨S¨bÐ1°7·=±=ÀÀ"Ð3EÈdÔSô€Dô �$Ð$˜tÑ$€FÙA¤y×'8Ñ'8¸Ó'@ÔA€MÜ�MÐ/¨$Ñ/€Hô ×!Ñ!ô !$ H¨g¯n©n¸S¸bÐ.AÈ$Ô O÷	
ñ �˜ð 04¸7Ñ/BŒE�' §¡Õ+ÈÑOó	
ð
 �m‰m˜C˜RÐ ôð ùó	
s   Ã'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                  jQ                  d«      }|j%                  |«      }n|j6                  }|jT                  dkD  r|jW                  «       }|||<   �Œú 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`.
        rL  )r,  rŸ   s     r5   Ú_convert_level_numberz3_stack_multi_columns.<locals>._convert_level_number&  s%   € ð ˜Ÿ™Ñ%Ø—=‘= Ñ+Ð+àÐr]   Fró   r.   r   )r>   rt   r-   )rŸ   r¶   rÏ   )r<   rŸ   r“   )rt   Úhow)r,  rE  rŸ   r   )8r    rŸ   r¨   r   rú   rù   Ú	swaplevelÚ_is_lexsortedÚ
sort_indexr   rT  rC   r   r?   rL   r:   rÒ   ra   rN   Úget_locÚKeyErrorr×   ÚsliceÚstopÚstartÚlocÚreindexrw   Úilocr   r5  Útolistr   r»   r6  r7  r¢   rÂ   r¥   r‹   r¸   r  r£   r1  Ú
differencer<   rB   rE   rÕ   r   rÀ   rØ   r  r$  Úequalsr-  ))r:  r,  r-  r:   rW  ÚthisÚmi_colsÚroll_columnsrþ   Úlev1Úlev2Úlevel_to_sortr  Únew_dataÚ
level_valsrä   Úlevel_vals_nanÚlevel_vals_usedÚlevsizeÚ	drop_colsrK  ra  Ú	slice_lenÚchunkÚvalue_sliceÚsubsetr~   rx   rc   r;  r<  Úidxr�   rÛ   rÜ   rÝ   Ú	old_codesÚ
old_levelsr§   r°   Údesired_columnss)                                            r5   r0  r0  #  sÊ  € óð �:‰:˜5ˆ:Ó!€DØ�l‰l€GÜ�gœzÔ*Ð*Ð*ð �G—O‘O aÑ'Ò'àˆÜ�y '§/¡/°AÑ"5Ó6ò 	>ˆAá(¨¨LÓ9ˆDÙ(¨¨Q©°Ó=ˆDØ'×1Ñ1°$¸Ó=‰Lð		>ð
 ".Ð-ˆŒ�wà× Ñ Ô"¡tñ .¨a°Ó9ˆØ�‰ ]¸ˆÓ;ˆØ—,‘,ˆä”:˜wÓ'€GÜ+¨GÓ4€Kð €HØ—‘ Ñ#€JÜ˜Ÿ™ rÑ*Ó+€KÙÜ—g‘g˜kÓ*ˆØ×&Ñ&¤s¨:£¸Ó=€Nä—g‘g˜n¨kÓ:€OÜ�+Ó€GØ€IØó '$ˆð	Ø—,‘,×&Ñ& sÓ+ˆCô ˜#œuÔ%Ü˜C›‰IàŸ™ 3§9¡9Ñ,ˆIà˜ÒØ—H‘HšQ §¡¨SÑ 1Ð1Ñ2ˆEØ*×/Ñ/°·±×0CÑ0CÀBÑ0GÓHˆEŒMØŸ-™-°˜-Ó@×GÑGŠKà—Y‘Yšq #˜vÑ&ˆFÜ$ V§]¡]×%9Ñ%9Ó%;Ó<ˆEÜ˜%¤Ô0ð $×8Ñ8Ó:×LÑLØEKÇ\Á\Ã^×T¹T¸QÀ�Q—Y‘Y×%Ñ% e°%Ð%Õ8ÓTó�ð —|‘|‘��1Ü—i‘i  A¡Ó&×.Ñ.¨q°!Ó4×6Ñ6×>Ñ>¸rÓB�Ø)×.Ñ.¨sÓ3‘à$Ÿm™m�à×Ñ˜aÒà%×+Ñ+Ó-ˆKà#ˆ�‹ðO'$ôR ˆ9ƒ~˜ÒØ!×,Ñ,¨YÓ7ˆäˆD‹	€Aä�$—*‘*œjÔ)Ü˜$Ÿ*™*×+Ñ+Ó,ˆ
Ü˜Ÿ™×)Ñ)Ó*ˆ	Ø48·J±J×4DÑ4DÖE¨S�S—Z‘Z Õ(ÐEˆ	ÑEä 7¸¿
¹
Ó CÑˆ	�:Ø �\ˆ
Ø×%Ñ% gÓ.Ð/ˆ	Ø—Z‘Z—_‘_Ð%ˆ	à×Ñ�jÔ!Ø×Ñ”R—W‘W˜[¨!Ó,Ô-Ø×Ñ�U—]‘]×(Ñ(¨Ñ3Ô4äØ °)Èeô€Ið ×Ñ °	À;ÐÓO€Fà‡}�}×Ñ˜qÒ ØŸ-™-×;Ñ;¸Y¸KÓH×OÑOÓQˆØ�~‰~×$Ñ$ _Ô5Ø˜OÑ,ˆFñ Ø—‘ A¨5�Ó1ˆà€MøôS ò 	Ø×Ñ˜SÔ!Úð	üó0 Uùò, Fs   Å1UÊ#'U<ÐVÕU9Õ8U9c                ó¦   — t        j                  ||z  «      j                  ||«      j                  j                  d«      }| 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-   )rL   r‹   r¸   r  rN   )r@  Ún_rowsÚ	n_columnsrw  s       r5   r8  r8  §  sD   € ôB �)‰)�F˜YÑ&Ó
'×
/Ñ
/°	¸6Ó
B×
DÑ
D×
LÑ
LÈRÓ
P€CØ�8‰8�C‹=Ðr]   c           	     ól  — | j                   j                  «       t        | j                   «      k7  rt        d«      ‚t        |«      s| S t	        |«      }| j                   j                  t        | j                   j                  dz
  dd«      D �cg c]	  }||vsŒ|‘Œ c}«      }t        | j                   t        «      syt        | j                   «      dkD  r0| j                  r$| j                  j                  d   j                  }nd }| j                  | j                  j!                  dd¬«      |¬«      }nt#        | |||«      }| j$                  rdnt        |«      t        | «      z  }t        | j&                  t        «      rL| j&                  j(                  }t+        t-        j.                  | j&                  j0                  d|f«      «      }	n>t3        | j&                  d¬	«      \  }
}|g}t+        t-        j.                  |
d|f«      «      }	t        |«      dkD  r9t-        j4                  |«      }t        |t        «      sJ ‚|j7                  |«      }n|}|j9                  «       }t        |t        «      r'|j(                  }|j;                  «       j0                  }n|g}t3        |d¬	«      d   g}|D �
cg c]!  }
t-        j<                  |
t        | «      «      ‘Œ# }}
t        ||z   |	|z   | j&                  j>                  t+        |j>                  «      z   d¬
«      |_        t        | «      }t        |«      }t-        j@                  |«      }t-        j.                  ||z  |«      t-        j<                  t-        j@                  |«      |«      z   }|jC                  |«      }|jD                  dk(  rd| j                   j                  t        |«      k(  rBt        |j                   «      dk(  rtG        |j&                  ¬«      }n|jH                  d d …df   }|jD                  dk(  rd |_%        |S c c}w c c}
w )Nz8Columns with duplicate values are not supported in stackr.   r-   r   ÚF)Úorderr}   F)Úuse_na_sentinelrÏ   r¡   r/  )&rŸ   Únuniquera   r‡   Úsetr$  rù   rú   r¨   r   r4  r¬   Úblocksr~   r9  r¢   r¸   Ústack_reshaper¾   r<   rC   rB   rL   rØ   r?   r   ÚargsortÚ_reorder_ilevelsr   Údrop_duplicatesrÕ   rE   r‹   rN   r£   r   rc  rÀ   )r:  r>   Ú
set_levelsÚkÚ
stack_colsr~   r°   ÚratioÚindex_levelsÚindex_codesr?   ÚuniquesÚsorterÚordered_stack_colsÚordered_stack_cols_uniqueÚcolumn_levelsÚcolumn_codesÚlen_dfÚ	n_uniquesrn   Úidxss                        r5   Ústack_v3r˜  Ì  sq  € Ø‡}�}×ÑÓ¤# e§m¡mÓ"4Ò4ÜÐSÓTÐTÜˆuŒ:ØˆÜ�U“€JØ—‘×2Ñ2Ü˜%Ÿ-™-×/Ñ/°!Ñ3°R¸Ó<ÖTˆqÀÈÒ@SŠÒTó€Jô
 �e—m‘m¤ZÔ0ô ˆu�}‰}Ó Ò! e×&@Ò&@Ø—J‘J×%Ñ% aÑ(×.Ñ.‰EàˆEØ×*Ñ*Ø�M‰M×!Ñ! "¨CÐ!Ó0¸ð +ó 
‰ô ˜u e¨Z¸ÓDˆð —’‰A¤# f£+´°U³Ñ";€Eô �%—+‘+œzÔ*Ø—{‘{×)Ñ)ˆÜœ2Ÿ7™7 5§;¡;×#4Ñ#4°q¸%°jÓAÓB‰ä" 5§;¡;ÀÔF‰ˆˆwØ�yˆÜœ2Ÿ7™7 5¨1¨e¨*Ó5Ó6ˆä
ˆ5ƒz�A‚~ä—‘˜EÓ"ˆÜ˜*¤jÔ1Ð1Ð1Ø'×8Ñ8¸Ó@Ñà'ÐØ 2× 9Ñ 9Ó ;ÐÜÐ$¤jÔ1Ø*×1Ñ1ˆØ)×9Ñ9Ó;×AÑA‰à2Ð3ˆÜ!Ð";ÈUÔSÐTUÑVÐWˆð ?KÖK°U”B—I‘I˜e¤S¨£ZÕ0ÐK€LÐKÜØ˜mÑ+Ø˜LÑ(Ø�k‰k×Ñ¤$Ð'9×'?Ñ'?Ó"@Ñ@Øô	€F„Lô �‹Z€FÜÐ-Ó.€IÜ�i‰i˜	Ó"€GÜ�7‰7�6˜GÑ# VÓ,¬r¯y©y¼¿¹À6Ó9JÈIÓ/VÑV€DØ�[‰[˜Ó€Fð ‡{�{�aÒ˜EŸM™M×1Ñ1´S¸³ZÒ?Üˆv�~‰~Ó !Ò#Ü &§,¡,Ô/‰Fà—[‘[¢ A Ñ&ˆFØ‡{�{�aÒØˆŒà€MùòQ 	Uùò` Ls   Â	P,ÂP,Ê6&P1c                óæ  ‡‡— t        | j                  t        «      sJ ‚t        |d¬«      }g }|j	                  «       D �],  }t        | j                  «      dk(  r| j                  d¬«      }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%        |d¬	«      }	npt        |«      | j                  j                  k  r*| j                  j                  |«      j	                  «       }
ndg}
t'        |
| j(                  j*                  ¬
«      }	t        |«      | j                  j                  k  rI| j                  j                  |«      j	                  «       }|	j                  j-                  |«      s|	|   }	|	S )a3  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)Úreverser.   Fró   c              3  óR   •K  — | ]  }|‰v rt        ‰«      n
t        d «      –— Œ  y ­wr1   )Únextr^  )r3   rŠ  Úgenr‰  s     €€r5   r6   z stack_reshape.<locals>.<genexpr>D  s,   øè ø€ ò #àð  *™_”�S”	´%¸³+Ó=ñ#ùs   ƒ$'Nr   )Úignore_index)rŸ   r~   )r¨   rŸ   r   Úsortedr   ra   r    Úiterre   rù   rú   ra  r$  r£   rÀ   r   r×   r¾   r   r   r¢   r~   rf  )r:  r>   r‰  r‹  Údrop_levnumsÚbufrw  rü   Úcolumn_indexerr°   r  rz  r�  s     `         @r5   r…  r…    sï  ù€ ô0 �e—m‘m¤ZÔ0Ð0Ð0ä˜%¨Ô.€Lð €CØ× Ñ Ó"ó ˆÜˆu�}‰}Ó Ò"Ø—:‘: 5�:Ó)‰Dô �5‹z˜QŠØ�f�Ü�s“)ˆCÜ"ô #ä˜uŸ}™}×4Ñ4Ó5ô#ó ˆNð —9‘9šQ Ð.Ñ/ˆDäˆu‹:˜Ÿ™×-Ñ-Ò-ØŸ<™<×;Ñ;¸LÓIˆD�LØ×Ñ 1Ò$Ø�y‰y˜AŠ~Ø�•	ä,¬S°·±Ó->Ó?�”Ø�
‰
�4Öð+ô. ˆ3ƒx�!‚|˜EŸKšKÜ˜¨$Ô/‰ô ˆu‹:˜Ÿ™×-Ñ-Ò-àŸ-™-×;Ñ;¸LÓI×PÑPÓR‰Kà˜#ˆKÜ ;°e·m±m×6IÑ6IÔJˆä
ˆ5ƒz�E—M‘M×)Ñ)Ò)àŸ-™-×;Ñ;¸LÓI×PÑPÓRˆØ�~‰~×$Ñ$ _Ô5Ø˜OÑ,ˆFà€Mr]   )NT)rü   úSeries | DataFramer:   r„   )..)r®   r   r:   r„   rå   r   )r®   r¤  r:   r„   rå   r¤  )r®   r   r:   r„   rå   r   )r%  r   r:   r„   rå   r   )r-   TT)r:  r   r-  r„   r:   r„   rå   r¤  )TT)r:  r   r-  r„   r:   r„   )rŸ   r   rå   rè   )
r:  r   r,  rE  r-  r„   r:   r„   rå   r   )r@  r(   r|  rE  r}  rE  rå   r(   )r:  r   r>   ú	list[int]rå   r¤  )
r:  r   r>   r¥  r‰  zset[int]r‹  r   rå   r¤  )TÚ
__future__r   rM  Útypingr   r   r   rR   ÚnumpyrL   Ú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Ú
algorithmsru   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+   r  rÄ   r  r  r  rF  rT  r0  r8  r˜  r…  rí   r]   r5   ú<module>rÁ     sM  ðÝ "ã ÷ñ ó
 ã å ,ç )Ð )÷õ 3Ý 4÷÷ó õ 5÷÷
 'Ð &÷õ CÝ BÝ CÝ '÷ñ õ
 .Ý %÷õ ñ ÷ñ õ 2Ý5÷~
ñ ~
ðD DHð^Ø
ð^Ø<@ó^ðB 
Û Só 
Ø Sð 
àADðØ	ðØ:>ðàòó 
ðð CGð!TØ	ð!TØ;?ð!Tàó!TðJ :>ð
Ø	ð
Ø26ð
àó
ð"$Øð$Ø-1ð$àó$ðP CGðNBØðNBØ(,ðNBØ;?ðNBàóNBôb"óJð8 NRðAØðAØ!$ðAØ37ðAØFJðAàóAðH"Ø	ð"Ø!$ð"Ø14ð"àó"óJOðdFØðFØ&ðFØ4<ðFØJOðFàôFr]   