a
    
d2                     @   s   d Z ddl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	 ddl
mZ ddl
mZ d	d
 ZG dd de	jZejdd Zdd Zdd ZdS )z,A data provider that talks to a gRPC server.    N)tensor_util)timing)errors)provider)data_provider_pb2)data_provider_pb2_grpcc                 C   s
   t | S )z)Wraps a gRPC channel with a service stub.)r   ZTensorBoardDataProviderStub)Zchannel r   g/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/tensorboard/data/grpc_provider.py	make_stub   s    r
   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	j
ddddZe	j
dddddZe	j
ddddZe	j
dddddZe	j
dddZe	j
dddZe	j
dd ZdS )GrpcDataProviderz#Data provider that talks over gRPC.c                 C   s   || _ || _dS )a$  Initializes a GrpcDataProvider.

        Args:
          addr: String address of the remote peer. Used cosmetically for
            data location.
          stub: `data_provider_pb2_grpc.TensorBoardDataProviderStub`
            value. See `make_stub` to construct one from a channel.
        N)_addr_stub)selfaddrZstubr   r   r	   __init__%   s    	zGrpcDataProvider.__init__c                 C   s
   d| j  S )NzGrpcDataProvider(addr=%r))r   )r   r   r   r	   __str__1   s    zGrpcDataProvider.__str__c                C   sb   t  }||_t  | j|}W d    n1 s60    Y  tj|j|j	|j
t|jd}|S )N)data_locationZexperiment_nameZexperiment_descriptioncreation_time)r   ZGetExperimentRequestexperiment_id_translate_grpc_errorr   ZGetExperimentr   ZExperimentMetadatar   namedescription_timestamp_proto_to_floatr   r   ctxr   reqresr   r   r	   experiment_metadata4   s    *z$GrpcDataProvider.experiment_metadatac                C   sP   t  }||_t  | j|}W d    n1 s60    Y  dd |jD S )Nc                 S   s   g | ]
}|j qS r   )r   ).0pr   r   r	   
<listcomp>F       z1GrpcDataProvider.list_plugins.<locals>.<listcomp>)r   ZListPluginsRequestr   r   r   ZListPluginsZpluginsr   r   r   r	   list_pluginsA   s
    *zGrpcDataProvider.list_pluginsc                C   sP   t  }||_t  | j|}W d    n1 s60    Y  dd |jD S )Nc                 S   s"   g | ]}t j|j|j|jd qS ))Zrun_idrun_name
start_time)r   ZRunr   r$   )r   runr   r   r	   r    M   s   z.GrpcDataProvider.list_runs.<locals>.<listcomp>)r   ZListRunsRequestr   r   r   ZListRunsrunsr   r   r   r	   	list_runsH   s    *zGrpcDataProvider.list_runsN)run_tag_filterc             
   C   s8  t d2 t }||_||j_t||j W d    n1 sB0    Y  t dB t	  | j
|}W d    n1 s0    Y  W d    n1 s0    Y  t dp i }|jD ]P}i }	|	||j< |jD ]6}
|
j}tj|j|j|jjj|jj|jjd|	|
j< qq|W  d    S 1 s*0    Y  d S )Nbuild requestz_stub.ListScalarsbuild resultmax_stepmax_wall_timeplugin_contentr   display_name)r   log_latencyr   ZListScalarsRequestr   plugin_filterplugin_name_populate_rtfr(   r   r   ZListScalarsr&   r#   tagsmetadatar   ZScalarTimeSeriesr,   r-   summary_metadataplugin_datacontentsummary_descriptionr/   tag_namer   r   r   r2   r(   r   r   result	run_entryr4   	tag_entryZtime_seriesr   r   r	   list_scalarsV   s.    *H


zGrpcDataProvider.list_scalars)
downsampler(   c             	   C   s\  t d: t }||_||j_t||j ||j	_
W d    n1 sJ0    Y  t dB t  | j|}W d    n1 s0    Y  W d    n1 s0    Y  t d i }|jD ]l}	i }
|
||	j< |	jD ]R}g }||
|j< |j}t|j|j|jD ]&\}}}tj|||d}|| qqq|W  d    S 1 sN0    Y  d S )Nr)   z_stub.ReadScalarsr*   )step	wall_timevalue)r   r0   r   ZReadScalarsRequestr   r1   r2   r3   r(   r@   
num_pointsr   r   ZReadScalarsr&   r#   r4   r:   dataziprA   rB   rC   r   ZScalarDatumappendr   r   r   r2   r@   r(   r   r   r<   r=   r4   r>   seriesdrA   wtrC   pointr   r   r	   read_scalarsr   s4    
&H



zGrpcDataProvider.read_scalarsc             
   C   s8  t d2 t }||_||j_t||j W d    n1 sB0    Y  t dB t	  | j
|}W d    n1 s0    Y  W d    n1 s0    Y  t dp i }|jD ]P}i }	|	||j< |jD ]6}
|
j}tj|j|j|jjj|jj|jjd|	|
j< qq|W  d    S 1 s*0    Y  d S )Nr)   z_stub.ListTensorsr*   r+   )r   r0   r   ZListTensorsRequestr   r1   r2   r3   r(   r   r   ZListTensorsr&   r#   r4   r5   r   ZTensorTimeSeriesr,   r-   r6   r7   r8   r9   r/   r:   r;   r   r   r	   list_tensors   s.    *H


zGrpcDataProvider.list_tensorsc             
   C   sb  t d: t }||_||j_t||j ||j	_
W d    n1 sJ0    Y  t dB t  | j|}W d    n1 s0    Y  W d    n1 s0    Y  t d i }|jD ]r}	i }
|
||	j< |	jD ]X}g }||
|j< |j}t|j|j|jD ],\}}}tj||t|d}|| qqq|W  d    S 1 sT0    Y  d S )Nr)   z_stub.ReadTensorsr*   )rA   rB   numpy)r   r0   r   ZReadTensorsRequestr   r1   r2   r3   r(   r@   rD   r   r   ZReadTensorsr&   r#   r4   r:   rE   rF   rA   rB   rC   r   ZTensorDatumr   Zmake_ndarrayrG   rH   r   r   r	   read_tensors   s4    
&H



zGrpcDataProvider.read_tensorsc                 C   s<  t d2 t }||_||j_t||j W d    n1 sB0    Y  t dB t	  | j
|}W d    n1 s0    Y  W d    n1 s0    Y  t dt i }|jD ]T}i }	|	||j< |jD ]:}
|
j}tj|j|j|j|jjj|jj|jjd|	|
j< qq|W  d    S 1 s.0    Y  d S )Nr)   z_stub.ListBlobSequencesr*   )r,   r-   
max_lengthr.   r   r/   )r   r0   r   ZListBlobSequencesRequestr   r1   r2   r3   r(   r   r   ZListBlobSequencesr&   r#   r4   r5   r   ZBlobSequenceTimeSeriesr,   r-   rQ   r6   r7   r8   r9   r/   r:   r;   r   r   r	   list_blob_sequences   s0    *H


z$GrpcDataProvider.list_blob_sequencesc                 C   s  t d: t }||_||j_t||j ||j	_
W d    n1 sJ0    Y  t dB t  | j|}W d    n1 s0    Y  W d    n1 s0    Y  t d i }|jD ]}	i }
|
||	j< |	jD ]}g }||
|j< |j}t|j|j|jD ]Z\}}}g }|jD ]$}|tj|j|jp6d d qtj||t|d}|| qqq|W  d    S 1 s0    Y  d S )Nr)   z_stub.ReadBlobSequencesr*   )blob_keyurl)rA   rB   values)r   r0   r   ZReadBlobSequencesRequestr   r1   r2   r3   r(   r@   rD   r   r   ZReadBlobSequencesr&   r#   r4   r:   rE   rF   rA   rB   rU   Z	blob_refsrG   r   ZBlobReferencerS   rT   ZBlobSequenceDatumtuple)r   r   r   r2   r@   r(   r   r   r<   r=   r4   r>   rI   rJ   rA   rK   Zblob_sequencerU   refrL   r   r   r	   read_blob_sequences   sB    	&H





z$GrpcDataProvider.read_blob_sequencesc              	   C   s   t d t }||_W d    n1 s.0    Y  t dF t   t| j|}W d    n1 sp0    Y  W d    n1 s0    Y  t d$ d	dd |D W  d    S 1 s0    Y  d S )Nr)   zlist(_stub.ReadBlob)r*   r!   c                 s   s   | ]}|j V  qd S N)rE   )r   r   r   r   r	   	<genexpr>)  r!   z-GrpcDataProvider.read_blob.<locals>.<genexpr>)
r   r0   r   ZReadBlobRequestrS   r   listr   ZReadBlobjoin)r   r   rS   r   	responsesr   r   r	   	read_blob   s    $LzGrpcDataProvider.read_blob)N)NN)__name__
__module____qualname____doc__r   r   r   r"   r'   r   r0   r?   rM   rN   rP   rR   rX   r^   r   r   r   r	   r   "   s:   $$   *r   c               
   c   s   z
d V  W n t jy }  zh|  t jjkr:t|  |  t jjkrXt	|  |  t jj
krvt|   W Y d } ~ n
d } ~ 0 0 d S rY   )grpcZRpcErrorcodeZ
StatusCodeZINVALID_ARGUMENTr   ZInvalidArgumentErrordetails	NOT_FOUNDZNotFoundErrorZPERMISSION_DENIEDZPermissionDeniedError)er   r   r	   r   ,  s    
r   c                 C   sP   | du rdS | j dur,t| j |j jdd< | jdurLt| j|jjdd< dS )z)Copies `run_tag_filter` into `rtf_proto`.N)r&   sortednamesr4   )r(   Z	rtf_protor   r   r	   r3   :  s    

r3   c                 C   s   |   d S )z@Converts `timestamp_pb2.Timestamp` to float seconds since epoch.g    eA)ZToNanoseconds)tsr   r   r	   r   D  s    r   )rb   
contextlibrc   Ztensorboard.utilr   r   Ztensorboardr   Ztensorboard.datar   Ztensorboard.data.protor   r   r
   ZDataProviderr   contextmanagerr   r3   r   r   r   r   r	   <module>   s      

