U
    d»{jÒ3  ã                   @   s°   d Z ddlZddlmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZ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dS )z/
An experimental support for curvilinear grid.
é    N)Úchain)Ú_api)ÚPath)ÚAffine2DÚIdentityTransformé   )ÚAxisArtistHelperÚGridHelperBase)Ú
AxisArtist)Ú
GridFinderc                       sN   e Zd ZdZd‡ fdd„	Zdd„ Ze d¡ddd	„ƒZd
d„ Z	dd„ Z
‡  ZS )ÚFixedAxisArtistHelperz(
    Helper class for a fixed axis.
    Nc                    s2   t ƒ j|d� || _|dkr"| j}|| _|| _dS )ú}
        nth_coord = along which coordinate value varies.
         nth_coord = 0 ->  x axis, nth_coord = 1 -> y axis
        )ÚlocN)ÚsuperÚ__init__Úgrid_helperÚ	nth_coordÚnth_coord_ticksÚside)Úselfr   r   r   ©Ú	__class__© ún/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpl_toolkits/axisartist/grid_helper_curvelinear.pyr      s    zFixedAxisArtistHelper.__init__c                 C   s   | j  |¡ d S ©N)r   Ú
update_lim©r   Úaxesr   r   r   r   '   s    z FixedAxisArtistHelper.update_limú3.5c                 C   s2   |d krd| j  | _ n|dkr&|| _ ntdƒ‚d S )Nr   ©r   r   zwrong coord number)r   Ú	Exception)r   Zcoord_numberr   r   r   Úchange_tick_coord*   s
    z'FixedAxisArtistHelper.change_tick_coordc                 C   s   |j S r   ©Ú	transDatar   r   r   r   Úget_tick_transform3   s    z(FixedAxisArtistHelper.get_tick_transformc                 C   s~   | j dkr| ¡ n| ¡ \}}||kr<dddddœ| j }n| j}| j}| | j|¡}|jd| j |dd	�}t||ƒtg ƒfS )
z tick_loc, tick_angle, tick_labelr   ÚrightÚleftÚbottomÚtop)r&   r%   r(   r'   r   T)Úminor)	r   Úget_ylimÚget_xlimr   r   Úget_tick_iteratorr   r   Úiter)r   r   Zv1Zv2r   ÚgZti1Zti2r   r   r   Úget_tick_iterators6   s     ÿÿz(FixedAxisArtistHelper.get_tick_iterators)N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú
deprecatedr!   r$   r/   Ú__classcell__r   r   r   r   r      s   r   c                       sh   e Zd Ze d¡Zd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚFloatingAxisArtistHelperr   Nc                    s4   t ƒ  ||¡ || _|| _tj tjf| _d| _dS )r   éd   N)r   r   Úvaluer   ÚnpÚinfÚ	_extremesÚ_line_num_points)r   r   r   r8   Úaxis_directionr   r   r   r   G   s
    z!FloatingAxisArtistHelper.__init__c                 C   s,   |d krt j }|d krt j}||f| _d S r   )r9   r:   r;   )r   Úe1Úe2r   r   r   Úset_extremesR   s
    z%FloatingAxisArtistHelper.set_extremesc              	   C   s€  | j  |¡ | ¡ \}}| ¡ \}}| j j}| |j||||¡}|\}}	}
}| j\}}| jdkrvt	||
ƒ}
t
||ƒ}n| jdkr”t	||ƒ}t
||	ƒ}	| ||	¡\}}}| |
|¡\}}}| jdkrôt | j| j¡}t |
|| j¡}| ||¡\}}n<| jdk�r0t ||	| j¡}t | j| j¡}| ||¡\}}||	|
|f||t |¡f||t |¡f| d||¡| d||¡||fdœ| _d S )Nr   r   r'   )ÚextremesÚlon_infoÚlat_infoÚ
lon_labelsÚ
lat_labelsÚline_xy)r   r   r+   r*   Úgrid_finderÚextreme_finderZinv_transform_xyr;   r   ÚmaxÚminÚgrid_locator1Úgrid_locator2r9   Úfullr<   r8   ZlinspaceÚtransform_xyZasarrayÚtick_formatter1Útick_formatter2Ú
_grid_info)r   r   Úx1Úx2Úy1Úy2rG   rA   Zlon_minZlon_maxZlat_minZlat_maxZe_minZe_maxÚlon_levsÚlon_nÚ
lon_factorÚlat_levsÚlat_nÚ
lat_factorÚxx0Úyy0ZxxÚyyr   r   r   r   Y   sZ       ÿ






ÿ
ÿ

  ÿ  ÿøz#FloatingAxisArtistHelper.update_limc                 C   s   t ƒ S r   )r   r   r   r   r   Úget_axislabel_transform„   s    z0FloatingAxisArtistHelper.get_axislabel_transformc                 C   st  | j d }| jdkrL| j}|d |d  d }d}t|d |d  ƒd }n@| jdkrŒ|d |d  d }| j}t|d |d  ƒd }d}| jj}| |g|g¡\\}\}	|j|j }
|
 	||	g¡}d|d   kràdk�rln nˆd|d   krþdk�rln nj|j 	||	g¡\}}| || g|| g¡\\}\}|j 	||g¡\}}||ft
 t
 || || ¡¡fS dS d S )NrA   r   é   é   iè  r   )NN)rQ   r   r8   Úabsr   rG   rN   r#   Ú	transAxesÚ	transformr9   Úrad2degÚarctan2)r   r   rA   r\   r]   ZdxxZdyyrG   Úxx1Úyy1Zdata_to_axesÚpZxx1cZyy1cZxx2Zyy2Zxx2cZyy2cr   r   r   Úget_axislabel_pos_angle‡   s*    


< "z0FloatingAxisArtistHelper.get_axislabel_pos_anglec                 C   s   t ƒ S r   )r   r   r   r   r   r$   ¤   s    z+FloatingAxisArtistHelper.get_tick_transformc                    s&  ˆj j‰ˆjd \}}}|| }d| }ˆjd \}}}	||	 }
d|	 }ˆj\}}ˆjdkrv||k||k@ }|| }n"ˆjdkr˜||
k|
|k@ }|
| }
‡ ‡fdd„}ˆjdk�rNt |ˆj¡}
||
|ƒ\‰‰	|
 ¡ }||
| |k  |8  < |||ƒ\‰‰
||| |ƒ\‰‰||
|ƒ\‰‰||
|| ƒ\‰‰ˆjd ‰d	d
„ t	ˆ|ƒD ƒ‰n¦ˆjdk�rôt |
ˆj¡}||
|ƒ\‰‰	||
|ƒ\‰‰
||
|| ƒ\‰‰|
 ¡ }||
| |k  |8  < |||ƒ\‰‰||| |ƒ\‰‰ˆjd ‰dd
„ t	ˆ|ƒD ƒ‰‡ ‡‡‡‡‡‡‡‡	‡
‡‡‡fdd„}|ƒ t
g ƒfS )z9tick_loc, tick_angle, tick_label, (optionally) tick_labelrC   g{®Gáz„?rB   r   r   c                    s$   ˆ  ¡ ˆ j }| t | |g¡¡jS r   )Zget_transformr#   rd   r9   Úcolumn_stackÚT)ÚxÚyZtrf)r   rG   r   r   rN   ¿   s    zAFloatingAxisArtistHelper.get_tick_iterators.<locals>.transform_xyrE   c                 S   s   g | ]\}}|r|‘qS r   r   ©Ú.0ÚlÚmr   r   r   Ú
<listcomp>Ò   s      z?FloatingAxisArtistHelper.get_tick_iterators.<locals>.<listcomp>rD   c                 S   s   g | ]\}}|r|‘qS r   r   ro   r   r   r   rs   â   s      c                  3   sÜ   t  ˆ
ˆ	 ˆˆ ¡} t  ˆˆ ˆˆ ¡}ˆ
ˆ	kˆˆ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   )r9   rf   Úpir$   rc   Ú	functoolsÚpartialÚmplZ
transformsZ_interval_contains_closeÚziprd   re   )ÚddZdd2ÚmmZtick_to_axesZin_01rm   rn   ÚdZd2ZlabÚc2Zd1)r   Úlabelsr   rg   Úxx1aÚxx1bÚxx2aÚxx2brh   Úyy1aÚyy1bÚyy2aÚyy2br   r   Úf1ä   s     ÿz7FloatingAxisArtistHelper.get_tick_iterators.<locals>.f1)r   rG   rQ   r;   r   r9   Z	full_liker8   Úcopyrx   r-   )r   r   rY   rZ   r[   r]   ZdyrV   rW   rX   r\   ZdxZe0r>   ÚmaskrN   Zxx00r†   r   )r   rG   r}   r   rg   r~   r   r€   r�   rh   r‚   rƒ   r„   r…   r   r/   §   sN    





$z+FloatingAxisArtistHelper.get_tick_iteratorsc                 C   s   |j S r   r"   r   r   r   r   Úget_line_transformõ   s    z+FloatingAxisArtistHelper.get_line_transformc                 C   s*   |   |¡ | jd \}}tt ||g¡ƒS )NrF   )r   rQ   r   r9   rk   )r   r   rm   rn   r   r   r   Úget_lineø   s    
z!FloatingAxisArtistHelper.get_line)N)r0   r1   r2   r   Údeprecate_privatize_attributeÚ	grid_infor   r@   r   r_   rj   r$   r/   r‰   rŠ   r5   r   r   r   r   r6   D   s   
+Nr6   c                       sb   e Zd Ze d¡Zd‡ fdd„	Zddd„Zddd„Zdd
d„Z	dd„ Z
ddd„Zddd„Z‡  ZS )ÚGridHelperCurveLinearr   Nc                    s.   t ƒ  ¡  d| _|| _t||||||ƒ| _dS )aÇ  
        aux_trans : a transform from the source (curved) coordinate to
        target (rectilinear) coordinate. An instance of MPL's Transform
        (inverse transform should be defined) or a tuple of two callable
        objects which defines the transform and its inverse. The callables
        need take two arguments of array of source coordinates and
        should return two target coordinates.

        e.g., ``x2, y2 = trans(x1, y1)``
        N)r   r   rQ   Z
_aux_transr   rG   )r   Ú	aux_transrH   rK   rL   rO   rP   r   r   r   r     s    
ûzGridHelperCurveLinear.__init__c                 K   s,   |d k	r| j  |¡ | j jf |Ž d | _d S r   )rG   Zupdate_transformÚupdateZ_old_limits)r   rŽ   Úkwargsr   r   r   Úupdate_grid_finder  s    z(GridHelperCurveLinear.update_grid_finderc                 C   s:   |d kr| j }|d kr|}t| ||d�}t|||d�}|S )N)r   )r=   )r   r   r
   )r   r   r   r=   Úoffsetr   Ú_helperÚaxisliner   r   r   Únew_fixed_axis!  s    z$GridHelperCurveLinear.new_fixed_axisr'   c                 C   sF   |d kr| j }t| |||ƒ}t||ƒ}|j d¡ |j |j j¡ |S )NT)r   r6   r
   ÚlineZset_clip_onZset_clip_boxZbbox)r   r   r8   r   r=   r“   r”   r   r   r   Únew_floating_axis0  s       ÿ
	z'GridHelperCurveLinear.new_floating_axisc                 C   s   | j  ||||¡| _d S r   )rG   Zget_grid_inforQ   )r   rR   rT   rS   rU   r   r   r   Ú_update_gridL  s    z"GridHelperCurveLinear._update_gridÚmajorÚbothc                 C   sT   g }|dkr*| j d d D ]}| |¡ q|dkrP| j d d D ]}| |¡ q@|S )N)rš   rm   ÚlonÚlines)rš   rn   Úlat)rQ   Úextend)r   ÚwhichZaxisZ
grid_linesÚglr   r   r   Úget_gridlinesO  s    z#GridHelperCurveLinear.get_gridlinesFc           
      c   s¶   t ddddd�| }ddg| }|slt| j| d | | j| d | ƒD ]\\}}}|}	||	||fV  qJnFt| j| d | | j| d | ƒD ]\\}}}|}	||	|dfV  q’d S )	NéZ   r   )r&   r%   r'   r(   r›   r�   Z	tick_locsZtick_labelsÚ )Údictrx   rQ   )
r   r   Z	axis_sider)   Zangle_tangentZ
lon_or_latZxyÚarq   Zangle_normalr   r   r   r,   Y  s    þþz'GridHelperCurveLinear.get_tick_iterator)NNNNN)N)NNNN)Nr'   )r™   rš   )F)r0   r1   r2   r   r‹   rŒ   r   r‘   r•   r—   r˜   r¡   r,   r5   r   r   r   r   r�   þ   s&   
     û
    ü
  ý


r�   )r3   ru   Ú	itertoolsr   Únumpyr9   Z
matplotlibrw   r   Zmatplotlib.pathr   Zmatplotlib.transformsr   r   Z	axislinesr   r	   Zaxis_artistr
   rG   r   ZFixedr   ZFloatingr6   r�   r   r   r   r   Ú<module>   s   1 ;