o
    l¨Êh\=  ã                   @   sF  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	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 ddlmZmZ dd	lmZ dd
lmZ ze dƒ W n e!yy   dd„ Z Y nw dd„ Z"dd„ Z#G dd„ de$ƒZ%G dd„ de$ƒZ&dddddddddddgddgddiddiddidej'dgj(e)d ƒe)d!ƒddd œddddid"œgZ*ed#e*ƒed$e*ƒd%d&„ ƒƒZ+d'd(„ Z,ed)d*�ed+d,„ ƒƒZ-d-d.„ Z.d/d0„ Z/eed1d2d3gƒd4d5„ ƒƒZ0ed6d7„ ƒZ1eed8d9d:gƒd;d<„ ƒƒZ2eeej3d=kd>d?�d@dA„ ƒƒZ4dBdC„ Z5dDdE„ Z6edFdG„ ƒZ7edHdI„ ƒZ8dJdK„ Z9dLdM„ Z:dNdO„ Z;dPdQ„ Z<edRdS„ ƒZ=edTdUdVdWdXœfdYdZd[dXœfd\d]d^dXœfd_d`„ e>daƒD ƒdbdcdXœfdddededfe?ƒgdgdhdXœfdig dj¢dkœdldmdXœfgƒdndo„ ƒZ@edpdq„ ƒZAedrds„ ƒZBedtdu„ ƒZCedvdw„ ƒZDdxdy„ ZEdzd{„ ZFdS )|z
Test the hashing module.
é    N)ÚDecimal©Úhash)Úfilter_args)ÚMemory)ÚraisesÚskipifÚfixtureÚparametrize)ÚnpÚ
with_numpy)ÚTransportableException)ÚPY3_OR_LATERÚstrc                 C   s   | S ©N© )Úsr   r   úJ/var/www/html/env/lib/python3.10/site-packages/joblib/test/test_hashing.pyÚ<lambda>#   s    r   c                 G   s>   t ƒ }tdƒD ]}t ¡ }| |Ž  | t ¡ | ¡ qt|ƒS )z" Time function func on *args.
    é   )ÚlistÚrangeÚtimeÚappendÚmin)ÚfuncÚargsÚtimesÚ_Út1r   r   r   Ú	time_func(   s   r    c                 G   s<   t | g|¢R Ž }t |g|¢R Ž }dt|| ƒ||   }|S )zP Return the relative time between func1 and func2 applied on
        *args.
    ç      à?)r    Úabs)Úfunc1Úfunc2r   Ú
time_func1Ú
time_func2Úrelative_diffr   r   r   Úrelative_time3   s   ÿr(   c                   @   s   e Zd Zdd„ ZdS )ÚKlassc                 C   ó   |S r   r   ©ÚselfÚxr   r   r   Úf@   ó   zKlass.fN)Ú__name__Ú
__module__Ú__qualname__r.   r   r   r   r   r)   >   s    r)   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚKlassWithCachedMethodc                 C   s   t |d�}| | j¡| _d S )N)Úcachedir)r   Úcacher.   )r,   r4   Úmemr   r   r   Ú__init__F   s   
zKlassWithCachedMethod.__init__c                 C   r*   r   r   r+   r   r   r   r.   J   r/   zKlassWithCachedMethod.fN)r0   r1   r2   r7   r.   r   r   r   r   r3   D   s    r3   é   é   g      ð?ç       @y      ð?      ð?y       @      ð?ÚaÚb©r8   )r8   r8   ©r;   r8   )r;   r8   r>   )r;   r8   ÚdÚobj1Úobj2c                 C   s(   t | ƒt |ƒk}| |u }||ksJ ‚dS )z!Smoke test hash on various types.Nr   )r@   rA   Úare_hashes_equalÚare_objs_identicalr   r   r   Útest_trivial_hash`   s   rD   c                  C   s^   t  tdƒ¡} t| jƒt| jƒksJ ‚t tdƒ¡}t tdƒ¡}t|jƒt|jƒks-J ‚d S )Nr;   é
   é	   )	ÚioÚStringIOÚunicoder   ÚflushÚcollectionsÚdequer   Úextend)r;   Úa1Úa2r   r   r   Útest_hash_methodsj   s
   rP   Úfunction)Úscopec                  C   s@   t j d¡} |  d¡}| ¡ }| ¡ }|d  d7  < |||fS )Nr   ©rE   rE   r8   )r   ÚrandomÚRandomStateÚrandom_sampleÚcopy)ÚrndÚarr1Úarr2Úarr3r   r   r   Úthree_np_arrayss   s   

r\   c                 C   sf   | \}}}t j| dd�D ]\}}t|ƒt|ƒk}t ||k¡}||ks%J ‚qt|ƒt|jƒks1J ‚d S )Nr9   )Úrepeat)Ú	itertoolsÚproductr   r   ÚallÚT)r\   rY   rZ   r[   r@   rA   rB   Úare_arrays_equalr   r   r   Útest_hash_numpy_arrays~   s   
rc   c                 C   sT   | \}}}||dœ}||dœ}||dœ}t |ƒt |ƒksJ ‚t |ƒt |ƒks(J ‚d S )N)r8   r9   r   )r\   rY   rZ   r[   Úd1Úd2Úd3r   r   r   Útest_hash_numpy_dict_of_arrays‰   s   



rg   Údtypezdatetime64[s]ztimedelta64[D]c                 C   s2   t t d¡ƒ}tjdd| d�}t |ƒ|ksJ ‚d S )NrE   r   ©rh   )r   r   Úarange)rh   Úa_hashÚarrayr   r   r   Útest_numpy_datetime_array”   s   rm   c                  C   sp   t jt  d¡ d¡dd�d d …d d…d d …f } t  | ¡}t| ƒt|ƒks'J ‚t  | ¡}t| ƒt|ƒks6J ‚d S )Nip  )éè  r9   r   ÚF)Úorderr8   )r   Úasarrayrj   ÚreshapeÚascontiguousarrayr   Úasfortranarray©r;   r<   Úcr   r   r   Útest_hash_numpy_noncontiguousž   s   ÿÿ

rw   Úcoerce_mmapTFc                 C   s‚   |   d¡j}z.tj|ddd�}t |¡}t||d�t||d�k}||ks&J ‚W dtƒ v r3~t ¡  dS dS dtƒ v r@~t ¡  w w )zECheck that memmap and arrays hash identically if coerce_mmap is True.Úmemmap_temprS   zw+)ÚshapeÚmode)rx   ÚmN)	ÚjoinÚstrpathr   Úmemmaprq   r   ÚlocalsÚgcÚcollect)Útmpdirrx   Úfilenamer|   r;   rB   r   r   r   Útest_hash_memmap©   s   


ÿ
û
ûr…   Úwin32z5This test is not stable under windows for some reason)Úreasonc                     s–   t j d¡} |  d¡}tt dƒrt j‰ nt‰ ‡ fdd„}t|t|ƒ}|dk s(J ‚dt	||ƒ }t	t|||fƒ}dt
|| ƒ||   }|dk sIJ ‚d	S )
a   Check the performance of hashing numpy arrays:

        In [22]: a = np.random.random(1000000)

        In [23]: %timeit hashlib.md5(a).hexdigest()
        100 loops, best of 3: 20.7 ms per loop

        In [24]: %timeit hashlib.md5(pickle.dumps(a, protocol=2)).hexdigest()
        1 loops, best of 3: 73.1 ms per loop

        In [25]: %timeit hashlib.md5(cPickle.dumps(a, protocol=2)).hexdigest()
        10 loops, best of 3: 53.9 ms per loop

        In [26]: %timeit hash(a)
        100 loops, best of 3: 20.8 ms per loop
    r   i@B Ú	getbufferc                    s   t  ˆ | ƒ¡ ¡ S r   )ÚhashlibÚmd5Ú	hexdigest)r-   ©rˆ   r   r   r   Ø   s    z-test_hash_numpy_performance.<locals>.<lambda>g333333Ó?r   r!   N)r   rT   rU   rV   Úhasattrrˆ   Ú
memoryviewr(   r   r    r"   )rX   r;   Úmd5_hashr'   Útime_hashlibÚ	time_hashr   rŒ   r   Útest_hash_numpy_performance½   s   

ÿr’   c                  C   s8   t ƒ } t ƒ }tt| jg dƒƒtt|jg dƒƒksJ ‚dS )z~ Make sure that calling the same method on two different instances
    of the same class does resolve to the same hashes.
    r=   N)r)   r   r   r.   ©r;   r<   r   r   r   Útest_bound_methods_hashæ   s
   ÿr”   c                 C   sD   t | jƒ}t | jƒ}tt|jjg dƒƒtt|jjg dƒƒks J ‚dS )z‡ Make sure that calling the same _cached_ method on two different
    instances of the same class does resolve to the same hashes.
    r=   N)r3   r~   r   r   r.   r   )rƒ   r;   r<   r   r   r   Útest_bound_cached_methods_hashð   s
   

ÿr•   c                  C   sP   t jdd„ tdƒD ƒtd�} t jdd„ tdƒD ƒtd�}t| ƒt|ƒks&J ‚dS )z< Make sure that ndarrays with dtype `object' hash correctly.c                 S   ó   g | ]}t  |¡‘qS r   ©r   rj   ©Ú.0Úir   r   r   Ú
<listcomp>þ   ó    z*test_hash_object_dtype.<locals>.<listcomp>é   ri   c                 S   r–   r   r—   r˜   r   r   r   r›   ÿ   rœ   N)r   rl   r   Úobjectr   r“   r   r   r   Útest_hash_object_dtypeú   s   rŸ   c                  C   s,   t  d¡} t  d¡}t| ƒt|ƒksJ ‚d S )Nr:   g      @)r   Úfloat64r   r“   r   r   r   Útest_numpy_scalar  s   

r¡   c                 C   sp   t | jƒ}dgdgdgdgdgdgdgdgdgdgdgdgdgdœ}| |¡}| |¡}t|ƒt|ƒks6J ‚d S )Né!   ©z#s12069__c_maps.nii.gzz#s12158__c_maps.nii.gzz#s12258__c_maps.nii.gzz#s12277__c_maps.nii.gzz#s12300__c_maps.nii.gzz#s12401__c_maps.nii.gzz#s12430__c_maps.nii.gzz#s13817__c_maps.nii.gzz#s13903__c_maps.nii.gzz#s13916__c_maps.nii.gzz#s13981__c_maps.nii.gzz#s13982__c_maps.nii.gzz#s13983__c_maps.nii.gz)r3   r~   r.   r   )rƒ   Úkr?   r;   r<   r   r   r   Útest_dict_hash  s$   
ô

r¥   c                 C   sB   t | jƒ}tg d¢ƒ}| |¡}| |¡}t|ƒt|ƒksJ ‚d S )Nr£   )r3   r~   Úsetr.   r   )rƒ   r¤   r   r;   r<   r   r   r   Útest_set_hash&  s
   


r§   c                   C   s8   t ttdƒtdƒgƒƒt ttdƒtdƒgƒƒksJ ‚d S )Nr   ÚNaN)r   r¦   r   r   r   r   r   Útest_set_decimal_hash?  s   ÿr©   c                  C   sD   d} | di}| di}t  t  |¡¡}t||gƒt||gƒks J ‚d S )NÚfooÚbar)ÚpickleÚloadsÚdumpsr   )Ústringr;   r<   rv   r   r   r   Útest_stringF  s
    r°   c                  C   sN   t  dt jfdt jfg¡} | }t t | ¡¡}t| |gƒt| |gƒks%J ‚d S )NÚf1Úf2)r   rh   ÚuintÚint32r¬   r­   r®   r   ru   r   r   r   Ú
test_dtypeP  s    rµ   zto_hash,expectedzThis is a string to hashÚ 80436ada343b0d79a99bfd8883a96e45Ú 71b3f47df22cb19431d85d92d0b230b2©Úpy2Úpy3u   C'est lÃ©tÃ©Ú 2ff3a25200eb6219f468de2640913c2dÚ 2d8d189e9b2b0b2e384d93c868c0e576)i@â i1Ô  i3~þÿÚ 50d81c80af05061ac4dcdc2d5edee6d6Ú e205227dd82250871fa25aa0ec690aa3c                 C   s   g | ]	}t  d ¡  ¡ ‘qS )é*   )rT   ÚRandom©r™   r   r   r   r   r›   e  s    r›   é   Ú 1a36a691b2e2ba3a9df72de3dccf17eaÚ a11ffad81f9682a7d901e6edc3d16c84r   Úabcrª   Ú adb6ba84990ee5e462dc138383f11802Ú 994f663c64ba5e64b2a85ebe75287829é{   )iñØÿÿr9   r   )ÚabcdeÚsadfasÚ fc9314a39ff75b829498380850447047Ú aeda150553d4bb5c69f0e69d51b0e2efc                 C   s8   dt jv r
t d¡ trdnd}t| ƒ|| ksJ ‚d S )NÚAPPVEYORz<Appveyor specific failure that cannot be reproducted locallyrº   r¹   )ÚosÚenvironÚpytestÚxfailr   r   )Úto_hashÚexpectedÚpy_version_strr   r   r   Útest_hashes_stay_the_same[  s   

	rÕ   c                  C   s8   t j d¡} |  d¡}t  |¡}t|ƒt|ƒksJ ‚d S )Nr   rS   )r   rT   rU   rV   rt   r   )ÚrngÚarr_cÚarr_fr   r   r   ÚAtest_hashes_are_different_between_c_and_fortran_contiguous_arrays‚  s   

rÙ   c                   C   s   t t d¡ƒ d S ©Nr   ©r   r   rl   r   r   r   r   Útest_0d_arrayŒ  s   rÜ   c                   C   s&   t t d¡ƒt t dg¡ƒksJ ‚d S rÚ   rÛ   r   r   r   r   Ú)test_0d_and_1d_array_hashing_is_different‘  s   &rÝ   c                     s   t j d¡‰ ˆ jdddd� d¡t‡ fdd„td	ƒD ƒƒ‡ fd
d„td	ƒD ƒˆ  dd	¡ d¡ˆ jddd� d¡ˆ  d¡ d¡gdœt jddd� 	d¡t  
t jddd� 	d¡¡t jddd� 	d¡d d …d d…f g} g d¢g d¢dœ}trvdnd}|| }t| |ƒD ]\}}t|ƒ|ks�J ‚q�d S )Nr¿   iüÿÿrn   é2   )ÚhighÚsizez<i8c                 3   s    � | ]}ˆ   d ¡ d¡V  qdS )r   ú<f4N©ÚrandnÚastyperÁ   ©rÖ   r   r   Ú	<genexpr>¤  s   € z?test_hashes_stay_the_same_with_numpy_objects.<locals>.<genexpr>rÂ   c                    s   g | ]
}ˆ   d ¡ d¡‘qS )r   rá   râ   rÁ   rå   r   r   r›   ¥  s    z@test_hashes_stay_the_same_with_numpy_objects.<locals>.<listcomp>r   rá   rE   é   )rà   )iûòÿÿr   éd   ri   rS   r9   )Ú 80f2387e7752abbda2658aafed49e086Ú 0d700f7f25ea670fd305e4cd93b0e8cdÚ 83a2bdf843e79e4b3e26521db73088b9Ú 63e0efd43c0a9ad92a07e8ce04338dd3Ú 03fef702946b602c852b8b4e60929914Ú 07074691e90d7098a85956367045c81eÚ d264cf79f353aa7bbfa8349e3df72d8f)Ú 10a6afc379ca2708acfbaef0ab676eabÚ 988a7114f337f381393025911ebc823bÚ c6809f4b97e35f2fa0ee8d653cbd025cÚ b3ad17348e32728a7eb9cda1e7ede438Ú 927b3e6b0b6a037e8e035bda134e0b05Ú 108f6ee98e7db19ea2006ffd208f4bf1Ú bd48ccaaff28e16e6badee81041b7180r¸   rº   r¹   )r   rT   rU   Úrandinträ   Útupler   rã   rj   rr   rt   r   Úzipr   )Úto_hash_listÚexpected_dictrÔ   Úexpected_listrÒ   rÓ   r   rå   r   Ú,test_hashes_stay_the_same_with_numpy_objects–  s*   þþ	"ïùÿrý   c                  C   sH   dd„ } t tjƒ�}t| ƒ W d   ƒ n1 sw   Y  | d¡ d S )Nc                   S   s   dS )Nr¿   r   r   r   r   r   Únon_picklableÎ  r/   z2test_hashing_pickling_error.<locals>.non_picklablezPicklingError while hashing)r   r¬   ÚPicklingErrorr   Úmatch)rþ   Úexcinfor   r   r   Útest_hashing_pickling_errorÍ  s
   
ÿr  c                  C   sJ   d} t t| d�� ddi}t|dd� W d   ƒ d S 1 sw   Y  d S )Nz!Valid options for 'hash_name' are)r   rª   r«   Úinvalid)Ú	hash_name)r   Ú
ValueErrorr   )ÚmsgÚdatar   r   r   Útest_wrong_hash_nameÖ  s
   "þr  )GÚ__doc__r   r‰   ÚsysrÎ   r�   rG   rK   r^   r¬   rT   Údecimalr   rÐ   Újoblib.hashingr   Újoblib.func_inspectr   Újoblib.memoryr   Újoblib.testingr   r   r	   r
   Újoblib.test.commonr   r   Újoblib.my_exceptionsr   Újoblib._compatr   rI   Ú	NameErrorr    r(   rž   r)   r3   r‚   r   r¦   Ú
input_listrD   rP   r\   rc   rg   rm   rw   r…   Úplatformr’   r”   r•   rŸ   r¡   r¥   r§   r©   r°   rµ   r   r  rÕ   rÙ   rÜ   rÝ   rý   r  r  r   r   r   r   Ú<module>   sê    ÿô		

&


	



ÿÿÿÿÿÿÿÿÿÿÿÿñÿ

	


6	