
    3[g>                        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
mZ ddlm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
 Zd Zd Z G d de      Z  G 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jD                  dgjF                   e$d       e$d      dddddddidgZ% ede%       ede%      d                Z&d! Z' ed"#      ed$               Z(d% Z)d& Z*e ed'd(d)g      d*               Z+ed+        Z,e ed,d-d.g      d/               Z-e eej\                  d0k(  d12      d3               Z/d4 Z0d5 Z1ed6        Z2ed7        Z3d8 Z4d9 Z5d: Z6d; Z7ed<        Z8 ed=d>d?d@ e9dA      D  cg c]!  } e	ju                  dB      j                         # c} dCfdDg dEdFdGfg      dH        Z;edI        Z<edJ        Z=edK        Z>edL        Z?dM Z@dN ZAyc c} w )Oz
Test the hashing module.
    N)ProcessPoolExecutor)Decimalhash)filter_args)Memory)raisesskipiffixtureparametrize)np
with_numpyc                     | S N )ss    S/var/www/html/bid-api/venv/lib/python3.12/site-packages/joblib/test/test_hashing.pyunicoder      s    H    c                     t               }t        d      D ]A  }t        j                         } | |  |j                  t        j                         |z
         C t	        |      S )z" Time function func on *args.
       )listrangetimeappendmin)funcargstimes_t1s        r   	time_funcr"   "   sN     FE1XYY[dTYY[2%&  u:r   c                 d    t        | g| }t        |g| }dt        ||z
        ||z   z  z  }|S )zP Return the relative time between func1 and func2 applied on
        *args.
          ?)r"   abs)func1func2r   
time_func1
time_func2relative_diffs         r   relative_timer+   -   sK     5(4(J5(4(J3zJ67(:57 8Mr   c                       e Zd Zd Zy)Klassc                     |S r   r   selfxs     r   fzKlass.f:       r   N)__name__
__module____qualname__r2   r   r   r   r-   r-   8   s    r   r-   c                       e Zd Zd Zd Zy)KlassWithCachedMethodc                 \    t        |      }|j                  | j                        | _        y )N)location)r   cacher2   )r0   cachedirmems      r   __init__zKlassWithCachedMethod.__init__@   s     h'466"r   c                     |S r   r   r/   s     r   r2   zKlassWithCachedMethod.fD   r3   r   N)r4   r5   r6   r>   r2   r   r   r   r8   r8   >   s    #r   r8         g      ?       @y      ?      ?y       @      ?abr@   )r@   r@   rC   r@   )rC   r@   rF   )rC   r@   dobj1obj2c                 H    t        |       t        |      k(  }| |u }||k(  sJ y)z!Smoke test hash on various types.Nr   )rH   rI   are_hashes_equalare_objs_identicals       r   test_trivial_hashrM   Z   s0    
 DzT$Z/1111r   c                  l   t        j                  t        d            } t        | j                        t        | j                        k(  sJ t        j                  t        d            }t        j                  t        d            }t        |j                        t        |j                        k7  sJ y )NrC   
   	   )	ioStringIOr   r   flushcollectionsdequer   extend)rC   a1a2s      r   test_hash_methodsrY   d   sx    
GCL!A=DM)))			59	%B			58	$B		?d299o---r   function)scopec                      t         j                  j                  d      } | j                  d      }|j	                         }|j	                         }|dxx   dz  cc<   |||fS )Nr   rO   rO   r@   )r   randomRandomStaterandom_samplecopy)rndarr1arr2arr3s       r   three_np_arraysrf   m   sX     ))


"CX&D99;D99;DGqLGtr   c                     | \  }}}t        j                  | d      D ];  \  }}t        |      t        |      k(  }t        j                  ||k(        }||k(  r;J  t        |      t        |j
                        k7  sJ y )NrA   )repeat)	itertoolsproductr   r   allT)rf   rc   rd   re   rH   rI   rK   are_arrays_equals           r   test_hash_numpy_arraysrn   x   s{    &D$''B
d:d366$$,/#3333 C
 :dff%%%r   c                     | \  }}}||d}||d}||d}t        |      t        |      k(  sJ t        |      t        |      k7  sJ y )N)r@   rA   r   )rf   rc   rd   re   d1d2d3s          r   test_hash_numpy_dict_of_arraysrs      sX    &D$d	Bd	Bd	B8tBx8tBxr   dtypezdatetime64[s]ztimedelta64[D]c                     t        t        j                  d            }t        j                  dd|       }t        |      |k7  sJ y )NrO   r   rt   )r   r   arange)rt   a_hasharrays      r   test_numpy_datetime_arrayrz      s:    
 "))B- FIIa5)E;&   r   c                  F   t        j                  t        j                  d      j                  d      d      d d d dd d f   } t        j                  |       }t        |       t        |      k7  sJ t        j                  |       }t        |       t        |      k7  sJ y )Nip  )  rA   r   F)orderr@   )r   asarrayrw   reshapeascontiguousarrayr   asfortranarray)rC   rD   cs      r   test_hash_numpy_noncontiguousr      s    


299T?**<8	!Qh	(A
QA7d1g
!A7d1gr   coerce_mmapTFc                 n   | j                  d      j                  }	 t        j                  |dd      }t        j                  |      }t        ||      t        ||      k(  }||k(  sJ 	 dt               v r~t        j                          yy# dt               v r~t        j                          w w xY w)zECheck that memmap and arrays hash identically if coerce_mmap is True.memmap_tempr]   zw+)shapemode)r   mN)	joinstrpathr   memmapr   r   localsgccollect)tmpdirr   filenamer   rC   rK   s         r   test_hash_memmapr      s     {{=)11HIIhhT:JJqM < <=;...&(? JJL 3&(? JJL s   AB $B4win32z5This test is not stable under windows for some reason)reasonc                     t         j                  j                  d      } | j                  d      }d }t	        |t
        |      }|dk  sJ dt        ||      z  }t        t
        |||f      }dt        ||z
        ||z   z  z  }|dk  sJ y)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                 Z    t        j                  t        |             j                         S r   )hashlibmd5
memoryview	hexdigest)r1   s    r   md5_hashz-test_hash_numpy_performance.<locals>.md5_hash   s    {{:a=)3355r   g333333?r   r$   N)r   r^   r_   r`   r+   r   r"   r%   )rb   rC   r   r*   time_hashlib	time_hashs         r   test_hash_numpy_performancer      s    ( ))


"C'"A6 "(D!4M3 y1--L$Aq	*I3y<78',68 9M3r   c                      t               } t               }t        t        | j                  g d            t        t        |j                  g d            k(  sJ y)z~ Make sure that calling the same method on two different instances
    of the same class does resolve to the same hashes.
    rE   N)r-   r   r   r2   rC   rD   s     r   test_bound_methods_hashr      sK     	AAQSS"e,-QSS"e,-. / .r   c                    t        | j                        }t        | j                        }t        t        |j                  j
                  g d            t        t        |j                  j
                  g d            k(  sJ y)z Make sure that calling the same _cached_ method on two different
    instances of the same class does resolve to the same hashes.
    rE   N)r8   r   r   r   r2   r   )r   rC   rD   s      r   test_bound_cached_methods_hashr      sa     	fnn-Afnn-AQSSXXr512QSSXXr5123 4 3r   c                  ^   t        j                  t        d      D  cg c]  } t        j                  |        c} t              }t        j                  t        d      D  cg c]  } t        j                  |        c} t              }t        |      t        |      k(  sJ yc c} w c c} w )z< Make sure that ndarrays with dtype `object' hash correctly.   rv   N)r   ry   r   rw   objectr   )irC   rD   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                      t        j                  d      } t        j                  d      }t        |       t        |      k7  sJ y )NrB   g      @)r   float64r   r   s     r   test_numpy_scalarr      s4     	

3A


3A7d1gr   c                     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}|j                  |      }|j                  |      }t        |      t        |      k(  sJ y )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)r8   r   r2   r   )r   krG   rC   rD   s        r   test_dict_hashr     s     	fnn-A$&4$&4$&4$&4$&4$&4$&4$&4$&4$&4$&4$&4$&4	)A 	
AA	AA7d1gr   c                     t        | j                        }t        g d      }|j                  |      }|j                  |      }t	        |      t	        |      k(  sJ y )Nr   )r8   r   setr2   r   )r   r   r   rC   rD   s        r   test_set_hashr     sS     	fnn-A ' 	(A 	
AA	AA7d1gr   c            	          t        t        t        d      t        d      g            t        t        t        d      t        d      g            k(  sJ y )Nr   NaN)r   r   r   r   r   r   test_set_decimal_hashr   6  sG     gaj'%.123gengaj1234 5 4r   c                      d} | di}| di}t        j                  t        j                  |            }t        ||g      t        ||g      k(  sJ y )Nfoobar)pickleloadsdumpsr   )stringrC   rD   r   s       r   test_stringr   =  sO     F	A	AV\\!_%AA<4A<'''r   c                     t        j                  d      } t        j                  d      }| |u sJ t        |       t        |      k(  sJ t        j                  t        j
                  |             }| |usJ t        |       t        |      k(  sJ t        | | g      t        ||g      k(  sJ t        | | g      t        | |g      k(  sJ t        j                  dt         j                  dfdt         j                  dfg      }t        j                  dt         j                  dfdt         j                  dfg      }t        |      t        |      k(  sJ t        j                  t        j
                  |            }||usJ t        |      t        |      k(  sJ t        ||g      t        ||g      k(  sJ t        ||g      t        ||g      k(  sJ y )Nf4name   grades)rA   )r   rt   r   r   r   r   str_r   )dt1dt2dt1_roundtrippedcomplex_dt1complex_dt2complex_dt1_roundtrippeds         r   test_numpy_dtype_picklingr   G  s    ((4.C
((4.C #::9S	!!!||FLL$56&&&&9-....c
t%57G$HIIIIc
tS*:$;<<<<((
"''2	2::t <=K ((
"''2	2::t <=K
 [ 1111%||FLL,EF#;666%= >>>>k*+t	!#;<0    k*+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{   )irA   r   )abcdesadfas aeda150553d4bb5c69f0e69d51b0e2efc                 $    t        |       |k(  sJ y r   r   )to_hashexpecteds     r   test_hashes_stay_the_samer   t  s    " =H$$$r   c                      t         j                  j                  d      } | j                  d      }t        j                  |      }t        |      t        |      k7  sJ y )Nr   r]   )r   r^   r_   r`   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                  @    t        t        j                  d             y Nr   r   r   ry   r   r   r   test_0d_arrayr     s    !r   c                      t        t        j                  d            t        t        j                  dg            k7  sJ y r   r   r   r   r   )test_0d_and_1d_array_hashing_is_differentr     s,    RXXqc] 3333r   c                      d }  |        } |        }t        d      }t        d      }	 t        ||      D ]  \  }}|j                  t        |      j	                         }|j                  t        |      j	                         }||k(  sJ |j                  t        |      j	                         }	||	k(  rJ  	 |j                          |j                          y # |j                          |j                          w xY w)Nc                     t         j                  j                  d      j                  ddd      j	                  d      t        fdt        d      D              t        d      D  cg c]"  } j                  d	      j	                  d
      $ c} j                  d	d      j	                  d
      j                  dd      j	                  d      j                  d      j	                  d
      gdt        j                  dd      j                  d      t        j                  t        j                  dd      j                  d            t        j                  dd      j                  d      d d d df   g}|S c c} w )Nr   ir|   2   )highsizez<i8c              3   ^   K   | ]$  }j                  d       j                  d       & yw)r   <f4N)randnastype).0r    r   s     r   	<genexpr>z_test_hashes_stay_the_same_with_numpy_objects.<locals>.create_objects_to_hash.<locals>.<genexpr>  s%     ?h#))A,%%e,hs   *-r   r   r   rO      )r   )ir   d   rv   r]   rA   )r   r^   r_   randintr   tupler   r   rw   r   r   )r    to_hash_listr   s     @r   create_objects_to_hashzLtest_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r@   )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 02BCLE5YYtU+224FYYtU+224FV### YYtU+224FV### D 	
 	
s   B
C 6C "C=c                      d } t        t        j                        5 }t        |        d d d        j	                  d       y # 1 sw Y   xY w)Nc                       y)Nr   r   r   r   r   non_picklablez2test_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                  v    d} t        t        |       5  ddi}t        |d       d d d        y # 1 sw Y   y xY w)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   /8)B__doc__r   r   sysr   rQ   rT   ri   r   r^   concurrent.futuresr   decimalr   joblib.hashingr   joblib.func_inspectr   joblib.memoryr   joblib.testingr	   r
   r   r   joblib.test.commonr   r   r   r"   r+   r   r-   r8   r   r   r   
input_listrM   rY   rf   rn   rs   rz   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  BFG3GaUQH!fq!fq!fjjell(m$%!n!3(+-
 VZ VZ 2 ! !2. 	z  &  W(89:! ; !   ]T5M* + $  ); < <  F/4    225( ) )X 33349!H=Hqb!((*H=13646	7
8%
8% & &   4 4 B BJ1(a >s   &G0