
    
3j'                        S r SSKrSSKrSSKrSSKJrJr  SSKJ	r
  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJr  SS
KJr   " S S\R0                  5      r " S S\R0                  5      r " S S\5      r " S S\R6                  5      r " S S5      r\R:                  " \S5      r\" \" \R>                  5      5      r \ r!g)z/
An experimental support for curvilinear grid.
    N)_apicbook)Path)Bbox)host_axes_class_factory   )	axislinesgrid_helper_curvelinear)
AxisArtist)ExtremeFinderSimplec                       \ rS rSrSrg)FloatingAxisArtistHelper    N)__name__
__module____qualname____firstlineno____static_attributes__r       _/home/wildlama/miniconda3/lib/python3.13/site-packages/mpl_toolkits/axisartist/floating_axes.pyr   r      s    r   r   c                   >   ^  \ rS rSrSU 4S jjrS rS rS rSrU =r	$ )FixedAxisArtistHelper   c           	         > UR                   R                  " S/S-  6 u  pEpg[        R                  " [	        US4US4US4US4S9US9u  p[
        T
U ]  XXS9  Uc  U	nX0l        Xl        Xl	        X l
        g)ze
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   getitem_checkeddictsuper__init__nth_coord_ticksvaluegrid_helper_side)selfr-   r"   r+   lon1lon2lat1lat2r,   	nth_coord	__class__s             r   r*   FixedAxisArtistHelper.__init__   s    
 "-!8!8!G!G$RS!TD//tQiay$q	R 	L"'O.
&
r   c                 p    U R                   R                  U5        U R                   R                  U l        g N)r-   
update_lim
_grid_info)r/   axess     r   r9    FixedAxisArtistHelper.update_lim0   s)    ##D)**55r   c                   ^^^^^^^^^ U R                   R                  mU R                  S   u  p#nX$-  nU R                  S   u  pgnXh-  n	U R                   R                  R                  " S/S-  6 n
[	        U
SS 5      u  p[	        U
SS 5      u  pUU4S jnU R
                  S:X  aH  X:*  X^:*  -  n[        R                  " XR                  UU   X4X45      u  u  mmmmU R                  S   mOWU R
                  S	:X  aG  X:*  X:*  -  n[        R                  " XU   U R                  X4X45      u  u  mmmmU R                  S
   m[        TW5       VVs/ s H  u  nnU(       d  M  UPM     snnmU R                  T5      TR                  -
  m[        R                  " [        R                  R                   S5      mUUUUUUU4S jnU" 5       [#        / 5      4$ s  snnf )z9tick_loc, tick_angle, tick_label, (optionally) tick_labellat_infolon_infoNr      c                    > TR                  5       TR                  -   nUR                  [        R                  " [        R
                  " X5      5      5      R                  $ r8   )get_transform	transData	transformnpcolumn_stackbroadcast_arraysT)xytrfr;   r%   s      r   trf_xy8FixedAxisArtistHelper.get_tick_iterators.<locals>.trf_xyC   sC    ++->C==1D1DQ1J!KLNNNr   r   
lat_labelsr   
lon_labels)r   r   c               3      >#    [        TTTTT	5       H]  u  pp#nT
R                  X45      nT" US   5      (       d  M+  T" US   5      (       d  M=  X//[        R                  " X#/5      QUP7v   M_     g 7f)Nr   r   )ziprD   rE   rad2deg)rI   rJ   normaltangentlabc2angle_normalangle_tangentin_01labelstick_to_axesxx1yy1s         r   f14FixedAxisArtistHelper.get_tick_iterators.<locals>.f1Z   ss     3\=&I +fs!++QF3A<<E"Q%LL&E2::v.?#@E#EE Js   7A5A5%A5)r-   r%   r:   r&   sortedr4   r
   _value_and_jac_angler,   rQ   get_tick_transform	transAxes	functoolspartialmpl
transforms_interval_contains_closeiter)r/   r;   lat_levslat_n
lat_factoryy0lon_levslon_n
lon_factorxx0extremesxminxmaxyminymaxrL   masklmr^   rW   rX   r%   rY   rZ   r[   r\   r]   s    `                  @@@@@@@@r   get_tick_iterators(FixedAxisArtistHelper.get_tick_iterators4   s    &&22&*ooj&A##&*ooj&A####//>>
KHRaL)
HQRL)
	O >>QKCK0D'<<JJD	D<$O 4JS#m __\2F^^q KCK0D'<<ItzzD<$O 4JS#| __\2F #FD 17 11Q! 17..t4t~~E!!NN33V=	F 	F tT"X~ 8s   G*Gc                     U R                  U5        [        SSSSS9U R                     u  p#[        U R                  U   U   5      $ )N)
lon_lines0r   )r}   r   )
lat_lines0r   )r~   r   r   )r9   r(   r.   r   r:   )r/   r;   kvs       r   get_lineFixedAxisArtistHelper.get_linec   sO    *+,)+ ,0::7 DOOA&q)**r   )r:   r.   r-   r+   r,   r8   )
r   r   r   r   r*   r9   rz   r   r   __classcell__r5   s   @r   r   r      s    $6-^+ +r   r   c                        \ rS rSrS rS rSrg)ExtremeFinderFixedl   c                 F    Uu  p#pE[         R                  " X$X55      U l        g)z
This subclass always returns the same bounding box.

Parameters
----------
extremes : (float, float, float, float)
    The bounding box that this helper always returns.
N)r   from_extents_tbbox)r/   rr   x0x1y0y1s         r   r*   ExtremeFinderFixed.__init__o   s!     "''7r   c                     U R                   $ r8   r   )r/   transbboxs      r   _find_transformed_bbox)ExtremeFinderFixed._find_transformed_bbox{   s    {{r   r   N)r   r   r   r   r*   r   r   r   r   r   r   r   l   s    
8r   r   c                   P   ^  \ rS rSr    SU 4S jjr SS jrS rSS jrSrU =r	$ )	GridHelperCurveLinear   c           	      <   > [         TU ]  U[        U5      UUUUS9  g )N)r&   grid_locator1grid_locator2tick_formatter1tick_formatter2)r)   r*   r   )r/   	aux_transrr   r   r   r   r   r5   s          r   r*   GridHelperCurveLinear.__init__   s-     	(:8(D'4'4)8)8 	 	:r   c                     Uc  U R                   nUc  Un[        XUS9n[        XVUS9nUR                  R	                  S5        UR                  R                  UR                   R                  5        U$ )N)r+   r#   T)r;   r   r   lineset_clip_onset_clip_boxr   )r/   locr4   r$   offsetr;   helperaxislines           r   new_fixed_axis$GridHelperCurveLinear.new_fixed_axis   sk    <99D! N 'y2d>J!!$'""8==#5#56r   c                    U R                   c  [        5       U l         U R                   nU R                  nUR                  R	                  UR                  5       R                  5       U5      nUR                  u  pVpxXBS'   UR                  XW5      u  pn[        R                  " U	5      n	UR                  Xh5      u  pn[        R                  " U5      nXU4US'   XU4US'   UR                  SSX5      US'   UR                  SSX5      US'   U	S U
 U-  nUS U U-  nUR                  XU:  X:  -     UUU:  UU:  -     U5      u  nnUUS	'   UUS
'   UR                  UR                  UR                  U5      u  nnUUS'   UUS'   g )Nrr   r?   r>   r   r    rO   r@   rN   	lon_lines	lat_linesr}   r~   )r:   r(   r%   r&   r   rB   invertedextentsr   rE   asarrayr   _format_ticks_get_raw_grid_lines	intervalx	intervaly)r/   r   	grid_infor%   tbboxlon_minlat_minlon_maxlat_maxrn   ro   rp   rj   rk   rl   
lon_values
lat_valuesr   r   s                      r   _update_grid"GridHelperCurveLinear._update_grid   s   ??""fDOOO	&&**AA%%'002D: .3]]*' %*&1&?&?&Q#::h'&1&?&?&Q#::h' ( ;	* ( ;	*"-";";x#/	,"-";";x#/	, fu%
2
fu%
2
*>>*,1EFG*,g1EFG 	9
 "+	+!*	+*>>OOU__e 5	9 #,	,"+	,r   c                     / nUS;   a6  UR                  [        [        R                  U R                  S   5      5        US;   a6  UR                  [        [        R                  U R                  S   5      5        U$ )N)bothrI   r   )r   rJ   r   )extendmaprE   	transposer:   )r/   whichaxis
grid_liness       r   get_gridlines#GridHelperCurveLinear.get_gridlines   sa    
= c",,0LMN= c",,0LMNr   )r:   )NNNN)majorr   )
r   r   r   r   r*   r   r   r   r   r   r   s   @r   r   r      s2      $#!%!%	: OS<),V r   r   c                   @   ^  \ rS rSrU 4S jrS rU 4S jrS rSrU =r	$ )FloatingAxesBase   c                ~   > [         R                  " [        US9  [        TU ]  " USU0UD6  U R                  S5        g )N)r-   r-   g      ?)r   check_isinstancer   r)   r*   
set_aspect)r/   r-   argskwargsr5   s       r   r*   FloatingAxesBase.__init__   s7    3M$BKB6Br   c                     U R                  5       R                  R                  " S /S-  6 u  pp4[        R                  " X4X#4X$4X4/5      nSUR                  5       l        U$ )Nr   d   )get_grid_helperr%   r&   mpatchesPolygonget_path_interpolation_steps)r/   r   r   r   r   patchs         r   _gen_axes_patch FloatingAxesBase._gen_axes_patch   sa    --/;;JJTFUVJW  2(RHrh!IJ03-r   c                   > [         TU ]  5         U R                  R                  U R	                  5       R
                  R                  5       U R                  -   5        [         TU ]!  5       nUR                  U R                  SS95        UR                  U R                  5        U R                  R                  U5        U R                  R                  U5        U R                  5         g )NF)root)r)   clearr   set_transformr   r%   rB   rC   r   
set_figure
get_figurerc   set_clip_path	gridlinesadjust_axes_lim)r/   
orig_patchr5   s     r   r   FloatingAxesBase.clear   s    

    "..<<>nn	
 W,.
doo5o9:  0

  ,$$Z0r   c                 \   U R                   R                  5       R                  U R                   R                  5       U R                  -
  5      nUR                  SS5      nU R                  UR                  UR                  5        U R                  UR                  UR                  5        g )NgRQ?)r   r   get_extentsrB   rC   expandedset_xlimrs   rt   set_ylimru   rv   )r/   r   s     r   r    FloatingAxesBase.adjust_axes_lim   sv    zz""$00JJ$$&79 }}T4(dii+dii+r   r   )
r   r   r   r   r*   r   r   r   r   r   r   s   @r   r   r      s    
, ,r   r   z
Floating{})"__doc__rd   numpyrE   
matplotlibrf   r   r   matplotlib.patchespatchesr   matplotlib.pathr   matplotlib.transformsr   %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 0 # ,	88	
M+3LL M+`, (^3II ^B", ",J #667GV )*A)..*QRr   