U
    sVc2                     @   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ejd%d&egd'd( Zejd)d*d+edgd,d- Zd.d/ Zd0d1 Zejd)d*d+edgd2d3 Z d4d5 Z!d6d7 Z"ejd8edddged9d:d;ged9d:ej#ged9d:d;gd:d<d=gd>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dddgd?e e$ e% e& e' ee( eejddddgd@dA Z)ejd8edddged9d:d;ged9d:ej#ged9d:d;gd:d<d=gd>edddgedej#dgedddgedddgedddgdddgd?e$ e% e& e' ee( eejddddgdBdC Z*ejd8edddgedddge+ e( e,e-d*d+dDdEgejdddge,e.e/dFe-dggdGdH Z0dIdJ Z1dKdL Z2ejd8eg dMd	eg dNd	eg gdOdP Z3ejdQeddddgedRdSdTdUgeejd dVdgejdWddgdXdY Z4dZd[ Z5d\d] Z6d^d_ Z7d`da Z8dbdc Z9ddde Z:dfdg Z;dhdi Z<ejdje-dkejdld dgdmdn Z=dodp Z>ejdqe?dre?dsgdtduggdvdwgdxdygggdzd{ Z@d|d} ZAd~d ZBdS )    N)	DataFrameIndex
MultiIndexSeries)hash_tuples)
hash_arrayhash_pandas_object         Zint32dtypeg      @g      @Zfloat32abccategorydefTF20130101	   )periodsz
US/Eastern)r   tz2000)paramsc                 C   s   | j S Nparamrequest r    B/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/util/test_hashing.pyseries   s    r"   c                 C   s   | j S r   r   r   r    r    r!   index#   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arraytmassert_series_equalresultexpectedr    r    r!   test_consistency(   s    r0   c                 C   s   | j }tt|t| d S r   )valuesr+   assert_numpy_array_equalr   )r"   Zarrr    r    r!   test_hash_array6   s    r3   r   Uc                 C   s<   t tdddg}t tjdddg| d}t|| d S )N34ZAllr      r   )r   r)   r*   r+   r2   )r   result1result2r    r    r!   test_hash_array_mixed;   s    r:   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   r;   msgr    r    r!   test_hash_array_errorsC   s    rD   c               	   C   s:   t jdgdd} d}tjt|d t|  W 5 Q R X d S )Nz2018-10-28 01:20:00zEurope/Berlin)r   zUse hash_pandas_object insteadr=   )pdZDatetimeIndexr?   r@   rA   r   )objrC   r    r    r!   test_hash_array_index_exceptionJ   s    rG   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
   rH   |zobject is not iterablez&zip argument #1 must support iterationr=   r   )r   r   r   from_tuplesr1   r+   r2   joinr?   r@   rA   )Ztuplesr.   r/   rC   r    r    r!   test_hash_tuplesS   s    
rL   c              	   C   s*   d}t jt|d t|  W 5 Q R X d S )Nz'must be convertible to a list-of-tuplesr=   )r?   r@   rA   r   rB   r    r    r!   test_hash_tuples_err`   s    rM   c                  C   s:   t ddddg} | jdks tt| }|jdks6td S )N)v   i  )   rN   )3      )f   rP   T)r   rJ   Z	is_uniqueAssertionErrorr   )mir.   r    r    r!   test_multiindex_uniqueg   s    rU   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equalsrS   r   r1   )rT   Zreconsr    r    r!   test_multiindex_objectso   s    rZ   rF   g      ?g      ?g	@g?gffffff
@r(   xyc                 C   s(   t | |d}t | |d}t|| d S Nr(   r   r+   r,   rF   r#   r   r   r    r    r!   test_hash_pandas_object|   s    ra   c                 C   s,   t | dd}t | dd}||k r(td S NTr(   Fr   allrS   rF   r   r   r    r    r!   ,test_hash_pandas_object_diff_index_non_empty   s    rf   r%   r&   Zaabcc                 C   s(   t | |d}t | |d}t|| d S r^   r_   r`   r    r    r!   test_hash_pandas_index   s    rg   c                 C   s(   t | |d}t | |d}t|| d S r^   r_   )r"   r#   r   r   r    r    r!   test_hash_pandas_series   s    rh   c                 C   s,   t | dd}t | dd}||k r(td S rb   rc   )r"   r   r   r    r    r!   "test_hash_pandas_series_diff_index   s    ri   Zfloat64objectc                 C   s(   t | |d}t | |d}t|| d S r^   r_   r`   r    r    r!   test_hash_pandas_empty_object   s    rk   s1i  i  i  i  r7   
categorizec                 C   sf   |  dj| }|jtt| }t| |d}t||d}t||d}t|| t|| d S )Nr   rm   )ZastypecatZset_categorieslistreversedr   r+   r,   )rl   rm   s2Zs3h1h2h3r    r    r!   test_categorical_consistency   s    rv   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   r7   z
2012-01-01r<   B)r   name)
categoriesFrn   )rE   ZCategoricalZ
from_codes
date_ranger   	TimestamprS   )r   r/   r.   r    r    r!   %test_categorical_with_nan_consistency   s     r}   c               	   C   s0   d} t jt| d ttd W 5 Q R X d S )NzUnexpected type for hashingr=   r   )r?   r@   rA   r   rE   r|   rC   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   rp   r   rd   rS   re   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   r)   arangerp   r   rd   rS   re   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   r)   r   rp   r   rS   re   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 encodedr=   r   r$   r   )r?   r@   
ValueErrorr   r   rp   r~   r    r    r!   test_invalid_key0  s    r   c                 C   s<   t tdjd}t|| d}t|| d}t|| d S )Nr   r   r(   )r   rp   strencoder   r+   r,   r#   rF   r   r   r    r    r!   test_already_encoded8  s    r   c                 C   s4   t td}t|| d}t|| d}t|| d S )Nr   r(   )r   rp   r   r+   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   rS   )r   r   lengthsr.   r    r    r!   test_same_len_hash_collisionsG  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   r)   Zasarrayrj   r*   r'   r+   r2   Zconcatenate)hashesr8   Z	expected1r9   Z	expected2r.   r    r    r!   test_hash_collisionsQ  s    r   zdata, result_data12l   .C7j| l   93B
 )r	   )r
   l   pH-\h+ l   1"Rk c                 C   s2   t d| i}t|}t|tjd}t|| d S )Ndatar   )r   r   r   r)   r'   r+   r,   )r   Zresult_dataZdfr.   r/   r    r    r!   test_hash_with_tupleg  s    r   c               	   C   s>   t ddg fdi fgi} tjtdd t|  W 5 Q R X d S )Nr   r	   r
   zunhashable type: 'list'r=   )r   r?   r@   rA   r   )Zdf3r    r    r!   test_hashable_tuple_argsx  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^	 r'   r   )rE   utilr   r   r+   r,   r-   r    r    r!   test_hash_object_none_key  s    r   )CZnumpyr)   r?   ZpandasrE   r   r   r   r   Zpandas._testingZ_testingr+   Zpandas.core.util.hashingr   Zpandas.utilr   r   Zfixturer{   Ztimedelta_ranger"   r#   r0   r3   markZparametrizerj   r:   r|   rD   rG   rL   rM   rU   rZ   nanZmakeMissingDataframeZmakeMixedDataFrameZmakeTimeDataFrameZmakeTimeSeriesZmakePeriodIndexra   rf   ZmakeTimedeltaIndexZfrom_productrangeZCategoricalIndexrp   rg   rh   ri   rk   rv   r}   r   r   r   r   r   r   r   r   r   tupler   r   r   r    r    r    r!   <module>   s   



	





 


