
    xKg4j                     	   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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 ddlmZmZ dd	lmZmZ dd
lmZmZmZm Z  ejB                  dk\  Z"ejF                  jH                  Z% e&ede%z        Z' e&ede%z        Z(ejF                  jR                  Z*ejF                  jV                  Z, e(ejF                  jZ                        Z.ej^                  j`                  dk(  rdndZ1dZ2e2Z3ejh                  jj                  Z6ejF                  jn                  Z8ejF                  jr                  Z:d Z; ee;      d        Z< ee=      d        Z>ed        Z? ee(e(ej                  ej                  ej                  e(ej                  d      d        ZBed        ZCed        ZD ee(e(e(e(e(e(ej                  ej                  d      d        ZF eej                  d       eej                  d      d               ZI eej                  d      d        ZK eej                  d      d         ZMe(j`                  d!z  d"kD  r4 e(d#      ZN e(d$      ZO e(d%      ZP ed&ej                  i      d'        ZRn3 e(d(      ZN e(d)      ZO e(d*      ZP ed&ej                  i      d+        ZR ee(e(e(e(e(d,      d-        ZS eej                  d      d.        ZUdd/lmVZVmWZWmXZXmYZYmZZZm[Z[  G d0 d1eZ      Z\ G d2 d3eZ      Z] G d4 d5eZ      Z^ G d6 d7eZ      Z_ G d8 d9e[      Z` ed:d;d<g      Zad= Zb eb       Zce:d>v r&e:d?k(  rd@Zd ej                  ed        eej                  ej                  dA      dB        Zf eej                  ej                  ej                  ej                  ej                  ej                  dC      dD        Zg eej                  ej                  ej                  ej                  dE      dF        Zh eej                  ej                  ej                  ej                  dE      dG        ZidH Zj ejdI      Zk ejdJ      Zle:dIk(  reknelZmndKe:z  Zd ened      edL        ZodM Zp eep      dN        Zq edOe(i      dP        Zr eej                  d      dQ        Zty)Rz&
Hash implementations for Numba types
    N)
namedtuple)ir)literal_unroll)overloadoverload_method	intrinsicregister_jitable)errors)typesutils)	grab_bytegrab_uint64_t)	const_intget_next_intget_next_int32get_state_ptr)   
   zint%szuint%s       =   iCB c                      y N )	hash_funcs    Y/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cpython/hashing.py_defer_hashr   1   s        c                     d|  dfd}|S )Nzunhashable type: ''c                 ,    |t               |       S r   )	TypeError)objr   err_msgs     r   implzol_defer_hash.<locals>.impl9   s    G$$;r   r   )r#   r   r%   r$   s      @r   ol_defer_hashr&   5   s    "3%q)G
 Kr   c                     d|  dfd}|S )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                 ^    t        | d      rt        | t        | d            S t              )N__hash__)hasattrr   getattrr"   )r#   attempt_generic_msgs    r   r%   zhash_overload.<locals>.implI   s-    3
#sGC$<==/00r   r   )r#   r%   r,   s     @r   hash_overloadr-   B   s(    "e $BB
1
 Kr   c                 N    t        |       }|t        d      k(  rt        d      }|S )N)
_Py_hash_tint)valasints     r   process_returnr5   Q   s%    sOERBLr   )xymesign_PyHASH_MODULUS_PyHASH_BITSlocalsc                 B   t        j                  |       sHt        j                  |       r| dkD  rt        S t         S t        rt               }t        |      S t        S t        j                  |       \  }}d}|dk  rd}| }d}|rM|dz  t        z  |t        dz
  z	  z  }|dz  }|dz  }t        |      }||z  }||z  }|t        k\  r	|t        z  }|rM|dk\  r
|t        z  }nt        dz
  d|z
  t        z  z
  }||z  t        z  |t        |z
  z	  z  }||z  }t        |      S )Nr      r/      g      A)npisfiniteisinf_PyHASH_INF_py310_or_later_prng_random_hashr5   _PyHASH_NANmathfrexpr;   r<   r2   )vr6   r8   r9   r:   r7   s         r   _Py_HashDoublerL   `   s>    ;;q>HHQKA""#|# %'%a((""::a=DAqD	AB 	
A2g(A,2C,DD	[	RF	Q	Q A  	Av1a< 78
q&O	#q\A-='>>A	DA!r   c                 V    d }t        j                  t         j                        }||fS )Nc                 T    |d   }|j                  |t        j                               S )Nr   )fpextr   
DoubleType)cgctxbuilder	signatureargsr3   s        r   r%   z_fpext.<locals>.impl   s"    1g}}S"--/22r   )r   float64float32)tyctxr3   r%   sigs       r   _fpextrY      s%    3 --
&C9r   c                 $    d }t               }||fS )Nc                     t        | |d      }t        t              }t        dk(  rt        | ||      }|S t	        | |||d      }|S )Ninternalr   F)r   r   _hash_widthr   r   )rQ   rR   rS   rT   	state_ptrbitsvalues          r   r%   z_prng_random_hash.<locals>.impl   sR    !%*=	% ""5'9=E  !D%HEr   )r1   )rW   r%   rX   s      r   rG   rG      s    $ ,C9r   )r6   p1p2p3p4r;   r<   _PyLong_SHIFTc                 d   dt         z
  }t        j                  d       |z	  }dt         z  dz   }d}t        t         z
  }t	        |dz
  dd      D ]V  }|t         z  }|t
        z  }||z	  }	||	z  }|t        j                  | |t         z  z	  |z        z  }|t
        k\  sN|t
        z  }X t        |      S )Nr   r   @   r@   r/   )re   r   uint32r<   ranger;   r1   )
r3   
_tmp_shift
mask_shiftir6   rc   idxra   rb   rd   s
             r   
_long_implrn      s     m#J<<$$3J 
}	!A 	
A

&BQUB#-/!"WG	U\\3#"55CDD A $ a=r   r)   c                     t         j                  dk  rdndt        j                  d      t	        | dd      rt        j                  nt        j
                  fd}|S )Nl        r0   l         signedFc                     |       } t        |       }|t        k  rC| dk(  rd}t	        |      S | k(  rt              }t	        |      S t        |       }t	        |      S d}| dk  r|  } d}t        |       }|r| }t	        |      S )Nr   FT)absr;   r1   rn   r5   )r3   magretneeds_negate_BIG_HASH_I64_MIN_SIGNED_MINs       r   r%   zint_hash.<locals>.impl   s     3i#h ax c"" # / c"" !o c"" !LQwd#S/Cdc""r   )sysmaxsizer   int64r+   uint64)r3   r%   rw   rx   ry   s     @@@r   int_hashr~      sN     ++0BbM++12K "#x75;;U\\D#8 Kr   c                 4    | j                   dk(  rd }|S d }|S )Nrg   c                     t        |       }|S r   )rL   )r3   hasheds     r   r%   zfloat_hash.<locals>.impl  s    #C(FMr   c                 X    t        j                  t        |             }t        |      }|S r   )rB   rU   rY   rL   )r3   
fpextendedr   s      r   r%   zfloat_hash.<locals>.impl  s#    F3K0J#J/FMr   )bitwidthr3   r%   s     r   
float_hashr     s&    
||r	 K	
 Kr   c                     d }|S )Nc                     t        | j                        }t        | j                        }|t        |z  z   }t	        |      S r   )hashrealimag_PyHASH_IMAGr5   )r3   hashrealhashimagcombineds       r   r%   z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,,> r6   c                 d    | t        j                  d      z  | t        j                  d      z	  z  S )Nr   !   r   r}   r6   s    r   _PyHASH_XXROTATEr   @  +     ell2&&1R0@+@ABr   l   yn< l   wJ igVc                 d    | t        j                  d      z  | t        j                  d      z	  z  S )N      r   r   s    r   r   r   I  r   r   )acclane_PyHASH_XXPRIME_5_PyHASH_XXPRIME_1tlc                 2   t        |       }t        }t        |       D ]=  }t        |      }|t	        d      k(  r y||t
        z  z  }t        |      }|t        z  }? ||t        t	        d      z  z  z  }|t	        d      k(  rt        d      S t        |      S )Nr/   is5 iK*\)	lenr   r   r   _Py_uhash_t_PyHASH_XXPRIME_2r   r   r5   )tupr   r   r6   r   s        r   _tuple_hashr   O  s    
 
SB
CC Aw;r?"t'''s#   ! 2"[%99::C
k"oj))#r   c                     d }|S )Nc                     t        |       S r   )r   )r3   s    r   r%   ztuple_hash.<locals>.implh  s    3r   r   r   s     r   
tuple_hashr   f  s     Kr   )c_size_tc_ubytec_uint64	pythonapi	StructureUnionc                       e Zd ZdefdefgZy)FNVprefixsuffixN)__name__
__module____qualname__r   _fields_r   r   r   r   r     s    	8	8Hr   r   c                       e Zd ZdefdefgZy)SIPHASHk0k1N)r   r   r   r   r   r   r   r   r   r     s    	x	xHr   r   c                   "    e Zd Zdedz  fdefgZy)DJBX33Apadding   r   Nr   r   r   r   r   r   r   r   r   r   r     s    	GbL!	8Hr   r   c                   "    e Zd Zdedz  fdefgZy)EXPATr   r   hashsaltNr   r   r   r   r   r     s    	GbL!	XHr   r   c                   4    e Zd Zdedz  fdefdefdefdefgZy)_Py_HashSecret_tuc   fnvsiphashdjbx33aexpatN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r     s6     
w|		G	G	%
Hr   r   _hashsecret_entrysymbolr`   c                      t         j                  t        d      } i fd} |d| j                  j                          |d| j
                  j                          |d| j
                  j                         S )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                     dj                  |       }t        j                  |      }t        j                  |      }t	        j
                  ||       t        ||      | <   y )Nz_numba_hashsecret_{})r   r`   )formatctypesr   	addressofll
add_symbolr   )namer3   symbol_nameaddrinfos       r   injectz!_build_hashsecret.<locals>.inject  sO    ,33D9ooc"$
k4(&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.r6   bc                 j    t        j                  | |z  | t        j                  d      |z
  z	  z        S )Nrg   r   r   s     r   _ROTATEr     s/     ||aQZQELL4D4J,KLMMr   ar   cdstc                 v    | |z  } ||z  }t        ||      | z  }t        ||      |z  }t        | d      } | |||fS )Nr   )r   r   s         r   _HALF_ROUNDr     sO     	
Q	QAqMAAqMAArN!Qzr   v0v1v2v3c                 b    t        | |||dd      \  } }}}t        ||| |dd      \  }}} }| |||fS )Nr   r         )r   r   s       r   _SINGLE_ROUNDr   $  sJ    
 %RRR<BB$RRR<BB2r2~r   c                 Z    t        | |||      \  } }}}t        | |||      \  } }}}| |||fS r   )r   r   s       r   _DOUBLE_ROUNDr   -  sB    
 'r2r26BB&r2r26BB2r2~r   c                    | dk(  r	t         dn| dk(  r	t        dnJ d       t        t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  d
      fd       }|S )	Nr   Tr   Funreachable)
r   r   r   r   r   mir   maskjmpohexefefr=   c           	         t        j                  |      dz  }| t        j                  d      z  }|t        j                  d      z  }| t        j                  d      z  }|t        j                  d      z  }d}	|dk\  r6t        ||	      }
|	dz  }	|dz  }||
z  } ||||      \  }}}}||
z  }|dk\  r6t        j                  d      }|	dz  }t        j                  d	      }|d
k\  rFd}t        j                  ||z         }||z  t        j                  t        ||dz               |z  z  }|dk\  rFd}t        j                  ||z         }||z  t        j                  t        ||dz               |z  z  }|dk\  rFd}t        j                  ||z         }||z  t        j                  t        ||dz               |z  z  }|dk\  rq|t        j                  d      z  }t	        d      D ]K  }|dz  }t        j                  ||z         }||z  t        j                  t        |||z               |z  z  }M |dk\  rFd}t        j                  ||z         }||z  t        j                  t        ||dz               |z  z  }|dk\  rFd}t        j                  ||z         }||z  t        j                  t        ||dz               |z  z  }|dk\  r+| }||z  t        j                  t        ||dz               z  }||z  }||z  } ||||      \  }}}}||z  }||z  } ||||      \  }}}} ||||      \  }}}}r ||||      \  }}}}||z  ||z  z  }|S )N8   l   ue`5{ l   mo\I{# l   ar\c l   ser+# r   r   r@         0      (      r   r   l        r   r      )r   r}   r   r   ri   )r   r   srcsrc_szr   r   r   r   r   rm   r   r   boffsetr   r   r   rl   _EXTRA_ROUND_ROUNDERs                    r   _siphashz_gen_siphash.<locals>._siphash@  s    V$*Aell#566Bell#566Bell#566Bell#566BCQ;"3,q!b!)"b"b!9BBb Q; S!AAgG||D)H{X_55X%,,ygk/J"K%(#) *{X_55X%,,ygk/J"K%(#) *{X_55X%,,ygk/J"K%(#) *{U\\"455qAa%C!LLS99DTell9S'A+3N&O),'- .A "
 {X_55X%,,ygk/J"K%(#) *{X_55X%,,ygk/J"K%(#) *{!{X%,,ygk/J"KLFA!GB%b"b"5NBB!GB(NB%b"b"5NBB%b"b"5NBB!)"b"b!9BBbR"W%AHr   )r   r   r	   r   r}   )algr  r  r  s     @@r   _gen_siphashr  6  s    +$HLK$H L#m#1	(-(-(-',||(-',||*/,,)..3ll	"< 	
=C		
=C	J r   r   r   z'Unsupported hashing algorithm in use %sc                     t        |t        j                        st        j                  d      t
        |j                     j                  t        j                  } ||      }fd}||fS )z&Emit code to load the hashsecret.
    zrequires literal stringc                     |j                   }	 |j                        }|j                  |      }|S # t        $ r. t        j                  |t        j
                  d            }Y Iw xY w)Nrg   r   )module
get_globalKeyErrorr   GlobalVariableIntTypeload)rQ   rR   rX   rT   modgvrK   syms          r   r%   z%_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}   )rW   r   restyrX   r%   r  s        @r   _inject_hashsecret_readr#    s`     dE//0  !:;;
d((
)
0
0CLLE
+C	 9r   c                 (    t         |    j                  S r   )r   r`   r  s    r   _load_hashsecretr%    s    t"""r   c                     d }|S )Nc                     t        |       S r   )r#  r  s    r   impz"_impl_load_hashsecret.<locals>.imp  s    &t,,r   r   )r   r(  s     r   _impl_load_hashsecretr)    s    -Jr   _hashc                    |dk(  rt        d      S |t        k  rat        d      }t        |      D ]*  }|dz  |z   t	        j
                  t        | |            z   }, ||z  }|t        d      z  }t        |      S t        t        j                  t        d            t        j                  t        d            | |      }t        |      }t        |      S )Nr   i  r  r   r   r   )r5   _Py_HASH_CUTOFFr   ri   rB   uint8r   r%  
_siphasherr   r}   )r3   _lenr*  rm   tmps        r   _Py_HashBytesr1    s    	a   D!;CqjE)RXXiS6I-JJE  	!"233 %  	 &6|&DE&6|&DEd$ s#%  r   c                     ddl m fd}|S )Nr   )_kind_to_byte_widthc                      | j                         }t        |       }| j                  }|dk7  r|S t        | j                  ||z        S )Nr/   )_kindr   r*  r1  _data)r3   	kindwidthr/  current_hashr3  s       r   r%   zunicode_hash.<locals>.impl  sI    '		2	3xyy2 !I,<==r   )numba.cpython.unicoder3  )r3   r%   r3  s     @r   unicode_hashr:    s    9
> Kr   )u__doc__rI   numpyrB   rz   r   warningscollectionsr   llvmlite.bindingbindingr   llvmliter   numbar   numba.core.extendingr   r   r   r	   
numba.corer
   r   r   numba.core.unsafe.bytesr   r   numba.cpython.randomimplr   r   r   r   	PYVERSIONrF   	hash_infowidthr]   r+   r1   r   infrE   nanrH   modulusr;   intpr   r<   _PyHASH_MULTIPLIERr   int_infobits_per_digitre   cutoffr,  	algorithm_Py_hashfunc_namer   r&   r   r-   r5   doubleintcrL   rY   rG   int32rn   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
_siphash24r.  
ValueErrorr#  r%  r)  r1  UnicodeTyper:  r   r   r   <module>rb     s     
   "    < <  # <5 5 //W, mm!!UGk12
eX34 mmmmcmm334ZZ((B.rB !++--&&MM++ 	 
+  
$    {*$||$zz"'**-8*/**6 7.7.b    > { + + + +-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   