U
    /e                     @  s   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	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZ d d
lmZ d dlmZ G dd deZedd Zedd Zedd Z dS )    )annotationsN)without_property_validation)BasicTickerColumnDataSource	HoverToolNumeralTickFormatterOpenURLTapTool)figure)escapeformat_bytes)DashboardComponentadd_periodic_callback)BOKEH_THEME
TICKS_1024env)update)
log_errorsc                   @  s.   e Zd ZdZedddZeedd ZdS )	GPUCurrentLoadz!How many tasks are on each workerX  c           
      K  s  d| _ || _tddgddgddgddgddgddgddgddgddgd		| _tf d
dt|d dd|}|j| jdddddd}d |_tf ddt|d dd|}|j| jdddddd}d |_tf t	|j
d _tdd|jd _tj d |j_d|j_||fD ]F}d|j_d|j_d|j_ttddd}|| d |_d|j_qt }	d|	_d|	_||	 t }	d |	_d|	_||	 || _|| _ |j!| j _!d| j j_d!| j j_"d S )"Nr         g      ?Z1BZ2Bab	memorymemory-halfmemory_textutilizationutilization-halfworkerz	gpu-indexyZescaped_workerz
GPU Memory Zgpu_memory_histogram)titleZtoolswidthnamer   r"   r   z#76B900)sourcexr"   r%   heightcolorzGPU UtilizationZgpu_utilization_histogramr    r   z0.0 b)format   Fz"./info/worker/@escaped_worker.html)url)callbackz@worker : @utilization %Zfollow_mousez@worker : @memory_textd   )#last	schedulerr   r'   r
   intrectZnonselection_glyphr   r   ZaxisZtickerr   Zxaxis	formattermathpiZmajor_label_orientationx_rangestartZminor_tick_line_alphaZyaxisZvisibleZygridr	   r   Z	add_toolsZtoolbar_locationr   ZtooltipsZpoint_policymemory_figureutilization_figureZy_rangeend)
selfr1   r%   kwargsr   r3   r   ZfigZtapZhover r>   I/tmp/pip-unpacked-wheel-g426oqom/distributed/dashboard/components/nvml.py__init__   s    






zGPUCurrentLoad.__init__c              
   C  sN  t | jj }g }g }g }g }d}d}g }t|D ]\}	}
z|
jd }W n tk
rb   Y q4Y nX |
jd }|d }|d }|d }t||}||7 }|	t
| |	| |	|
j |	|	 |	|	 q4dd |D }|dd |D ||d	d |D |||d
d |D d	}dtt|t|| jj_|| jj_t| j| d S )Nr   Zgpur   zmemory-usedzmemory-totalc                 S  s   g | ]}t |qS r>   r   .0mr>   r>   r?   
<listcomp>   s     z)GPUCurrentLoad.update.<locals>.<listcomp>c                 S  s   g | ]}|d  qS r   r>   rA   r>   r>   r?   rD      s     c                 S  s   g | ]}|d  qS rE   r>   )rB   ur>   r>   r?   rD      s     c                 S  s   g | ]}t |qS r>   )r   Z
url_escape)rB   wr>   r>   r?   rD      s     r   zGPU Memory: {} / {})listr1   workersvalues	enumerateextraKeyErrormetricsmaxappendr2   addressr+   r   sumr9   r$   textr7   r;   r   r'   )r<   rI   r   r   Z	gpu_indexr"   Zmemory_totalZ
memory_maxr!   idxwsinforN   rF   Zmem_usedZ	mem_totalr   resultr>   r>   r?   r   q   sR    







zGPUCurrentLoad.updateN)r   )__name__
__module____qualname____doc__r   r@   r   r   r>   r>   r>   r?   r      s   Tr   c                 C  s6   t | dd}|  t||d ||j t|_d S Nstretch_bothZsizing_moder/   )r   r   r   add_rootr9   r   themer1   rL   docZgpu_loadr>   r>   r?   gpu_memory_doc   s
    rc   c                 C  s6   t | dd}|  t||d ||j t|_d S r\   )r   r   r   r_   r:   r   r`   ra   r>   r>   r?   gpu_utilization_doc   s
    rd   c                 C  s`   t | dd}|  t||d ||j ||j d|_t|_t	
d|_|j| d S )Nr]   r^   r/   z	Dask: GPUzgpu.html)r   r   r   r_   r9   r:   r$   r   r`   r   Zget_templatetemplateZtemplate_variablesra   r>   r>   r?   gpu_doc   s    rf   )!
__future__r   r5   Zbokeh.core.propertiesr   Zbokeh.modelsr   r   r   r   r   r	   Zbokeh.plottingr
   Ztornador   Z
dask.utilsr   Z distributed.dashboard.componentsr   r   Z*distributed.dashboard.components.schedulerr   r   r   Zdistributed.dashboard.utilsr   Zdistributed.utilsr   r   rc   rd   rf   r>   r>   r>   r?   <module>   s$     

