
    7Th=                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJrJrJrJr  S
 rS rS r " S S\5      r  " S S\5      r!SSSSSSSSSSS/SS/SS0SS0SS0S\RD                  S/RF                  \$" S5      \$" S5      SSS.SSSS0S./r%\" S\%5      \" S\%5      S  5       5       r&S! r'\" S"S#9\S$ 5       5       r(S% r)S& r*\\" S'S(S)/5      S* 5       5       r+\S+ 5       r,\\" S,S-S./5      S/ 5       5       r-\\" \R\                  S0:H  S1S29S3 5       5       r/S4 r0S5 r1\S6 5       r2\S7 5       r3S8 r4S9 r5S: r6S; r7\S< 5       r8\" S=S>S?S@\9" SA5       V s/ s H"  n \Ru                  SB5      R                  5       PM$     sn SC4SD/ SEQSF.SG4/5      SH 5       r;\SI 5       r<\SJ 5       r=\SK 5       r>\SL 5       r?SM r@SN rAgs  sn f )Oz
Test the hashing module.
    N)ProcessPoolExecutor)Decimal)filter_argshash)Memory)np
with_numpy)fixtureparametrizeraisesskipifc                     U $ N )ss    P/var/www/auris/envauris/lib/python3.13/site-packages/joblib/test/test_hashing.pyunicoder      s    H    c                     [        5       n[        S5       HD  n[        R                  " 5       nU " U6   UR                  [        R                  " 5       U-
  5        MF     [	        U5      $ )zTime function func on *args.   )listrangetimeappendmin)funcargstimes_t1s        r   	time_funcr"   "   sL    FE1XYY[dTYY[2%&  u:r   c                 `    [        U /UQ76 n[        U/UQ76 nS[        X4-
  5      X4-   -  -  nU$ )zCReturn the relative time between func1 and func2 applied on
*args.
      ?)r"   abs)func1func2r   
time_func1
time_func2relative_diffs         r   relative_timer+   ,   sB     5(4(J5(4(J3z67:;RSTMr   c                       \ rS rSrS rSrg)Klass6   c                     U$ r   r   selfxs     r   fKlass.f7       r   r   N)__name__
__module____qualname____firstlineno__r3   __static_attributes__r   r   r   r-   r-   6   s    r   r-   c                        \ rS rSrS rS rSrg)KlassWithCachedMethod;   c                 V    [        US9nUR                  U R                  5      U l        g )N)location)r   cacher3   )r1   cachedirmems      r   __init__KlassWithCachedMethod.__init__<   s     h'466"r   c                     U$ r   r   r0   s     r   r3   KlassWithCachedMethod.f@   r5   r   )r3   N)r6   r7   r8   r9   rC   r3   r:   r   r   r   r<   r<   ;   s    #r   r<         g      ?       @y      ?      ?y       @      ?abrG   )rG   rG   rJ   rG   )rJ   rG   rM   )rJ   rG   dobj1obj2c                 F    [        U 5      [        U5      :H  nXL nX#:X  d   eg)z!Smoke test hash on various types.Nr   )rO   rP   are_hashes_equalare_objs_identicals       r   test_trivial_hashrT   m   s+    
 DzT$Z/111r   c                  v   [         R                  " [        S5      5      n [        U R                  5      [        U R                  5      :X  d   e[
        R                  " [        S5      5      n[
        R                  " [        S5      5      n[        UR                  5      [        UR                  5      :w  d   eg )NrJ   
   	   )	ioStringIOr   r   flushcollectionsdequer   extend)rJ   a1a2s      r   test_hash_methodsr`   w   sx    
GCL!A=DM)))			59	%B			58	$B		?d299o---r   function)scopec                      [         R                  R                  S5      n U R                  S5      nUR	                  5       nUR	                  5       nUS==   S-  ss'   XU4$ )Nr   rV   rV   rG   )r	   randomRandomStaterandom_samplecopy)rndarr1arr2arr3s       r   three_np_arraysrm      sV     ))


"CX&D99;D99;DGqLGtr   c                     U u  pn[         R                  " U SS9 H;  u  pE[        U5      [        U5      :H  n[        R                  " XE:H  5      nXg:X  a  M;   e   [        U5      [        UR
                  5      :w  d   eg )NrH   )repeat)	itertoolsproductr   r	   allT)rm   rj   rk   rl   rO   rP   rR   are_arrays_equals           r   test_hash_numpy_arraysru      sr    &D''B
:d366$,/333 C
 :dff%%%r   c                     U u  pnXS.nX!S.nX#S.n[        U5      [        U5      :X  d   e[        U5      [        U5      :w  d   eg )N)rG   rH   r   )rm   rj   rk   rl   d1d2d3s          r   test_hash_numpy_dict_of_arraysrz      sP    &D	B	B	B8tBx8tBxr   dtypezdatetime64[s]ztimedelta64[D]c                     [        [        R                  " S5      5      n[        R                  " SSU S9n[        U5      U:w  d   eg )NrV   r   r{   )r   r	   arange)r{   a_hasharrays      r   test_numpy_datetime_arrayr      s:    
 "))B- FIIa5)E;&   r   c                  L   [         R                  " [         R                  " S5      R                  S5      SS9S S 2S S2S S 24   n [         R                  " U 5      n[        U 5      [        U5      :w  d   e[         R                  " U 5      n[        U 5      [        U5      :w  d   eg )Nip  )  rH   r   F)orderrG   )r	   asarrayr~   reshapeascontiguousarrayr   asfortranarray)rJ   rK   cs      r   test_hash_numpy_noncontiguousr      s    


299T?**<8DQAXNA
QA7d1g
!A7d1gr   coerce_mmapTFc                 h   U R                  S5      R                  n [        R                  " USSS9n[        R                  " U5      n[        XAS9[        X1S9:H  nXQ:X  d   e S[        5       ;   a  A[        R                  " 5         gg! S[        5       ;   a  A[        R                  " 5         f f = f)zECheck that memmap and arrays hash identically if coerce_mmap is True.memmap_temprd   zw+)shapemode)r   mN)	joinstrpathr	   memmapr   r   localsgccollect)tmpdirr   filenamer   rJ   rR   s         r   test_hash_memmapr      s     {{=)11HIIhhT:JJqM;t@
 
  ...&(? JJL 3&(? JJL s   AB
 
'B1win32z5This test is not stable under windows for some reason)reasonc                     [         R                  R                  S5      n U R                  S5      nS n[	        U[
        U5      nUS:  d   eS[        X!5      -  n[        [
        XU45      nS[        XT-
  5      XT-   -  -  nUS:  d   eg)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 c                 \    [         R                  " [        U 5      5      R                  5       $ r   )hashlibmd5
memoryview	hexdigest)r2   s    r   md5_hash-test_hash_numpy_performance.<locals>.md5_hash   s    {{:a=)3355r   g333333?r   r$   N)r	   re   rf   rg   r+   r   r"   r%   )ri   rJ   r   r*   time_hashlib	time_hashs         r   test_hash_numpy_performancer      s    , ))


"C'"A6 "(D!4M3 y--L$q	*I3y78I<TUVM3r   c                      [        5       n [        5       n[        [        U R                  / S5      5      [        [        UR                  / S5      5      :X  d   eg)zuMake sure that calling the same method on two different instances
of the same class does resolve to the same hashes.
rL   N)r-   r   r   r3   rJ   rK   s     r   test_bound_methods_hashr      sD     	AAACCT*+tKR4N/OOOOr   c                    [        U R                  5      n[        U R                  5      n[        [        UR                  R
                  / S5      5      [        [        UR                  R
                  / S5      5      :X  d   eg)z~Make sure that calling the same _cached_ method on two different
instances of the same class does resolve to the same hashes.
rL   N)r<   r   r   r   r3   r   )r   rJ   rK   s      r   test_bound_cached_methods_hashr      sc     	fnn-Afnn-AACCHHb$/0DACCHHb$'5   r   c                  h   [         R                  " [        S5       V s/ s H  n [         R                  " U 5      PM     sn [        S9n[         R                  " [        S5       V s/ s H  n [         R                  " U 5      PM     sn [        S9n[        U5      [        U5      :X  d   egs  sn f s  sn f )z;Make sure that ndarrays with dtype `object' hash correctly.   r}   N)r	   r   r   r~   objectr   )irJ   rK   s      r   test_hash_object_dtyper     sx     	a11"))A,1@A
a11"))A,1@A7d1g 21s    B*% B/c                      [         R                  " S5      n [         R                  " S5      n[        U 5      [        U5      :w  d   eg )NrI   g      @)r	   float64r   r   s     r   test_numpy_scalarr     s4     	

3A


3A7d1gr   c                     [        U R                  5      nS/S/S/S/S/S/S/S/S/S/S/S/S/S.nUR                  U5      nUR                  U5      n[        U5      [        U5      :X  d   eg )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)r<   r   r3   r   )r   krN   rJ   rK   s        r   test_dict_hashr     s     	fnn-A $&$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$	A  	
AA	AA7d1gr   c                     [        U R                  5      n[        / SQ5      nUR                  U5      nUR                  U5      n[	        U5      [	        U5      :X  d   eg )Nr   )r<   r   setr3   r   )r   r   r   rJ   rK   s        r   test_set_hashr   3  sS     	fnn-A	
	A$ 	
AA	AA7d1gr   c            	          [        [        [        S5      [        S5      /5      5      [        [        [        S5      [        S5      /5      5      :X  d   eg )Nr   NaN)r   r   r   r   r   r   test_set_decimal_hashr   P  sI     WQZ012dWU^WQZ()7   r   c                      Sn U S0nU S0n[         R                  " [         R                  " U5      5      n[        X/5      [        X/5      :X  d   eg )Nfoobar)pickleloadsdumpsr   )stringrJ   rK   r   s       r   test_stringr   X  sK     F	A	AV\\!_%A<4<'''r   c                     [         R                  " S5      n [         R                  " S5      nXL d   e[        U 5      [        U5      :X  d   e[        R                  " [        R
                  " U 5      5      nXLd   e[        U 5      [        U5      :X  d   e[        X /5      [        X"/5      :X  d   e[        X /5      [        X/5      :X  d   e[         R                  " S[         R                  S4S[         R                  S4/5      n[         R                  " S[         R                  S4S[         R                  S4/5      n[        U5      [        U5      :X  d   e[        R                  " [        R
                  " U5      5      nXSLd   e[        U5      [        U5      :X  d   e[        X3/5      [        XU/5      :X  d   e[        X3/5      [        XS/5      :X  d   eg )Nf4name   grades)rH   )r	   r{   r   r   r   r   str_r   )dt1dt2dt1_roundtrippedcomplex_dt1complex_dt2complex_dt1_roundtrippeds         r   test_numpy_dtype_picklingr   b  s    ((4.C
((4.C ::9S	!!!||FLL$56&&&9-....
t%5$HIIII
tS$;<<<<((VRWWb1Hbjj$3OPQK((VRWWb1Hbjj$3OPQK [ 1111%||FLL,EF#666%= >>>>*+t	!<0    *+t	!/0   r   zto_hash,expected)zThis is a string to hash 71b3f47df22cb19431d85d92d0b230b2)u   C'est lété 2d8d189e9b2b0b2e384d93c868c0e576))i@ i1  i3~ e205227dd82250871fa25aa0ec690aa3   *    a11ffad81f9682a7d901e6edc3d16c84{   )irH   r   )abcdesadfas aeda150553d4bb5c69f0e69d51b0e2efc                 &    [        U 5      U:X  d   eg r   r   )to_hashexpecteds     r   test_hashes_stay_the_samer     s    & =H$$$r   c                      [         R                  R                  S5      n U R                  S5      n[         R                  " U5      n[        U5      [        U5      :w  d   eg )Nr   rd   )r	   re   rf   rg   r   r   )rngarr_carr_fs      r   Atest_hashes_are_different_between_c_and_fortran_contiguous_arraysr     sN     ))


"Ch'Ee$E;$u+%%%r   c                  B    [        [        R                  " S5      5        g Nr   r   r	   r   r   r   r   test_0d_arrayr     s    !r   c                      [        [        R                  " S5      5      [        [        R                  " S/5      5      :w  d   eg r   r   r   r   r   )test_0d_and_1d_array_hashing_is_differentr     s,    RXXqc] 3333r   c                     S n U " 5       nU " 5       n[        SS9n[        SS9n [        X5       H  u  pVUR                  [        U5      R	                  5       nUR                  [        U5      R	                  5       nXx:X  d   eUR                  [        U5      R	                  5       n	Xy:X  a  M   e   UR                  5         UR                  5         g ! UR                  5         UR                  5         f = f)Nc                  
  ^ [         R                  R                  S5      mTR                  SSSS9R	                  S5      [        U4S j[        S5       5       5      [        S5       V s/ s H#  n TR                  S	5      R	                  S
5      PM%     sn TR                  S	S5      R	                  S
5      TR                  SSS9R	                  S5      TR                  S5      R	                  S
5      /S.[         R                  " SSS9R                  S5      [         R                  " [         R                  " SSS9R                  S5      5      [         R                  " SSS9R                  S5      S S 2S S24   /nU$ s  sn f )Nr   ir   2   )highsizez<i8c              3   d   >#    U  H%  nTR                  S 5      R                  S5      v   M'     g7f)r   <f4N)randnastype).0r    r   s     r   	<genexpr>_test_hashes_stay_the_same_with_numpy_objects.<locals>.create_objects_to_hash.<locals>.<genexpr>  s'     ?h#))A,%%e,,hs   -0r   r   r   rV      )r   )ir   d   r}   rd   rH   )r	   re   rf   randintr   tupler   r   r~   r   r   )r    to_hash_listr   s     @r   create_objects_to_hashLtest_hashes_stay_the_same_with_numpy_objects.<locals>.create_objects_to_hash  s=   ii##B' KKDrK299%@?eAh??16q:ASYYq\  ':yyA--e4KKK,33E:IIbM((/ IIc'//9bii59AA(KLIIc'//9!RaR%@#
& ! ;s   **F rG   )max_workers)r   zipsubmitr   resultshutdown)
r   to_hash_list_oneto_hash_list_twoe1e2obj_1obj_2hash_1hash_2hash_3s
             r   ,test_hashes_stay_the_same_with_numpy_objectsr    s    "> ./-/		+B		+B 0CLEYYtU+224FYYtU+224F### YYtU+224F### D 	
 	
s   BC /C "C6c                      S n [        [        R                  5       n[        U 5        S S S 5        WR	                  S5        g ! , (       d  f       N = f)Nc                      g)Nr   r   r   r   r   non_picklable2test_hashing_pickling_error.<locals>.non_picklable  s    r   zPicklingError while hashing)r   r   PicklingErrorr   match)r  excinfos     r   test_hashing_pickling_errorr    s<     
$$	%] 
&MM/0 
&	%s   A
Ac                  t    Sn [        [        U S9   SS0n[        USS9  S S S 5        g ! , (       d  f       g = f)Nz!Valid options for 'hash_name' are)r  r   r   invalid)	hash_name)r   
ValueErrorr   )msgdatas     r   test_wrong_hash_namer    s0    
-C	
#	&u~TY' 
'	&	&s   )
7)B__doc__r[   r   r   rX   rp   r   re   sysr   concurrent.futuresr   decimalr   joblib.func_inspectr   joblib.hashingr   joblib.memoryr   joblib.test.commonr	   r
   joblib.testingr   r   r   r   r   r"   r+   r   r-   r<   r   r   r   
input_listrT   r`   rm   ru   rz   r   r   r   platformr   r   r   r   r   r   r   r   r   r   r   Randomr   r   r   r   r  r  r  )r    s   0r   <module>r+     s    	  	    
  2  +    - ? ?F 
F  

 	
 	
	 FFFJJ	fM
N
a!E#
L VZ VZ 2 ! !2. 	z  &  W(89:! ; !   ]T5M* + & LLGB	 
DP    6:( % %P H@E16q:AV]]2%%':.	
 -	02TU	%% & &   4 4 B BJ1(e ;s   )G-