
    Pi/%                    8   d dl mZ d dlmZmZ d dlZd dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ erd dl%m&Z& g dZ'	 	 	 d+d,dZ(d-dZ)	 	 d.d/d!Z*d0d#Z+d1d2d$Z,d% Z-d3d&Z.d4d*Z/dS )5    )annotations)TYPE_CHECKINGcastN)NaTlib)InvalidIndexError)find_common_type)	safe_sort)Index
_new_Indexensure_indexensure_index_from_sequencesget_unanimous_namesmaybe_sequence_to_range)CategoricalIndex)DatetimeIndex)IntervalIndex)
MultiIndex)PeriodIndex)
RangeIndex)TimedeltaIndex)Axis)r   r   r   r   r   r   r   r   r   r   r   all_indexes_samedefault_indexr   r   get_objs_combined_axisr   r   safe_sort_indexunion_indexesFT	intersectboolaxisr   sortbool | lib.NoDefaultreturnr   c                D    fd| D             }t          |||          S )a  
    Extract combined index: return intersection or union (depending on the
    value of "intersect") of indexes on given axis, or None if all objects
    lack indexes (e.g. they are numpy arrays).

    Parameters
    ----------
    objs : list
        Series or DataFrame objects, may be mix of the two.
    intersect : bool, default False
        If True, calculate the intersection between indexes. Otherwise,
        calculate the union.
    axis : {0 or 'index', 1 or 'outer'}, default 0
        The axis to extract indexes from.
    sort : bool, default True
        Whether the result index should come out sorted or not. NoDefault
        use for deprecation in GH#57335.

    Returns
    -------
    Index
    c                :    g | ]}|                               S  )	_get_axis).0objr    s     k/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pandas/core/indexes/api.py
<listcomp>z*get_objs_combined_axis.<locals>.<listcomp>[   s%    555t$$555    )r   r!   )_get_combined_index)objsr   r    r!   	obs_idxess     `  r*   r   r   ?   s3    8 6555555IyIDIIIIr,   r.   list[Index]c                    t                      }g }| D ]J}t          |          |vr7|                    t          |                     |                    |           K|S )z^
    Return a list with distinct elements of "objs" (different ids).
    Preserves order.
    )setidaddappend)r.   idsresr)   s       r*   _get_distinct_objsr8   _   s_    
 EEC
C  c77#GGBsGGJJsOOOJr,   indexesc                   t          |           } t          |           dk    rt          d          }nyt          |           dk    r	| d         }n]|r+| d         }| dd         D ]}|                    |          }n0t	          | |t
          j        u r|nd          }t          |          }|r|t
          j        urt          |          }|S )a  
    Return the union or intersection of indexes.

    Parameters
    ----------
    indexes : list of Index or list objects
        When intersect=True, do not accept list of lists.
    intersect : bool, default False
        If True, calculate the intersection between indexes. Otherwise,
        calculate the union.
    sort : bool, default False
        Whether the result index should come out sorted or not. NoDefault
        used for deprecation of GH#57335

    Returns
    -------
    Index
    r      NFr!   )	r8   lenr   intersectionr   r   
no_defaultr   r   )r9   r   r!   indexothers        r*   r-   r-   m   s    0 !))G
7||q$Q''	W		
	 $
QRR[ 	. 	.E&&u--EE	. gDCN4J4JDDPUVVVU## 'CN**&&Lr,   r@   c                V   | j         r| S 	 t          |           }t          |t                    r|S t	          t
          j        |          }t          | t                    rt          j        || j	                  } n-t          || j
        | j                  } n# t          $ r Y nw xY w| S )z
    Returns the sorted index

    We keep the dtypes and the name attributes.

    Parameters
    ----------
    index : an Index

    Returns
    -------
    Index
    )names)namedtype)is_monotonic_increasingr
   
isinstancer   r   npndarrayr   from_tuplesrC   rD   rE   	TypeError)r@   array_sorteds     r*   r   r      s     $ L '' lE** 	 BJ55eZ(( 	L*<u{KKKEE,UZu{KKKEE     Ls   B 
B&%B&c                   t          |           dk    rt          d          t          |           dk    r[| d         }t          |t                    r<|r|t          j        u rt          |          }nt          t          |                    }|S t          |           \  } }|dk    r| d         }d}d}| D ](}t          |t                    r|dz  }|j
        |dz  })|d|fvrt          d          |t          |           k    r|t          j        u rd}| d         }n|dk    rd}d	 | D             } | d         }| dd         D ]}|                    ||rdnd
          }|S |dk    rt          |           st          d | D                       fd| D             }|d                                         }	|d                             |dd                   }||	                    |          dk             }
t          |
          r'|	                    |
                                          }	|r|	                                }	n| d         }	t'          |  d         }||	j        k    r|	                    |          }	|	S |dk    r^d | D             }|rt          |          ndd | D             }t          t	          j        |t/          |          
                    S t1          d|d          )a]  
    Return the union of indexes.

    The behavior of sort and names is not consistent.

    Parameters
    ----------
    indexes : list of Index or list objects
    sort : bool, default True
        Whether the result index should come out sorted or not. NoDefault
        used for deprecation of GH#57335.

    Returns
    -------
    Index
    r   z#Must have at least 1 Index to unionr;   specialNz0Cannot join tz-naive with tz-aware DatetimeIndexTFc                F    g | ]}|                     t          d           S F)copy)astypeobjectr(   xs     r*   r+   z!union_indexes.<locals>.<listcomp>   s(    EEEqxxUx33EEEr,   r<   arrayc                    g | ]	}|j         
S r&   rE   r(   idxs     r*   r+   z!union_indexes.<locals>.<listcomp>   s    %C%C%CCci%C%C%Cr,   c                >    g | ]}|                     d           S rP   )rR   )r(   indrE   s     r*   r+   z!union_indexes.<locals>.<listcomp>   s)    EEEcCJJu5J11EEEr,      listc                F    g | ]}t          |t                    |j        S r&   )rG   r   rE   rY   s     r*   r+   z!union_indexes.<locals>.<listcomp>  s)    III*S%2H2HI#)IIIr,   c              3  l   K   | ]/}t          |t                    r|                                n|V  0d S N)rG   r   tolistrY   s     r*   	<genexpr>z union_indexes.<locals>.<genexpr>  s=      XXZU%;%;DSZZ\\\XXXXXXr,   rX   zkind=z& must be 'special', 'array' or 'list'.)r=   AssertionErrorrG   r_   r   r?   r   sorted_sanitize_and_checkr   tzrK   unionr   r	   uniquer5   get_indexer_forsort_valuesr   rD   renamefast_unique_multiple_list_genr   
ValueError)r9   r!   resultkindnum_dtisnum_dti_tzsrZ   rA   indsr@   diffrD   dtypes	all_listsrE   s                 @r*   r   r      sc   " 7||qBCCC
7||qfd## 	/ /43>11vvf~~..'00MGTy 	% 	%C#}-- %A6%1$Kq(m++
 NOOOs7||##s~%%QZFF\\ D FEWEEEGQZFQRR[ 	G 	GE\\%d.Edd\FFFF	(( 	$%C%C7%C%C%CDDEEEEEWEEEDGNN$$EGNN48,,E..u55;<D4yy 4T[[]]33 ,))++AJE"G,Q/5:LL&&E	IIwIII 	$V,,EEEXXPWXXX	-id4jjIII
 
 
 	

 IDIIIJJJr,   c                    d | D             }t           |v r/t          |          dk    rd | D             } |t           hz  }n| dfS t          |          dk    s	t          |vr| dfS | dfS )aN  
    Verify the type of indexes and convert lists to Index.

    Cases:

    - [list, list, ...]: Return ([list, list, ...], 'list')
    - [list, Index, ...]: Return _sanitize_and_check([Index, Index, ...])
        Lists are sorted and converted to Index.
    - [Index, Index, ...]: Return ([Index, Index, ...], TYPE)
        TYPE = 'special' if at least one special type, 'array' otherwise.

    Parameters
    ----------
    indexes : list of Index or list objects

    Returns
    -------
    sanitized_indexes : list of Index or list objects
    type : {'list', 'array', 'special'}
    c                ,    h | ]}t          |          S r&   )type)r(   r@   s     r*   	<setcomp>z&_sanitize_and_check.<locals>.<setcomp>1  s    ...UT%[[...r,   r;   c                t    g | ]5}t          |t                    st          t          |                    n|6S r&   )rG   r   r_   rT   s     r*   r+   z'_sanitize_and_check.<locals>.<listcomp>5  sD       FGjE&:&:Ad1gg  r,   r_   rN   rV   )r_   r=   r   )r9   kindss     r*   rg   rg     s    * /.g...Eu}}u::>> KR  G dVOEEF?"
5zzA~~e++	!!r,   c                v    t          |           }t          |          t          fd|D                       S )z
    Determine if all indexes contain the same elements.

    Parameters
    ----------
    indexes : iterable of Index objects

    Returns
    -------
    bool
        True if all indexes contain the same elements, False otherwise.
    c              3  B   K   | ]}                     |          V  d S rb   )equals)r(   r@   firsts     r*   rd   z#all_indexes_same.<locals>.<genexpr>Q  s/      44uu||E""444444r,   )iternextall)r9   itrr   s     @r*   r   r   B  s>     w--CIIE4444444444r,   nintr   c                L    t          |           }t          j        |d           S )N)rD   )ranger   _simple_new)r   rngs     r*   r   r   T  s#    
((C!#D1111r,   )Fr   T)r   r   r    r   r!   r"   r#   r   )r.   r0   r#   r0   )FF)r9   r0   r   r   r!   r"   r#   r   )r@   r   r#   r   )T)r!   r"   r#   r   )r#   r   )r   r   r#   r   )0
__future__r   typingr   r   numpyrH   pandas._libsr   r   pandas.errorsr   pandas.core.dtypes.castr	   pandas.core.algorithmsr
   pandas.core.indexes.baser   r   r   r   r   r   pandas.core.indexes.categoryr   pandas.core.indexes.datetimesr   pandas.core.indexes.intervalr   pandas.core.indexes.multir   pandas.core.indexes.periodr   pandas.core.indexes.ranger   pandas.core.indexes.timedeltasr   pandas._typingr   __all__r   r8   r-   r   r   rg   r   r   r&   r,   r*   <module>r      s   " " " " " "       
            , + + + + + 4 4 4 4 4 4 , , , , , ,                : 9 9 9 9 9 7 7 7 7 7 7 6 6 6 6 6 6 0 0 0 0 0 0 2 2 2 2 2 2 0 0 0 0 0 0 9 9 9 9 9 9 $######  4 !%	J J J J J@     !&' ' ' ' 'T   D`K `K `K `K `KF#  #  # L5 5 5 5$2 2 2 2 2 2r,   