B
    dy(                 @   s   d Z dgZddlZddl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 G d
d deZdddddZddddZdS )zp
mpld3 renderer
==============

This is the renderer class which implements the mplexporter framework for mpld3
MPLD3Renderer    N   )export_color)Exporter)Renderer)get_id)get_pluginsc               @   s   e Zd ZdZdd Zedd ZdddZd	d
 Zdd Z	dd Z
dd ZdddZd ddZd!ddZd"ddZd#ddZd$ddZdS )%r   zRenderer class for mpld3

    This renderer class plugs into the ``mplexporter`` package in order to
    convert matplotlib figures into a JSON-serializable dictionary
    representation which can be read by mpld3.js.
    c             C   s   d | _ d | _g | _d S )N)figure_json	axes_jsonfinished_figures)self r   `/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/mpld3/mpld3renderer.py__init__   s    zMPLD3Renderer.__init__c             C   s
   d | S )Nzdata{0:02d})format)ir   r   r   	datalabel$   s    zMPLD3Renderer.datalabeldatac                sn  t |}|jdkr*|jd dkr*tdx$t| jD ]\} |jd  jd krVq8t  fdd|jD }t 	|s|q8t
| j| j}g }xht|jd D ]V}t || d }t|r||d  q||dd|f  |t|d  qW t |j| j|< | |d }	tt|\}
}P q8W | j| | t| j}	d}
d}| j|	 ||	d|
d	|iS )
a  Add a dataset to the current figure

        If the dataset matches any already added data, we use that instead.

        Parameters
        ----------
        data : array_like
            a shape [N,2] array of data
        key : string (optional)
            the key to use for the data

        Returns
        -------
        datadict : dictionary
            datadict has the keys "data", "xindex", "yindex", which will
            be passed to the mpld3 JSON object.
           r   z%Data is expected to be of size [N, 2]r   c                s    g | ]}t j| jkd dqS )r   )Zaxis)npallT).0col)dr   r   
<listcomp>D   s    z*MPLD3Renderer.add_data.<locals>.<listcomp>Nxindexyindex)r   asarrayndimshape
ValueError	enumeratedatasetsarrayr   anylistrangewherelenappendr   mapint
datalabels)r   r   keyr   matchesZnew_dataindicesjZwhrr   r   r   r   )r   r   add_data(   s6    

zMPLD3Renderer.add_datac             C   s@   g | _ g | _t|d |d  |d |d  g i t|d| _d S )NZfigwidthZdpiZ	figheight)widthheightaxesr   id)r#   r-   dictr   r	   )r   figpropsr   r   r   open_figured   s    zMPLD3Renderer.open_figurec             C   s   g }g }x<t | jD ].\}}| |d }t| | jd |< qW g | jd< x@t|D ]4}| jd |	  ||
  ||  qZW | j|| jd|d|f d S )Nr   r   plugins )r"   r#   r   r   r   tolistr	   r   r*   get_dictcss
javascriptr   join)r   r8   Zadditional_cssZadditional_jsr   Zdatasetr   pluginr   r   r   close_figurem   s    
zMPLD3Renderer.close_figurec                s   t |d |d |d |d |d |d |d |d |d	 |d
 t|d t g g g g g g d| _| jd | j    }   } fdd|D | jd<  fdd|D | jd< d S )NZboundsxlimylimxdomainydomainxscaleyscaler5   axesbgaxesbgalphaZdynamic)ZbboxrD   rE   rF   rG   rH   rI   r5   rJ   rK   Zzoomabler6   linespathsmarkerstextscollectionsimagesc                s   g | ]}| k	rt |qS r   )r   )r   axi)axr   r   r      s    z+MPLD3Renderer.open_axes.<locals>.<listcomp>Zsharexc                s   g | ]}| k	rt |qS r   )r   )r   rR   )rS   r   r   r      s    Zsharey)	r7   boolr   r
   r	   r*   Zget_shared_x_axesZget_siblingsZget_shared_y_axes)r   rS   r9   ZxsibZysibr   )rS   r   	open_axes|   s.    

zMPLD3Renderer.open_axesc             C   s
   d | _ d S )N)r
   )r   rS   r   r   r   
close_axes   s    zMPLD3Renderer.close_axesNc             C   st   |  |}||d< t||d< xdD ]}|| ||< q$W d|krL|d |d< |d dkr`d|d< | jd | d S )	Ncoordinatesr6   )color	linewidth	dasharrayalphazorderZ	drawstylerZ   z10,0nonerL   )r2   r   r
   r*   )r   r   rW   stylelabelmplobjliner.   r   r   r   	draw_line   s    

zMPLD3Renderer.draw_linec       
      C   s   |  |}||d< ||d< t||d< |d k	rBt||d< ||d< xdD ]}	||	 ||	< qHW |d dkrpd	|d< | jd
 | d S )NrW   	pathcodesr6   offsetoffsetcoordinates)rZ   r[   	facecolor	edgecolor	edgewidthr\   rZ   z10,0r]   rM   )r2   r   r&   r
   r*   )
r   r   rW   rc   r^   rd   offset_coordinatesr`   pathr.   r   r   r   	draw_path   s    

zMPLD3Renderer.draw_pathc       
      C   st   |  |}||d< t|d|d< xdD ]}|| ||< q&W |dr`|d \}}	| |	f|d< | jd | d S )NrW   Zptsr6   )rf   rg   rh   r[   r\   Z
markerpathrN   )r2   r   getr=   r
   r*   )
r   r   rW   r^   r_   r`   rN   r.   Zverticescodesr   r   r   draw_markers   s    


zMPLD3Renderer.draw_markersc	       
   	   C   s   t |dkrt|d gdd |d D dd |d D dd |d	 D |||d
 d}| |d}	dd |D |	d< dd |D |	d< |	| t||	d< | jd |	 d S )Nr   r[   c             S   s   g | ]}t |qS r   )r   )r   ecr   r   r   r      s   z6MPLD3Renderer.draw_path_collection.<locals>.<listcomp>rg   c             S   s   g | ]}t |qS r   )r   )r   fcr   r   r   r      s   rf   c             S   s   g | ]}|qS r   r   )r   Zlwr   r   r   r      s    rY   r\   )alphasZ
edgecolorsZ
facecolorsZ
edgewidthsre   Zpathcoordinatesr\   offsetsc             S   s   g | ]\}}|  |fqS r   )r=   )r   vpr   r   r   r      s    rM   c             S   sH   g | ]@}|d ddf   |dddf    |dddf    qS )r   Nr   r   )r=   )r   tr   r   r   r      s   Zpathtransformsr6   rP   )r)   r7   r2   updater   r
   r*   )
r   rM   Zpath_coordinatesZpath_transformsrr   ri   Zoffset_orderstylesr`   Z	pathsdictr   r   r   draw_path_collection   s"    



z"MPLD3Renderer.draw_path_collectionc             C   s`   t |t||t|d  t|d  |d  |d |d |d |d t|d}| jd	 | d S )
NZhalignZvalignrotationfontsizerX   r[   r\   )textpositionrW   Zh_anchorZ
v_baselinery   rz   rX   r[   r\   r6   rO   )r7   tupleTEXT_HA_DICTTEXT_VA_DICTr   r
   r*   )r   r{   r|   rW   r^   	text_typer`   r   r   r   	draw_text   s    

zMPLD3Renderer.draw_textc             C   s8   t |||d}|| t||d< | jd | d S )N)r   extentrW   r6   rQ   )r7   rv   r   r
   r*   )r   Zimdatar   rW   r^   r`   imager   r   r   
draw_image   s    
zMPLD3Renderer.draw_image)r   )N)Nr   N)N)N)NN)N)__name__
__module____qualname____doc__r   staticmethodr   r2   r:   rC   rU   rV   rb   rk   rn   rx   r   r   r   r   r   r   r      s   
<	




autoZcentralZhanging)bottomZbaselinecentertopstartmiddleend)leftr   right)r   __all__randomjsonZjinja2	itertoolsnumpyr   Zmplexporter.utilsr   Zmplexporter.exporterr   Zmplexporter.renderersr   utilsr   r;   r   r   r   r~   r   r   r   r   <module>   s(    i