Ë
    ?çi¢M  ã            	       óF  — 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
Z
d dlZddlmZ ddlmZmZmZmZ ddlmZ dd	lmZ dOd
eej,                     dededdfd„Ze j2                  dej4                  ej6                     fd„«       Zdeddfd„ZdPd„Zdeddfd„Ze
j@                  jC                  dd«      de"deddfd„«       Z#deddfd„Z$e j2                  dQdejJ                  e&   de"fd„«       Z'd
edejP                  fd„Z)deddfd„Z*deddfd„Z+deddfd„Z,dPd„Z-dPd „Z.dPd!„Z/deddfd"„Z0deddfd#„Z1dPd$„Z2e
j@                  jC                  d%g d&¢«      d'ed(eddfd)„«       Z3e
j@                  jC                  d*d+d,gfd-d.gfd/d0gfd1g d2¢fd3d4gfg«      d5ed6ejh                  ejj                  ejl                  e&ef   d7f      ddfd8„«       Z7e
j@                  jC                  d9d:d;g«      d<ed6eddfd=„«       Z8dPd>„Z9dPd?„Z:dPd@„Z;dPdA„Z<e j2                  dBedej4                  ejz                     fdC„«       Z>dPdD„Z?dPdE„Z@dPdF„ZAdPdG„ZBdHeddfdI„ZCe
j@                  jC                  dJi dKdig«      dJejˆ                  ee&f   deddfdL„«       ZEdeddfdM„ZFdeddfdN„ZGy)Ré    N)ÚPath)Úpatché   )Úhelpers)Újob_environmentÚ
submissionÚ	test_coreÚutils)ÚJobé   )ÚslurmÚjobÚprintsÚerrorsÚreturnc           	      ó„  — | j                   j                  | j                   j                  fD �cg c]0  }t        |«      j	                  dt        | j
                  «      «      ‘Œ2 }}t        |||f«      D ]9  \  }}t        |«      j                  d«      5 }|j                  |«       ddd«       Œ; yc c}w # 1 sw Y   ŒKxY w)zWrite fake log filesú%jÚwN)
ÚpathsÚstdoutÚstderrÚstrÚreplaceÚjob_idÚzipr   ÚopenÚwrite)r   r   r   ÚxÚ	filepathsÚfilepathÚmsgÚfs           ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/submitit/slurm/test_slurm.pyÚ_mock_log_filesr$      s™   € àADÇÁ×AQÑAQÐSV×S\ÑS\×ScÑScÑ@dÓeÑ@d¸1”�Q“—‘ ¤c¨#¯*©*£oÕ6Ð@d€IÐeÜ˜Y¨°Ð(8Ö9‰ˆ�#Ü�(‹^× Ñ  Ô%¨Ø�G‰G�CŒL÷ &Ð%ñ :ùò fç%Ð%ús   ¯5B1ÂB6Â6B?	c               #   ó8  K  — t        j                  dg¬«      } 	 | j                  «       5  | –— d d d «       t        j                  j
                  j                  «        y # 1 sw Y   Œ2xY w# t        j                  j
                  j                  «        w xY w­w)NÚsrun)Ú
known_cmds)r	   ÚMockedSubprocessÚcontextr   ÚSlurmJobÚwatcherÚclear©Úmocks    r#   Úmocked_slurmr/       sh   è ø€ ä×%Ñ%°&°Ô:€Dð'Ø�\‰\�^ØŠJ÷ ô 	�‰×Ñ×$Ñ$Õ&÷	 ˆ^ûô 	�‰×Ñ×$Ñ$Õ&üs1   ‚B›A- «A!°A- ¸)BÁ!A*Á&A- Á-*BÂBÚtmp_pathc                 óØ   — t        «       5 }|j                  dd«       t        j                  | d«      }|j                  dk(  sJ ‚|j                  d¬«       d d d «       y # 1 sw Y   y xY w)NÚ12z       ÚUNKNOWNF©Útimeout)r/   Úset_job_stater   r*   ÚstateÚ
_interrupt)r0   r.   r   s      r#   Útest_mocked_missing_stater9   +   sS   € Ü	Œ˜4Ø×Ñ˜4 Ô+Ü$)§N¡N°8¸TÓ$BˆØ�y‰y˜IÒ%Ð%Ð%Ø�‰˜uˆÔ%÷	 
�‰ús   ‹AA Á A)c                  óú   — t        «       5 } | j                  dd«       | j                  d«      5  t        j                  «       j
                  dk(  sJ ‚	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr2   ÚRUNNINGr   )r/   r6   Újob_contextr   ÚJobEnvironmentÚclusterr-   s    r#   Útest_job_environmentr?   3   s_   € Ü	Œ˜4Ø×Ñ˜4 Ô+Ø×Ñ˜dÕ#Ü"×1Ñ1Ó3×;Ñ;¸wÒFÐFÑF÷ $÷ 
ˆç#Ð#ú÷ 
ˆús"   ‹$A1¯$A%ÁA1Á%A.	Á*A1Á1A:c                 óV  — t        «       5 }t        j                  | ¬«      }|j                  t        j
                  ddd¬«      }|j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  «       �J ‚t        |dd	¬
«       d|_
        t        j                  t        j                  «      5  |j                  «        d d d «       t        |dd	¬
«       |j!                  |j                  «      5  t#        j$                  |j&                  j(                  «       d d d «       |j+                  «       dk(  sJ ‚|j                  «       d	k(  sJ ‚|j-                  «       dk(  sJ ‚dt.        j0                  vsJ d«       ‚	 d d d «       y # 1 sw Y   ŒÆxY w# 1 sw Y   ŒwxY w# 1 sw Y   y xY w)N©Úfolderr   r   é   ©Úblublur2   r;   úThis is the error log
Úhop)r   r   r   é   Ú_USELESS_TEST_ENV_VAR_z(Test context manager seems to be failing)r/   r   ÚSlurmExecutorÚsubmitr	   Ú
do_nothingr   r7   r   r$   Ú_results_timeout_sÚpytestÚraisesr
   ÚUncompletedJobErrorÚ_get_outcome_and_resultr<   r   Úprocess_jobr   rB   Úresultr   ÚosÚenviron)r0   r.   Úexecutorr   s       r#   Útest_slurm_job_mockedrW   :   sU  € Ü	Œ˜4Ü×&Ñ&¨hÔ7ˆØ�o‰oœi×2Ñ2°A°qÀˆoÓCˆà�z‰z˜TÒ!Ð!Ð!Ø�y‰y˜IÒ%Ð%Ð%Ø�z‰z‹|Ð#Ð#Ð#Ü˜Ð$=ÀeÕLØ!"ˆÔÜ�]‰]œ5×4Ñ4Õ5Ø×'Ñ'Ô)÷ 6ä˜Ð$=ÀeÕLà×Ñ˜cŸj™jÕ)Ü×"Ñ" 3§9¡9×#3Ñ#3Ô4÷ *à�z‰z‹|˜rÒ!Ð!Ð!à�z‰z‹|˜uÒ$Ð$Ð$Ø�z‰z‹|Ð8Ò8Ð8Ð8Ø'¬r¯z©zÑ9ÐeÐ;eÓeÑ9÷' 
ˆ÷ 6Ð5ú÷ *Ð)ú÷ 
ˆús=   ‹B&FÂ1FÃ1FÃ3*FÄA FÆF	ÆFÆF	ÆFÆF(Úuse_batch_api)FTc           
      ó  ‡‡— d}t        «       5 }t        j                  |¬«      }|j                  d¬«       t	        |«      t	        dd|z   «      cŠŠdt
        dt
        dt
        fˆˆfd	„}g }| rQ|j                  «       5  t        ‰‰«      D ]'  \  }}|j                  |j                  |||«      «       Œ) 	 d d d «       n|j                  |‰‰«      }|d
   j                  j                  d«      d
   }	t	        |«      D �
cg c]	  }
|	› d|
› �‘Œ c}
|D �cg c]  }|j                  ‘Œ c}k(  sJ ‚|D ]`  }|j                  dk(  sJ ‚|j                  |j                  «      5  t        j                   |j"                  j$                  «       d d d «       Œb |d
   j'                  d¬«       t)        t+        |‰‰«      «      |D �cg c]  }|j-                  «       ‘Œ c}k(  sJ ‚t/        ||	¬«      j"                  j0                  j3                  «       }|j5                  «       D �cg c]  }d|v sŒ|j7                  «       ‘Œ }}|dgk(  sJ ‚	 d d d «       y # 1 sw Y   �ŒˆxY wc c}
w c c}w # 1 sw Y   �ŒAxY wc c}w c c}w # 1 sw Y   y xY w)Né   rA   rC   )Úarray_parallelismé
   r   Úyr   c                 ó&   •— | ‰v sJ ‚|‰v sJ ‚| |z   S ©N© )r   r]   Údata1Údata2s     €€r#   Úaddz(test_slurm_job_array_mocked.<locals>.addY   s$   ø€ Ø˜‘:Ð�:Ø˜‘:Ð�:Ø�q‘5ˆLó    r   Ú_r;   Tr4   ©r   z--arrayz#SBATCH --array=0-4%3)r/   r   rJ   Úupdate_parametersÚrangeÚintÚbatchr   ÚappendrK   Ú	map_arrayr   Úsplitr7   r<   r   rR   r   rB   r8   ÚlistÚmaprS   r   Úsubmission_fileÚ	read_textÚ
splitlinesÚstrip)rX   r0   Únr.   rV   rc   ÚjobsÚd1Úd2Úarray_idÚaÚjr   ÚsbatchÚlÚ
array_linera   rb   s                   @@r#   Útest_slurm_job_array_mockedr~   Q   sG  ù€ à	€AÜ	Œ˜4Ü×&Ñ&¨hÔ7ˆØ×"Ñ"°QÐ"Ô7Ü˜Q“x¤ r¨2°©6Ó!2ˆˆˆuð	”3ð 	œ3ð 	¤3ö 	ð
 #%ˆÙØ—‘Õ!Ü! %¨Ö/‘F�B˜Ø—K‘K §¡°°R¸Ó <Õ=ñ 0÷ "Ð!ð ×%Ñ% c¨5°%Ó8ˆDØ˜‘7—>‘>×'Ñ'¨Ó,¨QÑ/ˆÜ+0°¬8Ó4©8 a�8�*˜A˜a˜SÒ!¨8Ñ4É4Ó8PÉ4Àa¸¿»È4Ñ8PÒPÐPÐPãˆCØ—9‘9 	Ò)Ð)Ð)Ø×!Ñ! #§*¡*Õ-Ü×&Ñ& s§y¡y×'7Ñ'7Ô8÷ .Ð-ð ð
 	ˆQ‰×Ñ 4ÐÔ(Ü”C˜˜U EÓ*Ó+ÁDÓ/IÁD¸q°·±µ
ÀDÑ/IÒIÐIÐIä�X hÔ/×5Ñ5×EÑE×OÑOÓQˆØ)/×):Ñ):Ô)<ÓOÑ)< AÀ	ÈQÂ�a—g‘g•iÐ)<ˆ
ÐOØÐ5Ð6Ò6Ð6Ñ6÷= 
ˆ÷ "Ñ!üò 5ùÒ8P÷ .Ñ-üò 0Jùò P÷; 
ˆúst   �A1J Â 7IÂ8A
J ÄIÄJ ÄI$Ä)8J Å!*I)Æ8J ÇI6ÇAJ È"	I;È,I;È>
J ÉI	ÉJ É)I3É.J Ê J	c                 óì  — t        «       5 }t        j                  | ¬«      }|j                  dd¬«       |j	                  t
        j                  ddd¬«      }|j                  |j                  «      5  t        j                  t        «      5  t        j                  |j                  j                  «       d d d «       d d d «       t!        |d	¬
«       t        j                  t"        j$                  «      5  |j'                  «        d d d «       |j)                  «       }t+        |t"        j$                  «      sJ ‚	 d d d «       y # 1 sw Y   Œ�xY w# 1 sw Y   Œ”xY w# 1 sw Y   ŒWxY w# 1 sw Y   y xY w)NrA   é   r   )ÚtimeÚgpus_per_noder   r   rH   )ÚerrorrF   )r   )r/   r   rJ   rg   rK   r	   rL   r<   r   rN   rO   Ú
ValueErrorr   rR   r   rB   r$   r
   ÚFailedJobErrorrS   Ú	exceptionÚ
isinstance)r0   r.   rV   r   r†   s        r#   Útest_slurm_error_mockedrˆ   u   s   € Ü	Œ˜4Ü×&Ñ&¨hÔ7ˆØ×"Ñ"¨¸!Ð"Ô<Ø�o‰oœi×2Ñ2°A°qÀˆoÓCˆØ×Ñ˜cŸj™jÕ)Ü—‘œzÕ*Ü×&Ñ& s§y¡y×'7Ñ'7Ô8÷ +÷ *ô 	˜Ð$=Õ>Ü�]‰]œ5×/Ñ/Õ0Ø�J‰JŒL÷ 1à—M‘M“Oˆ	Ü˜)¤U×%9Ñ%9Ô:Ð:Ñ:÷ 
ˆ÷
 +Ð*ú÷ *Ð)ú÷ 1Ð0ú÷ 
ˆúsT   ‹A(E*Á3EÂ*EÂ7EÂ?8E*Ã7EÄ4E*ÅEÅEÅE	ÅE*ÅE'	Å#E*Å*E3Úcalled_withÚ
not_calledc              #   ó  K  — |s| €J ‚t        dd ¬«      }|5 }	 d –— |r|j                  «        n|j                  | «       	 d d d «       y # |r|j                  «        w |j                  | «       w xY w# 1 sw Y   y xY w­w)Nz1submitit.slurm.slurm.SlurmJobEnvironment._requeue)Úreturn_value)r   Úassert_not_calledÚassert_called_with)r‰   rŠ   ÚrequeueÚ_patchs       r#   Úmock_requeuer‘   „   s{   è ø€ á˜Ð0Ð0Ð0ÜÐGÐVZÔ[€GÙ	�Fð	7ÛáØ×(Ñ(Õ*à×)Ñ)¨+Õ6÷ 
ˆøñ Ø×(Ñ(Õ*à×)Ñ)¨+Õ6ú÷ 
ˆüs2   ‚B˜A5šAž%A5Á	BÁ&A2Á2A5Á5A>Á:Bc                 óÖ   — t        j                  «       }t        j                  j	                  | j
                  j                  «      }t        j                  || j
                  |«      }|S r_   )	r   ÚSlurmJobEnvironmentr
   ÚDelayedSubmissionÚloadr   Úsubmitted_pickler   ÚSignalHandler)r   ÚenvÚdelayedÚsigs       r#   Úget_signal_handlerr›   ’   sM   € Ü
×
#Ñ
#Ó
%€CÜ×%Ñ%×*Ñ*¨3¯9©9×+EÑ+EÓF€GÜ
×
'Ñ
'¨¨S¯Y©Y¸Ó
@€CØ€Jrd   c                 ó¤  — t         j                  j                  «       }t        j                  «       }|j                  t        j                  d«       t        |t        j                  «      sJ ‚t        «       5  t        j                  | d¬«      }|j                  d¬«       |j                  |«      }d d d «       t        «      } |d¬«       t!        j"                  t$        «      5  t'        d¬«      5  |j)                  |«       d d d «       d d d «       t        |«      } |d	¬«       t!        j"                  t$        «      5  t'        d
¬«      5  |j)                  |«       d d d «       d d d «       t        |«      } |d¬«       t        j*                  j                  «       }t'        d¬«      5  t!        j"                  t,        j.                  d¬«      5  |j)                  |«       d d d «       d d d «       y # 1 sw Y   �ŒIxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒxY w# 1 sw Y   Œ¿xY w# 1 sw Y   ŒÃxY w# 1 sw Y   ŒQxY w# 1 sw Y   y xY w)Nr\   r   ©rB   Úmax_num_timeouté<   ©r�   é   ©Úminutes©r‰   é2   r   é7   T©rŠ   ztimed-out too many times.©Úmatch)Úsubmititr=   Ú_usr_sigr   ÚFunctionSequencerc   r	   Ú_three_timer‡   ÚCheckpointabler/   r   rJ   rg   rK   r›   rN   rO   Ú
SystemExitr‘   Úcheckpoint_and_try_requeuer“   r
   rP   )r0   Úfast_forward_clockÚusr_sigÚfs0rV   r   rš   s          r#   Útest_requeuing_checkpointabler´   ™   s©  € Ü×%Ñ%×.Ñ.Ó0€GÜ
×
"Ñ
"Ó
$€CØ‡G�GŒI×!Ñ! 2Ô&Ü�cœ7×1Ñ1Ô2Ð2Ð2ô 
�Ü×&Ñ&¨hÈÔJˆØ×"Ñ"¨Ð"Ô+Ø�o‰o˜cÓ"ˆ÷ 
ô
 ˜SÓ
!€Cá˜rÕ"ä	�‰”zÕ	"¤L¸QÖ$?Ø×&Ñ& wÔ/÷ %@×	"ô ˜SÓ
!€CÙ˜rÕ"ô 
�‰”zÕ	"¤L¸QÖ$?Ø×&Ñ& wÔ/÷ %@×	"ô ˜SÓ
!€CÙ˜rÕ"ô ×'Ñ'×0Ñ0Ó2€GÜ	 Ö	&¬¯©Ü×!Ñ!Ð)Dö)ð 	×&Ñ& wÔ/÷)×	&Ð	&÷; 
‰ú÷ %@Ñ$?ú×	"Ñ	"ú÷ %@Ð$?ú×	"Ð	"ú÷)ð )ú×	&Ð	&úsx   Á9;G;Ã)HÃ6HÄHÅH.ÅH"Å$H.Æ2&IÇH:Ç*IÇ;HÈH	ÈHÈHÈ"H+	È'H.È.H7È:I	È?IÉIc                 óŽ  — t         j                  j                  «       }t        «       5  t	        j
                  | d¬«      }|j                  d¬«       |j                  t        j                  d«      }d d d «       t        «      } |d¬«       t        d¬	«      5  |j                  t        j                  j                  «       d d d «       t!        j"                  t$        «      5  t        d¬
«      5  |j'                  |«       d d d «       d d d «       t        |«      } |d¬«       t        d¬	«      5  t!        j"                  t(        j*                  d¬«      5  |j'                  |«       d d d «       d d d «       y # 1 sw Y   �ŒxY w# 1 sw Y   ŒÇxY w# 1 sw Y   Œ“xY w# 1 sw Y   Œ—xY w# 1 sw Y   ŒCxY w# 1 sw Y   y xY w)Nr   r�   rŸ   r    r\   r¡   r¢   Tr§   r¤   r¥   z timed-out and not checkpointabler¨   )rª   r=   r«   r/   r   rJ   rg   rK   r	   r­   r›   r‘   ÚbypassÚsignalÚSignalsÚSIGTERMrN   rO   r¯   r°   r
   rP   )r0   r±   r²   rV   r   rš   s         r#   Ú!test_requeuing_not_checkpointablerº   Ã   s@  € Ü×%Ñ%×.Ñ.Ó0€Gä	�Ü×&Ñ&¨hÈÔJˆØ×"Ñ"¨Ð"Ô+Ø�o‰oœi×3Ñ3°RÓ8ˆ÷ 
ô ˜SÓ
!€CÙ˜rÕ"ä	 Ö	&Ø�
‰
”6—>‘>×)Ñ)Ô*÷ 
'ô 
�‰”zÕ	"¤L¸QÖ$?Ø×&Ñ& wÔ/÷ %@×	"ô ˜SÓ
!€CÙ˜rÕ"ô 
 Ö	&¬¯©Ü×!Ñ!Ð)Kö)ð 	×&Ñ& wÔ/÷)×	&Ð	&÷+ 
‰ú÷ 
'Ð	&ú÷ %@Ð$?ú×	"Ð	"ú÷)ð )ú×	&Ð	&ús`   ©A
E>Â*FÃ&F#Ã3FÄF#Ä5&F;ÅF/Å-F;Å>FÆFÆF 	ÆF#Æ#F,Æ/F8	Æ4F;Æ;Gc                 ón  — t         j                  j                  «       }t        «       5  t	        j
                  | d¬«      }|j                  d¬«       |j                  t        j                  d«      }d d d «       t        «      }t        j                  t        «      5  t        d¬«      5  |j                  |«       d d d «       d d d «       t         j"                  j%                  |j&                  j(                  «      }|j*                  dk(  sJ ‚y # 1 sw Y   Œ¡xY w# 1 sw Y   ŒbxY w# 1 sw Y   ŒfxY w)Nr   r�   rŸ   r    r\   Tr§   )rª   r=   r«   r/   r   rJ   rg   rK   r	   r­   r›   rN   rO   r¯   r‘   Úcheckpoint_and_exitr
   r”   r•   r   r–   Ú_timeout_countdown)r0   r²   rV   r   rš   r™   s         r#   Útest_checkpoint_and_exitr¾   á   sÞ   € Ü×%Ñ%×.Ñ.Ó0€GÜ	�Ü×&Ñ&¨hÈÔJˆØ×"Ñ"¨Ð"Ô+Ø�o‰oœi×3Ñ3°RÓ8ˆ÷ 
ô
 ˜SÓ
!€CÜ	�‰”zÕ	"¤L¸DÖ$AØ×Ñ Ô(÷ %B×	"ô ×%Ñ%×*Ñ*¨3¯9©9×+EÑ+EÓF€GØ×%Ñ%¨Ò*Ð*Ñ*÷ 
ˆú÷ %BÐ$Aú×	"Ð	"ús0   ©A
DÂD+Â,DÂ>D+ÄDÄD(	Ä$D+Ä+D4c            
      ó`  — t        j                  ddddddig d¢¬«      } d	| v sJ ‚d
| vsJ ‚d| vsJ ‚t        t        «      j                  dz  }|j                  «       s|j                  | «       |j                  «       }g }t        t        | j                  «       |j                  «       «      «      D ],  \  }\  }}||k7  sŒ|j                  d|dz   › d|› d|› d�«       Œ. |rLt        | «       t        d«       t        |«       dg|z   }|ddd|› �gz  }t        dj                  |«      «      ‚y )Nz
blublu barú/tmpÚ	learnfairTrE   rH   )z-vvz
--cpu-bindÚnone)ÚcommandrB   Ú	partitionÚ	exclusiveÚadditional_parametersÚ	srun_argsrÄ   z	--commandÚ
constraintz_sbatch_test_record.txtzline #r   z: "z" -> "Ú"z	# # # # #zDifference with reference file:Ú z)Delete the record file if this is normal:zrm Ú
)r   Ú_make_sbatch_stringr   Ú__file__ÚparentÚexistsÚ
write_textrq   Ú	enumerater   rr   rk   ÚprintÚAssertionErrorÚjoin)ÚstringÚrecord_fileÚrecordedÚchangesÚkÚline1Úline2Úmessages           r#   Útest_make_sbatch_stringrÝ   ñ   sN  € Ü×&Ñ&ØØØØØ'¨˜nÚ/ô€Fð ˜&Ñ Ð Ð Ø˜fÑ$Ð$Ð$Ø˜vÑ%Ð%Ð%Ü”x“.×'Ñ'Ð*CÑC€KØ×ÑÔØ×Ñ˜vÔ&Ø×$Ñ$Ó&€HØ€GÜ&¤s¨6×+<Ñ+<Ó+>À×@SÑ@SÓ@UÓ'VÖWÑˆ‰>ˆE�5Ø�E‹>Ø�N‰N˜V A¨¡E 7¨#¨e¨W°F¸5¸'ÀÐCÕDð Xñ ÜˆfŒÜˆkÔÜˆhŒØ4Ð5¸Ñ?ˆØ�BÐCÀsÈ;È-ÐEXÐYÑYˆÜ˜TŸY™Y wÓ/Ó0Ð0ð rd   c                  ó@   — t        j                  ddd¬«      } d| v sJ ‚y )NrE   rÀ   r   )rÃ   rB   r‚   z--gpus-per-node=2©r   rÌ   ©rÕ   s    r#   Útest_make_sbatch_string_gpurá     s%   € Ü×&Ñ&¨xÀÐVWÔX€FØ &Ñ(Ð(Ñ(rd   c                  ó@   — t        j                  ddd¬«      } d| vsJ ‚y )NrE   rÀ   T)rÃ   rB   Ústderr_to_stdoutú--errorrß   rà   s    r#   Útest_make_sbatch_stderrrå     s%   € Ü×&Ñ&¨xÀÐY]Ô^€FØ˜FÑ"Ð"Ñ"rd   c                 óÎ   — t        «       5  t        j                  | ¬«      }d d d «       j                  d¬«       |j                  j
                  d   dk(  sJ ‚y # 1 sw Y   Œ:xY w)NrA   g      @)Úmem_gbÚmemÚ3584MB)r/   rª   ÚAutoExecutorrg   Ú	_executorÚ
parameters©r0   rV   s     r#   Útest_update_parametersrî     sT   € Ü	�Ü×(Ñ(°Ô9ˆ÷ 
à×Ñ cÐÔ*Ø×Ñ×(Ñ(¨Ñ/°8Ò;Ð;Ñ;÷ 
ˆús   ‹AÁA$c                 óî   — t        «       5  t        j                  | ¬«      }d d d «       t        j                  t
        «      5  j                  d¬«       d d d «       y # 1 sw Y   Œ>xY w# 1 sw Y   y xY w)NrA   rH   rD   )r/   r   rJ   rN   rO   r„   rg   rí   s     r#   Útest_update_parameters_errorrð     sP   € Ü	�Ü×&Ñ&¨hÔ7ˆ÷ 
ä	�‰”zÕ	"Ø×"Ñ"¨"Ð"Ô-÷ 
#Ð	"÷ 
ˆúç	"Ð	"ús   ‹AÁA+ÁA(Á+A4c                  ó¦   — d} t        j                  «       j                  | «      }|d   dddœk(  sJ ‚|d   dddœk(  sJ ‚t        |«      h d£k(  sJ ‚y )	NzoJobID|State
5610980|RUNNING
5610980.ext+|RUNNING
5610980.0|RUNING
20956421_0|RUNNING
20956421_[2-4%25]|PENDING
Ú5610980r;   )ÚJobIDÚStateÚ
20956421_2z20956421_[2-4%25]ÚPENDING>   rò   Ú
20956421_0rõ   Ú
20956421_3Ú
20956421_4)r   ÚSlurmInfoWatcherÚ	read_infoÚset)ÚexampleÚoutputs     r#   Útest_read_inforÿ   &  sh   € ð€Gô ×#Ñ#Ó%×/Ñ/°Ó8€FØ�)Ñ¨)¸iÑ HÒHÐHÐHØ�,ÑÐ-@È9Ñ#UÒUÐUÐUÜˆv‹;Ò]Ò]Ð]Ñ]rd   z
name,state))Ú12_0ÚR)Ú12_1ÚU)Ú12_2ÚX)Ú12_3r  )Ú12_4r  Únamer7   c                 óÐ   — d}t        j                  «       }dD ]  }|j                  |«       Œ |j                  |«      }|j	                  | i «      j	                  dd«      |k(  sJ ‚y )Nz JobID|State
12_0|R
12_[2,4-12]|X)r  r  rô   r  )r   rú   Úregister_jobrû   Úget)r  r7   rý   r+   Újobidrþ   s         r#   Útest_read_info_arrayr  4  se   € ð 3€GÜ×$Ñ$Ó&€GÛ!ˆØ×Ñ˜UÕ#ð "à×Ñ˜wÓ'€FØ�:‰:�d˜BÓ×#Ñ# G¨SÓ1°UÒ:Ð:Ñ:rd   zjob_id,expectedr2   )rH   r   )rH   r   z20_[2-7%56]©é   r   é   z20_[2-7,12-17,22%56])r  )r  rH   é   )r  é   z20_[0%1])r  r   r   Úexpected.c                 ó‚   — t        j                  | «      }||D �cg c]  }t        d„ |D «       «      ‘Œ c}k(  sJ ‚y c c}w )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr_   )r   )Ú.0r   s     r#   Ú	<genexpr>z#test_read_job_id.<locals>.<genexpr>L  s   è ø€ Ð2©E qœC ŸF©Eùs   ‚)r   Úread_job_idÚtuple)r   r  rþ   Úgroups       r#   Útest_read_job_idr  @  s?   € ô ×Ñ˜vÓ&€FØÁÓIÁ°u”eÑ2©EÓ2Õ2ÀÑIÒIÐIÑIùÒIs   ›<zstring,expected)s   Submitted batch job 5610208
Ú5610208)zSubmitted batch job 5610208
r  rÕ   c                 óP   — t         j                  j                  | «      }||k(  sJ ‚y r_   )r   rJ   Ú#_get_job_id_from_submission_command)rÕ   r  rþ   s      r#   Ú#test_get_id_from_submission_commandr  O  s(   € ô
 × Ñ ×DÑDÀVÓL€FØ�XÒÐÑrd   c                  ó´   — t        j                  t        j                  «      5  t        j
                  j                  d¬«       d d d «       y # 1 sw Y   y xY w)Ns   blublurà   )rN   rO   r
   ÚFailedSubmissionErrorr   rJ   r  r`   rd   r#   Ú)test_get_id_from_submission_command_raiser"  X  s7   € Ü	�‰”u×2Ñ2Õ	3Ü×Ñ×?Ñ?ÀyÐ?ÔQ÷ 
4×	3Ñ	3ús   ¤!AÁAc                  óü  — t        «       5 } t        j                  «       }| j                  dd«       |j                  dk(  sJ ‚|j                  d¬«      }t        |j                  j                  «       «      dhk(  sJ ‚|j                  dhk(  sJ ‚|dk(  sJ ‚| j                  dd«       |j                  dd¬	«      }|dk(  sJ ‚|j                  ddhk(  sJ ‚|j                  dhk(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)
Nr2   r;   r   Ú11rf   r3   ÚFAILEDÚforce)r   Úmode)r/   r   rú   r6   Ú	num_callsÚ	get_staterü   Ú
_info_dictÚkeysÚ_registeredÚ	_finished)r.   r+   r7   s      r#   Útest_watcherr.  ]  s  € Ü	Œ˜4Ü×(Ñ(Ó*ˆØ×Ñ˜4 Ô+Ø× Ñ  AÒ%Ð%Ð%Ø×!Ñ!¨Ð!Ó.ˆÜ�7×%Ñ%×*Ñ*Ó,Ó-°$°Ò7Ð7Ð7Ø×"Ñ" t fÒ,Ð,Ð,à˜	Ò!Ð!Ð!Ø×Ñ˜4 Ô*Ø×!Ñ!¨°GÐ!Ó<ˆØ˜Ò Ð Ð à×"Ñ" t¨T lÒ2Ð2Ð2Ø× Ñ  T FÒ*Ð*Ñ*÷ 
�‰ús   ‹CC2Ã2C;c                  ó@   — t        j                  «       } | d   dk(  sJ ‚y )NÚnodesr   )r   Ú_get_default_parameters)Údefaultss    r#   Útest_get_default_parametersr3  o  s#   € Ü×,Ñ,Ó.€HØ�GÑ Ò!Ð!Ñ!rd   c                  óJ   — t         j                  j                  «       dk(  sJ ‚y )Nr   )r   rJ   r  r`   rd   r#   Ú	test_namer5  t  s   € Ü×Ñ×#Ñ#Ó%¨Ò0Ð0Ñ0rd   Ú	node_listc              #   óÈ   K  — dt         j                  d<   | t         j                  d<   t        j                  «       –— t         j                  d= t         j                  d= y ­w)NÚ1ÚSLURM_JOB_IDÚSLURM_JOB_NODELIST)rT   rU   r   r“   )r6  s    r#   Úwith_slurm_job_nodelistr;  x  sK   è ø€ à!$„B‡J�Jˆ~ÑØ'0„B‡J�JÐ#Ñ$Ü
×
#Ñ
#Ó
%Ò%Ü
�
‰
Ð'Ð(Ü
�
‰
�>Ñ"ùs   ‚A A"c                  ó  — t        d«      5 } dg| j                  k(  sJ ‚	 d d d «       t        d«      5 } ddg| j                  k(  sJ ‚	 d d d «       t        d«      5 } ddg| j                  k(  sJ ‚	 d d d «       t        d«      5 } d	d
g| j                  k(  sJ ‚	 d d d «       t        d«      5 } g d¢| j                  k(  sJ ‚	 d d d «       t        d«      5 } g d¢| j                  k(  sJ ‚	 d d d «       t        d«      5 } g d¢| j                  k(  sJ ‚	 d d d «       t        d«      5 } g d¢| j                  k(  sJ ‚	 d d d «       t        d«      5 } ddg| j                  k(  sJ ‚	 d d d «       t        d«      5 } g d¢| j                  k(  sJ ‚	 d d d «       y # 1 sw Y   �ŒsxY w# 1 sw Y   �ŒXxY w# 1 sw Y   �Œ=xY w# 1 sw Y   �Œ"xY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒëxY w# 1 sw Y   ŒÏxY w# 1 sw Y   Œ³xY w# 1 sw Y   Œ—xY w# 1 sw Y   y xY w)Nzcompute-b24zcompute-a1,compute-b2ú
compute-a1z
compute-b2zcompute-b2[1,2]úcompute-b21úcompute-b22zcompute-b2[011,022]zcompute-b2011zcompute-b2022zcompute-b2[1-3])r>  r?  úcompute-b23zcompute-b2[1-3,5,6,8])r>  r?  r@  úcompute-b25úcompute-b26úcompute-b28zcompute-b2[1-3,5-6,8]z compute-b2[1-3,5-6,8],compute-a1)r>  r?  r@  rA  rB  rC  r=  zcompute[042,044]Ú
compute042Ú
compute044zcompute[042-043,045,048-049])rD  Ú
compute043Ú
compute045Ú
compute048Ú
compute049©r;  Ú	hostnames©r˜   s    r#   Útest_slurm_node_listrM  �  sê  € Ü	  Ô	/°3Øˆ #§-¡-Ò/Ð/Ñ/÷ 
0ä	 Ð!8Ô	9¸SØ˜lÐ+¨s¯}©}Ò<Ð<Ñ<÷ 
:ä	 Ð!2Ô	3°sØ˜}Ð-°·±Ò>Ð>Ñ>÷ 
4ä	 Ð!6Ô	7¸3Ø Ð1°S·]±]ÒBÐBÑB÷ 
8ä	 Ð!2Ô	3°sÚ<ÀÇÁÒMÐMÑM÷ 
4ä	 Ð!8Ô	9¸Sò
ð �]‰]òð 	ñ ÷ 
:ô 
!Ð!8Ô	9¸Sò
ð �]‰]òð 	ñ ÷ 
:ô 
!Ð!CÔ	DÈò
ð �]‰]òð 	ñ ÷ 
Eô 
!Ð!3Ô	4¸Ø˜lÐ+¨s¯}©}Ò<Ð<Ñ<÷ 
5ä	 Ð!?Ô	@ÀCÚUÐY\×YfÑYfÒfÐfÑf÷ 
AÐ	@÷Q 
0Ñ	/úç	9Ñ	9úç	3Ñ	3úç	7Ñ	7úç	3Ñ	3úç	9Ð	9ú÷ 
:Ð	9ú÷ 
EÐ	Dú÷ 
5Ð	4úç	@Ð	@úsv   ŒF³FÁF+ÂF8Â+GÃGÃ;GÄ#G*ÅG6Å3HÆFÆF(Æ+F5Æ8GÇGÇGÇG'Ç*G3Ç6G?ÈHc                  ól   — t        d«      5 } g d¢| j                  k(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nz)compute-b24-[1-3,5-9],compute-b25-[1,4,8])zcompute-b24-1zcompute-b24-2zcompute-b24-3zcompute-b24-5zcompute-b24-6zcompute-b24-7zcompute-b24-8zcompute-b24-9zcompute-b25-1zcompute-b25-4zcompute-b25-8rJ  rL  s    r#   Ú)test_slurm_node_list_online_documentationrO  ®  s8   € Ü	 Ð!LÔ	MÐQTò
ð �]‰]òð 	ñ ÷ 
N×	MÑ	Mús   Œ*ª3c                  ó¸  — t        j                  t        j                  «      5  t	        d«      5 } t        | j                  «       d d d «       d d d «       t        j                  t        j                  «      5  t	        d«      5 } t        | j                  «       d d d «       d d d «       y # 1 sw Y   ŒgxY w# 1 sw Y   ŒkxY w# 1 sw Y   Œ*xY w# 1 sw Y   y xY w)Nzcompute-b2[1-,4]zcompute-b2[1,2,compute-b3])rN   rO   r   ÚSlurmParseExceptionr;  rÒ   rK  rL  s    r#   Útest_slurm_invalid_parserR  ¿  s“   € Ü	�‰”u×0Ñ0Õ	1Ü$Ð%7Ô8¸CÜ�#—-‘-Ô ÷ 9÷ 
2ô 
�‰”u×0Ñ0Õ	1Ü$Ð%AÔBÀcÜ�#—-‘-Ô ÷ C÷ 
2Ð	1÷ 9Ð8ú÷ 
2Ð	1ú÷ CÐBú÷ 
2Ð	1úsF   ¤B8°B,ÁB8Á9CÂCÂCÂ,B5	Â1B8Â8CÃC	Ã	CÃCc                  ó~   — t        d«      5 } | j                  g| j                  k(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)NrÊ   )r;  ÚhostnamerK  rL  s    r#   Útest_slurm_missing_node_listrU  È  s0   € Ü	  Ô	$¨Ø—‘ˆ~ §¡Ò.Ð.Ñ.÷ 
%×	$Ñ	$ús   Œ3³<Úweird_tmp_pathc                 ó`  — d| j                   v rt        j                  d«       t        «       5  t	        j
                  | ¬«      }|j                  t        j                  ddd¬«      }d d d «       j                  j                  j                  d«       |j                  j                  j                  d«       i }|j                  j                  j                  «       j                  «       D ]w  }|j!                  d	«      sŒd
|vrŒ|t#        d	«      d  j%                  «       j'                  d
d«      \  }}|j)                  d|j*                  «      j)                  dd«      ||<   Œy t-        j.                  d|d   z   d¬«       t-        j.                  d|d   z   d¬«       y # 1 sw Y   �Œ=xY w)NrË   z0test doesn't support newline in 'weird_tmp_path'rA   r   r   rC   rD   rÊ   z#SBATCHÚ=r   z%tÚ0zls z--outputT)Úshellrä   )r  rN   Úskipr/   r   rJ   rK   r	   rL   r   r   rÐ   r   rp   rq   rr   Ú
startswithÚlenrs   rm   r   r   Ú
subprocessÚ
check_call)rV  rV   r   Úsbatch_argsr|   ÚkeyÚvals          r#   Útest_slurm_weird_dirrc  Í  s[  € Øˆ~×"Ñ"Ñ"Ü�‰ÐFÔGÜ	�Ü×&Ñ&¨nÔ=ˆØ�o‰oœi×2Ñ2°A°qÀˆoÓCˆ÷ 
ð
 ‡I�I×Ñ×Ñ Ô#Ø‡I�I×Ñ×Ñ Ô#ð €KØ�Y‰Y×&Ñ&×0Ñ0Ó2×=Ñ=Ö?ˆØ�|‰|˜IÔ&ØØ�a‰<ØØ”S˜“^Ð%Ð&×,Ñ,Ó.×4Ñ4°S¸!Ó<‰ˆˆSØŸ;™; t¨S¯Z©ZÓ8×@Ñ@ÀÀsÓKˆ�CÒð @ô ×Ñ˜% +¨jÑ"9Ñ9ÀÕFÜ×Ñ˜% +¨iÑ"8Ñ8ÀÖE÷+ 
‰ús   ®:F#Æ#F-Úparamsrç   c                 óª  — t        «       5  t        j                  |¬«      } |j                  di | ¤dddii¤Ž |j	                  t
        j                  ddd¬«      }d d d «       j                  j                  j                  «       }|j                  «       D �cg c]	  }d	|v sŒ|‘Œ }}t        |«      dk(  s
J d
|› �«       ‚y # 1 sw Y   ŒhxY wc c}w )NrA   Úslurm_additional_parametersÚmem_per_gpurH   r   r   rC   rD   z#SBATCH --memzUnexpected lines: r`   )r/   rª   rê   rg   rK   r	   rL   r   rp   rq   rr   r]  )rd  r0   rV   r   Útextr   Ú	mem_liness          r#   Útest_slurm_through_autorj  è  sÀ   € ä	�Ü×(Ñ(°Ô9ˆØ"ˆ×"Ñ"Ñ] VÑ]È-ÐY[ÐI\Ó]Ø�o‰oœi×2Ñ2°A°qÀˆoÓCˆ÷ 
ð �9‰9×$Ñ$×.Ñ.Ó0€DØ ŸO™OÔ-ÓFÑ-�q°ÀAÒ1E’Ð-€IÐFÜˆy‹>˜QÒÐ@Ð"4°Y°KÐ @Ó@Ñ÷ 
ˆüò
 Gs   ‹ACÂ	CÂ%CÃCc                 ó:  — d„ }t        «       5 }t        j                  | ¬«      }|j                  |«      }t	        |d¬«       d|_        t        j                  t        j                  d¬«      5  |j                  «        d d d «       |j                  dd	«       |j                  |«      }d|_        t        j                  t        j                  d
¬«      5  |j                  «        d d d «       d d d «       y # 1 sw Y   ŒzxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nc                  ó   — t        d«      ‚)NzToo bad)r„   r`   rd   r#   Úfail_silentlyz/test_slurm_job_no_stderr.<locals>.fail_silentlyô  s   € Ü˜Ó#Ð#rd   rA   zjob is running ...
)r   r   zjob is running ...r¨   Ú13r;   z!No output/error stream produced !)r/   r   rJ   rK   r$   rM   rN   rO   r
   rP   rQ   r6   )r0   rm  r.   rV   r   s        r#   Útest_slurm_job_no_stderrro  ó  sÜ   € ò$ô 
Œ˜4Ü×&Ñ&¨hÔ7ˆà�o‰o˜mÓ,ˆÜ˜Ð$:Õ;Ø!"ˆÔÜ�]‰]œ5×4Ñ4Ð<PÖQØ×'Ñ'Ô)÷ Rð 	×Ñ˜4 Ô+Ø�o‰o˜mÓ,ˆØ!"ˆÔô �]‰]œ5×4Ñ4Ð<_Ö`Ø×'Ñ'Ô)÷ a÷ 
ˆ÷ RÐQú÷ aÐ`ú÷ 
ˆús=   ŽA!DÁ/C9Â ADÃDÃ(DÃ9D	Ã>DÄD	Ä
DÄDc                 óD  — t        «       5  t        j                  | ¬«      }|j                  ddidgdg¬«       |j	                  t
        j                  ddd	¬
«      }d d d «       j                  j                  j                  «       }d|v sJ ‚d|v sJ ‚y # 1 sw Y   Œ:xY w)NrA   rg  rH   zThis is a setup commandzThis is a teardown command)rf  Úslurm_setupÚslurm_teardownr   r   rC   rD   )
r/   rª   rê   rg   rK   r	   rL   r   rp   rq   )r0   rV   r   rh  s       r#   Ú/test_slurm_through_auto_with_setup_and_teardownrs  
  sŸ   € Ü	�Ü×(Ñ(°Ô9ˆØ×"Ñ"Ø)6¸Ð(;Ø2Ð3Ø8Ð9ð 	#ô 	
ð
 �o‰oœi×2Ñ2°A°qÀˆoÓCˆ÷ 
ð �9‰9×$Ñ$×.Ñ.Ó0€DØ$¨Ñ,Ð,Ð,Ø'¨4Ñ/Ð/Ñ/÷ 
ˆús   ‹ABÂB)rÊ   rÊ   )r   N)NF)HÚ
contextlibrT   r·   r^  ÚtypingÚtpÚpathlibr   Úunittest.mockr   rN   rª   rÊ   r   Úcorer   r   r	   r
   Ú	core.corer   r   ÚAnyr   r$   ÚcontextmanagerÚIteratorr(   r/   r9   r?   rW   ÚmarkÚparametrizeÚboolr~   rˆ   ÚOptionalri   r‘   r—   r›   r´   rº   r¾   rÝ   rá   rå   rî   rð   rÿ   r  ÚListÚTupleÚUnionr  r  r"  r.  r3  r5  r“   r;  rM  rO  rR  rU  rc  ÚDictrj  ro  rs  r`   rd   r#   Ú<module>r†     s×  ðó Û 	Û Û Û Ý Ý ã ã å ß @Ó @Ý Ý ñ˜˜RŸV™V™ð ¨cð Àð ÈTó ð ×Ñð'�b—k‘k )×"<Ñ"<Ñ=ò 'ó ð'ð&¨ð &°ó &óGðf Dð f¨Tó fð. ‡�×Ñ˜¨-Ó8ð 7¨tð  7¸tð  7Èò  7ó 9ð 7ðF; dð ;¨tó ;ð ×Ññ
7˜bŸk™k¨#Ñ.ð 
7À4ò 
7ó ð
7ð˜Cð  O×$AÑ$Aó ð'0¨Dð '0Èó '0ðT0°ð 0ÈTó 0ð<+ tð +°ó +ó 1ó:)ó
#ð
< Tð <¨dó <ð.¨4ð .°Dó .ó^ð ‡�×ÑØÒ]óð;˜sð ;¨3ð ;°4ò ;óð;ð ‡�×ÑØà	�ˆwˆØ	�'�ÐØ	˜˜Ð%Ø	Ò!EÐFØ	�g�YÐðó	ðJ˜Sð J¨B¯G©G°B·H±H¸R¿X¹XÀcÈ3ÀhÑ=OÐQTÐ=TÑ4UÑ,Vð JÐ[_ò Jó	ðJð
 ‡�×ÑØØ2Ð4`Ðaóð°ð ¸sð Àtò ó	ðó
Ró
+ó$"ó
1ð ×Ñð# sð #¨r¯{©{¸5×;TÑ;TÑ/Uò #ó ð#ó*góZó"!ó/ð
F¨ð F°$ó Fð6 ‡�×Ñ˜ B¨°4Ð(8Ð#9Ó:ðA B§G¡G¨C°¨HÑ$5ð AÀð AÈ$ò Aó ;ðAð* tð *°ó *ð.0¸dð 0Àtô 0rd   