o
    "j)                     @  sV   d dl mZ d dlZd dlZddlmZ ddlmZ G dd dZG dd	 d	eZ	dS )
    )annotationsN   )	Container)Statusc                   @  s   e Zd Zdd ZdS )PodSepcc                 C  sH   d dd tdD | _g | _g | _d| _d | _d| _d| _d| _	d S )N c                 s  s    | ]}t d V  qdS )abcdefghijklmnopqrstuvwxyzN)randomchoice).0_ r   b/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/launch/job/pod.py	<genexpr>   s    

z#PodSepc.__init__.<locals>.<genexpr>   r   )
joinrange_name_init_containers_containers_rank_init_timeout_restart	_replicasZ
_exit_codeselfr   r   r   __init__   s   


zPodSepc.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                      s"  e Zd Z fddZdd Zdd Zedd Zed	d
 Zej	dd
 Zedd Z
e
j	dd Z
edd Zedd Zdd Zedd Zdd Zedd Zdd Zd5dd Zd6d!d"Zed#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd6d-d.Zd6d/d0Zejgejgd1d2fd3d4Z  ZS )7Podc                   s   t    d S N)superr   r   	__class__r   r   r   -   s   zPod.__init__c                 C  s   d| j  d| j d| j S )NzPod: z, replicas z	, status )namereplicasstatusr   r   r   r   __str__0   s   zPod.__str__c                 C  s*   g }| j D ]}|jtjkr|| q|S r"   )r   r(   r   FAILEDappend)r   cscr   r   r   failed_container5   s   

zPod.failed_containerc                 C     | j S r"   )r   r   r   r   r   r&   <      zPod.namec                 C  r/   r"   )r   r   r   r   r   r'   @   r0   zPod.replicasc                 C  s   t |d| _d S Nr   )maxr   r   rr   r   r   r'   D   s   c                 C  r/   r"   r   r   r   r   r   rankH   r0   zPod.rankc                 C  s
   || _ d S r"   r5   r3   r   r   r   r6   L   s   
c                 C  r/   r"   )r   r   r   r   r   restartP   r0   zPod.restartc                 C  r/   r"   )r   r   r   r   r   
containersT   r0   zPod.containersc                 C     t | j|_| j| d S r"   )lenr   r6   r+   r   r-   r   r   r   add_containerX      zPod.add_containerc                 C  r/   r"   )r   r   r   r   r   init_containers\   r0   zPod.init_containersc                 C  r9   r"   )r:   r   r6   r+   r;   r   r   r   add_init_container`   r=   zPod.add_init_containerc                 C  s$   | j D ]}|jdkr|j  S qdS Nr   )r   	exit_coder;   r   r   r   rA   d   s
   


zPod.exit_codec                 C  sF   | j D ]}|  || j q| jD ]}|  q|  jd7  _d S r1   )r   startwaitr   r   r   )r   ir-   r   r   r   deployk   s   


z
Pod.deploy   Nc                 C  sj   | j D ]}t|tr|d u r|| q|  qt|tr3| |s1| j D ]}|jdd q&dS dS d S )NT)forceF)r   
isinstanceintsend_signal	terminater   )r   Zsiginttimeoutr-   r   r   r   stopu   s   




zPod.stopc                 C  s    | j D ]
}||s dS qdS NFT)r   rC   )r   rL   r-   r   r   r   r      s
   

zPod.joinc                 C  s0   |   rtjS |  rtjS |  rtjS tjS r"   )	is_failedr   r*   is_completed	COMPLETED
is_runningRUNNINGZREADYr   r   r   r   r(      s   z
Pod.statusc                 C  s   g | _ g | _d S r"   )r   r   r   r   r   r   reset   s   
z	Pod.resetc                 C  s"   | j D ]}|jtjkr dS qdS )NTF)r   r(   r   r*   r;   r   r   r   rO      
   
zPod.is_failedc                 C  "   | j D ]}|jtjkr dS qdS rN   )r   r(   r   rQ   r;   r   r   r   rP      rU   zPod.is_completedc                 C  rV   rN   )r   r(   r   rS   r;   r   r   r   rR      rU   zPod.is_runningc                 C  sZ   |d u r$t | jdkr| jd   t | jdkr"| jd   d S d S | j|   d S r@   )r:   r   logsr   r   idxr   r   r   rW      s   zPod.logsc                 C  s,   |d u r| j d   d S | j |   d S r@   )r   tailrX   r   r   r   rZ      s   zPod.tailr   r   c                 C  s   t   | }|dk st   |k rQ| j| j D ]}|j|v r"|j  S qdd | j| j D }tt|dkr@|d |v r@|d S t | |dk st   |k sdS dS )zn
        watch return if any container status in any_list
        or all container status in all_list
        r   c                 S  s   g | ]}|j qS r   )r(   )r   r-   r   r   r   
<listcomp>   s    zPod.watch.<locals>.<listcomp>r   N)timer   r   r(   r:   setsleep)r   Zall_listZany_listintervalrL   endr-   sr   r   r   watch   s   


z	Pod.watch)rF   Nr"   ) r   r   r    r   r)   r.   propertyr&   r'   setterr6   r7   r8   r<   r>   r?   rA   rE   rM   r   r(   rT   rO   rP   rR   rW   rZ   r   rQ   r*   rb   __classcell__r   r   r$   r   r!   ,   sP    














	r!   )

__future__r   r	   r\   	containerr   r(   r   r   r!   r   r   r   r   <module>   s   