B
    F.\%                 @   s   d dl mZmZm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 dlmZmZ dd Zejjed	d
 Zejjedd Zejjedd Zejjedd Zejjedd Zejjedd Zejjedd ZdS )    )print_functiondivisionabsolute_importN)first)Client)clustermock_ipython)loopzmq_ctxc             C   sX   ydd l }dd l}W n  tk
r4   tjd| S X tjdkrPtjd| S | S d S )Nr   z+need ipykernel and jupyter_client installed)   z$IPython kernel broken with Tornado 5)	ipykerneljupyter_clientImportErrorpytestmarkskiptornadoversion_info)funcr   r    r   =lib/python3.7/site-packages/distributed/tests/test_ipython.pyneed_functional_ipython   s    
r   c          
   C   s   ddl m} td\}\}t|d | d}| }t| }|d}|f |}	||	j_	|	
  |	jdd |	d	}
|	jdd}|d
 d |
kst|d d dkst|	  W d Q R X W d Q R X d S )Nr   )BlockingKernelClient   address)r	   key
   )timeoutworkerZparent_headermsg_idZcontentZstatusok)r   r   r   r   start_ipython_workersr   valuespopsessionr   start_channelsZwait_for_readyexecuteget_shell_msgAssertionErrorstop_channels)r	   r
   r   sae	info_dictinfor   kcr   replyr   r   r   test_start_ipython_workers   s    


r1   c          
   C   s   ddl m} tdr\}\}t|d | dP}| }|d}|f |}||j_|  |	d}	|j
dd	}
|  W d Q R X W d Q R X d S )
Nr   )r   r   r   )r	   r   	schedulerr   )r   )r   r   r   r   start_ipython_schedulerr#   r$   r   r%   r&   r'   r)   )r	   r
   r   r*   r+   r,   r.   r   r/   r   r0   r   r   r   test_start_ipython_scheduler0   s    


r4   c       
      C   s   t d\}\}t|d | d }t }| }W d Q R X W d Q R X ddddddg}dd	 |jjD }||ksxt|jjd
 d
 d
 }	|	ddd W d Q R X d S )Nr   r   )r	   liner2   )
magic_kind
magic_namecellc             S   s   g | ]\}}|qS r   r   ).0argskwargsr   r   r   
<listcomp>M   s    z6test_start_ipython_scheduler_magic.<locals>.<listcomp>r    )r5   r8   )r   r   r   r3   register_magic_functioncall_args_listr(   )
r	   r
   r*   r+   r,   ipr.   expectedcall_kwargs_listmagicr   r   r   "test_start_ipython_scheduler_magicA   s    rD   c             C   s"  t d\}\}}t|d | dP}t >}t| d d }dd tt|D }|j||d}	W d Q R X W d Q R X ddd	d
dd	ddd	d
dd	ddd	d
dd	g}
dd |jj	D }||
kst
|jjdkst
dd |jj	dd  D }|d ddd dd |D  W d Q R X d S )N   r   )r	   c             S   s   g | ]}d | qS )zmagic%ir   )r9   ir   r   r   r<   Z   s    z4test_start_ipython_workers_magic.<locals>.<listcomp>)magic_namesr5   remote)r6   r7   r8   Zmagic0Zmagic1c             S   s   g | ]\}}|qS r   r   )r9   r:   r;   r   r   r   r<   e   s       c             S   s   g | ]}|d  d  qS )r   r   )r9   r:   r   r   r   r<   h   s    r=   r   )r5   r8   c             S   s   g | ]}|j  qS r   )clientr)   )r9   mr   r   r   r<   j   s    )r   r   r   listncoresrangelenr!   r>   r?   r(   
call_count)r	   r
   r*   r+   br,   r@   workersnamesr-   rA   rB   magicsr   r   r    test_start_ipython_workers_magicS   s"    "rV   c             C   s
  t d\}\}}t|d | d:}t (}t| d d }|j|dd}W d Q R X W d Q R X dddd	dddd
dd	d
ddddd	ddg}	dd |jjD }
|
|	kst|jj	dkstdd |jjdd  D }|d ddd dd |D  W d Q R X d S )NrE   r   )r	   zmagic_*)rG   r5   rH   )r6   r7   r8   Zmagic_0Zmagic_1c             S   s   g | ]\}}|qS r   r   )r9   r:   r;   r   r   r   r<   ~   s    z<test_start_ipython_workers_magic_asterix.<locals>.<listcomp>rI   c             S   s   g | ]}|d  d  qS )r   r   )r9   r:   r   r   r   r<      s    rJ   r=   r   )r5   r8   c             S   s   g | ]}|j  qS r   )rK   r)   )r9   rL   r   r   r   r<      s    )
r   r   r   rM   rN   r!   r>   r?   r(   rQ   )r	   r
   r*   r+   rR   r,   r@   rS   r-   rA   rB   rU   r   r   r   (test_start_ipython_workers_magic_asterixm   s     "rW   c       	      C   s   ddl m} td\}\}t|d | dJ}t 8}t| }||| |jd< |d |dd W d Q R X W d Q R X |fd	d
df|fdd
dfg}|j	j
|kst|j	jdkstW d Q R X d S )Nr   )remote_magicr   r   )r	   r.   zinfo 1r   r5   rH   )r6   r7   r8   rE   )Zdistributed._ipython_utilsrX   r   r   r   r   rN   r!   Zuser_nsr>   r?   r(   rQ   )	r	   r
   rX   r*   r+   r,   r@   r   rA   r   r   r   test_start_ipython_remote   s    rY   c       	      C   s   t  }t n\}\}}t d|N t|d | d2}t| }|j|dd |j|ddgd W d Q R X W d Q R X W d Q R X |jdkst	|j
d	 \\}}|d d
 dddgkst	|j
d \\}}|dd  dgkst	d S )Nz distributed._ipython_utils.Popenr   )r	   T)	qtconsolez--debug)rZ   Zqtconsole_argsrE   r      ZjupyterrZ   z
--existingr   rJ   )mockZMockr   Zpatchr   r   rN   r!   rQ   r(   r?   )	r	   Popenr*   r+   rR   r,   r   cmdr;   r   r   r   test_start_ipython_qtconsole   s     0r_   )Z
__future__r   r   r   r\   r   Ztoolzr   r   Zdistributedr   Zdistributed.utils_testr   r   r	   r
   r   r   Zipythonr1   r4   rD   rV   rW   rY   r_   r   r   r   r   <module>   s,   