
    %YHhj                     `	   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      Z$ e#ed      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. d/eW      ZY G d0 d1eW      ZZ G d2 d3eW      Z[ G d4 d5eW      Z\ G d6 d7eX      Z] ed8d9d:g      Z^d; Z_ e_       Z`e7d<v r&e7d=k(  rd>Za ej                  ea        eej                  ej                  d?      d@        Zc eej                  ej                  ej                  ej                  ej                  ej                  dA      dB        Zd eej                  ej                  ej                  ej                  dC      dD        Ze eej                  ej                  ej                  ej                  dC      dE        ZfdF Zg egdG      Zh egdH      Zie7dGk(  rehneiZjndIe7z  Za ekea      edJ        ZldK Zm eem      dL        Zn edMe%i      dN        Zo eej                  d      dO        Zqy)Pz&
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_ptrpy_int       =   iCB c                      y N )	hash_funcs    R/var/www/html/planif/env/lib/python3.12/site-packages/numba/cpython/new_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_returnr3   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_hashr3   mathfrexpr9   r:   r0   )vr4   r6   r7   r8   r5   s         r   _Py_HashDoublerH   _   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argsr1   s        r   r#   z_fpext.<locals>.impl   s"    1g}}S"--/22r   )r   	c_float64	c_float32)tyctxr1   r#   sigs       r   _fpextrU      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   )rM   rN   rO   rP   	state_ptrbitsvalues          r   r#   z_prng_random_hash.<locals>.impl   sR    !%*=	% ""5'9=E  !D%HEr   )r/   )rS   r#   rT   s      r   rD   rD      s    $ ,C9r   )r4   p1p2p3p4r9   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-   )ra   r   c_uint32r:   ranger9   r/   )
r1   
_tmp_shift
mask_shiftir4   r_   idxr]   r^   r`   s
             r   
_long_implrj      s     m#J>>#&&:5J 
}	!A 	
A

&BQUB# !-/!"WG	U^^SC-$77:EFF 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)absr9   r/   rj   r3   )r1   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   c_int64r)   c_uint64)r1   r#   rs   rt   ru   s     @@@r   int_hashrz      sN     ++0BbM-- 34K $C595==u~~D#8 Kr   c                 4    | j                   dk(  rd }|S d }|S )Nrc   c                     t        |       }|S r   )rH   )r1   hasheds     r   r#   zfloat_hash.<locals>.impl  s    #C(FMr   c                 X    t        j                  t        |             }t        |      }|S r   )r@   float64rU   rH   )r1   
fpextendedr}   s      r   r#   zfloat_hash.<locals>.impl  s#    F3K0J#J/FMr   )bitwidthr1   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_IMAGr3   )r1   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,,> r4   c                 d    | t        j                  d      z  | t        j                  d      z	  z  S )Nr   !   r   	np_uint64r4   s    r   _PyHASH_XXROTATEr   >  +     eoob))a5??23F.FGHr   l   yn< l   wJ igVc                 d    | t        j                  d      z  | t        j                  d      z	  z  S )N      r   r   s    r   r   r   G  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   r3   )tupr   r   r4   r   s        r   _tuple_hashr   M  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   )r1   s    r   r#   ztuple_hash.<locals>.implf  s    3r   r   r   s     r   
tuple_hashr   d  s     Kr   )c_size_tc_ubytery   	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   ry   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ctypesry   	addressofll
add_symbolr   )namer1   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.r4   bc                 j    t        j                  | |z  | t        j                  d      |z
  z	  z        S )Nrc   r   r   s     r   _ROTATEr     s9     
!"(;q(A B D E 	Er   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   re   )r   r   srcsrc_szr   r   r   r   r   ri   r   r   boffsetr   r   r   rh   _EXTRA_ROUND_ROUNDERs                    r   _siphashz_gen_siphash.<locals>._siphash?  s    '2-Aeoo&899Beoo&899Beoo&899Beoo&899BCQ;"3,q!b!)"b"b!9BBb Q; $AAgGt,H{C88X%//)C12M"N%(#) *{C88X%//)C12M"N%(#) *{C88X%//)C12M"N%(#) *{U__%788q NAa%C!OOHO<<DT3!)DELNAN
 {C88X%//)C12M"N%(#) *{C88X%//)C12M"N%(#) *{!{X%//)C12M"NO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  5  s    +$HLK$H L#m#1	(-(-(-',(-',*///)..3oo	"? 	
@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)Nrc   r   )module
get_globalKeyErrorr   GlobalVariableIntTypeload)rM   rN   rT   rP   modgvrG   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   )rS   r   restyrT   r#   r  s        @r   _inject_hashsecret_readr!    s`     dE//0  !:;;
d((
)
0
0COOE
+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   )r3   _Py_HASH_CUTOFFr   re   r@   uint8r   r#  
_siphasherr   r   )r1   _lenr(  ri   tmps        r   _Py_HashBytesr/    s    	a   D!; 	KCqjE)RXXiS6I-JJE	K 	!"233 %  	 )9,)GH)9,)GH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)r1   	kindwidthr-  current_hashr1  s       r   r#   zunicode_hash.<locals>.impl  sI    '		2	3xyy2 !I,<==r   )numba.cpython.unicoder1  )r1   r#   r1  s     @r   unicode_hashr8    s    9
> Kr   )r__doc__rE   numpyr@   rv   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widthrY   r)   r/   r   infrC   nan_PyHASH_NANmodulusr9   r   r   r:   _PyHASH_MULTIPLIERr   int_infobits_per_digitra   cutoffr*  	algorithm_Py_hashfunc_namer   r$   r   r+   r3   	np_doublenp_intcrH   rU   rD   c_int32rj   IntegerBooleanrz   Floatr   Complexr   r   r   r   r   r   r   	BaseTupler   r   r   ry   r   r   r   r   r   r   r   r   r   r   r  msgwarnr   r   r   r   r  
_siphash13
_siphash24r,  
ValueErrorr!  r#  r'  r/  UnicodeTyper8  r   r   r   <module>r_     sp     
   "    < <   <5 5
 mm!!UH%
eX& mmmmcmm334\\**b0rb !++--&&MM++ 	 
+  
$    {*$$}}"'---8*/-- ++\    > { + + + +-8*/--+0==; <<: 
+
+& , ,&X j) *" 
+ ,* 1q #$89#$89#$78c5??34I 5I $J/#J/#I.c5??34I 5I
 k/:/: +- .	.& *- .( ) i i I u  2Xw4GH 6  ! 99
 E!' 	c^ 5??#(??6 7E7E 5??#(??#(??#(??#(??#(??6 77 EOO$)OO$)OO$)OO7 8	8
 EOO$)OO$)OO$)OO7 8	8
Yv k*Jk*J0K?ZJ 46G
GC
S/  0# 

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