a
    d=ic2                     @   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   o/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/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ListPlugins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_descriptionr0   tag_namer   r   r   r3   r)   r   r   result	run_entryr5   	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   r1   r   ZReadScalarsRequestr   r2   r3   r4   r)   rA   
num_pointsr   r   ZReadScalarsr'   r$   r5   r;   dataziprB   rC   rD   r   ZScalarDatumappendr   r   r   r3   rA   r)   r   r   r=   r>   r5   r?   seriesdrB   wtrD   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   r1   r   ZListTensorsRequestr   r2   r3   r4   r)   r   r   ZListTensorsr'   r$   r5   r6   r   ZTensorTimeSeriesr-   r.   r7   r8   r9   r:   r0   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+   )rB   rC   numpy)r   r1   r   ZReadTensorsRequestr   r2   r3   r4   r)   rA   rE   r   r   ZReadTensorsr'   r$   r5   r;   rF   rG   rB   rC   rD   r   ZTensorDatumr   Zmake_ndarrayrH   rI   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   r0   )r   r1   r   ZListBlobSequencesRequestr   r2   r3   r4   r)   r   r   ZListBlobSequencesr'   r$   r5   r6   r   ZBlobSequenceTimeSeriesr-   r.   rR   r7   r8   r9   r:   r0   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)rB   rC   values)r   r1   r   ZReadBlobSequencesRequestr   r2   r3   r4   r)   rA   rE   r   r   ZReadBlobSequencesr'   r$   r5   r;   rF   rG   rB   rC   rV   Z	blob_refsrH   r   ZBlobReferencerT   rU   ZBlobSequenceDatumtuple)r   r   r   r3   rA   r)   r   r   r=   r>   r5   r?   rJ   rK   rB   rL   Zblob_sequencerV   refrM   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)rF   )r   r   r   r   r	   	<genexpr>)  r!   z-GrpcDataProvider.read_blob.<locals>.<genexpr>)
r   r1   r   ZReadBlobRequestrT   r   listr   ZReadBlobjoin)r   r   rT   r   	responsesr   r   r	   	read_blob   s    $LzGrpcDataProvider.read_blob)N)NN)__name__
__module____qualname____doc__r   r   r   r#   r(   r   r1   r@   rN   rO   rQ   rS   rY   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 rZ   )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namesr5   )r)   Z	rtf_protor   r   r	   r4   :  s    

r4   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   )rc   
contextlibrd   Ztensorboard.utilr   r   Ztensorboardr   Ztensorboard.datar   Ztensorboard.data.protor   r   r
   ZDataProviderr   contextmanagerr   r4   r   r   r   r   r	   <module>   s      

