U
    “Ç-eÉ(  ã                   @   s.  d dl Zd dlZd dlZ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mZmZmZ d dlmZmZ d dlZdd„ Zdd	„ Zd
d„ Zdd„ ZeedƒedƒedƒG dd„ deƒƒƒƒƒZdd„ Zdd„ ZeedƒedƒedƒG dd„ deƒƒƒƒƒZeedƒG dd„ deƒƒƒZedkr*e ¡  dS )é    N)Úcuda)Údriver)Úskip_on_armÚskip_on_cudasimÚskip_under_cuda_memcheckÚContextResettingTestCaseÚForeignArray)Ú
linux_onlyÚwindows_onlyc                 C   s>   z
| ƒ }W n   d}t  ¡ }Y n
X d}|}| ||f¡ d S )NFT)Ú	tracebackÚ
format_excÚput)Úthe_workÚresult_queueÚarrÚsuccÚout© r   úa/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_ipc.pyÚcore_ipc_handle_test   s    
r   c                    s   ‡ ‡fdd„}t ||ƒ d S )Nc               
      sB   t  t j¡} tjˆ ˆ| j | d}| ¡ W  5 Q R £ S Q R X d S ©N)ÚshapeÚdtype)Únpr   Úintpr   Zopen_ipc_arrayÚitemsizeÚcopy_to_host)r   Údarr©ÚhandleÚsizer   r   r   !   s    ÿz&base_ipc_handle_test.<locals>.the_work©r   )r   r    r   r   r   r   r   Úbase_ipc_handle_test    s    r"   c                    s   ‡ fdd„}t ||ƒ d S )Nc                     s<   t  t j¡} ˆ jt ¡ ˆ j| j | d}| ¡ }ˆ  	¡  |S r   )
r   r   r   Z
open_arrayr   Úcurrent_contextr    r   r   Úclose)r   r   r   ©r   r   r   r   ,   s    

þz+serialize_ipc_handle_test.<locals>.the_workr!   )r   r   r   r   r%   r   Úserialize_ipc_handle_test+   s    
r&   c                 C   s¤   zp| b}|  ¡ }z|  W 5 Q R X W n6 tk
rZ } zt|ƒdkrJtdƒ‚W 5 d }~X Y n
X tdƒ‚W 5 Q R X W n   d}t ¡ }Y n
X d}|}| ||f¡ d S ©NzIpcHandle is already openedzinvalid exception messagezdid not raise on reopenFT)r   Ú
ValueErrorÚstrÚAssertionErrorr   r   r   )Úipcarrr   r   r   Úer   r   r   r   r   Úipc_array_test9   s     r-   zHangs cuda-memcheckzIpc not available in CUDASIMz&CUDA IPC not supported on ARM in Numbac                   @   s@   e Zd Zdd„ Zdd„ Zddd„Zd	d
„ Zddd„Zdd„ ZdS )ÚTestIpcMemoryc                 C   s¸   t jdt jd}t |¡}t ¡ }| |j¡}tj	r>|j
j}n
t|j
ƒ}|j}t d¡}| ¡ }|||f}|jt|d}	|	 ¡  | ¡ \}
}|
sœ|  |¡ nt j ||¡ |	 d¡ d S ©Né
   ©r   Úspawn©ÚtargetÚargsé   )r   Úaranger   r   Ú	to_devicer#   Úget_ipc_handleÚgpu_datar   ÚUSE_NV_BINDINGr   ÚreservedÚbytesr    ÚmpÚget_contextÚQueueÚProcessr"   ÚstartÚgetÚfailÚtestingÚassert_equalÚjoin)Úselfr   ÚdevarrÚctxÚipchZhandle_bytesr    r   r5   Úprocr   r   r   r   r   Útest_ipc_handleX   s$    




zTestIpcMemory.test_ipc_handlec                 C   s.   d t dd ƒt ddƒt d dƒf}d}t ||¡S )Nr6   é   )FT)ÚsliceÚ	itertoolsÚproduct)rH   ÚindicesZforeignsr   r   r   Úvariantsu   s    zTestIpcMemory.variantsNFc                 C   s(  t jdt jd}t |¡}|d k	r*|| }|r<t t|ƒ¡}| ¡ }t ¡ }| 	|j
¡}t |¡}t |¡}	|  |	jd ¡ |  |	j|j¡ tjr¦|  |	jj|jj¡ n|  t|	jƒt|jƒ¡ t d¡}| ¡ }
||
f}|jt|d}| ¡  |
 ¡ \}}|s|  |¡ nt j  ||¡ | !d¡ d S r/   )"r   r7   r   r   r8   Úas_cuda_arrayr   r   r#   r9   r:   ÚpickleÚdumpsÚloadsÚassertIsÚbaseÚassertEqualr    r   r;   r   r<   Útupler>   r?   r@   rA   r&   rB   rC   rD   rE   rF   rG   )rH   Ú	index_argÚforeignr   rI   ÚexpectrJ   rK   ÚbufÚ
ipch_reconr   r5   rL   r   r   r   r   r   Úcheck_ipc_handle_serialization}   s4    



z,TestIpcMemory.check_ipc_handle_serializationc              
   C   s<   |   ¡ D ].\}}| j||d |  ||¡ W 5 Q R X qd S ©N)Úindexr]   )rS   ÚsubTestra   ©rH   rc   r]   r   r   r   Útest_ipc_handle_serialization£   s    z+TestIpcMemory.test_ipc_handle_serializationc                 C   s´   t jdt jd}t |¡}|d k	r*|| }|r<t t|ƒ¡}| ¡ }| ¡ }t	 
d¡}| ¡ }||f}	|jt|	d}
|
 ¡  | ¡ \}}|s˜|  |¡ nt j ||¡ |
 d¡ d S r/   )r   r7   r   r   r8   rT   r   r   r9   r>   r?   r@   rA   r-   rB   rC   rD   rE   rF   rG   )rH   r\   r]   r   rI   r^   rK   rJ   r   r5   rL   r   r   r   r   r   Úcheck_ipc_array¨   s$    

zTestIpcMemory.check_ipc_arrayc              
   C   s<   |   ¡ D ].\}}| j||d |  ||¡ W 5 Q R X qd S rb   )rS   rd   rg   re   r   r   r   Útest_ipc_arrayÁ   s    zTestIpcMemory.test_ipc_array)NF)NF)	Ú__name__Ú
__module__Ú__qualname__rM   rS   ra   rf   rg   rh   r   r   r   r   r.   R   s   
&
r.   c                    s   ‡ ‡fdd„}t ||ƒ d S )Nc               	      sn   t jˆ  Z t j ¡ } ˆ | ¡}ˆjt tj¡j	 }tj
|tjd}t jj||ˆjd ˆ ¡  W 5 Q R X |S )Nr1   )r    )r   ÚgpusZdevicesr?   Zopen_stagedr    r   r   r   r   Zzerosr   Zdevice_to_hostr$   )Zthis_ctxZ	deviceptrZarrsizeZ	hostarray©Ú
device_numr   r   r   r   È   s    

  ÿz(staged_ipc_handle_test.<locals>.the_workr!   )r   rn   r   r   r   rm   r   Ústaged_ipc_handle_testÇ   s    ro   c                 C   sº   z†t j| r | b}| ¡ }z|  W 5 Q R X W n6 tk
rf } zt|ƒdkrVtdƒ‚W 5 d }~X Y n
X tdƒ‚W 5 Q R X W 5 Q R X W n   d}t ¡ }Y n
X d}|}| ||f¡ d S r'   )	r   rl   r   r(   r)   r*   r   r   r   )r+   rn   r   r   r   r,   r   r   r   r   r   Ústaged_ipc_array_test×   s"     rp   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestIpcStagedc                 C   s  t jdt jd}t |¡}t d¡}| ¡ }t ¡ }| 	|j
¡}t |¡}t |¡}|  |jd ¡ tjr~|  |jj|jj¡ n|  t|jƒt|jƒ¡ |  |j|j¡ tttjƒƒD ]X}	||	|f}
|jt|
d}| ¡  | ¡ \}}| d¡ |sþ|  |¡ q´t j  !||¡ q´d S r/   )"r   r7   r   r   r8   r>   r?   r@   r#   r9   r:   rU   rV   rW   rX   rY   r   r;   rZ   r   r<   r[   r    ÚrangeÚlenrl   rA   ro   rB   rC   rG   rD   rE   rF   )rH   r   rI   Zmpctxr   rJ   rK   r_   r`   rn   r5   rL   r   r   r   r   r   Útest_stagedö   s,    





zTestIpcStaged.test_stagedc                 C   sœ   t ttjƒƒD ]ˆ}tj d¡}t |¡}| ¡ }t 	d¡}| 
¡ }|||f}|jt|d}| ¡  | ¡ \}	}
| d¡ |	sˆ|  |
¡ qtj ||
¡ qd S )Nr0   r2   r3   r6   )rr   rs   r   rl   r   Úrandomr8   r9   r>   r?   r@   rA   rp   rB   rC   rG   rD   rE   rF   )rH   rn   r   rI   rK   rJ   r   r5   rL   r   r   r   r   r   rh     s    



zTestIpcStaged.test_ipc_arrayN)ri   rj   rk   rt   rh   r   r   r   r   rq   ñ   s   "rq   c                   @   s   e Zd Zdd„ ZdS )ÚTestIpcNotSupportedc              	   C   sR   t jdt jd}t |¡}|  t¡}| ¡  W 5 Q R X t|j	ƒ}|  
d|¡ d S )Nr0   r1   zOS does not support CUDA IPC)r   r7   r   r   r8   ÚassertRaisesÚOSErrorr9   r)   Ú	exceptionZassertIn)rH   r   rI   ZraisesÚerrmsgr   r   r   Útest_unsupported0  s    

z$TestIpcNotSupported.test_unsupportedN)ri   rj   rk   r{   r   r   r   r   rv   -  s   rv   Ú__main__) Úmultiprocessingr>   rP   r   rU   Únumpyr   Znumbar   Znumba.cuda.cudadrvr   Znumba.cuda.testingr   r   r   r   r   Znumba.tests.supportr	   r
   Zunittestr   r"   r&   r-   r.   ro   rp   rq   rv   ri   Úmainr   r   r   r   Ú<module>   s<   q8

