Ë
    Ï�Dj¶>  ã                   óì  — 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(  d1¬2«      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	jt                  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    ú\C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\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"   "   sS   € ô ‹F€EÜ�1‹Xò 'ˆÜ�Y‰Y‹[ˆÙˆd‰Ø�‰”T—Y‘Y“[ 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Øœ3˜z¨JÑ6Ó7Ø(¨:Ñ5ñ7ñ 8€MàÐ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Ô'ˆØ—‘˜4Ÿ6™6Ó"ˆ�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   € ô
 ˜D“z¤T¨$£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   su   € ä
�‰”G˜C“LÓ!€AÜ�—‘‹=œD §¡›MÒ)Ñ)Ü	×	Ñ	œ5 ›9Ó	%€BÜ	×	Ñ	œ5 ›8Ó	$€BÜ�—	‘	‹?œd 2§9¡9›oÒ-Ñ-Ð-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Ø�9‰9‹;€DØ�9‰9‹;€DØˆƒGˆq�LƒGØ��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ò 4‰
ˆˆdÜ ›:¬¨d«Ñ3ÐÜŸ6™6 $¨$¡,Ó/ÐØÐ#3Ó3Ñ3ð4ô
 �‹:œ˜dŸf™f›Ò%Ñ%Ð%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   ƒ   sU   € Ø&Ñ€Dˆ$�à�dÑ	€BØ�dÑ	€BØ�dÑ	€Bä�‹8”t˜B“xÒÑÜ�‹8”t˜B“xÒÑÐ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Ü�I‰I�a˜ 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ƒ   € ä
�
‰
”2—9‘9˜T“?×*Ñ*¨<Ó8Øô	Ú  ! ¢Q˜hñ	(€Aä
×Ñ˜QÓ€AÜ�‹7”d˜1“gÒÑä
×Ñ˜!Ó€AÜ�‹7”d˜1“gÒÑÐ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Ñ1€HðÜ�I‰I�h h°TÔ:ˆÜ�J‰J�q‹MˆÜ  °Ô<Ü  °Ô<ñ=Ðà ;Ò.Ñ.Ð.à”&“(‰?Øô �J‰J�Lð øˆ3”&“(‰?Øô �J‰J�Lð ú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°!Ó4€MØ˜3ÒÑð ”y ¨1Ó-Ñ-€LÜœ$  A q 	Ó*€IØœ3˜y¨<Ñ7Ó8Ø'¨,Ñ6ñ8ñ 9€Mà˜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Ü”˜QŸS™S " eÓ,Ó-Ü”˜QŸS™S " 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   € ô 	˜fŸn™nÓ-€AÜ˜fŸn™nÓ-€AÜ”˜QŸS™SŸX™X r¨5Ó1Ó2Ü”˜QŸS™SŸX™X r¨5Ó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©   ñ   sp   € ô 	�‰¬¨a«Ö1 1”"—)‘)˜A•,Ò1¼Ô@€AÜ
�‰¬¨a«Ö1 1”"—)‘)˜A•,Ò1¼Ô@€Aä�‹7”d˜1“gÒÑÐùò 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Ü�‹7”d˜1“gÒÑÐ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Œ   € ô 	˜fŸn™nÓ-€Aà$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4Ø$& 4ñ	)€Að 	
�‰ˆA‹€AØ	�‰ˆA‹€Aä�‹7”d˜1“gÒÑÐ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   € ô 	˜fŸn™nÓ-€Aäò 'ó 	(€Að 	
�‰ˆA‹€AØ	�‰ˆA‹€Aä�‹7”d˜1“gÒÑÐ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   € ô ””g˜a“j¤'¨%£.Ð1Ó2Ó3Ü””g˜e“n¤g¨a£jÐ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›	Ò!Ñ!ä—|‘|¤F§L¡L°Ó$5Ó6ÐØÐ&Ñ&Ñ&Ü�‹9œÐ-Ó.Ò.Ñ.ä��c�
ÓœtÐ%5Ð7GÐ$HÓIÒIÑIÜ��c�
Óœt SÐ*:Ð$;Ó<Ò<Ñ<ä—(‘(Ø
”"—'‘'˜2Ð	 ¬2¯:©:°tÐ <Ð=ó€Kô —(‘(Ø
”"—'‘'˜2Ð	 ¬2¯:©:°tÐ <Ð=ó€Kô
 �Ó¤ [Ó 1Ò1Ñ1ä%Ÿ|™|¬F¯L©L¸Ó,EÓFÐØ#¨;Ñ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é{   )iñØÿÿrA   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,   € ä”—‘˜“Ó¤¤R§X¡X¨q¨c£]Ó 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$   øè ø€ Ò?°�#—)‘)˜A“,×%Ñ% e×,Ñ?ùs   ƒ*-rÐ   r   rì   rO   é   )rê   )iûòÿÿr   é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­  s9  ø€ Ü�i‰i×#Ñ# BÓ'ˆð �K‰K˜ D¨rˆKÓ2×9Ñ9¸%Ó@ÜÓ?´e¸A³hÔ?Ó?Ü16°q³Ö:¨AˆS�Y‰Y�q‹\× Ñ  Õ'Ò:à—y‘y  A“×-Ñ-¨eÓ4à—K‘K ¨�KÓ,×3Ñ3°EÓ:Ø—I‘I˜b“M×(Ñ(¨Ó/ðñô �I‰I�c Ô'×/Ñ/°Ó9ä×ÑœbŸi™i¨°5Ô9×AÑAÀ(ÓKÓLä�I‰I�c Ô'×/Ñ/°Ó9º!¸R¸a¸R¸%Ñ@ð#
ˆð& Ðùò! ;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ðÜÐ 0Ð2BÓCò 	$‰LˆE�5à—Y‘Yœt UÓ+×2Ñ2Ó4ˆFØ—Y‘Yœt UÓ+×2Ñ2Ó4ˆFØ˜VÒ#Ñ#ð —Y‘Yœt UÓ+×2Ñ2Ó4ˆFØ˜VÓ#Ñ#ñ	$ð 	�‰ŒØ
�‰�øð 	�‰ŒØ
�‰�ú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  â  sC   € òô 
”×$Ñ$Ó	%ð ¨Üˆ]Ô÷à‡M�MÐ/Õ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  ë  s9   € Ø
-€CÜ	”
 #Ô	&ñ (Ø�uˆ~ˆÜˆT˜YÕ'÷(÷ (ñ (ú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˜˜F GØ�3Ø�G˜a˜U Q¨ HØ�!ˆf�q˜!�f˜q !˜fØØ�j‰jØˆe�l‰lá�(‹mÙÐ$Ó%à˜!‰nØ˜! 3¨ (Ñ+ð-€
ñ ˆV�ZÓ ÙˆV�ZÓ ñ2ó !ó !ð2ò.ñ 	ˆzÔØñó ó ðò&ò ð ÙˆW�Ð(8Ð9Ó:ñ!ó ;ó ð!ð ñó ðð Ùˆ]˜T 5˜MÓ*ñó +ó ðð$ Ùˆ�‰˜Ñð );ô <ñ ó<ó ð òF/ò4ð ñó ðð ñó ðòò2ò25ò(ð ñ)ó ð)ñX Ðð3ð3ð3á49¸!³HÖ=¨q��—‘˜bÓ!×(Ñ(Õ*Ò=Ø1ð3àªÑ6Ø4ð6ð	7ó
8ñ%ó
8ð%ð ñ&ó ð&ð ñó ðð ñ4ó ð4ð ñBó ðBòJ1ó(ùòa >s   Æ'G1