o
    xi                     @  sz   d Z ddlmZ ddlZddlmZ ddlmZ ddl	Z	ddl
m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.    )annotationsN)pformat)Any)SweepNotFoundError)
LOG_PREFIXRunState	SchedulerSweepRunc                      s^   e Zd ZdZd fddZdddZd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.argsr   kwargsc                   s   t  j|i | d S N)super__init__)selfr   r   	__class__ [/home/ubuntu/.local/lib/python3.10/site-packages/wandb/sdk/launch/sweeps/scheduler_sweep.pyr      s   zSweepScheduler.__init__	worker_idintreturnSweepRun | Nonec              	   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_runlist[dict[str, Any]]c                 C  s   i }|   D ]\}}|j|kr|jjrd||< qtdt| d z| jj| j	| j
i |d}W n tyI   tt d |   g  Y S w tdt| d |S )z-Helper to receive sweep command from backend.TzSending states: 

)agent_idmetrics
run_statesz9Sweep was deleted or agent was not found. Stopping sweep.zAgentHeartbeat commands: 
)_yield_runsr   r!   is_alive_loggerdebugpf_apiagent_heartbeat_workersr1   r   r'   	termerrorr   r$   )r   r   _run_statesr   r   r*   r   r   r   r"   @   s*   

z"SweepScheduler._get_sweep_commandsNonec                 C     d S r   r   r   r   r   r   _exitZ      zSweepScheduler._exitc                 C  s   t d| j  d S )Nz_poll. _runs: )r6   r7   r&   r@   r   r   r   _poll]   s   zSweepScheduler._pollc                 C  r?   r   r   r@   r   r   r   _load_state`   rB   zSweepScheduler._load_statec                 C  r?   r   r   r@   r   r   r   _save_statec   rB   zSweepScheduler._save_state)r   r   r   r   )r   r   r   r   )r   r   r   r/   )r   r>   )__name__
__module____qualname____doc__r   r.   r"   rA   rC   rD   rE   __classcell__r   r   r   r   r
      s    

&


r
   )rI   
__future__r   loggingpprintr   r8   typingr   r'   wandb.sdk.launch.sweepsr   !wandb.sdk.launch.sweeps.schedulerr   r   r   r	   	getLoggerrF   r6   r
   r   r   r   r   <module>   s    
