§
    Ñ! h¹%  ã                  óþ   — d Z ddlmZ ddlZddlmZ ddl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 erdd	lmZmZmZ dd
lmZmZ ddlmZmZmZmZ dZ d(d„Z!dde dfd)d „Z"de fd*d#„Z#de dfd+d%„Z$de dfd,d'„Z%dS )-z"
data hash pandas / numpy objects
é    )ÚannotationsN)ÚTYPE_CHECKING)Úhash_object_array)Úis_list_like)ÚCategoricalDtype)ÚABCDataFrameÚABCExtensionArrayÚABCIndexÚABCMultiIndexÚ	ABCSeries)ÚHashableÚIterableÚIterator)Ú	ArrayLikeÚnpt)Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ0123456789123456ÚarraysúIterator[np.ndarray]Ú	num_itemsÚintÚreturnúnpt.NDArray[np.uint64]c                ó  — 	 t          | ¦  «        }n0# t          $ r# t          j        g t          j        ¬¦  «        cY S w xY wt          j        |g| ¦  «        } t          j        d¦  «        }t          j        |¦  «        t          j        d¦  «        z   }d}t          | ¦  «        D ]3\  }}||z
  }||z  }||z  }|t          j        d|z   |z   ¦  «        z  }|}Œ4|dz   |k    s
J d¦   «         ‚|t          j        d¦  «        z  }|S )	z¼
    Parameters
    ----------
    arrays : Iterator[np.ndarray]
    num_items : int

    Returns
    -------
    np.ndarray[uint64]

    Should be the same as CPython's tupleobject.c
    )ÚdtypeiCB ixV4 r   iXB é   zFed in wrong num_itemsiû| )	ÚnextÚStopIterationÚnpÚarrayÚuint64Ú	itertoolsÚchainÚ
zeros_likeÚ	enumerate)	r   r   ÚfirstÚmultÚoutÚlast_iÚiÚaÚ	inverse_is	            úRc:\xampp_lite_8_4\www\timesheet\venv\Lib\site-packages\pandas/core/util/hashing.pyÚcombine_hash_arraysr1   /   s%  € ð-Ý�V‘”ˆˆøÝð -ð -ð -ÝŒx˜¥"¤)Ð,Ñ,Ô,Ð,Ð,Ð,ð-øøøõ Œ_˜e˜W fÑ-Ô-€FåŒ9�WÑÔ€DÝ
Œ-˜Ñ
Ô
¥¤¨8Ñ!4Ô!4Ñ
4€CØ€FÝ˜&Ñ!Ô!ð ð ‰ˆˆ1Ø ‘Mˆ	Øˆq‰ˆØˆt‰ˆØ•”	˜% )Ñ+¨iÑ7Ñ8Ô8Ñ8ˆØˆˆØ�A‰:˜Ò"Ð"Ð"Ð$<Ñ"Ô"Ð"Ø�2Œ9�UÑÔÑ€CØ€Js   ‚ ’*?¾?TÚutf8ÚobjúIndex | DataFrame | SeriesÚindexÚboolÚencodingÚstrÚhash_keyú
str | NoneÚ
categorizer   c                óâ  ‡ ‡‡‡— ddl m} ‰€t          Št          ‰ t          ¦  «        r |t          ‰ ‰‰¦  «        dd¬¦  «        S t          ‰ t          ¦  «        r=t          ‰ j        ‰‰‰¦  «         	                    dd¬¦  «        } ||‰ dd¬¦  «        }�nWt          ‰ t          ¦  «        rzt          ‰ j        ‰‰‰¦  «         	                    dd¬¦  «        }|r7ˆˆˆˆ fd	„d
D ¦   «         }t          j        |g|¦  «        }	t          |	d¦  «        } ||‰ j        dd¬¦  «        }nÈt          ‰ t          ¦  «        r”ˆˆˆfd„‰                      ¦   «         D ¦   «         }
t#          ‰ j        ¦  «        }|r7ˆˆˆˆ fd„d
D ¦   «         }|dz  }t          j        |
|¦  «        }d„ |D ¦   «         }
t          |
|¦  «        } ||‰ j        dd¬¦  «        }nt'          dt)          ‰ ¦  «        › �¦  «        ‚|S )a>  
    Return a data hash of the Index/Series/DataFrame.

    Parameters
    ----------
    obj : Index, Series, or DataFrame
    index : bool, default True
        Include the index in the hash (if Series/DataFrame).
    encoding : str, default 'utf8'
        Encoding for data & key when strings.
    hash_key : str, default _default_hash_key
        Hash_key for string key to encode.
    categorize : bool, default True
        Whether to first categorize object arrays before hashing. This is more
        efficient when the array contains duplicate values.

    Returns
    -------
    Series of uint64, same length as the object

    Examples
    --------
    >>> pd.util.hash_pandas_object(pd.Series([1, 2, 3]))
    0    14639053686158035780
    1     3869563279212530728
    2      393322362522515241
    dtype: uint64
    r   )r   Nr$   F)r   Úcopy©r=   )r5   r   r=   c              3  óT   •K  — | ]"}t          ‰j        d ‰‰‰¬¦  «        j        V — Œ#dS ©F)r5   r7   r9   r;   N©Úhash_pandas_objectr5   Ú_values©Ú.0Ú_r;   r7   r9   r3   s     €€€€r0   ú	<genexpr>z%hash_pandas_object.<locals>.<genexpr>‰   s^   øè è € ð 	ð 	ð õ #Ø”IØØ%Ø%Ø)ðñ ô ô ð	ð 	ð 	ð 	ð 	ð 	ó    ©Né   c              3  óL   •K  — | ]\  }}t          |j        ‰‰‰¦  «        V — Œd S rI   )Ú
hash_arrayrC   )rE   rF   Úseriesr;   r7   r9   s      €€€r0   rG   z%hash_pandas_object.<locals>.<genexpr>™   sK   øè è € ð 
ð 
á��6õ �v”~ x°¸:ÑFÔFð
ð 
ð 
ð 
ð 
ð 
rH   c              3  óT   •K  — | ]"}t          ‰j        d ‰‰‰¬¦  «        j        V — Œ#dS r@   rA   rD   s     €€€€r0   rG   z%hash_pandas_object.<locals>.<genexpr>Ÿ   s^   øè è € ð 	$ð 	$ð õ #Ø”IØØ%Ø%Ø)ðñ ô ô ð	$ð 	$ð 	$ð 	$ð 	$ð 	$rH   r   c              3  ó   K  — | ]}|V — Œd S rI   © )rE   Úxs     r0   rG   z%hash_pandas_object.<locals>.<genexpr>­   s"   è è € Ð)Ð)˜A�aÐ)Ð)Ð)Ð)Ð)Ð)rH   zUnexpected type for hashing )Úpandasr   Ú_default_hash_keyÚ
isinstancer   Úhash_tuplesr
   rL   rC   Úastyper   r%   r&   r1   r5   r   ÚitemsÚlenÚcolumnsÚ	TypeErrorÚtype)r3   r5   r7   r9   r;   r   ÚhÚserÚ
index_iterr   Úhashesr   Úindex_hash_generatorÚ_hashess   ` ```         r0   rB   rB   S   s¡  øøøø€ ðF ÐÐÐÐÐàÐÝ$ˆå�#•}Ñ%Ô%ð 7DØˆv•k # x°Ñ:Ô:À(ÐQVÐWÑWÔWÐWå	�C�Ñ	"Ô	"ð 4DÝ�s”{ H¨h¸
ÑCÔC×JÒJØ˜5ð Kñ 
ô 
ˆð ˆf�Q˜c¨¸Ð>Ñ>Ô>ˆ‰å	�C�Ñ	#Ô	#ð .DÝ�s”{ H¨h¸
ÑCÔC×JÒJØ˜5ð Kñ 
ô 
ˆð ð 	/ð	ð 	ð 	ð 	ð 	ð 	ð 	ð  ð	ñ 	ô 	ˆJõ ”_ a S¨*Ñ5Ô5ˆFÝ# F¨AÑ.Ô.ˆAàˆf�Q˜cœi¨x¸eÐDÑDÔDˆˆå	�C�Ñ	&Ô	&ð Dð
ð 
ð 
ð 
ð 
ð 
à ŸYšY™[œ[ð
ñ 
ô 
ˆõ ˜œÑ$Ô$ˆ	Øð 	*ð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð  ð	$ñ 	$ô 	$Ð ð ˜‰NˆIõ  ”o fÐ.BÑCÔCˆGØ)Ð) Ð)Ñ)Ô)ˆFÝ ¨	Ñ2Ô2ˆàˆf�Q˜cœi¨x¸eÐDÑDÔDˆˆåÐBµt¸C±y´yÐBÐBÑCÔCÐCà€JrH   Úvalsú+MultiIndex | Iterable[tuple[Hashable, ...]]c                óD  ‡‡‡‡— t          | ¦  «        st          d¦  «        ‚ddlmŠm} t          | t          ¦  «        s |j        | ¦  «        Šn| Šˆˆfd„t          ‰j	        ¦  «        D ¦   «         }ˆˆfd„|D ¦   «         }t          |t          |¦  «        ¦  «        }|S )a  
    Hash an MultiIndex / listlike-of-tuples efficiently.

    Parameters
    ----------
    vals : MultiIndex or listlike-of-tuples
    encoding : str, default 'utf8'
    hash_key : str, default _default_hash_key

    Returns
    -------
    ndarray[np.uint64] of hashed values
    z'must be convertible to a list-of-tuplesr   )ÚCategoricalr   c           	     ó†   •— g | ]=}‰                      ‰j        |         t          ‰j        |         d ¬¦  «        ¦  «        ‘Œ>S )F©Ú
categoriesÚordered)Ú_simple_newÚcodesr   Úlevels)rE   Úlevelre   Úmis     €€r0   ú
<listcomp>zhash_tuples.<locals>.<listcomp>×   s[   ø€ ð ð ð ð
 ð	 	×ÒØŒH�UŒOÝ¨¬	°%Ô(8À%ÐHÑHÔHñ	
ô 	
ðð ð rH   c              3  óH   •K  — | ]}|                      ‰‰d ¬¦  «        V — ŒdS )F©r7   r9   r;   N)Ú_hash_pandas_object)rE   Úcatr7   r9   s     €€r0   rG   zhash_tuples.<locals>.<genexpr>à   sM   øè è € ð ð àð 	×Ò¨¸HÐQVÐÑWÔWðð ð ð ð ð rH   )r   rZ   rR   re   r   rT   r   Úfrom_tuplesÚrangeÚnlevelsr1   rX   )	rb   r7   r9   r   Úcat_valsr_   r\   re   rn   s	    ``    @@r0   rU   rU   ·   sÿ   øøøø€ õ$ ˜ÑÔð CÝÐAÑBÔBÐBðð ð ð ð ð ð ð õ
 �d�MÑ*Ô*ð Ø#ˆZÔ# DÑ)Ô)ˆˆàˆðð ð ð ð õ
 ˜2œ:Ñ&Ô&ðñ ô €Hðð ð ð ð àðñ ô €Fõ 	˜F¥C¨¡M¤MÑ2Ô2€Aà€HrH   r   c                ó<  — t          | d¦  «        st          d¦  «        ‚t          | t          ¦  «        r|                      |||¬¦  «        S t          | t
          j        ¦  «        s%t          dt          | ¦  «        j        › d�¦  «        ‚t          | |||¦  «        S )aø  
    Given a 1d array, return an array of deterministic integers.

    Parameters
    ----------
    vals : ndarray or ExtensionArray
    encoding : str, default 'utf8'
        Encoding for data & key when strings.
    hash_key : str, default _default_hash_key
        Hash_key for string key to encode.
    categorize : bool, default True
        Whether to first categorize object arrays before hashing. This is more
        efficient when the array contains duplicate values.

    Returns
    -------
    ndarray[np.uint64, ndim=1]
        Hashed values, same length as the vals.

    Examples
    --------
    >>> pd.util.hash_array(np.array([1, 2, 3]))
    array([ 6238072747940578789, 15839785061582574730,  2185194620014831856],
      dtype=uint64)
    r   zmust pass a ndarray-likerq   z6hash_array requires np.ndarray or ExtensionArray, not z!. Use hash_pandas_object instead.)
ÚhasattrrZ   rT   r	   rr   r"   Úndarrayr[   Ú__name__Ú_hash_ndarray)rb   r7   r9   r;   s       r0   rL   rL   é   s¾   € õ> �4˜Ñ!Ô!ð 4ÝÐ2Ñ3Ô3Ð3å�$Õ)Ñ*Ô*ð 
Ø×'Ò'Ø¨¸Zð (ñ 
ô 
ð 	
õ �d�BœJÑ'Ô'ð 
åðFÝ�D‰zŒzÔ"ðFð Fð Fñ
ô 
ð 	
õ
 ˜˜x¨°:Ñ>Ô>Ð>rH   ú
np.ndarrayc                óŒ  — | j         }t          j        |t          j        ¦  «        r6t	          | j        |||¦  «        }t	          | j        |||¦  «        }|d|z  z   S |t          k    r|                      d¦  «        } �nt          |j
        t          j        t          j        f¦  «        r,|                      d¦  «                             dd¬¦  «        } �n(t          |j
        t          j        ¦  «        rA|j        dk    r6|                      d| j         j        › �¦  «                             d¦  «        } nÈ|rbdd	lm}m}m}	  |	| d¬
¦  «        \  }
}t)           ||¦  «        d¬¦  «        }|                     |
|¦  «        }|                     ||d¬¦  «        S 	 t/          | ||¦  «        } nQ# t0          $ rD t/          |                      t2          ¦  «                             t4          ¦  «        ||¦  «        } Y nw xY w| | dz	  z  } | t          j        d¦  «        z  } | | dz	  z  } | t          j        d¦  «        z  } | | dz	  z  } | S )z!
    See hash_array.__doc__.
    é   Úu8Úi8Fr>   é   Úur   )re   r   Ú	factorize)Úsortrg   rq   é   l   ¹eÉ9´Âz é   l   ëb&ì&‚&	 é   )r   r"   Ú
issubdtypeÚ
complex128r|   ÚrealÚimagr6   rV   Ú
issubclassr[   Ú
datetime64Útimedelta64ÚviewÚnumberÚitemsizerR   re   r   r„   r   rj   rr   r   rZ   r8   Úobjectr$   )rb   r7   r9   r;   r   Ú	hash_realÚ	hash_imagre   r   r„   rk   rh   rs   s                r0   r|   r|     sz  € ð ŒJ€Eõ 
„}�U�BœMÑ*Ô*ð *Ý! $¤)¨X°xÀÑLÔLˆ	Ý! $¤)¨X°xÀÑLÔLˆ	Ø˜2 	™>Ñ)Ð)ð •‚}€}Ø�{Š{˜4Ñ Ô ˆ‰Ý	�E”J¥¤µ´Ð ?Ñ	@Ô	@ð Ø�yŠy˜‰Œ×%Ò% d°Ð%Ñ7Ô7ˆ‰Ý	�E”J¥¤	Ñ	*Ô	*ð ¨u¬~ÀÒ/BÐ/BØ�yŠyÐ2˜TœZÔ0Ð2Ð2Ñ3Ô3×:Ò:¸4Ñ@Ô@ˆˆð
 ð 	ðð ð ð ð ð ð ð ð ð ð !* 	¨$°UÐ ;Ñ ;Ô ;ÑˆE�:Ý$°°°jÑ0AÔ0AÈ5ÐQÑQÔQˆEØ×)Ò)¨%°Ñ7Ô7ˆCØ×*Ò*Ø!¨HÀð +ñ ô ð ð	Ý$ T¨8°XÑ>Ô>ˆDˆDøÝð 	ð 	ð 	å$Ø—’�CÑ Ô ×'Ò'­Ñ/Ô/°¸8ñô ˆDˆDˆDð	øøøð 	ˆD�B‰JÑ€DØ�BŒIÐ(Ñ)Ô)Ñ)€DØˆD�B‰JÑ€DØ�BŒIÐ(Ñ)Ô)Ñ)€DØˆD�B‰JÑ€DØ€Ks   ÆF- Æ-AG;Ç:G;)r   r   r   r   r   r   )r3   r4   r5   r6   r7   r8   r9   r:   r;   r6   r   r   )rb   rc   r7   r8   r9   r8   r   r   )
rb   r   r7   r8   r9   r8   r;   r6   r   r   )
rb   r}   r7   r8   r9   r8   r;   r6   r   r   )&Ú__doc__Ú
__future__r   r%   Útypingr   Únumpyr"   Úpandas._libs.hashingr   Úpandas.core.dtypes.commonr   Úpandas.core.dtypes.dtypesr   Úpandas.core.dtypes.genericr   r	   r
   r   r   Úcollections.abcr   r   r   Úpandas._typingr   r   rR   r   r   r   r   rS   r1   rB   rU   rL   r|   rP   rH   r0   ú<module>r       s(  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð à 2Ð 2Ð 2Ð 2Ð 2Ð 2à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð 'Ð ð!ð !ð !ð !ðL ØØ,Øðað að að að aðL Ø%ð/ð /ð /ð /ð /ðh Ø%Øð	.?ð .?ð .?ð .?ð .?ðf Ø%Øð	9ð 9ð 9ð 9ð 9ð 9ð 9rH   