o
    2h8                     @   s   d Z ddl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   TensorBoardDataProviderStub)channel r
   Y/var/www/html/chatgem/venv/lib/python3.10/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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addrstubr
   r
   r   __init__&   s   	
zGrpcDataProvider.__init__c                 C   s
   d| j  S )NzGrpcDataProvider(addr=%r))r   )r   r
   r
   r   __str__2   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_locationexperiment_nameexperiment_descriptioncreation_time)r   GetExperimentRequestexperiment_id_translate_grpc_errorr   GetExperimentr   ExperimentMetadatar   namedescription_timestamp_proto_to_floatr   r   ctxr   reqresr
   r
   r   experiment_metadata5   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>G   s    z1GrpcDataProvider.list_plugins.<locals>.<listcomp>)r   ListPluginsRequestr   r   r   ListPluginspluginsr!   r
   r
   r   list_pluginsB   s   zGrpcDataProvider.list_pluginsc                C   r&   )Nc                 S   s"   g | ]}t j|j|j|jd qS ))run_idrun_name
start_time)r   Runr   r0   )r'   runr
   r
   r   r)   N   s    z.GrpcDataProvider.list_runs.<locals>.<listcomp>)r   ListRunsRequestr   r   r   ListRunsrunsr!   r
   r
   r   	list_runsI   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   ListScalarsRequestr   plugin_filterplugin_name_populate_rtfr7   r   r   ListScalarsr5   r/   tagsmetadatar   ScalarTimeSeriesr<   r=   summary_metadataplugin_datacontentsummary_descriptionr?   tag_namer   r"   r   rC   r7   r#   r$   result	run_entryrF   	tag_entrytime_seriesr
   r
   r   list_scalarsW   :   


	$zGrpcDataProvider.list_scalars)
downsampler7   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 )Nr9   _stub.ReadScalarsr:   step	wall_timevalue)r   r@   r   ReadScalarsRequestr   rB   rC   rD   r7   rU   
num_pointsr   r   ReadScalarsr5   r/   rF   rM   dataziprX   rY   rZ   r   ScalarDatumappendr   r"   r   rC   rU   r7   r#   r$   rO   rP   rF   rQ   seriesdrX   wtrZ   pointr
   r
   r   read_scalarss   sB   





$zGrpcDataProvider.read_scalarsc             	   C   sH  t d t }||_||j_t||j d|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= tt}|jD ]*}|j}	|jD ]!}
|
j}t|j|j|jD ]\}}}tj|||d||	 |
j< q|qnqf|W  d    S 1 sw   Y  d S )Nr9      rV   r:   rW   )r   r@   r   r[   r   rB   rC   rD   r7   rU   r\   r   r   r]   collectionsdefaultdictdictr5   r/   rF   r^   r_   rX   rY   rZ   r   r`   rM   )r   r"   r   rC   r7   r#   r$   rO   rP   r/   rQ   rd   rX   re   rZ   r
   r
   r   read_last_scalars   s<   	



$z"GrpcDataProvider.read_last_scalarsc             
   C   r8   )Nr9   z_stub.ListTensorsr:   r;   )r   r@   r   ListTensorsRequestr   rB   rC   rD   r7   r   r   ListTensorsr5   r/   rF   rG   r   TensorTimeSeriesr<   r=   rI   rJ   rK   rL   r?   rM   rN   r
   r
   r   list_tensors   rT   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 )Nr9   z_stub.ReadTensorsr:   )rX   rY   numpy)r   r@   r   ReadTensorsRequestr   rB   rC   rD   r7   rU   r\   r   r   ReadTensorsr5   r/   rF   rM   r^   r_   rX   rY   rZ   r   TensorDatumr   make_ndarrayra   rb   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 )Nr9   z_stub.ListBlobSequencesr:   )r<   r=   
max_lengthr>   r   r?   )r   r@   r   ListBlobSequencesRequestr   rB   rC   rD   r7   r   r   ListBlobSequencesr5   r/   rF   rG   r   BlobSequenceTimeSeriesr<   r=   rw   rI   rJ   rK   rL   r?   rM   rN   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 )Nr9   z_stub.ReadBlobSequencesr:   )blob_keyurl)rX   rY   values)r   r@   r   ReadBlobSequencesRequestr   rB   rC   rD   r7   rU   r\   r   r   ReadBlobSequencesr5   r/   rF   rM   r^   r_   rX   rY   r~   	blob_refsra   r   BlobReferencer|   r}   BlobSequenceDatumtuple)r   r"   r   rC   rU   r7   r#   r$   rO   rP   rF   rQ   rc   rd   rX   re   blob_sequencer~   refrf   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 )Nr9   zlist(_stub.ReadBlob)r:       c                 s   s    | ]}|j V  qd S N)r^   )r'   r$   r
   r
   r   	<genexpr>P  s    z-GrpcDataProvider.read_blob.<locals>.<genexpr>)
r   r@   r   ReadBlobRequestr|   r   listr   ReadBlobjoin)r   r"   r|   r#   	responsesr
   r
   r   	read_blobG  s   $zGrpcDataProvider.read_blobr   )NN)__name__
__module____qualname____doc__r   r   r%   r-   r6   r   r@   rS   rg   rl   rp   rv   r{   r   r   r
   r
   r
   r   r   #   sB    $%$*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   )grpcRpcErrorcode
StatusCodeINVALID_ARGUMENTr   InvalidArgumentErrordetails	NOT_FOUNDNotFoundErrorPERMISSION_DENIEDPermissionDeniedError)er
   r
   r   r   S  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)r5   sortednamesrF   )r7   	rtf_protor
   r
   r   rD   a  s   

rD   c                 C   s   |   d S )z@Converts `timestamp_pb2.Timestamp` to float seconds since epoch.g    eA)ToNanoseconds)tsr
   r
   r   r    k  s   r    )r   ri   
contextlibr   tensorboard.utilr   r   tensorboardr   tensorboard.datar   tensorboard.data.protor   r   r   DataProviderr   contextmanagerr   rD   r    r
   r
   r
   r   <module>   s$     2

