
    iK                        S 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	r
SSKJrJrJrJr  SSKJrJr  SSKrSSKJrJrJr  SSKJr  SS	KJr  SS
KJr  S r " S S\5      r " S S\5      r " S S\5      r  " S S\ 5      r! " S S\ 5      r" " S S\ 5      r# " S S\5      r$\%S:X  a  \RL                  " 5         gg)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                     [        U 5      $ Nhashxs    S/var/www/html/trading/venv/lib/python3.13/site-packages/numba/tests/test_hashing.pyhash_usecaser      s    7N    c                       \ rS rSrS rSrg)TestHashingSetup   c                 h    Sn[         R                  " [        R                  S[	        U5      /5        g )Na  
        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-c)
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__r&   r   r   r   r      s    (Dr   r   c                       \ rS rSr/ SQ/ SQ// SQ/ SQ/ SQ/ SQ/ SQ// S	Q/ S
Q/ SQ/ SQ/ SQ/S.rS rS rSS jrS rSr	g)TestHashAlgsL   )\r/   r/   r/   )iL̇l   LL//+?iTSlqU:~@[ )0&Owq!~ r0   r1   )u   uC- r2   r3   )|#|   |#8
^ r4   r5   )i=վlBT='8 i\el   \e+=" )i[l$E,; iwmHloa_gv )pG   nYD~ r6   r7   )SjxY_oWs r8   r9   )     /l r:   r;   )iJkl   J:8`~ il)wJ )iQ	l .GUJG iO{l]D] )djba33x	siphash13	siphash24c                 N   U[         R                  R                  :  a  SnO[         R                  R                  n[        R
                  (       + n[         R                  S:X  a  U(       a  SOSnO![         R                  S:X  d   eU(       a  SOSnU R                  U   U   U   $ )Nr<   little   r   big      )r    	hash_infocutoff	algorithmr   	IS_32BITS	byteorderknown_hashes)r"   positionlengthrG   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                     SU-  $ )Nzprint(hash(eval(%a)))r&   )r"   repr_s     r   get_hash_commandTestHashAlgs.get_hash_command   s    &..r   Nc                    [         R                  R                  5       nUb  [        U5      US'   OUR	                  SS 5        [        U R                  U5      US9u  pEUR                  5       R                  5       n[        U5      $ )NPYTHONHASHSEED)codeenv)
osenvironcopystrpopr   rS   decodestripint)r"   rR   seedrX   out_stdouts          r   get_hashTestHashAlgs.get_hash   sp    jjoo$'IC !GG$d+"(=(=e(D'*,##%6{r   c                     SnU Hc  u  p#nU R                  X#S9   U R                  [        U5      US9nU R                  U[	        U5      5      nU R                  XV5        S S S 5        Me     g ! , (       d  f       Mw  = f)N))abcr   r   )rh   *   rA   )abcdefghijkri   rD   )
   äú∑ℇr   rC   )rk   ri      )	input_strra   )ra   )subTestre   reprrO   lenassertEqual)r"   argsrm   ra   rK   gotexpecteds          r   test_against_cpython_gold&TestHashAlgs.test_against_cpython_gold   sq    > *.%IX	=mmDO$m?11(C	NK  / >= *.==s   AA--
A<	r&   r   )
r'   r(   r)   r*   rJ   rO   rS   re   ru   r+   r&   r   r   r-   r-   L   sZ     :N	 MNNQP
  ONPOR
)!LF@/		0r   r-   c                   R    \ rS rSrS rS r\R                  4S jrS r	S r
S rSrg	)
BaseTest   c                 4    [        SS9" [        5      U l        g )NTnopython)r   r   cfuncr"   s    r   setUpBaseTest.setUp   s    $'5
r   c           	      ~   U R                   n[        U5       H=  nU" U5      nU R                  U[        5         U R	                  U[        U5      5        M?     g ! [         aX  n[        S5        [        X4[        U5      5        [        S5        [        [        U5      [        R                  S-
  5        UeS nAff = f)Nzval, nb_hash, hash(val)z%abs(val), hashing._PyHASH_MODULUS - 1rA   )r}   listassertIsInstancer`   rq   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
B<$AB77B<c              #     #    S H}  n[         R                  " U5      nUR                  Us=::  a  UR                  ::  d  O  M>  Sn[	        X"U-   5      v   [	        X"SU-  -   S5      v   [	        X"SU-  -   S5      v   S/v   M     g 7f)N)r   ii`  l        d      )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           	          [        [        S[        [        R                  " U5      R                  5      -   5      " U5      R                  U5      $ )Nr`   )getattrr   r\   r   bitsview)r"   r   values      r   safe_constructBaseTest.safe_construct   s7    r53rxx}'9'9#::;EBGGLLr   c              #     #    [         R                  " U5      nSSUR                  S-  UR                  S-  4 H  nSn[        UR                  X2R                  -  5      nSUS-  U4 HT  nXe:  a  M
  [         R
                  " X3XF-  -   U5      nUR                  U5      nUv   U* v   XwR                  5       -   v   MV     M     SSSS	[        S
5      [        S
5      * /nU" U5      v   g 7f)Nr   
         ?g     @@r   g333333?g        g       g      inf)	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   C(C*c              #   (  #    U R                  U5       Hy  nU R                  U5       Ha  nUS [        U5       nUS [        U5       nX1" S5      U-  -   n[        R                  " [        R                  " U5      5      (       a  M]  Uv   Mc     M{     g 7f)Ny              ?)r   rp   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   A?BB)r}   N)r'   r(   r)   r*   r   r   r   int64r   r   r   r   r+   r&   r   r   rx   rx      s*    6 !hh 	M.
r   rx   c                   p   ^  \ rS rSrSrU 4S jrSU 4S jjrS rS rS r	S r
S	 rS
 r\S 5       rSrU =r$ )TestNumberHashing   z
Test hashing of number types.
c                    > [         S:  a:  [         S::  a0  [        R                  " 5       U l        [        R                  " S5        [
        TU ]  5       $ NrD   r   rD   rA   legacy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                    > [         S:  a*  [         S::  a   [        R                  " U R                  5        [        TU ]  5       $ Nr   r   r   r   r   r   r   tearDownr   s    r   r   TestNumberHashing.tearDown   6    F"}'> ##D$6$67w!!r   c                     U R                  U5       HD  nU R                  UR                  [        R                  " U5      5        U R	                  U5        MF     g r   )r   rq   dtyper   r   )r"   r   r   s      r   check_floatsTestNumberHashing.check_floats   sA    ##C(AQWWbhhsm4""1% )r   c                     U R                  X5       HD  nU R                  UR                  [        R                  " U5      5        U R	                  U5        MF     g r   )r   rq   r   r   r   )r"   r   r   r   s       r   check_complexTestNumberHashing.check_complex   sA    %%c4AQWWbhhsm4""1% 5r   c                     U R                  [        R                  5        U R                  [        R                  5        g r   )r   r   float32float64r~   s    r   test_floatsTestNumberHashing.test_floats  s&    "**%"**%r   c                     U R                  [        R                  [        R                  5        U R                  [        R                  [        R
                  5        g r   )r   r   	complex64r   
complex128r   r~   s    r   test_complexTestNumberHashing.test_complex  s2    2<<42=="**5r   c                 *    U R                  SS/5        g )NFTr   r~   s    r   	test_boolTestNumberHashing.test_bool  s    t}-r   c           	          / n[         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  [         R                  [         R                  4 GH  nU R                  U5       H  nU R                  U5        M     [         R                  " U5      nU R                  U R                  US5      /5        U R                  U" S5      /5        S[        U5      ;  nU" 5       R                  nUR                  UR                   4 H  nSU-  nUn	[#        U5       H  n
SnSnU	/nX4 H.  nX-  nU[$        R&                  :  d  M  UR)                  U5        M0     U H  nU R                  U" U5      /5        M     U(       a4  U H.  nUUR                  :w  d  M  U R                  U" U* 5      /5        M0     US:X  a
  U	S-  S-  n	M  U	S-	  n	M     M     GM     U R                  [         R                  " S5      /5        U R                  [         R                  " S	5      /5        U R                  [         R                  " S5      /5        U R                  [         R                  " S	5      /5        U R                  [         R                  " S
5      /5        U R                  [         R                  " S5      /5        U R                  [         R                  " S5      /5        U R                  [         R
                  " S5      /5        U R                  [         R
                  " S5      /5        U R                  [         R
                  " S5      /5        g )Nr   r   uint      *UU*UU
    UU*UU* rA   l    l    l l l i  i
  id  )r   int8uint8int16uint16int32uint32r   uint64r   r   r   r   r\   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                     [        S5       Vs/ s H  n[        S5      PM     nn[        U Vs/ s H  o0R                  U5      PM     sn5      nU R	                  [        U5      S5        g s  snf s  snf )Nr   nanrA   )r   r   setr}   assertGreaterrp   )r"   r   r   zrb   s        r   test_py310_nan_hash%TestNumberHashing.test_py310_nan_hashF  s[     $)9-9aU5\9-!,!Q::a=!,-3s8Q' .,s
   A+A0r   returnN)r'   r(   r)   r*   __doc__r   r   r   r   r   r   r   r  r   r  r+   __classcell__r   s   @r   r   r      sE    "&
&
&6.58n 
( 
(r   r   c                   N   ^  \ rS rSrSrU 4S jrS	U 4S jjrS rS rS r	Sr
U =r$ )
TestTupleHashingiT  z
Test hashing of tuples.
c                    > [         S:  a:  [         S::  a0  [        R                  " 5       U l        [        R                  " S5        [
        TU ]  5       $ r   r   r   s    r   r   TestTupleHashing.setUpY  r   r   c                    > [         S:  a*  [         S::  a   [        R                  " U R                  5        [        TU ]  5       $ r   r   r   s    r   r   TestTupleHashing.tearDownb  r   r   c                 p    U H+  nU Vs/ s H
  oB" U5      PM     nnU R                  U5        M-     g s  snf r   r   )r"   value_generatorsplitr   r   tupless         r   check_tuplesTestTupleHashing.check_tuplesj  s5    %F(./1eAhF/""6* &/s   3c                    ^ ^ [         R                  mU U4S jnU U4S jnT R                  T R                  5       U5        T R                  T R                  5       U5        T R	                  / SQ5        g )Nc                 T   > TR                  TU 5      n U T" S5      -  U T" S5      -  4$ )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                 h   > TR                  TU 5      n U T" S5      -  U T" S5      -  U T" S5      -  4$ )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   )   )r   )r   r   )r   )r   r(  )rC   )rl      )r   r   r  r   r   )r"   r#  r&  r   s   `  @r   test_homogeneous_tuples(TestTupleHashing.test_homogeneous_tupleso  s_    ii		 	$**,f5$**,f5
 	  > 	?r   c                 N    SnS nU R                  U R                  5       U5        g )Nl            c                     U S-  nU S-  U S-	  S-  -  n[         R                  " U5      [         R                  " US-  5      4$ )Nr   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   )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  r,  r4  r+   r  r  s   @r   r  r  T  s&    "+
?>5 5r   r  c                   \    \ rS rSrS rS rS r\R                  " S5      S 5       r	S r
Srg	)
TestUnicodeHashingi  c                    Sn[        [        U5      5       H  nU R                  US U /5        M     SnUR                  [	        U5      5      n[        [        U5      5       H  nU R                  US U /5        M     SnUR                  [	        U5      5      n[        [        U5      5       H  nU R                  US U /5        M     SnU R                  U5        g )Nabcdefghijklmnopqrstuvwxyzu   眼u   🐍⚡ )r   rp   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                     Sn[        SS9S 5       n[        U5      S   nU R                  US:g  5        U R                  U" U5      U5        g )Nr9  Tr{   c                     U R                   $ r   )_hashr   s    r   fn4TestUnicodeHashing.test_hash_passthrough.<locals>.fn  s    77Nr   r   r   r   
assertTruerq   r"   r<  rF  
hash_values       r   test_hash_passthrough(TestUnicodeHashing.test_hash_passthrough  sW     4	d		 
	 2,?C

b()L):6r   c                     Sn[        SS9S 5       n[        U5      S   nU R                  US:g  5        U R                  U" U5      X345        g )Nr9  Tr{   c                 0    U R                   [        U 5      4$ r   )rE  r   r   s    r   rF  9TestUnicodeHashing.test_hash_passthrough_call.<locals>.fn  s    77DG##r   r   rH  rJ  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                     [        SS9S 5       nU" 5       n[        S5      nU R                  U[        U5      S   5        g )NTr{   c                  
    Sn U $ )Nr9  r&   r   s    r   rF  0TestUnicodeHashing.test_hash_literal.<locals>.fn  s    ,AHr   r9  r   )r   r   rq   r   )r"   rF  r   tmps       r   test_hash_literal$TestUnicodeHashing.test_hash_literal  sJ     
d		 
	 d/0;C@DFr   c                 N   S n[        SS9" U5      nSnU" U5      nU" U5      n[        U5      n[        U5      nU R                  US S US S 5        U R                  US   US   :g  5        SnU" U5      nU" U5      n[        U5      n[        U5      nU R                  Xg5        g )Nc                 :    SnSnX-   nU (       a  [        U5        U$ )Naaaau   眼眼眼眼r   )do_hashconst1const2news       r   impl:TestUnicodeHashing.test_hash_on_str_creation.<locals>.impl  s"    F#F/CS	Jr   Tr{   Fr   )r   r   rq   rI  )r"   r`  jittedcompute_hashrt   rs   r   r1  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*   rA  rL  rQ  unittestskiprW  rd  r+   r&   r   r   r7  r7    s8    -$7
E ]]DE	G F	Gr   r7  c                        \ rS rSrS rS rSrg)TestUnhashablei  c                 4   [         R                  " 5       R                  [        R                  [        R                  5      [         R
                  " 5       R                  [        R                  5      [        R                  " S5      4n[        SS9" [        5      nU Hf  nU R                  [        5       nU" U5        S S S 5        S[        [        U5      5       S3nU R                  U[        WR                   5      5        Mh     g ! , (       d  f       NP= f)Nrl   Tr{   zunhashable type: '')r   Dictemptyr	   r   List
empty_listr   onesr   r   assertRaises	TypeErrorr\   r   assertIn	exception)r"   unhashablesr}   r   raisesrt   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   6	D		
D	c                     [        SS9S 5       nU R                  [        5       nU" 5         S S S 5        SnU R                  U[	        WR
                  5      5        g ! , (       d  f       N6= f)NTr{   c                  6    [        [        R                  5        g r   )r   r   cosr&   r   r   foo0TestUnhashable.test_no_generic_hash.<locals>.foo  s    Lr   z"No __hash__ is defined for object )r   rq  rr  rs  r\   rt  )r"   r|  rv  rt   s       r   test_no_generic_hash#TestUnhashable.test_no_generic_hash  s`     
d		 
	 y)VE * 9hF$4$4 56	 *)s   A
A+r&   N)r'   r(   r)   r*   rw  r~  r+   r&   r   r   ri  ri    s    	;7r   ri  __main__)'r  rf  rY   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-   rx   r   r  r7  ri  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   