o
    rri                     @   s  d dl Z d dlZd dlmZ d dlmZmZ d dlZddlm	Z	 ddl
mZ ddlmZ dd	lmZ G d
d dZdeddfddZdeddfddZdeddfddZdeddfddZdefddZdeddfddZdeddfddZdeddfddZdS )    N)Path)AnyTuple   )utils)Job)JobEnvironment   )debugc                   @   s8   e Zd ZdZdeddfddZdededefd	d
ZdS )CheckFunctionz8Function used for checking that computations are correctnreturnNc                 C   s&   t t|| _t tdd| | _d S )N
   )listrangedata1data2)selfr    r   M/home/ubuntu/.local/lib/python3.10/site-packages/submitit/local/test_debug.py__init__   s   zCheckFunction.__init__xyc                 C   s$   || j v sJ || jv sJ || S N)r   r   )r   r   r   r   r   r   __call__   s   zCheckFunction.__call__)__name__
__module____qualname____doc__intr   floatr   r   r   r   r   r      s    r   tmp_pathr   c                 C   s   dt dt fdd}t| }||d}| dksJ |  ||d}W d    n1 s1w   Y  | dks>J d | _| dksKJ d S )	Npr   c                 S   s   d|  S )Nr   r   )r"   r   r   r   func"      ztest_debug_job.<locals>.func         r   )r   r
   DebugExecutorsubmitresultbatch
submissionfunction)r!   r#   executorjobjob2r   r   r   test_debug_job!   s   


r1   c                 C   sf   t d}t| }|||j|j}tt|d  t| tt	||j|jdd |D ks1J d S )Nr'   r   c                 S      g | ]}|  qS r   r*   .0jr   r   r   
<listcomp>6       z(test_debug_map_array.<locals>.<listcomp>)
r   r
   r(   	map_arrayr   r   printtyper   map)r!   gr.   jobsr   r   r   test_debug_map_array0   s   
*r?   c                    sb   t d t| } fddt j jD }||}tt  j jdd |D ks/J d S )Nr'   c                    s   g | ]\}}t  ||qS r   )	functoolspartial)r5   r   r   r=   r   r   r7   <   s    z+test_debug_submit_array.<locals>.<listcomp>c                 S   r2   r   r3   r4   r   r   r   r7   >   r8   )	r   r
   r(   zipr   r   submit_arrayr   r<   )r!   r.   fnsr>   r   rB   r   test_debug_submit_array9   s
   

*rF   c                 C   sN   ddd}t | }||}| }t|tsJ |jd }d|v s%J d S )Nr   c                   S   s   t d)NFailed on purpose)RuntimeErrorr   r   r   r   failing_jobB   r$   z%test_debug_error.<locals>.failing_jobr   rG   )r   N)r
   r(   r)   	exception
isinstancerH   args)r!   rI   r.   r/   rJ   messager   r   r   test_debug_errorA   s   



rN   c                   C   s   dS )N*   r   r   r   r   r   f_42M   s   rP   c                 C   s   dt dtttf fdd}t| }dD ]+}|t}|jdks"J ||dks*J t	||  |jdks7J ||d	ks?J qd S )
Nr/   r   c                 S   s    t | tjsJ | jj| jjfS r   )rK   r
   DebugJob_submission_done_result)r/   r   r   r   
get_resultR   s   z(test_debug_triggered.<locals>.get_result)waitdonerJ   resultsQUEUED)FNDONE)TrO   )
r   r   boolr   r
   r(   r)   rP   stategetattr)r!   rU   r.   triggerr/   r   r   r   test_debug_triggeredQ   s   

r_   c                 C   sv   t | }|t}|jdksJ |  |jdksJ tjtj	dd |
  W d    d S 1 s4w   Y  d S )NrY   	CANCELLEDzwas cancelled)match)r
   r(   r)   rP   r\   cancelpytestraisesr   UncompletedJobErrorr*   )r!   r.   r/   r   r   r   test_cancel`   s   


"rf   c                 C   s6   t | }dd }||}|  dtjvsJ d S )Nc                  S   s^   t  } | jdks
J | jdksJ | jdksJ | jdksJ | jdks&J d| jv s-J d S )Nr	   r   DEBUG)r   	num_nodes	num_tasksnodeglobal_rank
local_rankjob_id)envr   r   r   use_envm   s   z%test_job_environment.<locals>.use_envSUBMITIT_DEBUG_JOB_ID)r
   r(   r)   r*   osenviron)r!   r.   ro   r/   r   r   r   test_job_environmentj   s
   

	rs   )r@   rq   pathlibr   typingr   r   rc   corer   	core.corer   core.job_environmentr    r
   r   r1   r?   rF   rN   r   rP   r_   rf   rs   r   r   r   r   <module>   s$   	
