
    J/Phi                     	   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 dd	lmZmZ dd
lmZmZmZmZ ej         j!        Z" e#ede"z            Z$ e#ede"z            Z%ej         j&        Z'ej         j(        Z) e%ej         j*                  Z+ej,        j-        dk    rdndZ.dZ/e/Z0ej1        j2        Z3ej         j4        Z5ej         j6        Z7d Z8 ee8          d             Z9 ee:          d             Z;ed             Z< ee%e%ej=        ej>        ej>        e%ej>        d          d             Z?ed             Z@ed             ZA ee%e%e%e%e%e%ejB        ejB        d          d             ZC eejD        d           eejE        d          d                         ZF eejG        d          d             ZH eejI        d          d             ZJe%j-        d z  d!k    r> e%d"          ZK e%d#          ZL e%d$          ZM ed%ejN        i          d&             ZOn= e%d'          ZK e%d(          ZL e%d)          ZM ed%ejN        i          d*             ZO ee%e%e%e%e%d+          d,             ZP eejQ        d          d-             ZRdd.lmSZSmTZTmUZUmVZVmWZWmXZX  G d/ d0eW          ZY G d1 d2eW          ZZ G d3 d4eW          Z[ G d5 d6eW          Z\ G d7 d8eX          Z] ed9d:d;g          Z^d< Z_ e_            Z`e7d=v re7d>k    rd?Za ejb        ea            eejN        ejN        d@          dA             Zc eejN        ejN        ejN        ejN        ejN        ejN        dB          dC             Zd eejN        ejN        ejN        ejN        dD          dE             Ze eejN        ejN        ejN        ejN        dD          dF             ZfdG Zg egdH          Zh egdI          Zie7dHk    rehneiZjndJe7z  Za ekea          edK             ZldL Zm eem          dM             Zn edNe%i          dO             Zo eejp        d          dP             ZqdS )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                     d S N )	hash_funcs    Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cpython/old_hashing.py_defer_hashr   /   s    D    c                     d|  dfd}|S )Nzunhashable type: ''c                 :    |t                     |            S r   )	TypeError)objr   err_msgs     r   implzol_defer_hash.<locals>.impl7   s#    G$$$9;;r   r   )r    r   r"   r!   s      @r   ol_defer_hashr#   3   s3    )3)))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>.implG   s>    3
## 	1sGC$<$<===/000r   r   )r    r"   r)   s     @r   hash_overloadr*   @   sA    B"B B B
1 1 1 1 1
 Kr   c                 h    t          |           }|t          d          k    rt          d          }|S )N)
_Py_hash_tint)valasints     r   process_returnr2   O   s.    sOOERBLr   )xymesign_PyHASH_MODULUS_PyHASH_BITSlocalsc                 `   t          j        |           sFt          j        |           r| dk    rt          S t           S t	                      }t          |          S t          j        |           \  }}d}|dk     rd}| }d}|rU|dz  t          z  |t          dz
  z	  z  }|dz  }|dz  }t          |          }||z  }||z  }|t          k    r
|t          z  }|U|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_prng_random_hashr2   mathfrexpr8   r9   r/   )vr3   r5   r6   r7   r4   s         r   _Py_HashDoublerG   ^   s_    ;q>> %HQKK 	%A""#|# "##A!!$$$:a==DAqD	AB 	
A !2g(A,2C,DD	[	RFF	Q	Q A  ! 	Avv1a< 78
q&O	#q\A-='>>A	DA!r   c                 L    d }t          j        t           j                  }||fS )Nc                 `    |d         }|                     |t          j                              S )Nr   )fpextr   
DoubleType)cgctxbuilder	signatureargsr0   s        r   r"   z_fpext.<locals>.impl   s%    1g}}S"-//222r   )r   float64float32)tyctxr0   r"   sigs       r   _fpextrT      s.    3 3 3 -
&
&C9r   c                 ,    d }t                      }||fS )Nc                     t          | |d          }t          t                    }t          dk    rt          | ||          }nt	          | |||d          }|S )Ninternalr   F)r   r   _hash_widthr   r   )rL   rM   rN   rO   	state_ptrbitsvalues          r   r"   z_prng_random_hash.<locals>.impl   sZ    !%*==	%% ""5'9==EE D%HHEr   )r.   )rR   r"   rS   s      r   rC   rC      s&      $ ,,C9r   )r3   p1p2p3p4r8   r9   _PyLong_SHIFTc                 ~   dt           z
  }t          j        d           |z	  }dt           z  dz   }d}t          t           z
  }t	          |dz
  dd          D ]Z}|t           z  }|t
          z  }||z	  }	||	z  }|t          j        | |t           z  z	  |z            z  }|t
          k    r
|t
          z  }[t          |          S )Nr   r   @   r=   r,   )r`   r   uint32r9   ranger8   r.   )
r0   
_tmp_shift
mask_shiftir3   r^   idxr\   r]   r_   s
             r   
_long_implri      s     m#J<$$$3J 
}	!A 	
A

&BQUB## ! !-/!"WG	U\3#"55CD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        r-   l         signedFc                     |           } t          |           }|t          k     r/| dk    rd}nG| k    rt                    }n1t          |           }n!d}| dk     r|  } d}t          |           }|r| }t	          |          S )Nr   FT)absr8   r.   ri   r2   )r0   magretneeds_negate_BIG_HASH_I64_MIN_SIGNED_MINs       r   r"   zint_hash.<locals>.impl   s     d3ii#hh  axx## // oo LQwwd#S//C dc"""r   )sysmaxsizer   int64r(   uint64)r0   r"   rr   rs   rt   s     @@@r   int_hashry      sv     +00BBbM+122K "#x77I5;;U\D# # # # # # #8 Kr   c                 *    | j         dk    rd }nd }|S )Nrb   c                 $    t          |           }|S r   )rG   )r0   hasheds     r   r"   zfloat_hash.<locals>.impl  s    #C((FMr   c                 f    t          j        t          |                     }t          |          }|S r   )r?   rP   rT   rG   )r0   
fpextendedr|   s      r   r"   zfloat_hash.<locals>.impl  s)    F3KK00J#J//FMr   )bitwidthr0   r"   s     r   
float_hashr     s9    
|r	 	 	 		 	 	
 Kr   c                     d }|S )Nc                     t          | j                  }t          | j                  }|t          |z  z   }t	          |          S r   )hashrealimag_PyHASH_IMAGr2   )r0   hashrealhashimagcombineds       r   r"   zcomplex_hash.<locals>.impl#  s;    >>>> lX55h'''r   r   r   s     r   complex_hashr   !  s    	( 	( 	( Kr         l   Jfq	 l   OkO8 l   g,,> r3   c                 `    | t          j        d          z  | t          j        d          z	  z  S )Nr   !   r   rx   r3   s    r   _PyHASH_XXROTATEr   ;  -     el2&&&1R0@0@+@ABr   l   yn< l   wJ igVc                 `    | t          j        d          z  | t          j        d          z	  z  S )N      r   r   s    r   r   r   D  r   r   )acclane_PyHASH_XXPRIME_5_PyHASH_XXPRIME_1tlc                    t          |           }t          }t          |           D ]M}t          |          }|t	          d          k    r dS ||t
          z  z  }t          |          }|t          z  }N||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   r2   )tupr   r   r3   r   s        r   _tuple_hashr   J  s    
 
SB
CC   ! !Aww;r??""22t'''s##  2"[%9%99::C
k"ooj)))#r   c                     d }|S )Nc                      t          |           S r   )r   )r0   s    r   r"   z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                       e Zd ZdefdefgZdS )FNVprefixsuffixN)__name__
__module____qualname__r   _fields_r   r   r   r   r     s%        	8	8HHHr   r   c                       e Zd ZdefdefgZdS )SIPHASHk0k1N)r   r   r   r   r   r   r   r   r   r     s%        	x	xHHHr   r   c                   $    e Zd Zdedz  fdefgZdS )DJBX33Apadding   r   Nr   r   r   r   r   r   r   r   r   r   r     s)        	GbL!	8HHHr   r   c                   $    e Zd Zdedz  fdefgZdS )EXPATr   r   hashsaltNr   r   r   r   r   r     s)        	GbL!	XHHHr   r   c                   6    e Zd Zdedz  fdefdefdefdefgZdS )_Py_HashSecret_tuc   fnvsiphashdjbx33aexpatN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r     sB         
w|		G	G	%
HHHr   r   _hashsecret_entrysymbolr[   c                      t                               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                     |           }t          j        |          }t          j        |          }t	          j        ||           t          ||          | <   d S )Nz_numba_hashsecret_{})r   r[   )formatctypesr   	addressofll
add_symbolr   )namer0   symbol_nameaddrinfos       r   injectz!_build_hashsecret.<locals>.inject  sa    ,33D99oc""$$
k4(((&kEEET


r   djbx33a_suffix
siphash_k0
siphash_k1)r   in_dllr   r   r   r   r   r   )pyhashsecretr   r   s     @r   _build_hashsecretr     s     $**96FGGLDF F F F F F\18999
F<-0111
F<-011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.r3   bc                 f    t          j        | |z  | t          j        d          |z
  z	  z            S )Nrb   r   r   s     r   _ROTATEr     s1     |aQZQEL4D4D4J,KLMMMr   ar   cdstc                     | |z  } ||z  }t          ||          | z  }t          ||          |z  }t          | d          } | |||fS )Nr   )r   r   s         r   _HALF_ROUNDr     sU     	
Q	QAqMMAAqMMAArNN!Qzr   v0v1v2v3c                 r    t          | |||dd          \  } }}}t          ||| |dd          \  }}} }| |||fS )Nr   r         )r   r   s       r   _SINGLE_ROUNDr     sP    
 %RRR<<BB$RRR<<BB2r2~r   c                 j    t          | |||          \  } }}}t          | |||          \  } }}}| |||fS r   )r   r   s       r   _DOUBLE_ROUNDr   (  sH    
 'r2r266BB&r2r266BB2r2~r   c                 t   | 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   Fr   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    r=t          ||	          }
|	dz  }	|dz  }||
z  } ||||          \  }}}}||
z  }|dk    =t          j        d          }|	dz  }t          j        d	          }|d
k    rHd}t          j        ||z             }||z  t          j        t          ||dz                       |z  z  }|dk    rHd}t          j        ||z             }||z  t          j        t          ||dz                       |z  z  }|dk    rHd}t          j        ||z             }||z  t          j        t          ||dz                       |z  z  }|dk    rt|t          j        d          z  }t	          d          D ]M}|dz  }t          j        ||z             }||z  t          j        t          |||z                       |z  z  }N|dk    rHd}t          j        ||z             }||z  t          j        t          ||dz                       |z  z  }|dk    rHd}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   rx   r   r   rd   )r   r   srcsrc_szr   r   r   r   r   rh   r   r   boffsetr   r   r   rg   _EXTRA_ROUND_ROUNDERs                    r   _siphashz_gen_siphash.<locals>._siphash;  s    V$$*Ael#5666Bel#5666Bel#5666Bel#5666BCQ;;"3,,q!b!)"b"b!9!9BBb Q;; S!!AAgG|D))H{{X_555X%,ygk/J/J"K"K%(#) *{{X_555X%,ygk/J/J"K"K%(#) *{{X_555X%,ygk/J/J"K"K%(#) *{{U\"4555q . .Aa%C!LS999DTel9S'A+3N3N&O&O),'- .AA{{X_555X%,ygk/J/J"K"K%(#) *{{X_555X%,ygk/J/J"K"K%(#) *{{!{X%,ygk/J/J"K"KLFA!GB%Xb"b"55NBB!GB(NB%Xb"b"55NBB%Xb"b"55NBB :!)"b"b!9!9BBbR"W%AHr   )r   r   r	   r   rx   )algr
  r  r	  s     @@r   _gen_siphashr  1  s    +$HLLK$H LL#m###	(-(-(-',|(-',|*/,)..3l	"< 	"< 	
= 	
= 	
=C	 C	 C	 C	 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         }	 |                              }n9# t          $ r, t          j        |t          j        d                    }Y nw xY w|                    |          }|S )Nrb   r   )module
get_globalKeyErrorr   GlobalVariableIntTypeload)rL   rM   rS   rO   modgvrF   syms          r   r"   z%_inject_hashsecret_read.<locals>.impl  s}    n	B$$BB 	B 	B 	B"3
2SAAABBB	B LLs     3AA)	
isinstancer   StringLiteralr
   TypingError_hashsecretliteral_valuer   rx   )rR   r   restyrS   r"   r  s        @r   _inject_hashsecret_readr    su     dE/00 < !:;;;
d(
)
0CLE
%++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     rdt          d          }t          |          D ]-}|dz  |z   t	          j        t          | |                    z   }.||z  }|t          d          z  }n_t          t          j
        t          d                    t          j
        t          d                    | |          }t          |          }t          |          S )Nr   i  r  r   r   r   )r2   _Py_HASH_CUTOFFr   rd   r?   uint8r   r!  
_siphasherr   rx   )r0   _lenr&  rh   tmps        r   _Py_HashBytesr-    s    		a    D!!;; 	K 	KCqjE)RXiS6I6I-J-JJEE!"2333&6|&D&DEE&6|&D&DEEd$ $ s##%   r   c                     ddl m fd}|S )Nr   )_kind_to_byte_widthc                      | j                   }t          |           }| j        }|dk    r|S t          | j        ||z            S )Nr,   )_kindr   r&  r-  _data)r0   	kindwidthr+  current_hashr/  s       r   r"   zunicode_hash.<locals>.impl  sQ    ''	22	3xxy2 !I,<===r   )numba.cpython.unicoder/  )r0   r"   r/  s     @r   unicode_hashr6    s5    999999
> 
> 
> 
> 
> Kr   )r__doc__rD   numpyr?   ru   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widthrX   r(   r.   r   infrB   nan_PyHASH_NANmodulusr8   intpr   r9   _PyHASH_MULTIPLIERr   int_infobits_per_digitr`   cutoffr(  	algorithm_Py_hashfunc_namer   r#   r   r*   r2   doubleintcrG   rT   rC   int32ri   IntegerBooleanry   Floatr   Complexr   r   r   r   rx   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%  r-  UnicodeTyper6  r   r   r   <module>r^     s	         



   " " " " " "                        < < < < < < < < < < < <             < < < < < < < <5 5 5 5 5 5 5 5 5 5 5 5
 m!WUGk122
geX344 mm+cm344Z(B..rrB !+-&M+ 	 	 	 
+   
$      {*$|$z"'*-8*/*6 6 7 7 7+ +7 7+\      > { + + + +-8*/++0;9 9 : : : : :: 
++
++& & ,+ ,+&X j))  *)" 
++  ,+( 1q  #$899#$899#$788c5<0111C C 21C C $J//#J//#I..c5<0111C C 21C
 k/:/: +- - . . . 	. .& *--  .-(                   )       i       i       I       u    J2Xw4GHH   6  !! 999
 E!!' 	c^ 5<#(<3 3 4 4 4N N4 4N 5<#(<#(<#(<#(<#(<3 3 4 4 4 4 4 EL$)L$)L$)L4 4 5 5 5 	5 5
 EL$)L$)L$)L4 4 5 5 5 	5 5
Y Y Yv k**Jk**J0K??ZJJ 46G
GC
*S//   0# # # 

   ';/000! ! 10!0 "J//  0/  r   