o
    -wi                     @   sn   d Z ddlZddlmZ ddlmZmZmZm	Z	 ddl
Z
ddlmZmZmZmZ eeZG dd deZdS )z#Scheduler for classic wandb Sweeps.    N)pformat)AnyDictListOptional)
LOG_PREFIXRunState	SchedulerSweepRunc                       s   e Zd ZdZdedef fddZdedee fdd	Z	dede
eeef  fd
dZdddZdddZdddZdddZ  ZS )SweepSchedulerzKA controller/agent that populates a Launch RunQueue from a sweeps RunQueue.argskwargsc                    s   t  j|i | d S N)super__init__)selfr   r   	__class__ d/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/wandb/sdk/launch/sweeps/scheduler_sweep.pyr      s   zSweepScheduler.__init__	worker_idreturnc              	   C   s   |  |}|D ]S}|d}|dv r|    dS |dvr%| d|  |d}|s7| d|   dS || jv rGtt d|  qt|t	j
|d	i |d
g |d  S dS )a	  Called by the main scheduler execution loop.

        Expected to return a properly formatted SweepRun if the scheduler
        is alive, or None and set the appropriate scheduler state:

        FAILED: self.fail_sweep()
        STOPPED: self.stop_sweep()
        type)exitstopN)runresumez AgentHeartbeat unknown command: run_idzNo run id in agent heartbeat: zSkipping duplicate run: r   logs)idstater   r   r   )_get_sweep_commandsget
stop_sweep
fail_sweep_runswandbtermlogr   r
   r   PENDING)r   r   commandscommand_type_run_idr   r   r   _get_next_sweep_run   s.   
	





z"SweepScheduler._get_next_sweep_runc                 C   sz   i }|   D ]\}}|j|kr|jjrd||< qtdt| d | jj| j	| j
i |d}tdt| d |S )z-Helper to receive sweep command from backend.TzSending states: 

)agent_idmetrics
run_stateszAgentHeartbeat commands: 
)_yield_runsr   r    is_alive_loggerdebugpf_apiagent_heartbeat_workersr/   )r   r   _run_statesr   r   r)   r   r   r   r!   =   s   
z"SweepScheduler._get_sweep_commandsNc                 C      d S r   r   r   r   r   r   _exitP      zSweepScheduler._exitc                 C   s   t d| j  d S )Nz_poll. _runs: )r4   r5   r%   r<   r   r   r   _pollS   s   zSweepScheduler._pollc                 C   r;   r   r   r<   r   r   r   _load_stateV   r>   zSweepScheduler._load_statec                 C   r;   r   r   r<   r   r   r   _save_stateY   r>   zSweepScheduler._save_state)r   N)__name__
__module____qualname____doc__r   r   intr   r
   r-   r   r   strr!   r=   r?   r@   rA   __classcell__r   r   r   r   r      s    &


r   )rE   loggingpprintr   r6   typingr   r   r   r   r&   !wandb.sdk.launch.sweeps.schedulerr   r   r	   r
   	getLoggerrB   r4   r   r   r   r   r   <module>   s    
