o
    e2                     @   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   ND:\Projects\ConvertPro\env\Lib\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 sw   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   P   t  }||_t  | j|}W d    n1 sw   Y  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pluginsr   r   r   r	   list_pluginsA   s   zGrpcDataProvider.list_pluginsc                C   r   )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   6  t d t }||_||j_t||j W d    n1 s!w   Y  t d! t	  | j
|}W d    n1 s@w   Y  W d    n1 sOw   Y  t d8 i }|jD ](}i }	|	||j< |jD ]}
|
j}tj|j|j|jjj|jj|jjd|	|
j< qkq_|W  d    S 1 sw   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_descriptionr1   tag_namer   r   r   r4   r)   r   r   result	run_entryr6   	tag_entryZtime_seriesr   r   r	   list_scalarsV   :   


	$zGrpcDataProvider.list_scalars)
downsampler)   c             	   C   sX  t d t }||_||j_t||j ||j	_
W d    n1 s%w   Y  t d! t  | j|}W d    n1 sDw   Y  W d    n1 sSw   Y  t dE i }|jD ]5}	i }
|
||	j< |	jD ](}g }||
|j< |j}t|j|j|jD ]\}}}tj|||d}|| qqoqc|W  d    S 1 sw   Y  d S )Nr+   z_stub.ReadScalarsr,   )step	wall_timevalue)r   r2   r   ZReadScalarsRequestr   r3   r4   r5   r)   rC   
num_pointsr   r   ZReadScalarsr'   r$   r6   r<   dataziprD   rE   rF   r   ZScalarDatumappendr   r   r   r4   rC   r)   r   r   r>   r?   r6   r@   seriesdrD   wtrF   pointr   r   r	   read_scalarsr   sB   





$zGrpcDataProvider.read_scalarsc             
   C   r*   )Nr+   z_stub.ListTensorsr,   r-   )r   r2   r   ZListTensorsRequestr   r3   r4   r5   r)   r   r   ZListTensorsr'   r$   r6   r7   r   ZTensorTimeSeriesr.   r/   r8   r9   r:   r;   r1   r<   r=   r   r   r	   list_tensors   rB   zGrpcDataProvider.list_tensorsc             
   C   s^  t d t }||_||j_t||j ||j	_
W d    n1 s%w   Y  t d! t  | j|}W d    n1 sDw   Y  W d    n1 sSw   Y  t dH i }|jD ]8}	i }
|
||	j< |	jD ]+}g }||
|j< |j}t|j|j|jD ]\}}}tj||t|d}|| qqoqc|W  d    S 1 sw   Y  d S )Nr+   z_stub.ReadTensorsr,   )rD   rE   numpy)r   r2   r   ZReadTensorsRequestr   r3   r4   r5   r)   rC   rG   r   r   ZReadTensorsr'   r$   r6   r<   rH   rI   rD   rE   rF   r   ZTensorDatumr   Zmake_ndarrayrJ   rK   r   r   r	   read_tensors   sB   





$zGrpcDataProvider.read_tensorsc                 C   s:  t d t }||_||j_t||j W d    n1 s!w   Y  t d! t	  | j
|}W d    n1 s@w   Y  W d    n1 sOw   Y  t d: i }|jD ]*}i }	|	||j< |jD ]}
|
j}tj|j|j|j|jjj|jj|jjd|	|
j< qkq_|W  d    S 1 sw   Y  d S )Nr+   z_stub.ListBlobSequencesr,   )r.   r/   
max_lengthr0   r   r1   )r   r2   r   ZListBlobSequencesRequestr   r3   r4   r5   r)   r   r   ZListBlobSequencesr'   r$   r6   r7   r   ZBlobSequenceTimeSeriesr.   r/   rT   r8   r9   r:   r;   r1   r<   r=   r   r   r	   list_blob_sequences   s<   



$z$GrpcDataProvider.list_blob_sequencesc                 C   s  t d t }||_||j_t||j ||j	_
W d    n1 s%w   Y  t d! t  | j|}W d    n1 sDw   Y  W d    n1 sSw   Y  t d] i }|jD ]M}	i }
|
||	j< |	jD ]@}g }||
|j< |j}t|j|j|jD ]*\}}}g }|jD ]}|tj|j|jpd d qtj||t|d}|| qqoqc|W  d    S 1 sw   Y  d S )Nr+   z_stub.ReadBlobSequencesr,   )blob_keyurl)rD   rE   values)r   r2   r   ZReadBlobSequencesRequestr   r3   r4   r5   r)   rC   rG   r   r   ZReadBlobSequencesr'   r$   r6   r<   rH   rI   rD   rE   rX   Z	blob_refsrJ   r   ZBlobReferencerV   rW   ZBlobSequenceDatumtuple)r   r   r   r4   rC   r)   r   r   r>   r?   r6   r@   rL   rM   rD   rN   Zblob_sequencerX   refrO   r   r   r	   read_blob_sequences   sP   	






$z$GrpcDataProvider.read_blob_sequencesc              	   C   s   t d t }||_W d    n1 sw   Y  t d# t  t| j|}W d    n1 s8w   Y  W d    n1 sGw   Y  t d d	dd |D W  d    S 1 sfw   Y  d S )Nr+   zlist(_stub.ReadBlob)r,       c                 s   s    | ]}|j V  qd S N)rH   )r   r   r   r   r	   	<genexpr>)  s    z-GrpcDataProvider.read_blob.<locals>.<genexpr>)
r   r2   r   ZReadBlobRequestrV   r   listr   ZReadBlobjoin)r   r   rV   r   	responsesr   r   r	   	read_blob   s   $zGrpcDataProvider.read_blobr]   )NN)__name__
__module____qualname____doc__r   r   r   r#   r(   r   r2   rA   rP   rQ   rS   rU   r[   rb   r   r   r   r	   r   "   s<    $$*r   c               
   c   s    zd V  W d S  t jyB }  z.|  t jjkrt|  |  t jjkr.t	|  |  t jj
kr=t|   d } ~ ww r]   )grpcZRpcErrorcodeZ
StatusCodeZINVALID_ARGUMENTr   ZInvalidArgumentErrordetails	NOT_FOUNDZNotFoundErrorZPERMISSION_DENIEDZPermissionDeniedError)er   r   r	   r   ,  s   r   c                 C   sT   | du rdS | j durt| j |j jdd< | jdur(t| j|jjdd< dS dS )z)Copies `run_tag_filter` into `rtf_proto`.N)r'   sortednamesr6   )r)   Z	rtf_protor   r   r	   r5   :  s   

r5   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   )rf   
contextlibrg   Ztensorboard.utilr   r   Ztensorboardr   Ztensorboard.datar   Ztensorboard.data.protor   r   r
   ZDataProviderr   contextmanagerr   r5   r   r   r   r   r	   <module>   s"     

