U
    f/e /                      @   s.  d dl Zd dlZd dlZd dlmZmZmZmZ d dl	m
Z d dlmZ d dlmZmZ ejedddgd dd	edd
dgd dd	edddgd dd	edddgd edddgd eejdddeejddddeejdddgddd Zejddgddd  Zd!d" Zd#d$ Zd%d& Zd'd( Zejd)ejdd*d+gd,d	ejdd*d+ged	gd-d. Zejd/d0d1edgd2d3 Z d4d5 Z!ejd/d0d1edgd6d7 Z"d8d9 Z#d:d; Z$ejd<edddged=d>d?ged=d>ej%ged=d>d?gd>d@dAgdBedddgedej%dgedddgedddgeed	edddgedddgedddgdddgdCe e& e' e( e) e* e+ ee+ eejdddde,e-d0d1dDdEgejdddge,e.e/dFe-dggdGdH Z0dIdJ Z1ejd<eg dKd	eg dLd	eg gdMdN Z2ejdOeddddgedPdQdRdSgeejd d*dgejdTddgdUdV Z3dWdX Z4ejd<edgdYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9dcdd Z:dedf Z;ejdge-dhejdid dgdjdk Z<dldm Z=dndo Z>dpdq Z?dS )r    N)	DataFrameIndex
MultiIndexSeries)hash_tuples)
hash_arrayhash_pandas_object         Zint32Zdtypeg      @g      @Zfloat32abccategorydefTFZ20130101	   )periodsz
US/Eastern)r   tz2000)paramsc                 C   s   | j S Nparamrequest r   B/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/util/test_hashing.pyseries   s    r    c                 C   s   | j S r   r   r   r   r   r   index#   s    r!   c                 K   s(   t | f|}t | f|}t|| dS )z
    Check that hashing an objects produces the same value each time.

    Parameters
    ----------
    obj : object
        The object to hash.
    kwargs : kwargs
        Keyword arguments to pass to the hashing function.
    N)r   tmassert_series_equal)objkwargsr   r   r   r   r   _check_equal(   s    r&   c                 C   s>   t | ts:t| dd}t| dd}t| r:||k r:tdS )z
    Check the hash of an object with and without its index is not the same.

    Parameters
    ----------
    obj : object
        The object to hash.
    Tr!   FN)
isinstancer   r   lenallAssertionErrorr$   r   r   r   r   r   _check_not_equal_with_index8   s
    	
r-   c                  C   sD   t tdddg} ttjdddgdddddgd	}t| | d S )
Nfoobarbazl   7*  l   6jzd l   n*5uint64r   r'   )r   r   r   nparrayr"   r#   resultexpectedr   r   r   test_consistencyI   s    r7   c                 C   s   | j }tt|t| d S r   )valuesr"   assert_numpy_array_equalr   )r    Zarrr   r   r   test_hash_arrayW   s    r:   arr2   AllUc                 C   s,   t tdddg}t | }t|| d S )N34r=   )r   r2   r3   r"   r9   )r;   result1result2r   r   r   test_hash_array_mixed\   s    rC   val   r.   c              	   C   s*   d}t jt|d t|  W 5 Q R X d S )Nzmust pass a ndarray-likematch)pytestraises	TypeErrorr   rD   msgr   r   r   test_hash_array_errorsf   s    rM   c               	   C   sf   dddg} t | }tt| j}t|| dddg}tj	t
|d t | d  W 5 Q R X d S )	N)r	   one)r	   Ztwo)r
   rN   |zobject is not iterablez&zip argument #1 must support iterationrF   r   )r   r   r   from_tuplesr8   r"   r9   joinrH   rI   rJ   )Ztuplesr5   r6   rL   r   r   r   test_hash_tuplesm   s    
rR   c              	   C   s*   d}t jt|d t|  W 5 Q R X d S )Nz'must be convertible to a list-of-tuplesrF   )rH   rI   rJ   r   rK   r   r   r   test_hash_tuples_errz   s    rS   c                  C   s:   t ddddg} | jdks tt| }|jdks6td S )N)v   i  )   rT   )3      )f   rV   T)r   rP   Z	is_uniquer+   r   )mir5   r   r   r   test_multiindex_unique   s    rZ   c                  C   sj   t dddgdddggddddgddddggdd	gd
} |  }| |sLtt| jt|jsftd S )Nr   r   r   r	   r
   r   r   Zcol1Zcol2)levelscodesnames)r   Z_sort_levels_monotonicequalsr+   r   r8   )rY   Zreconsr   r   r   test_multiindex_objects   s    r_   r$   g      ?g      ?g	@g?gffffff
@r'   xyr/   r0   Zaabcc                 C   s   t | |d t|  d S Nr'   r&   r-   r$   r!   r   r   r   test_hash_pandas_object   s    rf   c                 C   s   t | |d t|  d S rc   rd   )r    r!   r   r   r   test_hash_pandas_object2   s    rg   Zfloat64objectc                 C   s   t | |d d S rc   )r&   re   r   r   r   test_hash_pandas_empty_object   s    ri   s1i  i  i  i  
categorizec                 C   sf   |  dj| }|jtt| }t| |d}t||d}t||d}t|| t|| d S )Nr   rk   )ZastypecatZset_categorieslistreversedr   r"   r#   )rj   rk   s2Zs3h1h2h3r   r   r   test_categorical_consistency   s    rt   c                  C   s   t jjddddddgt jddd	d
d} t| dd}t jjddgt dgd} t| dd}|d |kslt|d |ks|td S )Nr   r	   r
   r   r<   z
2012-01-01rE   B)r   name)
categoriesFrl   )pdZCategoricalZ
from_codes
date_ranger   	Timestampr+   )r   r6   r5   r   r   r   %test_categorical_with_nan_consistency   s     r|   c              	   C   s*   d}t jt|d t|  W 5 Q R X d S )NzUnexpected type for hashingrF   )rH   rI   rJ   r   )r$   rL   r   r   r   test_pandas_errors   s    r}   c                  C   s8   t td} t| dd}t| dd}||k s4td S )Nabc9876543210123456Zhash_key9876543210123465)r   rn   r   r*   r+   r,   r   r   r   test_hash_keys   s    r   c                  C   sD   t tdtdd} t| dd}t| dd}||k s@td S )Nr   r~   r`   r   r   r   )r   r2   arangern   r   r*   r+   r,   r   r   r   test_df_hash_keys  s    r   c                  C   sp   t tdtdd} t| dd}t| dd}|d |d ksDt|d |d ksXt|d	 |d	 ksltd S )
Nr   za+cr`   utf8)encodingutf7r   r	   r
   )r   r2   r   rn   r   r+   r,   r   r   r   test_df_encoding  s    r   c               	   C   s6   d} t jt| d tttddd W 5 Q R X d S )Nz&key should be a 16-byte string encodedrF   r~   r.   r   )rH   rI   
ValueErrorr   r   rn   )rL   r   r   r   test_invalid_key  s    r   c                 C   s$   t tdjd}t|| d d S )Nr~   r   r'   )r   rn   strencoder&   r!   r$   r   r   r   test_already_encoded$  s    r   c                 C   s   t td}t|| dd d S )Nr~   ascii)r!   r   )r   rn   r&   r   r   r   r   test_alternate_encoding*  s    r   l_exp   l_addc                 C   s>   d| d  | }t |d}t|d}|d |d kr:td S )Nr
   r   r   r   r	   )r"   Zrands_arrayr   r+   )r   r   lengthsr5   r   r   r   test_same_len_hash_collisions/  s    
r   c                  C   s   ddg} t tj| dd tdd}tjdgtjd}t|| t tj| dd tdd}tjd	gtjd}t|| t tj| tdd}t|tj||gdd
 d S )Na   Ingrid-9Z9fKIZmkO7i7Cn51Li34pJm44fgX6DYGBNj3VPlOH50m7HnBlPxfIwFMrcNJNMP6PSgLmwWnInciMWrCSAlLEvt7JkJl4IxiMrVbXSa8ZQoVaq5xoQPjltuJEfwdNlO6jo8qRRHvD8sBEBMQASrRa6TsdaPTPCBo3nwIBpE7YzzmyH0vMBhjQZLx1aCT7faSEx7PgFxQhHdKFWROcysamgy9iVj8DO2Fmwg1NNl93rIAqC3mdqfrCxrzfvIY8aJdzin2cHVzy3QUJxZgHvtUtOLxoqnUHsYbNTeq0xcLXpTZEZCxD4PGubIuCNf32c33M7HFsnjWSEjE2yVdWKhmSVodyF8hFYVmhYnMCztQnJrt3O8ZvVRXd5IKwlLexiSp4h888w7SzAIcKgc3g5XQJf6MlSMftDXm9lIsE1mJNiJEv6uY6pgvC3fUPhatlR5JPpVAHNSbSEE73MBzJrhCAbOLXQumyOXigZuPoME7QgJcBalliQol7YZ9a   Tim-b9MddTxOWW2AT1Py6vtVbZwGAmYCjbp89p8mxsiFoVX4FyDOF3wFiAkyQTUgwg9sVqVYOZo09Dh1AzhFHbgij52ylF0SEwgzjzHH8TGY8Lypart4p4onnDoDvVMBa0kdthVGKl6K0BDVGzyOXPXKpmnMF1H6rJzqHJ0HywfwS4XYpVwlAkoeNsiicHkJUFdUAhG229INzvIAiJuAHeJDUoyO4DCBqtoZ5TDend6TK7Y914yHlfH3g1WZu5LksKv68VQHJriWFYusW5e6ZZ6dKaMjTwEGuRgdT66iU5nqWTHRH8WSzpXoCFwGcTOwyuqPSe0fTe21DVtJn1FKj9F9nEnR9xOvJUO7E0piCIF4Ad9yAIDY4DBimpsTfKXCu1vdHpKYerzbndfuFe5AhfMduLYZJi5iAw8qKSwR5h86ttXV0Mc0QmXz8dsRvDgxjXSmupPxBggdlqUlC828hXiTPD7am0yETBV0F3bEtvPiNJfremszcV8NcqAoARMer   r	   r   r   l   rIU} r
   l   pX^ )Zaxis)	r   r2   Zasarrayrh   r3   r1   r"   r9   Zconcatenate)hashesrA   Z	expected1rB   Z	expected2r5   r   r   r   test_hash_collisions9  s    r   c               	   C   s   t dtdtdgi} t| }tddgtjd}t|| t dddgi}t|}td	d
gtjd}t|| t ddg fdi fgi}tj	t
dd t| W 5 Q R X d S )Ndata12l   .C7j| l   93B
 r   )r	   )r
   l   pH-\h+ l   1"Rk r	   r
   zunhashable type: 'list'rF   )r   tupler   r   r2   r1   r"   r#   rH   rI   rJ   )Zdfr5   r6   Zdf2Zdf3r   r   r   test_hash_with_tupleO  s*    r   c                  C   s8   t jjtddgd d} tddgdd}t| | d S )Nr   r   r   l   A!M| l   Z4^	 r1   r   )ry   utilr   r   r"   r#   r4   r   r   r   test_hash_object_none_keyq  s    r   )@Znumpyr2   rH   Zpandasry   r   r   r   r   Zpandas._testingZ_testingr"   Zpandas.core.util.hashingr   Zpandas.utilr   r   Zfixturerz   Ztimedelta_ranger    r!   r&   r-   r7   r:   markZparametrizer3   rh   rC   r{   rM   rR   rS   rZ   r_   nanZmakeMissingDataframeZmakeMixedDataFrameZmakeTimeDataFrameZmakeTimeSeriesZmakeTimedeltaIndexZmakePeriodIndexZfrom_productrangeZCategoricalIndexrn   rf   rg   ri   rt   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   

 &




 

"