o
    1&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_sizeZbytes_as_string)contextbuildersigargscsrcsizeapib r   EC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_pythonapi.pycodegen   s   

z'_pyapi_bytes_as_string.<locals>.codegen)r   Z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	   ZallocaZcstringZ
py_ssize_tZbytes_as_string_and_sizeloadZ
make_tuplereturn_type)r
   r   r   r   r   r   pyapir   Zp_cstrZp_sizecstrtupr   r   r   r   "   s   


z0_pyapi_bytes_as_string_and_size.<locals>.codegen)r   TupleZ
from_types)r   r   r   Z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ZnopythonZhellos   hello)
r   r   ctypes	pythonapiZ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 )NTr'   zhello worldr      s   hello world)r   r$   r(   r)   ZPyBytes_FromStringAndSizer*   c_size_tr+   r,   r-   r.   )r/   r0   r!   r1   r2   r   r   r   test_PyBytes_AsStringAndSizeD   s   z*TestPythonAPI.test_PyBytes_AsStringAndSizeN)__name__
__module____qualname__r3   r6   r   r   r   r   r&   5   s    r&   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   r;   T   r%   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   Z
gil_ensureZlong_from_longlongZget_constantr   ZintpZ	dict_packitemsZunserializeZserialize_objectcallZdecrefZgil_release)
r
   r   r   r   r   ZgilnumkwdsZfn_printresr;   r   r   r   Y   s   





zDPythonAPIEmptyArgs.test_empty_args.<locals>.py_call.<locals>.codegen)r   none)Ztyctxr   rE   r   r   py_callW   s   z3PythonAPIEmptyArgs.test_empty_args.<locals>.py_callc                      s
      d S r   r   r   )rG   r   r   fooo   s   
z/PythonAPIEmptyArgs.test_empty_args.<locals>.foor?   r>   zcallme 
)r   r   r   r.   getvalue)r/   rH   outdexpectedr   )r;   rG   r   test_empty_argsS   s   z"PythonAPIEmptyArgs.test_empty_argsN)r7   r8   r9   rN   r   r   r   r   r:   R   s    r:   __main__)r(   ZunittestZ
numba.corer   Znumba.core.extendingr   Znumbar   r   Znumba.tests.supportr   r   r   r#   r$   ZTestCaser&   r:   r7   mainr   r   r   r   <module>   s"    

(