§
    ƒÛg-F  ã                   ó¦  — d 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	Z
ddlmZmZmZmZ ddlmZmZ ddlZddlmZmZmZmZmZ ddlmZ dd	lmZ d
„ Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de ¦  «        Z! G d„ de ¦  «        Z" G d„ de ¦  «        Z# G d„ de¦  «        Z$e%dk    r ej&        ¦   «          dS dS )z*
Test hashing of various supported types.
é    N)Údefaultdict)Údedent)ÚjitÚconfigÚtypedÚtypeof)ÚtypesÚutils)ÚTestCaseÚtagÚCompilationCacheÚskip_unless_py10_or_laterÚrun_in_subprocess)Úcompile_time_get_string_data)Úhashingc                 ó    — t          | ¦  «        S ©N©Úhash©Úxs    úN/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_hashing.pyÚhash_usecaser      s   € Ý�‰7Œ7€Nó    c                   ó   — e Zd Zd„ ZdS )ÚTestHashingSetupc                 óf   — d}t          j        t          j        dt	          |¦  «        g¦  «         d S )Na±  
        import sys
        import warnings
        from collections import namedtuple

        # hash_info is a StructSequence, mock as a named tuple
        fields = ["width", "modulus", "inf", "nan", "imag", "algorithm",
                  "hash_bits", "seed_bits", "cutoff"]

        hinfo = sys.hash_info
        FAKE_HASHINFO = namedtuple('FAKE_HASHINFO', fields)

        fd = dict()
        for f in fields:
            fd[f] = getattr(hinfo, f)

        fd['algorithm'] = 'fnv'

        fake_hashinfo = FAKE_HASHINFO(**fd)

        # replace the hashinfo with the fnv version
        sys.hash_info = fake_hashinfo
        with warnings.catch_warnings(record=True) as warns:
            # Cause all warnings to always be triggered.
            warnings.simplefilter("always")
            from numba import njit
            @njit
            def foo():
                hash(1)
            foo()
            assert len(warns) > 0
            expect = "FNV hashing is not implemented in Numba. See PEP 456"
            for w in warns:
                if expect in str(w.message):
                    break
            else:
                raise RuntimeError("Expected warning not found")
        z-c)Ú
subprocessÚ
check_callÚsysÚ
executabler   )ÚselfÚworks     r   Útest_warn_on_fnvz!TestHashingSetup.test_warn_on_fnv    s2   € ð%ˆõL 	Ô�sœ~¨tµV¸D±\´\ÐBÑCÔCÐCÐCÐCr   N)Ú__name__Ú
__module__Ú__qualname__r$   © r   r   r   r      s(   € € € € € ð(Dð (Dð (Dð (Dð (Dr   r   c                   ó|   — e Zd Zg d¢g d¢gg d¢g d¢g d¢g d¢g d¢gg d¢g d	¢g d
¢g d¢g d¢gdœZd„ Zd„ Zdd„Zd„ ZdS )ÚTestHashAlgs)éˆ\ˆr+   r+   r+   )iLÌ‡×l   LL//+³?iTSÏlûÿÿÿqU:~Œ@[ )éò0&ìûÿÿÿO³wq!~ r,   r-   )ééuÖÅì   éu¬Cœ- r.   r/   )é|#|Üì   |#ø8ÿ
^ r0   r1   )i=½Õ¾lûÿÿÿÃBT='8 i\eîÁl   \eÜ+=Ë" )i[Ýlûÿÿÿò$ÛEü,ß; iwmHÏlûÿÿÿ‰oað_gv )éÞîpGì   ÞnáYD~ r2   r3   )é–SìûÿÿÿjxY_oWÇs r4   r5   )é¯ ú—ì   ¯ ô/Ö“l r6   r7   )iöJkl   öJÖ:ø8`~ iÖÄlûÿÿÿü)øwJµ )iàQ	œlûÿÿÿ .íG¥UJG iO{‘lûÿÿÿ±Á]±D] )Údjba33xÚ	siphash13Ú	siphash24c                 óþ   — |t           j        j        k     rd}nt           j        j        }t          j         }t           j        dk    r|rdnd}nt           j        dk    sJ ‚|rdnd}| j        |         |         |         S )Nr8   Úlittleé   r   Úbigé   é   )r    Ú	hash_infoÚcutoffÚ	algorithmr   Ú	IS_32BITSÚ	byteorderÚknown_hashes)r"   ÚpositionÚlengthrC   ÚIS_64BITÚplatforms         r   Úget_expected_hashzTestHashAlgs.get_expected_hashw   s„   € Ø•C”MÔ(Ò(Ð(Ø!ˆIˆIåœÔ/ˆIÝÔ'Ð'ˆÝŒ=˜HÒ$Ð$Ø$Ð+�q�q¨!ˆHˆHå”= EÒ)Ð)Ð)Ð)Ø$Ð+�q�q¨!ˆHØÔ  Ô+¨HÔ5°hÔ?Ð?r   c                 ó   — d|z  S )Nzprint(hash(eval(%a)))r(   )r"   Úrepr_s     r   Úget_hash_commandzTestHashAlgs.get_hash_command„   s   € Ø&¨Ñ.Ð.r   Nc                 óL  — t           j                             ¦   «         }|�t          |¦  «        |d<   n|                     dd ¦  «         t          |                      |¦  «        |¬¦  «        \  }}|                     ¦   «                              ¦   «         }t          |¦  «        S )NÚPYTHONHASHSEED)ÚcodeÚenv)
ÚosÚenvironÚcopyÚstrÚpopr   rN   ÚdecodeÚstripÚint)r"   rM   ÚseedrR   ÚoutÚ_Ústdouts          r   Úget_hashzTestHashAlgs.get_hash‡   s’   € ÝŒj�oŠoÑÔˆØÐÝ$'¨¡I¤IˆCÐ Ñ!Ð!à�GŠGÐ$ dÑ+Ô+Ð+Ý"¨×(=Ò(=¸eÑ(DÔ(DØ'*ð,ñ ,ô ,‰ˆˆQà—’‘”×#Ò#Ñ%Ô%ˆÝ�6‰{Œ{Ðr   c                 ó4  — d}|D ]’\  }}}|                       ||¬¦  «        5  |                      t          |¦  «        |¬¦  «        }|                      |t	          |¦  «        ¦  «        }|                      ||¦  «         d d d ¦  «         n# 1 swxY w Y   Œ“d S )N))Úabcr   r   )ra   é*   r=   )Úabcdefghijkrb   r@   )õ
   Ã¤Ãºâˆ‘â„‡r   r?   )rd   rb   é   )Ú	input_strr[   )r[   )ÚsubTestr_   ÚreprrK   ÚlenÚassertEqual)r"   Úargsrf   r[   rG   ÚgotÚexpecteds          r   Útest_against_cpython_goldz&TestHashAlgs.test_against_cpython_gold’   sã   € ð>ˆð *.ð 	0ð 	0Ñ%ˆI�t˜XØ—’¨	¸�Ñ=Ô=ð 0ð 0Ø—m’m¥D¨¡O¤O¸$�mÑ?Ô?�Ø×1Ò1°(½CÀ	¹N¼NÑKÔK�Ø× Ò   hÑ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0øð	0ð 	0s   ¢ABÂB	ÂB	r   )r%   r&   r'   rF   rK   rN   r_   rn   r(   r   r   r*   r*   K   sè   € € € € € ð :Ð9Ð9àNÐNÐNð	ð MÐLÐLàNÐNÐNàNÐNÐNàQÐQÐQàPÐPÐPð
ð  OÐNÐNàNÐNÐNàPÐPÐPàOÐOÐOàRÐRÐRð
ð)!ð !€LðF@ð @ð @ð/ð /ð /ð	ð 	ð 	ð 	ð	0ð 	0ð 	0ð 	0ð 	0r   r*   c                   ó:   — e Zd Zd„ Zd„ Zej        fd„Zd„ Zd„ Z	dS )ÚBaseTestc                 óL   —  t          d¬¦  «        t          ¦  «        | _        d S )NT©Únopython)r   r   Úcfunc©r"   s    r   ÚsetUpzBaseTest.setUp    s"   € Ø'•S $Ð'Ñ'Ô'­Ñ5Ô5ˆŒ
ˆ
ˆ
r   c           	      óÀ  — | j         }t          |¦  «        D ]Æ} ||¦  «        }|                      |t          ¦  «         	 |                      |t          |¦  «        ¦  «         ŒM# t          $ rm}t          d¦  «         t          ||t          |¦  «        ¦  «         t          d¦  «         t          t          |¦  «        t          j
        dz
  ¦  «         |‚d }~ww xY wd S )Nzval, nb_hash, hash(val)z%abs(val), hashing._PyHASH_MODULUS - 1r=   )rt   ÚlistÚassertIsInstancerZ   rj   r   ÚAssertionErrorÚprintÚabsr   Ú_PyHASH_MODULUS)r"   Úvaluesrt   ÚvalÚnb_hashÚes         r   Úcheck_hash_valueszBaseTest.check_hash_values£   sç   € Ø”
ˆÝ˜‘<”<ð 
	ð 
	ˆCØ�e˜C‘j”jˆGØ×!Ò! '­3Ñ/Ô/Ð/ðØ× Ò  ­$¨s©)¬)Ñ4Ô4Ð4Ð4øÝ!ð ð ð ÝÐ/Ñ0Ô0Ð0Ý�c˜7¥D¨¡I¤IÑ.Ô.Ð.ÝÐ=Ñ>Ô>Ð>Ý•c˜#‘h”h¥Ô 7¸!Ñ ;Ñ<Ô<Ð<Ø�øøøøðøøøð
	ð 
	s   Á #A$Á$
CÁ.A(CÃCc              #   ó  K  — dD ]~}t          j        |¦  «        }|j        |cxk    r|j        k    sn Œ0d}t	          |||z   ¦  «        V — t	          ||d|z  z   d¦  «        V — t	          ||d|z  z   d¦  «        V — dgV — Œd S )N)r   iÎÿÿÿi`ê  l        éd   é€   éÿÿÿÿ)ÚnpÚiinfoÚminÚmaxÚrange)r"   ÚtypÚstartÚinfoÚns        r   Úint_sampleszBaseTest.int_samples±   s¾   è è € Ø-ð 	ð 	ˆEÝ”8˜C‘=”=ˆDØ”8˜uÐ0Ð0Ò0Ð0¨¬Ò0Ð0Ð0Ð0ØØˆAÝ˜˜u q™yÑ)Ô)Ð)Ð)Ð)Ý˜˜u s¨Q¡w™°Ñ4Ô4Ð4Ð4Ð4Ý˜˜u s¨Q¡w™°Ñ4Ô4Ð4Ð4Ð4Ø�$ˆJˆJˆJˆJð	ð 	r   c              #   ó0  K  — t          j        |¦  «        }dd|j        dz  |j        dz  fD ]†}d}t          |j        ||j        z  ¦  «        }d|dz  |fD ]\}||k     rŒ	t          j        ||||z  z   |¦  «        }|                     |¦  «        }|V — | V — ||                     ¦   «         z   V — Œ]Œ‡dddd	t          d
¦  «        t          d
¦  «         g}t          j
        dk     r"|                     t          d¦  «        ¦  «          ||¦  «        V — d S )Nr   é
   ç      à?g     @�@r„   g333333ó?g        g       €g      ð¿Úinf©r?   r’   Únan)r‡   ÚfinforŠ   ÚtinyÚ
resolutionÚlinspaceÚastypeÚmeanÚfloatr
   Ú	PYVERSIONÚappend)r"   rŒ   rŽ   r�   r�   Úmin_stepÚstepÚas           r   Úfloat_sampleszBaseTest.float_samples¼   s8  è è € ÝŒx˜‰}Œ}ˆà˜˜TœX¨™_¨d¬h¸Ñ.?Ð@ð 
	#ð 
	#ˆEØˆAÝ˜4œ9 e¨d¬oÑ&=Ñ>Ô>ˆHØ˜h¨#™o¨xÐ8ð #ð #�Ø˜(’?�?ØÝ”K  u¨q°4©xÑ'7¸Ñ;Ô;�Ø—H’H˜S‘M”M�Ø���Ø�b���Ø˜!Ÿ&š&™(œ(‘lÐ"Ð"Ð"Ð"ð#ð �#�t˜T¥5¨¡<¤<µ%¸±,´,°Ð@ˆõ Œ?˜WÒ$Ð$Ø�HŠH•U˜5‘\”\Ñ"Ô"Ð"àˆc�!‰fŒfˆˆˆˆˆr   c              #   óf  K  — |                       |¦  «        D ]˜}|                       |¦  «        D ]€}|d t          |¦  «        …         }|d t          |¦  «        …         }| |d¦  «        |z  z   }t          j        dk    r+t	          j        t	          j        |¦  «        ¦  «        s|V — Œ||V — Œ�Œ™d S )Ny              ð?r•   )r£   ri   r
   rž   r‡   ÚanyÚisnan)r"   rŒ   Úfloat_tyÚrealÚimagr¢   s         r   Úcomplex_sampleszBaseTest.complex_samplesÕ   sË   è è € Ø×&Ò& xÑ0Ô0ð 	ð 	ˆDØ×*Ò*¨8Ñ4Ô4ð ð �à˜J�S ™YœY˜JÔ'�Ø˜J�S ™YœY˜JÔ'�Ø˜3˜3˜r™7œ7 T™>Ñ)�õ ”? gÒ-Ð-Ýœ6¥"¤(¨1¡+¤+Ñ.Ô.ð  Ø˜˜˜øà�G�G�G�Gðð	ð 	r   N)
r%   r&   r'   rv   r‚   r‡   Úint64r�   r£   rª   r(   r   r   rp   rp   ž   sk   € € € € € ð6ð 6ð 6ðð ð ð !œhð 	ð 	ð 	ð 	ðð ð ð2ð ð ð ð r   rp   c                   óL   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d„ ¦   «         Zd	S )
ÚTestNumberHashingz'
    Test hashing of number types.
    c                 óº   — |                       |¦  «        D ]D}|                      |j        t          j        |¦  «        ¦  «         |                      |¦  «         ŒEd S r   )r£   rj   Údtyper‡   r‚   )r"   rŒ   r¢   s      r   Úcheck_floatszTestNumberHashing.check_floatsê   s`   € Ø×#Ò# CÑ(Ô(ð 	&ð 	&ˆAØ×Ò˜QœW¥b¤h¨s¡m¤mÑ4Ô4Ð4Ø×"Ò" 1Ñ%Ô%Ð%Ð%ð	&ð 	&r   c                 ó¼   — |                       ||¦  «        D ]D}|                      |j        t          j        |¦  «        ¦  «         |                      |¦  «         ŒEd S r   )rª   rj   r¯   r‡   r‚   )r"   rŒ   r§   r¢   s       r   Úcheck_complexzTestNumberHashing.check_complexï   sb   € Ø×%Ò% c¨8Ñ4Ô4ð 	&ð 	&ˆAØ×Ò˜QœW¥b¤h¨s¡m¤mÑ4Ô4Ð4Ø×"Ò" 1Ñ%Ô%Ð%Ð%ð	&ð 	&r   c                 ó‚   — |                       t          j        ¦  «         |                       t          j        ¦  «         d S r   )r°   r‡   Úfloat32Úfloat64ru   s    r   Útest_floatszTestNumberHashing.test_floatsô   s4   € Ø×Ò�"œ*Ñ%Ô%Ð%Ø×Ò�"œ*Ñ%Ô%Ð%Ð%Ð%r   c                 ó®   — |                       t          j        t          j        ¦  «         |                       t          j        t          j        ¦  «         d S r   )r²   r‡   Ú	complex64r´   Ú
complex128rµ   ru   s    r   Útest_complexzTestNumberHashing.test_complexø   s<   € Ø×Ò�2œ<­¬Ñ4Ô4Ð4Ø×Ò�2œ=­"¬*Ñ5Ô5Ð5Ð5Ð5r   c                 ó4   — |                       ddg¦  «         d S )NFT©r‚   ru   s    r   Ú	test_boolzTestNumberHashing.test_boolü   s    € Ø×Ò  t˜}Ñ-Ô-Ð-Ð-Ð-r   c           	      ó¾  — g }t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        fD �]n}|  	                    |¦  «        D ]}|  
                    |¦  «         Œt          j        |¦  «        }|  
                     |d¦  «        g¦  «         |  
                     |d¦  «        g¦  «         dt          |¦  «        v} |¦   «         j        }|j        |j        fD ]½}d|z  }|}	t!          |¦  «        D ]¤}
d}d}|	g}||fD ],}|	|z  }|t"          j        k     r|                     |¦  «         Œ-|D ]!}|  
                     ||¦  «        g¦  «         Œ"|r0|D ]-}||j        k    r |  
                     || ¦  «        g¦  «         Œ.|dk    r	|	dz  dz  }	ŒŸ|	dz	  }	Œ¥Œ¾�Œp|  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d	¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d	¦  «        g¦  «         |  
                    t          j        d
¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         |  
                    t          j        d¦  «        g¦  «         d S )Nr†   r   Úuinté   ì   ª*UUª*UU
 ì   UUª*UUª* r=   l   þÿÿÿ l   ÿÿÿÿ lûÿÿÿÿÿÿÿ lûÿÿÿöÿÿÿ lûÿÿÿœÿÿÿ i  €i
  €id  €)r‡   Úint8Úuint8Úint16Úuint16Úint32Úuint32r«   Úuint64r�   r‚   rˆ   rV   Úitemsizer‰   rŠ   r‹   r    ÚmaxsizerŸ   )r"   ÚminmaxÚtyr¢   rŽ   ÚsignedÚszr   ÚshiftsÚyÚiÚtwiddle1Útwiddle2ÚvalsÚtwr   Úvs                    r   Ú	test_intszTestNumberHashing.test_intsÿ   s_  € ØˆÝ”7�BœH¥b¤hµ´	Ý”8�RœY­¬µ"´)ð=ð #	#ñ #	#ˆBà×%Ò% bÑ)Ô)ð *ð *�Ø×&Ò& qÑ)Ô)Ð)Ð)Ý”8˜B‘<”<ˆDð ×"Ò" B B r¡F¤F 8Ñ,Ô,Ð,Ø×"Ò" B B q¡E¤E 7Ñ+Ô+Ð+Ø¥3 r¡7¤7Ð*ˆFà�‘””ˆBØ”h ¤Ð)ð #ð #�Ø˜R™�ð �Ý˜v™œð #ð #�AØ1�HØ1�HØ˜3�DØ'¨Ð2ð -ð -˜Ø (™l˜Ø¥¤Ò,Ð,Ø ŸKšK¨Ñ,Ô,Ð,øØ!ð 8ð 8˜Ø×.Ò.°°°1±´¨wÑ7Ô7Ð7Ð7Øð Aà!%ð Að A˜AØ  D¤Hš}˜}Ø $× 6Ò 6¸¸¸A¸2¹¼°xÑ @Ô @Ð @øØ˜A’v�vØ ™U q™L˜˜à ™F˜˜ð%#ñ#ð6 	×Ò¥¤Ð);Ñ <Ô <Ð=Ñ>Ô>Ð>Ø×Ò¥¤Ð);Ñ <Ô <Ð=Ñ>Ô>Ð>Ø×Ò¥¤	Ð*<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤	Ð*<Ñ =Ô =Ð>Ñ?Ô?Ð?ð 	×Ò¥¤Ð)<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤Ð)<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤Ð)<Ñ =Ô =Ð>Ñ?Ô?Ð?Ø×Ò¥¤¨Ñ 5Ô 5Ð6Ñ7Ô7Ð7Ø×Ò¥¤¨Ñ 5Ô 5Ð6Ñ7Ô7Ð7Ø×Ò¥¤¨Ñ 5Ô 5Ð6Ñ7Ô7Ð7Ð7Ð7r   c                 ó¶   ‡ — d„ t          d¦  «        D ¦   «         }t          ˆ fd„|D ¦   «         ¦  «        }‰                      t          |¦  «        d¦  «         d S )Nc                 ó,   — g | ]}t          d ¦  «        ‘ŒS )r–   )r�   )Ú.0rÒ   s     r   ú
<listcomp>z9TestNumberHashing.test_py310_nan_hash.<locals>.<listcomp>?  s   € Ð-Ð-Ð-˜a�U�5‰\Œ\Ð-Ð-Ð-r   r’   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r(   )rt   )rÛ   Úzr"   s     €r   rÜ   z9TestNumberHashing.test_py310_nan_hash.<locals>.<listcomp>@  s#   ø€ Ð,Ð,Ð, Q�4—:’:˜a‘=”=Ð,Ð,Ð,r   r=   )r‹   ÚsetÚassertGreaterri   )r"   r   r\   s   `  r   Útest_py310_nan_hashz%TestNumberHashing.test_py310_nan_hash6  sb   ø€ ð .Ð-¥5¨¡9¤9Ð-Ñ-Ô-ˆÝÐ,Ð,Ð,Ð,¨!Ð,Ñ,Ô,Ñ-Ô-ˆØ×Ò�3˜s™8œ8 QÑ'Ô'Ð'Ð'Ð'r   N)r%   r&   r'   Ú__doc__r°   r²   r¶   rº   r½   rØ   r   rá   r(   r   r   r­   r­   å   s•   € € € € € ðð ð&ð &ð &ð
&ð &ð &ð
&ð &ð &ð6ð 6ð 6ð.ð .ð .ð48ð 48ð 48ðn ð
(ð 
(ñ Ôð
(ð 
(ð 
(r   r­   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTestTupleHashingz!
    Test hashing of tuples.
    c                 óX   ‡— |D ]%}ˆfd„|D ¦   «         }|                       |¦  «         Œ&d S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r(   r(   )rÛ   r¢   Úsplits     €r   rÜ   z1TestTupleHashing.check_tuples.<locals>.<listcomp>K  s!   ø€ Ð/Ð/Ð/ 1�e�e˜A‘h”hÐ/Ð/Ð/r   r¼   )r"   Úvalue_generatorrç   r~   Útupless     `  r   Úcheck_tupleszTestTupleHashing.check_tuplesI  sL   ø€ Ø%ð 	+ð 	+ˆFØ/Ð/Ð/Ð/¨Ð/Ñ/Ô/ˆFØ×"Ò" 6Ñ*Ô*Ð*Ð*ð	+ð 	+r   c                 ó  ‡— t           j        Šˆfd„}ˆfd„}|                      |                      ¦   «         |¦  «         |                      |                      ¦   «         |¦  «         |                      g d¢¦  «         d S )Nc                 óR   •—  ‰| ¦  «        } |  ‰d¦  «        z  |  ‰d¦  «        z  fS )z9
            Split i's bits into 2 integers.
            rÂ   rÁ   r(   ©rÒ   rŒ   s    €r   Úsplit2z8TestTupleHashing.test_homogeneous_tuples.<locals>.split2Q  sB   ø€ ð ��A‘”ˆAØ˜˜Ð.Ñ/Ô/Ñ/Ø˜˜Ð.Ñ/Ô/Ñ/ðð r   c                 ól   •—  ‰| ¦  «        } |  ‰d¦  «        z  |  ‰d¦  «        z  |  ‰d¦  «        z  fS )z9
            Split i's bits into 3 integers.
            l   ’$’$’$’$ l   $I$I$I$I l   IIII	 r(   rí   s    €r   Úsplit3z8TestTupleHashing.test_homogeneous_tuples.<locals>.split3Z  sU   ø€ ð ��A‘”ˆAØ˜˜Ð.Ñ/Ô/Ñ/Ø˜˜Ð.Ñ/Ô/Ñ/Ø˜˜Ð.Ñ/Ô/Ñ/ðð r   )©é   )r   )r   r   )r“   )r“   rñ   )éþÿÿÿr?   )re   é   )r‡   rÉ   rê   r�   r‚   )r"   rî   rð   rŒ   s      @r   Útest_homogeneous_tuplesz(TestTupleHashing.test_homogeneous_tuplesN  sµ   ø€ ÝŒiˆð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	×Ò˜$×*Ò*Ñ,Ô,¨fÑ5Ô5Ð5Ø×Ò˜$×*Ò*Ñ,Ô,¨fÑ5Ô5Ð5ð
 	×Òð  >ð  >ð  >ñ 	?ô 	?ð 	?ð 	?ð 	?r   c                 ó`   — d}d„ }|                       |                      ¦   «         |¦  «         d S )Nl            c                 ó~   — | dz  }| dz  | dz	  dz  z  }t          j        |¦  «        t          j        |dz  ¦  «        fS )NrÂ   l   ª*UU é    g-Cëâ6?)r‡   r«   rµ   )rÒ   r¢   Úbs      r   rç   z9TestTupleHashing.test_heterogeneous_tuples.<locals>.splitp  sE   € ØÐ&Ñ&ˆAØ�Z‘ Q¨"¡W°
Ñ$:Ñ;ˆAÝ”8˜A‘;”;¥¤
¨1¨v©:Ñ 6Ô 6Ð6Ð6r   )rê   r�   )r"   Úmodulorç   s      r   Útest_heterogeneous_tuplesz*TestTupleHashing.test_heterogeneous_tuplesm  s@   € Øˆð	7ð 	7ð 	7ð
 	×Ò˜$×*Ò*Ñ,Ô,¨eÑ4Ô4Ð4Ð4Ð4r   N)r%   r&   r'   râ   rê   rõ   rû   r(   r   r   rä   rä   D  sK   € € € € € ðð ð+ð +ð +ð
?ð ?ð ?ð>5ð 5ð 5ð 5ð 5r   rä   c                   óX   — e Zd Zd„ Zd„ Zd„ Z ej        d¦  «        d„ ¦   «         Zd„ Z	dS )ÚTestUnicodeHashingc                 ó6  — d}t          t          |¦  «        ¦  «        D ] }|                      |d |…         g¦  «         Œ!d}|                     t	          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        D ] }|                      |d |…         g¦  «         Œ!d}|                     t	          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        D ] }|                      |d |…         g¦  «         Œ!d}|                      |¦  «         d S )NÚabcdefghijklmnopqrstuvwxyzu   çœ¼u   ðŸ��âš¡Ú )r‹   ri   r‚   Újoinrx   )r"   Úkind1_stringrÒ   ÚsepÚkind2_stringÚkind4_stringÚempty_strings          r   Útest_basic_unicodez%TestUnicodeHashing.test_basic_unicodez  s(  € Ø3ˆÝ•s˜<Ñ(Ô(Ñ)Ô)ð 	7ð 	7ˆAØ×"Ò" L°°!°Ô$4Ð#5Ñ6Ô6Ð6Ð6àˆØ—x’x¥ \Ñ 2Ô 2Ñ3Ô3ˆÝ•s˜<Ñ(Ô(Ñ)Ô)ð 	7ð 	7ˆAØ×"Ò" L°°!°Ô$4Ð#5Ñ6Ô6Ð6Ð6àˆØ—x’x¥ \Ñ 2Ô 2Ñ3Ô3ˆÝ•s˜<Ñ(Ô(Ñ)Ô)ð 	7ð 	7ˆAØ×"Ò" L°°!°Ô$4Ð#5Ñ6Ô6Ð6Ð6àˆØ×Ò˜|Ñ,Ô,Ð,Ð,Ð,r   c                 óÖ   — d}t          d¬¦  «        d„ ¦   «         }t          |¦  «        d         }|                      |dk    ¦  «         |                       ||¦  «        |¦  «         d S )Nrÿ   Trr   c                 ó   — | j         S r   )Ú_hashr   s    r   Úfnz4TestUnicodeHashing.test_hash_passthrough.<locals>.fn‘  s	   € à”7ˆNr   r†   ©r   r   Ú
assertTruerj   ©r"   r  r  Ú
hash_values       r   Útest_hash_passthroughz(TestUnicodeHashing.test_hash_passthroughŒ  s   € ð 4ˆå	�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	õ 2°,Ñ?Ô?ÀÔCˆ
Ø�Š˜
 bÒ(Ñ)Ô)Ð)Ø×Ò˜˜˜LÑ)Ô)¨:Ñ6Ô6Ð6Ð6Ð6r   c                 óÚ   — d}t          d¬¦  «        d„ ¦   «         }t          |¦  «        d         }|                      |dk    ¦  «         |                       ||¦  «        ||f¦  «         d S )Nrÿ   Trr   c                 ó.   — | j         t          | ¦  «        fS r   )r
  r   r   s    r   r  z9TestUnicodeHashing.test_hash_passthrough_call.<locals>.fn�  s   € à”7�D ™GœGÐ#Ð#r   r†   r  r  s       r   Útest_hash_passthrough_callz-TestUnicodeHashing.test_hash_passthrough_call™  s‚   € à3ˆå	�dÐ	Ñ	Ô	ð	$ð 	$ñ 
Ô	ð	$õ 2°,Ñ?Ô?ÀÔCˆ
Ø�Š˜
 bÒ(Ñ)Ô)Ð)Ø×Ò˜˜˜LÑ)Ô)¨J¸
Ð+CÑDÔDÐDÐDÐDr   z/Needs hash computation at const unpickling timec                 ó¼   — t          d¬¦  «        d„ ¦   «         } |¦   «         }t          d¦  «        }|                      |t          |¦  «        d         ¦  «         d S )NTrr   c                  ó
   — d} | S )Nrÿ   r(   r   s    r   r  z0TestUnicodeHashing.test_hash_literal.<locals>.fn©  s   € à,ˆAØˆHr   rÿ   r†   )r   r   rj   r   )r"   r  r   Útmps       r   Útest_hash_literalz$TestUnicodeHashing.test_hash_literal¥  sn   € õ 
�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð ˆb‰dŒdˆÝÐ/Ñ0Ô0ˆØ×Ò˜Õ;¸CÑ@Ô@ÀÔDÑFÔFÐFÐFÐFr   c                 óØ  — d„ } t          d¬¦  «        |¦  «        }d} ||¦  «        } ||¦  «        }t          |¦  «        }t          |¦  «        }|                      |d d…         |d d…         ¦  «         |                      |d         |d         k    ¦  «         d} ||¦  «        } ||¦  «        }t          |¦  «        }t          |¦  «        }|                      ||¦  «         d S )Nc                 ó:   — d}d}||z   }| rt          |¦  «         |S )NÚaaaau   çœ¼çœ¼çœ¼çœ¼r   )Údo_hashÚconst1Úconst2Únews       r   Úimplz:TestUnicodeHashing.test_hash_on_str_creation.<locals>.impl´  s-   € ØˆFØ#ˆFØ˜6‘/ˆCØð Ý�S‘	”	�	ØˆJr   Trr   Fr†   )r   r   rj   r  )r"   r  ÚjittedÚcompute_hashrm   rl   r¢   rù   s           r   Útest_hash_on_str_creationz,TestUnicodeHashing.test_hash_on_str_creation±  s  € ð	ð 	ð 	ð $•˜dÐ#Ñ#Ô# DÑ)Ô)ˆð ˆØ�4˜Ñ%Ô%ˆØˆf�\Ñ"Ô"ˆÝ)¨(Ñ3Ô3ˆÝ)¨#Ñ.Ô.ˆØ×Ò˜˜3˜B˜3œ  3 B 3¤Ñ(Ô(Ð(Ø�Š˜˜"œ  2¤šÑ'Ô'Ð'ð ˆØ�4˜Ñ%Ô%ˆØˆf�\Ñ"Ô"ˆÝ)¨(Ñ3Ô3ˆÝ)¨#Ñ.Ô.ˆØ×Ò˜˜AÑÔÐÐÐr   N)
r%   r&   r'   r  r  r  ÚunittestÚskipr  r"  r(   r   r   rý   rý   x  s€   € € € € € ð-ð -ð -ð$7ð 7ð 7ð
Eð 
Eð 
Eð €X„]ÐDÑEÔEð	Gð 	Gñ FÔEð	Gðð ð ð ð r   rý   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestUnhashablec                 óR  — t          j        ¦   «                              t          j        t          j        ¦  «        t          j        ¦   «                              t          j        ¦  «        t          j        d¦  «        f} t          d¬¦  «        t          ¦  «        }|D ]‡}|                      t          ¦  «        5 } ||¦  «         d d d ¦  «         n# 1 swxY w Y   dt          t          |¦  «        ¦  «        › d�}|                      |t          |j        ¦  «        ¦  «         Œˆd S )Nre   Trr   zunhashable type: 'ú')r   ÚDictÚemptyr	   r«   ÚListÚ
empty_listr‡   Úonesr   r   ÚassertRaisesÚ	TypeErrorrV   r   ÚassertInÚ	exception)r"   Úunhashablesrt   rÍ   Úraisesrm   s         r   Útest_hash_unhashablez#TestUnhashable.test_hash_unhashableÖ  s0  € Ý”z‘|”|×)Ò)­%¬+µu´{ÑCÔCÝ”z‘|”|×.Ò.­u¬{Ñ;Ô;Ý”w˜q‘z”zð#ˆð #•˜TÐ"Ñ"Ô"¥<Ñ0Ô0ˆØð 	;ð 	;ˆBØ×"Ò"¥9Ñ-Ô-ð °Ø��b‘	”	�	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à>­Cµ°r±
´
©O¬OÐ>Ð>Ð>ˆHØ�MŠM˜(¥C¨Ô(8Ñ$9Ô$9Ñ:Ô:Ð:Ð:ð		;ð 	;s   Â;CÃC	ÃC	c                 ó  — t          d¬¦  «        d„ ¦   «         }|                      t          ¦  «        5 } |¦   «          d d d ¦  «         n# 1 swxY w Y   d}|                      |t	          |j        ¦  «        ¦  «         d S )NTrr   c                  ó8   — t          t          j        ¦  «         d S r   )r   r‡   Úcosr(   r   r   Úfooz0TestUnhashable.test_no_generic_hash.<locals>.fooç  s   € å•”‰LŒLˆLˆLˆLr   z"No __hash__ is defined for object )r   r.  r/  r0  rV   r1  )r"   r8  r3  rm   s       r   Útest_no_generic_hashz#TestUnhashable.test_no_generic_hashá  sÈ   € õ 
�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð ×Ò�yÑ)Ô)ð 	¨VØˆC‰EŒEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 9ˆØ�Š�h¥ FÔ$4Ñ 5Ô 5Ñ6Ô6Ð6Ð6Ð6s   ´AÁAÁAN)r%   r&   r'   r4  r9  r(   r   r   r&  r&  Ò  s2   € € € € € ð	;ð 	;ð 	;ð7ð 7ð 7ð 7ð 7r   r&  Ú__main__)'râ   r#  rS   r    r   Úcollectionsr   Útextwrapr   Únumpyr‡   Únumbar   r   r   r   Ú
numba.corer	   r
   Únumba.tests.supportr   r   r   r   r   Únumba.cpython.unicoder   Únumba.cpythonr   r   r   r*   rp   r­   rä   rý   r&  r%   Úmainr(   r   r   ú<module>rD     s±  ððð ð €€€à 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð à Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø €€€ðOð Oð Oð Oð Oð Oð Oð Oð Oð Oð Oð Oð Oð Oð ?Ð >Ð >Ð >Ð >Ð >Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð*Dð *Dð *Dð *Dð *D�xñ *Dô *Dð *DðZP0ð P0ð P0ð P0ð P0�8ñ P0ô P0ð P0ðfDð Dð Dð Dð Dˆxñ Dô Dð DðN\(ð \(ð \(ð \(ð \(˜ñ \(ô \(ð \(ð~15ð 15ð 15ð 15ð 15�xñ 15ô 15ð 15ðhWð Wð Wð Wð W˜ñ Wô Wð Wðt7ð 7ð 7ð 7ð 7�Xñ 7ô 7ð 7ð@ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   