
    shi                     <	   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Jr  SSK	J
r  SSKJr  SSKJr  SSKJrJrJr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  \R@                  RB                  r"\#" \S\"-  5      r$\#" \S\"-  5      r%\R@                  RL                  r'\R@                  RP                  r)\%" \R@                  RT                  5      r+\RX                  RZ                  S:X  a  SOSr.Sr/\/r0\Rb                  Rd                  r3\R@                  Rh                  r5\R@                  Rl                  r7S r8\" \85      S 5       r9\" \:5      S 5       r;\S 5       r<\" \%\%\Rz                  \R|                  \R|                  \%\R|                  S.S9S 5       r?\S 5       r@\S 5       rA\" \%\%\%\%\%\%\R                  \R                  S.S9S 5       rC\" \R                  S5      \" \R                  S5      S 5       5       rF\" \R                  S5      S 5       rH\" \R                  S5      S 5       rJ\%RZ                  S -  S!:  a1  \%" S"5      rK\%" S#5      rL\%" S$5      rM\" S%\R                  0S9S& 5       rOO0\%" S'5      rK\%" S(5      rL\%" S)5      rM\" S%\R                  0S9S* 5       rO\" \%\%\%\%\%S+.S9S, 5       rP\" \R                  S5      S- 5       rRSS.KJSrSJTrTJUrUJVrVJWrWJXrX   " S/ S0\W5      rY " S1 S2\W5      rZ " S3 S4\W5      r[ " S5 S6\W5      r\ " S7 S8\X5      r]\" S9S:S;/5      r^S< r_\_" 5       r`\7S=;   Ga  \7S>:X  a  S?ra\R                  " \a5        \" \R                  \R                  S@.S9SA 5       rc\" \R                  \R                  \R                  \R                  \R                  \R                  SB.S9SC 5       rd\" \R                  \R                  \R                  \R                  SD.S9SE 5       re\" \R                  \R                  \R                  \R                  SD.S9SF 5       rfSG rg\g" SH5      rh\g" SI5      ri\7SH:X  a  \hO\irjOSJ\7-  ra\k" \a5      e\SK 5       rlSL rm\" \m5      SM 5       rn\" SN\%0S9SO 5       ro\" \R                  S5      SP 5       rqg)Qz&
Hash implementations for Numba types
    N)
namedtuple)ir)literal_unroll)overloadoverload_method	intrinsicregister_jitable)errors)types)	grab_bytegrab_uint64_t)	const_intget_next_intget_next_int32get_state_ptrzint%szuint%s       =   iCB c                     g N )	hash_funcs    m/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/cpython/old_hashing.py_defer_hashr   /   s        c                     ^ SU  S3mU4S jnU$ )Nzunhashable type: ''c                 .   > Uc  [        T5      eU" 5       $ r   )	TypeError)objr   err_msgs     r   implol_defer_hash.<locals>.impl7   s    G$$;r   r   )r    r   r"   r!   s      @r   ol_defer_hashr$   3   s    "3%q)G
 Kr   c                     ^ SU  S3mU4S jnU$ )Nz+No __hash__ is defined for object of type 'zn' and a generic hash() cannot be performed as there is no suitable object represention in Numba compiled code!c                 h   > [        U S5      (       a  [        U [        U S5      5      $ [        T5      e)N__hash__)hasattrr   getattrr   )r    attempt_generic_msgs    r   r"   hash_overload.<locals>.implG   s0    3
##sGC$<==/00r   r   )r    r"   r*   s     @r   hash_overloadr,   @   s(    "e $BB
1
 Kr   c                 P    [        U 5      nU[        S5      :X  a  [        S5      nU$ )N)
_Py_hash_tint)valasints     r   process_returnr4   O   s%    sOERBLr   )xymesign_PyHASH_MODULUS_PyHASH_BITSlocalsc                 X   [         R                  " U 5      (       dC  [         R                  " U 5      (       a  U S:  a  [        $ [        * $ [	        5       n[        U5      $ [        R                  " U 5      u  p#SnUS:  a  SnU* nSnU(       aR  US-  [        -  U[        S-
  -	  -  nUS-  nUS-  n[        U5      nX%-  nX-  nU[        :  a	  U[        -  nU(       a  MR  US:  a
  U[        -  nO[        S-
  SU-
  [        -  -
  nX-  [        -  U[        U-
  -	  -  nX-  n[        U5      $ )Nr      r.      g      A)npisfiniteisinf_PyHASH_INF_prng_random_hashr4   mathfrexpr:   r;   r1   )vr5   r7   r8   r9   r6   s         r   _Py_HashDoublerI   ^   s1    ;;q>>HHQKKA""#|# "#A!!$$::a=DAD	AB 	
A2g(A,2C,DD	[	RF		 A 1 	Av1a< 78
&O	#q\A-='>>A	A!r   c                 V    S n[         R                  " [         R                  5      nX24$ )Nc                 V    US   nUR                  U[        R                  " 5       5      $ )Nr   )fpextr   
DoubleType)cgctxbuilder	signatureargsr2   s        r   r"   _fpext.<locals>.impl   s"    1g}}S"--/22r   )r   float64float32)tyctxr2   r"   sigs       r   _fpextrW      s#    3 --
&C9r   c                 "    S n[        5       nX!4$ )Nc                     [        XS5      n[        [        5      n[        S:X  a  [        XU5      nU$ [	        XXES5      nU$ )Ninternalr   F)r   r   _hash_widthr   r   )rN   rO   rP   rQ   	state_ptrbitsvalues          r   r"   _prng_random_hash.<locals>.impl   sJ    !%*=	% ""59=E  !%HEr   )r0   )rU   r"   rV   s      r   rE   rE      s    $ ,C9r   )r5   p1p2p3p4r:   r;   _PyLong_SHIFTc                 j   S[         -
  n[        R                  " S5      ) U-	  nS[         -  S-   nSn[        [         -
  n[	        US-
  SS5       HW  nU[         -  nU[
        -  nXE-	  n	X-  nU[        R                  " X[         -  -	  U-  5      -  nU[
        :  d  MN  U[
        -  nMY     [        U5      $ )Nr   r   @   r?   r.   )rd   r   uint32r;   ranger:   r0   )
r2   
_tmp_shift
mask_shiftir5   rb   idxr`   ra   rc   s
             r   
_long_implrm      s     m#J<<$$3J 
}	!A 	
A

&BQUB#-/!WG	U\\3"55CDD A $ a=r   r'   c                    ^^^ [         R                  S::  a  SOSm[        R                  " S5      m[	        U SS5      (       a  [        R                  O[        R
                  mUUU4S jnU$ )Nl        r/   l         signedFc                    > T" U 5      n [        U 5      nU[        :  a'  U S:X  a  SnO@U T:X  a  [        T5      nO.[        U 5      nO"SnU S:  a  U * n Sn[        U 5      nU(       a  U* n[	        U5      $ )Nr   FT)absr:   r0   rm   r4   )r2   magretneeds_negate_BIG_HASH_I64_MIN_SIGNED_MINs       r   r"   int_hash.<locals>.impl   s|     3i#h ax# / o LQwd#S/Cdc""r   )sysmaxsizer   int64r)   uint64)r2   r"   rv   rw   rx   s     @@@r   int_hashr~      sQ     ++0BbM++12K "#x775;;U\\D#8 Kr   c                 6    U R                   S:X  a  S nU$ S nU$ )Nrf   c                     [        U 5      nU$ r   )rI   )r2   hasheds     r   r"   float_hash.<locals>.impl  s    #C(FMr   c                 Z    [         R                  " [        U 5      5      n[        U5      nU$ r   )rA   rS   rW   rI   )r2   
fpextendedr   s      r   r"   r     s#    F3K0J#J/FMr   )bitwidthr2   r"   s     r   
float_hashr     s&    
||r	 K	
 Kr   c                     S nU$ )Nc                     [        U R                  5      n[        U R                  5      nU[        U-  -   n[	        U5      $ r   )hashrealimag_PyHASH_IMAGr4   )r2   hashrealhashimagcombineds       r   r"   complex_hash.<locals>.impl#  s8    >> lX55h''r   r   r   s     r   complex_hashr   !  s    	( Kr         l   Jfq	 l   OkO8 l   g,,> r5   c                 h    U [         R                  " S5      -  U [         R                  " S5      -	  -  $ )Nr   !   r   r}   r5   s    r   _PyHASH_XXROTATEr   ;  +     ell2&&1R0@+@ABr   l   yn< l   wJ igVc                 h    U [         R                  " S5      -  U [         R                  " S5      -	  -  $ )N      r   r   s    r   r   r   D  r   r   )acclane_PyHASH_XXPRIME_5_PyHASH_XXPRIME_1tlc                 6   [        U 5      n[        n[        U 5       H>  n[        U5      nU[	        S5      :X  a    gX$[
        -  -  n[        U5      nU[        -  nM@     X![        [	        S5      -  -  -  nU[	        S5      :X  a  [        S5      $ [        U5      $ )Nr.   is5 iK*\)	lenr   r   r   _Py_uhash_t_PyHASH_XXPRIME_2r   r   r4   )tupr   r   r5   r   s        r   _tuple_hashr   J  s    
 
SB
CC Aw;r?"'''s#   ! "[%99::C
k"oj))#r   c                     S nU$ )Nc                     [        U 5      $ r   )r   )r2   s    r   r"   tuple_hash.<locals>.implc  s    3r   r   r   s     r   
tuple_hashr   a  s     Kr   )c_size_tc_ubytec_uint64	pythonapi	StructureUnionc                   $    \ rS rSrS\4S\4/rSrg)FNVi  prefixsuffixr   N)__name__
__module____qualname____firstlineno__r   _fields___static_attributes__r   r   r   r   r     s    	8	8Hr   r   c                   $    \ rS rSrS\4S\4/rSrg)SIPHASHi  k0k1r   N)r   r   r   r   r   r   r   r   r   r   r   r     s    	x	xHr   r   c                   *    \ rS rSrS\S-  4S\4/rSrg)DJBX33Ai  padding   r   r   Nr   r   r   r   r   r   r   r   r   r   r   r   r     s    	GbL!	8Hr   r   c                   *    \ rS rSrS\S-  4S\4/rSrg)EXPATi  r   r   hashsaltr   Nr   r   r   r   r   r     s    	GbL!	XHr   r   c                   <    \ rS rSrS\S-  4S\4S\4S\4S\4/r	Sr
g	)
_Py_HashSecret_ti  uc   fnvsiphashdjbx33aexpatr   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s6     
w|		G	G	%
Hr   r   _hashsecret_entrysymbolr^   c                     ^ [         R                  [        S5      n 0 mU4S jnU" SU R                  R                  5        U" SU R
                  R                  5        U" SU R
                  R                  5        T$ )zRead hash secret from the Python process

Returns
-------
info : dict
    - keys are "djbx33a_suffix", "siphash_k0", siphash_k1".
    - values are the namedtuple[symbol:str, value:int]
_Py_HashSecretc                    > SR                  U 5      n[        R                  " U5      n[        R                  " U5      n[        R
                  " X#5        [        X!S9TU '   g )Nz_numba_hashsecret_{})r   r^   )formatctypesr   	addressofll
add_symbolr   )namer2   symbol_nameaddrinfos       r   inject!_build_hashsecret.<locals>.inject  sK    ,33D9ooc"$
k(&kET
r   djbx33a_suffix
siphash_k0
siphash_k1)r   in_dllr   r   r   r   r   r   )pyhashsecretr   r   s     @r   _build_hashsecretr     sm     $**96FGLDF \11889
<--001
<--001Kr   )	siphash13	siphash24r   r   a  FNV hashing is not implemented in Numba. See PEP 456 https://www.python.org/dev/peps/pep-0456/ for rationale over not using FNV. Numba will continue to work, but hashes for built in types will be computed using siphash24. This will permit e.g. dictionaries to continue to behave as expected, however anything relying on the value of the hash opposed to hash as a derived property is likely to not work as expected.r5   bc                 l    [         R                  " X-  U [         R                  " S5      U-
  -	  -  5      $ )Nrf   r   r   s     r   _ROTATEr     s-     ||aZQELL4D4J,KLMMr   ar   cdstc                 j    X-  n X#-  n[        X5      U -  n[        X55      U-  n[        U S5      n XX#4$ )Nr   )r   r   s         r   _HALF_ROUNDr     sC     	
	AMAAMAArNQzr   v0v1v2v3c                 N    [        XX#SS5      u  pp#[        X!XSS5      u  p!pXX#4$ )Nr   r         )r   r   s       r   _SINGLE_ROUNDr     s6    
 %RRR<$RRR<r~r   c                 F    [        XX#5      u  pp#[        XX#5      u  pp#XX#4$ r   )r   r   s       r   _DOUBLE_ROUNDr   (  s.    
 'rr6&rr6r~r   c                   ^^ U S:X  a	  [         mSmOU S:X  a	  [        mSmO S5       e[        [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  S.
S9UU4S j5       nU$ )	Nr   Tr   Funreachable)
r   r   r   r   r   mir   maskjmpohexefefr<   c           	        > [         R                  " U5      S-  nU [         R                  " S5      -  nU[         R                  " S5      -  nU [         R                  " S5      -  nU[         R                  " S5      -  nSn	US:  a1  [        X)5      n
U	S-  n	US-  nX-  nT" XVXx5      u  pVpxXZ-  nUS:  a  M1  [         R                  " S5      nU	S-  n[         R                  " S	5      nUS
:  aE  Sn[         R                  " X-  5      ) nX-  [         R                  " [        X,S-   5      5      U-  -  nUS:  aE  Sn[         R                  " X-  5      ) nX-  [         R                  " [        X,S-   5      5      U-  -  nUS:  aE  Sn[         R                  " X-  5      ) nX-  [         R                  " [        X,S-   5      5      U-  -  nUS:  as  U[         R                  " S5      -  n[	        S5       HK  nUS-  n[         R                  " X-  5      ) nX-  [         R                  " [        X,U-   5      5      U-  -  nMM     US:  aE  Sn[         R                  " X-  5      ) nX-  [         R                  " [        X,S-   5      5      U-  -  nUS:  aE  Sn[         R                  " X-  5      ) nX-  [         R                  " [        X,S-   5      5      U-  -  nUS:  a*  U) nX-  [         R                  " [        X,S-   5      5      -  nXK-  nX-  nT" XVXx5      u  pVpxXT-  nX}-  nT" XVXx5      u  pVpxT" XVXx5      u  pVpxT(       a  T" XVXx5      u  pVpxXV-  Xx-  -  nU$ )N8   l   ue`5{ l   mo\I{# l   ar\c l   ser+# r   r   r?         0      (      r   r   l           r      )r   r}   r   r   rh   )r   r   srcsrc_szr   r   r   r   r   rl   r  r   boffsetr  r  r  rk   _EXTRA_ROUND_ROUNDERs                    r   _siphash_gen_siphash.<locals>._siphash;  sN    V$*Aell#566Bell#566Bell#566Bell#566BCQ;"3,q!!)""!9 Q; S!AAgG||D)H{X_55X%,,yk/J"K%(#) *{X_55X%,,yk/J"K%(#) *{X_55X%,,yk/J"K%(#) *{U\\"455qAa%C!LL99Dell9SA+3N&O),'- .A "
 {X_55X%,,yk/J"K%(#) *{X_55X%,,yk/J"K%(#) *{!{X%,,yk/J"KLFAGB%bb5NBBGBNB%bb5NBB%bb5NBB!)""!9RW%AHr   )r   r   r	   r   r}   )algr  r  r  s     @@r   _gen_siphashr  1  s    +$HLK$H L#m#1	(-(-(-',||(-',||*/,,)..3ll	"< 	
=C		
=C	J r   r   r   z'Unsupported hashing algorithm in use %sc                    ^ [        U[        R                  5      (       d  [        R                  " S5      e[
        UR                     R                  m[        R                  nU" U5      nU4S jnX44$ )z&Emit code to load the hashsecret.
    zrequires literal stringc                    > UR                   n UR                  T5      nUR                  U5      nU$ ! [         a-    [        R                  " U[        R
                  " S5      TS9n NIf = f)Nrf   r   )module
get_globalKeyErrorr   GlobalVariableIntTypeload)rN   rO   rV   rQ   modgvrH   syms          r   r"   %_inject_hashsecret_read.<locals>.impl  sd    nn	B$B LL	  	B""3

2SAB	Bs   3 4A*)A*)	
isinstancer   StringLiteralr
   TypingError_hashsecretliteral_valuer   r}   )rU   r   restyrV   r"   r$  s        @r   _inject_hashsecret_readr,    sa     dE//00  !:;;
d((
)
0
0CLLE
+C	 9r   c                 (    [         U    R                  $ r   )r)  r^   r  s    r   _load_hashsecretr.    s    t"""r   c                     S nU$ )Nc                     [        U 5      $ r   )r,  r  s    r   imp"_impl_load_hashsecret.<locals>.imp  s    &t,,r   r   )r   r1  s     r   _impl_load_hashsecretr3    s    -Jr   _hashc                    US:X  a  [        S5      $ U[        :  aX  [        S5      n[        U5       H+  nUS-  U-   [        R
                  " [        X5      5      -   nM-     X!-  nU[        S5      -  nOR[        [        R                  " [        S5      5      [        R                  " [        S5      5      X5      n[        U5      n[        U5      $ )Nr   i  r  r   r   r   )r4   _Py_HASH_CUTOFFr   rh   rA   uint8r   r.  
_siphasherr   r}   )r2   _lenr4  rl   tmps        r   _Py_HashBytesr;    s    	a   D!;CqjE)RXXi6I-JJE  	!"233&6|&DE&6|&DE$ s#%  r   c                     ^ SSK Jm  U4S jnU$ )Nr   )_kind_to_byte_widthc                    > T" U R                   5      n[        U 5      nU R                  nUS:w  a  U$ [        U R                  X-  5      $ )Nr.   )_kindr   r4  r;  _data)r2   	kindwidthr9  current_hashr=  s       r   r"   unicode_hash.<locals>.impl  sG    '		2	3xyy2 !I,<==r   )numba.cpython.unicoder=  )r2   r"   r=  s     @r   unicode_hashrE    s    9
> Kr   )r__doc__rF   numpyrA   rz   r   warningscollectionsr   llvmlite.bindingbindingr   llvmliter   numbar   numba.core.extendingr   r   r   r	   
numba.corer
   r   numba.core.unsafe.bytesr   r   numba.cpython.randomimplr   r   r   r   	hash_infowidthr[   r)   r0   r   infrD   nan_PyHASH_NANmodulusr:   intpr   r;   _PyHASH_MULTIPLIERr   int_infobits_per_digitrd   cutoffr6  	algorithm_Py_hashfunc_namer   r$   r   r,   r4   doubleintcrI   rW   rE   int32rm   IntegerBooleanr~   Floatr   Complexr   r   r   r   r}   r   r   	BaseTupler   r   r   r   r   r   r   r   r   r   r   r   r   r   r)  msgwarnr   r   r   r   r  
_siphash13
_siphash24r8  
ValueErrorr,  r.  r3  r;  UnicodeTyperE  r   r   r   <module>rm     sx     
   "    < <   <5 5
 mm!!UGk12
eX34 mmmmcmm334ZZ((B.rB !++--&&MM++ 	 
+  
$    {*$||$zz"'**-8*/**6 7+7+\    > { + + + +-8*/+++0;;9 ::: 
+
+& , ,&X j) *" 
+ ,( 1q #$89#$89#$78c5<<01C 2C $J/#J/#I.c5<<01C 2C
 k/:/: +- .	.& *- .( ) i i I u  2Xw4GH 6  ! 99
 E!' 	c^ 5<<#(<<3 4N4N 5<<#(<<#(<<#(<<#(<<#(<<3 44 ELL$)LL$)LL$)LL4 5	5
 ELL$)LL$)LL$)LL4 5	5
Yv k*Jk*J0K?ZJ 46G
GC
S/  0# 

  ';/0! 1!0 ""J/ 0r   