
    Pi                    P   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	 dDdEdZIedFdGd%            ZJe	 dFdHd&            ZJ	 dDdHd'ZJ	 dDdId(ZKdJd*ZL	 dKdLd.ZMdMdNd/ZNdOd3ZO	 dKdPd6ZPdQd;ZQdRd>ZRdSdCZSdS )T    )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dS ).
_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
    Tindexr   levelr&   sortboolreturnNonec                   || _         || _        |                                | _        | j                            |          | _        d| j        j        | j                 v | _        | j        o| j        }|rdnd| _        t          | j        j
                  | _        t          | j        j                  | _        | j                            | j                  | _        | j                            | j                  | _        |j
        | j                 | _        d| _        | j        st'          | j        j        | j                           }| j        r.|dk    }||          }t)          j        |          d         | _        | j                            |          | _        | j                            |          | _        t/          d          rt1          d | j        D                       }| j        j        }	||	z  }
|
t)          j        t(          j                  j        k    r,t9          j        d|
 dt<          t?                                 |                                   d S )	N   r   performance_warningsc              3  $   K   | ]}|j         V  d S N)size).0index_levels     o/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pandas/core/reshape/reshape.py	<genexpr>z&_Unstacker.__init__.<locals>.<genexpr>   s%      UU;+UUUUUU    z%The following operation may generate z& cells in the resulting pandas object.
stacklevel)!constructorr.   remove_unused_levelsr,   _get_level_numberr-   codeshas_nanliftlistlevelsnew_index_levelsnamesnew_index_namespopremoved_nameremoved_levelremoved_level_fullunique_nan_indexr   npflatnonzerotaker   maxr8   iinfoint32warningswarnr	   r   _make_selectors)selfr,   r-   r@   r.   should_liftunique_codesnan_masknum_rowsnum_columns	num_cellss              r;   __init__z_Unstacker.__init__y   s6    '	//11
Z11%88
 TZ-dj99l0ty$+AA!	 !%TZ%6 7 7#DJ$455 044TZ@@!266tzBB"',tz":%'y 
	Q'-dj.>tz.J'K'KL| D'2-+XI6(*x(@(@(C%!%!3!8!8!F!FD&*&=&B&B<&P&PD#,-- 	
 UUt?TUUUUUH,1K !;.I28BH--1117I 7 7 7&/11	    	r=   -tuple[npt.NDArray[np.intp], list[np.ndarray]]c                   | j         }t          | j        j                  }| j        sd |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 )Nc                8    g | ]}t          |          d          S )r   )r   )r9   codes     r;   
<listcomp>z3_Unstacker._indexer_and_to_sort.<locals>.<listcomp>   s#    :::DYt__Q':::r=   r4   c              3  4   K   | ]}t          |          V  d S r7   lenr9   xs     r;   r<   z2_Unstacker._indexer_and_to_sort.<locals>.<genexpr>   s(      KKc!ffKKKKKKr=   )
r-   rF   r,   rC   r.   rG   tupler"   rh   r$   )
rY   vrC   levsto_sortsizes
comp_indexobs_idsngroupsindexers
             r;   _indexer_and_to_sortz_Unstacker._indexer_and_to_sort   s     JTZ%&&y 	;::E:::EDJ%&&)eAEGGn,az9KKd2A2ha!egg&>$q'&JKKKKK0%@@
Gg,,(W==r=   list[np.ndarray]c                F    | j         \  }| j        rfd|D             S |S )Nc                :    g | ]}|                               S  rR   )r9   liners   s     r;   re   z,_Unstacker.sorted_labels.<locals>.<listcomp>   s%    ;;;4DIIg&&;;;r=   )rt   r.   )rY   rn   rs   s     @r;   sorted_labelsz_Unstacker.sorted_labels   s9    49 	<;;;;7;;;;r=   values
np.ndarrayc                H    | j         \  }}t          j        ||d          }|S )Nr   )axis)rt   algostake_nd)rY   r|   rs   _sorted_valuess        r;   _make_sorted_valuesz_Unstacker._make_sorted_values   s*    .
fgA>>>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                    }	|	                    |d           |	                                t	          | j                  k     rt%          d          || _        |	| _        | j        r.|                    t          j        |                    | _        d S t          j        t          j        |d          d                   | _        d S )Nr3   c              3  4   K   | ]}t          |          V  d S r7   rg   ri   s     r;   r<   z-_Unstacker._make_selectors.<locals>.<genexpr>   s(      77qCFF777777r=   dtypeTz0Index contains duplicate entries, cannot reshape)return_indexr4   )rH   r{   rk   r"   rh   r   r,   levshaper-   rD   
full_shaperE   rP   zerosprodr/   putsum
ValueErrorgroup_indexmaskr.   searchsortedarange
compressorr   )
rY   
new_levelsremaining_labelslevel_sizesrp   rq   rr   strideselectorr   s
             r;   rX   z_Unstacker._make_selectors   sl   *
  -crc277J7777701A;OO
Gg,,(44
$TZ04<?!6/%b)FZ,??$)Kx00===4   88::DJ''OPPP%	9 	S(55bi6H6HIIDOOO gbi
&N&N&Nq&QRRDOOOr=   c                N    t          | j                                                  S r7   )r/   r   all)rY   s    r;   mask_allz_Unstacker.mask_all   s    DIMMOO$$$r=   2tuple[npt.NDArray[np.intp], npt.NDArray[np.bool_]]c                    t          j        t          | j                  t           j                  }|                     |d          \  }}||                    d          fS )Nr   r3   
fill_valuer   )rP   r   rh   r,   intpget_new_valuesany)rY   	dummy_arr
new_valuesr   s       r;   arange_resultz_Unstacker.arange_result   sT     Ic$*ooRW===	..yR.HH
D488A;;&&r=   r   c                @   |j         }|j        dk    r|d d t          j        f         }| |j        d         dk    rt          d          |                     ||          \  }}|                     |          }| j        }| 	                    ||||j
        d          }	t          |t          j                  r|j        |j        }}
n3t          |t                    r|j        j        |j        j        }}
nd\  }
}|
|u r|	j                            |j                   |	S )Nr4   z-must pass column labels for multi-column dataF)r,   columnsr   copy)r4      )_valuesndimrP   newaxisshaper   r   get_new_columns	new_indexr@   r   
isinstancendarraybaser   _ndarray_mgradd_references)rY   objvalue_columnsr   r|   r   r   r   r,   resultr   new_bases               r;   
get_resultz_Unstacker.get_result   s*   ;!AAArzM*F V\!_%9%9LMMM++FJ??
A&&}55!!eWJ<LSX " 
 
 fbj)) 	"#[*/(DD ;<< 	"#_1:3F3K(DD!ND(8K&&sx000r=   Nc                   |j         dk    r|d d t          j        f         }|                     |          }| j        \  }}|j        d         }||z  }||f}| j        }	| j        }
|
rlt          |          r]|	                    |||          
                    dd          	                    |          }t          j        |t                    }||fS |j        }t          |t                    r5|                                }|                    ||          }|
s||d d <   n|
s|}t%          ||          \  }}||k    ri|j        dvr)t)          j        dt,          t/                                 n7t1          |          s(t)          j        dt,          t/                                 t          j        ||          }|
s|                    |           |j        }t          j        |t                    }t;          |j                  r+|                    d          }|                    d          }n|                    |d	          }tA          j!        ||	                    d
          |||||                    d
                     t;          |j                  r>|                    d          }tE          |          }|                    |j                  }||fS )Nr4   r   r   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   rP   r   r   r   r   r   r   rh   reshapeswapaxesonesr/   r   r   r   construct_array_type_emptyr   kindrV   rW   r   r   r   emptyfillnamer   r   viewastype
libreshapeunstackr   )rY   r|   r   r   lengthwidthr   result_widthresult_shaper   r   r   new_maskr   cls	old_dtyper   s                    r;   r   z_Unstacker.get_new_values  s   ;!AAArzM*F0088 av~-y=  
	(F 
	(
 %%feV<<!Q&& 
 w|4888Hx''e^,, 	, ,,..CL>>J + *
111 !	$1%$D$D!z%% ~U22 V*'7'9'9     "*--  V*'7'9'9    ,e<<<J ,
+++z8L555
 v|,, 	C)..t44M#..JJ)00E0BBM 	IIdOOMM$	
 	
 	
 v|,, 	7 $22J7
CCJ#66J8##r=   r   Index | Nonec                  	 |g| j         s | j                            | j                  S | j                            d| j        j                  }|                    | j                  S t          | j                  | j         z   }t          |          }t          j	        t          j
        |          |          	t          |t                    r4|j        | j        fz   }|j        | j        fz   }	fd|j        D             }n|| j        g}|j        | j        g}	g}| j        }|                    t          j        ||                     t          |||d          S )Nr   r   )itemc                :    g | ]}|                               S rx   ry   )r9   lab
propagators     r;   re   z._Unstacker.get_new_columns.<locals>.<listcomp>  s%    MMM#*--MMMr=   FrG   rC   rI   verify_integrity)rD   rM   _renamerL   insert	_na_valuerenamerh   rP   repeatr   r   r   rG   rN   rI   rC   r   	_repeaterappendtile)
rY   r   levr   r   r   	new_names	new_codesrepeaterr   s
            @r;   r   z_Unstacker.get_new_columnsv  ss    < J)11t7H1III$++AD4F4P+QQC::d/000T'((4<7M""Yry//88
 mZ00 	%&-1H0JJJ%+t/@.BBIMMMM9LMMMII 'J '+T->?I#I> 	511222YiRW
 
 
 	
r=   c                   t          | j                  t          | j                  k    r=| j                            | j                  }| j        rt          j        |dd          }nt          | j                  | j        z   }t          j        |          | j        z
  }| j        r@| j	        s9| j
        dk    s
J d            d|| j
        <   || j
        dz   d xx         dz  cc<   |S )Nr   r3   z+`unique_nan_index` not properly initializedr4   )rh   rN   rM   get_indexerrD   rP   r   r   rE   r.   rO   )rY   r   r   s      r;   r   z_Unstacker._repeater  s     t&''3t/A+B+BBB.::4;MNNH| 69Xq"55 +,,t|;Fy((494H| ;DI ;,r111A 211 35./.244555:555r=   MultiIndex | Indexc                8     j         r j        d d         }n8 j        }t           j        j                  }|d |         ||dz   d          z   } fd|D             }t           j                  dk    r j        d         |d         }}|dk                                    r(|	                    t          |          |j
                  }|                    |                               j        d                   S t           j        | j        d          S )Nr3   r4   c                D    g | ]}|                     j                  S rx   )rR   r   )r9   r   rY   s     r;   re   z(_Unstacker.new_index.<locals>.<listcomp>  s'    DDDc11DDDr=   r   Fr   )r.   r{   r-   rF   r,   rC   rh   rH   r   r   r   rR   r   rJ   r   )rY   labelsrl   rC   result_codesr-   level_codess   `      r;   r   z_Unstacker.new_index  s%    9 	0',FF
A)**E2A2Yq1uww/FDDDDVDDD t$%%**!%!6q!9<?;Er!&&(( BSZZAA::k**11$2Fq2IJJJ(&"	
 
 
 	
r=   )T)r,   r   r-   r&   r.   r/   r0   r1   )r0   ra   )r0   ru   )r|   r}   r0   r}   )r0   r1   )r0   r/   )r0   r   )r0   r   r7   )r   r   )r0   r}   )r0   r   )__name__
__module____qualname____doc__r`   r
   rt   r{   r   rX   r   r   r   r   r   r   r   rx   r=   r;   r+   r+   J   sn       , ,^ JN7 7 7 7 7r       ^ ,    ^   
S S S S8 % % % ^% ' ' ' ^'   4]$ ]$ ]$ ]$~!
 !
 !
 !
F    ^. 
 
 
 ^
 
 
r=   r+   TdataSeries | DataFramer.   r/   c                   t                    dk    r| S | j        t          t                    j        v rgfdD             fdt          j                  D             }fdD             }fdD             }fdD             }fd|D             }fd|D             }	fd	|D             }
t          d
 |D                       }t          ||dd          }t          |d          \  }}t          ||||d          }|st          |dd          }nt          g ||g |	|g |
dd          }t          | t                    r=|                     d          }||_        |                    d||          }|}|}|}nt          | j        t                    rC| }r=                    d          |                    ||          }fdD             =|S |                     d          }||_        |                    d||          }t          |t                    r|j        n|j        t          t                    sJ j        d         g|}| j        j        g|}j        d         g}|                    fd|D                        t          |||d          }t          |t                    r||_        n||_        |S )Nr   c                :    g | ]}                     |          S rx   )rB   r9   ir,   s     r;   re   z%_unstack_multiple.<locals>.<listcomp>  s'    777AU$$Q''777r=   c                    g | ]}|v|	S rx   rx   )r9   r   clocss     r;   re   z%_unstack_multiple.<locals>.<listcomp>  s    ???1Qr=   c                *    g | ]}j         |         S rx   rG   r   s     r;   re   z%_unstack_multiple.<locals>.<listcomp>      ...1u|A...r=   c                *    g | ]}j         |         S rx   rC   r   s     r;   re   z%_unstack_multiple.<locals>.<listcomp>      ,,,ek!n,,,r=   c                *    g | ]}j         |         S rx   rI   r   s     r;   re   z%_unstack_multiple.<locals>.<listcomp>  r  r=   c                *    g | ]}j         |         S rx   r   r   s     r;   re   z%_unstack_multiple.<locals>.<listcomp>  r  r=   c                *    g | ]}j         |         S rx   r  r   s     r;   re   z%_unstack_multiple.<locals>.<listcomp>  r  r=   c                *    g | ]}j         |         S rx   r  r   s     r;   re   z%_unstack_multiple.<locals>.<listcomp>  r  r=   c              3  4   K   | ]}t          |          V  d S r7   rg   ri   s     r;   r<   z$_unstack_multiple.<locals>.<genexpr>  s(      **Q#a&&******r=   F)r.   xnullr.   )r  __placeholder__)r   r   r   deepr   r.   c                *    g | ]}|k     r|n|d z
  S r4   rx   )r9   rl   vals     r;   re   z%_unstack_multiple.<locals>.<listcomp>  s)    @@@Qa#gg1q5@@@r=   c              3  X   K   | ]$}|                     j        d                    V  %dS )r3   N)rR   rC   )r9   recunstcolss     r;   r<   z$_unstack_multiple.<locals>.<genexpr>  s6      NN#(."455NNNNNNr=   )rh   r,   r   r   rI   rangenlevelsrk   r#   r    r!   r   r   r   r   r   r   rK   rG   r   rC   extend)r   r   r   r.   rlocsclevelsccodescnamesrlevelsrcodesrnamesr   r   comp_idsrq   recons_codesdummy_indexdummy	unstackedr   r   r   r   dummy_dfnew_columnsr,   r  r  s    `                       @@@r;   _unstack_multipler(    s    5zzQ JEU##E 7777777E????em,,???E.......G,,,,e,,,F,,,,e,,,F.......G,,,,e,,,F,,,,e,,,F**'*****E!&%e5IIIK,[uEEEHg''5&PUVVVL 	
G*;%HHH &W&g&%F%H%.F.-."	
 
 
 $ (O		u	%%!MM"3
QUMVV	
	 		dlJ// 	F Aiill  JT (   A@@@%@@@  A M 99%9(($ $$*4 % 
 
	 i(( 	) HH (H(J/////oa(373
\&00	^A&'	NNNNNNNNNN)e  K )V$$ (%	'	r=   .r   r   r0   r   c                    d S r7   rx   r   r-   r   r.   s       r;   r   r   ,  s    PSPSr=   c                    d S r7   rx   r*  s       r;   r   r   0  s	     r=   c                   t          |t          t          f          r.t          |          dk    rt	          | |||          S |d         }t          |          s |dk    s| j                            |           t          | t                    rFt          | j        t                    rt          | |||          S | j                                        S t          | j        t                    s%t          dt          | j                   d          t          | j                  rt#          | |||          S t%          | j        || j        |          }|                    | d |	          S )
Nr4   r  r   r  z'index must be a MultiIndex to unstack, z was passedr  r-   r@   r.   r   r   )r   rk   rF   rh   r(  r   r,   rB   r   r   _unstack_frameTstackr   typer   r   _unstack_extension_seriesr+   _constructor_expanddimr   )r   r-   r   r.   	unstackers        r;   r   r   6  su    %%'' u::?? %S%JTRRRR!HEe +U.?%?%?	##E***#y!! Tci,, 	!!#u$OOOO5;;== 	:.. T Rd39ooRRR
 
 	
 sy)) 	P,S%$OOOOIU0JQU
 
 
	 ##Ct
#SSSr=   c                ,   t          | j        t                    sJ t          | j        || j        |          }| j        s8| j                            ||          }|                     ||j	                  S |
                    | | j        |          S )Nr-  r   )axesr.  )r   r,   r   r+   _constructor_can_fast_transposer   r   _constructor_from_mgrr7  r   r   )r   r-   r   r.   r5  mgrs         r;   r/  r/  Z  s     ci,,,,,	C,<4  I " 
hyZ@@((38(<<<##s{z $ 
 
 	
r=   seriesc                    |                                  }|                    |||          }|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)r<  r-   r   r.   dfr   s         r;   r3  r3  k  sL    8 
		BZZe
ZFFF ^77<<FN Mr=   r3   framedropnac                   d }| j         \  }| j                            |          }t          | j        t                    rt          | |||          S t          | j        t                    rt          | j        j                  }fd| j        j	        D             } || j                  \  }	}
|
                    |	           |
                    t          j        |
|                                                     t          | j        j                  }|
                    | j        j                   t	          |||d          }nt!          t#          || j        | j        f          ddi\  }\  }}
|                              t          j        |
|                                          f}t	          ||| j        j        | j        j        gd          }| j        s| j        rt          | j        j                  }|d         }t          |t.                    rW|                                }|                    d	 |                                 D                       }t7          ||          }n3| j                                        }n| j                                        }|rt9          |          }||         }||         }|                     ||
          S )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 r7   )	is_uniquerP   r   rh   r   )r,   rC   
categoriess      r;   stack_factorizezstack.<locals>.stack_factorize  sD    ? 	0")CJJ////3E::z5  r=   )	level_numrB  r.   c                :    g | ]}|                               S rx   r   )r9   r   Ks     r;   re   zstack.<locals>.<listcomp>  s#    @@@sSZZ]]@@@r=   Fr   strictTr   c                "    g | ]\  }}|j         S rx   )r   )r9   r   cols      r;   re   zstack.<locals>.<listcomp>  s    999C999r=   r,   )r   r   rB   r   r   _stack_multi_columnsr,   rF   rG   rC   r   rP   r   ravelrI   r   zipmapr   r   _is_homogeneous_typedtypesr   r   r   _concat_same_typeitems"_reorder_for_extension_array_stackr   _constructor_sliced)rA  r-   rB  r.   rG  NrH  r   r   clevclabr   r   rG   ilabrC   rU  r   arrr   r   rK  s                        @r;   r1  r1    s   ! ! ! ;DAq //66I%-,, 
#YvD
 
 
 	
 
EK	,	, 
%+,--
@@@@ek.?@@@	$_U]33
d$q))//11222*++	+,,,YiRW
 
 
		  #5;">?? 
HL 
  
t Aa 0 0 6 6 8 88;#U]%78"	
 
 
	 ; +55 + el*++q	e^,, 	/,,..C..995;;==999 J <J1MMJJ ,,..JJ ]((**
 $Z  %
dO	$$Zy$AAAr=   c                \    t           fd|D                       r }|D ]t          |||          }nst          d |D                       rK } fd|D             }|r8|                    d          t          |||          }fd|D             }|8nt          d          |S )Nc              3  4   K   | ]}|j         j        v V  d S r7   )r   rI   r9   r   rA  s     r;   r<   z!stack_multiple.<locals>.<genexpr>  s-      
7
7#3%-%%
7
7
7
7
7
7r=   )rB  r.   c              3  @   K   | ]}t          |t                    V  d S r7   )r   int)r9   r   s     r;   r<   z!stack_multiple.<locals>.<genexpr>  s,      33cZS!!333333r=   c                D    g | ]}j                             |          S rx   )r   rB   ra  s     r;   re   z"stack_multiple.<locals>.<listcomp>  s)    GGG#0055GGGr=   r   c                *    g | ]}|k    r|n|d z
  S r  rx   )r9   rl   r   s     r;   re   z"stack_multiple.<locals>.<listcomp>  s)    ===!!s((QQA===r=   zTlevel should contain all level names or all level numbers, not a mixture of the two.)r   r1  rK   r   )rA  r-   rB  r.   r   r   s   `    @r;   stack_multiplerf    s    
7
7
7
7
7
7
777 
 	B 	BC 63vDAAAFF	B 
33U333	3	3 
  HGGGGGG 	>))A,,C 63vDAAAF >===u===E  	> 1
 
 	

 Mr=   r   r   r   c           	        t          | j                  dk    r,| j        d                             | 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	        d t	          || j        dd         d          D             | j        dd                   S )zBCreates a MultiIndex from the first N-1 levels of this MultiIndex.r   r   r   c              3  :   K   | ]\  }fd |D             V  dS )c                0    g | ]}|d k    r|         ndS )r   Nrx   )r9   cr   s     r;   re   z7_stack_multi_column_index.<locals>.<genexpr>.<listcomp>  s)    333166Qt333r=   Nrx   )r9   rC   r   s     @r;   r<   z,_stack_multi_column_index.<locals>.<genexpr>  sO        C 	4333U333     r=   Nr3   T)rL  rL  c              3      K   | ]	\  }}|V  
d S r7   rx   )r9   keyr   s      r;   r<   z,_stack_multi_column_index.<locals>.<genexpr>  s&      AAVS!SAAAAAAr=   c                L    g | ]!\  }}d |vrt          ||j                  n|"S )Nr   )r   r   )r9   new_levr   s      r;   re   z-_stack_multi_column_index.<locals>.<listcomp>  sL     	
 	
 	
  047/B/BE'++++	
 	
 	
r=   r  )
rh   rG   r   rI   rR  rC   	itertoolsgroupbyr   from_arrays)r   rm   tuplesunique_tuplesnew_levss        r;   _stack_multi_column_indexru    s'   
7>a~a ((gmA.>(??? gnSbS17="3EdSSS  D $$t$$FAAy'8'@'@AAAMM/$//H !	
 	
 !$HgnSbS.A$ O O O	
 	
 	

 mCRC    r=   rH  rc  c                
  $% dd}|                      d          }|j        }t          |t                    sJ ||j        dz
  k    rW|}t          ||j        dz
            D ]3} |||          }	 ||dz   |          }
|                    |	|
          }4|x|_        }|                                s,|r* |d	|          }|                    |d
          }|j        }t          t          |          }t          |          }i }|j        d         }t          |j        d                   }|rt          j        |          }|                    t#          |          d           }t          j        ||          }t#          |          %g }|D ]}	 |j                            |          }n%# t(          $ r |                    |           Y @w xY wt          |t,                    st#          |          }n|j        |j        z
  }|%k    rb|j        d d |j        |         f         }|                    |j        j        d                   |_        |                    |          j        }n|j        d d |f         }t;          |j                                                  $t          $t@                    r$!                                "                    $fd|#                                D                       }|j$        \  }}t          j%        ||z            &                    ||          j'        &                    d          }|                    |          }n|j        }|j(        dk    r|)                                }|||<   t#          |          d	k    r|*                    |          }t#          |          }t          |j+        t                    rKtY          |j+        j                  }tY          |j+        j-                  }%fd|j+        j        D             }n=t]          |j+                  \  }} | g}|/                    %          g}|j+        j0        g}|                    |           |                    t          j1        ||                     |                    | j        j-        |                    t          |||d          }!| 2                    ||!|          }"| j        j        dk    rO| j        3                    |g                                          }#|"j        4                    |#          s|"|#         }"|r|"5                    d	d          }"|"S )NrH  rc  r   r   c                2    | |j         v r|j         |          S | S )z
        Logic for converting the level number to something we can safely pass
        to swaplevel.

        If `level_num` matches a column name return the name from
        position `level_num`, otherwise return `level_num`.
        r  )rH  r   s     r;   _convert_level_numberz3_stack_multi_columns.<locals>._convert_level_number&  s$     %%=++r=   Fr  r4   r   )r-   r   r3   )r   c                N    g | ]!\  }}|j                             d           "S )Fr   )r   r   )r9   r   rj   r   s      r;   re   z(_stack_multi_columns.<locals>.<listcomp>s  s2    TTTTQQY%%e%%88TTTr=   c                :    g | ]}|                               S rx   rJ  )r9   r   levsizes     r;   re   z(_stack_multi_columns.<locals>.<listcomp>  s%    EEESSZZ((EEEr=   r   )r,   r   r   )r   how)rH  rc  r   r   )6r   r   r   r   r  r  	swaplevel_is_lexsorted
sort_indexr   ru  rG   r   rC   rP   r.   r   rh   rR   get_locKeyErrorr   slicestopstartlocreindexr|   ilocr   rU  tolistr   r   rV  rW  r   r   r   r0  r   rQ  
differencer,   rF   rI   r   r   r   r   r8  r?  equalsrB  )&rA  rH  rB  r.   rx  thismi_colsroll_columnsr   lev1lev2level_to_sortr'  new_data
level_valsr   level_vals_nanlevel_vals_used	drop_colsrl  r  	slice_lenchunkvalue_slicesubsetrZ  rK  idxr   r   r   	old_codes
old_levelsr   r   desired_columnsr   r{  s&                                       @@r;   rP  rP  #  so       ::5:!!DlGgz***** GOa'''y'/A"566 	> 	>A((L99D((Q==D'11$==LL!--w  "" t  .-a99];;,:w''G+G44K H#Jr*++K +gk**&&s:==Ngnk::O+GI '$ '$	,&&s++CC 	 	 	S!!!H	 #u%% 	-CII39,IHQQQS 112E*//0CB0GHHEM---@@GKKYqqq#v&F$V]%9%9%;%;<<E%00 
, $88::LLTTTTV\\^^TTT  |1iA&&..q!446>>rBB)..s33$ma%++--K#
9~~!,,Y77D		A$*j)) &$*+,,
)**	EEEEDJ4DEEE		 7
 C C	: \
%%g../	Z_%	j!!!RW[!,,---U](3444)e  I 	;OOF}q  -;;YKHHOOQQ~$$_55 	-O,F  2A511Ms   F--GGr^  r(   n_rows	n_columnsc                    t          j        ||z                                ||          j                            d          }|                     |          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')
    r3   )rP   r   r   r0  rR   )r^  r  r  r  s       r;   rX  rX    sJ    B )FY&
'
'
/
/	6
B
B
D
L
LR
P
PC88C==r=   r-   	list[int]c                     j                                         t           j                   k    rt          d          t          |          s S t	          |           j                             fdt           j         j        dz
  dd          D                       }t           j         t                    skt           j                   dk    r j
        r j        j        d         j        }nd }                      j                            dd          |          }nt#           ||          } j        rdnt          |          t                     z  }t           j        t                    r; j        j        }t+          t-          j         j        j        d|f                    }n@t3           j        d	
          \  }}	|	g}t+          t-          j        |d|f                    }t          |          dk    rAt-          j        |          }
t          |t                    sJ |                    |
          }n|}|                                }t          |t                    r!|j        }|                                j        }n|g}t3          |d	
          d         g} fd|D             }t          ||z   ||z    j        j        t+          |j                  z   d	          |_        t                     }t          |          }t-          j        |          }t-          j        ||z  |          t-          j         t-          j        |          |          z   }|!                    |          }|j"        dk    r\ j         j        t          |          k    r?t          |j                   dk    rtG          |j                  }n|j$        d d df         }|j"        dk    rd |_%        |S )Nz8Columns with duplicate values are not supported in stackc                    g | ]}|v|	S rx   rx   )r9   k
set_levelss     r;   re   zstack_v3.<locals>.<listcomp>  s#    TTTq@S@S@S@S@Sr=   r4   r3   r   F)orderr   F)use_na_sentinelc                T    g | ]$}t          j        |t                              %S rx   )rP   r   rh   )r9   rC   rA  s     r;   re   zstack_v3.<locals>.<listcomp>  s+    KKKUBIeSZZ00KKKr=   r   r   rO  )&r   nuniquerh   r   setr?  r  r  r   r   rT  r   blocksr   rY  r   r   stack_reshaper   r,   rG   rF   rP   r   rC   r   argsort_reorder_ilevelsr   drop_duplicatesrI   r   r   rR   r   r   r  r   )rA  r-   
stack_colsr   r   ratioindex_levelsindex_codesrC   uniquessorterordered_stack_colsordered_stack_cols_uniquecolumn_levelscolumn_codeslen_df	n_uniquesrs   idxsr  s   `                  @r;   stack_v3r    s   }#em"4"444STTTu:: UJ22TTTTE%-/!3R<<TTT J
 emZ00 E u}!!e&@!J%a(.EEE**M!!"C!00 + 
 
 ueZDD ;AA#f++U";E %+z** 7{)275;#4q%jAABB"5;FFFwy2751e*5566
5zzA~~E""*j11111'88@@' 2 9 9 ; ;$j11 X*1)99;;A23!";USSSTUVW LKKKlKKKLm+L(k$'9'?"@"@@	  FL ZZF-..Ii	""G76G#V,,ry69J9JI/V/VVD[[F {aEM1SZZ??v~!##&,///FF[A&F{aMr=   r  set[int]r  r   c                   t          | j        t                    sJ t          |d          }g }|                                D ]1}t          | j                  dk    r|                     d          }nit          |          dk    r|f}t          |          t          fdt          | j        j
                  D                       }| j        dd|f         }t          |          | j        j
        k     r |j                            |          |_        nD|j
        dk    r9|j        dk    rd|_        n&t          t          |j                            |_        |                    |           3t          |          dk    r| j        st%          |d	          }	nht          |          | j        j
        k     r-| j                            |                                          }
ndg}
t'          |
| j        j        
          }	t          |          | j        j
        k     rN| 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)reverser4   Fr  c              3  \   K   | ]&}|v rt                    nt          d           V  'd S r7   )nextr  )r9   r  genr  s     r;   r<   z stack_reshape.<locals>.<genexpr>D  sO       # # *__S			%++# # # # # #r=   Nr   )ignore_index)r   r   )r   r   r   sortedr   rh   r   iterrk   r  r  r  r?  r   r   r   r   r   r   r   r   r   r  )rA  r-   r  r  drop_levnumsbufr  r   column_indexerr   r'  r  r  s     `         @r;   r  r    s\   0 emZ00000%...L C  ""  u}""::5:))DD 5zzQfs))C" # # # # #u}455# # #  N 9QQQ./Du::---<;;LIIDLL1$$yA~~		,S->->??

4
3xx!||EK|$/// u::----;;LIIPPRRKK#K;em6IJJJ
5zzEM)))-;;LIIPPRR~$$_55 	-O,FMr=   )NT)r   r   r.   r/   )..)r   r   r.   r/   r0   r   )r   r   r.   r/   r0   r   )r   r   r.   r/   r0   r   )r<  r   r.   r/   r0   r   )r3   TT)rA  r   rB  r/   r.   r/   r0   r   )TT)rA  r   rB  r/   r.   r/   )r   r   r0   r   )
rA  r   rH  rc  rB  r/   r.   r/   r0   r   )r^  r(   r  rc  r  rc  r0   r(   )rA  r   r-   r  r0   r   )
rA  r   r-   r  r  r  r  r   r0   r   )T
__future__r   ro  typingr   r   r   rV   numpyrP   pandas._config.configr   pandas._libs.reshape_libsr   r   pandas.errorsr   r	   pandas.util._decoratorsr
   pandas.util._exceptionsr   pandas.core.dtypes.castr   r   pandas.core.dtypes.commonr   r   r   r   pandas.core.dtypes.dtypesr   pandas.core.dtypes.missingr   r   pandas.core.algorithmscore
algorithmsr   r   r   pandas.core.arrays._mixinsr   pandas.core.arrays.categoricalr   pandas.core.constructionr   pandas.core.framer   pandas.core.indexes.apir   r   r   pandas.core.reshape.concatr   pandas.core.seriesr   pandas.core.sortingr    r!   r"   r#   r$   pandas._typingr%   r&   r'   pandas.core.arraysr(   pandas.core.indexes.frozenr)   r+   r(  r   r/  r3  r1  rf  ru  rP  rX  r  r  rx   r=   r;   <module>r     s   " " " " " "             
      , , , , , , ) ) ) ) ) ) ) ) )        3 2 2 2 2 2 4 4 4 4 4 4                   5 4 4 4 4 4       
 ' & & & & & & & &        C B B B B B B B B B B B C C C C C C ' ' ' ' ' '         
 . - - - - - % % % % % %               6          211111555555~
 ~
 ~
 ~
 ~
 ~
 ~
 ~
D DH^ ^ ^ ^ ^B 
 S S S S 
 S 
AD    
 CG!T !T !T !T !TJ :>
 
 
 
 
"$ $ $ $P CGNB NB NB NB NBb" " " " "J   8 NRA A A A AH" " " "JO O O OdF F F F F Fr=   