
    P/Pha(                     ~   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ej                  Z G d dej                  Z G d de          Z G d dej                  Z G d d          Z ej        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                       e Zd ZdS )FloatingAxisArtistHelperN)__name__
__module____qualname__     e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mpl_toolkits/axisartist/floating_axes.pyr   r      s        Dr   r   c                   2     e Zd Zd fd	Zd Zd Zd Z xZS )FixedAxisArtistHelperNc           	      &    |j         j        dgdz   \  }}}}t          j        t	          |df|df|df|df          |          \  }}	t                                          ||	||           ||	}|| _        || _        || _	        || _
        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   check_getitemdictsuper__init__nth_coord_ticksvaluegrid_helper_side)selfr(   r   r&   lon1lon2lat1lat2r'   	nth_coord	__class__s             r   r%   zFixedAxisArtistHelper.__init__   s    
 "H!8!G$RS!TdD$-tQiay$q	RRR  y 	itLLL"'O.
&


r   c                 \    | j                             |           | j         j        | _        d S N)r(   
update_lim
_grid_info)r*   axess     r   r3   z FixedAxisArtistHelper.update_lim1   s*    ##D)))*5r   c                 0   | j         j        | j        d         \  }}}||z  }| j        d         \  }}}||z  }	 | j         j        j        dgdz   }
t	          |
dd                   \  }}t	          |
dd                   \  }}fd}| j        dk    rO||k    ||k    z  }t          j        || j        ||         ||f||f          \  \  \  }}\  }}| j        d         nY| j        d	k    rN||	k    |	|k    z  }t          j        ||	|         | j        ||f||f          \  \  \  }}\  }}| j        d
         d t          |          D             t          j        ||          t          j        ||          |dk    |dk    z  }|         t          j        dz  z   |<   |                               j        z
  t          j        t"          j        j        d          fd} |            t)          g           fS )z9tick_loc, tick_angle, tick_label, (optionally) tick_labellat_infolon_infoNr      c                                                      j        z   }|                    t          j        t          j        | |                              j        S r2   )get_transform	transData	transformnpcolumn_stackbroadcast_arraysT)xytrfr5   r    s      r   trf_xyz8FixedAxisArtistHelper.get_tick_iterators.<locals>.trf_xyD   sG    ++-->C==1DQ1J1J!K!KLLNNr   r   
lat_labelsr   
lon_labelsc                     g | ]	\  }}||
S r   r   ).0lms      r   
<listcomp>z<FixedAxisArtistHelper.get_tick_iterators.<locals>.<listcomp>V   s!    7771Q7!777r   )r   r   c               3      K   t          	          D ]a\  } }}}}
                    | |f          } |d                   r1 |d                   r | |ggt          j        ||g          |R V  bd S )Nr   r   )zipr=   r>   rad2deg)rB   rC   normaltangentlabc2angle_normalangle_tangentin_01labelstick_to_axesxx1yy1s         r   f1z4FixedAxisArtistHelper.get_tick_iterators.<locals>.f1a   s      3\=&IIF F*1fgs!++QF335A<< FEE"Q%LL Fa&E2:vw.?#@#@E#EEEEE	F Fr   )r(   r    r4   r!   sortedr/   r	   _value_and_jacobianr'   rN   r>   arctan2piget_tick_transform	transAxes	functoolspartialmpl
transforms_interval_contains_closeiter)r*   r5   lat_levslat_n
lat_factoryy0lon_levslon_n
lon_factorxx0extremesxminxmaxyminymaxrE   maskdxx1dyy1dxx2dyy2mmr[   rT   rU   r    rV   rW   rX   rY   rZ   s    `                     @@@@@@@@r   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iterators5   s    &2&*oj&A#%#&*oj&A#%#>4#/>
KHRaRL))
dHQRRL))
d	O 	O 	O 	O 	O 	O >QCKC4K0D';DJD	D$<$O O 3JS#tltT _\2FF^q  CKC4K0D';CItzD$<$O O 3JS#tltT _\2F77FD 1 1777z$--
4..aiDAI&(,ruqy8R..t44t~E!N3V= =	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F rttT"XX~r   c                     |                      |           t          dddd          | j                 \  }}| j        |         |         \  }}t	          t          j        ||g                    S )N)
lon_lines0r   )r}   r   )
lat_lines0r   )r~   r   r   )r3   r#   r)   r4   r   r>   r?   )r*   r5   kvxxyys         r   get_linezFixedAxisArtistHelper.get_linej   sw    *+,)+ + + ,0:71 #A&BBORH--...r   r2   )r   r   r   r%   r3   r{   r   __classcell__r0   s   @r   r   r      sk             $6 6 63 3 3j/ / / / / / /r   r   c                       e Zd Zd Zd ZdS )ExtremeFinderFixedc                     || _         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	_extremes)r*   rp   s     r   r%   zExtremeFinderFixed.__init__w   s     "r   c                     | j         S r2   r   )r*   transform_xyx1y1x2y2s         r   __call__zExtremeFinderFixed.__call__   s
    ~r   N)r   r   r   r%   r   r   r   r   r   r   t   s2        	" 	" 	"    r   r   c                   @     e Zd Z	 	 	 	 d fd	Z	 ddZd Zd	dZ xZS )
GridHelperCurveLinearNc                 p    t                                          |t          |          ||||           d S )N)r!   grid_locator1grid_locator2tick_formatter1tick_formatter2)r$   r%   r   )r*   	aux_transrp   r   r   r   r   r0   s          r   r%   zGridHelperCurveLinear.__init__   sI     	(:8(D(D'4'4)8)8 	 	: 	: 	: 	: 	:r   c                     || j         }||}t          | ||          }t          |||          }|j                            d           |j                            |j         j                   |S )N)r&   r   T)r5   r   r
   lineset_clip_onset_clip_boxbbox)r*   locr/   r   offsetr5   helperaxislines           r   new_fixed_axisz$GridHelperCurveLinear.new_fixed_axis   s    <9D! N '#y2 2 2dF>JJJ!!$'''""8=#5666r   c                 n   | j         t                      | _         | j         }| j        }|                    |j        ||||          }t          |d d                   \  }}	t          |dd                    \  }
}||	|
|f|d<   |                    ||	          \  }}}t          j        |          }|	                    |
|          \  }}}t          j        |          }|||f|d<   |||f|d<   |
                    dd||          |d<   |
                    dd||          |d<   |d |         |z  }|d |         |z  }|                    |||k     ||	k     z           ||
|k     ||k     z           ||	|
|          \  }}||d	<   ||d
<    |j        |d d         |dd          g|R  \  }}||d<   ||d<   d S )Nr9   rp   r8   r7   r   r   rG   rF   	lon_lines	lat_linesr}   r~   )r4   r#   r    r!   inv_transform_xyr\   r   r>   asarrayr   _format_ticks_get_raw_grid_lines)r*   r   r   r   r   	grid_infor    rp   lon_minlon_maxlat_minlat_maxrl   rm   rn   rh   ri   rj   
lon_values
lat_valuesr   r   s                         r   _update_gridz"GridHelperCurveLinear._update_grid   s:   ?""ffDOO	&--k.J.0"b"> > "(2A2,//!(122,// ''7 B	* %%gw77 	$%:h''%%gw77 	$%:h'' (% ;	* (% ;	*"-";";xX#/ #/	,"-";";xX#/ #/	, fuf%
2
fuf%
2
*>>*,g1EFG*,g1EFGWgw 0  0	9
 "+	+!*	+>{>RaRL(122, 3)1 3  3  3	9 #,	,"+	,r   majorbothc                     g }|dv r |                     | j        d                    |dv r |                     | j        d                    |S )N)r   rB   r   )r   rC   r   )extendr4   )r*   whichaxis
grid_liness       r   get_gridlinesz#GridHelperCurveLinear.get_gridlines   sY    
=  dok:;;;=  dok:;;;r   )NNNN)r   r   )r   r   r   r%   r   r   r   r   r   s   @r   r   r      s          $#!%!%	: : : : : : OS   <-, -, -,^       r   r   c                   4     e Zd Z fdZd Z fdZd Z xZS )FloatingAxesBasec                    t          j        t          |            t                      j        |d|i| |                     d           d S )N)r(   r(   g      ?)r   check_isinstancer   r$   r%   
set_aspect)r*   r(   argskwargsr0   s       r   r%   zFloatingAxesBase.__init__   sS    3MMMM$BKB6BBBr   c                      |                                  j        j        d gdz   \  }}}}t          j        ||f||f||f||fg          }d|                                _        |S )Nr   d   )get_grid_helperr    r!   mpatchesPolygonget_path_interpolation_steps)r*   x0r   y0r   patchs         r   _gen_axes_patchz FloatingAxesBase._gen_axes_patch   so    J--//;JTFUVJWBB 2r(RHr2hR!IJJ03-r   c                 4   t                                                       | j                            |                                 j                                        | j        z              t                                                      }|	                    | 
                    d                     |                    | j                   | j                            |           | j                            |           |                                  d S )NF)root)r$   clearr   set_transformr   r    r;   r<   r   
set_figure
get_figurera   set_clip_path	gridlinesadjust_axes_lim)r*   
orig_patchr0   s     r   r   zFloatingAxesBase.clear   s    
    "".<<>>n	 	 	
 WW,,..
doo5o99:::  000
  ,,,$$Z000r   c                 H   | j                                                             | j                                         | j        z
            }|                    dd          }|                     |j        |j                   | 	                    |j
        |j                   d S )NgRQ?)r   r   get_extentsr;   r<   expandedset_xlimrq   rr   set_ylimrs   rt   )r*   r   s     r   r   z FloatingAxesBase.adjust_axes_lim  s    z""$$00J$$&&79 9 }}T4((di+++di+++++r   )r   r   r   r%   r   r   r   r   r   s   @r   r   r      so            
      , , , , , , ,r   r   z
Floating{}) __doc__rb   numpyr>   
matplotlibrd   r   r   matplotlib.patchespatchesr   matplotlib.pathr   %mpl_toolkits.axes_grid1.parasite_axesr    r   r	   axis_artistr
   r    r   r   r   r   r   r   _make_class_factoryfloatingaxes_class_factoryAxesFloatingAxesFloatingSubplotr   r   r   <module>r      s                " " " " " " " " % % % % % %             I I I I I I 0 0 0 0 0 0 0 0 # # # # # # , , , , , ,	 	 	 	 	8	 	 	
T/ T/ T/ T/ T/3L T/ T/ T/n    ,   &b b b b b3I b b bJ", ", ", ", ", ", ", ",J 7U67GVV ))*A*A).*Q*QRRr   