Ë
    u™ãjS'  ã                  óZ  — d dl mZ d dlmZ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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#Z$d dl%m&Z& g d¢Z'	 	 	 d	 	 	 	 	 	 	 dd„Z(dd„Z)	 	 d	 	 	 	 	 	 	 dd„Z*dd„Z+	 d 	 	 	 d!d„Z,d„ Z-d"d„Z.d#d„Z/y)$é    )Úannotations)ÚTYPE_CHECKINGÚcast)Ú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)ÚTimedeltaIndexN)Ú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_indexesc                ód   — | D �cg c]  }|j                  |«      ‘Œ }}t        |||¬«      S c c}w )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
        The combined index.
    bool
        Whether all indexes are equal.
    )Ú	intersectÚsort)Ú	_get_axisÚ_get_combined_index)Úobjsr   Úaxisr    ÚobjÚ	obs_idxess         úb/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/core/indexes/api.pyr   r   ?   s;   € ð> 15Ö5¨�—‘˜tÕ$Ð5€IÐ5ÜØØØôð ùò 6s   …-c                ó¢   — t        «       }g }| D ]=  }|j                  |vsŒ|j                  |j                  «       |j                  |«       Œ? |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_objsr/   f   sM   € ô
 ‹%€CØ
€CØò ˆØ�7‰7˜#ÒØ�G‰G�C—G‘GÔØ�J‰J�s�Oðð €Jó    c                ón  — t        | «      } t        | «      dk(  rt        d«      }d}njt        | «      dk(  r| d   }d}nT|r#| d   }| dd D ]  }|j                  |«      }Œ d}n/t	        | |t
        j                  u r|nd¬«      \  }}t        |«      }|r|t
        j                  urt        |«      }d}||fS )aE  
    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
        The combined index.
    bool
        Whether all indexes are equal.
    r   Té   NF©r    )	r/   Úlenr   Úintersectionr   r   Ú
no_defaultr   r   )Úindexesr   r    ÚindexÚ	all_equalÚothers         r'   r"   r"   t   sÏ   € ô6 ! Ó)€GÜ
ˆ7ƒ|�qÒÜ$ QÓ'ˆØ‰	Ü	ˆW‹˜Ò	Ø˜‘
ˆØ‰	Ù	Ø˜‘
ˆØ˜Q˜R�[ò 	.ˆEØ×&Ñ& uÓ-‰Eð	.à‰	ä(ØØ¤§¡Ñ/‘°Uô
Ñˆˆyô ˜UÓ#ˆá�œCŸN™NÑ*Ü Ó&ˆØˆ	Ø�)ÐÐr0   c                ó@  — | j                   r| S 	 t        | «      }t        |t        «      r|S t	        d|«      }t        | t
        «      r#t        j                  || j                  ¬«      } | S t        || j                  | j                  ¬«      } | S # t        $ r Y | S w xY w)zª
    Returns the sorted index

    We keep the dtypes and the name attributes.

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

    Returns
    -------
    Index
    z
np.ndarray)Únames)ÚnameÚdtype)Úis_monotonic_increasingr
   Ú
isinstancer   r   r   Úfrom_tuplesr<   r=   r>   Ú	TypeError)r8   Úarray_sorteds     r'   r   r   ¨   sŸ   € ð ×$Ò$ØˆðLÜ  Ó'ˆô �l¤EÔ*ØÐä˜L¨,Ó7ˆÜ�eœZÔ(Ü×*Ñ*¨<¸u¿{¹{ÔKˆEð €Lô ˜,¨U¯Z©Z¸u¿{¹{ÔKˆEà€Løô ò Øð €Lðús   �B Â	BÂBc                óæ  — t        | «      dk(  rt        d«      ‚t        | «      dk(  rP| d   }t        |t        «      r7|r|t        j
                  u rt        |«      }|dfS t        t        |«      «      }|dfS t        | «      \  } }|dk(  rÆ| d   }d}d}| D ]*  }t        |t        «      sŒ|dz  }|j                  €Œ&|dz  }Œ, |d|fvrt        d«      ‚|t        | «      k(  r|t        j
                  u rd}| d   }n0|dkD  r+d}| D �cg c]  }|j                  t        d¬	«      ‘Œ } }| d   }| dd D ]  }|j                  ||rdnd¬
«      }Œ |dfS |dk(  �rt        | «      }	|	sÁt!        | D �cg c]  }|j"                  ‘Œ c}«      }
| D �cg c]  }|j                  |
d¬	«      ‘Œ }}|d   j%                  «       }|d   j'                  |dd «      }||j)                  |«      dk(     }t        |«      r|j'                  |j%                  «       «      }|r|j+                  «       }n| d   }t-        | Ž d   }||j.                  k7  r|j1                  |«      }||	fS |dk(  rr| D �cg c]  }t        |t        «      sŒ|j"                  ‘Œ! }}|rt!        |«      }
nd}
d„ | D «       }t        t	        j2                  |t5        |«      ¬
«      |
¬«      }|dfS t7        d|›d�«      ‚c c}w c c}w c c}w c c}w )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
        The union index.
    bool
        Whether all indexes are equal.
    r   z#Must have at least 1 Index to unionr2   TÚspecialNz0Cannot join tz-naive with tz-aware DatetimeIndexF)Úcopyr3   Úarrayé   éÿÿÿÿÚlistc              3  ó`   K  — | ]&  }t        |t        «      r|j                  «       n|–— Œ( y ­w©N)r@   r   Útolist)Ú.0Úidxs     r'   ú	<genexpr>z union_indexes.<locals>.<genexpr>-  s$   è ø€ ÒXÈ¤Z°´UÔ%;�S—Z‘Z”\ÀÓDÑXùs   ‚,.)r>   zkind=z& must be 'special', 'array' or 'list'.)r4   ÚAssertionErrorr@   rJ   r   r6   r   ÚsortedÚ_sanitize_and_checkr   ÚtzrB   ÚastypeÚobjectÚunionr   r	   r>   Úuniquer,   Úget_indexer_forÚsort_valuesr   r=   ÚrenameÚfast_unique_multiple_list_genÚboolÚ
ValueError)r7   r    ÚresultÚkindÚnum_dtisÚnum_dti_tzsrO   Úxr:   r9   r>   ÚindÚindsr8   Údiffr=   ÚdtypesÚ	all_listss                     r'   r   r   Ê   s  € ô0 ˆ7ƒ|�qÒÜÐBÓCÐCÜ
ˆ7ƒ|�qÒØ˜‘ˆÜ�fœdÔ#Ù˜4¤3§>¡>Ñ1Ü˜v›�ð �tˆ|Ðô œv f›~Ó.�Ø�tˆ|Ðä'¨Ó0�M€GˆTàˆyÒØ˜‘ˆàˆØˆØò 	%ˆCÜ˜#œ}Õ-Ø˜A‘�Ø—6‘6Ñ%Ø 1Ñ$‘Kð		%ð
 ˜q (˜mÑ+ô
 ÐNÓOÐOà”s˜7“|Ò#Ø”s—~‘~Ñ%Ø�Ø˜Q‘Z‰Fà˜Š\ð ˆDð >EÖE¸�q—x‘x¤¨U�xÕ3ÐEˆGÐEØ˜Q‘ZˆFà˜Q˜R�[ò 	GˆEØ—\‘\ %±d©dÀ�\ÓF‰Fð	Gà�uˆ}Ðà	�‹Ü$ WÓ-ˆ	ÙÜ$¸7Ö%C°C c§i£iÒ%CÓDˆEØ=DÖE°c�C—J‘J˜u¨5�JÕ1ÐEˆDÐEØ˜‘G—N‘NÓ$ˆEØ˜‘G—N‘N 4¨¨ 8Ó,ˆEØ˜×.Ñ.¨uÓ5¸Ñ;Ñ<ˆDÜ�4ŒyØŸ™ T§[¡[£]Ó3�ÙØ×)Ñ)Ó+‘à˜A‘JˆEä" GÐ,¨QÑ/ˆØ�5—:‘:ÒØ—L‘L Ó&ˆEØ�iÐÐà	�ŠØ'.ÖI ´*¸SÄ%Õ2H�#—)“)ÐIˆÐIÙÜ$ VÓ,‰EàˆEÙXÐPWÔXˆ	ÜÜ×-Ñ-¨i¼dÀ4»jÔIØô
ˆð �uˆ}Ðä˜E˜D˜7Ð"HÐIÓJÐJùòQ Fùò &DùÚEùò" Js   ÄKÅ-K$ÆK)É"K.É8K.c                ó2  — | D �ch c]  }t        |«      ’Œ }}t        |v rPt        |«      dkD  r>| D �cg c](  }t        |t        «      st	        t        |«      «      n|‘Œ* } }|t        hz  }n| dfS t        |«      dkD  st        |vr| dfS | dfS c c}w c c}w )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'}
    r2   rJ   rE   rG   )ÚtyperJ   r4   r@   r   )r7   r8   Úkindsrc   s       r'   rS   rS   7  s¦   € ð* '.Ö.˜UŒT�%�[Ð.€EÐ.äˆu�}Üˆu‹:˜Š>àKRöØFG¤j°´EÔ&:””d˜1“g”ÀÑAðˆGð ð ”d�V‰O‰Eà˜F�?Ð"ä
ˆ5ƒz�A‚~œ eÑ+Ø˜	Ð!Ð!à˜ÐÐùò /ùòs
   …B³-Bc                óX   ‡— 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  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrL   )Úequals)rN   r8   Úfirsts     €r'   rP   z#all_indexes_same.<locals>.<genexpr>l  s   øè ø€ Ò4 uˆu�|‰|˜E×"Ñ4ùs   ƒ)ÚiterÚnextÚall)r7   Úitrro   s     @r'   r   r   ]  s(   ø€ ô ˆw‹-€CÜ�‹I€EÜÓ4°Ô4Ó4Ð4r0   c                óF   — t        | «      }t        j                  |d ¬«      S )N)r=   )Úranger   Ú_simple_new)ÚnÚrngs     r'   r   r   o  s   € Ü
�‹(€CÜ×!Ñ! #¨DÔ1Ð1r0   )Fr   T)r   r]   r$   r   r    úbool | lib.NoDefaultÚreturnútuple[Index, bool])r#   úlist[Index]rz   r|   )FF)r7   r|   r   r]   r    ry   rz   r{   )r8   r   rz   r   )T)r    ry   rz   r{   )rz   r]   )rw   Úintrz   r   )0Ú
__future__r   Útypingr   r   Ú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   ÚnumpyÚnpÚpandas._typingr   Ú__all__r   r/   r"   r   r   rS   r   r   © r0   r'   ú<module>r‘      sõ   ðÝ "÷÷
õ ,å 4å ,÷÷ õ :Ý 7Ý 6Ý 0Ý 2Ý 0Ý 9áÛå#ò€ð4 ØØ!%ð	$àð$ð ð$ð ð	$ð
 ó$óNð  Ø!&ð1Øð1àð1ð ð1ð ó	1óhðH "&ðjKà
ðjKð ójKòZ# óL5ô$2r0   