o
    wi@                     @   sH  d dl Z d dlZd dlZd dlmZ d dlZddlmZ ddl	m	Z	m
Z
 dedefdd	Zejjej  d
dZdeddfddZd#ddZededdfddZededdfddZededdfddZededdfddZG dd de	jZG dd de	je	j ZdeddfddZdejeef fdd Z d#d!d"Z!dS )$    N)Path   )helpers)coreutilsxreturnc                 C   s   d|  S )N    r   r
   r
   R/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/submitit/test_helpers.py_three_time   s   r   z"Rsync is required for snapshotting)reasontmp_pathc                 C   s   | d }t jdd}|td |td t|dksJ tdd |D d	ks+J t|| t|}td
d |D d	ksCJ | ddgksLJ tdd |D dksYJ d S )Nztest_funcseq.pklT)verbose         c                 s       | ]}|  V  qd S Ndone.0r   r
   r
   r   	<genexpr>!       z4test_function_sequence_checkpoint.<locals>.<genexpr>r   c                 s   r   r   r   r   r
   r
   r   r   $   r         c                 s   r   r   r   r   r
   r
   r   r   &   r   )	r   FunctionSequenceaddr   lensumr   cloudpickle_dumppickle_load)r   filefs0fs1r
   r
   r   !test_function_sequence_checkpoint   s   
r'   c           
      C   s   dt dt fdd}d\}}| ||||g}t }g }ttj|ddD ]\}}t | }	|dk r9|	|k s9J || q%|||gd	d
 |D ksMJ |d |d u sWJ d S )Nr   r   c                 S   s   t |  | S r   )timesleepr   r
   r
   r   f*   s   
ztest_as_completed.<locals>.f)g      ?皙?r+   )poll_frequencyr   c                 S   s   g | ]}|  qS r
   )resultr   jr
   r
   r   
<listcomp>;   s    z%test_as_completed.<locals>.<listcomp>r   )float	map_arrayr(   	enumerater   as_completedappend)
executorr*   slowfastjobsstartfinished_jobsnr/   elapsedr
   r
   r   test_as_completed)   s   r?   c                 C   sf   t  }t|  t  | ksJ | d  sJ W d    n1 s$w   Y  t  |ks1J d S )Nsubmitit/test_helpers.py)r   cwdr   RsyncSnapshotexists)r   rA   r
   r
   r   test_snapshot?   s   rD   c                 C   sZ   dg}t j| |d | d  sJ | d  rJ W d    d S 1 s&w   Y  d S )Nzsubmitit/test_*)snapshot_direxcludezsubmitit/helpers.pyr@   )r   rB   rC   )r   rF   r
   r
   r   test_snapshot_excludesH   s
   "rG   c                 C   sP   t j|d | tj}W d    n1 sw   Y  t| |ks&J d S )NrE   )r   rB   submitosgetcwdr   r-   )r7   r   jobr
   r
   r   test_job_use_snapshot_cwdP   s   rM   c                 C   st   t j|d dtfdd}| |}W d    n1 sw   Y  | ttjd ks.J | |d ks8J d S )NrH   r   c                  S   s   dd l } t| jS )Nr   )submititr   __file__)rN   r
   r
   r   submitit_file[   s   
z4test_job_use_snapshot_modules.<locals>.submitit_filez__init__.pyzsubmitit/__init__.py)r   rB   r   rI   rO   parentr-   )r7   r   rP   rL   r
   r
   r   test_job_use_snapshot_modulesW   s   
rR   c                       s@   e Zd Zddedef fddZdded	ed
efddZ  ZS )FakeInfoWatcherWithTimer<   {Gz?delay_stime_changec                    s    t  | t | _|| _d S r   )super__init__r(   start_timerrW   )selfrV   rW   	__class__r
   r   rY   j   s   

z!FakeInfoWatcherWithTimer.__init__standardjob_idmoder   c                 C   sL   t   | j }|| jk rdS d| j |  kr| jkrdS  |dkr$dS dS )Npendingr   runningfailedr   )r(   rZ   rW   )r[   r_   r`   durationr
   r
   r   	get_stateo   s   
z"FakeInfoWatcherWithTimer.get_state)rT   rU   )r^   )	__name__
__module____qualname__intr2   rY   strre   __classcell__r
   r
   r\   r   rS   h   s     rS   c                   @   s   e Zd Ze ZdS )FakeJobWithTimerN)rf   rg   rh   rS   watcherr
   r
   r
   r   rl   z   s    
rl   c                 C   sf   t d| d}t d| d}||g}tj|ddd tdd |D s#J td	d |D |hks1J d S )
Nrc   )r_   folder	succeededrU   T)	test_modec                 s   s    | ]	}|  r|V  qd S r   r   r.   r
   r
   r   r      s    z$test_monitor_jobs.<locals>.<genexpr>c                 s   s"    | ]}|j  d kr|V  qdS )FAILEDN)stateupperr.   r
   r
   r   r      s     )rl   r   monitor_jobsallset)r   rL   job2r:   r
   r
   r   test_monitor_jobs~   s    rx   c                   C   s   dd t j D S )Nc                 S   s    i | ]\}}| d r||qS ))SLURM_	SUBMITIT_)
startswith)r   r   yr
   r
   r   
<dictcomp>   s     z_get_env.<locals>.<dictcomp>)rJ   environitemsr
   r
   r
   r   _get_env   s   r   c               	   C   s4  t  } tjddd; tt  t| d ksJ t  t  r"J W d    n1 s,w   Y  tt  t| d ks>J W d    n1 sHw   Y  t  | ksTJ tjddd5 tjdd d	tjvsjJ d
tjvsqJ W d    n1 s{w   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   )SLURM_BLUBLUSUBMITIT_BLUBLUr   *   i:  )MASTER_PORTBLABLA)r   )extra_namesr   r   )r   r   environment_variablesr    r   	clean_envrJ   r~   )baser
   r
   r   test_clean_env   s"   
"r   )r   N)"rJ   r(   typingtppathlibr   pytest r   r   r   ri   r   markskipifrB   	availablerequires_rsyncr'   r?   rD   rG   rM   rR   InfoWatcherrS   JobRrl   rx   Dictrj   r   r   r
   r
   r
   r   <module>   s4   
	