B
    d                 @   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
mZ ddddZdd	iZxe D ]\ZZeee< qVW d
d ZG dd deZdd Zdd Zdd Zdd Zdd ZeeedZeedZdddZdd ZdS )zQ
This Module contains generic utility functions for creating plots within
PyCBC.
    N)
HTMLParser)escapeunescapez&quot;z&apos;z&#64;)"'@r   c             C   s
   t | tS )z  Sanitize text for html parsing )r   escape_table)text r
   c/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/pycbc/results/metadata.pyhtml_escape   s    r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )
MetaParserc             C   s   i | _ t|  d S )N)metadatar   __init__)selfr
   r
   r   r      s    zMetaParser.__init__c             C   s   d S )Nr
   )r   datar
   r
   r   handle_data   s    zMetaParser.handle_datac             C   sV   i }x|D ]\}}|||< q
W |dkrRd|krR|d dkrRt |d t| j|d < d S )Ndivclassz
pycbc-metavaluekey)r   unescape_tabler   )r   tagattrsattrr   r   r
   r
   r   handle_starttag!   s
    zMetaParser.handle_starttagN)__name__
__module____qualname__r   r   r   r
   r
   r
   r   r      s   r   c       
      C   sz   t | tr| }nddlm} || f|}t|d}x8| D ],\}}t|t}dt||f }	||	 q<W || dS )z* Save a html output to file with metadata r   )fig_to_htmlwz0<div class=pycbc-meta key="%s" value="%s"></div>N)	
isinstancestrZmpld3r   openitemsr   r   write)
figfilenamefig_kwdskwdsr	   r   fr   r   liner
   r
   r   save_html_with_metadata)   s    


r,   c             C   sT   t  }t| d }d|kr(td|   || t|j}|tj	
|  |S )z Get metadata from html file rz
pycbc-metazLOADING HTML FILE %s)r   r#   readprintfeedConfigParserr   add_sectionospathbasename)r'   parserr   cpr
   r
   r   load_html_metadata9   s    
r8   c       	      C   sj   ddl m}m} | j|f| ||}| }x$|D ]}|t|t||  q6W |j|d|d dS )z5 Save a matplotlib figure to a png with metadata
    r   )ImagePngImagePluginZpng)ZpnginfoN)	PILr9   r:   savefigr#   ZPngInfoadd_textr"   save)	r&   r'   r(   r)   r9   r:   Zimmetar   r
   r
   r   save_png_with_metadataE   s    

r@   c          	   C   s   ddl m} ||h}| j|fddi| | }xB|D ]:}t| dkr`t|| |d< q:t|| |t|< q:W W dQ R X dS )z:Save a matplotlib figure to a PDF file with metadata.
    r   )PdfPagesformatZpdftitleZTitleN)Zmatplotlib.backends.backend_pdfrA   r<   Zinfodictr"   lower)r&   r'   r(   r)   rA   Zpdfpr   r   r
   r
   r   save_pdf_with_metadataS   s    

rE   c             C   s8   ddl m} || j}t|}|tj|  |S )Nr   )r9   )	r;   r9   r#   infor1   r2   r3   r4   r5   )r'   r9   r   r7   r
   r
   r   load_png_metadatac   s
    
rG   )z.pngz.htmlz.pdf)z.pngz.htmlc             K   sh   |dkri }y2t j|d }tjj|d< t| | ||| W n$ tk
rb   td||f Y nX dS )aA   Save plot to file with metadata included. Kewords translate to metadata
    that is stored directly in the plot file. Limited format types available.

    Parameters
    ----------
    fig: matplotlib figure
        The matplotlib figure to save to the file
    filename: str
        Name of file to store the plot.
    N   versionzJCannot save file %s with metadata, extension %s not supported at this time)	r3   r4   splitextpycbcrI   Zgit_verbose_msg_metadata_saverKeyError	TypeError)r&   r'   r(   r)   	extensionr
   r
   r   save_fig_with_metadatar   s    rP   c             C   sF   yt j| d }t| | S  tk
r@   td| |f Y nX dS )z Load the plot related metadata saved in a file

    Parameters
    ----------
    filename: str
        Name of file load metadata from.

    Returns
    -------
    cp: ConfigParser
        A configparser object containing the metadata
    rH   zJCannot read metadata from file %s, extension %s not supported at this timeN)r3   r4   rJ   _metadata_loaderrM   rN   )r'   rO   r
   r
   r   load_metadata_from_file   s    rR   )N)__doc__os.pathr3   Zpycbc.versionrK   configparserr1   html.parserr   Zxml.sax.saxutilsr   r   r   r   r$   kvr   r   r,   r8   r@   rE   rG   rL   rQ   rP   rR   r
   r
   r
   r   <module>   s0   
