a
    ìÝEb­3  ã                   @   s    d Z ddlm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.
é    )ÚchainN)Ú_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u 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__© úo/home/ja/django-apps/lartica_env/lib/python3.9/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 u rd| j  | _ n|dv 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_transform0   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   Úv1Úv2r   ÚgZti1Zti2r   r   r   Úget_tick_iterators3   s    ÿÿz(FixedAxisArtistHelper.get_tick_iterators)N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú
deprecatedr    r#   r0   Ú__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   r9   Úaxis_directionr   r   r   r   D   s
    z!FloatingAxisArtistHelper.__init__c                 C   s,   |d u rt j }|d u rt j}||f| _d S r   )r:   r;   r<   )r   Úe1Úe2r   r   r   Úset_extremesO   s
    z%FloatingAxisArtistHelper.set_extremesc              	   C   st  | 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|||f|||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_locator2r:   Úfullr=   r9   ZlinspaceÚtransform_xyÚtick_formatter1Útick_formatter2Ú
_grid_info)r   r   Úx1Úx2Úy1Úy2rH   rB   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Úyy0ÚxxÚyyr   r   r   r   V   sL    ÿ






ÿ
ÿ

ÿÿø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 )NrB   r   é   é   iè  r   )NN)rR   r   r9   Úabsr   rH   rO   r"   Ú	transAxesÚ	transformr:   Úrad2degÚarctan2)r   r   rB   r]   r^   ZdxxZdyyrH   Ú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 \}}}t |¡}|| }d| }ˆjd \}}}	t |¡}||	 }
d|	 }ˆj\}}ˆjdkrŠ||k||k@ }|| }n"ˆjdkr¬||
k|
|k@ }|
| }
‡ ‡fdd„}ˆjdk�rbt |ˆ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_labelrD   g{®Gáz„?rC   r   r   c                    s$   ˆ  ¡ ˆ j }| t | |g¡¡jS r   )Zget_transformr"   rf   r:   Úcolumn_stackÚT)ÚxÚyZtrf)r   rH   r   r   rO   ¾   s    zAFloatingAxisArtistHelper.get_tick_iterators.<locals>.transform_xyrF   c                 S   s   g | ]\}}|r|‘qS r   r   ©Ú.0ÚlÚmr   r   r   Ú
<listcomp>Ñ   ó    z?FloatingAxisArtistHelper.get_tick_iterators.<locals>.<listcomp>rE   c                 S   s   g | ]\}}|r|‘qS r   r   rq   r   r   r   ru   á   rv   c                  3   s   t  ˆ
ˆ	 ˆˆ ¡} t  ˆˆ ˆˆ ¡}ˆ
ˆ	kˆˆk@ }|| t jd  | |< ˆ ˆ ¡ˆ j }tˆˆ| |ˆƒD ]Œ\}}}}}| ||f¡}	d}
d|
 |	d   kr®d|
 krnn qnd|
 |	d   krÒd|
 krnn qnt  ||g¡\}}||g|||fV  qnd S )Nrb   gñhãˆµøä>r   r   )r:   rh   Úpir#   re   Úziprf   rg   )ÚddZdd2ÚmmZtick_to_axesro   rp   ÚdZd2ZlabÚc2ÚdeltaZd1)r   Úlabelsr   ri   Úxx1aÚxx1bÚxx2aÚxx2brj   Úyy1aÚyy1bÚyy2aÚyy2br   r   Úf1ã   s    Hz7FloatingAxisArtistHelper.get_tick_iterators.<locals>.f1)r   rH   rR   r:   Zasarrayr<   r   Z	full_liker9   Úcopyrx   r,   )r   r   rZ   r[   r\   r^   ZdyrW   rX   rY   r]   ZdxZe0r?   ÚmaskrO   Zxx00r‡   r   )r   rH   r~   r   ri   r   r€   r�   r‚   rj   rƒ   r„   r…   r†   r   r0   ¤   sR    







$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 )NrG   )r   rR   r   r:   rm   )r   r   ro   rp   r   r   r   Úget_lineö   s    
z!FloatingAxisArtistHelper.get_line)N)r1   r2   r3   r   Údeprecate_privatize_attributeÚ	grid_infor   rA   r   ra   rl   r#   r0   rŠ   r‹   r6   r   r   r   r   r7   A   s   
+Or7   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   rR   Z
_aux_transr   rH   )r   Ú	aux_transrI   rL   rM   rP   rQ   r   r   r   r   ÿ   s    
ûzGridHelperCurveLinear.__init__c                 K   s0   |d ur| j  |¡ | j jf i |¤Ž d | _d S r   )rH   Zupdate_transformÚupdateZ_old_limits)r   r�   Úkwr   r   r   Úupdate_grid_finder  s    z(GridHelperCurveLinear.update_grid_finderc                 C   s:   |d u r| j }|d u 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 u r| j }t| |||ƒ}t||ƒ}|j d¡ |j |j j¡ |S )NT)r   r7   r
   ÚlineZset_clip_onZset_clip_boxZbbox)r   r   r9   r   r>   r”   r•   r   r   r   Únew_floating_axis.  s    ÿ
	z'GridHelperCurveLinear.new_floating_axisc                 C   s   | j  ||||¡| _d S r   )rH   Zget_grid_inforR   )r   rS   rU   rT   rV   r   r   r   Ú_update_gridJ  s    z"GridHelperCurveLinear._update_gridÚmajorÚbothc                 C   sT   g }|dv r*| j d d D ]}| |¡ q|dv rP| j d d D ]}| |¡ q@|S )N)r›   ro   ÚlonÚlines)r›   rp   Úlat)rR   Úextend)r   ÚwhichZaxisZ
grid_linesÚglr   r   r   Úget_gridlinesM  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   rR   )
r   r   Z	axis_sider(   Zangle_tangentZ
lon_or_latZxyÚars   Zangle_normalr   r   r   r+   W  s    þþz'GridHelperCurveLinear.get_tick_iterator)NNNNN)N)NNNN)Nr&   )rš   r›   )F)r1   r2   r3   r   rŒ   r�   r   r’   r–   r˜   r™   r¢   r+   r6   r   r   r   r   rŽ   ü   s&   
     û
    ü
  ý


rŽ   )r4   Ú	itertoolsr   Únumpyr:   Z
matplotlibr   Zmatplotlib.pathr   Zmatplotlib.transformsr   r   Z	axislinesr   r	   Zaxis_artistr
   rH   r   ZFixedr   ZFloatingr7   rŽ   r   r   r   r   Ú<module>   s   1 <