§
    ƒÛg4j  ã                   ó"	  — 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j!        dk    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/        j0        dk    rdndZ1dZ2e2Z3ej4        j5        Z6ej#        j7        Z8ej#        j9        Z:d„ Z; ee;¦  «        d„ ¦   «         Z< ee=¦  «        d„ ¦   «         Z>ed„ ¦   «         Z? ee(e(ej@        ejA        ejA        e(ejA        dœ¬¦  «        d„ ¦   «         ZBed„ ¦   «         ZCed„ ¦   «         ZD ee(e(e(e(e(e(ejE        ejE        dœ¬¦  «        d„ ¦   «         ZF eejG        d¦  «         eejH        d¦  «        d„ ¦   «         ¦   «         ZI eejJ        d¦  «        d„ ¦   «         ZK eejL        d¦  «        d „ ¦   «         ZMe(j0        d!z  d"k    r> e(d#¦  «        ZN e(d$¦  «        ZO e(d%¦  «        ZP ed&ejQ        i¬¦  «        d'„ ¦   «         ZRn= e(d(¦  «        ZN e(d)¦  «        ZO e(d*¦  «        ZP ed&ejQ        i¬¦  «        d+„ ¦   «         ZR ee(e(e(e(e(d,œ¬¦  «        d-„ ¦   «         ZS eejT        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je        ed¦  «          eejQ        ejQ        dAœ¬¦  «        dB„ ¦   «         Zf eejQ        ejQ        ejQ        ejQ        ejQ        ejQ        dCœ¬¦  «        dD„ ¦   «         Zg eejQ        ejQ        ejQ        ejQ        dEœ¬¦  «        dF„ ¦   «         Zh eejQ        ejQ        ejQ        ejQ        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js        d¦  «        dQ„ ¦   «         ZtdS )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                 ó   — d S ©N© )Ú	hash_funcs    úK/granary/edev/quantum/lib/python3.11/site-packages/numba/cpython/hashing.pyÚ_defer_hashr   1   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>.impl9   s#   ø€ ØÐÝ˜GÑ$Ô$Ð$à�9‘;”;Ðr   r   )r#   r   r%   r$   s      @r   Úol_defer_hashr&   5   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>.implI   s>   ø€ Ý�3˜
Ñ#Ô#ð 	1Ý˜s¥G¨C°Ñ$<Ô$<Ñ=Ô=Ð=åÐ/Ñ0Ô0Ð0r   r   )r#   r%   r,   s     @r   Úhash_overloadr-   B   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_returnr5   Q   s.   € å�s‰OŒO€EØ•�R‘”ÒÐÝ�B‘”ˆØ€Lr   )ÚxÚyÚmÚeÚsignÚ_PyHASH_MODULUSÚ_PyHASH_BITS©Úlocalsc                 ó|  — t          j        | ¦  «        sTt          j        | ¦  «        r| dk    rt          S t           S t          rt          ¦   «         }t          |¦  «        S 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Ú_py310_or_laterÚ_prng_random_hashr5   Ú_PyHASH_NANÚmathÚfrexpr;   r<   r2   )Úvr6   r8   r9   r:   r7   s         r   Ú_Py_HashDoublerL   `   sm  € õ Œ;�q‰>Œ>ð #ÝŒH�Q‰KŒKð 	#Ø�A’�Ý"Ð"å#�|Ð#õ ð #Ý%Ñ'Ô'�Ý% aÑ(Ô(Ð(å"Ð"åŒ:�a‰=Œ=�D€A€qà€DØ	ˆAŠˆØˆØˆBˆð 	
€AØð !Ø�2‰g�Ñ(¨Aµ,ÀÑ2CÑ,DÑDˆØ	ˆ[ÑˆØ	ˆR‰ˆÝ�‰FŒFˆØ	ˆQ‰ˆØ	ˆQ‰ˆØ•ÒÐØ•Ñ ˆAð ð !ð 	ˆA‚v€vØ•Ñˆˆå˜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Úargsr3   s        r   r%   z_fpext.<locals>.implš   s%   € Ø�1ŒgˆØ�}Š}˜S¥"¤-¡/¤/Ñ2Ô2Ð2r   )r   Úfloat64Úfloat32)Útyctxr3   r%   Úsigs       r   Ú_fpextrY   ˜   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   )rQ   rR   rS   rT   Ú	state_ptrÚbitsÚvalues          r   r%   z_prng_random_hash.<locals>.impl¤   sZ   € Ý! %¨°*Ñ=Ô=ˆ	Ý�Ñ%Ô%ˆõ ˜"ÒÐÝ" 5¨'°9Ñ=Ô=ˆEˆEå  ¨°¸DÀ%ÑHÔHˆEàˆr   )r1   )rW   r%   rX   s      r   rG   rG   ¡   s&   € ðð ð õ$ ‰,Œ,€CØ�ˆ9Ðr   )r6   Úp1Úp2Úp3Úp4r;   r<   Ú_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/   )re   r   Úuint32r<   Úranger;   r1   )
r3   Ú
_tmp_shiftÚ
mask_shiftÚir6   rc   Úidxra   rb   rd   s
             r   Ú
_long_implrn   Á   sÑ   € ð •mÑ#€JÝ”< Ñ$Ô$Ð$¨Ñ3€Jð 
�}Ñ	 Ñ!€Að 	
€AÝ
�Ñ
&€BÝ�Q˜‘U˜B Ñ#Ô#ð !ð !ˆØ•-ÑˆØ•/Ñ!ˆØ�"‰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        r0   éüÿÿÿ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)Úabsr;   r1   rn   r5   )r3   ÚmagÚretÚneeds_negateÚ_BIGÚ_HASH_I64_MINÚ_SIGNED_MINs       €€€r   r%   zint_hash.<locals>.implò   s¡   ø€ ð ˆd�3‰iŒiˆÝ�#‰hŒhˆØ•Ò Ð Ø�aŠxˆxØ��Ø˜Ò#Ð#Ý  Ñ/Ô/��å  ‘o”o��à ˆLØ�QŠwˆwØ�d�Ø#�Ý˜S‘/”/ˆCØð Ø�d�Ý˜cÑ"Ô"Ð"r   )ÚsysÚmaxsizer   Úint64r+   Úuint64)r3   r%   rw   rx   ry   s     @@@r   Úint_hashr~   æ   sv   øøø€ õ œ+¨Ò0Ð0�B�B°b€MÝ”+Ð1Ñ2Ô2€Kõ " # x°Ñ7Ô7ÐI�5Œ;ˆ;½U¼\€Dð#ð #ð #ð #ð #ð #ð #ð8 €Kr   c                 ó*   — | j         dk    rd„ }nd„ }|S )Nrg   c                 ó$   — t          | ¦  «        }|S r   )rL   )r3   Úhasheds     r   r%   zfloat_hash.<locals>.impl  s   € Ý# CÑ(Ô(ˆFØˆMr   c                 óf   — t          j        t          | ¦  «        ¦  «        }t          |¦  «        }|S r   )rB   rU   rY   rL   )r3   Ú
fpextendedr�   s      r   r%   zfloat_hash.<locals>.impl  s)   € åœ¥F¨3¡K¤KÑ0Ô0ˆJÝ# JÑ/Ô/ˆFØˆMr   )Úbitwidth©r3   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_IMAGr5   )r3   ÚhashrealÚhashimagÚcombineds       r   r%   zcomplex_hash.<locals>.impl(  s;   € Ý˜œ‘>”>ˆÝ˜œ‘>”>ˆð �l¨XÑ5Ñ5ˆÝ˜hÑ'Ô'Ð'r   r   r…   s     r   Úcomplex_hashr�   &  s   € ð	(ð 	(ð 	(ð €Kr   é   é   l   ‡J×Æf»q	 l   Ok©Oô8• l   Åg¬,¼,§> r6   c                 ó`   — | t          j        d¦  «        z  | t          j        d¦  «        z	  z  S )Nr   é!   ©r   r}   ©r6   s    r   Ú_PyHASH_XXROTATEr—   @  ó-   € ð •e”l 2Ñ&Ô&Ñ&¨1µ´¸RÑ0@Ô0@Ñ+@ÑAÐBr   l   ±yn< l   wJ× i±gVc                 ó`   — | 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                 ó„  — 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/   isÓ5 iÔK*\)	Ú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Ñ Ô ð !ð !ˆÝ�A‰wŒwˆØ•;˜r‘?”?Ò"Ð"Ø�2�2ØˆtÕ'Ñ'Ñ'ˆÝ˜sÑ#Ô#ˆØÕ Ñ ˆˆàˆ2Õ"¥[°Ñ%9Ô%9Ñ9Ñ:Ñ:€Cà
�k˜"‰oŒ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dS )ÚFNVÚprefixÚsuffixN)Ú__name__Ú
__module__Ú__qualname__rª   Ú_fields_r   r   r   r±   r±   …  s%   € € € € € à	�8ÐØ	�8Ðð€H€H€Hr   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Ðð€H€H€Hr   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)   € € € € € à	�G˜b‘LÐ!Ø	�8Ðð€H€H€Hr   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)   € € € € € à	�G˜b‘LÐ!Ø	�XÐð€H€H€Hr   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ÐØ	�%Ðð
€H€H€Hr   rÅ   Ú_hashsecret_entryÚsymbolr`   c                  óÚ   ‡— t                                t          d¦  «        } i Šˆfd„} |d| j        j        ¦  «          |d| j        j        ¦  «          |d| j        j        ¦  «         ‰S )zÑRead 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Ì   )Únamer3   Úsymbol_nameÚaddrÚinfos       €r   Úinjectz!_build_hashsecret.<locals>.injectÁ  sa   ø€ Ø,×3Ò3°DÑ9Ô9ˆÝŒo˜cÑ"Ô"ˆÝÔ Ñ$Ô$ˆÝ
Œ�k 4Ñ(Ô(Ð(Ý&¨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Ž   ø€ õ $×*Ò*­9Ð6FÑGÔG€LØ€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.©r6   Úbc                 óf   — t          j        | |z  | t          j        d¦  «        |z
  z	  z  ¦  «        S )Nrg   r•   rã   s     r   Ú_ROTATEræ     s1   € õ Œ|˜a Q™Z¨QµE´LÀÑ4DÔ4DÈÑ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‰ˆÝ�A�q‰MŒM˜AÑˆÝ�A�q‰MŒM˜AÑˆÝ�A�r‰NŒNˆØ�!�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Ø�2�r˜2ˆ~Ðr   c                 ój   — t          | |||¦  «        \  } }}}t          | |||¦  «        \  } }}}| |||fS r   )r÷   rï   s       r   Ú_DOUBLE_ROUNDrù   -  sH   € õ
 ' r¨2¨r°2Ñ6Ô6‰ˆˆB��BÝ& r¨2¨r°2Ñ6Ô6‰ˆˆB��BØ�2�r˜2ˆ~Ð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 )Né8   l   ueæ`•5{ l   moÈ\…I{# l   arÊ\•Ëc l   seèr‰+# 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Ø•e”lÐ#5Ñ6Ô6Ñ6ˆBØ•e”lÐ#5Ñ6Ô6Ñ6ˆBØ•e”lÐ#5Ñ6Ô6Ñ6ˆBØ•e”lÐ#5Ñ6Ô6Ñ6ˆBàˆCØ˜Q’;�;Ý" 3¨Ñ,Ô,�Ø�q‘�Ø˜!‘�Ø�b‘�Ø!) ¨"¨b°"°bÑ!9Ô!9‘��B˜˜BØ�b‘�ð ˜Q’;�;õ ”˜SÑ!Ô!ˆAØ˜A‘gˆGÝ”| 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Ð9�DØ˜T™¥e¤lµ9¸SÀ'ÈAÁ+Ñ3NÔ3NÑ&OÔ&OØ),ñ'-ñ .�A�Aà˜Š{ˆ{Ø�Ýœ 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�à�‰FˆAØ�!‰GˆBØ%˜X b¨"¨b°"Ñ5Ô5‰NˆB��B˜Ø�!‰GˆBØ�(‰NˆBØ%˜X b¨"¨b°"Ñ5Ô5‰NˆB��B˜Ø%˜X b¨"¨b°"Ñ5Ô5‰NˆB��B˜Øð :Ø!) ¨"¨b°"°bÑ!9Ô!9‘��B˜˜BØ�b‘˜R "™WÑ%ˆAØˆHr   )r÷   rù   r	   r   r}   )Úalgr  r  r  s     @@r   Ú_gen_siphashr  6  sÃ   øø€ Ø�+ÒÐÝ$ˆHØˆLˆLØ�KÒÐÝ$ˆHØ ˆLˆLà#�mÑ#Ô#Ð#å	­¬Ý(-¬Ý(-¬Ý(-¬Ý',¤|Ý(-¬Ý',¤|Ý*/¬,Ý).¬Ý.3¬lð	"<ð 	"<ð 	
=ñ 	
=ô 	
=ð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 )Nrg   ©rÖ   )ÚmoduleÚ
get_globalÚKeyErrorr   ÚGlobalVariableÚIntTypeÚload)rQ   rR   rX   rT   ÚmodÚgvrK   Úsyms          €r   r%   z%_inject_hashsecret_read.<locals>.impl¦  s}   ø€ ØŒnˆð	Bà—’ Ñ$Ô$ˆBˆBøÝð 	Bð 	Bð 	BåÔ" 3­¬
°2©¬¸SÐAÑAÔAˆBˆBˆBð	Bøøøð �LŠL˜ÑÔˆØˆs   Š   3AÁA)	Ú
isinstancer   ÚStringLiteralr
   ÚTypingErrorÚ_hashsecretÚliteral_valuerÍ   r}   )rW   rÖ   ÚrestyrX   r%   r  s        @r   Ú_inject_hashsecret_readr#  ›  su   ø€ õ �d�EÔ/Ñ0Ô0ð <ÝÔ Ð!:Ñ;Ô;Ð;å
�dÔ(Ô
)Ô
0€CÝŒL€EØ
ˆ%�‰+Œ+€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Ý   )r5   Ú_Py_HASH_CUTOFFr£   ri   rB   Úuint8r   r%  Ú
_siphasherr   r}   )r3   Ú_lenr*  rm   Útmps        r   Ú_Py_HashBytesr1  Ã  sî   € à�Š	ˆ	Ý˜aÑ Ô Ð à�ÒÐõ ˜DÑ!Ô!ˆÝ˜‘;”;ð 	Kð 	KˆCØ˜q‘j EÑ)­R¬XµiÀÀSÑ6IÔ6IÑ-JÔ-JÑJˆEˆEà�‰ˆØÕ!Ð"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*  r1  Ú_data)r3   Ú	kindwidthr/  Úcurrent_hashr3  s       €r   r%   zunicode_hash.<locals>.implà  sQ   ø€ Ø'Ð'¨¬	Ñ2Ô2ˆ	Ý�3‰xŒxˆà”yˆØ˜2ÒÐØÐõ ! ¤¨I¸Ñ,<Ñ=Ô=Ð=r   )Únumba.cpython.unicoder3  )r3   r%   r3  s     @r   Úunicode_hashr:  Ü  s5   ø€ à9Ð9Ð9Ð9Ð9Ð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ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð ”/ WÒ,€ð ŒmÔ!€ØˆW�U˜G kÑ1Ñ2Ô2€
Øˆg�e˜X¨Ñ3Ñ4Ô4€ð ŒmÔ€ØŒmÔ€Ø�+˜cœmÔ3Ñ4Ô4€Ø”ZÔ(¨BÒ.Ð.ˆrˆr°B€ØÐ Ø!€Ø”Ô+€Ø”-Ô&€Ø”MÔ+Ð ð	ð 	ð 	ð 
€ˆ+ÑÔðð ñ Ôðð 
€ˆ$�„ðð ñ „ðð ðð ñ Ôðð Ð˜{Ø*Ø$œ|Ø$œzØ"'¤*Ø-8Ø*/¬*ð6ð 6ð 7ñ 7ô 7ð.ð .ñ7ô 7ð.ðb ðð ñ „ðð ðð ñ „ðð> Ð˜{Ø +Ø +Ø +Ø +Ø-8Ø*/¬+Ø+0¬;ð9ð 9ð :ñ :ô :ðð ñ:ô :ðð: €�” 
Ñ+Ô+Ø€�” 
Ñ+Ô+ð&ð &ñ ,Ô+ñ ,Ô+ð&ðX €�”˜jÑ)Ô)ðð ñ *Ô)ðð" €�” 
Ñ+Ô+ðð ñ ,Ô+ðð( Ô˜1Ñ˜qÒ Ð Ø#˜Ð$8Ñ9Ô9ÐØ#˜Ð$8Ñ9Ô9ÐØ#˜Ð$7Ñ8Ô8ÐàÐ˜c 5¤<Ð0Ð1Ñ1Ô1ðCð Cñ 2Ô1ðCð Cð $˜ JÑ/Ô/ÐØ#˜ JÑ/Ô/ÐØ#˜ IÑ.Ô.ÐàÐ˜c 5¤<Ð0Ð1Ñ1Ô1ðCð Cñ 2Ô1ðCð
 Ð °kØ/:Ø/:Ø +ð-ð -ð .ñ .ô .ðð ñ	.ô .ðð& €�” *Ñ-Ô-ðð ñ .Ô-ðð(ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ˆ)ñ ô ð ðð ð ð ð ˆiñ ô ð ðð ð ð ð ˆiñ ô ð ðð ð ð ð ˆIñ ô ð ðð ð ð ð �uñ ô ð ð �JÐ2°X¸wÐ4GÑ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ðð Ð E¤LØ$)¤LØ$)¤LØ$)¤Lð4ð 4ð 5ñ 5ô 5ðð ñ	5ô 5ðð
 Ð E¤LØ$)¤LØ$)¤LØ$)¤Lð4ð 4ð 5ñ 5ô 5ðð ñ	5ô 5ðð
Yð Yð Yðv �˜kÑ*Ô*€JØ�˜kÑ*Ô*€Jà0°KÒ?Ð?��ÀZ€J€Jð 4Ð6GÑ
G€CØ
ˆ*�S‰/Œ/Ðð ðð ñ „ðð0#ð #ð #ð 
€Ð
ÑÔðð ñ Ôðð Ð˜' ;Ð/Ð0Ñ0Ô0ð!ð !ñ 1Ô0ð!ð0 €�Ô" JÑ/Ô/ðð ñ 0Ô/ðð ð r   