Ë
    *�£j/%  ã                  óR  — 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*dd„Z+d d!d„Z,d„ Z-d"d„Z.d#d„Z/y)$é    )Ú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_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
    )Ú	intersectÚsort)Ú	_get_axisÚ_get_combined_index)Úobjsr   Úaxisr    ÚobjÚ	obs_idxess         ú9C:\FundamentalWorkbench\vendor\pandas\core\indexes\api.pyr   r   ?   s5   € ñ8 15Ó5±¨�—‘˜tÕ$°€IÐ5Ü˜y°IÀDÔIÐIùò 6s   …-c                óž   — t        «       }g }| D ];  }t        |«      |vsŒ|j                  t        |«      «       |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/   _   sH   € ô
 “E€CØ
€CÛˆÜˆc‹7˜#ÒØ�G‰G”B�s“GÔØ�J‰J�s�Oð ð €Jó    c                óT  — t        | «      } t        | «      dk(  rt        d«      }nct        | «      dk(  r| d   }nO|r!| d   }| dd D ]  }|j                  |«      }Œ n,t	        | |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    )	r/   Úlenr   Úintersectionr   r   Ú
no_defaultr   r   )Úindexesr   r    ÚindexÚothers        r'   r"   r"   m   s¨   € ô0 ! Ó)€GÜ
ˆ7ƒ|�qÒÜ$ QÓ'‰Ü	ˆW‹˜Ò	Ø˜‘
‰Ù	Ø˜‘
ˆØ˜Q˜R“[ˆEØ×&Ñ& uÓ-‰Eñ !ô ˜g°D¼C¿N¹NÑ4J©DÐPUÔVˆÜ˜UÓ#ˆá�œCŸN™NÑ*Ü Ó&ˆØ€Lr0   c                ó\  — | j                   r| S 	 t        | «      }t        |t        «      r|S t	        t
        j                  |«      }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
    )Únames)ÚnameÚdtype)Úis_monotonic_increasingr
   Ú
isinstancer   r   ÚnpÚndarrayr   Úfrom_tuplesr;   r<   r=   Ú	TypeError)r8   Úarray_sorteds     r'   r   r   —   s£   € ð ×$Ò$ØˆðLÜ  Ó'ˆô �l¤EÔ*ØÐäœBŸJ™J¨Ó5ˆÜ�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(  rL| d   }t        |t        «      r5|r|t        j
                  u rt        |«      }|S t        t        |«      «      }|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¬
«      }Œ |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                  |«      }|S |dk(  rn| D �cg c]  }t        |t        «      sŒ|j"                  ‘Œ! }}|rt!        |«      }	nd}	d„ | D «       }t        t	        j2                  |t5        |«      ¬
«      |	¬«      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
    r   z#Must have at least 1 Index to unionr2   ÚspecialNz0Cannot join tz-naive with tz-aware DatetimeIndexTF)Ú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ÑPWÈ¤Z°´UÔ%;�S—Z‘Z”\ÀÓDÑPWùs   ‚,.)r=   zkind=z& must be 'special', 'array' or 'list'.)r4   ÚAssertionErrorr?   rK   r   r6   r   ÚsortedÚ_sanitize_and_checkr   ÚtzrC   Ú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_tzsrP   Úxr9   r=   ÚindÚindsr8   Údiffr<   ÚdtypesÚ	all_listss                    r'   r   r   ¹   sø  € ô" ˆ7ƒ|�qÒÜÐBÓCÐCÜ
ˆ7ƒ|�qÒØ˜‘ˆÜ�fœdÔ#Ù˜4¤3§>¡>Ñ1Ü˜v›�ð ˆô œv f›~Ó.�Øˆä'¨Ó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¹W¸�q—x‘x¤¨U�xÕ3¸WˆGÐEØ˜Q‘ZˆFà˜Q˜R“[ˆEØ—\‘\ %±d©dÀ�\ÓF‰Fð !àˆà	�ŠÜ Ô(Ü$¹7Ó%C¹7°C c§i£i¸7Ñ%CÓDˆEÙ=DÓE¹W°c�C—J‘J˜u¨5�JÕ1¸Wˆ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¡w ´*¸SÄ%Õ2H�#—)“) wˆÐIÙÜ$ VÓ,‰EàˆEÙXÑPWÓXˆ	ÜÜ×-Ñ-¨i¼dÀ4»jÔIØô
ð 	
ô
 ˜E˜D˜7Ð"HÐIÓJÐJùòK Fùò &DùÚEùò  Js   ÄKÅ$KÆKÉKÉ-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   rK   rF   rH   )ÚtyperK   r4   r?   r   )r7   r8   Úkindsrd   s       r'   rT   rT     s©   € ñ* '.Ó.¡g˜UŒT�%�[ g€EÐ.äˆu�}Üˆu‹:˜Š>áKRóÙKRÀa¤j°´EÔ&:””d˜1“g”ÀÑAÈ7ð ð ð ”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rM   )Úequals)rO   r8   Úfirsts     €r'   rQ   z#all_indexes_same.<locals>.<genexpr>Q  s   øè ø€ Ð4± uˆu�|‰|˜E×"±ùs   ƒ)ÚiterÚnextÚall)r7   Úitrrp   s     @r'   r   r   B  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   T  s   € Ü
�‹(€CÜ×!Ñ! #¨DÔ1Ð1r0   )Fr   T)r   r^   r$   r   r    úbool | lib.NoDefaultÚreturnr   )r#   úlist[Index]r{   r|   )FF)r7   r|   r   r^   r    rz   r{   r   )r8   r   r{   r   )T)r    rz   r{   r   )r{   r^   )rx   Úintr{   r   )0Ú
__future__r   Útypingr   r   Únumpyr@   Ú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   r/   r"   r   r   rT   r   r   © r0   r'   Ú<module>r�      sá   ðÝ "÷ó
 ÷õ ,å 4å ,÷÷ õ :Ý 7Ý 6Ý 0Ý 2Ý 0Ý 9áÝ#ò€ð4 ØØ!%ð	JàðJð ðJð ð	Jð
 óJó@ð  Ø!&ð'Øð'àð'ð ð'ð ó	'óTôD`KòF# óL5ô$2r0   