Ë
    u™ãj¿§  ã                  ó¸  — 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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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@mAZA erd dlBmCZCmDZDmEZE d dlFmGZG d dlHmIZI  G d„ d«      ZJ	 d(	 	 	 d)d„ZKed*d+d„«       ZLe	 d*	 	 	 	 	 d,d„«       ZL	 d(	 	 	 	 	 d,d„ZL	 d(	 	 	 	 	 d-d„ZM	 	 	 	 	 	 d.d „ZN	 d/	 	 	 	 	 	 	 d0d!„ZOd1d2d"„ZPd3d#„ZQ	 d/	 	 	 	 	 	 	 	 	 d4d$„ZR	 	 	 	 	 	 	 	 d5d%„ZSd6d&„ZT	 	 	 	 	 	 	 	 	 	 d7d'„ZUy)8é    )ÚannotationsN)ÚTYPE_CHECKINGÚcastÚoverload)Ú_global_config)Úlib)Ú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_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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                ó(  — || _         || _        |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| _        d | _        | j                  s¡t)        | j                  j                  | j
                     «      }| j                  r(|dk(  }||    }t+        j,                  |«      d   | _        | j                   j/                  |«      | _        | j"                  j/                  |«      | _        nÓt1        d„ | j                  j                  D «       «      r­| j                  j                  | j
                     }t+        j2                  t5        | j                   «      t6        ¬«      }	d|	||dk7     <   |	j9                  «       sA| j                   |	   | _        t+        j:                  |	t*        j<                  ¬«      dz
  | _        t>        d   d   rœ| j@                  d   }
| j                  jB                  | j
                     | j                  z   }|
|z  }|t+        jD                  t*        jF                  «      jH                  kD  r(tK        jL                  d	|› d
�tN        tQ        «       ¬«       | jS                  «        y )Néÿÿÿÿé   r   c              3  ó4   K  — | ]  }|j                   –— Œ y ­w©N)Úhasnans©Ú.0Úlevs     úf/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/core/reshape/reshape.pyú	<genexpr>z&_Unstacker.__init__.<locals>.<genexpr>�   s   è ø€ Ò: �—•Ñ:ùs   ‚©ÚdtypeTÚmodeÚperformance_warningsz%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_indexÚ_level_code_mapr   ÚnpÚflatnonzeroÚtakeÚanyÚzerosÚlenÚboolÚallÚcumsumÚintpÚconfigÚ_comp_index_and_ngroupsÚlevshapeÚiinfoÚint32ÚmaxÚwarningsÚwarnr
   r   Ú_make_selectors)Úselfr@   rB   r=   r>   Úshould_liftÚunique_codesÚnan_maskÚlevel_codesÚusedÚ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Õ#ÜÑ:¨¯
©
×(9Ñ(9Ô:Ô:ð
 Ÿ*™*×*Ñ*¨4¯:©:Ñ6ˆKÜ—8‘8œC × 2Ñ 2Ó3¼4Ô@ˆDØ37ˆD�˜[¨BÑ.Ñ/Ñ0Ø—8‘8”:Ø%)×%7Ñ%7¸Ñ%=�Ô"Ü')§y¡y°¼R¿W¹WÔ'EÈÑ'I�Ô$ä�&‰>Ð0Ò1ð ×3Ñ3°AÑ6ˆHØŸ*™*×-Ñ-¨d¯j©jÑ9¸D¿L¹LÑHˆKØ  ;Ñ.ˆIØœ2Ÿ8™8¤B§H¡HÓ-×1Ñ1Ò1Ü—‘Ø;¸I¸;ð G6ð 7ä&Ü/Ó1õ	ð 	×ÑÕó    c                ó^  — | j                   }| j                  j                  }| j                  j                  }t	        |d| ||dz   d z   «      }|d| ||dz   d z   }t        d„ |D «       «      }t        ||dd¬«      }t        || j                  ¬«      \  }}	t        |«      t        |	«      fS )aÒ  
        For each entry of self.index, the row of the result it belongs to.

        With sort=True the rows are numbered lexicographically; with sort=False
        they are numbered by first appearance. Either way the number is the
        position the row occupies in the result, which the rest of the class
        relies on: the values land in row `comp_index` (see _make_selectors) and
        `compressor` reads the labels back out in that same order.
        Nr.   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr0   ©rV   r2   s     r5   r6   z5_Unstacker._comp_index_and_ngroups.<locals>.<genexpr>Ê   s   è ø€ Ò; 3”c˜#—hÑ;ùó   ‚TF©r>   Úxnull©r>   )rB   r@   rG   rC   rF   Útupler#   r!   r>   r   rV   )
rd   Ú	level_numÚlevsrC   Úremaining_labelsÚremaining_levelsÚsizesÚidsÚ
comp_indexÚobs_idss
             r5   r\   z"_Unstacker._comp_index_and_ngroupsº   sµ   € ð —J‘Jˆ	Ø�z‰z× Ñ ˆØ—
‘
× Ñ ˆÜ  j yÐ 1°E¸)Àa¹-¸/Ð4JÑ JÓKÐØ 
 Ð+¨d°9¸q±=°?Ð.CÑCÐÜÑ;Ð*:Ô;Ó;ˆäÐ.°¸DÈÔNˆÜ2°3¸T¿Y¹YÔGÑˆ
�GÜ" :Ó.´°G³Ð<Ð<rn   c                óæ   — | j                   j                  | j                     }| j                  r5| j                  €|S t        j                  |dk(  d| j                  |   «      S t        |«      d   S )zî
        For each entry of self.index, the column of the result it belongs to.

        Note this is not a position within self.removed_level: with sort=False
        NaN gets a column of its own but is absent from removed_level.
        r-   r   )r@   rC   rB   r>   rP   rQ   Úwherer   )rd   rh   s     r5   Ú_unstacked_level_codesz!_Unstacker._unstacked_level_codesÐ   sj   € ð —j‘j×&Ñ& t§z¡zÑ2ˆØ�9Š9à×#Ñ#Ð+Ø"Ð"ä—8‘8˜K¨2Ñ-¨r°4×3GÑ3GÈÑ3TÓUÐUô ˜Ó% aÑ(Ð(rn   c                óþ   — | j                   \  }}t        | j                  «      | j                  z   }|| j                  g}t        |||fdd¬«      }t        |d¬«      \  }}t        t        |«      t        |«      «      S )NTFrs   ru   )	r\   rV   rM   rD   r�   r#   r!   r$   r   )rd   r}   ÚngroupsÚstrideÚkeysr|   Úcomp_idsr~   s           r5   Ú_indexerz_Unstacker._indexerã   s|   € ð #×:Ñ:Ñˆ
�GÜ�T×'Ñ'Ó(¨4¯<©<Ñ7ˆØ˜D×7Ñ7Ð8ˆô ˜d W¨fÐ$5¸DÈÔNˆÜ0°¸4Ô@Ñˆ�'Ü%Ô&9¸(Ó&CÄSÈÃ\ÓRÐRrn   c                óh   — t        j                  | j                  t        | j                  «      «      S r0   )r   Úis_range_indexerr‡   rV   r@   ©rd   s    r5   Ú_indexer_is_identityz_Unstacker._indexer_is_identityñ   s#   € ô ×#Ñ# D§M¡M´3°t·z±z³?ÓCÐCrn   c                óh   — | j                   r|S t        j                  || j                  dd¬«      }|S )Nr   F)ÚaxisÚ
allow_fill)r‹   ÚalgosÚtake_ndr‡   )rd   ÚvaluesÚsorted_valuess      r5   Ú_make_sorted_valuesz_Unstacker._make_sorted_values÷   s/   € Ø×$Ò$ØˆMÜŸ™ f¨d¯m©mÀ!ÐPUÔVˆØÐrn   c                óT  — | j                   \  }}t        | j                  «      | j                  z   }||f| _        | j
                  ||z  z   | j                  z   }t        j                  t        j                  | j                  «      t        ¬«      }|j                  |d«       |j                  «       t        | j                  «      k  rt        d«      ‚|| _        t        j                   |t        j"                  ¬«      }t        j$                  t        |«      «      ||<   || _        y )Nr7   Tz0Index contains duplicate entries, cannot reshape)r\   rV   rM   rD   Ú
full_shaper�   rE   rQ   rU   ÚprodrW   ÚputÚsumr@   Ú
ValueErrorÚmaskÚemptyrZ   ÚarangeÚ
compressor)rd   r}   rƒ   r„   Úselectorrš   r�   s          r5   rc   z_Unstacker._make_selectorsý   sÞ   € Ø"×:Ñ:Ñˆ
�Gä�T×'Ñ'Ó(¨4¯<©<Ñ7ˆØ! 6˜/ˆŒð ×.Ñ.°¸*Ñ1DÑDÀtÇyÁyÑPˆÜ�x‰xœŸ™ §¡Ó0¼Ô=ˆØ�‰�˜4Ô à�8‰8‹:œ˜DŸJ™J›Ò'ÜÐOÓPÐPàˆŒ	ô —X‘X˜g¬R¯W©WÔ5ˆ
Ü!#§¡¬3¨z«?Ó!;ˆ
�:ÑØ$ˆ�rn   c                óH   — t        | j                  j                  «       «      S r0   )rW   rš   rX   rŠ   s    r5   Úmask_allz_Unstacker.mask_all  s   € ä�D—I‘I—M‘M“OÓ$Ð$rn   c                ó˜   — t        j                  t        | j                  «      t         j                  ¬«      }| j                  |d¬«      S )Nr7   r-   ©Ú
fill_value)rQ   rœ   rV   r@   rZ   Úget_new_values)rd   Ú	dummy_arrs     r5   Úarange_resultz_Unstacker.arange_result  s6   € ô —I‘Iœc $§*¡*›o´R·W±WÔ=ˆ	Ø×"Ñ" 9¸Ð"Ó<Ð<rn   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@   Úcolumnsr8   Úcopy)r.   é   )Ú_valuesÚndimrQ   ÚnewaxisÚshaper™   r¤   Úget_new_columnsÚ	new_indexr=   r8   Ú
isinstanceÚndarrayÚbaser   Ú_ndarrayÚ_mgrÚadd_references)rd   ÚobjÚvalue_columnsr£   r‘   Ú
new_valuesr¨   r@   Úresultr³   Únew_bases              r5   Ú
get_resultz_Unstacker.get_result  s  € Ø—‘ˆØ�;‰;˜!ÒØšAœrŸz™z˜MÑ*ˆFàÐ  V§\¡\°!¡_¸Ò%9ÜÐLÓMÐMà×(Ñ(¨°Ó<ˆ
Ø×&Ñ& }Ó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Øˆrn   Nc                óâ  — |j                   dk(  r|d d …t        j                  f   }| j                  |«      }| j                  \  }}|j
                  d   }||z  }||f}| j                  }	| j                  }
|
r?t        |«      r4|j                  |||«      j                  dd«      j                  |«      }|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/t-        |«      s$t%        j&                  dt(        t+        «       ¬«       t        j.                  ||¬«      }|
s|j1                  |«       |j2                  }t5        |j                  «      r#|j7                  d«      }|j7                  d«      }n|j9                  |d¬	«      }t;        j<                  ||	j7                  d
«      ||||«       t5        |j                  «      r7|j7                  d«      }t?        |«      }|j7                  |j                  «      }|S )Nr.   rª   r7   ÚiubznUsing a fill_value that cannot be held in the existing dtype is deprecated and will raise in a future version.r;   Úi8F©r©   Úu1zM8[ns]) r¬   rQ   r­   r“   r•   r®   rš   r    rV   ÚreshapeÚswapaxesr8   r±   r   Úconstruct_array_typeÚ_emptyr   Úkindra   rb   r	   r   r   r›   ÚfillÚnamer   ÚviewÚastypeÚ
libreshapeÚunstackr   )rd   r‘   r£   r’   ÚlengthÚwidthr„   Úresult_widthÚresult_shaperš   r    r¹   r8   ÚclsÚ	old_dtyperÈ   s                   r5   r¤   z_Unstacker.get_new_values7  s5  € Ø�;‰;˜!ÒØšAœrŸz™z˜MÑ*ˆFà×0Ñ0°Ó8ˆð Ÿ™‰ˆ�Ø—‘˜a‘ˆØ˜v‘~ˆØ Ð-ˆØ�y‰yˆØ—=‘=ˆñ œ˜Fœð ×%Ñ% f¨e°VÓ<ß‘˜!˜Q“ß‘˜Ó&ð ð
 Ðà—‘ˆä�eœ^Ô,ð ×,Ñ,Ó.ˆCØŸ™ L¸˜Ó>ˆJÙØ *�
™1‘áØ!�	Ü$1°%¸Ó$DÑ!��zØ Ò%Ø —~‘~¨UÑ2Ü Ÿ™ðVä*Ü'7Ó'9öô " *Ô-Ü Ÿ™ðVä*Ü'7Ó'9õô Ÿ™ ,°eÔ<ˆJÙØ—‘ 
Ô+à�z‰zˆô
 ˜vŸ|™|Ô,Ø)×.Ñ.¨tÓ4ˆMØ#Ÿ™¨Ó.‰Jà)×0Ñ0°¸EÐ0ÓBˆMô 	×ÑØØ�I‰I�d‹OØØØØô	
ô ˜vŸ|™|Ô,ð $Ÿ™¨Ó2ˆJÜ7¸
ÓCˆJØ#Ÿ™¨¯©Ó6ˆJàÐrn   c                ó˜  — |€˜| j                   s&| j                  j                  | j                  ¬«      S | j                  rdn| j
                  }| j                  j                  || 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©rG   rC   rI   Úverify_integrity)rD   rM   Ú_renamerL   r>   rO   ÚinsertÚ	_na_valueÚrenamerV   rQ   Úrepeatrœ   r±   r   rG   rN   rI   rC   rS   rÈ   Ú	_repeaterÚappendÚtile)rd   r¸   Ú	nan_indexr4   r„   rÎ   Ú
propagatorÚ
new_levelsÚ	new_namesÚlabÚ	new_codesÚrepeaters               r5   r¯   z_Unstacker.get_new_columns”  s–  € ØÐ Ø—<’<Ø×)Ñ)×1Ñ1°t×7HÑ7HÐ1ÓIÐIà!ŸYšY™¨D×,AÑ,AˆIØ×$Ñ$×+Ñ+Ø × 2Ñ 2× <Ñ <ð ,ó ˆ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   ÅG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.   )rV   rN   rM   Úget_indexerrD   rQ   rÙ   rœ   rE   r>   rO   )rd   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àˆrn   c                ó*  — | j                   }| j                  j                  }|d | ||dz   d  z   }|D �cg c]  }|j                  | j                  «      ‘Œ }}t        | j                  «      dk(  r|| j                  d   |d   }}t        j                  |d«      r%|j                  t        |«      |j                  «      }|j                  |«      j                  | j                  d   «      S t        | j                  || j                  d¬«      S c c}w )Nr.   r   r-   FrÖ   )rB   r@   rC   rS   r�   rV   rH   r   Úhas_sentinelrÙ   rÚ   rÛ   rJ   r   )rd   rw   rC   Úlabelsrä   Úresult_codesrB   rh   s           r5   r°   z_Unstacker.new_indexÒ  sý   € ð —J‘Jˆ	Ø—
‘
× Ñ ˆØ�z˜	Ð" U¨9°q©=¨?Ð%;Ñ;ˆØ=CÖD°c˜Ÿ™ §¡Õ1ÐDˆÐDô ˆt×$Ñ$Ó%¨Ò*Ø!%×!6Ñ!6°qÑ!9¸<È¹?�;ˆEÜ×Ñ ¨RÔ0ØŸ™¤S¨£Z°·±ÓA�Ø—:‘:˜kÓ*×1Ñ1°$×2FÑ2FÀqÑ2IÓJÐJäØ×(Ñ(ØØ×&Ñ&Ø"ô	
ð 	
ùò Es   µ"D)T)r@   r   rB   r&   r>   rW   ÚreturnÚNone)rí   z tuple[npt.NDArray[np.intp], int])rí   ú
np.ndarray)rí   znpt.NDArray[np.intp])rí   rW   )r‘   rï   rí   rï   )rí   rî   )rí   r   r0   )r¸   zIndex | None)rí   úMultiIndex | Index)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rm   r   r\   r�   r‡   r‹   r“   rc   r    r¦   r¼   r¤   r¯   rÝ   r°   © rn   r5   r+   r+   J   sõ   „ ñ,ð^ JNð?Øð?Ø(-ð?ØBFð?à	ó?ðB ò=ó ð=ð* ò)ó ð)ð$ òSó ðSð òDó ðDó
ó%ð, ò%ó ð%ð ò=ó ð=ó
ó4[óz$
ðL òó ðð. ò
ó ñ
rn   r+   c                ó¬  ‡— t        |«      dk(  r| S | j                  }t        d|«      }||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   r   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr0   rq   )r3   Úxs     r5   r6   z$_unstack_multiple.<locals>.<genexpr>  s   è ø€ Ò*˜Q”#�a—&Ñ*ùrr   Frs   ru   )rt   Ú__placeholder__)rÈ   r©   rÖ   ©Údeep©r£   r>   r.   c              3  óZ   •K  — | ]"  }|j                  ‰j                  d    «      –— Œ$ y­w)r-   N)rS   rC   )r3   ÚrecÚunstcolss     €r5   r6   z$_unstack_multiple.<locals>.<genexpr><  s#   øè ø€ ÒN¸#˜Ÿ™ (§.¡.°Ñ"4×5ÑNùs   ƒ(+)rV   r@   r   rI   rA   ÚrangeÚnlevelsrG   rC   rv   r#   r!   r"   r   r   r±   r    r©   rÌ   r¨   rK   rÈ   Úextend)ÚdataÚclocsr£   r>   r@   ÚiÚrlocsÚclevelsÚccodesÚcnamesÚrlevelsÚrcodesÚrnamesr®   Úgroup_indexr†   r~   Úrecons_codesÚdummy_indexÚdummyÚ	unstackedrâ   rã   rå   rº   ÚvalÚvÚ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)Á0	L.Á:L.ÂL3Â L8Â<L=ÃMÃ4MÄMÈ!Mc                 ó   — y r0   rõ   ©r·   rB   r£   r>   s       r5   rÌ   rÌ   J  s   € ØPSrn   c                 ó   — y r0   rõ   r  s       r5   rÌ   rÌ   N  s   € ð rn   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 passedru   ©rB   r=   r>   ©r¸   r£   )r±   rv   rF   rV   r  r   r@   rA   r   r   Ú_unstack_frameÚTÚstackr™   Útyper   r8   Ú_unstack_extension_seriesr+   Ú_constructor_expanddimr¼   )r·   rB   r£   r>   Ú	unstackers        r5   rÌ   rÌ   T  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ÐSrn   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·   rB   r£   r>   r#  Úmgrs         r5   r  r  x  s–   € ô �c—i‘i¤Ô,Ð,Ð,ÜØ�	‰	˜¨C×,<Ñ,<À4ô€Ið ×"Ò"Ø�h‰h×Ñ˜y°ZÐÓ@ˆØ×(Ñ(¨°3·8±8Ð(Ó<Ð<à×#Ñ#Ø˜sŸ{™{°zð $ó 
ð 	
rn   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.
    )rB   r£   r>   r   )Úto_framerÌ   r¨   Ú_drop_level_numbers)ÚseriesrB   r£   r>   Údfrº   s         r5   r!  r!  ‰  sE   € ð8 
�‰Ó	€BØ�Z‰Z˜e°
ÀˆZÓF€Fð —^‘^×7Ñ7¸¸Ó<€F„Nð €Mrn   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 r0   )Ú	is_uniquerQ   rœ   rV   r   )r@   rC   Ú
categoriess      r5   Ústack_factorizezstack.<locals>.stack_factorize¼  s;   € Ø�?Š?Øœ"Ÿ)™)¤C¨£JÓ/Ð/Ð/Ü3°EÓ:ÑˆˆzØ˜5Ð Ð rn   )rw   Údropnar>   FrÖ   ÚstrictTr   ©r@   )r®   r¨   rA   r±   r   Ú_stack_multi_columnsr@   rF   rG   rC   rÜ   rÞ   rQ   rß   ÚravelrI   rÈ   ÚzipÚmapr›   Ú_is_homogeneous_typeÚdtypesr«   r   rÄ   Ú_concat_same_typeÚitemsÚ"_reorder_for_extension_array_stackr   Ú_constructor_sliced)ÚframerB   r4  r>   r3  ÚNÚKrw   râ   rä   rå   ÚclevÚclabrã   r°   rG   ÚilabrC   r<  r8   ÚarrÚ_Ú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r0   )r¨   rI   )r3   r4   rA  s     €r5   r6   z!stack_multiple.<locals>.<genexpr>  s    øè ø€ Ò
7¨#ˆ3�%—-‘-×%Ñ%Ô%Ñ
7ùs   ƒ"%)r4  r>   c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr0   )r±   Úintr2   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.)rX   r  r¨   rA   rK   r™   )rA  rB   r4  r>   rº   r4   r  s   `      r5   Ústack_multiplerN    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   r4   rC   Úcs       r5   r6   z,_stack_multi_column_index.<locals>.<genexpr>+  s9   è ø€ ò áˆC�ð .3Ö3¨�1˜’6ˆˆQŠ˜tÑ	#Ö3ñùÚ3ùs   ‚.Ž)¡.Nr-   T)r5  r5  c              3  ó&   K  — | ]	  \  }}|–— Œ y ­wr0   rõ   )r3   ÚkeyrH  s      r5   r6   z,_stack_multi_column_index.<locals>.<genexpr>2  s   è ø€ ÒA™V˜S !”SÑAùs   ‚r7   ©rI   )rV   rG   rØ   rI   r9  rC   Ú	itertoolsÚgroupbyr   Úfrom_arraysr   r8   )r¨   rx   ÚtuplesÚunique_tuplesÚnew_levsÚnew_levr4   s          r5   Ú_stack_multi_column_indexr\  &  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        d|«      }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`.
        rT  )rw   r¨   s     r5   Ú_convert_level_numberz3_stack_multi_columns.<locals>._convert_level_numberD  s%   € ð ˜Ÿ™Ñ%Ø—=‘= Ñ+Ð+àÐrn   Frú   r.   r   )rB   r�   r   r-   )r¨   rÀ   rÖ   )r@   r¨   rX   )r�   Úhow)rw   rM  r¨   r   )8r©   r¨   r±   r   r  r   Ú	swaplevelÚ_is_lexsortedÚ
sort_indexr   r\  rG   r   rC   rQ   r>   rÙ   rV   rS   Úget_locÚKeyErrorrÞ   ÚsliceÚstopÚstartÚlocÚreindexr‘   Úilocr   r<  Útolistr   rÄ   r=  r>  r«   rÊ   r®   rœ   rÂ   r  r¬   r8  Ú
differencer@   rF   rI   rÜ   r   rÈ   rß   r&  r,  Úequalsr4  ))rA  rw   r4  r>   r_  ÚthisÚmi_colsÚroll_columnsr  Úlev1Úlev2Úlevel_to_sortr  Únew_dataÚ
level_valsrh   Úlevel_vals_nanÚlevel_vals_usedÚlevsizeÚ	drop_colsrS  ri  Ú	slice_lenÚchunkÚvalue_sliceÚsubsetr8   rH  rø   rB  rC  Úidxrâ   rã   rä   rå   Ú	old_codesÚ
old_levelsr°   rº   Údesired_columnss)                                            r5   r7  r7  A  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ˆØ�‰ ]¸ˆÓ;ˆØ—,‘,ˆä�< Ó)€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   Å-UÊ'U8Ï=U>ÕU5Õ4U5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-   )rQ   rœ   rÂ   r  rS   )rG  Ún_rowsÚ	n_columnsr  s       r5   r?  r?  Å  sD   € ôB �)‰)�F˜YÑ&Ó
'×
/Ñ
/°	¸6Ó
B×
DÑ
D×
LÑ
LÈRÓ
P€CØ�8‰8�C‹=Ðrn   c           	     óÈ  — | j                   j                  «       t        | j                   «      k7  rt        d«      ‚t        t	        |«      «      t        |«      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 stackz=level should not contain duplicate values, got level numbers r.   r-   r   ÚF)Úorderr7   F)Úuse_na_sentinelrÖ   rª   r6  )&r¨   ÚnuniquerV   r™   Úsetr,  r   r  r±   r   r;  rµ   Úblocksr8   r@  r«   rÂ   Ústack_reshaper›   r@   rG   rF   rQ   rß   rC   r   ÚargsortÚ_reorder_ilevelsr   Údrop_duplicatesrÜ   rI   rœ   rS   r¬   r    rk  rÈ   )rA  rB   Ú
set_levelsÚkÚ
stack_colsr8   rº   ÚratioÚindex_levelsÚindex_codesrC   ÚuniquesÚsorterÚordered_stack_colsÚordered_stack_cols_uniqueÚcolumn_levelsÚcolumn_codesÚlen_dfÚ	n_uniquesÚindexerÚidxss                        r5   Ústack_v3r¡  ê  sž  € Ø‡}�}×ÑÓ¤# e§m¡mÓ"4Ò4ÜÐSÓTÐTÜ
Œ3ˆu‹:ƒœ#˜e›*Ò$ÜØKÈEÈ7ÐSó
ð 	
ô ˆ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   Â=	QÃQË$&Q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r0   )Únextrf  )r3   r’  Úgenr‘  s     €€r5   r6   z stack_reshape.<locals>.<genexpr>f  s,   øè ø€ ò #àð  *™_”�S”	´%¸³+Ó=ñ#ùs   ƒ$'Nr   )Úignore_index)r¨   r8   )r±   r¨   r   Úsortedr   rV   r©   Úiterrv   r   r  ri  r,  r¬   rÈ   r   rÞ   r›   r   r   r«   r8   rn  )rA  rB   r‘  r“  Údrop_levnumsÚbufr  r  Úcolumn_indexerrº   r  r‚  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à€Mrn   )NT)r  úSeries | DataFramer>   rW   )..)r·   r    r>   rW   rí   r   )r·   r­  r>   rW   rí   r­  )r·   r   r>   rW   rí   r   )r-  r    r>   rW   rí   r   )r-   TT)rA  r   r4  rW   r>   rW   rí   r­  )TT)rA  r   r4  rW   r>   rW   )r¨   r   rí   rð   )
rA  r   rw   rM  r4  rW   r>   rW   rí   r   )rG  r(   r„  rM  r…  rM  rí   r(   )rA  r   rB   ú	list[int]rí   r­  )
rA  r   rB   r®  r‘  zset[int]r“  r   rí   r­  )VÚ
__future__r   rU  Útypingr   r   r   ra   ÚnumpyrQ   Úpandas._config.configr   r[   Úpandas._libsr   Ú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$   Úpandas._typingr%   r&   r'   Úpandas.core.arraysr(   Úpandas.core.indexes.frozenr)   r+   r  rÌ   r  r!  r  rN  r\  r7  r?  r¡  r�  rõ   rn   r5   ú<module>rË     sP  ðÝ "ã ÷ñ ó
 ã å :å ß )Ð )÷õ 3Ý 4÷÷ó õ 5÷÷
 'Ð &÷õ CÝ BÝ CÝ '÷ñ õ
 .Ý %÷ó ñ ÷ñ õ 2Ý5÷\
ñ \
ð@ 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SðlFØðFØ&ðFØ4<ðFØJOðFàôFrn   