
    bih                        d dl Z d dlmZ d dlZd dlZd dlZd dlmZ d dlZ e j                  d       G d d             Z
deeeef      fd	Z ed      deeeef      fd
       Zdee   fdZdee
   fdZdefdZy)    N)	lru_cache)OptionalT)frozenc                   V    e Zd ZU eeef   ed<   eed<   eeef   ed<   edefd       Z	y)	CUDASpecshighest_compute_capabilitycuda_version_stringcuda_version_tuplereturnc                 X    t         j                  j                  xs | j                  dk\  S )N)      )torchversionhipr   )selfs    R/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/bitsandbytes/cuda_specs.pyhas_immazCUDASpecs.has_imma   s"    }}  MD$C$Cv$MM    N)
__name__
__module____qualname__tupleint__annotations__strpropertyboolr    r   r   r   r      s@     %c3h/c3h'N$ N Nr   r   r   c                  p    t        d t        t        j                  j	                               D              S )Nc              3      K   | ]@  }t         j                  j                  t         j                  j                  |             B y w)N)r   cudaget_device_capabilitydevice).0is     r   	<genexpr>z+get_compute_capabilities.<locals>.<genexpr>   s.     sQ%**225::3D3DQ3GHss   AA)sortedranger   r"   device_countr   r   r   get_compute_capabilitiesr+      s)    sRWX]XbXbXoXoXqRrsssr   c                     	 t         j                  j                  rt         j                  j                  } n6t         j                  j                  rt         j                  j                  } ny| j	                  d      }t        |      dk\  rt        t        t        |dd             S y# t        t        t        f$ r Y yw xY w)z2Get CUDA/HIP version as a tuple of (major, minor).N.   )r   r   r"   r   splitlenr   mapr   AttributeError
ValueError
IndexError)version_strpartss     r   get_cuda_version_tupler7      s    ==--,,K]]--++K!!#&u:?S%),--J
3 s   A*B) -:B) )C ?C c                  8    t               } | y| \  }}|dz  |z    S )z!Get CUDA/HIP version as a string.N
   )r7   )version_tuplemajorminors      r   get_cuda_version_stringr=   -   s.    *,M LE5bj5 !"r   c                      t         j                  j                         sy	 t               } | syt	               }|yt               }|yt        | d   ||      S # t        $ r Y yw xY w)zGet CUDA/HIP specifications.N)r   r	   r
   )r   r"   is_availabler+   r7   r=   r   	Exception)compute_capabilitiesr:   version_strings      r   get_cuda_specsrD   6   sz    ::""$79#.0 02!';B'? .,
 	

  s!   A A A A 	A%$A%c                     t        j                  t              } 	 t        j                  j
                  rPt        j                  dgdd      }t        j                  d|j                        }|rd|j                  d      z   S yy# t        $ rM}| j                  d|        t        j                  j                         r| j!                  d	       Y d
}~yd
}~ww xY w)zGet ROCm GPU architecture.rocminfoT)capture_outputtextzName:\s+gfx([a-zA-Z\d]+)gfx   unknownz(Could not detect ROCm GPU architecture: zV
ROCm GPU architecture detection failed despite ROCm being available.
                N)logging	getLoggerr   r   r   r   
subprocessrunresearchstdoutgrouprA   errorr"   r@   warning)loggerresultmatches       r   get_rocm_gpu_archrZ   Q   s    x(F==^^ZLDQFII96==IEu{{1~--  ?sCD::""$NN
 s   A(B 	CACC)dataclasses	functoolsr   rL   rP   rN   typingr   r   	dataclassr   listr   r   r+   r7   r   r=   rD   rZ   r   r   r   <module>r`      s       	    d#N N $Nt$uS#X"7 t 4sCx 9  $## #+ 63 r   