
    (?ed1                         d Z ddlZddlmZ ddlZddlZddlm	Z	 ddl
mZmZ ddlmZmZmZ ddlmZ dd	lmZ d
 Z G d de          Z G d de          Z G d de          ZdS )z/
An experimental support for curvilinear grid.
    N)chain)Path)Affine2DIdentityTransform   )_FixedAxisArtistHelperBase_FloatingAxisArtistHelperBaseGridHelperBase)
AxisArtist)
GridFinderc                 :   t          j        t                    j        dz  } | ||          }t	          |          \  }}||z
  }	||z
  }
t          j        ddg|
|	k              t          j        |t          j        |	|
                    z  } | ||z   |          }t	          |          \  }}||z
  }||z
  }t          j        ddg||k              t          j        |t          j        ||                    z  } | |||z             }|||z
  |z  ||z
  |z  fS )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                      Olib/python3.11/site-packages/mpl_toolkits/axisartist/grid_helper_curvelinear.py_value_and_jacobianr*      s'    (5//
#
&C
$r2,,C e}}HC8D8DGRGTT\**jbjt44556DT"t)R  Fe}}HC8D8DGRGTT\**jbjt44556DT"b4i  F&3,$&#(=>>    c                   6     e Zd ZdZd fd	Zd Zd Zd Z xZS )FixedAxisArtistHelperz(
    Helper class for a fixed axis.
    Nc                     t                                          |           || _        || j        }|| _        || _        dS )}
        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)selfr3   r6   r5   	__class__s       r)   r2   zFixedAxisArtistHelper.__init__1   sH     	T"""&""nO.			r+   c                 :    | j                             |           d S N)r3   
update_limr7   axess     r)   r;   z FixedAxisArtistHelper.update_lim@   s    ##D)))))r+   c                     |j         S r:   	transDatar<   s     r)   get_tick_transformz(FixedAxisArtistHelper.get_tick_transformC   
    ~r+   c                 p   | j         dk    r|                                n|                                \  }}||k    rddddd| j                 }n| j        }| j        }|                    | j        |          }|                    d| j        z
  |d	          }t          ||          t          g           fS )
z tick_loc, tick_angle, tick_labelr   rightleftbottomtop)rE   rD   rG   rF   r   T)minor)	r4   get_ylimget_xlimr6   r3   get_tick_iteratorr5   r   iter)r7   r=   v1v2r6   gti1ti2s           r)   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iteratorsF   s    $(Na$7$7T]]__B77#f#u6 66:iADD 9D!!$"6==!!!D$8"8$d!KKS#R((r+   r:   )	__name__
__module____qualname____doc__r2   r;   rA   rR   __classcell__r8   s   @r)   r-   r-   ,   st              * * *  ) ) ) ) ) ) )r+   r-   c                   P     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	 Z
d
 Z xZS )FloatingAxisArtistHelperNc                     t                                          ||           || _        || _        t          j         t          j        f| _        d| _        dS )r/   d   N)r1   r2   valuer3   r   inf	_extremes_line_num_points)r7   r3   r4   r]   axis_directionr8   s        r)   r2   z!FloatingAxisArtistHelper.__init__V   sM    
 	E***
&&"& #r+   c                 R    |t           j         }|t           j        }||f| _        d S r:   )r   r^   r_   )r7   e1e2s      r)   set_extremesz%FloatingAxisArtistHelper.set_extremesa   s+    :&B:BRr+   c           	      l   | j                             |           |                                \  }}|                                \  }}| j         j        }|                    |j        ||||          }|\  }}	}
}| j        \  }}| j        dk    r!t          ||
          }
t          ||          }n+| j        dk    r t          ||          }t          ||	          }	|                    ||	          \  }}}|                    |
|          \  }}}| j        dk    rTt          j        | j        | j                  }t          j        |
|| j                  }|                    ||          \  }}n^| j        dk    rSt          j        ||	| j                  }t          j        | j        | j                  }|                    ||          \  }}||	|
|f||t          j        |          f||t          j        |          f|                    d||          |                    d||          ||fd| _        d S )Nr   r   rF   )extremeslon_infolat_info
lon_labels
lat_labelsline_xy)r3   r;   rJ   rI   grid_finderextreme_finderinv_transform_xyr_   r4   maxmingrid_locator1grid_locator2r   fullr`   r]   linspacetransform_xyasarraytick_formatter1tick_formatter2
_grid_info)r7   r=   x1x2y1y2rm   rg   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;   z#FloatingAxisArtistHelper.update_limh   sG   ##D)))BB&2--k.J.0"b"> > .6*'7~u>Q%))G%))GG^q  %))G%))G %%gw77 	$% %%gw77 	$% >Q'$/<<C+gw0EFFC --c377FB^q  +gw0EFFC'$/<<C --c377FB !'7G<!5"*Z*@*@A!5"*Z*@*@A%55*h0 0%55*h0 0Bx	
 	
r+   c                     t                      S r:   )r   r<   s     r)   get_axislabel_transformz0FloatingAxisArtistHelper.get_axislabel_transform   s    zzr+   c           	           fd} j         d         \  }}}} j        dk    r j        }||z   dz  }n j        dk    r||z   dz  } j        }t          |||||f||f          \  }	}
}j                                                            |	          }d|d         cxk    rdk    rSn nPd|d         cxk    rdk    r=n n:||
g j                 }|	t          j        t          j	        |d d d                    fS dS )Nc                     j         j                                        j        z   }|                    | |g          j        S r:   )r3   rm   get_transformr@   	transformTxytrfr=   r7   s      r)   trf_xyz@FloatingAxisArtistHelper.get_axislabel_pos_angle.<locals>.trf_xy   s:    ".<<>>OC==!Q((**r+   rg   r      r   r   )NN)
rz   r4   r]   r*   	transAxesinvertedr   r   rad2degarctan2)r7   r=   r   xminxmaxyminymaxr   r   xy1dxy1_dxdxy1_dypds   ``            r)   get_axislabel_pos_anglez0FloatingAxisArtistHelper.get_axislabel_pos_angle   s>   	+ 	+ 	+ 	+ 	+ 	+ "&!<dD$>Q*C$;!#CC^q  $;!#C*C 3CtTlT4L!: !:WgN##%%//44!>>>>>>>>>a1Q4nnnn1nnnnn'"4>2A
2:q2w#78888:r+   c                     t                      S r:   )r   r<   s     r)   rA   z+FloatingAxisArtistHelper.get_tick_transform   s     """r+   c                      j         d         \  }}}||z  } j         d         \  }}}||z  }	 j        \  }
} fd} j        dk    r_|
|k    ||k    z  }t          | j        ||         t
          j         t
          j        f|
|f          \  \  \  }}\  }} j         d         ni j        dk    r^|
|	k    |	|k    z  }t          ||	|          j        t
          j         t
          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_labelri   rh   c                     j         j                                        j        z   }|                    t          j        t          j        | |                              j        S r:   )	r3   rm   r   r@   r   r   column_stackbroadcast_arraysr   r   s      r)   r   z;FloatingAxisArtistHelper.get_tick_iterators.<locals>.trf_xy   sM    ".<<>>OC==1DQ1J1J!K!KLLNNr+   r   rk   r   rj   c                     g | ]	\  }}||
S  r   ).0lms      r)   
<listcomp>z?FloatingAxisArtistHelper.get_tick_iterators.<locals>.<listcomp>   s!    7771Q7!777r+   r   )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   r   )r   r   normaltangentlabc2angle_normalangle_tangentin_01labelstick_to_axesxx1yy1s         r)   f1z7FloatingAxisArtistHelper.get_tick_iterators.<locals>.f1   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+   )rz   r_   r4   r*   r]   r   r^   r   r   pirA   r   	functoolspartialmpl
transforms_interval_contains_closerL   )r7   r=   r   r   r   r   r   r   r   r   e0rc   r   maskdxx1dyy1dxx2dyy2mmr   r   r   r   r   r   r   r   s   ``                  @@@@@@@r)   rR   z+FloatingAxisArtistHelper.get_tick_iterators   sS    '+oj&A#%#&*oj&A#%#B	O 	O 	O 	O 	O 	O
 >Q#I#),D5H
CI/@2r(6L 6L2JS#tltT_\2FF^q  #I#),D5HD	4:/@2r(6L 6L2JS#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                     |j         S r:   r?   r<   s     r)   get_line_transformz+FloatingAxisArtistHelper.get_line_transform   rB   r+   c                     |                      |           | j        d         \  }}t          t          j        ||g                    S )Nrl   )r;   rz   r   r   r   )r7   r=   r   r   s       r)   get_linez!FloatingAxisArtistHelper.get_line   s@    y)1BOQF++,,,r+   r:   )rS   rT   rU   r2   re   r;   r   r   rA   rR   r   r   rW   rX   s   @r)   rZ   rZ   T   s        	$ 	$ 	$ 	$ 	$ 	$     )
 )
 )
V    *# # #. . .`  - - - - - - -r+   rZ   c                   d     e Zd Z	 	 	 	 	 d fd	ZddZ	 	 	 	 ddZ	 	 ddZd Zdd
ZddZ	 xZ
S )GridHelperCurveLinearNc                     t                                                       d| _        t          ||||||          | _        dS )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)r1   r2   rz   r   rm   )r7   	aux_transrn   rr   rs   rx   ry   r8   s          r)   r2   zGridHelperCurveLinear.__init__   sK    4 	%i&4&3&3&5&57 7r+   c                 p    || j                             |            | j         j        di | d | _        d S )Nr   )rm   update_transformupdate_old_limits)r7   r   kwargss      r)   update_grid_finderz(GridHelperCurveLinear.update_grid_finder  sI     --i888))&)))r+   c                 h    || j         }||}t          | ||          }t          |||          }|S )N)r5   )ra   )r=   r-   r   )r7   r0   r4   ra   offsetr=   helperaxislines           r)   new_fixed_axisz$GridHelperCurveLinear.new_fixed_axis  sJ    
 <9D! N&tS)LLLdF>JJJ r+   rF   c                     || j         }t          | |||          }t          ||          }|j                            d           |j                            |j         j                   |S )NT)r=   rZ   r   lineset_clip_onset_clip_boxbbox)r7   r4   r]   r=   ra   r   r   s          r)   new_floating_axisz'GridHelperCurveLinear.new_floating_axis   so    
 <9D))UN4 4dF++!!$'''""8=#5666 r+   c                 J    | j                             ||||          | _        d S r:   )rm   get_grid_inforz   )r7   r{   r}   r|   r~   s        r)   _update_gridz"GridHelperCurveLinear._update_grid0  s$    *88RRHHr+   majorbothc                     g }|dv r+| j         d         d         D ]}|                    |           |dv r+| j         d         d         D ]}|                    |           |S )N)r   r   lonlines)r   r   lat)rz   extend)r7   whichaxis
grid_linesgls        r)   get_gridlinesz#GridHelperCurveLinear.get_gridlines3  s    
=  oe,W5 & &!!"%%%%=  oe,W5 & &!!"%%%%r+   Fc              #     K   t          dddd          |         }ddg|         }|sSt          | j        |         d         |         | j        |         d         |                   D ]\  \  }}}|}	||	||fV  d S t          | j        |         d         |         | j        |         d         |                   D ]\  \  }}}|}	||	|dfV  d S )	NZ   r   )rE   rD   rF   rG   r   r   	tick_locstick_labels )dictr   rz   )
r7   r4   	axis_siderH   r   
lon_or_latxyar   r   s
             r)   rK   z'GridHelperCurveLinear.get_tick_iterator=  s#      "Bqa@@@KU^I.
 	:!OJ/<YGOJ/>yIK K 9 9
Q  !,q88888	9 9 "OJ/<YGOJ/>yIK K : :
Q  !,r99999	: :r+   )NNNNNr:   )NNNN)NrF   )r   r   )F)rS   rT   rU   r2   r   r   r   r   r   rK   rW   rX   s   @r)   r   r      s         $##!%!%!7 !7 !7 !7 !7 !7F        "&&*" 	   "  $)1    I I I   : : : : : : : :r+   r   )rV   r   	itertoolsr   numpyr   
matplotlibr   matplotlib.pathr   matplotlib.transformsr   r   	axislinesr   r	   r
   axis_artistr   rm   r   r*   r-   rZ   r   r   r+   r)   <module>r	     s~                                  = = = = = = = =O O O O O O O O O O # # # # # # # # # # # #? ? ?2%) %) %) %) %)6 %) %) %)PP- P- P- P- P-< P- P- P-fg: g: g: g: g:N g: g: g: g: g:r+   