
    %YHhi                     l	   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@                  jB                  Z" e#ede"z        Z$ e#ede"z        Z%ej@                  jL                  Z'ej@                  jP                  Z) e%ej@                  jT                        Z+ejX                  jZ                  dk(  rdndZ.dZ/e/Z0ejb                  jd                  Z3ej@                  jh                  Z5ej@                  jl                  Z7d Z8 ee8      d        Z9 ee:      d        Z;ed        Z< ee%e%ejz                  ej|                  ej|                  e%ej|                  d      d        Z?ed        Z@ed        ZA ee%e%e%e%e%e%ej                  ej                  d      d        ZC eej                  d       eej                  d      d               ZF eej                  d      d        ZH eej                  d      d        ZJe%jZ                  d z  d!kD  r4 e%d"      ZK e%d#      ZL e%d$      ZM ed%ej                  i      d&        ZOn3 e%d'      ZK e%d(      ZL e%d)      ZM ed%ej                  i      d*        ZO ee%e%e%e%e%d+      d,        ZP eej                  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 r&e7d>k(  rd?Za ej                  ea        eej                  ej                  d@      dA        Zc eej                  ej                  ej                  ej                  ej                  ej                  dB      dC        Zd eej                  ej                  ej                  ej                  dD      dE        Ze eej                  ej                  ej                  ej                  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j                  d      dP        Zqy)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                      y N )	hash_funcs    R/var/www/html/planif/env/lib/python3.12/site-packages/numba/cpython/old_hashing.py_defer_hashr   /   s        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$$;r   r   )r    r   r"   r!   s      @r   ol_defer_hashr#   3   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>.implG   s-    3
#sGC$<==/00r   r   )r    r"   r)   s     @r   hash_overloadr*   @   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_returnr2   O   s%    sOERBLr   )xymesign_PyHASH_MODULUS_PyHASH_BITSlocalsc                 *   t        j                  |       s<t        j                  |       r| dkD  rt        S t         S t	               }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_prng_random_hashr2   mathfrexpr8   r9   r/   )vr3   r5   r6   r7   r4   s         r   _Py_HashDoublerG   ^   s5    ;;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argsr0   s        r   r"   z_fpext.<locals>.impl   s"    1g}}S"--/22r   )r   float64float32)tyctxr0   r"   sigs       r   _fpextrT      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   )rL   rM   rN   rO   	state_ptrbitsvalues          r   r"   z_prng_random_hash.<locals>.impl   sR    !%*=	% ""5'9=E  !D%HEr   )r.   )rR   r"   rS   s      r   rC   rC      s    $ ,C9r   )r3   p1p2p3p4r8   r9   _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,   )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 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  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)absr8   r.   ri   r2   )r0   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)r0   r"   rr   rs   rt   s     @@@r   int_hashry      sN     ++0BbM++12K "#x75;;U\\D#8 Kr   c                 4    | j                   dk(  rd }|S d }|S )Nrb   c                     t        |       }|S r   )rG   )r0   hasheds     r   r"   zfloat_hash.<locals>.impl  s    #C(FMr   c                 X    t        j                  t        |             }t        |      }|S r   )r?   rP   rT   rG   )r0   
fpextendedr|   s      r   r"   zfloat_hash.<locals>.impl  s#    F3K0J#J/FMr   )bitwidthr0   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_IMAGr2   )r0   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,,> r3   c                 d    | t        j                  d      z  | t        j                  d      z	  z  S )Nr   !   r   rx   r3   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   D  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   r2   )tupr   r   r3   r   s        r   _tuple_hashr   J  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   )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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   )namer0   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.r3   bc                 j    t        j                  | |z  | t        j                  d      |z
  z	  z        S )Nrb   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   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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   rx   )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                     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)Nrb   r   )module
get_globalKeyErrorr   GlobalVariableIntTypeload)rL   rM   rS   rO   modgvrF   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   rx   )rR   r   restyrS   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   )r2   _Py_HASH_CUTOFFr   rd   r?   uint8r   r!  
_siphasherr   rx   )r0   _lenr&  rh   tmps        r   _Py_HashBytesr-    s    	a   D!; 	KCqjE)RXXiS6I-JJE	K 	!"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&  r-  _data)r0   	kindwidthr+  current_hashr/  s       r   r"   zunicode_hash.<locals>.impl  sI    '		2	3xyy2 !I,<==r   )numba.cpython.unicoder/  )r0   r"   r/  s     @r   unicode_hashr6    s    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^     sz     
   "    < <   <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   