B
    ®»ˆd½2  ã               @   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   úP/var/www/html/venv/lib/python3.7/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   sN   t  ¡ }||_tƒ  | j |¡}W d Q R X 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   s<   t  ¡ }||_tƒ  | j |¡}W d Q R X dd„ |jD ƒS )Nc             S   s   g | ]
}|j ‘qS r   )r   )Ú.0Úpr   r   r	   ú
<listcomp>F   s    z1GrpcDataProvider.list_plugins.<locals>.<listcomp>)r   ZListPluginsRequestr   r   r   ZListPluginsÚplugins)r   r   r   r   r   r   r   r	   Úlist_pluginsA   s
    zGrpcDataProvider.list_pluginsc         	   C   s<   t  ¡ }||_tƒ  | j |¡}W d Q R X 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   N   s   z.GrpcDataProvider.list_runs.<locals>.<listcomp>)r   ZListRunsRequestr   r   r   ZListRunsÚruns)r   r   r   r   r   r   r   r	   Ú	list_runsH   s    zGrpcDataProvider.list_runsN)Úrun_tag_filterc         
   C   sê   t  d¡( t ¡ }||_||j_t||jƒ W d Q R X t  d¡$ t	ƒ  | j
 |¡}W d Q R X W d Q R X t  d¡j i }x^|jD ]T}i }	|	||j< x@|jD ]6}
|
j}tj|j|j|jjj|jj|jjd|	|
j< qžW q„W |S Q R X d S )Nzbuild requestz_stub.ListScalarsz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   r.   r'   r   r   ÚresultÚ	run_entryr0   Ú	tag_entryÚtime_seriesr   r   r	   Úlist_scalarsV   s,     
zGrpcDataProvider.list_scalars)Ú
downsampler'   c         
   C   s  t  d¡0 t ¡ }||_||j_t||jƒ ||j	_
W d Q R X t  d¡$ tƒ  | j |¡}W d Q R X W d Q R X t  d¡ˆ i }x||jD ]r}	i }
|
||	j< x^|	jD ]T}g }||
|j< |j}x:t|j|j|jƒD ]$\}}}tj|||d}| |¡ qÒW q¦W qŒW |S Q R X d S )Nzbuild requestz_stub.ReadScalarszbuild result)ÚstepÚ	wall_timeÚvalue)r   r,   r   ZReadScalarsRequestr   r-   r.   r/   r'   r<   Ú
num_pointsr   r   ZReadScalarsr%   r"   r0   r6   ÚdataÚzipr=   r>   r?   r   ZScalarDatumÚappend)r   r   r   r.   r<   r'   r   r   r7   r8   r0   r9   ÚseriesÚdr=   Úwtr?   Úpointr   r   r	   Úread_scalarsr   s2    
 

zGrpcDataProvider.read_scalarsc         
   C   sê   t  d¡( t ¡ }||_||j_t||jƒ W d Q R X t  d¡$ t	ƒ  | j
 |¡}W d Q R X W d Q R X t  d¡j i }x^|jD ]T}i }	|	||j< x@|jD ]6}
|
j}tj|j|j|jjj|jj|jjd|	|
j< qžW q„W |S Q R X d S )Nzbuild requestz_stub.ListTensorszbuild result)r(   r)   r*   r   r+   )r   r,   r   ZListTensorsRequestr   r-   r.   r/   r'   r   r   ZListTensorsr%   r"   r0   r1   r   ZTensorTimeSeriesr(   r)   r2   r3   r4   r5   r+   r6   )r   r   r   r.   r'   r   r   r7   r8   r0   r9   r:   r   r   r	   Úlist_tensors—   s,     
zGrpcDataProvider.list_tensorsc         
   C   s  t  d¡0 t ¡ }||_||j_t||jƒ ||j	_
W d Q R X t  d¡$ tƒ  | j |¡}W d Q R X W d Q R X t  d¡Ž i }x‚|jD ]x}	i }
|
||	j< xd|	jD ]Z}g }||
|j< |j}x@t|j|j|jƒD ]*\}}}tj||t |¡d}| |¡ qÒW q¦W qŒW |S Q R X d S )Nzbuild requestz_stub.ReadTensorszbuild result)r=   r>   Únumpy)r   r,   r   ZReadTensorsRequestr   r-   r.   r/   r'   r<   r@   r   r   ZReadTensorsr%   r"   r0   r6   rA   rB   r=   r>   r?   r   ZTensorDatumr   Zmake_ndarrayrC   )r   r   r   r.   r<   r'   r   r   r7   r8   r0   r9   rD   rE   r=   rF   r?   rG   r   r   r	   Úread_tensors³   s2    
 

zGrpcDataProvider.read_tensorsc             C   sî   t  d¡( t ¡ }||_||j_t||jƒ W d Q R X t  d¡$ t	ƒ  | j
 |¡}W d Q R X W d Q R X t  d¡n i }xb|jD ]X}i }	|	||j< xD|jD ]:}
|
j}tj|j|j|j|jjj|jj|jjd|	|
j< qžW q„W |S Q R X d S )Nzbuild requestz_stub.ListBlobSequenceszbuild result)r(   r)   Ú
max_lengthr*   r   r+   )r   r,   r   ZListBlobSequencesRequestr   r-   r.   r/   r'   r   r   ZListBlobSequencesr%   r"   r0   r1   r   ZBlobSequenceTimeSeriesr(   r)   rL   r2   r3   r4   r5   r+   r6   )r   r   r   r.   r'   r   r   r7   r8   r0   r9   r:   r   r   r	   Úlist_blob_sequencesØ   s.     
z$GrpcDataProvider.list_blob_sequencesc             C   sF  t  d¡0 t ¡ }||_||j_t||jƒ ||j	_
W d Q R X t  d¡$ tƒ  | j |¡}W d Q R X W d Q R X t  d¡¾ i }x²|jD ]¨}	i }
|
||	j< x”|	jD ]Š}g }||
|j< |j}xpt|j|j|jƒD ]Z\}}}g }x,|jD ]"}| tj|j|jpd d¡ qèW tj||t|ƒd}| |¡ qÒW q¦W qŒW |S Q R X d S )Nzbuild requestz_stub.ReadBlobSequenceszbuild result)Úblob_keyÚurl)r=   r>   Úvalues)r   r,   r   ZReadBlobSequencesRequestr   r-   r.   r/   r'   r<   r@   r   r   ZReadBlobSequencesr%   r"   r0   r6   rA   rB   r=   r>   rP   Z	blob_refsrC   r   ZBlobReferencerN   rO   ZBlobSequenceDatumÚtuple)r   r   r   r.   r<   r'   r   r   r7   r8   r0   r9   rD   rE   r=   rF   Zblob_sequencerP   ÚrefrG   r   r   r	   Úread_blob_sequencesõ   s:    	 

z$GrpcDataProvider.read_blob_sequencesc          
   C   s†   t  d¡ t ¡ }||_W d Q R X t  d¡( tƒ  t| j |¡ƒ}W d Q R X W d Q R X t  d¡ d 	dd„ |D ƒ¡S Q R X d S )Nzbuild requestzlist(_stub.ReadBlob)zbuild resultó    c             s   s   | ]}|j V  qd S )N)rA   )r   r   r   r   r	   ú	<genexpr>)  s    z-GrpcDataProvider.read_blob.<locals>.<genexpr>)
r   r,   r   ZReadBlobRequestrN   r   Úlistr   ZReadBlobÚjoin)r   r   rN   r   Ú	responsesr   r   r	   Ú	read_blob   s    $zGrpcDataProvider.read_blob)N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r!   r&   r   r,   r;   rH   rI   rK   rM   rS   rY   r   r   r   r	   r   "   s,    $r   c           
   c   s   y
d V  W n€ t jk
rŠ }  z`|  ¡ t jjkr<t |  ¡ ¡‚|  ¡ t jjkrZt 	|  ¡ ¡‚|  ¡ t jj
krxt |  ¡ ¡‚‚ W d d } ~ X Y nX d S )N)Ú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krdS | j dk	r,t| j ƒ|j jdd…< | jdk	rLt| jƒ|jjdd…< dS )z)Copies `run_tag_filter` into `rtf_proto`.N)r%   ÚsortedÚnamesr0   )r'   Z	rtf_protor   r   r	   r/   :  s    

r/   c             C   s   |   ¡ d S )z@Converts `timestamp_pb2.Timestamp` to float seconds since epoch.g    eÍÍA)ZToNanoseconds)Útsr   r   r	   r   D  s    r   )r]   Ú
contextlibr^   Ztensorboard.utilr   r   Ztensorboardr   Ztensorboard.datar   Ztensorboard.data.protor   r   r
   ZDataProviderr   Úcontextmanagerr   r/   r   r   r   r   r	   Ú<module>   s     
