o
    i                     @   s   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e
jjZdd ZG dd deZG d	d
 d
eZedkr]e  dS dS )    N)typestypingcgutilscpu)global_compiler_lock)TestCaserun_in_subprocessc                 C   s   t t| S N)irConstantmachine_int)n r   V/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_cgutils.pymachine_const   s   r   c                   @   s`   e Zd Zdd Zejdd Zdd Zdd Zejdd
dZ	ejdd Z
dd Zdd ZdS )StructureTestCasec                 C   s   t  }t|| _d S r	   )r   Contextr   
CPUContextcontext)selftyping_contextr   r   r   setUp   s   zStructureTestCase.setUpc                 #   s    t ttg| }tjtjgtjf| R   jdt	|
 js,J d}t |}dg}t fdd}j|j|fV  d S )N entryTc                     sB   j  }|d  }| |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   r   r   	call_func)   s   

z5StructureTestCase.compile_function.<locals>.call_func)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   compile_function   s   




z"StructureTestCase.compile_functionc                 C   s0   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_stringr   r   r   get_bytearray_addr5   s
   
z$StructureTestCase.get_bytearray_addrc                 C   sx   |  d\}}}}||d |d }|| W d    n1 s#w   Y  | |ddd | |ddd d S )	N   r                  )r7   addretassertEqual)r   r   r5   r    callresr   r   r   test_compile_function<   s   z'StructureTestCase.test_compile_functionr   c           
      c   s    |  d<\}}}}|||}||d t|}	||	t|j}	||||	d}||||fV  |tt	d W d    n1 sEw   Y  || 
| d S )NrD   r   )ref)r7   rJ   r   inttoptrr
   PointerType_typerK   r   r   rB   )
r   struct_classbufoffsetr   r5   r    rM   instsptrr   r   r   run_struct_accessD   s   
	z#StructureTestCase.run_struct_accessc                 c   s    t dd }|d d  }d}| |||\}}}	}
|||
fV  W d    n1 s+w   Y  | || tj|||g|R   | || d S )N   !(      )r9   rY   assertNotEqualstruct	pack_intorL   )r   rT   
struct_fmtstruct_argsrU   expectedrV   r   r5   r    rW   r   r   r   run_simple_struct_testQ   s   
z(StructureTestCase.run_simple_struct_testc                 C   sx   G dd dt j}d}| ||d \}}}ttdd|_ttdd|_W d    d S 1 s5w   Y  d S )	Nc                   @       e Zd ZdejfdejfgZdS )z,StructureTestCase.test_int_fields.<locals>.SabN)__name__
__module____qualname__r   int32uint16_fieldsr   r   r   r   Sb       rm   z=iH)xV4ͫ      ro      rp   )r   	Structurerc   r
   r   IntTypere   rf   r   rm   fmtr   r5   rW   r   r   r   test_int_fieldsa   s   "z!StructureTestCase.test_int_fieldsc                 C   st   G dd dt j}d}| ||d\}}}tt d|_tt d|_W d    d S 1 s3w   Y  d S )Nc                   @   rd   )z.StructureTestCase.test_float_fields.<locals>.Sre   rf   N)rg   rh   ri   r   float64float32rl   r   r   r   r   rm   m   rn   rm   z=df)Gz?=
ףp=@rz   r{   )	r   rs   rc   r
   r   
DoubleTypere   	FloatTyperf   ru   r   r   r   test_float_fieldsl   s   "z#StructureTestCase.test_float_fieldsN)r   )rg   rh   ri   r   
contextlibcontextmanagerr7   rB   rO   rY   rc   rw   r~   r   r   r   r   r      s    

r   c                   @   s   e Zd ZdZdd ZdS )TestCGContextz/Tests for code generation context functionalityc                 C   s4   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_r   r   r   test_printf{   s   zTestCGContext.test_printfN)rg   rh   ri   __doc__r   r   r   r   r   r   x   s    r   __main__)r   r*   r^   sysllvmlite.irr
   numpynpunittest
numba.corer   r   r   r   numba.core.compiler_lockr   numba.tests.supportr   r   rt   intpbitwidthr   r   r   r   rg   mainr   r   r   r   <module>   s"    c