o
    0 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__)selfZ
class_type r   Y/home/app/PaddleOCR-VL-test/.venv_paddleocr/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>Znvccz%#include <cub/block/block_reduce.cuh>ZnvrtcF)_runtimeis_hip	generatedZadd_codebackendZjitify)envr   r   r   _include_cub   s   r   c                   C   s   t jrdS dS )NZhipcubZ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   Z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 r*   r+   z.Sum(r-   r.   Tr0   r   r1   r2   )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 )Nr4   r*   r+   z.Reduce(, r-   r5   )r   r   r7   r8   Zreduction_opr   r   r   ReduceD   s   z_CubReduceBaseType.ReduceN)	r   r   r   r   r1   r3   Zwraps_class_methodr9   r;   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_ctyper6   r   r/   r"   r   )r   r6   r#   r   r   r   P   s   
z_WarpReduceType.__init__c                 C   s   t  }| d| j dS )Nz::WarpReduce<>)r   r6   r   	namespacer   r   r   r&   U   s   z_WarpReduceType.__str__)r%   Nr'   r   r   r#   r   r<   N   s    r<   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   r=   r6   rB   r   r/   r"   r   )r   r6   rB   r#   r   r   r   \   s   
z_BlockReduceType.__init__c                 C   s    t  }| d| j d| j dS )Nz::BlockReduce<r:   r>   )r   r6   rB   r?   r   r   r   r&   b   s   z_BlockReduceType.__str__)r   r   r   intr   r(   r&   r)   r   r   r#   r   rA   Z   s    rA   c                   @   r   )_CubFunctorc                 C   s   t  }| d| d| _d S )Nz::z())r   fname)r   namer@   r   r   r   r   m   s   z_CubFunctor.__init__c                 C   s   t | jtjddS )NZcub_functor)label)r   r1   rE   r   Unknown)r   r   r   r   r   
call_constq   s   z_CubFunctor.call_constN)r   r   r   r   rI   r   r   r   r   rD   k   r   rD   r9   MaxMinN)Z	cupyx.jitr   r   r   Zcupy_backends.cuda.apir   r   r   r   r   ZTypeBaser   r    r<   rA   Z
WarpReduceZBlockReduceZBuiltinFuncrD   r9   rJ   rK   r   r   r   r   <module>   s"    