o
    Y۷i                     @   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sd 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 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   \/home/ubuntu/vllm_env/lib/python3.10/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 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   dmm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    create_struct_proxyr   r   	_getvalue)r7   buildersigargstypr   r   r   r   r   r   impl_intervalG   s   rF   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*   keyrI   r   r   r   r   rG   P   s    rG   r   c                 C   s$   | |d}| |d}|||S Nr      )extract_valuefsub)r7   rB   rC   argr   r   r   r   r   cuda_Interval_widthW   s   rP   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 rK   r   rxivr   r   r   fa   s   
z(TestExtending.test_attributes.<locals>.f      ?      @rL   rL   )r   jitnpasarray
zeros_liketestingassert_equalr   rV   rT   rS   r   r   r   test_attributes`   s   


zTestExtending.test_attributesc                 C   R   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 rK   )r	   r   rR   r   r   r   rV   o   s   z&TestExtending.test_property.<locals>.frW   rL   rZ   r   r   r[   r\   r]   zerosr_   assert_allclosera   r   r   r   test_propertyn      


"zTestExtending.test_propertyc                 C   rc   )Nc                 S   s"   t |d |d }t|| d< d S rK   )r	   r   rR   r   r   r   rV   |   s   z3TestExtending.test_extension_type_as_arg.<locals>.frW   rL   rZ   r   rd   ra   r   r   r   test_extension_type_as_arg{   rh   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   rL         )r	   r   r   r   )rS   rT   iv1iv2iv_sumr   r   r   rV      s
   

z8TestExtending.test_extension_type_as_retvalue.<locals>.f)rX   rY   g      @g      @rj   rZ   r   rL   rk   rd   )r   rV   rT   rS   expectedr   r   r   test_extension_type_as_retvalue   s   


&z-TestExtending.test_extension_type_as_retvalueN)r   r   r   rb   rg   ri   rp   r   r   r   r   rQ   ^   s
    rQ   __main__)0numba.cuda.testingr   r   r   numpyr\   numbar   r   r   r   r	   r   r   ENABLE_CUDASIM
numba.corer    numba.core.extendingr!   r"   r#   r$   r%   r&   numba.core.typing.templatesr'   numba.cuda.cudadeclr(   cuda_registrynumba.cuda.cudaimplr)   cuda_lower_attrTyper*   r0   registerr3   r8   r;   r9   r5   rF   register_attrrG   rP   rQ   r   mainr   r   r   r   <module>   sF    

 



;