
    
3j>              	          S SK r S SKrS SKrS SKrS SKJr  \ R                  r\ R                  r\ R                  rSr	\R                  " SS9S 5       r\R                  " SS9S 5       r\R                  S 5       r\R                  S	 5       r\R                  S
 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       rS rS rS rS rS rS rS rS r\R8                  R;                  S\ R<                  \ R>                  /5      S 5       r \R8                  R;                  S\ R<                  \ R>                  /5      S 5       r!\R8                  R;                  S\ RD                  \ RF                  \ RH                  \ RJ                  \ RL                  \ RN                  /5      S 5       r(S r)S r*S r+S r,S  r-S! r.\R8                  R;                  S"\ R^                  \ R`                  \ Rb                  \ Rd                  \ Rf                  \ Rh                  /5      S# 5       r5\R8                  R;                  S$S S%/5      \R8                  R;                  S&/ S'Q5      S( 5       5       r6\R8                  R;                  S)\ Rn                  \ Rp                  \ Rr                  \ Rt                  /5      S* 5       r;g)+    N)LooseVersionz$Legacy NVLink test expected to fail.module)scopec                 V    [         R                  " 5         S nU R                  U5        g )Nc                  .    [         R                  " 5         g N)pynvmlnvmlShutdown     V/home/wildlama/miniconda3/lib/python3.13/site-packages/pynvml_utils/tests/test_nvml.py
nvml_closenvml.<locals>.nvml_close   s    r   )r	   nvmlInitaddfinalizer)requestr   s     r   nvmlr      s!    
OO $r   c                     [         R                  " 5       n[        U[        5      (       a  UR	                  S5      n[        UR                  S5      S   5      $ )Nzutf-8.r   )r	   nvmlSystemGetDriverVersion
isinstancebytesdecodeintsplit)r   
driver_vsns     r   driverr      sH    224J*e$$&&w/
z$Q'((r   c                 r    [         R                  " 5       nUS:  d   e[        S[        U5      -   S-   SS9  U$ )Nr   [z GPUs] end)r	   nvmlDeviceGetCountprintstr)r   results     r   ngpusr'   #   s9    &&(FA::	#F
h
&C0Mr   c                     [        U 5       Vs/ s H  n[        R                  " U5      PM     nn[        U5      U :X  d   eU$ s  snf r   )ranger	   nvmlDeviceGetHandleByIndexlen)r'   ihandless      r   r-   r-   ,   sB    =B5\J\v003\GJw<5   N K    Ac                 j    [         R                  " U S   5      n[        S[        U5      -   S-   SS9  U$ )Nr   r   z MIGs]r    r!   )r	   nvmlDeviceGetMaxMigDeviceCountr$   r%   )r-   r&   s     r   nmigsr1   4   s3    2271:>F	#F
h
&C0Mr   c                     [        U 5       Vs/ s H  n[        R                  " U5      PM     nn[        U5      U :X  d   eU$ s  snf r   )r)   r	   #nvmlDeviceGetMigDeviceHandleByIndexr+   )r1   r,   r-   s      r   mig_handlesr4   <   sB    FKElSlv99!<lGSw<5   N Tr.   c                     [        U 5       Vs/ s H  n[        R                  " X   5      PM     nn[        U5      U :X  d   eU$ s  snf r   )r)   r	   nvmlDeviceGetSerialr+   )r'   r-   r,   serialss       r   r7   r7   C   sD    ?DU|L|!v))'*5|GLw<5   N M   "Ac                     [        U 5       Vs/ s H  n[        R                  " X   5      PM     nn[        U5      U :X  d   eU$ s  snf r   )r)   r	   nvmlDeviceGetUUIDr+   )r'   r-   r,   uuidss       r   r;   r;   J   sD    ;@<H<aV%%gj1<EHu:L Ir8   c                     [        U 5       Vs/ s H  n[        R                  " X   5      PM     nn[        U5      U :X  d   eU$ s  snf r   )r)   r	   nvmlDeviceGetPciInfor+   )r'   r-   r,   pci_infos       r   r>   r>   Q   sD    AFuNA++GJ7HNx=E!!!O Or8   c                 t    Sn[         R                  " 5       n[        SU-   S-   SS9  U[        S5      :  d   eg )N        z[NVML Version: ]r    r!   0.0)r	   nvmlSystemGetNVMLVersionr$   r   r   vsns     r   test_nvmlSystemGetNVMLVersionrF   ]   s=    
C

)
)
+C	
c
!C
'S1e$$$$r   c                 B    Sn[         R                  " 5       nUS:w  d   eg Nr@   )r	   nvmlSystemGetCudaDriverVersionrD   s     r   #test_nvmlSystemGetCudaDriverVersionrJ   d   s!    
C

/
/
1C#::r   c                     S n[         R                  " [        R                  " 5       5      n[	        S[        U5      -   S-   SS9  US :w  d   eg )Nz
[Process: rA   r    r!   )r	   nvmlSystemGetProcessNameosgetpidr$   r%   )r   procnames     r   test_nvmlSystemGetProcessNamerP   k   sC    H..ryy{;H	,X
&
,#6tr   c                 t    Sn[         R                  " 5       n[        SU-   S-   SS9  U[        S5      :  d   eg )Nr@   z[Driver Version: rA   r    r!   rB   )r	   r   r$   r   rD   s     r   test_nvmlSystemGetDriverVersionrR   s   s=    
C

+
+
-C	

#c
)s3e$$$$r   c                     U (       a$  U  H  n[         R                  " U5      nUb  M   e   [        R                  " 5         g r   )r	   nvmlDeviceGetAttributespytestskip)r4   handleatts      r   test_nvmlDeviceGetAttributesrY      s6     !F008C?"? " KKMr   c                     [        U 5       Vs/ s H  n[        R                  " X   5      PM     nn[        U5      U :X  d   eg s  snf r   )r)   r	   nvmlDeviceGetHandleBySerialr+   )r'   r7   r,   r-   s       r    test_nvmlDeviceGetHandleBySerialr\      s?    GLU|T|!v11'*=|GTw<5    U   "Ac                     [        U 5       Vs/ s H  n[        R                  " X   5      PM     nn[        U5      U :X  d   eg s  snf r   )r)   r	   nvmlDeviceGetHandleByUUIDr+   )r'   r;   r,   r-   s       r   test_nvmlDeviceGetHandleByUUIDr`      s?    CH<P<av//9<GPw<5    Qr]   c                     [        U 5       Vs/ s H%  n[        R                  " X   R                  5      PM'     nn[	        U5      U :X  d   eg s  snf r   )r)   r	   nvmlDeviceGetHandleByPciBusIdbusIdr+   )r'   r>   r,   r-   s       r   "test_nvmlDeviceGetHandleByPciBusIdrd      sN    INuIUA,,X[->->?   w<5   s   ,Ar   c                 R    SnU  H  n[         R                  " X2U5      nUb  M   e   g Ni   )r	   nvmlDeviceGetMemoryAffinity)r-   r   sizerW   nodeSets        r    test_nvmlDeviceGetMemoryAffinityrj      s1     D44V5I""" r   c                 R    SnU  H  n[         R                  " X2U5      nUb  M   e   g rf   )r	   #nvmlDeviceGetCpuAffinityWithinScope)r-   r   rh   rW   cpuSets        r   (test_nvmlDeviceGetCpuAffinityWithinScopern      s1     D;;F%P!!! r   indexc                     U  HX  nU  HO  nX#Ld  M	  [         R                  " X#U5      n[         R                  Us=::  a  [         R                  ::  a  MK    e   e   MZ     g r   )r	   nvmlDeviceGetP2PStatusNVML_P2P_STATUS_OKNVML_P2P_STATUS_UNKNOWN)r-   ro   h1h2statuss        r   test_nvmlDeviceGetP2PStatusrw      sb     B|66ruE--655666	  r   c                 h    [        U 5       H#  n[        R                  " X   5      nUS:  a  M#   e   g rH   )r)   r	   nvmlDeviceGetPowerUsage)r'   r-   r,   power_mWattss       r   test_nvmlDeviceGetPowerUsager{      s0    5\55gjAs""" r   c                     [        U 5       Ho  n[        R                  " X   5      n[        S5       H@  n[        R                  " S5        [        R                  " X   5      nXS:  d   eXS:  d  M?    Mh      S5       e   g )N
   gQ?z.energy did not increase across 150 ms interval)r)   r	   #nvmlDeviceGetTotalEnergyConsumptiontimesleep)r'   r-   r,   energy_mJoules1jenergy_mJoules2s         r   (test_nvmlDeviceGetTotalEnergyConsumptionr      sq    5\ DDWZPrAJJu$HHTO"5550  KJJ5 r   c                     [        U 5       HQ  n[        R                  " X   5      nUR                  UR                  ::  a  UR
                  UR                  ::  a  MQ   e   g r   )r)   r	   nvmlDeviceGetMemoryInfousedtotalfree)r'   r-   r,   meminfos       r   test_nvmlDeviceGetMemoryInfor     sG    5\00<-GLLGMM4QRR r   c                     [        U 5       H?  n[        R                  " X   5      nUR                  S:  d   eUR                  S:  a  M?   e   g Nr   )r)   r	   nvmlDeviceGetUtilizationRatesgpumemory)r'   r-   r,   urates       r   "test_nvmlDeviceGetUtilizationRatesr     sD    5\44WZ@yyA~~||q    r   c                    [        U 5       Hr  n[        R                  " X   [        5      nUS:  d   e[        R                  " X   [        5      nUS:  d   e[        R                  " X   [
        5      nUS:  a  Mr   e   g r   )r)   r	   nvmlDeviceGetPcieThroughputNVML_PCIE_UTIL_TX_BYTESNVML_PCIE_UTIL_RX_BYTESNVML_PCIE_UTIL_COUNT)r'   r-   r,   tx_bytes_tprx_bytes_tpcount_tps         r    test_nvmlDeviceGetPcieThroughputr   L  s    5\88J/
 a88J/
 a55gjBVW1}} r   c                    US:  a  [         R                  " [        5        [        U 5       H  n[        [        R
                  5       H  n[        R                  " X   U5      nUS:  d   e[        R                  " X   U5      nUS:  d   e[        R                  " X   U5      n[        U[        R                  5      (       a  M   e   M     g )N      |@   r   )rU   xfailXFAIL_LEGACY_NVLINK_MSGr)   r	   NVML_NVLINK_MAX_LINKSnvmlDeviceGetNvLinkVersionnvmlDeviceGetNvLinkState nvmlDeviceGetNvLinkRemotePciInfor   c_nvmlPciInfo_t)r'   r-   r   r,   r   versionstater>   s           r   test_nvml_nvlink_propertiesr   a  s    ~,-5\v334A77
AFGa<<33GJBEA::>>wz1MHh(>(>???? 5 r   cap_typec                     [        U 5       HD  n[        [        R                  5       H$  n[        R                  " X   XB5      nUS:  a  M$   e   MF     g r   )r)   r	   r   nvmlDeviceGetNvLinkCapability)r'   r-   r   r,   r   caps         r   test_nvml_nvlink_capabilityr   q  sF     5\v334A66wz1OC!8O8 5 r   counterr   control)r   r      c           	         US:  a  [         R                  " [        5        Sn[        U 5       GH  n[        [        R
                  5       H  n[        R                  " X   Xr5      [        R                  :X  d   e[        R                  " X   XrX55        [        R                  " X   Xr5      n[        R                  " X   Xr5      n	US   S:  d   eUS   S:  d   eX:X  d   e[        R                  " X   XrS5      [        R                  :X  d   e[        R                  " X   XrS5      [        R                  :X  a  M   e   GM     g )Nr   r   rxtxr   )rU   r   r   r)   r	   r   'nvmlDeviceResetNvLinkUtilizationCounterNVML_SUCCESS%nvmlDeviceSetNvLinkUtilizationControl%nvmlDeviceGetNvLinkUtilizationCounter%nvmlDeviceGetNvLinkUtilizationControl(nvmlDeviceFreezeNvLinkUtilizationCounter)
r'   r-   r   r   r   resetr,   r   	countdictctls
             r   test_nvml_nvlink_countersr     sD    ~,-E5\v334A>>wz1V&&'' 88
A DD
AI >>wz1VCT?a'''T?a'''>!>??JA &&'' ??JA &&''- 5 r   
error_typec                 D   US:  a  [         R                  " [        5        [        U 5       Hq  n[        [        R
                  5       HQ  n[        R                  " X   U5      [        R                  :X  d   e[        R                  " X   XR5      nUS:  a  MQ   e   Ms     g )Nr   r   )	rU   r   r   r)   r	   r   "nvmlDeviceResetNvLinkErrorCountersr   nvmlDeviceGetNvLinkErrorCounter)r'   r-   r   r   r,   r   error_counts          r   test_nvml_nvlink_error_countersr     s     ~,-5\v334A99'*aH&&'' !@@
AK !### 5 r   )<r	   rU   r   rM   distutils.versionr   r   r   r   r   fixturer   r   r'   r-   r1   r4   r7   r;   r>   rF   rJ   rP   rR   rY   r\   r`   rd   markparametrizeNVML_AFFINITY_SCOPE_NODENVML_AFFINITY_SCOPE_SOCKETrj   rn   NVML_P2P_CAPS_INDEX_READNVML_P2P_CAPS_INDEX_WRITENVML_P2P_CAPS_INDEX_NVLINKNVML_P2P_CAPS_INDEX_ATOMICSNVML_P2P_CAPS_INDEX_PROPNVML_P2P_CAPS_INDEX_UNKNOWNrw   r{   r   r   r   r   r   NVML_NVLINK_CAP_P2P_SUPPORTEDNVML_NVLINK_CAP_SYSMEM_ACCESSNVML_NVLINK_CAP_P2P_ATOMICSNVML_NVLINK_CAP_SYSMEM_ATOMICSNVML_NVLINK_CAP_SLI_BRIDGENVML_NVLINK_CAP_VALIDr   r   NVML_NVLINK_ERROR_DL_REPLAYNVML_NVLINK_ERROR_DL_RECOVERYNVML_NVLINK_ERROR_DL_CRC_FLITNVML_NVLINK_ERROR_DL_CRC_DATAr   r   r   r   <module>r      s1      	 * 88  88 22 @  h%  % h)  )              %%!!! f--v/P/PQ## f--v/P/PQ"" ''(())**''**
	
	Z#
K$S !r*@  ,,,,**--))$$

 QF+I.! / ,!L **,,,,,,	$$r   