
    FPh$
                     v    d dl 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 defdZd Zd	 Zd
 Zy)    N)Path   )USER_CONFIG_DIR)	TORCH_1_9returnc                      t        j                   t         j                  t         j                        5 } | j                  d       | j	                         d   cddd       S # 1 sw Y   yxY w)z
    Finds a free port on localhost.

    It is useful in single-node training when we don't want to connect to a real main node but have to set the
    `MASTER_PORT` environment variable.
    )z	127.0.0.1r   r   N)socketAF_INETSOCK_STREAMbindgetsockname)ss    aC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\ultralytics/utils/dist.pyfind_free_network_portr      sE     
v~~v'9'9	:a	 }}q! 
;	:	:s   $A!!A*c           	         | j                   j                   d| j                   j                   j                  dd      \  }}dt	        | j
                         d| d| d| d	}t        dz  j                  d	
       t        j                  dt        |        dddt        dz  d      5 }|j                  |       ddd       |j                  S # 1 sw Y   j                  S xY w)z/Generates a DDP file and returns its file name..r   zoverrides = z& 
if __name__ == "__main__":
    from z import z
    from ultralytics.utils import DEFAULT_CFG_DICT

    cfg = DEFAULT_CFG_DICT.copy()
    cfg.update(save_dir='')   # handle the extra key 'save_dir'
    trainer = z2(cfg=cfg, overrides=overrides)
    trainer.train()DDPT)exist_ok_temp_.pyzw+zutf-8F)prefixsuffixmodeencodingdirdeleteN)	__class__
__module____name__rsplitvarsargsr   mkdirtempfileNamedTemporaryFileidwritename)trainermoduler(   contentfiles        r   generate_ddp_filer-      s    ''2231W5F5F5O5O4PQXXY\^_`LFDtGLL12 3

$  
 f G u##T#2		$	$H/1'{m3,?*..5)85)@,1
3
 7;

7
3 99
3 99s   ,CC&c                    ddl }|j                  st        j                  |j                         t        t        t        j                  d         j                               }t        j                  d      }|j                  |      r*t        |      j                         r|j                  d      st        |      }t         rdnd}t#               }t        j$                  d|d|  d	| |g}||fS )
z7Generates and returns command for distributed training.r   Nz^[a-zA-Z0-9_. /\\-]{1,128}$r   ztorch.distributed.runztorch.distributed.launchz-mz--nproc_per_nodez--master_port)__main__resumeshutilrmtreesave_dirstrr   sysargvresolverecompilematchexistsendswithr-   r   r   
executable)
world_sizer)   r/   r,   safe_patterndist_cmdportcmds           r   generate_ddp_commandrC   2   s    >>g&&'tCHHQK ((*+D::<=Lt$d):):)<uAU )*3&9SH!#D>>4+=*P_dhcilp
qC9    c                 P    t        |        d|v rt        j                  |       yy)zDelete temp file if created.r   N)r&   osremove)r)   r,   s     r   ddp_cleanuprH   A   s%    
W+cd"
		$ #rD   )rF   r8   r1   r	   r5   r$   pathlibr    r   torch_utilsr   intr   r-   rC   rH    rD   r   <module>rN      s=    
 	   
    "	" 	".rD   