+
    :iK                        R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	t
^ RIHtHtHtHt ^ RIHtHt ^ RIt^ RIHtHtHt ^ RIHt ^ RIHt ^ R	IHt R
 t ! R R]4      t ! R R]4      t ! R R]4      t  ! R R] 4      t! ! R R] 4      t" ! R R] 4      t# ! R R]4      t$]%R8X  d   ]PL                  ! 4        R# R# )z*
Test hashing of various supported types.
N)defaultdict)dedent)jitconfigtypedtypeof)typesutils)TestCaseskip_unless_py10_or_laterrun_in_subprocess)compile_time_get_string_data)hashing)numpy_versionc                     \        V 4      # Nhashxs   &V/var/www/html/photoedit/myenv/lib/python3.14/site-packages/numba/tests/test_hashing.pyhash_usecaser      s    7N    c                   &   a  ] tR t^t o R tRtV tR# )TestHashingSetupc                j    R p\         P                  ! \        P                  R\	        V4      .4       R# )a  
        import sys
        import warnings
        from collections import namedtuple

        # hash_info is a StructSequence, mock as a named tuple
        fields = ["width", "modulus", "inf", "nan", "imag", "algorithm",
                  "hash_bits", "seed_bits", "cutoff"]

        hinfo = sys.hash_info
        FAKE_HASHINFO = namedtuple('FAKE_HASHINFO', fields)

        fd = dict()
        for f in fields:
            fd[f] = getattr(hinfo, f)

        fd['algorithm'] = 'fnv'

        fake_hashinfo = FAKE_HASHINFO(**fd)

        # replace the hashinfo with the fnv version
        sys.hash_info = fake_hashinfo
        with warnings.catch_warnings(record=True) as warns:
            # Cause all warnings to always be triggered.
            warnings.simplefilter("always")
            from numba import njit
            @njit
            def foo():
                hash(1)
            foo()
            assert len(warns) > 0
            expect = "FNV hashing is not implemented in Numba. See PEP 456"
            for w in warns:
                if expect in str(w.message):
                    break
            else:
                raise RuntimeError("Expected warning not found")
        z-cN)
subprocess
check_callsys
executabler   )selfworks   & r   test_warn_on_fnv!TestHashingSetup.test_warn_on_fnv!   s)    %L 	s~~tVD\BCr    N)__name__
__module____qualname____firstlineno__r"   __static_attributes____classdictcell____classdict__s   @r   r   r      s     (D (Dr   r   c                      a  ] tR t^Lt o R. R
O. RO.R. RO. RO. RO. RO. RO.R. RO. RO. RO. RO. RO./tR tR tRR ltR tR	t	V t
R# )TestHashAlgsdjba33x	siphash13	siphash24c                p   V\         P                  P                  8  d   R pM\         P                  P                  p\        P
                  '       * p\         P                  R8X  d   V'       d   ^M^ pM#\         P                  R8X  g   Q hV'       d   ^M^pV P                  V,          V,          V,          # )r/   littlebig)r   	hash_infocutoff	algorithmr   	IS_32BITS	byteorderknown_hashes)r    positionlengthr7   IS_64BITplatforms   &&&   r   get_expected_hashTestHashAlgs.get_expected_hashx   s    CMM(((!I//I'''==H$$q!H==E)*)$q!H  +H5h??r   c                    R V,          # )zprint(hash(eval(%a)))r$   )r    repr_s   &&r   get_hash_commandTestHashAlgs.get_hash_command   s    &..r   Nc                   \         P                  P                  4       pVe   \        V4      VR&   MVP	                  RR 4       \        V P                  V4      VR7      w  rEVP                  4       P                  4       p\        V4      # )NPYTHONHASHSEED)codeenv)
osenvironcopystrpopr   rC   decodestripint)r    rB   seedrH   out_stdouts   &&&    r   get_hashTestHashAlgs.get_hash   sp    jjoo$'IC !GG$d+"(=(=e(D'*,##%6{r   c           	         RpV Fq  w  r#pV P                  W#R7      ;_uu_ 4        V P                  \        V4      VR7      pV P                  V\	        V4      4      pV P                  WV4       RRR4       Ks  	  R#   + '       g   i     K  ; i)abc)	input_strrQ   )rQ   N))rX       rZ   )rX   *      )abcdefghijkr[      )
   äú∑ℇrZ      )r_   r[      )subTestrU   reprr?   lenassertEqual)r    argsrY   rQ   r;   gotexpecteds   &      r   test_against_cpython_gold&TestHashAlgs.test_against_cpython_gold   sw    > *.%IX	==mmDO$m?11(C	NK  / >= *.===s   A	A<<Br$   )\rk   rk   rk   )iL̇l   LL//+?iTSlqU:~@[ )0&Owq!~ rl   rm   )u   uC- rn   ro   )|#|   |#8
^ rp   rq   )i=վlBT='8 i\el   \e+=" )i[l$E,; iwmHloa_gv )pG   nYD~ rr   rs   )SjxY_oWs rt   ru   )     /l rv   rw   )iJkl   J:8`~ il)wJ )iQ	l .GUJG iO{l]D] r   )r%   r&   r'   r(   r:   r?   rC   rU   ri   r)   r*   r+   s   @r   r.   r.   L   so      	9N	 	 MNNQP
 	 ONPOR
)!LF@/		0 	0r   r.   c                   ^   a  ] tR t^t o R tR t]P                  3R ltR t	R t
R tRtV tR# )	BaseTestc                <    \        R R7      ! \        4      V n        R# )TnopythonN)r   r   cfuncr    s   &r   setUpBaseTest.setUp   s    $'5
r   c           	        V P                   p\        V4       F=  pV! V4      pV P                  V\        4        V P	                  V\        V4      4       K?  	  R#   \         d]   p\        R 4       \        Y4\        T4      4       \        R4       \        \        T4      \        P                  ^,
          4       ThRp?ii ; i)zval, nb_hash, hash(val)z%abs(val), hashing._PyHASH_MODULUS - 1N)r}   listassertIsInstancerP   re   r   AssertionErrorprintabsr   _PyHASH_MODULUS)r    valuesr}   valnb_hashes   &&    r   check_hash_valuesBaseTest.check_hash_values   s    

<CCjG!!'3/  $s)4	  
 " /0cDI.=>c#h 7 7! ;<s   AC&AB==Cc              #  @  "   R F  p\         P                  ! V4      pVP                  Tu;8:  d   VP                  8:  g   M K@  ^dp\	        W"V,           4      x  \	        W"^dV,          ,           ^d4      x  \	        W"^V,          ,           ^4      x  R.x  K  	  R# 5i)rZ   N)rZ   ii`  l        )npiinfominmaxrange)r    typstartinfons   &&   r   int_samplesBaseTest.int_samples   sy     -E88C=D88u00Aqy))sQw44sQw44$J .s   BBc           	         \        \        R \        \        P                  ! V4      P                  4      ,           4      ! V4      P                  V4      # )rP   )getattrr   rL   r   bitsview)r    r   values   &&&r   safe_constructBaseTest.safe_construct   s7    r53rxx}'9'9#::;EBGGLLr   c              #    "   \         P                  ! V4      p^ ^
VP                  R,          VP                  R,          3 F  p^dp\        VP                  W2P                  ,          4      pRVR,          V3 Fa  pWe8  d   K  \         P
                  ! W3WF,          ,           V4      pVP                  V4      pVx  V) x  WwP                  4       ,           x  Kc  	  K  	  RRRR\        R4      \        R4      ) .pV! V4      x  R# 5i)	rZ         ?g     @@g333333?g        infNg       g      )	r   finfor   tiny
resolutionlinspaceastypemeanfloat)r    r   r   r   r   min_stepstepas   &&      r   float_samplesBaseTest.float_samples   s     xx}TXX_dhh.?@EA499eoo&=>Hh#ox8?KKqx'7;HHSMb&&(l" 9 A #tT5<%,@
 !fs   DDc              #  <  "   V P                  V4       F  pV P                  V4       Fj  pVR \        V4       pVR \        V4       pW1! R4      V,          ,           p\        P                  ! \        P                  ! V4      4      '       d   Kf  Vx  Kl  	  K  	  R # 5i)Ny              ?)r   rd   r   anyisnan)r    r   float_tyrealimagr   s   &&&   r   complex_samplesBaseTest.complex_samples   s     &&x0D**84JSY'JSY'3r7T>) vvbhhqk**G 5 1s   BBB)r}   N)r%   r&   r'   r(   r   r   r   int64r   r   r   r   r)   r*   r+   s   @r   ry   ry      s2     6 !hh 	M.
 
r   ry   c                      a a ] tR t^t oRtV 3R ltV3R lV 3R lltR tR tR t	R t
R	 tR
 t]R 4       tRtVtV ;t# )TestNumberHashingz
Test hashing of number types.
c                   < \         R8  d<   \         R8:  d1   \        P                  ! 4       V n        \        P                  ! R4       \
        SV `  4       # r^   legacyr^   rZ   r^   r\   r   r   _get_promotion_stateinitial_state_set_promotion_statesuperr   r    	__class__s   &r   r   TestNumberHashing.setUp   ?    F"}'> "$!8!8!:D##H-w}r   c                   < V ^8  d   QhRR/# r^   returnNr$   )formatr,   s   "r   __annotate__TestNumberHashing.__annotate__        " "$ "r   c                   < \         R8  d,   \         R8:  d!   \        P                  ! V P                  4       \        SV `  4       # r^   r   r   r   r   r   r   r   tearDownr   s   &r   r   TestNumberHashing.tearDown   6    F"}'> ##D$6$67w!!r   c                    V P                  V4       FD  pV P                  VP                  \        P                  ! V4      4       V P	                  V4       KF  	  R # r   )r   re   dtyper   r   )r    r   r   s   && r   check_floatsTestNumberHashing.check_floats   sA    ##C(AQWWbhhsm4""1% )r   c                    V P                  W4       FD  pV P                  VP                  \        P                  ! V4      4       V P	                  V4       KF  	  R # r   )r   re   r   r   r   )r    r   r   r   s   &&& r   check_complexTestNumberHashing.check_complex   sA    %%c4AQWWbhhsm4""1% 5r   c                    V P                  \        P                  4       V P                  \        P                  4       R # r   )r   r   float32float64r~   s   &r   test_floatsTestNumberHashing.test_floats  s&    "**%"**%r   c                    V P                  \        P                  \        P                  4       V P                  \        P                  \        P
                  4       R # r   )r   r   	complex64r   
complex128r   r~   s   &r   test_complexTestNumberHashing.test_complex  s2    2<<42=="**5r   c                ,    V P                  R R.4       R# )FTNr   r~   s   &r   	test_boolTestNumberHashing.test_bool  s    t}-r   c           	     2   . p\         P                  \         P                  \         P                  \         P                  \         P
                  \         P                  \         P                  \         P                  3 EF  pV P                  V4       F  pV P                  V4       K  	  \         P                  ! V4      pV P                  V P                  VR4      .4       V P                  V! ^ 4      .4       R\        V4      9  pV! 4       P                  pVP                  VP                   3 F  p^V,          pTp	\#        V4       F  p
RpRpV	.pW3 F3  pW,          pV\$        P&                  8  g   K"  VP)                  V4       K5  	  V F  pV P                  V! V4      .4       K  	  V'       d6   V F/  pVVP                  8w  g   K  V P                  V! V) 4      .4       K1  	  V^ 8X  d   V	^,          ^,          p	K  V	^,	          p	K  	  K  	  EK  	  V P                  \         P                  ! R4      .4       V P                  \         P                  ! R4      .4       V P                  \         P                  ! R4      .4       V P                  \         P                  ! R4      .4       V P                  \         P                  ! R4      .4       V P                  \         P                  ! R	4      .4       V P                  \         P                  ! R
4      .4       V P                  \         P
                  ! R4      .4       V P                  \         P
                  ! R4      .4       V P                  \         P
                  ! R4      .4       R# )r\   uint   *UU*UU
    UU*UU* l    l    Nr   l l l i  i
  id  )r   int8uint8int16uint16int32uint32r   uint64r   r   r   r   rL   itemsizer   r   r   r   maxsizeappend)r    minmaxtyr   r   signedszr   shiftsyitwiddle1twiddle2valstwr   vs   &                r   	test_intsTestNumberHashing.test_ints  s   77BHHbhh		88RYY"))=B%%b)&&q) *88B<D ""D$7$7B$?#@A""BqE7+3r7*FBhh)R vA1H1H3D'2l, KK, 3 "..1w7 "!%A DHH} $ 6 6A2x @ "& AvUqLF% ' *=N 	); <=>); <=>		*< =>?		*< =>? 	)< =>?)< =>?)< =>? 567 567 567r   c                    \        ^
4       Uu. uF  p\        R4      NK  	  pp\        V Uu. uF  q0P                  V4      NK  	  up4      pV P	                  \        V4      ^4       R# u upi u upi )
   nanN)r   r   setr}   assertGreaterrd   )r    r   r   zrR   s   &    r   test_py310_nan_hash%TestNumberHashing.test_py310_nan_hashF  s[     $)9-9aU5\9-!,!Q::a=!,-3s8Q' .,s
   A*A/r   )r%   r&   r'   r(   __doc__r   r   r   r   r   r   r   r  r   r  r)   r*   __classcell__r   r,   s   @@r   r   r      sQ     " "&
&
&6.58n 
( 
( 
(r   r   c                   `   a a ] tR tRt oRtV 3R ltV3R lV 3R lltR tR tR t	R	t
VtV ;t# )
TestTupleHashingiT  z
Test hashing of tuples.
c                   < \         R8  d<   \         R8:  d1   \        P                  ! 4       V n        \        P                  ! R4       \
        SV `  4       # r   r   r   s   &r   r   TestTupleHashing.setUpY  r   r   c                   < V ^8  d   QhRR/# r   r$   )r   r,   s   "r   r   TestTupleHashing.__annotate__b  r   r   c                   < \         R8  d,   \         R8:  d!   \        P                  ! V P                  4       \        SV `  4       # r   r   r   s   &r   r   TestTupleHashing.tearDownb  r   r   c                p    V F*  pV Uu. uF
  qB! V4      NK  	  ppV P                  V4       K,  	  R # u upi r   r   )r    value_generatorsplitr   r   tupless   &&&   r   check_tuplesTestTupleHashing.check_tuplesj  s5    %F(./1eAhF/""6* &/s   3c                   a a \         P                  oV V3R  lpV V3R lpS P                  S P                  4       V4       S P                  S P                  4       V4       S P	                  . RO4       R# )c                d   < SP                  SV 4      p V S! R4      ,          V S! R4      ,          3# )z!
Split i's bits into 2 integers.
r   r   r   r   r    r   s   &r   split28TestTupleHashing.test_homogeneous_tuples.<locals>.split2r  s=     ##C+A.//.// r   c                   < SP                  SV 4      p V S! R4      ,          V S! R4      ,          V S! R4      ,          3# )z!
Split i's bits into 3 integers.
l   $$$$ l   $I$I$I$I l   IIII	 r$  r%  s   &r   split38TestTupleHashing.test_homogeneous_tuples.<locals>.split3{  sK     ##C+A.//.//.// r   N)   )rZ   )rZ   rZ   )r   )r   r+  )r`   )ra      )r   r   r   r   r   )r    r&  r)  r   s   f  @r   test_homogeneous_tuples(TestTupleHashing.test_homogeneous_tupleso  s_    ii		 	$**,f5$**,f5
 	  > 	?r   c                P    RpR pV P                  V P                  4       V4       R# )r^   c                     V R ,          pV R,          V ^ ,	          R,          ,          p\         P                  ! V4      \         P                  ! VR,          4      3# )r   l   *UU g-C6?)r   r   r   )r   r   bs   &  r   r  9TestTupleHashing.test_heterogeneous_tuples.<locals>.split  sD    &&AZQ"W
$:;A88A;

1v: 666r   Nl            )r   r   )r    modulor  s   &  r   test_heterogeneous_tuples*TestTupleHashing.test_heterogeneous_tuples  s'    	7
 	$**,e4r   r  )r%   r&   r'   r(   r  r   r   r   r/  r6  r)   r*   r  r  s   @@r   r  r  T  s-     " "+
?>5 5r   r  c                   h   a  ] tR tRt o R tR tR t]P                  ! R4      R 4       t	R t
RtV tR	# )
TestUnicodeHashingi  c                   R p\        \        V4      4       F  pV P                  VRV .4       K  	  RpVP                  \	        V4      4      p\        \        V4      4       F  pV P                  VRV .4       K  	  RpVP                  \	        V4      4      p\        \        V4      4       F  pV P                  VRV .4       K  	  RpV P                  V4       R# )abcdefghijklmnopqrstuvwxyzNu   眼u   🐍⚡ )r   rd   r   joinr   )r    kind1_stringr   sepkind2_stringkind4_stringempty_strings   &      r   test_basic_unicode%TestUnicodeHashing.test_basic_unicode  s    3s<()A""L!$4#56 * xx\ 23s<()A""L!$4#56 * xx\ 23s<()A""L!$4#56 * |,r   c                    R p\        RR7      R 4       p\        V4      R,          pV P                  VR8g  4       V P                  V! V4      V4       R# )r;  Tr{   c                     V P                   # r   )_hashr   s   &r   fn4TestUnicodeHashing.test_hash_passthrough.<locals>.fn  s    77Nr   Nr   r   r   
assertTruere   r    r>  rH  
hash_values   &   r   test_hash_passthrough(TestUnicodeHashing.test_hash_passthrough  sW     4	d		 
	 2,?C

b()L):6r   c                    R p\        RR7      R 4       p\        V4      R,          pV P                  VR8g  4       V P                  V! V4      W334       R# )r;  Tr{   c                 0    V P                   \        V 4      3# r   )rG  r   r   s   &r   rH  9TestUnicodeHashing.test_hash_passthrough_call.<locals>.fn  s    77DG##r   Nr   rJ  rL  s   &   r   test_hash_passthrough_call-TestUnicodeHashing.test_hash_passthrough_call  sX    3	d		$ 
	$ 2,?C

b()L)J+CDr   z/Needs hash computation at const unpickling timec                    \        R R7      R 4       pV! 4       p\        R4      pV P                  V\        V4      R,          4       R# )Tr{   c                  
    R p V # )r;  r$   r   s    r   rH  0TestUnicodeHashing.test_hash_literal.<locals>.fn  s    ,AHr   r;  Nr   )r   r   re   r   )r    rH  r   tmps   &   r   test_hash_literal$TestUnicodeHashing.test_hash_literal  sJ     
d		 
	 d/0;C@DFr   c                f   R  p\        RR7      ! V4      pRpV! V4      pV! V4      p\        V4      p\        V4      pV P                  VRR VRR 4       V P                  VR,          VR,          8g  4       RpV! V4      pV! V4      p\        V4      p\        V4      pV P                  Wg4       R# )c                 D    R pRpW,           pV '       d   \        V4       V# )aaaau   眼眼眼眼r   )do_hashconst1const2news   &   r   impl:TestUnicodeHashing.test_hash_on_str_creation.<locals>.impl  s"    F#F/CS	Jr   Tr{   FNr   )r   r   re   rK  )r    rb  jittedcompute_hashrh   rg   r   r3  s   &       r   test_hash_on_str_creation,TestUnicodeHashing.test_hash_on_str_creation  s    	 d#D) %\")(3)#.3B3B("2' %\")(3)#.r   r$   N)r%   r&   r'   r(   rC  rN  rS  unittestskiprY  rf  r)   r*   r+   s   @r   r9  r9    s@     -$7
E ]]DE	G F	G r   r9  c                   ,   a  ] tR tRt o R tR tRtV tR# )TestUnhashablei  c                P   \         P                  ! 4       P                  \        P                  \        P                  4      \         P
                  ! 4       P                  \        P                  4      \        P                  ! ^4      3p\        RR7      ! \        4      pV Fn  pV P                  \        4      ;_uu_ 4       pV! V4       RRR4       R\        \        V4      4       R2pV P                  V\        XP                   4      4       Kp  	  R#   + '       g   i     LS; i)ra   Tr{   Nzunhashable type: '')r   Dictemptyr   r   List
empty_listr   onesr   r   assertRaises	TypeErrorrL   r   assertIn	exception)r    unhashablesr}   r   raisesrh   s   &     r   test_hash_unhashable#TestUnhashable.test_hash_unhashable  s    zz|))%++u{{Czz|..u{{;wwqz# T"<0B""9--b	 .+Cr
O+<A>HMM(C(8(8$9:	 --s   	DD%c                    \        R R7      R 4       pV P                  \        4      ;_uu_ 4       pV! 4        RRR4       RpV P                  V\	        XP
                  4      4       R#   + '       g   i     L9; i)Tr{   c                  8    \        \        P                  4       R # r   )r   r   cosr$   r   r   foo0TestUnhashable.test_no_generic_hash.<locals>.foo  s    Lr   Nz"No __hash__ is defined for object )r   rs  rt  ru  rL   rv  )r    r~  rx  rh   s   &   r   test_no_generic_hash#TestUnhashable.test_no_generic_hash  sc     
d		 
	 y))VE * 9hF$4$4 56	 *)s   A))A9	r$   N)r%   r&   r'   r(   ry  r  r)   r*   r+   s   @r   rk  rk    s     	;7 7r   rk  __main__)'r  rh  rI   r   r   collectionsr   textwrapr   numpyr   numbar   r   r   r   
numba.corer   r	   numba.tests.supportr
   r   r   numba.cpython.unicoder   numba.cpythonr   numba.np.numpy_supportr   r   r   r.   ry   r   r  r9  rk  r%   mainr$   r   r   <module>r     s     	 
  #   , , # 4 4 ? ! 0*Dx *DZP08 P0fBx BJm( m(`B5x B5JW Wt7X 7@ zMMO r   