+
    "Ý³jR  ã                   óä  € ^ RI t ^ RIt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^RIHtHtHtHtHt ^RIHt ]P$                  ! ]4      t^t^t]]0t ! R R]4      t ! R R] P2                  4      t ! R	 R
] P2                  4      t ! R R] P2                  4      t ! R R] P2                  4      tR tR t ! R R4      t ] ! 4       t! ! R R4      t"]"! 4       t#RR lt$ ! R R]4      t%R# )é    N)ÚOrderedDict)ÚGPUÚBaseMetricsÚ	GPUDeviceÚPcieÚ_run)Úconfigc                   ó   € ] tR t^tRtR# )ÚNvidiaGPUMetrics© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    ÚR/home/luca/screen-checking/.venv/lib/python3.14/site-packages/device_smi/nvidia.pyr   r      s   † Ûr   r   c                   óh   € ] tR t^tR]P
                  3R]P
                  3R]P
                  3.tRtR# )Ú_nvmlMemory_tÚtotalÚfreeÚusedr   N)r   r   r   r   ÚctypesÚc_ulonglongÚ_fields_r   r   r   r   r   r      s3   † à	�&×$Ñ$Ð%Ø	�×#Ñ#Ð$Ø	�×#Ñ#Ð$ð„Hr   r   c                   óN   € ] tR t^%tR]P
                  3R]P
                  3.tRtR# )Ú_nvmlUtilization_tÚgpuÚmemoryr   N)r   r   r   r   r   Úc_uintr   r   r   r   r   r   r   %   s!   † à	�—‘ÐØ	�6—=‘=Ð!ð„Hr   r   c            	       óì   € ] tR t^,tR]P
                  ^,          3R]P                  3R]P                  3R]P                  3R]P                  3R]P                  3R]P
                  ^ ,          3.tRtR	# )
Ú_nvmlPciInfo_v3_tÚbusIdLegacyÚdomainÚbusÚdeviceÚpciDeviceIdÚpciSubSystemIdÚbusIdr   N)	r   r   r   r   r   Úc_charr    r   r   r   r   r   r"   r"   ,   sg   † à	˜Ÿ™¨Õ*Ð+Ø	�6—=‘=Ð!Ø	�—‘ÐØ	�6—=‘=Ð!Ø	˜Ÿ™Ð&Ø	˜6Ÿ=™=Ð)Ø	�&—-‘- "Õ$Ð%ð„Hr   r"   c                   óÈ   € ] tR t^8tRtR]P                  ^,          3R]P                  3R]P                  3R]P                  3R]P                  3R]P                  3.tRt	R	# )
Ú_nvmlPciInfo_v2_tz@Legacy PCI info ABI used by both the v2 and unversioned symbols.r)   r$   r%   r&   r'   r(   r   N)
r   r   r   r   Ú__doc__r   r*   r    r   r   r   r   r   r,   r,   8   s[   † ÙJð 
�&—-‘- "Õ$Ð%Ø	�6—=‘=Ð!Ø	�—‘ÐØ	�6—=‘=Ð!Ø	˜Ÿ™Ð&Ø	˜6Ÿ=™=Ð)ð„Hr   r,   c                  óV  € \         P                  ! 4       p V R 8X  d   . RO# V R8X  d�   \        P                  P	                  \        P
                  P                  RR4      RR4      \        P                  P	                  \        P
                  P                  RR4      RR	R4      R.# R
.# )ÚLinuxÚWindowsÚ
SYSTEMROOTz
C:\WindowsÚSystem32znvml.dllÚProgramW6432zC:\Program FileszNVIDIA CorporationÚNVSMIzlibnvidia-ml.dylib)z"/usr/lib/wsl/lib/libnvidia-ml.so.1z+/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1z)/usr/lib/x86_64-linux-gnu/libnvidia-ml.soz/usr/lib64/libnvidia-ml.so.1z/usr/lib64/libnvidia-ml.sozlibnvidia-ml.so.1zlibnvidia-ml.so)ÚplatformÚsystemÚosÚpathÚjoinÚenvironÚget)r6   s    r   Ú_nvml_library_candidatesr<   E   s˜   € Ü�_Š_Ó€FØ�Ôò
ð 	
ð �Ôä�G‰G�L‰LÜ—
‘
—‘˜|¨]Ó;¸ZÈóô �G‰G�L‰LÜ—
‘
—‘˜~Ð/BÓCØ$ØØó	ð ð
ð 	
ð !Ð!Ð!r   c                  ó  € \         P                  P                  R 4      p V '       d   V .M. pVP                  \	        4       4       V F$  pV'       g   K   \         P
                  ! V4      u # 	  R#   \         d     K8  i ; i)z	nvidia-mlN)r   ÚutilÚfind_libraryÚextendr<   ÚCDLLÚOSError)Úlib_pathÚ
candidatesr8   s      r   Ú_load_nvml_libraryrE   a   sp   € Ü�{‰{×'Ñ'¨Ó4€Hß'�(‘¨R€JØ×ÑÔ.Ó0Ô1ÛˆßÙð	Ü—;’;˜tÓ$Ò$ñ	 ñ øô ô 	Úð	ús   ÁA2Á2BÂ Bc                   óð   a a€ ] tR t^ot oRtRt]P                  ! 4       tV 3R lt	R t
]V3R lR l4       tR tR tR	 tR
 tR tR tV3R lR ltR tR tR tR tR tR tR tR tR tR tRtVtV ;t # )Ú_NVMLzCLightweight ctypes binding to the NVIDIA Management Library (NVML).Nc                ó^  <€ V P                   ;_uu_ 4        V P                  fY   \        SV `  V 4      V n        RV P                  n        RV P                  n        R V P                  n        RV P                  n        R R R 4       V P                  #   + '       g   i     T P                  # ; i)NF)Ú_lockÚ	_instanceÚsuperÚ__new__Ú_initializedÚ
_availableÚ_libÚ_shutdown_registered)ÚclsÚ	__class__s   &€r   rL   Ú_NVML.__new__u   s{   ø€ Ø�Y�Y‹YØ�}‰}Ò$Ü %¡¡°Ó 4�”Ø-2�—‘Ô*Ø+0�—‘Ô(Ø%)�—‘Ô"Ø5:�—‘Ô2÷ ð �}‰}Ð÷ ŽYð �}‰}Ðús   –A'BÂB,	c                ó\  € V P                   ;_uu_ 4        V P                  '       d    R R R 4       R # \        4       pVf   RV n         R R R 4       R # Wn         V P	                  4        V P                  4       pRV n        V^ 8H  V n        V P                  '       d9   ^ R IpV P                  '       g#   VP                  V P                  4       RV n        R R R 4       R #   \        \        \        3 d#   p\        P                  RT4       Rp R p?L˜R p?ii ; i  + '       g   i     R # ; i)NTzNVML initialization failed: %séÿÿÿÿ)rI   rM   rE   rO   Ú_bind_functionsÚ_initrB   ÚAttributeErrorÚRuntimeErrorÚloggerÚdebugrN   ÚatexitrP   ÚregisterÚ	_shutdown)ÚselfÚlibÚcodeÚexcr\   s   &    r   Ú__init__Ú_NVML.__init__   sè   € Ø�Z�Z‹ZØ× × Ð Ø÷ ‰Zô %Ó&ˆCØŠ{Ø$(�Ô!Ø÷ ‰Zð ŒIðØ×$Ñ$Ô&Ø—z‘z“|�ð !%ˆDÔØ" a™iˆDŒOØ��ˆÛà×0×0Ð0Ø—O‘O D§N¡NÔ3Ø04�DÔ-÷+ ‰Zøô œ^¬\Ð:ô Ü—‘Ð=¸sÔCØ•ûðú÷ �ZˆZúsL   •D³DÁDÁ CÁ:"DÂDÂ3"DÃDÃ5DÄDÄDÄDÄD+	c                ó    <€ V ^8„  d   QhRS[ /# )é   Úreturn)Úbool)ÚformatÚ__classdict__s   "€r   Ú__annotate__Ú_NVML.__annotate__˜   s   ø€ ÷ ñ ™4ñ r   c                ó   € V P                   # ©N)rN   ©r_   s   &r   Ú	availableÚ_NVML.available—   s   € à�‰Ðr   c                ó¦
  € / R . \         P                  3bR. \         P                  3bR. \         P                  3bR\         P                  .\         P                  3bR\         P                  \         P                  .\         P                  3bR\         P                  ! \         P                  4      .\         P                  3bR\         P                  ! \         P                  4      .\         P                  3bR\         P                  \         P                  ! \         P
                  4      .\         P                  3bR\         P                  \         P                  ! \         P
                  4      .\         P                  3bR	\         P                  \         P                  ! \         P
                  4      .\         P                  3bR
\         P                  \         P                  ! \         P
                  4      .\         P                  3bR\         P                  \         P                  ! \         P
                  4      .\         P                  3bR\         P
                  \         P                  \         P                  .\         P                  3bR\         P
                  \         P                  ! \        4      .\         P                  3bR\         P
                  \         P                  ! \        4      .\         P                  3bR\         P
                  \         P                  ! \        4      .\         P                  3bR\         P
                  \         P                  ! \         P                  4      .\         P                  3bR\         P
                  \         P                  ! \         P                  4      .\         P                  3R\         P
                  \         P                  ! \        4      .\         P                  3R\         P
                  \         P                  ! \        4      .\         P                  3R\         P
                  \         P                  \         P                  .\         P                  3R\         P
                  \         P                  ! \         P                  4      \         P                  ! \         P                  4      .\         P                  3/CpVP                  4        F@  w  pw  r4\        V P                  VR4      pVe    W5n        WEn        \!        V RV 2V4       KB  	  R#   \         d    Rp L%i ; i)ÚnvmlInit_v2ÚnvmlInitÚnvmlShutdownÚnvmlErrorStringÚnvmlSystemGetDriverVersionÚnvmlDeviceGetCount_v2ÚnvmlDeviceGetCountÚnvmlDeviceGetHandleByIndex_v2ÚnvmlDeviceGetHandleByIndexÚnvmlDeviceGetHandleByUUIDÚ nvmlDeviceGetHandleByPciBusId_v2ÚnvmlDeviceGetHandleByPciBusIdÚnvmlDeviceGetNameÚnvmlDeviceGetPciInfo_v3ÚnvmlDeviceGetPciInfo_v2ÚnvmlDeviceGetPciInfoÚ"nvmlDeviceGetMaxPcieLinkGenerationÚ#nvmlDeviceGetCurrPcieLinkGenerationÚnvmlDeviceGetMemoryInfoÚnvmlDeviceGetUtilizationRatesÚnvmlDeviceGetVbiosVersionÚ"nvmlDeviceGetCudaComputeCapabilityNÚ_)r   Úc_intÚc_char_pr    ÚPOINTERÚc_void_pr"   r,   r   r   ÚitemsÚgetattrrO   ÚargtypesÚrestyperX   Úsetattr)r_   ÚspecÚnamer�   r‘   Úfns   &     r   rV   Ú_NVML._bind_functions›   sÿ  € ðH
Ø˜B¤§¡Ð-ðH
à˜œVŸ\™\Ð*ðH
ð ˜R¤§¡Ð.ðH
ð ¤§¡ ´·±Ð@ð	H
ð
 )¬F¯O©O¼V¿]¹]Ð+KÌVÏ\É\Ð*ZðH
ð $¤v§~¢~´f·m±mÓ'DÐ&EÄvÇ|Á|Ð%TðH
ð !¤F§N¢N´6·=±=Ó$AÐ#BÄFÇLÁLÐ"QðH
ð ,Ü—‘¤§¢¬v¯©Ó ?Ð@Ü—‘ð.ðH
ð )Ü—‘¤§¢¬v¯©Ó ?Ð@Ü—‘ð+ðH
ð  (Ü—‘¤&§.¢.´·±Ó"AÐBÜ—‘ð*ð!H
ð( /Ü—‘¤&§.¢.´·±Ó"AÐBÜ—‘ð1ð)H
ð0 ,Ü—‘¤&§.¢.´·±Ó"AÐBÜ—‘ð.ð1H
ð8  Ü—‘¤&§/¡/´6·=±=ÐAÜ—‘ð"ð9H
ð@ &Ü—‘¤&§.¢.Ô1BÓ"CÐDÜ—‘ð(ðAH
ðH &Ü—‘¤&§.¢.Ô1BÓ"CÐDÜ—‘ð(ðIH
ðP #Ü—‘¤&§.¢.Ô1BÓ"CÐDÜ—‘ð%ðQH
ðX 1Ü—‘¤&§.¢.´·±Ó"?Ð@Ü—‘ð3ðYH
ð` 2Ü—‘¤&§.¢.´·±Ó"?Ð@Ü—‘ð4ð &Ü—‘¤&§.¢.´Ó"?Ð@Ü—‘ð(ð ,Ü—‘¤&§.¢.Ô1CÓ"DÐEÜ—‘ð.ð (Ü—‘¤&§/¡/´6·=±=ÐAÜ—‘ð*ð 1ä—O‘OÜ—N’N¤6§<¡<Ó0Ü—N’N¤6§<¡<Ó0ðô
 —‘ð3ñAH
ˆðR *.¯©®Ñ%ˆDÑ%�8Ü˜Ÿ™ D¨$Ó/ˆBØŠ~ðØ"*”KØ!(”Jô �D˜A˜d˜V˜* bÖ)ó *6øô &ô Ø’Bðús   ÔU Õ UÕUc                ó(   € V P                  R R.4      # )rs   rt   )Ú_callro   s   &r   rW   Ú_NVML._initï   s   € Ø�z‰z˜=¨*Ð5Ó6Ð6r   c                ó‚  € V P                   ;_uu_ 4        V P                  '       d   V P                  f    R R R 4       R # RV n         V P                  V P	                  R.4      4       R R R 4       R #   \
        \        \        3 d!   p\        P                  RT4        R p?L;R p?ii ; i  + '       g   i     R # ; i)NFru   zNVML shutdown failed: %s)
rI   rN   rO   Ú_checkr˜   rB   rY   rX   rZ   r[   ©r_   rb   s   & r   r^   Ú_NVML._shutdownò   s‰   € Ø�Z�Z‹ZØ—?—?�? d§i¡iÒ&7Ø÷ ‰Zð $ˆDŒOð>Ø—‘˜DŸJ™J¨Ð'7Ó8Ô9÷ ‰Zøô œ\¬>Ð:ô >Ü—‘Ð7¸×=Ñ=ûð>ú÷ �ZˆZús5   •"B-ÁB-Á	!A4Á4B*Â
B%Â B-Â%B*Â*B-Â-B>	c                ó  € V^ 8X  d   R# RpV P                   e,    V P                  V4      pV'       d   VP                  R4      p\        RV RV 24      h  \        \        3 d!   p\        P                  RT4        Rp?L=Rp?ii ; i)r   NzUnknown NVML errorúutf-8z&Failed to decode NVML error string: %szNVML error z: )Ú_nvmlErrorStringÚdecoderX   ÚUnicodeDecodeErrorrZ   r[   rY   )r_   ra   ÚmsgÚrawrb   s   &&   r   r›   Ú_NVML._checkü   sŠ   € Ø�1Œ9ÙØ"ˆØ× Ñ Ò,ðLØ×+Ñ+¨DÓ1�ßØŸ*™* WÓ-�Cô ˜[¨¨¨b°°Ð6Ó7Ð7øô #Ô$6Ð7ô LÜ—‘ÐEÀs×KÑKûðLús   ›A ´A ÁBÁ'BÂBc                ój   € V F  p\        V R V 2R4      pVf   K  V! V!  u # 	  \        RV R24      h)r‰   NzNVML functions z not available)r�   rY   )r_   ÚnamesÚargsr”   r•   s   &&*  r   r˜   Ú_NVML._call	  sE   € ÛˆDÜ˜  4 &˜z¨4Ó0ˆBØŒ~Ù˜4‘yÒ ñ ô ˜_¨U¨G°>ÐBÓCÐCr   c                óì   € V P                   '       g   \        R 4      h\        P                  ! 4       pV P	                  V P                  RR.\        P                  ! V4      4      4       VP                  # )úNVML is not availablerx   ry   )rN   rY   r   r    r›   r˜   ÚbyrefÚvalue)r_   Úcounts   & r   Údevice_countÚ_NVML.device_count  sW   € Ø��ˆÜÐ6Ó7Ð7Ü—’“ˆØ�‰�D—J‘JÐ 7Ð9MÐNÔPV×P\ÒP\Ð]bÓPcÓdÔeØ�{‰{Ðr   c                ó    <€ V ^8„  d   QhRS[ /# )rf   Úgpu_id)Ústr)ri   rj   s   "€r   rk   rl     s   ø€ ÷ (ñ (¡Cñ (r   c           	     ó  € V P                   '       g   \        R 4      h\        P                  ! 4       pVP	                  4       pVP                  4       '       dD   V P                  V P                  RR.\        V4      \        P                  ! V4      4      4       V# VP                  R4      '       dI   V P                  V P                  R.VP                  R4      \        P                  ! V4      4      4       V# RV9   dJ   V P                  V P                  RR.VP                  R4      \        P                  ! V4      4      4       V# V P                  V P                  RR.\        V4      \        P                  ! V4      4      4       V# )	r«   rz   r{   r|   rŸ   Ú:r}   r~   )zGPU-zMIG-)rN   rY   r   r�   ÚstripÚisdigitr›   r˜   Úintr¬   Ú
startswithÚencode)r_   r²   Úhandles   && r   Údevice_handleÚ_NVML.device_handle  sR  € Ø��ˆÜÐ6Ó7Ð7Ü—’Ó"ˆØ—‘“ˆØ�>‰>×ÒØ�K‰KØ—
‘
Ø4Ð6RÐSÜ˜“KÜ—L’L Ó(óôðD ˆð7 ×ÑÐ/×0Ò0Ø�K‰KØ—
‘
Ø0Ð1Ø—M‘M 'Ó*Ü—L’L Ó(óôð4 ˆð' �FŒ]Ø�K‰KØ—
‘
à:Ø7ðð —M‘M 'Ó*Ü—L’L Ó(óô	ð$ ˆð �K‰KØ—
‘
Ø4Ð6RÐSÜ˜“KÜ—L’L Ó(óôð ˆr   c                óÆ   € \         P                  ! ^`4      pV P                  V P                  R.W^`4      4       VP                  P                  R4      P                  4       # )é`   r   rŸ   ©r   Úcreate_string_bufferr›   r˜   r­   r¡   r¶   ©r_   r»   Úbufs   && r   Údevice_nameÚ_NVML.device_nameA  sM   € Ü×)Ò)¨"Ó-ˆØ�‰�D—J‘JÐ 3Ð4°fÀ2ÓFÔGØ�y‰y×Ñ Ó(×.Ñ.Ó0Ð0r   c                óŒ  € R \         3R\        3R\        33p. pV EF  w  rE\        V RV 2R4      pVf   K  VP                  V4       V! 4       pV P	                  V.V\
        P                  ! V4      4      pV\        9   d   Ki  V P                  V4       VP                  P                  R4      P                  4       p	V	'       g@   \        V\         4      '       d*   VP                  P                  R4      P                  4       p	\        P                  ! RV	4      '       g   \!        RV	: 24      hV	u # 	  \!        RV 24      h)	r€   r�   r‚   r‰   NrŸ   z7^[0-9a-fA-F]{4,8}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}\.[0-9]$zInvalid NVML PCI bus id: z%NVML PCI info functions unavailable: )r"   r,   r�   Úappendr˜   r   r¬   Ú_NVML_COMPATIBILITY_ERRORSr›   r)   r¡   r¶   Ú
isinstancer#   ÚreÚmatchrY   )
r_   r»   ÚattemptsÚ	attemptedr”   Ú	info_typer•   Úinfora   Úbus_ids
   &&        r   Úpci_infoÚ_NVML.pci_infoF  s/  € à&Ô(9Ð:Ø&Ô(9Ð:Ø#Ô%6Ð7ð
ˆð
 ˆ	Ü'‰OˆDÜ˜  4 &˜z¨4Ó0ˆBØŠzÙØ×Ñ˜TÔ"Ù“;ˆDØ—:‘:˜t˜f f¬f¯lªl¸4Ó.@ÓAˆDØÔ1Ô1ÙØ�K‰K˜ÔØ—Z‘Z×&Ñ& wÓ/×5Ñ5Ó7ˆFßœj¨Ô/@×AÒAØ×)Ñ)×0Ñ0°Ó9×?Ñ?ÓA�Ü—8’8ØJØ÷ò ô #Ð%>¸v¹jÐ#IÓJÐJØŠMñ%  (ô& ÐBÀ9À+ÐNÓOÐOr   c           	     ó²   € \         P                  ! 4       pV P                  V P                  R .V\         P                  ! V4      4      4       VP
                  # )rƒ   ©r   r    r›   r˜   r¬   r­   ©r_   r»   Úgens   && r   Úmax_pcie_generationÚ_NVML.max_pcie_generationb  sD   € Ü�mŠm‹oˆØ�‰Ø�J‰JØ5Ð6¸ÄÇÂÈSÓ@Qóô	
ð
 �y‰yÐr   c           	     ó²   € \         P                  ! 4       pV P                  V P                  R .V\         P                  ! V4      4      4       VP
                  # )r„   rÔ   rÕ   s   && r   Úcurrent_pcie_generationÚ_NVML.current_pcie_generationk  sD   € Ü�mŠm‹oˆØ�‰Ø�J‰JØ6Ð7¸ÄÇÂÈcÓARóô	
ð
 �y‰yÐr   c           	     óœ   € \        4       pV P                  V P                  R .V\        P                  ! V4      4      4       VP
                  # ©r…   )r   r›   r˜   r   r¬   r   ©r_   r»   Úmems   && r   Úmemory_totalÚ_NVML.memory_totalt  s:   € Ü‹oˆØ�‰�D—J‘JÐ 9Ð:¸FÄFÇLÂLÐQTÓDUÓVÔWØ�y‰yÐr   c           	     óœ   € \        4       pV P                  V P                  R .V\        P                  ! V4      4      4       VP
                  # rÝ   )r   r›   r˜   r   r¬   r   rÞ   s   && r   Úmemory_usedÚ_NVML.memory_usedy  s9   € Ü‹oˆØ�‰�D—J‘JÐ 9Ð:¸FÄFÇLÂLÐQTÓDUÓVÔWØ�x‰xˆr   c           	     ó®   € \        4       pV P                  V P                  R .V\        P                  ! V4      4      4       \        VP                  4      # )r†   )r   r›   r˜   r   r¬   Úfloatr   )r_   r»   r>   s   && r   Úutilization_gpuÚ_NVML.utilization_gpu~  sC   € Ü!Ó#ˆØ�‰Ø�J‰JÐ7Ð8¸&Ä&Ç,Â,ÈtÓBTÓUô	
ô �T—X‘X‹Ðr   c                óÆ   € \         P                  ! ^P4      pV P                  V P                  R.V^P4      4       VP                  P                  R4      P                  4       # )éP   rw   rŸ   rÀ   )r_   rÃ   s   & r   Údriver_versionÚ_NVML.driver_version…  sM   € Ü×)Ò)¨"Ó-ˆØ�‰�D—J‘JÐ <Ð=¸sÀBÓGÔHØ�y‰y×Ñ Ó(×.Ñ.Ó0Ð0r   c                óÆ   € \         P                  ! ^ 4      pV P                  V P                  R.W^ 4      4       VP                  P                  R4      P                  4       # )é    r‡   rŸ   rÀ   rÂ   s   && r   Úvbios_versionÚ_NVML.vbios_versionŠ  sM   € Ü×)Ò)¨"Ó-ˆØ�‰�D—J‘JÐ ;Ð<¸fÈ2ÓNÔOØ�y‰y×Ñ Ó(×.Ñ.Ó0Ð0r   c           
     ó$  € \         P                  ! 4       p\         P                  ! 4       pV P                  V P                  R .V\         P                  ! V4      \         P                  ! V4      4      4       VP
                   RVP
                   2# )rˆ   Ú.)r   rŠ   r›   r˜   r¬   r­   )r_   r»   ÚmajorÚminors   &&  r   Úcompute_capabilityÚ_NVML.compute_capability�  sl   € Ü—’“ˆÜ—’“ˆØ�‰Ø�J‰JØ5Ð6ØÜ—’˜UÓ#Ü—’˜UÓ#ó	ô	
ð —+‘+�˜a §¡˜}Ð-Ð-r   )rN   rM   rO   rP   )!r   r   r   r   r-   rJ   Ú	threadingÚLockrI   rL   rc   Úpropertyrp   rV   rW   r^   r›   r˜   r¯   r¼   rÄ   rÑ   r×   rÚ   rà   rã   rç   rë   rï   rõ   r   Ú__classdictcell__Ú__classcell__©rR   rj   s   @@r   rG   rG   o   s›   ù‡ € ÙMà€IØ�NŠNÓ€Eõò5ð0 ÷ó ðòR*òh7ò>ò8òDò÷(ð (òT1ò
Pò8òòò
ò
ò1ò
1÷
.ò .r   rG   c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )Ú_NvidiaSmiCachei   zæThread-safe LRU cache for ``nvidia-smi`` output with a per-entry TTL.

All reads and writes to the shared ``OrderedDict`` are serialized by a
``threading.Lock``, so the cache is safe to use in free-threaded (GIL=0)
Python builds.
c                óX   € \        4       V n        \        P                  ! 4       V n        R # rn   )r   Ú_cacher÷   rø   rI   ro   s   &r   rc   Ú_NvidiaSmiCache.__init__¨  s   € Ü!“mˆŒÜ—^’^Ó%ˆŽ
r   c                óô  € V P                   ;_uu_ 4        \        P                  pR R R 4       X^ 8X  d   V! 4       # V P                   ;_uu_ 4        \        P                  ! 4       pWP
                  9   dW   V P
                  V,          w  rVWE,
          V8  d(   V P
                  P                  V4       VuuR R R 4       # V P
                  V V! 4       pWF3V P
                  V&   V P
                  P                  V4       \        P                  p\        V P
                  4      V8”  d   V P
                  P                  RR7       K8  VuuR R R 4       #   + '       g   i     EL5; i  + '       g   i     R # ; i)NF)Úlast)
rI   r	   Únvidia_smi_cache_ttlÚtimeÚ	monotonicr   Úmove_to_endÚnvidia_smi_cache_maxsizeÚlenÚpopitem)r_   ÚkeyÚfetchÚttlÚnowÚtsr­   Úmaxsizes   &&&     r   Ú__call__Ú_NvidiaSmiCache.__call__¬  s  € Ø�Z�Z‹ZÜ×-Ñ-ˆC÷ à�!Œ8Ù“7ˆNà�Z�Z‹ZÜ—.’.Ó"ˆCØ—k‘kÔ!Ø ŸK™K¨Õ,‘	�Ø•8˜c”>Ø—K‘K×+Ñ+¨CÔ0Ø ÷ ŠZð —K‘K Ð$Ù“GˆEØ #˜|ˆD�K‰K˜ÑØ�K‰K×#Ñ# CÔ(Ü×5Ñ5ˆGÜ�d—k‘kÓ" WÔ,Ø—‘×#Ñ#¨Ð#Ö/Ø÷ ŠZ÷ �ZˆZú÷
 �ZˆZús   •EÁA$E&Â?BE&ÅE#	Å&E7	)r   rI   N)	r   r   r   r   r-   rc   r  r   rú   )rj   s   @r   rþ   rþ      s   ø‡ € ñò&÷ð r   rþ   c                óH   a aa€ \        S 4      SS3p\        VV VV3R l4      # )zDRun ``nvidia-smi`` at most once per TTL; cache keyed by the command.c                  ó    <€ \        S SSR 7      # ))Ú
line_startÚ	seperator)r   )r¨   r  r  s   €€€r   Ú<lambda>Ú!_run_nvidia_smi.<locals>.<lambda>Ê  s   ø€ ¬$¨tÀ
ÐV_Õ*`r   )ÚtupleÚ_nvidia_smi_cache)r¨   r  r  r  s   fff r   Ú_run_nvidia_smir  Æ  s#   ú€ ô �‹;˜
 IÐ
.€CÜ˜SÖ"`ÓaÐar   c                   ój   a a€ ] tR tRt oRtV 3R ltR tR t]R 4       t	R t
R tR	 tR
 tRtVtV ;t# )ÚNvidiaDeviceiÍ  Fc                óB  <€ \         SV `  W4       V P                  4       V n        \        P
                  '       d    V P                  V4       R # V P                  V4       R #   \        \        \        \        3 d!   p\        P                  RT4        R p?LIR p?ii ; i)NzANVML device initialization failed, falling back to nvidia-smi: %s)rK   rc   Ú_get_gpu_idr²   Ú_nvmlrp   Ú_init_from_nvmlrY   Ú
ValueErrorÚ
IndexErrorrX   rZ   r[   Ú_init_from_nvidia_smi)r_   rQ   Úindexrb   rR   s   &&& €r   rc   ÚNvidiaDevice.__init__Ð  s€   ø€ Ü‰Ñ˜Ô$Ø×&Ñ&Ó(ˆŒä�?�?ˆ?ðgØ×$Ñ$ SÔ)Ùð 	×"Ñ" 3Ö'øô !¤*¬j¼.ÐIô gÜ—‘Ð`Ðbe×fÑfûðgús   ½A# Á#BÁ>BÂBc                ó  € \         P                  '       d    \         P                  4       pM% \        \        RR.4      P                  4       4      p\        P                  P                  RR4      pVP                  4       '       d/   VP                  R4       Uu. uF  qDP                  4       NK  	  upM. p\         ;QJ d    R V 4       F  '       g   K   R	M	  R
M! R V 4       4      '       d   \        R4      hV^ 8”  dB   \        P                  P                  RR4      R8w  d   \"        P$                  ! R\&        ^4       V'       d-   \        V4      V P(                  8”  d   WPP(                  ,          # \+        V P(                  4      #   \        \        \
        3 d$   p\        P                  R T4       ^ p Rp?ELpRp?ii ; i  \        \        \
        3 d$   p\        P                  RT4       ^ p Rp?EL¬Rp?ii ; iu upi )z#Failed to get NVML device count: %sNú
nvidia-smiz--list-gpuszFailed to list NVIDIA GPUs: %sÚCUDA_VISIBLE_DEVICESÚ Ú,c              3   ó.   "  € T F  q'       * x € K  	  R # 5irn   r   )Ú.0Úcudas   & r   Ú	<genexpr>Ú+NvidiaDevice._get_gpu_id.<locals>.<genexpr>í  s   é € Ð.¡I˜D�x‰x£Iùs   ‚TFz3CUDA_VISIBLE_DEVICES contains an empty device entryÚCUDA_DEVICE_ORDERÚ
PCI_BUS_IDz~Detected different devices in the system. Please make sure to set `CUDA_DEVICE_ORDER=PCI_BUS_ID` to avoid unexpected behavior.)r   rp   r¯   rY   rB   r"  rZ   r[   r	  r  Ú
splitlinesr7   r:   r;   r¶   ÚsplitÚanyÚwarningsÚwarnÚRuntimeWarningr%  r³   )r_   Ú	gpu_countrb   Úcudasr.  Ú	cuda_lists   &     r   r  ÚNvidiaDevice._get_gpu_idÝ  sw  € Ü�?�?ˆ?ðÜ!×.Ñ.Ó0‘	ð
Ü¤°¸}Ð0MÓ N× YÑ YÓ [Ó\�	ô
 —
‘
—‘Ð5°rÓ:ˆØCHÇ;Á;Ç=Â=¨e¯k©k¸#Ô.>Ó?Ñ.> d—Z‘Z–\Ñ.>Ò?ÐVXˆ	ß‹3Ñ.¡IÓ.�3�3Š3Ñ.¡IÓ.×.Ò.ÜÐRÓSÐSØ�qŒ=œRŸZ™ZŸ^™^Ð,?ÀÓDÈÔTÜ�MŠMð QÜØô÷
 œ˜Y›¨$¯*©*Ô4ØŸZ™ZÕ(Ð(ä�t—z‘z“?Ð"øô/ !¤'¬:Ð6ô Ü—‘ÐBÀCÔHØ–	ûðûô !¤'¬:Ð6ô Ü—‘Ð=¸sÔCØ–	ûðüò
 @s4   ˜F ®$G
 ÂHÆGÆ$GÇGÇ
HÇ G>Ç>Hc                ó¬  € \         P                  V P                  4      p\         P                  V4      p\         P	                  V4      pV P                  \         P                  R 4      pV P                  \         P                  R V4      pV P                  \         P                  RV4      pV P                  \         P                  RV4      pV P                  \         P                  RV4      p	V P                  \         P                  RV4      p
VP                  4       P                  R4      '       d   V\        R4      R pVP                  4       P                  4       Vn        \#        V4      Vn        RVn        V'       d   V.M. Vn        RVn        RW‰V
39  d&   \+        \#        V	4      \#        V
4      VR7      Vn        \-        WVR7      Vn        R# )r*  NÚnvidia©rÖ   ÚspeedÚid©ÚdriverÚfirmware)r   r¼   r²   rÄ   rà   Ú_optional_nvmlrë   rï   rõ   rÑ   r×   rÚ   Úlowerr¹   r	  r¶   Úmodelr¸   ÚvendorÚfeaturesÚpcier   r   r   )r_   rQ   r»   rG  Útotal_memoryrC  rD  Úcompute_capÚ
pci_bus_idÚpcie_gen_maxÚpcie_gen_currents   &&         r   r!  ÚNvidiaDevice._init_from_nvmlú  ss  € Ü×$Ñ$ T§[¡[Ó1ˆä×!Ñ! &Ó)ˆÜ×)Ñ)¨&Ó1ˆØ×$Ñ$¤U×%9Ñ%9¸2Ó>ˆØ×&Ñ&¤u×':Ñ':¸BÀÓGˆØ×)Ñ)¬%×*BÑ*BÀDÈ&ÓQˆØ×(Ñ(¬¯©¸¸vÓFˆ
Ø×*Ñ*¬5×+DÑ+DÀdÈFÓSˆØ×.Ñ.Ü×)Ñ)¨4°ó
Ðð �;‰;‹=×#Ñ# H×-Ò-Øœ#˜h›-˜.Ð)ˆEà—K‘K“M×'Ñ'Ó)ˆŒ	Ü˜|Ó,ˆÔØˆŒ
ß(3˜‘}¸ˆŒØˆŒØ˜
Ð2BÐCÔCÜÜ˜Ó%¬SÐ1AÓ-BÀzôˆCŒHô ˜VÔ7ˆŽr   c                ó�   €  V ! V!  #   \         \        \        \        3 d#   p\        P                  R T4       Tu Rp?# Rp?ii ; i)z&Optional NVML metadata unavailable: %sN)rB   rY   r"  rX   rZ   r[   )r  Údefaultr¨   rb   s   &&* r   rE  ÚNvidiaDevice._optional_nvml  s>   € ð	Ù˜$‘<ÐøÜœ¤z´>ÐBô 	Ü�L‰LÐAÀ3ÔGØ�Nûð	ús   ‚ ˆA£A ºAÁ Ac           	     ó$  € R RV P                    2RR.p\        VRR7      pV^ ,          P                  R4      w  rErgr‰\        R RRV P                    .RR7      pR	P                  V U
u. uF3  p
R
V
9   g   K  V
P                  R^4      ^,          P	                  4       NK5  	  up
4      pVP                  4       P                  R4      '       d   V\        R4      R p\        R RRRV P                    .4      P                  R4      pVP	                  4       P                  4       Vn	        \        V4      R,          R,          Vn        RVn        V.Vn        \        \        V4      \        V4      VR7      Vn        \!        W›R7      Vn        R# u up
i )r(  ú--id=z_--query-gpu=name,memory.total,pci.bus_id,pcie.link.gen.max,pcie.link.gen.current,driver_versionú--format=csv,noheader,nounitsÚ
©r¨   r  ú, z-qz-iÚ ÚVBIOSrµ   r>  Nz--format=csvz--query-gpu=compute_capzcompute_cap
é   r?  rB  )r²   r  r4  r9   r¶   rF  r¹   r	  ÚremoveprefixrG  r¸   rà   rH  rI  r   rJ  r   r   )r_   rQ   r¨   ÚresultrG  rK  rM  Úpcie_genÚ
pcie_widthrC  ÚlinerD  rL  s   &&           r   r$  Ú"NvidiaDevice._init_from_nvidia_smi  sg  € àØ�D—K‘K�=Ð!ØmØ+ð	
ˆô ! d°dÔ;ˆàIOÐPQÍÏÉÐY]ÓI^ÑEˆ˜Z°:ä  |°T¸4ÀDÇKÁKÀ=Ð&RÐ^bÔcˆØ—8‘8ÁvÓaÁv¸tÐQXÐ\`ÑQ`Ô:˜TŸZ™Z¨¨QÓ/°Õ2×8Ñ8Ö:ÁvÑaÓbˆà�;‰;‹=×#Ñ# H×-Ò-Øœ#˜h›-˜.Ð)ˆEô ˜\¨>Ð;TÐVZÐ_c×_jÑ_jÐ^kÐmÓnß‰\˜/Ó*ð 	ð
 —K‘K“M×'Ñ'Ó)ˆŒ	Ü˜|Ó,¨tÕ3°dÕ:ˆÔØˆŒ
Ø#�}ˆŒÜœC ›M´°Z³ÀZÔPˆŒÜ˜VÔ7ˆŽùò bs   Á(	FÁ6+Fc                ó¨   € \         P                  V P                  4      p\        \         P	                  V4      ^ \         P                  V4      R7      # )r   ©rã   Úmemory_processÚutilization)r   r¼   r²   r   rã   rç   )r_   r»   s   & r   Ú_metrics_from_nvmlÚNvidiaDevice._metrics_from_nvml<  sB   € Ü×$Ñ$ T§[¡[Ó1ˆÜÜ×)Ñ)¨&Ó1ØÜ×-Ñ-¨fÓ5ô
ð 	
r   c                óÎ   € R RV P                    2RR.p\        VRR7      ^ ,          P                  R4      w  r#\        \	        V4      R,          R,          ^ \        V4      R7      # )	r(  rU  z'--query-gpu=memory.used,utilization.gpurV  rW  rX  rY  r\  rd  )r²   r  r4  r   r¸   ræ   )r_   r¨   Úused_memoryrf  s   &   r   Ú_metrics_from_nvidia_smiÚ%NvidiaDevice._metrics_from_nvidia_smiD  sl   € àØ�D—K‘K�=Ð!Ø5Ø+ð	
ˆô $3¸ÈÔ#MÈaÕ#P×#VÑ#VÐW[Ó#\Ñ ˆäÜ˜KÓ(¨4Õ/°$Õ6ØÜ˜kÓ*ô
ð 	
r   c                ó"  €  \         P                  '       d    V P                  4       # V P                  4       #   \        \        \
        \        3 d!   p\        P                  R T4        Rp?LFRp?ii ; i  \         d    \        R4      hi ; i)z3NVML metrics failed, falling back to nvidia-smi: %sNzcThe 'nvidia-smi' command was not found. Please ensure that the 'nvidia-utils' package is installed.)r   rp   rg  rY   r"  r#  rX   rZ   r[   rk  ÚFileNotFoundErrorrœ   s   & r   ÚmetricsÚNvidiaDevice.metricsS  s†   € ð	Ü��ˆð]Ø×2Ñ2Ó4Ð4ð ×0Ñ0Ó2Ð2øô %¤j´*¼nÐMô ]Ü—L‘LÐ!VÐX[×\Ñ\ûð]ûô !ô 	Ü#Øuóð ð	ús1   ‚A7 ™9 ©A7 ¹A4ÁA/Á*A7 Á/A4Á4A7 Á7B)r²   )r   r   r   r   Úfast_metrics_same_as_slowrc   r  r!  ÚstaticmethodrE  r$  rg  rk  ro  r   rú   rû   rü   s   @@r   r  r  Í  sG   ù‡ € Ø %Ðõ(ò#ò:8ð8 ñó ðò8ò<
ò
÷ò r   r  )NN)&r   Úctypes.utilÚloggingr7   r5   rÊ   r÷   r  r6  Úcollectionsr   Úbaser   r   r   r   r   r	   Ú	getLoggerr   rZ   Ú_NVML_ERROR_NOT_SUPPORTEDÚ_NVML_ERROR_FUNCTION_NOT_FOUNDrÈ   r   Ú	Structurer   r   r"   r,   r<   rE   rG   r   rþ   r  r  r  r   r   r   Ú<module>r{     sô   ðÛ Û Û Û 	Û Û 	Û Û Û Ý #ç 9Õ 9Ý à	×	Ò	˜8Ó	$€àÐ Ø!#Ð àØ"ðÐ ô	�{ô 	ô�F×$Ñ$ô ô˜×)Ñ)ô ô	˜×(Ñ(ô 	ô
˜×(Ñ(ô 
ò"ò8÷k.ñ k.ñ\	 	‹€÷ ñ  ñF $Ó%Ð ôbôR�9ö Rr   