§
    	�’j…&  ã                  ó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     €úEC:\Projects\DSCons\.venv\Lib\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Ô5€IÝ˜y°IÀDÐ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_   € õ
 ‘E”E€CØ
€CØð ð ˆÝˆc‰7Œ7˜#ÐÐØ�GŠG•B�s‘G”GÑÔÐØ�JŠJ�s‰OŒOˆOøØ€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‰Œ˜Ò	Ð	Ø˜”
ˆˆØ	ð $Ø˜”
ˆØ˜Q˜R˜R”[ð 	.ð 	.ˆEØ×&Ò& uÑ-Ô-ˆEˆEð	.õ ˜g°D½C¼NÐ4JÐ4J¨D¨DÐPUÐVÑVÔVˆÝ˜UÑ#Ô#ˆàð '��CœNÐ*Ð*Ý Ñ&Ô&ˆØ€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Ý  Ñ'Ô'ˆõ �l¥EÑ*Ô*ð 	 ØÐå�BœJ¨Ñ5Ô5ˆÝ�e�ZÑ(Ô(ð 	LÝÔ*¨<¸u¼{ÐKÑKÔKˆEˆEå˜,¨U¬Z¸u¼{ÐKÑKÔKˆEˆEøõ ð ð ð Øˆðøøøð €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          | ¦  «        sÐt          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¸�q—x’x¥¨U�xÑ3Ô3ÐEÐEÐEr,   r<   Úarrayc                ó   — g | ]	}|j         ‘Œ
S r&   ©rE   ©r(   Úidxs     r*   r+   z!union_indexes.<locals>.<listcomp>ý   s   € Ð%CÐ%CÐ%C°C c¤iÐ%CÐ%CÐ%Cr,   c                ó>   •— g | ]}|                      ‰d ¬¦  «        ‘ŒS rP   )rR   )r(   ÚindrE   s     €r*   r+   z!union_indexes.<locals>.<listcomp>þ   s)   ø€ ÐEÐEÐE°c�C—J’J˜u¨5�JÑ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Å%Ñ2HÔ2HÐ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Ñ%;Ô%;ÐD�S—Z’Z‘\”\�\ÀÐ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ÒÐØ˜”ˆÝ�f�dÑ#Ô#ð 	/Øð /˜4¥3¤>Ð1Ð1Ý˜v™œ��å�v f™~œ~Ñ.Ô.�Øˆå'¨Ñ0Ô0�M€GˆTàˆyÒÐØ˜”ˆàˆØˆØð 	%ð 	%ˆCÝ˜#�}Ñ-Ô-ð %Ø˜A‘�Ø”6Ð%Ø 1Ñ$�KøØ˜q (˜mÐ+Ð+õ
 ÐNÑOÔOÐOà•s˜7‘|”|Ò#Ð#Ø•s”~Ð%Ð%Ø�Ø˜Q”ZˆFˆFà˜Š\ˆ\ð ˆDð FÐE¸WÐEÑEÔEˆGØ˜Q”ZˆFà˜Q˜R˜R”[ð 	Gð 	GˆEØ—\’\ %°dÐ.E¨d¨dÀ�\ÑFÔFˆFˆFØˆà	�Š‰Ý Ñ(Ô(ð 	Ý$Ð%CÐ%C¸7Ð%CÑ%CÔ%CÑDÔDˆEØEÐEÐEÐE¸WÐEÑEÔEˆDØ˜”G—N’NÑ$Ô$ˆEØ˜”G—N’N 4¨¨¨¤8Ñ,Ô,ˆEØ˜×.Ò.¨uÑ5Ô5¸Ò;Ô<ˆDÝ�4‰yŒyð 4ØŸš T§[¢[¡]¤]Ñ3Ô3�Øð ,Ø×)Ò)Ñ+Ô+�øà˜A”JˆEå" GÐ,¨QÔ/ˆØ�5”:ÒÐØ—L’L Ñ&Ô&ˆEØˆØ	�ŠˆØIÐI wÐIÑIÔIˆØð 	Ý$ VÑ,Ô,ˆEˆEàˆEØXÐXÐPWÐXÑXÔXˆ	ÝÝÔ-¨i½dÀ4¹j¼jÐIÑIÔIØð
ñ 
ô 
ð 	
õ
 ÐI˜DÐ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   € Ð.Ð.Ð.˜U�T�%‰[Œ[Ð.Ð.Ð.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   € ð ð ð ØFG¥j°µEÑ&:Ô&:ÐA••d˜1‘g”g‘”�Àðð ð r,   r_   rN   rV   )r_   r=   r   )r9   Úkindss     r*   rg   rg     s•   € ð* /Ð. gÐ.Ñ.Ô.€Eåˆu€}€}Ýˆu‰:Œ:˜Š>ˆ>ðð ØKRðñ ô ˆGð •d�V‰OˆEˆEà˜F�?Ð"å
ˆ5�z„z�A‚~€~� 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Ð4 uˆu�|Š|˜EÑ"Ô"Ð4Ð4Ð4Ð4Ð4Ð4r,   )ÚiterÚnextÚall)r9   Úitrr�   s     @r*   r   r   B  s>   ø€ õ ˆw‰-Œ-€CÝ�‰IŒI€EÝÐ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,   