
    -PhI                    l   U d dl mZ d dlZd dlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZ dd	lmZmZmZmZmZmZ ej        r@d d
lmZ ddlmZ ddlmZ ddlmZ  G d de          Zej        eej         e         f         Z! ed ee"e          efd          Z#de$d<    G d de          Z%ddZ&dS )    )annotationsN   )listifyversion_compare)CudaCompiler)NoneType   )NewExtensionModule
ModuleInfo)ContainerTypeInfoInvalidArguments	KwargInfonoKwargstyped_kwargstyped_pos_args)	TypedDict)ModuleState)Interpreter)TYPE_varc                      e Zd ZU ded<   dS )ArchFlagsKwargszT.Optional[T.List[str]]detectedN)__name__
__module____qualname____annotations__     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/modules/cuda.pyr   r      s         ))))))r   r   r   T)r   z%KwargInfo[T.Union[None, T.List[str]]]DETECTED_KWc                  L    e Zd Z eddd          Zd, fdZed-d            Z ede	e
fe	           ede          d.d                        Z ede	e
fe	           ede          d.d                        Zed/d            Zed0d            Zd1d Zd2d&Zd3d+Z xZS )4
CudaModuleCUDAz0.50.0T)unstableinterpr   c                    t                                                       | j                            | j        | j        | j        d           d S )N)min_driver_versionnvcc_arch_flagsnvcc_arch_readable)super__init__methodsupdater'   r(   r)   )selfr%   	__class__s     r   r+   zCudaModule.__init__&   sY    "&"9"&"6"&"9
 
 	 	 	 	 	r   state'ModuleState'argsT.List[TYPE_var]kwargsT.Dict[str, T.Any]returnstrc                   t          d          }t          |          dk    st          |d         t                    s||d         }g dddddd	d
ddddddddddddddddddddddddddddddd d!dd"d#d$dd%d&d'dd(d)d*dd+d,d*dd-d.d/dd0d1d2dd3d4d5dd6d7d8dd9d:d;dd<d=d>dd?d@dAddBdCdDddEdFdGddHdIdJddKdLdMddNdOdPddQdRdSddTdUdVddWdXdYddZd[d\dd]d^d_d}d`}|D ]J}t	          ||da                   r2|                    |j        j        j        j	        |db                   } nK|S )cNzmin_driver_version must have exactly one positional argument: a CUDA Toolkit version string. Beware that, since CUDA 11.0, the CUDA Toolkit's components (including NVCC) are versioned independently from each other (and the CUDA Toolkit as a whole).r	   r   z>=12.0.0z527.41z	525.60.13)cuda_versionwindowslinuxz>=11.8.0z522.06z	520.61.05z>=11.7.1z516.31z	515.48.07z>=11.7.0z516.01z	515.43.04z>=11.6.1z511.65z	510.47.03z>=11.6.0z511.23z	510.39.01z>=11.5.1z496.13z	495.29.05z>=11.5.0z496.04z>=11.4.3z472.50z	470.82.01z>=11.4.1z471.41z	470.57.02z>=11.4.0z471.11z	470.42.01z>=11.3.0z465.89z	465.19.01z>=11.2.2z461.33z	460.32.03z>=11.2.1z461.09z>=11.2.0z460.82z	460.27.03z>=11.1.1z456.81z455.32z>=11.1.0z456.38z455.23z>=11.0.3z451.82z	450.51.06z>=11.0.2z451.48z	450.51.05z>=11.0.1z451.22z	450.36.06z	>=10.2.89z441.22z440.33z
>=10.1.105z418.96z418.39z
>=10.0.130z411.31z410.48z	>=9.2.148z398.26z396.37z>=9.2.88z397.44z396.26z>=9.1.85z391.29z390.46z>=9.0.76z385.54z384.81z>=8.0.61z376.51z375.26z>=8.0.44z369.30z367.48z>=7.5.16z353.66z352.31z>=7.0.28z347.62z346.46unknownr9   r;   )
r   len
isinstancer7   r   getenvironmentmachineshostsystem)	r.   r0   r2   r4   argerrorr9   driver_version_tabledriver_versionds	            r   r'   zCudaModule.min_driver_version.   s     $ %g h h
 t99>>DGS!9!9>NAw  
'hUU  
'hUU  
 (hUU  
 (hUU	  

 (hUU  
 (hUU  
 (hUU  
 (hUU  
 (hUU  
 (hUU  
 (hUU  
 (hUU  
 (hUU  
 (hUU  
 (hUU  
  (hRR!  
" (hRR#  
$ (hUU%  
& (hUU'  
( (hUU)  
* )hRR+  
, *hRR-  
. *hRR/  
0 )hRR1  
2 (hRR3  
4 (hRR5  
6 (hRR7  
8 (hRR9  
: (hRR;  
< (hRR=  
> (hRR?  
D #% 	 	A|Q~->?? !"u'8'A'F'MqQXz!Z!Z r   zcuda.nvcc_arch_flags)varargs0T.Tuple[T.Union[CudaCompiler, str], T.List[str]]r   T.List[str]c                R    |                      ||          } | j        | d         }|S )Nr   _validate_nvcc_arch_args_nvcc_arch_flagsr.   r0   r2   r4   nvcc_arch_argsrets         r   r(   zCudaModule.nvcc_arch_flagse   2    
 66tVDD#d#^4Q7
r   zcuda.nvcc_arch_readablec                R    |                      ||          } | j        | d         }|S )Nr	   rL   rO   s         r   r)   zCudaModule.nvcc_arch_readablen   rR   r   sc                ~    t          j        dd|           } |                     d                              d          S )Nz	[ 	
,;]+;)resubstripsplit)rT   s    r   _break_arch_stringzCudaModule._break_arch_stringw   s3    F>3**wws||!!#&&&r   cT.Union[str, CudaCompiler]c                @    t          | t                    r| j        gS g S N)r>   r   detected_cc)r\   s    r   _detected_cc_from_compilerz%CudaModule._detected_cc_from_compiler|   s#    a&& 	#M?"	r   0T.Tuple[T.Union[str, CudaCompiler], T.List[str]]#T.Tuple[str, AutoArch, T.List[str]]c                4    |d         }t          |t                    r|j        }n|}|d         }t           fd|D                       }t	          |          dk    r3t          |                              h d          st          d          t	          |          dk    r|d         n|}|d         |d         n                     |          } fd|D             }t          |                              h d          st          d          |||fS )Nr   r	   c                :    g | ]}                     |          S r   r[   ).0ar.   s     r   
<listcomp>z7CudaModule._validate_nvcc_arch_args.<locals>.<listcomp>   s'    KKKAT44Q77KKKr   >   AllAutoCommonzaThe special architectures 'All', 'Common' and 'Auto' must appear alone, as a positional argument!r   c                D    g | ]}                     |          D ]}|S r   rf   )rg   rh   xr.   s      r   ri   z7CudaModule._validate_nvcc_arch_args.<locals>.<listcomp>   s4    LLL!1H1H1K1KLLAALLLLr   )	r>   r   versionr   r=   set
isdisjointr   ra   )r.   r2   r4   compilerr9   	arch_listr   s   `      r   rM   z#CudaModule._validate_nvcc_arch_args   sP    7h-- 	$#+LL#L"1g	KKKKKKKLL	y>>Ac)nn&?&?@Y@Y@Y&Z&Z"  $K  L  L  L$'	NNa$7$7IaLLY	)/
);)G6*%%TMlMlmuMvMvLLLLxLLL8}}''(A(A(ABB 	L"  $K  L  L  LY00r   cuda_arch_listlohiT.Optional[str]saturatec                    g }|D ]J}|rF|rt          |d|z             r|rt          |d|z             r|}||vr|                    |           K|S )z
        Filter CUDA arch list (no codenames) for >= low and < hi architecture
        bounds, and deduplicate.
        Architectures >= hi are replaced with saturate.
        <>=)r   append)r.   rt   ru   rv   rx   filtered_cuda_arch_listarchs          r   _filter_cuda_arch_listz!CudaModule._filter_cuda_arch_list   s     #%" 	9 	9D 9 /$b99  $/$r	:: $#D666+224888&&r   r9   AutoArchr   !T.Tuple[T.List[str], T.List[str]]c                2
   g d}g d}d}d}g d}t          |d          rd}t          |d          r%|g d	z  }|dgz  }t          |d
          r|dgz  }d}t          |d          r-|ddgz  }|ddgz  }|g dz  }t          |d          r|dgz  }d}t          |d          r.|ddgz  }|dgz  }|ddgz  }d}t          |d          r|dgz  }d}t          |d          r*|dgz  }|dgz  }|dgz  }t          |d           r|d!gz  }d}dg}	dg}
t          |d"          r,|d#gz  }|dgz  }|dgz  }d$}t          |d%          r|d&gz  }d'}t          |d(          r-|	d'gz  }	d'g}
|d'gz  }|d'gz  }t          |d)          r|d*gz  }d+}t          |d,          r'|g d-z  }|g d.z  }|g d/z  }t          |d0          rd1}t          |d2          rd3}t          |d4          rd5}|sd6}|d7k    r|}n|d8k    r|}n|d6k    rQ|rLt          |t                    r|}n|                     |          }|                     ||||d9                   }n-|}n*t          |t
                    r|                     |          }t          d: t          |          D                       }g }g }|D ]}|                    d;          }|r|dt          d;                    }t          j        d<|          r|g|g}}n`dd=gg fd>gg fd?gg fdd$gd$gfd@gg fd3dgdgfddgdgfdAgg fdgdgfdgg fdgdgf|	|
fd+gg fdBgdBgfdCgdCgfdD                    |dE          \  }}|t          dF| dG          ||z  }|r	|s|}||z  }t          t          |                    }t          t          |                    }g }g }|D ]}t          j        dH|                                          \  }}t          |dI|z             r@|rt          |dJ|z             rV|rF|                    dKdL          }|                    dKdL          }|dMdN|z   dOz   |z   gz  }|dP|z   gz  }|                    dKdL          }|dMdN|z   dOz   |z   gz  }|dP|z   gz  }|D ]}t          j        dH|                                          \  }}|r|}t          |dI|z             rD|rt          |dJ|z             rZ|                    dKdL          }|dMdN|z   dQz   |z   gz  }|dR|z   gz  }||fS )Sz{
        Using the CUDA Toolkit version and the target architectures, compute
        the NVCC architecture flags.
        )FermiKeplerMaxwell)3.03.55.0Nz2.0)r   3.2r   r   z<7.0z5.2z>=7.0)Kepler+TegraKepler+TeslaMaxwell+Tegraz<8.0z5.2+PTX6.0z>=8.0PascalPascal+Tegra6.1)r   r   6.2z<9.0z6.1+PTXz7.0z>=9.0VoltaXavierz7.2r   z<10.0z7.2+PTXz8.0z>=10.0Turingz7.5z<11.0z7.5+PTXz>=11.0Amperer   z<11.1z8.0+PTXz8.6z>=11.1z<11.8z8.6+PTX8.7z>=11.8)OrinLovelaceHopper)8.99.0z9.0+PTX)r   r   r   z<12z9.1z>=12.0r   z<13z10.0rk   rj   rl   c              3     K   | ]}||V  	d S r_   r   )rg   rn   s     r   	<genexpr>z.CudaModule._nvcc_arch_flags.<locals>.<genexpr>#  s'      DDa!DDDDDDDr   z+PTXz![0-9]+\.[0-9](\([0-9]+\.[0-9]\))?z2.1(2.0)r   z3.7z5.3r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NNzUnknown CUDA Architecture Name !z'([0-9]+\.[0-9])(?:\(([0-9]+\.[0-9])\))?rz   r{   . z-gencodezarch=compute_z	,code=sm_sm_z,code=compute_compute_)r   r>   listr[   r   r7   sortedrp   endswithr=   rW   	fullmatchr?   r   groupsreplace)r.   r9   rt   r   cuda_known_gpu_architecturescuda_common_gpu_architecturescuda_hi_limit_gpu_architecturecuda_lo_limit_gpu_architecturecuda_all_gpu_architecturescuda_ampere_bincuda_ampere_ptxcuda_arch_bincuda_arch_ptx	arch_nameadd_ptxarch_binarch_ptx
nvcc_flagsnvcc_archs_readabler~   codevs                        r   rN   zCudaModule._nvcc_arch_flags   s    *H)G)G$)>)>)>%)-&).&)E)E)E"<00 	3-2*<11 	7(-^-^-^^()eW4)|V44 7-)<-16.<11 	7(h-GG()eU^;)&-B-B-BB&|V44 7-)<-16.<11 		7(gx-@@()eW4)&eU^;&-2*|W55 7-)<-16.<22 	7(hZ7()eW4)&eW4&|W55 7-)<-16. !' '<22 		7(hZ7()eW4)&eW4&-2*|W55 7-)<-16.<22 		7w&O %wO)eW4)&eW4&|W55 7-)<-16.<22 	7(-K-K-KK()-F-F-FF)&-B-B-BB&|U33 716.<22 	8 .3*|U33 817. 	$#Nu$$9NNx'':NNv%% 
?h-- G%-NN%)%<%<X%F%FN!%!<!<^=[=[=Z[]=^"` "`
 "?,, 	E!44^DDNDD3~+>+>DDDDD%'%'' $	* $	*I  ((00G 5%mF|m4	|CYOO /&/[9+( (-j&92%>',g2%>',g2%>',enE7%C',g2%>',enE7%C',enE7%C',g2%>',gE7%C',g2%>',gE7%C&5?%K',g2%>',gE7%C',gE7%C& &  #i..! #($ &'U'U'U'UVVVX%M * ('H)s=1122s=1122
 ! 	6 	6D,=tE EEKVXX D% tS+I%IJJ - /$OmHm2n2n  6||C,,c2..z?U+B[+PSW+WXX
#~5##||C,,z?T+AK+ORV+VWW
#~5##! 	7 	7D,=tE EEKVXX D%  tS+I%IJJ - /$OmHm2n2n <<R((D:'=@P'PSW'WXXJJ$5#66...r   )r%   r   )r0   r1   r2   r3   r4   r5   r6   r7   )r0   r1   r2   rI   r4   r   r6   rJ   )rT   r7   r6   rJ   )r\   r]   r6   rJ   )r2   rb   r4   r   r6   rc   )
rt   rJ   ru   r7   rv   rw   rx   r7   r6   rJ   )r9   r7   rt   r   r   rJ   r6   r   )r   r   r   r   INFOr+   r   r'   r   r7   r   r   r    r(   r)   staticmethodr[   ra   rM   r   rN   __classcell__)r/   s   @r   r"   r"   "   s       :fh666D      4 4 4 X4l ^*S,,?MMM\(+66   76 NM ^-\/BCPPP\+[99   :9 QP ' ' ' \'    \
1 1 1 1,' ' ' '$L/ L/ L/ L/ L/ L/ L/ L/r   r"   r%   r   r6   c                     t          |           S r_   )r"   )r%   s    r   
initializer   x  s    fr   )r%   r   r6   r"   )'
__future__r   rW   typingTmesonlibr   r   compilers.cudar   interpreter.type_checkingr   r   r
   r   interpreterbaser   r   r   r   r   r   TYPE_CHECKINGtyping_extensionsr   r   interpreterr   r   r   Unionr7   Listr   r   r    r   r"   r   r   r   r   <module>r      s   # " " " " " " 				     / / / / / / / / ) ) ) ) ) ) 0 0 0 0 0 0 , , , , , , , ,                ? 
)++++++))))))******* * * * *) * * * wsAF3K'(H 6?YzL]L]^bdgLhLhjrKs  ~B  6C  6C  6C  C  C  C  CT/ T/ T/ T/ T/# T/ T/ T/l
     r   