§
    AxÅjÅ>  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ  e¦   «         Z eej                             d	d
¦  «        ¦  «        Z eej                             dd¦  «        ¦  «        Zej                             dd¦  «        Z eej                             dd¦  «        ¦  «        Z eej                             dd¦  «        ¦  «        Zd$d„Zd%d„Zd&d„Zd&d„Zd&d„Zd'd„Zd&d „Zd&d!„Z d&d"„Z!d&d#„Z"dS )(a"  
System resource fitness checks for worker startup validation.

Provides comprehensive checks for:
- Memory availability
- Disk space
- Network connectivity
- CUDA library versions
- GPU compute benchmark

Auto-registers when worker starts, ensuring system readiness before accepting jobs.
é    )ÚannotationsNé   )Úregister_fitness_check)ÚRunPodLoggeré   )Úis_availableÚRUNPOD_MIN_MEMORY_GBz4.0ÚRUNPOD_MIN_DISK_PERCENTz10.0ÚRUNPOD_MIN_CUDA_VERSIONz11.8ÚRUNPOD_NETWORK_CHECK_TIMEOUTÚ5ÚRUNPOD_GPU_BENCHMARK_TIMEOUTÚ2Úversion_stringÚstrÚreturnútuple[int, int]c                ó¼   — t          j        d| ¦  «        }|rDt          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        fS dS )zÌ
    Parse version string to tuple for comparison.

    Args:
        version_string: Version string like "12.2" or "CUDA Version 12.2"

    Returns:
        Tuple of ints like (12, 2) for comparison
    z(\d+)\.(\d+)r   r   )r   r   )ÚreÚsearchÚintÚgroup)r   Úmatchs     ú\C:\Projects\Historical\venv\Lib\site-packages\runpod/serverless/modules/rp_system_fitness.pyÚ_parse_versionr   $   sQ   € õ ŒI�o ~Ñ6Ô6€EØð :Ý�E—K’K ‘N”NÑ#Ô#¥S¨¯ª°Q©¬Ñ%8Ô%8Ð9Ð9Øˆ6ó    údict[str, float]c                 ó„  — 	 ddl } |                      ¦   «         }|j        dz  }|j        dz  }|j        }|||dœS # t
          $ rú 	 t          d¦  «        5 }i }|D ]W}|                     dd¦  «        \  }}	t          |	                     ¦   «         d         ¦  «        || 	                    ¦   «         <   ŒX| 
                    dd¦  «        d	z  }| 
                    d
d¦  «        d	z  }|dk    rdd||z  z
  z  nd}|||dœcddd¦  «         cY S # 1 swxY w Y   Y dS # t          $ r}
t          d|
› �¦  «        |
‚d}
~
ww xY ww xY w)z¦
    Get system memory information.

    Returns:
        Dict with total_gb, available_gb, used_percent

    Raises:
        RuntimeError: If memory check fails
    r   Né   @)Útotal_gbÚavailable_gbÚused_percentz/proc/meminfoú:r   ÚMemTotali   ÚMemAvailableéd   zFailed to read memory info: )ÚpsutilÚvirtual_memoryÚtotalÚ	availableÚpercentÚImportErrorÚopenÚsplitr   ÚstripÚgetÚ	ExceptionÚRuntimeError)r'   Úmemr    r!   r"   ÚfÚ
meminfo_kbÚlineÚkeyÚvalueÚes              r   Ú_get_memory_infor:   5   s   € ð#JØˆˆˆà×#Ò#Ñ%Ô%ˆØ”9 Ñ(ˆØ”}¨Ñ0ˆØ”{ˆð !Ø(Ø(ð
ð 
ð 	
øõ
 ð Jð Jð Jð	JÝ�oÑ&Ô&ð ¨!Ø-/�
Øð Dð D�DØ!%§¢¨C°Ñ!3Ô!3‘J�C˜Ý.1°%·+²+±-´-ÀÔ2BÑ.CÔ.C�J˜sŸyšy™{œ{Ñ+Ð+ð &Ÿ>š>¨*°aÑ8Ô8¸GÑD�Ø)Ÿ~š~¨n¸aÑ@Ô@ÀGÑL�à;CÀaº<¸<�C˜1˜|¨hÑ6Ñ6Ñ7Ð7ÈQð ð
 !)Ø$0Ø$0ðð ðð ð ð ñ ô ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð øõ$ ð 	Jð 	Jð 	JÝÐA¸aÐAÐAÑBÔBÈÐIøøøøð	Jøøøð+JøøøsR   ‚8; »
D?ÁDÁB'DÃ<DÄD?ÄD	ÄDÄD	ÄDÄ
D;Ä#D6Ä6D;Ä;D?ÚNonec                 óÖ   — t          ¦   «         } | d         }| d         }|t          k     rt          d|d›dt          › d�¦  «        ‚t                               d|d›d|d›d	�¦  «         d
S )zo
    Check system memory availability.

    Raises:
        RuntimeError: If insufficient memory available
    r!   r    zInsufficient memory: ú.2fzGB available, zGB requiredzMemory check passed: zGB available (of z	GB total)N)r:   ÚMIN_MEMORY_GBr2   ÚlogÚinfo)Úmem_infor!   r    s      r   Ú_check_memory_availabilityrB   e   s±   € õ  Ñ!Ô!€HØ˜NÔ+€LØ˜
Ô#€Hà•mÒ#Ð#Ýð* LÐDð *ð *Ýð*ð *ð *ñ
ô 
ð 	
õ
 ‡H‚Hð	' Ð?ð 	'ð 	'ØÐ&ð	'ð 	'ð 	'ñô ð ð ð r   c            	     óP  — 	 t          j        d¦  «        } | j        dz  }| j        dz  }|dk    rd||z  z  nd}|t          k     r t          d|d›d|d›d	t          › d
�¦  «        ‚t                               d|d›d|d›d�¦  «         dS # t          $ r t          d¦  «        d‚w xY w)a  
    Check disk space availability on root filesystem.

    In containers, root (/) is typically the only filesystem.
    Requires free space to be at least MIN_DISK_PERCENT% of total disk size.

    Raises:
        RuntimeError: If insufficient disk space
    ú/r   r   r&   zInsufficient disk space: r=   z	GB free (z.1fz%), z
% requiredzDisk space check passed: z% available)z2Could not check disk space: / filesystem not foundN)	ÚshutilÚ
disk_usager)   ÚfreeÚMIN_DISK_PERCENTr2   r?   r@   ÚFileNotFoundError)Úusager    Úfree_gbÚfree_percents       r   Ú_check_disk_spacerM   |   s)  € ðÝÔ! #Ñ&Ô&ˆØ”; 'Ñ*ˆØ”* Ñ(ˆØ5=À²\°\�s˜g¨Ñ0Ñ1Ð1Àqˆð Õ*Ò*Ð*ÝðG¨GÐAð Gð GØ ÐFðGð GÝ*:ðGð Gð Gñô ð õ
 	�Šð/¨Ð=ð /ð /ØÐ.ð/ð /ð /ñ	
ô 	
ð 	
ð 	
ð 	
øõ ð ð ð ÝØ@ñ
ô 
àð	ðøøøs   ‚BB
 Â
B%c            
   ƒ  ó\  K  — d} d}	 t          j        ¦   «         }t          j        t          j        | |¦  «        t
          ¬¦  «        ƒ d{V —†\  }}t          j        ¦   «         |z
  dz  }|                     ¦   «          |                     ¦   «         ƒ d{V —† t           	                    d| › d|d›d	�¦  «         dS # t          j
        $ r  t          d
| › d|› dt
          › d�¦  «        d‚t          $ r t          d| › d|› �¦  «        d‚t          $ r}t          d|› �¦  «        |‚d}~ww xY w)zz
    Check basic network connectivity to 8.8.8.8:53.

    Raises:
        RuntimeError: If network connectivity fails
    z8.8.8.8é5   ©ÚtimeoutNéè  z*Network connectivity passed: Connected to z (ú.0fúms)z3Network connectivity failed: Timeout connecting to r#   zs)z3Network connectivity failed: Connection refused to z#Network connectivity check failed: )ÚtimeÚperf_counterÚasyncioÚwait_forÚopen_connectionÚNETWORK_CHECK_TIMEOUTÚcloseÚwait_closedr?   r@   ÚTimeoutErrorr2   ÚConnectionRefusedErrorr1   )ÚhostÚportÚ
start_timeÚ_ÚwriterÚ
elapsed_msr9   s          r   Ú_check_network_connectivityre   �   sÍ  è è € ð €DØ€DðMÝÔ&Ñ(Ô(ˆ
Ý!Ô*ÝÔ# D¨$Ñ/Ô/Õ9Nð
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
‰	ˆˆ6õ Ô'Ñ)Ô)¨JÑ6¸$Ñ>ˆ
Ø�Š‰ŒˆØ× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"å�ŠØT¸ÐTÐTÀÐTÐTÐTÐTñ	
ô 	
ð 	
ð 	
ð 	
øõ Ôð ð ð Ýð*À$ð *ð *Èð *ð *Ý%ð*ð *ð *ñ
ô 
ð ð	õ "ð ð ð ÝØOÀ$ÐOÐOÈÐOÐOñ
ô 
àð	õ ð Mð Mð MÝÐDÀÐDÐDÑEÔEÈ1ÐLøøøøðMøøøs   ˆB3B= Â=AD+ÄD&Ä&D+ú
str | Nonec               ƒ  óâ  K  — d} 	 t          j        ddt           j        j        t           j        j        ¬¦  «        ƒ d{V —†} t          j        |                      ¦   «         d¬¦  «        ƒ d{V —†\  }}| j        dk    rq|                     dd	¬
¦  «        }|                     d¦  «        D ]D}d| 	                    ¦   «         v sd| 	                    ¦   «         v r| 
                    ¦   «         c S ŒEnk# t          $ r^}| r5| j        €.|                      ¦   «          |                      ¦   «         ƒ d{V —† t                               d|› �¦  «         Y d}~nd}~ww xY wd} 	 t          j        dt           j        j        t           j        j        ¬¦  «        ƒ d{V —†} t          j        |                      ¦   «         d¬¦  «        ƒ d{V —†\  }}| j        dk    r®|                     dd	¬
¦  «        }|                     d¦  «        D ]g}d|v ra|                     d¦  «        }t!          |¦  «        dk    r9|d          
                    ¦   «                              ¦   «         d         }d|› �c S Œht                               d¦  «         nk# t          $ r^}| r5| j        €.|                      ¦   «          |                      ¦   «         ƒ d{V —† t                               d|› �¦  «         Y d}~nd}~ww xY wdS )z³
    Get CUDA version from system.

    Returns:
        Version string like "12.2" or None if not available

    Raises:
        RuntimeError: If CUDA check fails critically
    NÚnvccz	--version)ÚstdoutÚstderré   rP   r   zutf-8Úreplace)Úerrorsú
ÚreleaseÚversionznvcc not available: z
nvidia-smizCUDA Version:r   zCUDA Version: z7nvidia-smi output found but couldn't parse CUDA versionznvidia-smi not available: )rW   Úcreate_subprocess_execÚ
subprocessÚPIPErX   ÚcommunicateÚ
returncodeÚdecoder.   Úlowerr/   r1   ÚkillÚwaitr?   ÚdebugÚlen)Úprocessri   rb   Úoutputr6   r9   ÚpartsÚcuda_versions           r   Ú_get_cuda_versionr€   À   sn  è è € ð €Gð.ÝÔ6ØØÝÔ%Ô*ÝÔ%Ô*ð	
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ "Ô*¨7×+>Ò+>Ñ+@Ô+@È!ÐLÑLÔLÐLÐLÐLÐLÐLÐL‰	ˆ�ØÔ Ò"Ð"Ø—]’] 7°9�]Ñ=Ô=ˆFØŸš TÑ*Ô*ð (ð (�Ø §
¢
¡¤Ð,Ð,°	¸T¿ZºZ¹\¼\Ð0IÐ0IØŸ:š:™<œ<Ð'Ð'Ð'ð 1Jøøåð .ð .ð .Øð 	!�wÔ)Ð1Ø�LŠL‰NŒNˆNØ—,’,‘.”.Ð Ð Ð Ð Ð Ð Ð Ý�	Š	Ð,¨Ð,Ð,Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-øøøøð	.øøøð €Gð4ÝÔ6ØÝÔ%Ô*ÝÔ%Ô*ð
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ
 "Ô*¨7×+>Ò+>Ñ+@Ô+@È!ÐLÑLÔLÐLÐLÐLÐLÐLÐL‰	ˆ�ØÔ Ò"Ð"Ø—]’] 7°9�]Ñ=Ô=ˆFØŸš TÑ*Ô*ð ?ð ?�Ø" dÐ*Ð*Ø ŸJšJ Ñ7Ô7�EÝ˜5‘z”z A’~�~Ø',¨Q¤x§~¢~Ñ'7Ô'7×'=Ò'=Ñ'?Ô'?ÀÔ'B˜Ø>°Ð>Ð>Ð>Ð>Ð>øÝ�IŠIÐOÑPÔPÐPøøÝð 4ð 4ð 4Øð 	!�wÔ)Ð1Ø�LŠL‰NŒNˆNØ—,’,‘.”.Ð Ð Ð Ð Ð Ð Ð Ý�	Š	Ð2¨qÐ2Ð2Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3øøøøð	4øøøð ˆ4s?   †C'C0 Ã.C0 Ã0
EÃ:AEÅEÅD	J É(J Ê
K,ÊAK'Ë'K,c               ƒ  ó¦  K  — t          ¦   «         ƒ d{V —†} | st                               d¦  «         dS t          | ¦  «        }t          t          ¦  «        }||k     r4t          d|d         › d|d         › d|d         › d|d         › d�	¦  «        ‚t                               d	|d         › d|d         › d
|d         › d|d         › d�	¦  «         dS )z„
    Check CUDA library versions meet minimum requirements.

    Raises:
        RuntimeError: If CUDA version is below minimum
    Nz0Could not determine CUDA version, skipping checkzCUDA version too old: r   ú.r   z found, z	 requiredzCUDA version check passed: z (minimum: ú))r€   r?   Úwarnr   ÚMIN_CUDA_VERSIONr2   r@   )Úcuda_version_strr   Úmin_versions      r   Ú_check_cuda_versionsrˆ   ú   s;  è è € õ /Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ðàð Ý�ŠÐCÑDÔDÐDØˆõ "Ð"2Ñ3Ô3€LÝ Õ!1Ñ2Ô2€Kà�kÒ!Ð!Ýð: \°!¤_ð :ð :°|ÀA´ð :ð :Ø˜1Œ~ð:ð :Ø +¨A¤ð:ð :ð :ñ
ô 
ð 	
õ
 ‡H‚Hð	8 l°1¤oð 	8ð 	8¸ÀQ¼ð 	8ð 	8Ø  ”^ð	8ð 	8Ø&1°!¤nð	8ð 	8ð 	8ñô ð ð ð r   c               ƒ  ó˜  K  — t          ¦   «         st                               d¦  «         dS 	 ddl} | j                             ¦   «         st                               d¦  «         dS | j                             ¦   «          | j                             ¦   «          | j                             ¦   «         }|dk    rt          d¦  «        ‚t          |¦  «        D ]–}	 | j                             |¦  «        }|j        dk    rt          d|› d�¦  «        ‚|                      dd	|› �¬
¦  «        }| j                             ¦   «          Œo# t          $ r}t          d|› d|› �¦  «        |‚d}~ww xY wt                               d|› d�¦  «         dS # t           $ r t                               d¦  «         Y n$t          $ r}t          d|› �¦  «        |‚d}~ww xY w	 ddl}|j                             ¦   «                              ¦   «          |j        j                             ¦   «         }|dk    rt          d¦  «        ‚t          |¦  «        D ]—}	 |j                             |¦  «                             ¦   «          |                     d¦  «        }|j                             ¦   «                              ¦   «          Œp# t          $ r}t          d|› d|› �¦  «        |‚d}~ww xY wt                               d|› d�¦  «         dS # t           $ r t                               d¦  «         Y dS t          $ r}t          d|› �¦  «        |‚d}~ww xY w)aW  
    Verify CUDA can be initialized and devices are accessible.

    Tests actual device initialization, memory access, and device properties.
    This catches issues where CUDA appears available but fails at runtime.
    Skips silently on CPU-only workers.

    Raises:
        RuntimeError: If CUDA initialization or device access fails
    z3No GPU detected, skipping CUDA initialization checkNr   z<CUDA not available in PyTorch, skipping initialization checkz@No CUDA devices available despite cuda.is_available() being TruezGPU z reports zero memoryé   zcuda:©ÚdevicezFailed to initialize GPU z: zCUDA initialization passed: z# device(s) initialized successfullyú%PyTorch not available, trying CuPy...zCUDA initialization failed: z"No CUDA devices available via CuPyz with CuPy: z6CuPy not available, skipping CUDA initialization checkz"CUDA initialization check failed: )Úgpu_availabler?   rz   ÚtorchÚcudar   Úreset_peak_memory_statsÚsynchronizeÚdevice_countr2   ÚrangeÚget_device_propertiesÚtotal_memoryÚzerosr1   r@   r,   ÚcupyÚDeviceÚruntimeÚgetDeviceCountÚuse)r�   r“   ÚiÚpropsrb   r9   Úcps          r   Ú_check_cuda_initializationr      sä  è è € õ ‰?Œ?ð Ý�	Š	ÐGÑHÔHÐHØˆð)FØˆˆˆàŒz×&Ò&Ñ(Ô(ð 	Ý�IŠIÐTÑUÔUÐUØˆFð 	Œ
×*Ò*Ñ,Ô,Ð,ØŒ
×ÒÑ Ô Ð ð ”z×.Ò.Ñ0Ô0ˆØ˜1ÒÐÝØRñô ð õ
 �|Ñ$Ô$ð 	Pð 	PˆAðPàœ
×8Ò8¸Ñ;Ô;�ØÔ%¨Ò*Ð*Ý&Ð'E¨aÐ'EÐ'EÐ'EÑFÔFÐFð —K’K ¨[°Q¨[¨[�KÑ9Ô9�Ø”
×&Ò&Ñ(Ô(Ð(Ð(øåð Pð Pð PÝ"Ð#G¸qÐ#GÐ#GÀAÐ#GÐ#GÑHÔHÈaÐOøøøøðPøøøõ 	�ŠØ\¨<Ð\Ð\Ð\ñ	
ô 	
ð 	
ð 	ˆøåð ;ð ;ð ;Ý�	Š	Ð9Ñ:Ô:Ð:Ð:Ð:Ýð Fð Fð FÝÐ=¸!Ð=Ð=Ñ>Ô>ÀAÐEøøøøðFøøøðLØÐÐÐð 	Œ�ŠÑÔ×$Ò$Ñ&Ô&Ð&ð ”w”×5Ò5Ñ7Ô7ˆØ˜1ÒÐÝÐCÑDÔDÐDõ �|Ñ$Ô$ð 		ð 		ˆAðØ”—’˜qÑ!Ô!×%Ò%Ñ'Ô'Ð'à—H’H˜T‘N”N�Ø”—’Ñ Ô ×,Ò,Ñ.Ô.Ð.Ð.øÝð ð ð Ý"ØB°ÐBÐB¸qÐBÐBñô àðøøøøðøøøõ
 	�ŠØ\¨<Ð\Ð\Ð\ñ	
ô 	
ð 	
ð 	ˆøåð Lð Lð LÝ�	Š	ÐJÑKÔKÐKÐKÐKÐKÝð Lð Lð LÝÐCÀÐCÐCÑDÔDÈ!ÐKøøøøðLøøøs�   ®7F Á'A1F ÃA+EÅF Å
E*ÅE%Å%E*Å*!F Æ$GÆ3	GÆ<GÇGÇA3L ÉA,J9Ê8L Ê9
KËKËKË!L Ì$M	Ì(	M	Ì1MÍM	c               ƒ  ó$  K  — t          ¦   «         st                               d¦  «         dS 	 ddl} | j                             ¦   «         st                               d¦  «         dS d}t          j        ¦   «         }|                      ||d¬¦  «        }|                      ||d¬¦  «        }|  	                    ||¦  «         | j         
                    ¦   «          t          j        ¦   «         |z
  dz  }t          dz  }||k    rt          d	|d
›d|d
›d�¦  «        ‚t                               d|d
›d�¦  «         dS # t          $ r t                               d¦  «         Y n=t          $ r ‚ t          $ r'}t                               d|› �¦  «         Y d}~nd}~ww xY w	 ddl}d}t          j        ¦   «         }|j                             ||¦  «        }|j                             ||¦  «        }| 	                    ||¦  «         |j                             ¦   «          
                    ¦   «          t          j        ¦   «         |z
  dz  }t          dz  }||k    rt          d	|d
›d|d
›d�¦  «        ‚t                               d|d
›d�¦  «         dS # t          $ r t                               d¦  «         Y n=t          $ r ‚ t          $ r'}t                               d|› �¦  «         Y d}~nd}~ww xY wt                               d¦  «         dS )a   
    Quick GPU compute benchmark using matrix multiplication.

    Tests basic tensor operations to ensure GPU is functional and responsive.
    Skips silently on CPU-only workers.

    Raises:
        RuntimeError: If GPU compute fails or is too slow
    z/No GPU detected, skipping GPU compute benchmarkNr   z1CUDA not available in PyTorch, skipping benchmarkrŠ   r�   r‹   rR   z+GPU compute too slow: Matrix multiply took rS   z	ms (max: rT   z;GPU compute benchmark passed: Matrix multiply completed in Úmsr�   z$PyTorch GPU benchmark setup failed: z*CuPy not available, skipping GPU benchmarkz!CuPy GPU benchmark setup failed: zHPyTorch/CuPy not available for GPU benchmark, relying on gpu_test binary)rŽ   r?   rz   r�   r�   r   rU   rV   ÚrandnÚmatmulr’   ÚGPU_BENCHMARK_TIMEOUTr2   r@   r,   r1   r„   r˜   Úrandomr™   )	r�   Úsizera   ÚAÚBrd   Úmax_msr9   rŸ   s	            r   Ú_check_gpu_compute_benchmarkr«   v  s¼  è è € õ ‰?Œ?ð Ý�	Š	ÐCÑDÔDÐDØˆð$=ØˆˆˆàŒz×&Ò&Ñ(Ô(ð 	Ý�IŠIÐIÑJÔJÐJØˆFð ˆÝÔ&Ñ(Ô(ˆ
ð �KŠK˜˜d¨6ˆKÑ2Ô2ˆØ�KŠK˜˜d¨6ˆKÑ2Ô2ˆØ�Š�Q˜ÑÔÐØŒ
×ÒÑ Ô Ð åÔ'Ñ)Ô)¨JÑ6¸$Ñ>ˆ
Ý&¨Ñ-ˆà˜ÒÐÝð)¸jÐQð )ð )ØÐ(ð)ð )ð )ñô ð õ
 	�ŠØ\È*Ð\Ð\Ð\Ð\ñ	
ô 	
ð 	
ð 	ˆøåð ;ð ;ð ;Ý�	Š	Ð9Ñ:Ô:Ð:Ð:Ð:Ýð ð ð ØÝð =ð =ð =Ý�ŠÐ;¸Ð;Ð;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<øøøøð=øøøð:ØÐÐÐàˆÝÔ&Ñ(Ô(ˆ
àŒI�OŠO˜D $Ñ'Ô'ˆØŒI�OŠO˜D $Ñ'Ô'ˆØ
�	Š	�!�Q‰ŒˆØ
Œ�ŠÑÔ×$Ò$Ñ&Ô&Ð&åÔ'Ñ)Ô)¨JÑ6¸$Ñ>ˆ
Ý&¨Ñ-ˆà˜ÒÐÝð)¸jÐQð )ð )ØÐ(ð)ð )ð )ñô ð õ
 	�ŠØ\È*Ð\Ð\Ð\Ð\ñ	
ô 	
ð 	
ð 	ˆøåð @ð @ð @Ý�	Š	Ð>Ñ?Ô?Ð?Ð?Ð?Ýð ð ð ØÝð :ð :ð :Ý�ŠÐ8°QÐ8Ð8Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð:øøøõ ‡I‚IØRñô ð ð ð sC   ®7D= Á'CD= Ä=$FÅ#FÅ6FÆFÆ!C0J Ê$K3Ê9K3ËK.Ë.K3c                 óŽ  — t                                d¦  «         t          dd„¦   «         } t          dd„¦   «         }t          dd„¦   «         }t          ¦   «         rOt                                d¦  «         t          dd„¦   «         }t          dd	„¦   «         }t          dd
„¦   «         }dS t                                d¦  «         dS )zÖ
    Auto-register system resource fitness checks.

    Registers memory, disk, and network checks for all workers.
    Registers CUDA version, initialization, and GPU benchmark checks only if GPU is detected.
    z*Registering system resource fitness checksr   r;   c                 ó"   — t          ¦   «          dS )z!System memory availability check.N)rB   © r   r   Ú_memory_checkz2auto_register_system_checks.<locals>._memory_checkÝ  s   € õ 	#Ñ$Ô$Ð$Ð$Ð$r   c                 ó"   — t          ¦   «          dS )zSystem disk space check.N)rM   r®   r   r   Ú_disk_checkz0auto_register_system_checks.<locals>._disk_checkâ  s   € õ 	ÑÔÐÐÐr   c               “  ó2   K  — t          ¦   «         ƒ d{V —† dS )zNetwork connectivity check.N)re   r®   r   r   Ú_network_checkz3auto_register_system_checks.<locals>._network_checkç  s,   è è € õ *Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+r   z5GPU detected, registering GPU-specific fitness checksc               “  ó2   K  — t          ¦   «         ƒ d{V —† dS )zCUDA version check.N)rˆ   r®   r   r   Ú_cuda_version_checkz8auto_register_system_checks.<locals>._cuda_version_checkð  s,   è è € õ 'Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(r   c               “  ó2   K  — t          ¦   «         ƒ d{V —† dS )z!CUDA device initialization check.N)r    r®   r   r   Ú_cuda_init_checkz5auto_register_system_checks.<locals>._cuda_init_checkõ  s,   è è € õ -Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.r   c               “  ó2   K  — t          ¦   «         ƒ d{V —† dS )zGPU compute benchmark check.N)r«   r®   r   r   Ú_benchmark_checkz5auto_register_system_checks.<locals>._benchmark_checkú  s,   è è € õ /Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0r   z5No GPU detected, skipping GPU-specific fitness checksN©r   r;   )r?   rz   r   rŽ   )r¯   r±   r³   rµ   r·   r¹   s         r   Úauto_register_system_checksr»   Ó  s"  € õ ‡I‚IÐ:Ñ;Ô;Ð;õ ð%ð %ð %ñ Ôð%õ ðð ð ñ Ôðõ ð,ð ,ð ,ñ Ôð,õ
 �„ð KÝ�	Š	ÐIÑJÔJÐJå	ð	)ð 	)ð 	)ñ 
 Ô	ð	)õ 
 ð	/ð 	/ð 	/ñ 
 Ô	ð	/õ 
 ð	1ð 	1ð 	1ñ 
 Ô	ð	1ð 	1ð 	1õ 	�	Š	ÐIÑJÔJÐJÐJÐJr   )r   r   r   r   )r   r   rº   )r   rf   )#Ú__doc__Ú
__future__r   rW   Úosr   rE   rU   Ú
rp_fitnessr   Ú	rp_loggerr   Úutils.rp_cudar   rŽ   r?   ÚfloatÚenvironr0   r>   rH   r…   r   rZ   r¥   r   r:   rB   rM   re   r€   rˆ   r    r«   r»   r®   r   r   ú<module>rÄ      s  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€à .Ð .Ð .Ð .Ð .Ð .Ø #Ð #Ð #Ð #Ð #Ð #Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9à€l�n„n€ð ��b”j—n’nÐ%;¸UÑCÔCÑDÔD€Ø�5˜œŸšÐ(AÀ6ÑJÔJÑKÔKÐ Ø”:—>’>Ð";¸VÑDÔDÐ Ø˜˜BœJŸNšNÐ+IÈ3ÑOÔOÑPÔPÐ Ø˜˜BœJŸNšNÐ+IÈ3ÑOÔOÑPÔPÐ ðð ð ð ð"-Jð -Jð -Jð -Jð`ð ð ð ð.ð ð ð ðB Mð  Mð  Mð  MðF7ð 7ð 7ð 7ðtð ð ð ð:\Lð \Lð \Lð \Lð~Zð Zð Zð Zðz,Kð ,Kð ,Kð ,Kð ,Kð ,Kr   