U
    -e                     @   s  d dl mZmZmZ d dlZd dlmZmZm	Z	m
Z
 G dd dZe	dd Ze	dd	 Zejs^d d
lmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ G dd de
j Z!e! Z"e#edd Z$eedd Z%ee!G dd dej&Z'ee!dd ee!dd eee
j(e
j(dd Z)ej*G dd deZ+ee!ddd Z,ed G d!d" d"eZ-e.d#kre/  dS )$    )skip_on_cudasimunittestCUDATestCaseN)configcudanjittypesc                   @   s,   e Zd ZdZdd Zdd Zedd ZdS )	Intervalz7
    A half-open interval on the real number line.
    c                 C   s   || _ || _d S Nlohi)selfr   r    r   g/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_extending.py__init__   s    zInterval.__init__c                 C   s   d| j | jf S )NzInterval(%f, %f)r   r   r   r   r   __repr__   s    zInterval.__repr__c                 C   s   | j | j S r
   )r   r   r   r   r   r   width   s    zInterval.widthN)__name__
__module____qualname____doc__r   r   propertyr   r   r   r   r   r	      s
   r	   c                 C   s   | j S r
   )r   )intervalr   r   r   interval_width   s    r   c                 C   s   t | j|j | j|j S r
   r	   r   r   )ijr   r   r   sum_intervals   s    r   )cgutils)lower_builtinmake_attribute_wrappermodelsregister_modeltype_callabletypeof_impl)AttributeTemplate)registry)
lower_attrc                       s   e Zd Z fddZ  ZS )IntervalTypec                    s   t  jdd d S )Nr	   )name)superr   r   	__class__r   r   r   +   s    zIntervalType.__init__)r   r   r   r   __classcell__r   r   r-   r   r*   *   s   r*   c                 C   s   t S r
   )interval_type)valcr   r   r   typeof_interval0   s    r3   c                 C   s   dd }|S )Nc                 S   s    t | tjrt |tjrtS d S r
   )
isinstancer   Floatr0   r   r   r   r   typer6   s    ztype_interval.<locals>.typerr   )contextr6   r   r   r   type_interval4   s    r8   c                   @   s   e Zd Zdd ZdS )IntervalModelc                 C   s*   dt jfdt jfg}tj| ||| d S )Nr   r   )r   float64r#   StructModelr   )r   ZdmmZfe_typemembersr   r   r   r   =   s    zIntervalModel.__init__N)r   r   r   r   r   r   r   r   r9   ;   s   r9   r   r   c                 C   s2   |j }|\}}t|| |}||_||_| S r
   )return_typer    Zcreate_struct_proxyr   r   Z	_getvalue)r7   buildersigargstypr   r   r   r   r   r   impl_intervalG   s    rB   c                   @   s   e Zd ZeZdd ZdS )Interval_attrsc                 C   s   t jS r
   )r   r:   )r   modr   r   r   resolve_widthT   s    zInterval_attrs.resolve_widthN)r   r   r   r*   keyrE   r   r   r   r   rC   P   s   rC   r   c                 C   s$   | |d}| |d}|||S Nr      )Zextract_valueZfsub)r7   r>   r?   argr   r   r   r   r   cuda_Interval_widthW   s    rJ   z)Extensions not supported in the simulatorc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestExtendingc                 C   sB   t jdd }td}t|}|d || tj|| d S )Nc                 S   s*   t |d |d }|j| d< |j| d< d S rG   r   rxZivr   r   r   fa   s    
z(TestExtending.test_attributes.<locals>.f      ?      @rH   rH   )r   jitnpasarrayZ
zeros_liketestingZassert_equalr   rO   rN   rM   r   r   r   test_attributes`   s    


zTestExtending.test_attributesc                 C   sR   t jdd }td}td}|d || tj|d |d |d   d S )Nc                 S   s    t |d |d }|j| d< d S rG   )r	   r   rL   r   r   r   rO   o   s    z&TestExtending.test_property.<locals>.frP   rH   rS   r   r   rT   rU   rV   ZzerosrW   Zassert_allcloserX   r   r   r   test_propertyn   s    


zTestExtending.test_propertyc                 C   sR   t jdd }td}td}|d || tj|d |d |d   d S )Nc                 S   s"   t |d |d }t|| d< d S rG   )r	   r   rL   r   r   r   rO   |   s    z3TestExtending.test_extension_type_as_arg.<locals>.frP   rH   rS   r   rZ   rX   r   r   r   test_extension_type_as_arg{   s    


z(TestExtending.test_extension_type_as_argc                 C   sh   t jdd }td}td}|d || t|d |d  |d |d  f}tj|| d S )	Nc                 S   sF   t |d |d }t |d |d }t||}|j| d< |j| d< d S )Nr   rH         )r	   r   r   r   )rM   rN   Ziv1Ziv2Ziv_sumr   r   r   rO      s
    

z8TestExtending.test_extension_type_as_retvalue.<locals>.f)rQ   rR   g      @g      @r]   rS   r   rH   r^   rZ   )r   rO   rN   rM   expectedr   r   r   test_extension_type_as_retvalue   s    


&z-TestExtending.test_extension_type_as_retvalueN)r   r   r   rY   r[   r\   r`   r   r   r   r   rK   ^   s   rK   __main__)0Znumba.cuda.testingr   r   r   numpyrU   Znumbar   r   r   r   r	   r   r   ZENABLE_CUDASIMZ
numba.corer    Znumba.core.extendingr!   r"   r#   r$   r%   r&   Znumba.core.typing.templatesr'   Znumba.cuda.cudadeclr(   Zcuda_registryZnumba.cuda.cudaimplr)   Zcuda_lower_attrTyper*   r0   registerr3   r8   r;   r9   r5   rB   Zregister_attrrC   rJ   rK   r   mainr   r   r   r   <module>   sB   

 



;
