
    xKg                         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j6                          yy)    N)typestypingcgutilscpu)global_compiler_lock)TestCaserun_in_subprocessc                 6    t        j                  t        |       S N)irConstantmachine_int)ns    \/home/alanp/www/video.onchill/myenv/lib/python3.12/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y	)StructureTestCasec                 `    t        j                         }t        j                  |      | _        y r   )r   Contextr   
CPUContextcontext)selftyping_contexts     r   setUpzStructureTestCase.setUp   s    )~~n5r   c              #      	K   t        j                  t        t        g|z        }t        j                  t        j
                  gt        j
                  f|z    j                  j                  d      	t        j                  	| j                               j                  sJ j                  d      }t        j                  |      }dg}t        	 fd       } j                  |j                  |f y w)N entryTc                      j                   j                         }|j                  dj                         z        }|j	                         |j                  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)   sg    ll**,G,,-=	-IJG!!&)228==AD%E$<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     OOK+1FG	&&v B'-&85&@B++B/11&)TWWYO&&&&11':,,{+		  
	  llGX]]I==s   C>D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!1 2%Br   c                    | j                  d      5 \  }}}}|j                  |d   |d         }|j                  |       d d d        | j                   dd      d       | j                   |dd      d       y # 1 sw Y   <xY w)	N   r                  )r<   addretassertEqual)r   r   r:   r&   callress         r   test_compile_functionz'StructureTestCase.test_compile_function<   s{    ""1%)G'7D$++d1gtAw/CKK & 	aa(aQ'	 &%s   /A<<Bc              #     K   | j                  d      5 \  }}}} |||      }|j                  |d   t        |            }	|j                  |	t	        j
                  |j                              }	 ||||	      }||||f |j                  t	        j                  t        d             d d d         | j                  |             y # 1 sw Y   !xY ww)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   s     ""1%)G'7D$1D;;tAwf(=>D##D"..*DEDd;D7D$..KKK34 & 	T$$S)* &%s   CBC, CCCc              #     K   t        d      dz  }|d d  }d}| j                  |||      5 \  }}}	}
|||
f d d d        | j                  ||       t        j                  |||g|  | j                  ||       y # 1 sw Y   FxY ww)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"q6##L#v>-$7D(( ? 	C*XvDDh' ?>s   )B	A=AB	=BB	c                 J    G d dt         j                        }d}| j                  ||d      5 \  }}}t        j                  t        j
                  d      d      |_        t        j                  t        j
                  d      d      |_        d d d        y # 1 sw Y   y xY w)	Nc                   D    e Zd Zdej                  fdej
                  fgZy),StructureTestCase.test_int_fields.<locals>.SabN)__name__
__module____qualname__r   int32uint16_fields r   r   Sro   b   s!    U[[)U\\*,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   sx    	,!! 	, ((C1EF'$[[B<DF[[B8DF GFFs   A!BB"c                 F    G d dt         j                        }d}| j                  ||d      5 \  }}}t        j                  t        j
                         d      |_        t        j                  t        j                         d      |_        d d d        y # 1 sw Y   y xY w)Nc                   D    e Zd Zdej                  fdej
                  fgZy).StructureTestCase.test_float_fields.<locals>.Srp   rq   N)rr   rs   rt   r   float64float32rw   rx   r   r   ry   r   m   s!    U]]+U]]+-Gr   ry   z=df)Gz?=
ףp=@r   r   )	r   r~   rl   r   r   
DoubleTyperp   	FloatTyperq   r   s         r   test_float_fieldsz#StructureTestCase.test_float_fieldsl   sr    	-!! 	- ((C>'$[[$7DF[[6DF ?>>s   ABB N)r   )rr   rs   rt   r   
contextlibcontextmanagerr<   rH   rV   ra   rl   r   r   rx   r   r   r   r      si    6 > >2 ( 
+ 
+ ( (	9	7r   r   c                       e Zd ZdZd Zy)TestCGContextz/Tests for code generation context functionalityc                     d}d| d}t        |      \  }}| j                  t        |      |j                                y )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{   sI      7 	$ #4(Qc%j#**,/r   N)rr   rs   rt   __doc__r   rx   r   r   r   r   x   s
    9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      s|       
    2 2 9 ; bjj,,-'`7 `7F0H 0> zHMMO r   