a
    ìÝEbÈ2  ã                   @   sð   d 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   úe/home/ja/django-apps/lartica_env/lib/python3.9/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u 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 \}}}ˆjd \}}}t |¡t |¡ }}|durX|| }d| }	n|}d}	|durz|| }
d| }n|}
d}ˆj j}t|dd… ƒ\}}t|dd… ƒ\}}‡ ‡fdd„}ˆ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 ƒ‰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_infoÚlon_infoNgü©ñÒMbP?é   c                    s$   ˆ  ¡ ˆ j }| t | |g¡¡jS r    )Úget_transformÚ	transDataÚ	transformÚnpÚcolumn_stackÚT)ÚxÚyZtrf)r#   Úgrid_finderr   r   Útransform_xyK   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>`   ó    z<FixedAxisArtistHelper.get_tick_iterators.<locals>.<listcomp>r   Ú
lon_labelsc                 S   s   g | ]\}}|r|‘qS r   r   r3   r   r   r   r7   s   r8   c                  3   s  t  ˆ
ˆ	 ˆˆ ¡} t  ˆˆ ˆˆ ¡}ˆ
ˆ	 dkˆˆ dk@ }|| t jd  | |< ˆ ˆ ¡ˆ j }tˆˆ| |ˆƒD ]Œ\}}}}}| ||f¡}	d}
d|
 |	d   kr¶d|
 krvn qvd|
 |	d   krÚd|
 krvn qvt  ||g¡\}}||g|||fV  qvd S )Nr   r&   gñhãˆµøä>r   )r*   Zarctan2ÚpiZget_tick_transformÚ	transAxesÚzipr)   Zrad2deg)ÚddZdd2ÚmmZtick_to_axesr-   r.   ÚdZd2ZlabÚc2ÚdeltaZd1)r#   Úlabelsr   Úxx1Úxx1aÚxx1bÚxx2aÚxx2bÚyy1Úyy1aÚyy1bÚyy2aÚyy2br   r   Úf1u   s    Hz4FixedAxisArtistHelper.get_tick_iterators.<locals>.f1)r   r/   r"   r*   ÚasarrayÚ	_extremesÚsortedr   Ú	full_liker   ZastypeÚfloatr<   Úiter)r   r#   Úlat_levsÚlat_nÚ
lat_factorÚlon_levsÚlon_nÚ
lon_factorÚyy0ZdyÚxx0ZdxÚextremesÚxminÚxmaxÚyminÚymaxr0   ÚmaskZxx00Zyy00rM   r   )r#   r/   rB   r   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r   Úget_tick_iterators0   sd    



$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   Ur   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 u r| j }|d u 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 u rtƒ | _ | j }| j}| |j||||¡}t|d d… ƒ\}}	t|dd … ƒ\}
}| ||	¡\}}}| |
|¡\}}}||	|
|f|d< |||f|d< |||f|d< | d||¡|d< | 	d||¡|d< |d u rêt
 |d |… ¡}nt
 |d |… | ¡}|d u �rt
 |d |… ¡}nt
 |d |… | ¡}| |||k ||	k @  ||
|k ||k @  ||	|
|¡\}}||d< ||d	< |j|d d… |dd … g|¢R Ž \}}||d
< ||d< d S )Nr&   r\   r%   r$   rh   r9   r2   Ú	lon_linesÚ	lat_linesrc   rd   )r"   rj   r/   r}   Zinv_transform_xyrP   ry   rz   r{   r|   r*   rN   Z_get_raw_grid_lines)r   rs   rt   ru   rv   Z	grid_infor/   r\   Zlon_minZlon_maxZlat_minZlat_maxrW   rX   rY   rT   rU   rV   Z
lon_valuesZ
lat_valuesrƒ   r„   r   r   r   Ú_update_gridå   sX    
ÿ
ÿ
ÿþþ
ýþþz"GridHelperCurveLinear._update_gridÚmajorÚbothc                 C   s8   g }|dv r|  | jd ¡ |dv 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 \}}}}| 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¡}| t ||g¡ ¡ ¡}|S )zK
        Return (N, 2) array of (x, y) coordinate of the boundary.
        éd   Néÿÿÿÿr   )	rO   Z
_aux_transr*   ZlinspacerQ   Zconcatenater)   ÚarrayZ	transpose)r   Úx0rs   Úy0rt   Útrrm   rZ   rH   rn   r[   rC   ZxxxZyyyÚtr   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       ü    ü
(5
rx   c                       s8   e Zd Z‡ fdd„Zdd„ Z‡ fdd„Zdd„ Z‡  ZS )	ÚFloatingAxesBasec                    sV   |  dd ¡}|d u rtdƒ‚t|dƒs.tdƒ‚tƒ j|i |¤Ž |  d¡ |  ¡  d S )Nr   z*FloatingAxes requires grid_helper argumentr’   z.grid_helper must implement get_boundary methodg      ð?)ÚgetÚ
ValueErrorÚhasattrr   r   Z
set_aspectÚadjust_axes_lim)r   ÚargsÚkwargsr   r   r   r   r   :  s    

zFloatingAxesBase.__init__c                 C   s\   t |  ¡ jg d¢ƒ\\}}\}}\}}\}}t ||f||f||f||fg¡}d| ¡ _|S )Nre   r‹   )ÚmapÚget_grid_helperr   ÚmpatchesZPolygonÚget_pathZ_interpolation_steps)r   rŽ   Ú_rs   r�   rt   Úpatchr   r   r   Ú_gen_axes_patchD  s    þ"
z FloatingAxesBase._gen_axes_patchc                    sd   t ƒ  ¡  | j |  ¡ j ¡ | j ¡ t ƒ  ¡ }| 	| j
¡ | | j¡ | j |¡ | j |¡ d S r    )r   Úclar    Zset_transformrœ   r/   r'   r(   r¡   Z
set_figureÚfigurer;   Zset_clip_pathZ	gridlines)r   Z
orig_patchr   r   r   r¢   N  s    
ÿÿ
zFloatingAxesBase.clac                 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˜   [  s    
þz FloatingAxesBase.adjust_axes_lim)r   r   r   r   r¡   r¢   r˜   rp   r   r   r   r   r”   8  s   

r”   z
Floating{})"Ú__doc__Únumpyr*   Z
matplotlibr   r   Zmatplotlib.patchesZpatchesr�   Zmatplotlib.pathr   Zmatplotlib.axesr#   ZmaxesZ%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>   s0   
ÿt ,ÿÿ