o
    i_                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 edd Zdd	 Zed
d Zdd ZG dd dejZG dd dejZedkrRe  dS dS )    N)types)	intrinsic)jitnjit)captured_stdoutc                 C   s   t ||}dd }||fS )Nc                 S   s(   |\}}|  |}|||}||S N)get_python_apibytes_from_string_and_sizebytes_as_string)contextbuildersigargscsrcsizeapib r   X/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_pythonapi.pycodegen   s   

z'_pyapi_bytes_as_string.<locals>.codegen)r   voidptr)	typingctxr   r   r   r   r   r   r   _pyapi_bytes_as_string	   s   r   c                 C      t | j| jS r   )r   _data_lengthunir   r   r   PyBytes_AsString   s   r   c                 C   s*   t j||f}|||}dd }||fS )Nc                 S   sp   |\}}|  |}|||}||j}||j}	||||	 ||}
||	}| ||j|
|f}|S r   )	r   r	   allocacstring
py_ssize_tbytes_as_string_and_sizeload
make_tuplereturn_type)r   r   r   r   r   r   pyapir   p_cstrp_sizecstrtupr   r   r   r   "   s   


z0_pyapi_bytes_as_string_and_size.<locals>.codegen)r   Tuple
from_types)r   r   r   rettyr   r   r   r   r   _pyapi_bytes_as_string_and_size   s   
r.   c                 C   r   r   )r.   r   r   r   r   r   r   PyBytes_AsStringAndSize1      r/   c                   @   s   e Zd Zdd Zdd ZdS )TestPythonAPIc                 C   sH   t ddt}|d}tjj}tjg|_tj|_||}| 	|d d S )NTnopythonhellos   hello)
r   r   ctypes	pythonapiPyBytes_FromStringc_void_pargtypes	py_objectrestypeassertEqual)selfcfuncr)   fnobjr   r   r   test_PyBytes_AsString7   s   
z#TestPythonAPI.test_PyBytes_AsStringc                 C   sV   t ddt}|d}tjj}tjtjg|_tj|_	||d |d }| 
|d d S )NTr2   zhello worldr      s   hello world)r   r/   r5   r6   PyBytes_FromStringAndSizer8   c_size_tr9   r:   r;   r<   )r=   r>   r*   r?   r@   r   r   r   test_PyBytes_AsStringAndSizeD   s   z*TestPythonAPI.test_PyBytes_AsStringAndSizeN)__name__
__module____qualname__rA   rE   r   r   r   r   r1   5   s    r1   c                   @   s   e Zd Zdd ZdS )PythonAPIEmptyArgsc                    s|   dd  t  fddtfdd}t }|  W d    n1 s%w   Y  ddi}d	| d
}| | | d S )Nc                  [   s   t d|  d S )Ncallme)print)kwargsr   r   r   rJ   T   r0   z2PythonAPIEmptyArgs.test_empty_args.<locals>.callmec                    s    fdd}t  |fS )Nc           
         s   |  |}| }|| tjd}|d|i }||	 }|
|d |}	||	 || || || || |	S )N  key)r   
gil_ensurelong_from_longlongget_constantr   intp	dict_packitemsunserializeserialize_objectcalldecrefgil_release)
r   r   r   r   r&   gilnumkwdsfn_printresrJ   r   r   r   Y   s   





zDPythonAPIEmptyArgs.test_empty_args.<locals>.py_call.<locals>.codegen)r   none)tyctxr   r_   r   r   py_callW   s   z3PythonAPIEmptyArgs.test_empty_args.<locals>.py_callc                      s
      d S r   r   r   )rb   r   r   fooo   s   
z/PythonAPIEmptyArgs.test_empty_args.<locals>.foorN   rM   zcallme 
)r   r   r   r<   getvalue)r=   rc   outdexpectedr   )rJ   rb   r   test_empty_argsS   s   z"PythonAPIEmptyArgs.test_empty_argsN)rF   rG   rH   ri   r   r   r   r   rI   R   s    rI   __main__)r5   unittest
numba.corer   numba.core.extendingr   numbar   r   numba.tests.supportr   r   r   r.   r/   TestCaser1   rI   rF   mainr   r   r   r   <module>   s"    

(