o
    ja(                     @   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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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   f/var/www/html/Deteccion_Ine/venv/lib/python3.10/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           
         s   |j jdgd  \}}}}tjt|df|df|df|dfd|d\}}	t j||	||d |du r4|	}|| _|| _|| _	|| _
dS )z}
        nth_coord = along which coordinate value varies.
         nth_coord = 0 ->  x axis, nth_coord = 1 -> y axis
        N   r   r   leftrightbottomtop)sideaxis_direction)grid_finderextreme_finderr   Zcheck_getitemdictsuper__init__nth_coord_ticksvaluegrid_helper_side)
selfr"   r   r    Zlon1Zlon2Zlat1Zlat2r!   	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)   1   s   z FixedAxisArtistHelper.update_limc                    s  | j j| jd \}}}|| }| jd \}}}|| }	| j jjdgd  }
t|
dd \}}t|
dd \}}fdd}| jdkrm||k||k@ }t|| j|| ||f||f\\\}}\}}| jd	 n+| jd
kr||	k|	|k@ }t||	| | j||f||f\\\}}\}}| jd dd t	|D t
|| t
|||dk|dk@ }| t
jd   |< | j ttjjd fdd}| tg fS )z9tick_loc, tick_angle, tick_label, (optionally) tick_labellat_infolon_infoNr      c                    s(      j }|tt| |jS r(   )get_transform	transData	transformnpcolumn_stackZbroadcast_arraysT)xyZtrf)r+   r   r   r   trf_xyD   s   z8FixedAxisArtistHelper.get_tick_iterators.<locals>.trf_xyr   
lat_labelsr   
lon_labelsc                 S   s   g | ]\}}|r|qS r   r   ).0lmr   r   r   
<listcomp>V   s    z<FixedAxisArtistHelper.get_tick_iterators.<locals>.<listcomp>)r   r   c                  3   sl    t  D ]*\} }}}}| |f}|d r3|d r3| |ggt||g|R V  q	d S )Nr   r   )zipr1   r2   Zrad2deg)r5   r6   normalZtangentZlabc2)angle_normalangle_tangentin_01labelstick_to_axesxx1yy1r   r   f1a   s    z4FixedAxisArtistHelper.get_tick_iterators.<locals>.f1)r"   r   r*   r   sortedr%   r   Z_value_and_jacobianr!   r>   r2   Zarctan2piZget_tick_transform	transAxes	functoolspartialmplZ
transformsZ_interval_contains_closeiter)r$   r+   lat_levslat_n
lat_factorZyy0lon_levslon_n
lon_factorZxx0extremesxminxmaxyminymaxr7   maskZdxx1Zdyy1Zdxx2Zdyy2mmrH   r   )	rA   rB   r+   r   rC   rD   rE   rF   rG   r   get_tick_iterators5   sD   


z(FixedAxisArtistHelper.get_tick_iteratorsc                 C   sH   |  | tddddd| j \}}| j| | \}}tt||gS )N)
lon_lines0r   )r^   r   )
lat_lines0r   )r_   r   r   )r)   r   r#   r*   r   r2   r3   )r$   r+   kvxxyyr   r   r   get_linej   s   
zFixedAxisArtistHelper.get_liner(   )r   r   r   r   r)   r]   rd   __classcell__r   r   r&   r   r      s
    5r   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Z	_extremes)r$   rV   r   r   r   r   w   s   
	zExtremeFinderFixed.__init__c                 C   s   | j S r(   rg   )r$   Ztransform_xyx1y1x2y2r   r   r   __call__   s   zExtremeFinderFixed.__call__N)r   r   r   r   rl   r   r   r   r   rf   t   s    rf   c                       sD   e Zd Z				d fdd	Z	dddZdd Zdd
dZ  ZS )GridHelperCurveLinearNc                    s    t  j|t|||||d d S )N)r   grid_locator1grid_locator2tick_formatter1tick_formatter2)r   r   rf   )r$   Z	aux_transrV   rn   ro   rp   rq   r&   r   r   r      s   
zGridHelperCurveLinear.__init__c                 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+   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< |||	\}}}t|}|	|
|\}}}t|}|||f|d< |||f|d< |
dd|||d< |
dd|||d< |d | | }|d | | }||||k ||	k @  ||
|k ||k @  ||	|
|\}}||d	< ||d
< |j|d d |dd  g|R  \}}||d< ||d< d S )Nr.   rV   r-   r,   r   r   r9   r8   	lon_lines	lat_linesr^   r_   )r*   r   r   r   Zinv_transform_xyrI   rn   r2   Zasarrayro   Z_format_ticksZ_get_raw_grid_lines)r$   rh   ri   rj   rk   Z	grid_infor   rV   Zlon_minZlon_maxZlat_minZlat_maxrS   rT   rU   rP   rQ   rR   Z
lon_valuesZ
lat_valuesrx   ry   r   r   r   _update_grid   sP   




z"GridHelperCurveLinear._update_gridmajorbothc                 C   s8   g }|dv r| | jd  |dv r| | jd  |S )N)r|   r5   rx   )r|   r6   ry   )extendr*   )r$   whichZaxisZ
grid_linesr   r   r   get_gridlines   s   z#GridHelperCurveLinear.get_gridlines)NNNN)r{   r|   )r   r   r   r   rw   rz   r   re   r   r   r&   r   rm      s    
/rm   c                       s8   e Zd Z fddZdd Z fddZdd Z  ZS )	FloatingAxesBasec                   s2   t jt|d t j|d|i| | d d S )N)r"   r"   g      ?)r   Zcheck_isinstancerm   r   r   Z
set_aspect)r$   r"   argskwargsr&   r   r   r      s   zFloatingAxesBase.__init__c                 C   sN   |   jjd gd  \}}}}t||f||f||f||fg}d| _|S )Nr   d   )get_grid_helperr   r   mpatchesZPolygonget_pathZ_interpolation_steps)r$   Zx0rh   Zy0ri   patchr   r   r   _gen_axes_patch   s   "
z FloatingAxesBase._gen_axes_patchc                    sr   t    | j|  j | j  t   }|	| j
dd || j | j| | j| |   d S )NF)root)r   clearr   Zset_transformr   r   r/   r0   r   Z
set_figureZ
get_figurerK   Zset_clip_pathZ	gridlinesadjust_axes_lim)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/   r0   expandedZset_xlimrW   rX   Zset_ylimrY   rZ   )r$   rs   r   r   r   r     s   
z FloatingAxesBase.adjust_axes_lim)r   r   r   r   r   r   r   re   r   r   r&   r   r      s
    r   z
Floating{}) __doc__rL   numpyr2   Z
matplotlibrN   r   r   Zmatplotlib.patchesZpatchesr   Zmatplotlib.pathr   Z%mpl_toolkits.axes_grid1.parasite_axesr    r   r   Zaxis_artistr	   r   r
   r   r   rf   rm   r   Z_make_class_factoryZfloatingaxes_class_factoryZAxesZFloatingAxesZFloatingSubplotr   r   r   r   <module>   s*    
We%