U
    Vºc™  ã                   @   sL   d Z ddlZddlZddlZddlmZ G dd„ deƒZG dd„ deƒZdS )z=Classes and functions for handling the DownloadData API call.é    N)Úerrorc                   @   s   e Zd ZdZdZdZdZdS )ÚOutputFormatz<An enum used to list the valid output formats for API calls.ÚjsonÚcsvZlatexN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚJSONÚCSVÚLATEX© r   r   úM/tmp/pip-unpacked-wheel-g8kmtpbc/tensorboard/plugins/hparams/download_data.pyr      s   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚHandlerzHandles a DownloadData request.c                 C   s"   || _ || _|| _|| _|| _dS )aF  Constructor.

        Args:
          context: A backend_context.Context instance.
          experiment: Experiment proto.
          session_groups: ListSessionGroupsResponse proto.
          response_format: A string in the OutputFormat enum.
          columns_visibility: A list of boolean values to filter columns.
        N)Ú_contextÚ_experimentÚ_session_groupsÚ_response_formatÚ_columns_visibility)ÚselfÚcontextÚ
experimentÚsession_groupsÚresponse_formatZcolumns_visibilityr   r   r   Ú__init__$   s
    zHandler.__init__c                    sê  | j }| j}| j}| j‰g }|jD ]}| |jp4|j¡ q"|jD ]}| |jpT|jj	¡ q@‡fdd„}||ƒ}g }dd„ }	dd„ }
|j
D ]‚}g }|jD ]}| |	|j|j ƒ¡ q–i }|jD ]}|
|jƒ}|j||< q¼|jD ]}|
|jƒ}| | |¡¡ qÜ| ||ƒ¡ qˆ|tjkr*d}t||d}n¸|tjkr”d	d
„ ‰ d}ddt|ƒ  }d tˆ |ƒ¡d }d ‡ fdd„|D ƒ¡}d}|| | | }nN|tjkrÔt ¡ }t |¡}| |¡ | |¡ | ¡ }d}nt d| ¡‚||fS )z•Handles the request specified on construction.

        Returns:
          A response body.
          A mime type (string) for the response.
        c                    s   dd„ t | ˆ ƒD ƒS )Nc                 S   s   g | ]\}}|r|‘qS r   r   )Ú.0ÚvalueZvisibler   r   r   Ú
<listcomp>O   s      z8Handler.run.<locals>._filter_columns.<locals>.<listcomp>)Úzip)Úrow)Ú
visibilityr   r   Ú_filter_columnsN   s    z$Handler.run.<locals>._filter_columnsc                 S   s4   |   d¡r| jS |   d¡r | jS |   d¡r0| jS dS )NÚnumber_valueÚstring_valueÚ
bool_valueÚ )ZHasFieldr"   r#   r$   )r   r   r   r   Ú
_get_valueU   s    


zHandler.run.<locals>._get_valuec                 S   s   | j d | j S )NÚ.)ÚgroupÚtag)Zmetricr   r   r   Ú_get_metric_id_   s    z#Handler.run.<locals>._get_metric_idzapplication/json)ÚheaderÚrowsc                 S   s¨   | d krdS t | tƒrd|  S t | tƒr”t | ¡r6dS | tdƒtdƒfkr^d| dk rXdnd S d	|  }d
|krŒ| d
¡\}}d|t|ƒf S d| S |  dd¡ dd¡S )Nú-z$%d$z$\mathrm{NaN}$Úinfz-infz
$%s\infty$r   ú+z%.3gÚez$%s\cdot 10^{%d}$z$%s$Ú_z\_ú%z\%)Ú
isinstanceÚintÚfloatÚmathÚisnanÚsplitÚreplace)r   Z
scientificZcoefficientÚexponentr   r   r   Úlatex_formatt   s$    


þz!Handler.run.<locals>.latex_formatzapplication/x-latexz'\begin{table}[tbp]
\begin{tabular}{%s}
Úlú & z \\ \hline
r%   c                 3   s"   | ]}d   tˆ |ƒ¡d V  qdS )r=   z \\
N)ÚjoinÚmap)r   r   )r;   r   r   Ú	<genexpr>   s    zHandler.run.<locals>.<genexpr>z!\hline
\end{tabular}
\end{table}
ztext/csvzInvalid reponses format: %s) r   r   r   r   Zhparam_infosÚappendZdisplay_nameÚnameZmetric_infosr)   r   ZhparamsÚmetric_valuesr   Úgetr   r
   Údictr   Úlenr>   r?   r   ÚioÚStringIOr   ÚwriterÚwriterowÚ	writerowsÚgetvaluer   ZHParamsError)r   r   r   r   r+   Zhparam_infoZmetric_infor!   r,   r&   r*   r(   r   rC   Zmetric_valueZ	metric_idZ	mime_typeÚbodyZtop_partZheader_partZmiddle_partZbottom_partZ	string_iorI   r   )r;   r    r   Úrun;   sj    









ÿÿÿ


ÿzHandler.runN)r   r   r   r	   r   rN   r   r   r   r   r   !   s   r   )	r	   r   rG   r6   Ztensorboard.plugins.hparamsr   Úobjectr   r   r   r   r   r   Ú<module>   s   