U
    d»{j¾/  ã                   @   s   d Z ddlZddlZddlZddlmZ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mZ ddlmZ dd	lmZ G d
d„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ dejƒZG dd„ dƒZe ed¡Zeeej ƒƒZ!e
 "e!¡Z#dS )z/
An experimental support for curvilinear grid.
é    N)Ú_apiÚcbook)ÚPath)Úhost_axes_class_factoryé   )Ú	axislinesÚgrid_helper_curvelinear)Ú
AxisArtist)ÚExtremeFinderSimplec                   @   s   e Zd ZdS )ÚFloatingAxisArtistHelperN)Ú__name__Ú
__module__Ú__qualname__© r   r   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpl_toolkits/axisartist/floating_axes.pyr      s   r   c                       s6   e Zd Zd
‡ fdd„	Zdd„ Zdd„ Zdd	„ Z‡  ZS )ÚFixedAxisArtistHelperNc                    sJ   |  |¡\}}tƒ j||||d� |dkr.|}|| _|| _|| _|| _dS )z}
        nth_coord = along which coordinate value varies.
         nth_coord = 0 ->  x axis, nth_coord = 1 -> y axis
        ©Úaxis_directionN)Úget_data_boundaryÚsuperÚ__init__Únth_coord_ticksÚvalueÚgrid_helperÚ_side)Úselfr   Úsider   r   Ú	nth_coord©Ú	__class__r   r   r       s    zFixedAxisArtistHelper.__init__c                 C   s   | j  |¡ | j j| _d S ©N)r   Ú
update_limÚ
_grid_info)r   Úaxesr   r   r   r!   /   s    z FixedAxisArtistHelper.update_limc                    sŽ  ˆj j‰ˆjd \}}}|| }d| }ˆjd \}}}	||	 }
d|	 }ˆj j}t|dd… ƒ\}}t|dd… ƒ\}}‡ ‡fdd„}ˆjdk�rr||k||k@ }|| }t |ˆj¡}
||
|ƒ\‰‰	|
j	t
d	d
�}||
| |k  |8  < |||ƒ\‰‰
||| |ƒ\‰‰|j	t
d	d
�}||| |k  |8  < ||
|ƒ\‰‰||
|| ƒ\‰‰ˆjd ‰dd„ tˆ|ƒD ƒ‰nêˆjdk�r\||
k|
|k@ }|
| }
t |
ˆj¡}||
|ƒ\‰‰	|j	t
d	d
�}||| |k  |8  < ||
|ƒ\‰‰
||
|| ƒ\‰‰|
j	t
d	d
�}||
| |k  |8  < |||ƒ\‰‰||| |ƒ\‰‰ˆjd ‰dd„ tˆ|ƒD ƒ‰‡ ‡‡‡‡‡‡‡‡	‡
‡‡‡fdd„}|ƒ tg ƒfS )z9tick_loc, tick_angle, tick_label, (optionally) tick_labelÚlat_infogü©ñÒMbP?Úlon_infoNé   c                    s$   ˆ  ¡ ˆ j }| t | |g¡¡jS r    )Úget_transformÚ	transDataÚ	transformÚnpÚcolumn_stackÚT)ÚxÚyZtrf)r#   Úgrid_finderr   r   Útransform_xyD   s    z>FixedAxisArtistHelper.get_tick_iterators.<locals>.transform_xyr   T)ÚcopyÚ
lat_labelsc                 S   s   g | ]\}}|r|‘qS r   r   ©Ú.0ÚlÚmr   r   r   Ú
<listcomp>Y   s      z<FixedAxisArtistHelper.get_tick_iterators.<locals>.<listcomp>r   Ú
lon_labelsc                 S   s   g | ]\}}|r|‘qS r   r   r3   r   r   r   r7   l   s      c                  3   sä   t  ˆ
ˆ	 ˆˆ ¡} t  ˆˆ ˆˆ ¡}ˆ
ˆ	 dkˆˆ dk@ }|| t jd  | |< ˆ ˆ ¡ˆ j }t tjj	d¡}t
ˆˆ| |ˆƒD ]X\}}}}}	| ||f¡}
||
d ƒr†||
d ƒr†t  ||g¡\}}||g|||	fV  q†d S )Nr   r&   )r   r   r   )r*   Zarctan2ÚpiZget_tick_transformÚ	transAxesÚ	functoolsÚpartialÚmplZ
transformsZ_interval_contains_closeÚzipr)   Zrad2deg)ÚddZdd2ÚmmZtick_to_axesZin_01r-   r.   ÚdZd2ZlabÚc2Zd1)r#   Úlabelsr   Úxx1Úxx1aÚxx1bÚxx2aÚxx2bÚyy1Úyy1aÚyy1bÚyy2aÚyy2br   r   Úf1n   s     ÿz4FixedAxisArtistHelper.get_tick_iterators.<locals>.f1)r   r/   r"   Ú	_extremesÚsortedr   r*   Ú	full_liker   ZastypeÚfloatr>   Úiter)r   r#   Úlat_levsÚlat_nÚ
lat_factorÚyy0ZdyÚlon_levsÚlon_nÚ
lon_factorÚxx0ZdxÚextremesÚxminÚxmaxÚyminÚymaxr0   ÚmaskZxx00Zyy00rN   r   )r#   r/   rC   r   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r   Úget_tick_iterators3   sV    

$z(FixedAxisArtistHelper.get_tick_iteratorsc                 C   sH   |   |¡ tddddd�| j \}}| j| | \}}tt ||g¡ƒS )N)Ú
lon_lines0r   )rc   r   )Ú
lat_lines0r   )rd   r   ©ÚleftÚrightÚbottomÚtop)r!   Údictr   r"   r   r*   r+   )r   r#   ÚkÚvÚxxÚyyr   r   r   Úget_line   s    
ýýzFixedAxisArtistHelper.get_line)N)r   r   r   r   r!   rb   ro   Ú__classcell__r   r   r   r   r      s   Lr   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚExtremeFinderFixedc                 C   s
   || _ dS )zÚ
        This subclass always returns the same bounding box.

        Parameters
        ----------
        extremes : (float, float, float, float)
            The bounding box that this helper always returns.
        N©rO   )r   r\   r   r   r   r   Œ   s    	zExtremeFinderFixed.__init__c                 C   s   | j S r    rr   )r   r0   Úx1Úy1Úx2Úy2r   r   r   Ú__call__—   s    zExtremeFinderFixed.__call__N)r   r   r   r   rw   r   r   r   r   rq   ‰   s   rq   c                       sT   e Zd Zd‡ fdd„	Zdd„ Zddd„Zdd	„ Zddd„Ze 	d¡dd„ ƒZ
‡  ZS )ÚGridHelperCurveLinearNc                    s*   || _ t|ƒ}tƒ j||||||d� d S )N)Úgrid_locator1Úgrid_locator2Útick_formatter1Útick_formatter2)rO   rq   r   r   )r   Z	aux_transr\   ry   rz   r{   r|   Úextreme_finderr   r   r   r   ž   s    ûzGridHelperCurveLinear.__init__c                 C   s2   | j \}}}}t|df|df|df|dfd�| S )z$
        Return v=0, nth=1.
        r   r   re   )rO   rj   )r   r   Zlon1Zlon2Zlat1Zlat2r   r   r   r   ­   s    ýýz'GridHelperCurveLinear.get_data_boundaryc                 C   sV   |d kr| j }|d kr|}t| ||d�}t|||d�}|j d¡ |j |j j¡ |S )N)r   r   T)r#   r   r	   ÚlineZset_clip_onZset_clip_boxÚbbox)r   Úlocr   r   Úoffsetr#   Z_helperZaxisliner   r   r   Únew_fixed_axis·   s      ÿz$GridHelperCurveLinear.new_fixed_axisc                 C   s„  | j d krtƒ | _ | j }| j}| |j||||¡}t|d d… ƒ\}}	t|dd … ƒ\}
}||	|
|f|d< | ||	¡\}}}t |¡}| 	|
|¡\}}}t |¡}|||f|d< |||f|d< | 
d||¡|d< | d||¡|d< |d |… | }|d |… | }| |||k ||	k @  ||
|k ||k @  ||	|
|¡\}}||d< ||d	< |j|d d… |dd … f|žŽ \}}||d
< ||d< d S )Nr&   r\   r%   r$   rh   r8   r2   Ú	lon_linesÚ	lat_linesrc   rd   )r"   rj   r/   r}   Zinv_transform_xyrP   ry   r*   Zasarrayrz   r{   r|   Z_get_raw_grid_lines)r   rs   rt   ru   rv   Z	grid_infor/   r\   Zlon_minZlon_maxZlat_minZlat_maxrX   rY   rZ   rT   rU   rV   Z
lon_valuesZ
lat_valuesrƒ   r„   r   r   r   Ú_update_gridß   sf    
   ÿ
ÿ

ÿ
  ÿ  ÿ   ý
 
þþ
z"GridHelperCurveLinear._update_gridÚmajorÚbothc                 C   s8   g }|dkr|  | jd ¡ |dkr4|  | jd ¡ |S )N)r‡   r-   rƒ   )r‡   r.   r„   )Úextendr"   )r   ÚwhichZaxisZ
grid_linesr   r   r   Úget_gridlines  s    z#GridHelperCurveLinear.get_gridlinesz3.5c              	   C   sÐ   | j \}}}}t ||d¡}t ||¡}t ||¡}t ||d¡}t ||¡}	t ||¡}
t |dd… |
dd… |ddd… |	g¡}t |dd… |dd… |dd… |ddd… g¡}| j t ||g¡¡S )zK
        Return (N, 2) array of (x, y) coordinate of the boundary.
        éd   Néÿÿÿÿr   )rO   r*   ZlinspacerQ   ZconcatenateZ
_aux_transr)   r+   )r   Úx0rs   Úy0rt   rm   rW   rI   rn   r[   rD   ZxxxZyyyr   r   r   Úget_boundary  s    ,4z"GridHelperCurveLinear.get_boundary)NNNN)NNNN)r†   r‡   )r   r   r   r   r   r‚   r…   rŠ   r   Ú
deprecatedr�   rp   r   r   r   r   rx   œ   s       ü    ü
(/
rx   c                       s8   e Zd Z‡ fdd„Zdd„ Z‡ fdd„Zdd„ Z‡  ZS )	ÚFloatingAxesBasec                   s:   t jt|d� tƒ j|d|i|—Ž |  d¡ |  ¡  d S )N)r   r   g      ð?)r   Zcheck_isinstancerx   r   r   Z
set_aspectÚadjust_axes_lim)r   r   ÚargsÚkwargsr   r   r   r   ,  s    
zFloatingAxesBase.__init__c                 C   s`   t |  ¡ jddddgƒ\\}}\}}\}}\}}t ||f||f||f||fg¡}d| ¡ _|S )Nrf   rg   rh   ri   r‹   )ÚmapÚget_grid_helperr   ÚmpatchesZPolygonÚget_pathZ_interpolation_steps)r   r�   Ú_rs   rŽ   rt   Úpatchr   r   r   Ú_gen_axes_patch2  s    
þ"
z FloatingAxesBase._gen_axes_patchc                    sd   t ƒ  ¡  | j |  ¡ j ¡ | j ¡ t ƒ  ¡ }| 	| j
¡ | | j¡ | j |¡ | j |¡ d S r    )r   Úclearrš   Zset_transformr–   r/   r'   r(   r›   Z
set_figureZfigurer:   Zset_clip_pathZ	gridlines)r   Z
orig_patchr   r   r   rœ   <  s    
ÿÿ
zFloatingAxesBase.clearc                 C   sL   | j  ¡  | j  ¡ | j ¡}| dd¡}|  |j|j¡ |  	|j
|j¡ d S )NgR¸…ëQð?)rš   r˜   Zget_extentsr'   r(   ÚexpandedZset_xlimr]   r^   Zset_ylimr_   r`   )r   r   r   r   r   r’   I  s    
þz FloatingAxesBase.adjust_axes_lim)r   r   r   r   r›   rœ   r’   rp   r   r   r   r   r‘   *  s   
r‘   z
Floating{})$Ú__doc__r;   Únumpyr*   Z
matplotlibr=   r   r   Zmatplotlib.axesr#   ZmaxesZmatplotlib.patchesZpatchesr—   Zmatplotlib.pathr   Z%mpl_toolkits.axes_grid1.parasite_axesr   Ú r   r   Zaxis_artistr	   r/   r
   r   r   rq   rx   r‘   Z_make_class_factoryZfloatingaxes_class_factoryZAxesZFloatingAxesZsubplot_class_factoryZFloatingSubplotr   r   r   r   Ú<module>   s6   
ÿk ( ÿÿ