o
    i                     @   s   d dl mZ d dl mZ d dl mZ d dlmZ G dd dZdd Zd	d
 Z	G dd dej
ZG dd dej
ZG dd deZG dd deZeeZeeZG dd dejZedZedZedZdS )    )_cuda_types)_cuda_typerules)_internal_types)runtimec                   @      e Zd Zdd Zdd ZdS )_ClassTemplatec                 C   s   || _ | j j| _d S N)_class_type__doc__)self
class_type r   J/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/cupyx/jit/cub.py__init__	   s   z_ClassTemplate.__init__c                 C   s   t |tr
| j| S | |S r   )
isinstancetupler	   )r   argsr   r   r   __getitem__   s   


z_ClassTemplate.__getitem__N)__name__
__module____qualname__r   r   r   r   r   r   r          r   c                 C   s>   t jr| jd d| j_d S | jd d| j_d| j_d S )Nz#include <hipcub/hipcub.hpp>nvccz%#include <cub/block/block_reduce.cuh>nvrtcF)_runtimeis_hip	generatedadd_codebackendjitify)envr   r   r   _include_cub   s   r!   c                   C   s   t jrdS dS )Nhipcubcub)r   r   r   r   r   r   _get_cub_namespace#      r$   c                       s*   e Zd Z fddZdefddZ  ZS )_TempStorageTypec                    s"   t |tsJ || _t   d S r   )r   _CubReduceBaseTypeparent_typesuperr   )r   r(   	__class__r   r   r   )   s   z_TempStorageType.__init__returnc                 C   s   d| j  dS )Nz	typename z::TempStorage)r(   )r   r   r   r   __str__.   r%   z_TempStorageType.__str__r   r   r   r   strr-   __classcell__r   r   r*   r   r&   '   s    r&   c                   @   s@   e Zd ZdejfddZejdejfddZejdd ZdS )	r'   r,   c                 C   sH   t | |j| jkrtd|j d| j dt|  d|j d| S )NzInvalid temp_storage type . ( is expected.)())r!   ctypeTempStorage	TypeErrorr   Datacode)r   r    temp_storager   r   r   _instantiate4   s   
z_CubReduceBaseType._instantiatec                 C   sD   |j | jkrtd|j  d| j dt|j d|j d|j S )NInvalid input type r1   r2   z.Sum(r4   r5   Tr7   r   r8   r9   )r   r    instanceinputr   r   r   Sum<   s   z_CubReduceBaseType.Sumc                 C   sL   |j | jkrtd|j  d| j dt|j d|j d|j d|j S )Nr<   r1   r2   z.Reduce(, r4   r=   )r   r    r?   r@   reduction_opr   r   r   ReduceD   s   z_CubReduceBaseType.ReduceN)	r   r   r   r   r8   r;   wraps_class_methodrA   rD   r   r   r   r   r'   2   s    r'   c                       s,   e Zd Zd fddZdefddZ  ZS )_WarpReduceTyper,   Nc                    s$   t || _t| | _t   d S r   )r   to_ctyper>   r&   r6   r)   r   )r   r>   r*   r   r   r   P   s   
z_WarpReduceType.__init__c                 C   s   t  }| d| j dS )Nz::WarpReduce<>)r$   r>   r   	namespacer   r   r   r-   U   s   z_WarpReduceType.__str__)r,   Nr.   r   r   r*   r   rF   N   s    rF   c                       s4   e Zd Zdeddf fddZdefddZ  ZS )_BlockReduceTypeBLOCK_DIM_Xr,   Nc                    s*   t || _|| _t| | _t   d S r   )r   rG   r>   rL   r&   r6   r)   r   )r   r>   rL   r*   r   r   r   \   s   
z_BlockReduceType.__init__c                 C   s    t  }| d| j d| j dS )Nz::BlockReduce<rB   rH   )r$   r>   rL   rI   r   r   r   r-   b   s   z_BlockReduceType.__str__)r   r   r   intr   r/   r-   r0   r   r   r*   r   rK   Z   s    rK   c                   @   r   )_CubFunctorc                 C   s   t  }| d| d| _d S )Nz::z())r$   fname)r   namerJ   r   r   r   r   m   s   z_CubFunctor.__init__c                 C   s   t | jtjddS )Ncub_functor)label)r   r8   rO   r   Unknown)r   r    r   r   r   
call_constq   s   z_CubFunctor.call_constN)r   r   r   r   rT   r   r   r   r   rN   k   r   rN   rA   MaxMinN)	cupyx.jitr   r   r   cupy_backends.cuda.apir   r   r   r!   r$   TypeBaser&   r'   rF   rK   
WarpReduceBlockReduceBuiltinFuncrN   rA   rU   rV   r   r   r   r   <module>   s"    