U
    Âmœd>%  ã                   @   sŠ   d Z ddlmZ ddlmZmZmZmZm	Z
 ddlmZ ddlmZ ddlmZmZ ddd	d
ddœZddddddœZejjZddd„ZdS )zHModule that provides a GUI-based editor for Matplotlib's figure options.é    )Úchain)ÚcbookÚcmÚcolorsÚmarkersÚimage)ÚQtGui)Ú_formlayout)ÚDateConverterÚnum2dateZSolidZDashedZDashDotZDottedÚNone)ú-z--z-.ú:r   ZDefaultzSteps (Pre)zSteps (Mid)zSteps (Post))Údefaultz	steps-preZstepsz	steps-midz
steps-postNc                    s>  d‰
dd„ ‰ˆ j ‰‡ ‡fdd„ˆ ¡ D ƒ‰dˆ  ¡ fˆ
ft ‡‡
fdd„ˆ ¡ D ƒ¡d.•}d
d„ ˆ ¡ D ƒ‰dd„ ˆ ¡ D ƒ‰g ‰ˆ  ¡ D ]$}| ¡ }|dkr qŠˆ ||f¡ qŠg }dd„ }ˆD ]Ú\}}tj	t 
| ¡ | ¡ ¡dd�}tj	t 
| ¡ | ¡ ¡dd�}tj	t 
| ¡ | ¡ ¡dd�}	d|fˆ
dd|t| ¡ ƒfd|t| ¡ ƒfd| ¡ fd|fˆ
dd|t| ¡ ƒfd| ¡ fd|	fd|fg}
| |
|dg¡ qÀt|ƒ‰g ‰	ˆ jˆ j•D ]8}| ¡ }|dk�s´| ¡ dk�rÜ�q´ˆ	 ||f¡ �q´g }dd„ ttj ¡ ƒD ƒ}ˆ	D ]ª\}}| ¡ }|tj ¡ k�r>||j ff|•}| !¡ \}}d|fd|j g| fd |fd!|fg}t"|d"ƒ�r¦d#d„ tt#j$ƒD ƒ}| d$| %¡ f|•f¡ | ||dg¡ �qt|ƒ‰|d%dfg}|�rä| |d&df¡ |�rú| |d'df¡ ‡ ‡‡‡‡‡‡‡	fd(d)„}t&j'|d*|t( )t*t+ ,d+d,¡ƒ¡|d-� dS )/zEdit matplotlib figure options)NNc                 S   s   t |tƒrtt| ƒS tt| ƒS )z.Convert axis limits for correct input editors.)Ú
isinstancer
   Úmapr   Úfloat)ÚlimÚ	converter© r   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/backends/qt_editor/figureoptions.pyÚconvert_limits#   s    

z#figure_edit.<locals>.convert_limitsc              
      s2   i | ]*\}}|t ˆtˆ d |› d�ƒƒ |jƒƒ“qS ©Úget_r   )ÚtupleÚgetattrr   ©Ú.0ÚnameÚaxis)Úaxesr   r   r   Ú
<dictcomp>+   s   ý  ÿzfigure_edit.<locals>.<dictcomp>ZTitlec                    sf   g | ]^\}}d d|  ¡ › d�fdˆ | d fdˆ | d fd| ¡  ¡ fd| ¡ d	d
ddgfˆf‘qS )Nz<b>z	-Axis</b>ZMinr   ZMaxé   ÚLabelZScaleZlinearÚlogZsymlogZlogit)ÚtitleÚ	get_labelZget_textÚ	get_scaler   )Úaxis_limitsÚsepr   r   Ú
<listcomp>4   s   
ø   ÿùzfigure_edit.<locals>.<listcomp>©z(Re-)Generate automatic legendFc                 S   s   i | ]\}}||j “qS r   )r   r   r   r   r   r!   D   s   ÿ c                 S   s   i | ]\}}||  ¡ “qS r   )Z	get_unitsr   r   r   r   r!   H   s   ÿ Z
_nolegend_c                 S   sb   || kr| |t |ƒi–} dd„ |  ¡ D ƒ}dd„ | ¡ D ƒ}|| |  }|gt| ¡ dd„ d� S )aâ  
        Prepare entry for FormLayout.

        *d* is a mapping of shorthands to style names (a single style may
        have multiple shorthands, in particular the shorthands `None`,
        `"None"`, `"none"` and `""` are synonyms); *init* is one shorthand
        of the initial style.

        This function returns an list suitable for initializing a
        FormLayout combobox, namely `[initial_name, (shorthand,
        style_name), (shorthand, style_name), ...]`.
        c                 S   s   i | ]\}}||“qS r   r   )r   Úshortr   r   r   r   r!   g   s      z5figure_edit.<locals>.prepare_data.<locals>.<dictcomp>c                 S   s   i | ]\}}||“qS r   r   )r   r   r,   r   r   r   r!   i   s      c                 S   s   | d S )Nr"   r   )Zshort_and_namer   r   r   Ú<lambda>o   ó    z3figure_edit.<locals>.prepare_data.<locals>.<lambda>)Úkey)ÚstrÚitemsÚsorted)ÚdÚinitZ
name2shortZ
short2nameZcanonical_initr   r   r   Úprepare_dataV   s    ÿÿz!figure_edit.<locals>.prepare_dataT)Z
keep_alphar#   )Nz<b>Line</b>z
Line stylez
Draw styleZWidthzColor (RGBA))Nz<b>Marker</b>ÚStyleÚSizezFace color (RGBA)zEdge color (RGBA)Ú Nc                 S   s   g | ]\}}||f‘qS r   r   )r   r   Úcmapr   r   r   r*   •   s     ZColormapz
Min. valuez
Max. valueÚget_interpolationc                 S   s   g | ]}||f‘qS r   r   ©r   r   r   r   r   r*   ¢   s    ÚInterpolationZAxesZCurveszImages, etc.c           &   
      sî  ‡ fdd„ˆD ƒ}|   d¡}ˆr*|   d¡ng }ˆr<|   d¡ng }| rLtdƒ‚|  d¡}ˆ  |¡ |  ¡ }tˆ ¡ ƒD ]œ\}\}}	|d|  }
|d| d  }|d| d  }|d| d  }|	 ¡ |krÞtˆ d	|› d
�ƒ|ƒ |	j|
|dd� |	 |¡ ˆ| |	_	|	 
ˆ| ¡ qtt|ƒD ]¤\}}ˆ| d }|\	}}}}}}}}}| |¡ | |¡ | |¡ | |¡ t |¡}| d¡ | |¡ |dk�r| |¡ | |¡ | |¡ | |¡ �qt|ƒD ]„\}}ˆ| d }t|ƒdk�r|\}}}}} | | ¡ nt|ƒdk�r|\}}}}| |¡ | t |¡¡ |jt||gƒŽ  �qÈ|�rœd}!d}"ˆ jdk	�r€ˆ  ¡ }#|#j dk	}!|#j!}"ˆ j"|"d�}$|$�rœ|$ #|!¡ ˆ  $¡ }%|%j% &¡  ˆD ]6}tˆ d|› d�ƒƒ || k�r²|%j%j' (¡   �qê�q²dS )zA callback to apply changes.c                    s"   i | ]}|t ˆ d |› d�ƒƒ “qS r   )r   r;   )r    r   r   r!   ³   s   ÿ z7figure_edit.<locals>.apply_callback.<locals>.<dictcomp>r   zUnexpected fieldé   r"   é   é   Úset_ÚscaleF)ÚautoNÚnoneé   )Úncolsr   r   ))ÚpopÚ
ValueErrorÚ	set_titleÚ	enumerater1   r'   r   Z_set_limZset_label_textr   Z	set_unitsZ	set_labelZset_linestyleZset_drawstyleZset_linewidthÚmcolorsÚto_rgbaZ	set_alphaZ	set_colorZ
set_markerZset_markersizeZset_markerfacecolorZset_markeredgecolorÚlenZset_interpolationZset_cmapr   Úget_cmapZset_climr2   Zlegend_Z
get_legendZ
_draggableZ_ncolsZlegendZset_draggableZ
get_figureZcanvasZdrawZtoolbarZpush_current)&ÚdataZorig_limitsÚgeneralÚcurvesÚ	mappablesr%   Zgenerate_legendÚir   r   Zaxis_minZaxis_maxZ
axis_labelZ
axis_scaleÚindexZcurveÚlineÚlabelZ	linestyleZ	drawstyleZ	linewidthÚcolorÚmarkerZ
markersizeZmarkerfacecolorZmarkeredgecolorZrgbaZmappable_settingsÚmappabler9   ÚlowÚhighÚinterpolationZ	draggablerE   Z
old_legendZ
new_legendZfigure)r    Úaxis_converterÚaxis_mapÚ
axis_unitsÚ	has_curveÚhas_smÚlabeled_linesÚlabeled_mappablesr   r   Úapply_callback±   s„    
þ




ÿ 














z#figure_edit.<locals>.apply_callbackzFigure optionsÚimageszqt4_editor_options.svg)r%   ÚparentÚiconÚapply)r+   )-Z	_axis_mapr1   Z	get_titler   Úfrom_iterableÚ	get_linesr&   ÚappendrJ   Zto_hexrK   Ú	get_colorZ	get_alphaZget_markeredgecolorZget_markerfacecolorÚ
LINESTYLESZget_linestyleÚ
DRAWSTYLESZget_drawstyleZget_linewidthÚMARKERSZ
get_markerZget_markersizeÚboolrd   ÚcollectionsZ	get_arrayr2   r   Z
_colormapsrM   Úvaluesr   Zget_climÚhasattrÚmimageZinterpolations_namesr:   r	   Zfeditr   ZQIconr0   r   Z_get_data_path)r    re   rO   rT   rU   rP   r5   rV   ÚecÚfcZ	curvedatarX   rQ   Zcmapsr9   rY   rZ   ZmappabledataZinterpolationsZdatalistrc   r   )r    r\   r(   r]   r^   r   r_   r`   ra   rb   r)   r   Úfigure_edit   sÈ    ü
þ
ö ñþþþþþ

óüÿþR  ÿürv   )N)Ú__doc__Ú	itertoolsr   Z
matplotlibr   r   r   rJ   r   r   rs   Zmatplotlib.backends.qt_compatr   Zmatplotlib.backends.qt_editorr	   Zmatplotlib.datesr
   r   rl   rm   ZMarkerStylern   rv   r   r   r   r   Ú<module>   s&   ü ü