§
    ƒÛgÿ  ã                   ó  — d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dl	m
Z
mZmZmZ d dlmZ d dlmZmZ  ej        e
j        j        ¦  «        Zd„ Z G d„ de¦  «        Z G d„ d	e¦  «        Zed
k    r ej        ¦   «          dS dS )é    N)ÚtypesÚtypingÚcgutilsÚcpu)Úglobal_compiler_lock)ÚTestCaseÚrun_in_subprocessc                 ó6   — t          j        t          | ¦  «        S ©N)ÚirÚConstantÚmachine_int)Úns    úN/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_cgutils.pyÚmachine_constr      s   € ÝŒ;•{ AÑ&Ô&Ð&ó    c                   óŽ   — e Zd Zd„ Zej        d„ ¦   «         Zd„ Zd„ Zej        dd„¦   «         Z	ej        d„ ¦   «         Z
d„ Zd	„ Zd
S )ÚStructureTestCasec                 ó^   — t          j        ¦   «         }t          j        |¦  «        | _        d S r   )r   ÚContextr   Ú
CPUContextÚcontext)ÚselfÚtyping_contexts     r   ÚsetUpzStructureTestCase.setUp   s$   € ÝœÑ)Ô)ˆÝ”~ nÑ5Ô5ˆŒˆˆr   c              #   óè  ‡ ‡‡‡	K  — t          j        t          t          g|z  ¦  «        }t          j        t          j        gt          j        f|z  ¢R Ž Š‰ j                             d¦  «        Š	t          j	        ‰	|‰  
                    ¦   «         ¦  «        Š‰j        sJ ‚‰                     d¦  «        }t          j        |¦  «        }dg}t          ˆˆˆ	ˆ fd„¦   «         }‰ j        |‰j        |fV — d S )NÚ ÚentryTc                  ó  •— ‰j                              ¦   «         }|                     d‰                     ¦   «         z  ¦  «        }|                     ‰¦  «         |                     ‰j        ¦  «        } ‰|¦  «        } || Ž S )Nztest_module.%s)r   ÚcodegenÚcreate_libraryÚidÚadd_ir_moduleÚget_pointer_to_functionÚname)	Úargsr    ÚlibraryÚcptrÚcfuncÚctypes_fntyÚfunctionÚmoduler   s	        €€€€r   Ú	call_funcz5StructureTestCase.compile_function.<locals>.call_func)   s{   ø€ à”l×*Ò*Ñ,Ô,ˆGØ×,Ò,Ð-=ÀÇÂÁ	Ä	Ñ-IÑJÔJˆGØ×!Ò! &Ñ)Ô)Ð)Ø×2Ò2°8´=ÑAÔAˆDØ�K Ñ%Ô%ˆEØ�5˜$�<Ðr   )r   ÚFunctionTyper   ÚctypesÚ	CFUNCTYPEÚc_size_tr   Úcreate_moduler   Úget_or_insert_functionr"   Úis_declarationÚappend_basic_blockÚ	IRBuilderr   r&   )
r   ÚnargsÚ	llvm_fntyÚentry_blockÚbuilderÚfirstr-   r*   r+   r,   s
   `      @@@r   Úcompile_functionz"StructureTestCase.compile_function   s  øøøøè è € å”O¥Kµ+°ÀÑ1FÑGÔGˆ	ÝÔ&¥v¤ð BÝ'-¤Ð&8¸5Ñ&@ðBð Bð Bˆà”×+Ò+¨BÑ/Ô/ˆåÔ1°&¸)ÀTÇWÂWÁYÄYÑOÔOˆØÔ&Ð&Ð&Ð&Ø×1Ò1°'Ñ:Ô:ˆÝ”,˜{Ñ+Ô+ˆà�ˆå	ð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ñ 
Ô	ð	 ð Œl˜G X¤]°IÐ=Ð=Ð=Ð=Ð=Ð=r   c                 ó®   — t          |t          ¦  «        sJ ‚t          j        j        }t          j        g|_        t          j        |_         ||¦  «        S r   )	Ú
isinstanceÚ	bytearrayr/   Ú	pythonapiÚPyByteArray_AsStringÚ	py_objectÚargtypesÚc_void_pÚrestype)r   ÚbaÚba_as_strings      r   Úget_bytearray_addrz$StructureTestCase.get_bytearray_addr5   sK   € Ý˜"�iÑ(Ô(Ð(Ð(Ð(ÝÔ'Ô<ˆÝ!'Ô!1Ð 2ˆÔÝ%œˆÔØˆ|˜BÑÔÐr   c                 óX  — |                       d¦  «        5 \  }}}}|                     |d         |d         ¦  «        }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |                       |dd¦  «        d¦  «         |                       |dd¦  «        d¦  «         d S )	Né   r   é   é   éþÿÿÿé   é   é   )r<   ÚaddÚretÚassertEqual)r   r   r:   r&   ÚcallÚress         r   Útest_compile_functionz'StructureTestCase.test_compile_function<   sæ   € à×"Ò" 1Ñ%Ô%ð 	Ñ)G¨'°7¸DÀ$Ø—+’+˜d 1œg t¨A¤wÑ/Ô/ˆCØ�KŠK˜ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜˜˜a ™œ aÑ(Ô(Ð(Ø×Ò˜˜˜a ™œ QÑ'Ô'Ð'Ð'Ð's   –=AÁA#Á&A#r   c              #   óô  K  — |                       d¦  «        5 \  }}}} |||¦  «        }|                     |d         t          |¦  «        ¦  «        }	|                     |	t	          j        |j        ¦  «        ¦  «        }	 ||||	¬¦  «        }||||fV — |                     t	          j        t          d¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y    ||  
                    |¦  «        ¦  «         d S )NrK   r   )Úref)r<   rQ   r   Úinttoptrr   ÚPointerTypeÚ_typerR   r   r   rH   )
r   Ústruct_classÚbufÚoffsetr   r:   r&   rT   ÚinstÚsptrs
             r   Úrun_struct_accessz#StructureTestCase.run_struct_accessD   s5  è è € à×"Ò" 1Ñ%Ô%ð 	5Ñ)G¨'°7¸DÀ$Ø�< ¨Ñ1Ô1ˆDØ—;’;˜t Aœw­°fÑ(=Ô(=Ñ>Ô>ˆDØ×#Ò# D­"¬.¸¼Ñ*DÔ*DÑEÔEˆDØ�< ¨°dÐ;Ñ;Ô;ˆDà˜7 D¨$Ð.Ð.Ð.Ð.à�KŠK�œ¥K°Ñ3Ô3Ñ4Ô4Ð4ð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð 	ˆˆT×$Ò$ SÑ)Ô)Ñ*Ô*Ð*Ð*Ð*s   ˜B+CÃCÃCc              #   ó<  K  — t          d¦  «        dz  }|d d …         }d}|                      |||¦  «        5 \  }}}	}
|||
fV — d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «         t          j        |||g|¢R Ž  |                      ||¦  «         d S )Nó   !é(   é   )r?   ra   ÚassertNotEqualÚstructÚ	pack_intorS   )r   r\   Ú
struct_fmtÚstruct_argsr]   Úexpectedr^   r   r:   r&   r_   s              r   Úrun_simple_struct_testz(StructureTestCase.run_simple_struct_testQ   s  è è € õ ˜‰oŒo Ñ"ˆØ�q�q�q”6ˆØˆà×#Ò# L°#°vÑ>Ô>ð 	)Ù-�˜ $¨Ø˜7 DÐ(Ð(Ð(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	×Ò˜C Ñ*Ô*Ð*ÝÔ˜ X¨vÐD¸ÐDÐDÐDÐDØ×Ò˜˜hÑ'Ô'Ð'Ð'Ð's   ¸AÁAÁAc                 óR  —  G d„ dt           j        ¦  «        }d}|                      ||d¦  «        5 \  }}}t          j        t          j        d¦  «        d¦  «        |_        t          j        t          j        d¦  «        d¦  «        |_        d d d ¦  «         d S # 1 swxY w Y   d S )	Nc                   ó2   — e Zd Zdej        fdej        fgZdS )ú,StructureTestCase.test_int_fields.<locals>.SÚaÚbN)Ú__name__Ú
__module__Ú__qualname__r   Úint32Úuint16Ú_fields© r   r   ÚSro   b   s)   € € € € € Ø˜Uœ[Ð)Ø˜Uœ\Ð*ð,ˆGˆGˆGr   ry   z=iH)éxV4éÍ«  é    rz   é   r{   )r   Ú	Structurerl   r   r   ÚIntTyperp   rq   ©r   ry   Úfmtr   r:   r_   s         r   Útest_int_fieldsz!StructureTestCase.test_int_fieldsa   sí   € ð	,ð 	,ð 	,ð 	,ð 	,•Ô!ñ 	,ô 	,ð 	,ð ˆØ×(Ò(¨¨CÐ1EÑFÔFð 	9Ù'�˜ $Ý”[¥¤¨B¡¤°Ñ<Ô<ˆDŒFÝ”[¥¤¨B¡¤°Ñ8Ô8ˆDŒFð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9s   ²ABÂB Â#B c                 óN  —  G d„ dt           j        ¦  «        }d}|                      ||d¦  «        5 \  }}}t          j        t          j        ¦   «         d¦  «        |_        t          j        t          j        ¦   «         d¦  «        |_        d d d ¦  «         d S # 1 swxY w Y   d S )Nc                   ó2   — e Zd Zdej        fdej        fgZdS )ú.StructureTestCase.test_float_fields.<locals>.Srp   rq   N)rr   rs   rt   r   Úfloat64Úfloat32rw   rx   r   r   ry   r…   m   s)   € € € € € Ø˜Uœ]Ð+Ø˜Uœ]Ð+ð-ˆGˆGˆGr   ry   z=df)ç®Gáz®ó?ç=
×£p=@rˆ   r‰   )	r   r~   rl   r   r   Ú
DoubleTyperp   Ú	FloatTyperq   r€   s         r   Útest_float_fieldsz#StructureTestCase.test_float_fieldsl   sè   € ð	-ð 	-ð 	-ð 	-ð 	-•Ô!ñ 	-ô 	-ð 	-ð ˆØ×(Ò(¨¨C°Ñ>Ô>ð 	7Ù'�˜ $Ý”[¥¤¡¤°$Ñ7Ô7ˆDŒFÝ”[¥¤¡¤°Ñ6Ô6ˆDŒFð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7s   ²ABÂBÂ!BN)r   )rr   rs   rt   r   Ú
contextlibÚcontextmanagerr<   rH   rV   ra   rl   r‚   rŒ   rx   r   r   r   r      sÁ   € € € € € ð6ð 6ð 6ð Ôð>ð >ñ Ôð>ð2 ð  ð  ð(ð (ð (ð Ôð
+ð 
+ð 
+ñ Ôð
+ð Ôð(ð (ñ Ôð(ð	9ð 	9ð 	9ð	7ð 	7ð 	7ð 	7ð 	7r   r   c                   ó   — e Zd ZdZd„ ZdS )ÚTestCGContextz/Tests for code generation context functionalityc                 ó¤   — d}d|› d�}t          |¦  «        \  }}|                      t          |¦  «        |                     ¦   «         ¦  «         d S )Ni@â az  if 1:
        from numba import njit, types
        from numba.extending import intrinsic

        @intrinsic
        def printf(tyctx, int_arg):
            sig = types.void(int_arg)
            def codegen(cgctx, builder, sig, llargs):
                cgctx.printf(builder, "%d\n", *llargs)
            return sig, codegen

        @njit
        def foo():
            printf(z)

        foo()
        )r	   ÚassertInÚstrÚdecode)r   ÚvalueÚcodeÚoutÚ_s        r   Útest_printfzTestCGContext.test_printf{   s_   € ð ˆðð ðð ð ˆõ$ # 4Ñ(Ô(‰ˆˆQØ�Š•c˜%‘j”j #§*¢*¡,¤,Ñ/Ô/Ð/Ð/Ð/r   N)rr   rs   rt   Ú__doc__r™   rx   r   r   r�   r�   x   s)   € € € € € Ø9Ð9ð0ð 0ð 0ð 0ð 0r   r�   Ú__main__)r�   r/   rg   ÚsysÚllvmlite.irr   ÚnumpyÚnpÚunittestÚ
numba.corer   r   r   r   Únumba.core.compiler_lockr   Únumba.tests.supportr   r	   r   ÚintpÚbitwidthr   r   r   r�   rr   Úmainrx   r   r   ú<module>r§      sK  ðØ Ð Ð Ð Ø €€€Ø €€€Ø 
€
€
€
à Ð Ð Ð Ð Ð Ø Ð Ð Ð à €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ð ˆbŒj˜œÔ,Ñ-Ô-€ð'ð 'ð 'ð`7ð `7ð `7ð `7ð `7˜ñ `7ô `7ð `7ðF0ð 0ð 0ð 0ð 0�Hñ 0ô 0ð 0ð> ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   