
    h=0                         S r SSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
Jr  SSKJrJrJr  SSKJr  SS	KJr  S
 r " S S\5      r " S S\5      r " S S\5      rg)z/
An experimental support for curvilinear grid.
    N)_api)Path)Affine2DIdentityTransform   )_FixedAxisArtistHelperBase_FloatingAxisArtistHelperBaseGridHelperBase)
AxisArtist)
GridFinderc                     [         R                  " [        5      R                  S-  nU " X5      n[	        U5      u  pxX-
  n	X-
  n
[         R
                  " SS/X:  5      [         R                  " U[         R                  " X5      5      -  nU " X-   U5      n[	        U5      u  pX--
  nX-
  n[         R
                  " SS/UU:  5      [         R                  " U[         R                  " UU5      5      -  nU " XU-   5      nXlU-
  U-  UU-
  U-  4$ )z
Compute *func* and its derivatives along x and y at positions *xs*, *ys*,
while ensuring that finite difference calculations don't try to evaluate
values outside of *xlims*, *ylims*.
g      ?r   )npfinfofloatepssortedtakeminimummaximum)funcxsysxlimsylimsr   valxloxhidxlodxhixepsval_dxyloyhidylodyhiyepsval_dys                      a/var/www/html/env/lib/python3.13/site-packages/mpl_toolkits/axisartist/grid_helper_curvelinear.py_value_and_jacobianr*      s     ((5/

#
&C
r,C e}HC8D8DGGRGT\*jjbjj456D")R Fe}HC8D8DGGRGTT\*jjbjjt456D"4i F3,$&#(=>>    c                   B   ^  \ rS rSrSrSU 4S jjrS rS rS rSr	U =r
$ )	FixedAxisArtistHelper,   z 
Helper class for a fixed axis.
c                 b   > [         TU ]  US9  Xl        Uc  U R                  nX0l        X l        g)e
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)selfr4   r7   r6   	__class__s       r)   r3   FixedAxisArtistHelper.__init__1   s5     	T"&""nnO.	r+   c                 :    U R                   R                  U5        g N)r4   
update_limr8   axess     r)   r=    FixedAxisArtistHelper.update_lim@   s    ##D)r+   c                     UR                   $ r<   	transDatar>   s     r)   get_tick_transform(FixedAxisArtistHelper.get_tick_transformC       ~~r+   c                 
  ^ ^^ T R                   S:X  a  UR                  5       OUR                  5       u  p#X#:  a  SSSSS.T R                     mOT R                  m[	        SSSSS9T   mUU U4S	 jnU" 5       [        / 5      4$ )
z tick_loc, tick_angle, tick_labelr   rightleftbottomtop)rI   rH   rK   rJ   Z   rI   rH   rJ   rK   c               3      >#    TR                   S4STR                   -
  S44 HL  u  pTR                  R                  SS/U       nUS   T    H  n/ US   QTPU(       a  US   OS	P7v   M     MN     g 7f)
NTr   Flonlatticksr1   label )r6   r4   
_grid_info)r5   show_labelsgitickangle_tangentr8   r7   s       r)   
iter_major<FixedAxisArtistHelper.get_tick_iterators.<locals>.iter_majorQ   s     ))401t7K7K3KU2S+U&	%%00%	1JKwK-DCDK C C-8DMbC C .+Us   A1A4)r5   get_ylimget_xlimr7   dictiter)r8   r?   v1v2rY   rX   r7   s   `    @@r)   get_tick_iterators(FixedAxisArtistHelper.get_tick_iteratorsF   s    $(NNa$7T]]_7#f#u66:iiAD 99D"Bqa@F	C |T"X%%r+   )r4   r6   r7   r<   )__name__
__module____qualname____firstlineno____doc__r3   r=   rD   ra   __static_attributes____classcell__r9   s   @r)   r-   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S r	S r
S	 rS
 rSrU =r$ )FloatingAxisArtistHelper\   c                    > [         TU ]  X#5        X0l        Xl        [        R
                  * [        R
                  4U l        SU l        g)r0   d   N)r2   r3   valuer4   r   inf	_extremes_line_num_points)r8   r4   r5   rp   axis_directionr9   s        r)   r3   !FloatingAxisArtistHelper.__init__^   s:    
 	*
&&&"&& #r+   c                 b    Uc  [         R                  * nUc  [         R                  nX4U l        g r<   )r   rq   rr   )r8   e1e2s      r)   set_extremes%FloatingAxisArtistHelper.set_extremesi   s)    :&&B:Br+   c           
         U R                   R                  U5        UR                  5       u  p#UR                  5       u  pEU R                   R                  nUR                  UR                  X$X55      nUu  ppU R                  u  pU R                  S:X  a  [        X5      n
[        X5      nO&U R                  S:X  a  [        X5      n[        X5      n	UR                  X5      u  pnUR                  X5      u  nnnU R                  S:X  ab  [        R                  " U R                  U R                   5      n[        R"                  " XU R                  5      nUR%                  UU5      u  nnOqU R                  S:X  aa  [        R"                  " XU R                  5      n[        R                  " U R                  U R                   5      nUR%                  UU5      u  nnXX4X[        R&                  " U5      4UU[        R&                  " U5      4UR)                  SSUU5      UR)                  SSUU5      WW4S.U l        g )Nr   r   rJ      )extremeslon_infolat_info
lon_labels
lat_labelsline_xy)r4   r=   r\   r[   grid_finderextreme_finderinv_transform_xyrr   r5   maxmingrid_locator1grid_locator2r   fullrs   rp   linspacetransform_xyasarray_format_ticksrT   )r8   r?   x1x2y1y2r   r}   lon_minlon_maxlat_minlat_maxe_mine_maxlon_levslon_n
lon_factorlat_levslat_n
lat_factorxx0yy0xxyys                           r)   r=   #FloatingAxisArtistHelper.update_limp   s   ##D)&&22--k.J.J.0b> .6*'~~>>Q%)G%)G^^q %)G%)G %%g7 	$ %%g7 	$% >>Q''$//<C++g0E0EFC --c37FB^^q ++g0E0EFC''$//<C --c37FB !7<!"**Z*@A!5"**Z*@A%338Z3%338Z3Bx	
r+   c                     [        5       $ r<   )r   r>   s     r)   get_axislabel_transform0FloatingAxisArtistHelper.get_axislabel_transform   s
    zr+   c           	        ^ ^ UU 4S jnT R                   S   u  p4pVT R                  S:X  a  T R                  nXV-   S-  nO#T R                  S:X  a  X4-   S-  nT R                  n[        UWWX44XV45      u  pnTR                  R                  5       R                  U	5      nSUS   s=::  a  S::  aU  O  gSUS   s=::  a  S::  aB  O  gX/T R                     nU	[        R                  " [        R                  " US S S2   6 5      4$ g)Nc                    > TR                   R                  R                  5       TR                  -   nUR	                  X/5      R
                  $ r<   )r4   r   get_transformrC   	transformTxytrfr?   r8   s      r)   trf_xy@FloatingAxisArtistHelper.get_axislabel_pos_angle.<locals>.trf_xy   s=    ""..<<>OC==!(***r+   r}   r   r|   r   r   )NN)
rT   r5   rp   r*   	transAxesinvertedr   r   rad2degarctan2)r8   r?   r   xminxmaxyminymaxr   r   xy1dxy1_dxdxy1_dypds   ``            r)   get_axislabel_pos_angle0FloatingAxisArtistHelper.get_axislabel_pos_angle   s    	+ "&!<D>>Q**C;!#C^^q ;!#C**C 3CtlTL!:gNN##%//4!>> 	  1Q4n1n  "4>>2A

2::q2w#7888r+   c                     [        5       $ r<   )r   r>   s     r)   rD   +FloatingAxisArtistHelper.get_tick_transform   s     ""r+   c                 6  ^ ^^^^^^^^ T R                   S   u  p#nX$-  nT R                   S   u  pgnXh-  n	T R                  u  pUU 4S jnT R                  S:X  a`  X:*  X[:*  -  n[        UT R                  X]   [
        R                  * [
        R                  4X45      u  u  mmu  pu  nnT R                   S   mOoT R                  S:X  a_  X:*  X:*  -  n[        XU   T R                  [
        R                  * [
        R                  4X45      u  u  mmu  nnu  pT R                   S   m[        TW5       VVs/ s H  u  nnU(       d  M  UPM     snnm[
        R                  " WW5      m[
        R                  " WW5      mUS:H  US:H  -  nTU   [
        R                  S-  -   TU'   T 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_labelr   r~   c                    > TR                   R                  R                  5       TR                  -   nUR	                  [
        R                  " [
        R                  " X5      5      5      R                  $ r<   )	r4   r   r   rC   r   r   column_stackbroadcast_arraysr   r   s      r)   r   ;FloatingAxisArtistHelper.get_tick_iterators.<locals>.trf_xy   sO    ""..<<>OC==1D1DQ1J!KLNNNr+   r   r   r   r   r|   )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   )zipr   r   r   )r   r   normaltangentlabc2angle_normalrX   in_01labelstick_to_axesxx1yy1s         r)   rY   ?FloatingAxisArtistHelper.get_tick_iterators.<locals>.iter_major   ss     3\=&I +fs!++QF3A<<E"Q%LL&E2::v.?#@E#EE Js   7A5A5%A5)rT   rr   r5   r*   rp   r   rq   r   r   pirD   r   	functoolspartialmpl
transforms_interval_contains_closer^   )r8   r?   r   r   r   r   r   r   r   r   e0rw   r   maskdxx1dyy1dxx2dyy2lmmmrY   r   rX   r   r   r   r   r   s   ``                    @@@@@@@r)   ra   +FloatingAxisArtistHelper.get_tick_iterators   s    '+ooj&A##&*ooj&A##	O
 >>QI#),D5H

CI/@2(6L2JS#ltT__\2F^^q I#),D5HD	4::/@2(6L2JS#tlt__\2F #FD 17 11Q! 17zz$-

4.aiDAI&(,ruuqy8R..t4t~~E!!NN33V=	F 	F |T"X%%% 8s   9HHc                     UR                   $ r<   rB   r>   s     r)   get_line_transform+FloatingAxisArtistHelper.get_line_transform   rF   r+   c                     U R                  U5        U R                  S   u  p#[        [        R                  " X#/5      5      $ )Nr   )r=   rT   r   r   r   )r8   r?   r   r   s       r)   get_line!FloatingAxisArtistHelper.get_line   s4    y)BOOQF+,,r+   )rr   rT   rs   r4   rp   r<   )rc   rd   re   rf   r3   ry   r=   r   r   rD   ra   r   r   rh   ri   rj   s   @r)   rl   rl   \   s7    	$ )
V*#.&`- -r+   rl   c                      ^  \ rS rSr     SU 4S jjrSS jr\R                  " SS5       SS j5       rSS jr	S r
SS	 jr\R                  " S5      SS
 j5       rSrU =r$ )GridHelperCurveLinear   c                 Z   > [         TU ]  5         SU l        [        UUUUUU5      U l        g)a_  
Parameters
----------
aux_trans : `.Transform` or tuple[Callable, Callable]
    The transform from curved coordinates to rectilinear coordinate:
    either a `.Transform` instance (which provides also its inverse),
    or a pair of callables ``(trans, inv_trans)`` that define the
    transform and its inverse.  The callables should have signature::

        x_rect, y_rect = trans(x_curved, y_curved)
        x_curved, y_curved = inv_trans(x_rect, y_rect)

extreme_finder

grid_locator1, grid_locator2
    Grid locators for each axis.

tick_formatter1, tick_formatter2
    Tick formatters for each axis.
N)r2   r3   rT   r   r   )r8   	aux_transr   r   r   tick_formatter1tick_formatter2r9   s          r)   r3   GridHelperCurveLinear.__init__   s5    4 	%i&4&3&3&5&57r+   c                     Ub  U R                   R                  U5        U R                   R                  " S0 UD6  S U l        g )N )r   update_transformupdate_old_limits)r8   r   kwargss      r)   update_grid_finder(GridHelperCurveLinear.update_grid_finder  s;     --i8)&)r+   z3.9r5   c                 V    Uc  U R                   nUc  Un[        XUS9n[        XVUS9nU$ )N)r6   )rt   )r?   r-   r   )r8   r1   r5   rt   offsetr?   helperaxislines           r)   new_fixed_axis$GridHelperCurveLinear.new_fixed_axis  s<     <99D! N&t)Ld>J r+   c                     Uc  U R                   n[        XX$5      n[        X55      nUR                  R	                  S5        UR                  R                  UR                   R                  5        U$ )NT)r?   rl   r   lineset_clip_onset_clip_boxbbox)r8   r5   rp   r?   rt   r   r   s          r)   new_floating_axis'GridHelperCurveLinear.new_floating_axis&  s^    <99D)U4d+!!$'""8==#5#56 r+   c                 F    U R                   R                  XX45      U l        g r<   )r   get_grid_inforT   )r8   r   r   r   r   s        r)   _update_grid"GridHelperCurveLinear._update_grid2  s    **88Hr+   c                     / nUS;   a*  U R                   S   S    H  nUR                  U5        M     US;   a*  U R                   S   S    H  nUR                  U5        M     U$ )N)bothr   rO   lines)r  r   rP   )rT   extend)r8   whichaxis
grid_linesgls        r)   get_gridlines#GridHelperCurveLinear.get_gridlines5  si    
= ooe,W5!!"% 6= ooe,W5!!"% 6r+   c              #      #    [        SSSSS9U   nSS/U   nU(       d.  U R                  U   S   U    H  n/ US   QUPUS   P7v   M     g U R                  U   S   U    H  n/ US   QUPS	P7v   M     g 7f)
NrL   r   rM   rO   rP   rQ   r1   rR   rS   )r]   rT   )r8   r5   	axis_sideminorrX   
lon_or_latrW   s          r)   get_tick_iterator'GridHelperCurveLinear.get_tick_iterator?  s     "Bqa@KU^I.

3G<YG@tE{@M@4=@@ H 
3G<YG5tE{5M5255 Hs   A7A9)rT   r   r   )NNNNNr<   )NNNN)NrJ   )majorr  )F)rc   rd   re   rf   r3   r   r   make_keyword_onlyr   r  r
  r  
deprecatedr  rh   ri   rj   s   @r)   r   r      sn     $##!%!%!7F  
E;/NR
 0

I 
__U6 6r+   r   )rg   r   numpyr   
matplotlibr   r   matplotlib.pathr   matplotlib.transformsr   r   	axislinesr   r	   r
   axis_artistr   r   r   r*   r-   rl   r   r   r+   r)   <module>r%     sa          =O O # #?2-&6 -&`P-< P-fY6N Y6r+   