o
    ºiW8  ã                
   @   sØ  U d dl Zd dlZd dlmZ dZdZdZdZee	df e
d< d	Zed
7 ZdZdZdZeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZedkrêeddƒZe ¡ ZW d  ƒ n1 sZw   Y  dZeD ]TZee e¡dƒZe ¡ ZW d  ƒ n1 s|w   Y  d ZeD ]1Z e !¡ Z"ej# $e e ¡¡Z%e%Ze ¡  &¡ Z'W d  ƒ n1 s§w   Y  ee'ee"e eƒZdZq…qce (dd¡Ze (dd ¡Zee )d!¡d… Zed"d#ƒZe *e¡ W d  ƒ dS 1 sãw   Y  dS dS )$é    N)ÚTuplez&/usr/local/cuda-{0}/include/cusparse.h)z11.3z11.0z10.2zehttps://raw.githubusercontent.com/ROCmSoftwarePlatform/hipSPARSE/rocm-{0}/library/include/hipsparse.h)z3.5.0z3.7.0z3.8.0z3.9.0z4.0.0z4.2.0.Útypedefs)ÚcusparseIndexBase_tÚcusparseStatus_tÚcusparseHandle_tÚcusparseMatDescr_tÚcsrsv2Info_tÚcsrsm2Info_tÚcsric02Info_tÚbsric02Info_tÚcsrilu02Info_tÚbsrilu02Info_tÚcsrgemm2Info_tÚcusparseMatrixType_tÚcusparseFillMode_tÚcusparseDiagType_tÚcusparsePointerMode_tÚcusparseAction_tÚcusparseDirection_tÚcusparseSolvePolicy_tÚcusparseOperation_t)ÚcusparseSpVecDescr_tÚcusparseDnVecDescr_tÚcusparseSpMatDescr_tÚcusparseDnMatDescr_tÚcusparseIndexType_tÚcusparseFormat_tÚcusparseOrder_tÚcusparseSpMVAlg_tÚcusparseSpMMAlg_tÚcusparseSparseToDenseAlg_tÚcusparseDenseToSparseAlg_tÚcusparseCsr2CscAlg_taú  
#if HIP_VERSION >= 402
static hipDataType convert_hipDatatype(cudaDataType type) {
    switch(static_cast<int>(type)) {
        case 2 /* CUDA_R_16F */: return HIP_R_16F;
        case 0 /* CUDA_R_32F */: return HIP_R_32F;
        case 1 /* CUDA_R_64F */: return HIP_R_64F;
        case 6 /* CUDA_C_16F */: return HIP_C_16F;
        case 4 /* CUDA_C_32F */: return HIP_C_32F;
        case 5 /* CUDA_C_64F */: return HIP_C_64F;
        default: throw std::runtime_error("unrecognized type");
    }
}
#endif
a|  
#if HIP_VERSION >= 402
typedef enum {} cusparseOrder_t;
static hipsparseOrder_t convert_hipsparseOrder_t(cusparseOrder_t type) {
    switch(static_cast<int>(type)) {
        case 1 /* CUSPARSE_ORDER_COL */: return HIPSPARSE_ORDER_COLUMN;
        case 2 /* CUSPARSE_ORDER_ROW */: return HIPSPARSE_ORDER_ROW;
        default: throw std::runtime_error("unrecognized type");
    }
}
z[
#if HIP_VERSION < 401
#define HIPSPARSE_STATUS_NOT_SUPPORTED (hipsparseStatus_t)10
#endif
c                 C   sH   |   |¡}	 |dkr	 |S | |t|ƒ  dkr |   ||d ¡}n	 |S q)NTéÿÿÿÿú(é   )ÚfindÚlen)Úcu_hÚcu_funcÚcu_sig© r+   ú_/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/cupyx/tools/_hipsparse_stub_mapper.pyÚget_idx_to_funca   s   
üùr-   c                 C   s&   |   d¡} t| d ƒd t| d ƒ S )NÚ.r   éd   r%   )ÚsplitÚint)Úhip_versionr+   r+   r,   Úget_hip_ver_numo   s   
r3   c                 C   s    g }d }t | ƒD ]E\}}||krM| d¡s| d¡r | |¡ q| d¡}|dkr.| d¡}|dkrB| || |d   ¡ |d }q| |d |d … ¡ q|S )Nú,ú)r#   r%   )Ú	enumerateÚendswithÚappendr&   )r*   Úcu_sig_processedÚ	skip_lineÚlineÚsÚ	break_idxr+   r+   r,   Úmerge_bad_broken_linesu   s   


€r>   c                 C   s4  d| v r|   ¡ } d| d d d…  d | d d  }d}npd| v r<|   ¡ } d| d d d…  d | d d  }d}nRd| v rZ|   ¡ } d| d d d…  d | d d  }d	}n4d
| v rx|   ¡ } d| d d d…  d | d d  }d}nd| v r¦|   ¡ } |d7 }|d| d d d… › d| d d d… › d7 }d| d d  }d}nèd| v rÔ|   ¡ } |d7 }|d| d d d… › d| d d d… › d7 }d| d d  }d}nºd| v rñ|   ¡ } d| d d d…  d | d d  }d}nd| v r|   ¡ } |d7 }|| d d d… d 7 }d| d d  }d}nyd| v r;|   ¡ } |d7 }|d| d d d…  d 7 }d| d d  }d}nSd| v ra|   ¡ } |d7 }|d| d d d…  d 7 }d | d d  }d}n-d!| v r„|d"kr„|   ¡ } d| d d d…  d | d d  }d#}n
|   ¡ } | d }d}||| d$ 7 }||fS )%Nzconst cuComplex*r$   r#   r5   z#reinterpret_cast<const hipComplex*>zconst cuDoubleComplex*z)reinterpret_cast<const hipDoubleComplex*>z
cuComplex*zreinterpret_cast<hipComplex*>zcuDoubleComplex*z#reinterpret_cast<hipDoubleComplex*>Ú	cuComplexz  hipComplex blah;
z	  blah.x=z.x;
  blah.y=z.y;
ÚblahÚ ÚcuDoubleComplexz  hipDoubleComplex blah;
zcudaDataType*zreinterpret_cast<hipDataType*>ÚcudaDataTypez)  hipDataType blah = convert_hipDatatype(z);
zcusparseOrder_t*z  hipsparseOrder_t blah2 = zconvert_hipsparseOrder_t(*z&blah2r   zconvert_hipsparseOrder_t(Úblah2zconst void*ÚhipsparseSpVV_bufferSizezconst_cast<void*>ú )r0   )r<   Úhip_sigÚdeclÚhip_funcÚargÚcastr+   r+   r,   Úprocess_func_args‹   sx   $$$$..$




$rL   c              	   C   s¸  t |ƒ}g }t|ƒD ]I\}}|dkr8|s8| |¡ |dkr7| d¡ | d¡ | d¡ | t¡ | t¡ q
| d¡rád}d}	d	}
tD ]>}||v rƒ|tvrƒ| d
¡r\d|dd …  n|}|| v r€|}||kru|}d| d | d }n|dkr{d }d}
d	}	n	  nqEd }|d urÕ|dkr˜|dkr˜| t¡ n|	r±|dkr±|
r©| d|› ¡ n| d|› ¡ |dkr¹|dks¾| |¡ |	rÕ|dkrÕ|
rÐ| d¡ | |¡ | d¡ |d urà|	ràt 	|¡ q
d|v r*| 
¡ }z
t|ƒdksóJ ‚W n ty   td|› ƒ ‚ w |d }|d | d¡… }d|dd …  }t||ƒ}t| |ƒ}|dkr0|dkr0J ‚|dkrE|dkrEt|dtjd d}n`|dkrZ|dkrZt|dtjd d}nK||d …  d¡}|dksjJ ‚|||| d … }| 
d¡}|d  d }|dd … D ]}|dt|d  ƒd  | d 7 }q…|d d… }||d< d	}| d |¡¡ ||d  }d!|vrÅ||d  }d!|v sÅJ ‚|r| 
d¡}t|ƒ}|dkrÞ| d|› ¡ d"| d }d}|D ]}t||||ƒ\}}qè|d d… d }| || ¡ |dkr| d¡ | d#¡ | d$¡ q
| |d | d!¡d% … d& ¡ q
d!|v rOd'|v r5q
d(|v rId||d  v rH| |¡ q
| |¡ q
| |¡ q
d |¡d S ))Né   i1  z#include <hipsparse.h>z2#include <hip/hip_version.h>    // for HIP_VERSIONz2#include <hip/library_types.h>  // for hipDataTypeÚtypedefrA   FTÚcuÚhipé   ztypedef rF   ú;r   i’  z#if HIP_VERSION >= z#if HIP_VERSION < z#elsez#endif
z...zsig is r%   r$   r#   z%not found in cuSPARSE, maybe removed?)Úfilez,not found in hipSPARSE, maybe not supported?r5   Ú
r   Úreturnz	  return z(  return HIPSPARSE_STATUS_NOT_SUPPORTED;z#endifé   z  HIPSPARSE_STATUS_NOT_SUPPORTED;ÚCUSPARSE_STATUSÚHIPSPARSE_STATUS_NOT_SUPPORTED)r3   r6   r8   ÚcudaDataType_converterÚdefault_return_codeÚ
startswithr   Úprocessed_typedefsÚcusparseOrder_converterÚaddr0   r'   ÚAssertionErrorÚprintr&   r-   ÚsysÚstderrÚjoinr>   rL   )Úhip_hr(   Ústubsr2   ÚinitÚ
hip_stub_hÚir;   Úold_lineÚtypedef_foundÚtypedef_neededÚtÚhip_tÚsigr)   rI   r*   rG   Úcan_mapÚend_idxÚ
new_cu_sigr<   rH   r+   r+   r,   ÚmainÐ   s   

ÿÿ

€
€




€
þ

ÿÿ
$


ÿ

ÿ
€ÿÿ



€rr   Ú__main__z"cupy_backends/stub/cupy_cusparse.hÚrFTz#define CUSPARSE_VERSION -1zg#define CUSPARSE_VERSION (hipsparseVersionMajor*100000+hipsparseVersionMinor*100+hipsparseVersionPatch)Ú"INCLUDE_GUARD_STUB_CUPY_CUSPARSE_HÚ"INCLUDE_GUARD_HIP_CUPY_HIPSPARSE_HrT   z"cupy_backends/hip/cupy_hipsparse.hÚw)+Úurllib.requestÚurllibra   Útypingr   Ú
cusparse_hÚcu_versionsÚhipsparse_urlÚhip_versionsÚstrÚ__annotations__r   rY   r]   rZ   Úsetr\   r-   r3   r>   rL   rr   Ú__name__ÚopenÚfÚreadre   rf   Úcu_verÚformatr(   ÚxÚhip_verÚ
splitlinesÚstubs_splittedÚrequestÚurlopenÚreqÚdecoderd   Úreplacer&   Úwriter+   r+   r+   r,   Ú<module>   sh   
 
		E #
ÿ
ÿÿøþþ"ÿá