o
    d2                     @   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g dd ddeg d	d d
deg dd ddeg dd eg d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d+d, Zejd$d%d&edgd-d. Z d/d0 Z!d1d2 Z"ejd3eg deg d4ed5d6ej#geg d4g d7d8eg ded9ej#d:geg d;eg deedeg dg dd<e e$ e% e& e' ee( eejddddgd=d> Z)ejd3eg deg d4ed5d6ej#geg d4g d7d8eg ded9ej#d:geg d;eg deg dg dd<e$ e% e& e' ee( eejddddgd?d@ Z*ejd3eg deg de+ e( e,e-d%g dAejddBdge,e.e/dCe-dggdDdE Z0dFdG Z1dHdI Z2ejd3eg dJdeg dKdeg gdLdM Z3ejdNeg dOeg dPeejd dQdgejdRddgdSdT Z4dUdV Z5dWdX Z6dYdZ Z7d[d\ Z8d]d^ Z9d_d` Z:dadb Z;dcdd Z<ejdee-dfejdgd dhgdidj Z=dkdl Z>ejdme?dne?dogdpdqggdrdsgdtdugggdvdw Z@dxdy ZAdzd{ ZBdS )|    N)	DataFrameIndex
MultiIndexSeries)hash_tuples)
hash_arrayhash_pandas_object         r   Zint32dtype)Ng      @g      @Zfloat32)abccategory)def)TFT20130101	   )periodsz
US/Eastern)r   tz2000)paramsc                 C      | j S Nparamrequest r"   R/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/util/test_hashing.pyseries   s   r$   TFc                 C   r   r   r   r    r"   r"   r#   index#   s   r%   c                  C   s>   t tg d} ttjg dddg dd}t| | d S )NfoobarZbaz)l   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   r2   c                 C   s   | j }tt|t| d S r   )valuesr-   assert_numpy_array_equalr   )r$   Zarrr"   r"   r#   test_hash_array6   s   r5   r   Uc                 C   s8   t tg d}t tjg d| d}t|| d S )N)34All)r      r9   r   )r   r+   r,   r-   r4   )r   result1result2r"   r"   r#   test_hash_array_mixed;   s   r=   val   r'   c                 C   @   d}t jt|d t|  W d    d S 1 sw   Y  d S )Nzmust pass a ndarray-likematch)pytestraises	TypeErrorr   r>   msgr"   r"   r#   test_hash_array_errorsC      
"rH   c                  C   sP   t jdgdd} d}tjt|d t|  W d    d S 1 s!w   Y  d S )Nz2018-10-28 01:20:00zEurope/Berlin)r   zUse hash_pandas_object insteadrA   )pdZDatetimeIndexrC   rD   rE   r   )objrG   r"   r"   r#   test_hash_array_index_exceptionJ   s
   
"rL   c                  C   sz   g d} t | }tt| j}t|| dddg}tj	t
|d t | d  W d    d S 1 s6w   Y  d S )N))r
   one)r
   two)r   rM   |zobject is not iterablez&zip argument #1 must support iterationrA   r   )r   r   r   from_tuplesr3   r-   r4   joinrC   rD   rE   )Ztuplesr0   r1   rG   r"   r"   r#   test_hash_tuplesS   s   "rR   c                 C   r@   )Nz'must be convertible to a list-of-tuplesrA   )rC   rD   rE   r   rF   r"   r"   r#   test_hash_tuples_err`   rI   rS   c                  C   s6   t g d} | jdu sJ t| }|jdu sJ d S )N))v   i  )   rT   )3      )f   rV   T)r   rP   Z	is_uniquer   )mir0   r"   r"   r#   test_multiindex_uniqueg   s   rZ   c                  C   s^   t g dg dgg dg dgddgd} |  }| |s J t| jt|js-J d S )N)r   r   r   r	   )r   r
   r   r   )r   r   r   r
   Zcol1Zcol2)Zlevelscodesnames)r   Z_sort_levels_monotonicequalsr   r3   )rY   Zreconsr"   r"   r#   test_multiindex_objectso   s   r^   rK   )      ?      ?g	@r_   r`   )r`   g?gffffff
@r*   r   r   )r   Nr   xyc                 C   (   t | |d}t | |d}t|| d S Nr*   r   r-   r.   rK   r%   r   r   r"   r"   r#   test_hash_pandas_object|   s   rh   c                 C   ,   t | dd}t | dd}||k rJ d S NTr*   Fr   allrK   r   r   r"   r"   r#   ,test_hash_pandas_object_diff_index_non_empty   s   rn   r&   r   Zaabcc                 C   rd   re   rf   rg   r"   r"   r#   test_hash_pandas_index   s   ro   c                 C   rd   re   rf   )r$   r%   r   r   r"   r"   r#   test_hash_pandas_series   s   rp   c                 C   ri   rj   rk   )r$   r   r   r"   r"   r#   "test_hash_pandas_series_diff_index   s   rq   Zfloat64objectc                 C   rd   re   rf   rg   r"   r"   r#   test_hash_pandas_empty_object   s   rs   s1)r   r   r   r   )i  i  i  i  r:   
categorizec                 C   sf   |  dj| }|jtt| }t| |d}t||d}t||d}t|| t|| d S )Nr   ru   )ZastypecatZset_categorieslistreversedr   r-   r.   )rt   ru   s2Zs3Zh1Zh2Zh3r"   r"   r#   test_categorical_consistency   s   r{   c                  C   sx   t jjg dt jddddd} t| dd}t jjd	d
gt dgd} t| dd}|d
 |v s2J |d |v s:J d S )N)r   r
   r   r   r:   z
2012-01-01r?   B)r   name)
categoriesFrv   r|   r   r
   )rJ   ZCategoricalZ
from_codes
date_ranger   	Timestamp)r   r1   r0   r"   r"   r#   %test_categorical_with_nan_consistency   s   r   c                  C   sF   d} t jt| d ttd W d    d S 1 sw   Y  d S )NzUnexpected type for hashingrA   r   )rC   rD   rE   r   rJ   r   rG   r"   r"   r#   test_pandas_errors  s   "r   c                  C   s8   t td} t| dd}t| dd}||k sJ d S )Nabc9876543210123456Zhash_key9876543210123465)r   rx   r   rl   rm   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 J d S )Nr   r   ra   r   r   r   )r   r+   arangerx   r   rl   rm   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s"J |d |d ks,J |d	 |d	 ks6J d S )
Nr   za+cra   utf8)encodingutf7r   r
   r   )r   r+   r   rx   r   rm   r"   r"   r#   test_df_encoding!  s   r   c                  C   sL   d} t jt| d tttddd W d    d S 1 sw   Y  d S )Nz&key should be a 16-byte string encodedrA   r   r'   r   )rC   rD   
ValueErrorr   r   rx   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   rx   strencoder   r-   r.   r%   rK   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   rx   r   r-   r.   r   r"   r"   r#   test_alternate_encoding@  s   r   l_exp   l_addr
   c                 C   s>   d| d  | }t |d}t|d}|d |d krJ d S )Nr   r   r   r   r
   )r-   Zrands_arrayr   )r   r   lengthsr0   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asarrayrr   r,   r)   r-   r4   Zconcatenate)hashesr;   Z	expected1r<   Z	expected2r0   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dfr0   r1   r"   r"   r#   test_hash_with_tupleg  s   r   c                  C   sT   t ddg fdi fgi} tjtdd t|  W d    d S 1 s#w   Y  d S )Nr   r
   r   zunhashable type: 'list'rA   )r   rC   rD   rE   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   )rJ   utilr   r   r-   r.   r/   r"   r"   r#   test_hash_object_none_key  s   r   )Cnumpyr+   rC   ZpandasrJ   r   r   r   r   Zpandas._testingZ_testingr-   Zpandas.core.util.hashingr   Zpandas.utilr   r   Zfixturer   Ztimedelta_ranger$   r%   r2   r5   markZparametrizerr   r=   r   rH   rL   rR   rS   rZ   r^   nanZmakeMissingDataframeZmakeMixedDataFrameZmakeTimeDataFrameZmakeTimeSeriesZmakePeriodIndexrh   rn   ZmakeTimedeltaIndexZfrom_productrangeZCategoricalIndexrx   ro   rp   rq   rs   r{   r   r   r   r   r   r   r   r   r   r   tupler   r   r   r"   r"   r"   r#   <module>   s    



	






















