Ë
    èÿæi¢i  ã                   ó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    új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/cpython/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˜
Ô#Ü˜s¤G¨C°Ó$<Ó=Ð=äÐ/Ó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%   € ä�s‹O€EØ”�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Œ>Ü�H‰H�QŒKØ�A’Ü"Ð"ä#�|Ð#ô "Ó#ˆAÜ! !Ó$Ð$ä�:‰:�a‹=�D€A€qà€DØ	ˆAŠØˆØˆBˆð 	
€AÙØ�2‰gœÑ(¨A´,ÀÑ2CÑ,DÑDˆØ	ˆ[ÑˆØ	ˆR‰ˆÜ�‹FˆØ	ˆQ‰ˆØ	ˆQ‰ˆØ”ÒØ”Ñ ˆAò ð 	ˆA‚vØ”Ñ‰ä˜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"   € Ø�1‰gˆØ�}‰}˜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À%ÓHˆEàˆ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Ü—<‘< Ó$Ð$¨Ñ3€Jð 
Œ}Ñ	 Ñ!€Að 	
€AÜ
œÑ
&€BÜ�Q˜‘U˜B Ö#ˆØ”-ÑˆØ”/Ñ!ˆØ�"‰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©   ø€ ñ �3‹iˆÜ�#‹hˆØ”Ò Ø�aŠxØ�ô ˜cÓ"Ð"ð ˜Ò#Ü  Ó/�ô ˜cÓ"Ð"ô ! “o�ô ˜cÓ"Ð"ð !ˆLØ�QŠwØ�d�Ø#�Ü˜S“/ˆCÙØ�d�Ü˜cÓ"Ð"r   )ÚsysÚmaxsizer   Úint64r(   Úuint64)r0   r"   rr   rs   rt   s     @@@r   Úint_hashry   á   sN   ú€ ô Ÿ+™+¨Ò0‘B°b€MÜ—+‘+Ð1Ó2€Kô " # x°Ô7Œ5�;Š;¼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#   € äŸ™¤F¨3£KÓ0ˆJÜ# 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   € Ü˜Ÿ™“>ˆÜ˜Ÿ™“>ˆð œl¨XÑ5Ñ5ˆÜ˜hÓ'Ð'r   r   r€   s     r   Úcomplex_hashr‹   !  s   € ò	(ð €Kr   é   é   l   ‡J×Æf»q	 l   Ok©Oô8• l   Åg¬,¼,§> r3   c                 ód   — | t        j                  d«      z  | t        j                  d«      z	  z  S )Nr   é!   ©r   rx   ©r3   s    r   Ú_PyHASH_XXROTATEr’   ;  ó+   € ð ”e—l‘l 2Ó&Ñ&¨1´·±¸RÓ0@Ñ+@ÑAÐBr   l   ±yn< l   wJ× i±gV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,   isÓ5 iÔK*\)	Ú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Ö ˆÜ�A‹wˆØ”;˜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   „ à	�G˜b‘LÐ!Ø	�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   „ à	�G˜b‘LÐ!Ø	�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 )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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Ñ3°DÓ9ˆÜ�o‰o˜cÓ"ˆÜ×Ñ Ó$ˆÜ
�‰�k 4Ô(Ü&¨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   ø€ ô $×*Ñ*¬9Ð6FÓG€LØ€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/   € ô �|‰|˜a Q™Z¨Q´E·L±LÀÓ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‰ˆÜ�A�q‹M˜AÑˆÜ�A�q‹M˜AÑˆÜ�A�r‹NˆØ�!�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Ø�2�r˜2ˆ~Ðr   c                 óZ   — t        | |||«      \  } }}}t        | |||«      \  } }}}| |||fS r   )rò   rê   s       r   Ú_DOUBLE_ROUNDrô   (  sB   € ô
 ' r¨2¨r°2Ó6‰ˆˆB��BÜ& r¨2¨r°2Ó6‰ˆˆB��BØ�2�r˜2ˆ~Ð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 )Né8   l   ueæ`•5{ l   moÈ\…I{# l   arÊ\•Ëc l   seèr‰+# 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Ø”e—l‘lÐ#5Ó6Ñ6ˆBØ”e—l‘lÐ#5Ó6Ñ6ˆBØ”e—l‘lÐ#5Ó6Ñ6ˆBØ”e—l‘lÐ#5Ó6Ñ6ˆBàˆCØ˜Q’;Ü" 3¨Ó,�Ø�q‘�Ø˜!‘�Ø�b‘�Ù!)¨"¨b°"°bÓ!9‘��B˜˜BØ�b‘�ð ˜Q“;ô —‘˜SÓ!ˆAØ˜A‘gˆGÜ—|‘| 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Ü!ŸL™L¨°S©Ó9Ð9�DØ˜T™¤e§l¡l´9¸SÀ'È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�à�‰FˆAØ�!‰GˆBÙ% b¨"¨b°"Ó5‰NˆB��B˜Ø�!‰GˆBØ�(‰NˆBÙ% b¨"¨b°"Ó5‰NˆB��B˜Ù% b¨"¨b°"Ó5‰NˆB��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ä	¬¯©Ü(-¯©Ü(-¯©Ü(-¯©Ü',§|¡|Ü(-¯©Ü',§|¡|Ü*/¯,©,Ü).¯©Ü.3¯l©lñ	"<ô 	
=ô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   ø€ Ø�n‰nˆð	Bà—‘ Ó$ˆBð �L‰L˜ÓˆØˆøô	 ò 	Bä×"Ñ" 3¬¯
©
°2«¸SÔAŠBð	Bús   �3 ³4A*Á)A*)	Ú
isinstancer   ÚStringLiteralr
   ÚTypingErrorÚ_hashsecretÚliteral_valuerÈ   rx   )rR   rÑ   ÚrestyrS   r"   r  s        @r   Ú_inject_hashsecret_readr  –  s`   ø€ ô �dœE×/Ñ/Ô0Ü× Ñ Ð!:Ó;Ð;ä
�d×(Ñ(Ñ
)×
0Ñ
0€CÜ�L‰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  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Ó!ˆÜ˜–;ˆCØ˜q‘j EÑ)¬R¯X©X´iÀÀSÓ6IÓ-JÑJ‰Eð ð 	�‰ˆØÔ!Ð"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ˆ	Ü�3‹xˆà—y‘yˆØ˜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ð
 �m‰m×!Ñ!€Ù�U˜G kÑ1Ó2€
Ù�e˜X¨Ñ3Ó4€ð �m‰m×Ñ€Ø�m‰m×Ñ€Ù˜cŸm™m×3Ñ3Ó4€Ø—Z‘Z×(Ñ(¨BÒ.‰r°B€ØÐ Ø!€Ø—‘×+Ñ+€Ø—-‘-×&Ñ&€Ø—M‘M×+Ñ+Ð ò	ñ 
ˆ+Óñó ðñ 
ˆ$ƒñó ðð ñó ðñ ˜{Ø*Ø$Ÿ|™|Ø$Ÿz™zØ"'§*¡*Ø-8Ø*/¯*©*ñ6ô 7ñ+ó7ð+ð\ ñó ðð ñó ðñ> ˜{Ø +Ø +Ø +Ø +Ø-8Ø*/¯+©+Ø+0¯;©;ñ9ô :ñó:ðñ: �—‘ 
Ó+Ù�—‘ 
Ó+ñ&ó ,ó ,ð&ñX �—‘˜jÓ)ñó *ðñ" �—‘ 
Ó+ñó ,ðð( ×Ñ˜1Ñ˜qÒ Ù#Ð$8Ó9ÐÙ#Ð$8Ó9ÐÙ#Ð$7Ó8Ðá˜c 5§<¡<Ð0Ô1ñCó 2ñCñ $ JÓ/ÐÙ# JÓ/ÐÙ# IÓ.Ðá˜c 5§<¡<Ð0Ô1ñCó 2ðCñ
  °kØ/:Ø/:Ø +ñ-ô .ñó	.ðñ& �—‘ *Ó-ñó .ð÷(÷ ôˆ)ô ôˆiô ôˆiô ôˆIô ô�uô ñ Ð2°X¸wÐ4GÓHÐ òñ6  Ó!€ð Ð9Ò9ð
 ˜EÒ!ð'ˆð 	ˆ�‰�cÔñ^  5§<¡<Ø#(§<¡<ñ3ô 4ñNó4ðNñ  5§<¡<Ø#(§<¡<Ø#(§<¡<Ø#(§<¡<Ø#(§<¡<Ø#(§<¡<ñ3ô 4ñó4ðñ  E§L¡LØ$)§L¡LØ$)§L¡LØ$)§L¡Lñ4ô 5ñó	5ðñ
  E§L¡LØ$)§L¡LØ$)§L¡LØ$)§L¡Lñ4ô 5ñó	5ðò
Yñv ˜kÓ*€JÙ˜kÓ*€Jà0°KÒ?‘ÀZ�Jð 4Ð6GÑ
G€CÙ
�S‹/Ðð ñó ðò0#ñ 
Ð
Óñó ðñ ˜' ;Ð/Ô0ñ!ó 1ð!ñ0 �×"Ñ" JÓ/ñó 0ñr   