
    P/Ph=0                         d Z ddlZddlZddlZddlm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)_api)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                      o/var/www/html/test/jupyter/venv/lib/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                 &     j         dk    r|                                n|                                \  }}||k    rddddd j                 n j        t	          dddd                    fd	} |            t          g           fS )
z tick_loc, tick_angle, tick_labelr   rightleftbottomtop)rE   rD   rG   rF   Z   rE   rD   rF   rG   c               3      K   j         dfdj         z
  dffD ]K\  } }j        j        ddg|                   }|d                  D ]}g |d         |r|d         nd	R V  Ld S )
NTr   Flonlatticksr0   label )r5   r3   
_grid_info)r4   show_labelsgitickangle_tangentr7   r6   s       r)   
iter_majorz<FixedAxisArtistHelper.get_tick_iterators.<locals>.iter_majorQ   s      )401t7K3KU2S+U C C&	;%0%	1JKwK- C CDCDK C C-8@DMMbC C C C C CCC Cr+   )r4   get_ylimget_xlimr6   dictiter)r7   r=   v1v2rU   rT   r6   s   `    @@r)   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iteratorsF   s    $(Na$7$7T]]__B77#f#u6 66:iADD 9D"Bqa@@@F	C 	C 	C 	C 	C 	C 	C z||T"XX%%r+   r:   )	__name__
__module____qualname____doc__r2   r;   rA   r\   __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   rg   axis_directionr8   s        r)   r2   z!FloatingAxisArtistHelper.__init__^   sM    
 	E***
&&"& #r+   c                 R    |t           j         }|t           j        }||f| _        d S r:   )r   rh   ri   )r7   e1e2s      r)   set_extremesz%FloatingAxisArtistHelper.set_extremesi   s+    :&B:BRr+   c           
      p   | 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||          |                    dd||          ||fd| _        d S )Nr   r   rF      )extremeslon_infolat_info
lon_labels
lat_labelsline_xy)r3   r;   rW   rV   grid_finderextreme_finderinv_transform_xyri   r4   maxmingrid_locator1grid_locator2r   fullrj   rg   linspacetransform_xyasarray_format_ticksrP   )r7   r=   x1x2y1y2rx   rr   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_limp   sK   ##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%338Z3 3%338Z3 3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   rx   get_transformr@   	transformTxytrfr=   r7   s      r)   trf_xyz@FloatingAxisArtistHelper.get_axislabel_pos_angle.<locals>.trf_xy   s:    ".<<>>OC==!Q((**r+   rr   r   rq   r   r   )NN)
rP   r4   rg   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_labelrt   rs   c                     j         j                                        j        z   }|                    t          j        t          j        | |                              j        S r:   )	r3   rx   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   rv   r   ru   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+   rq   )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_normalrT   in_01labelstick_to_axesxx1yy1s         r)   rU   z?FloatingAxisArtistHelper.get_tick_iterators.<locals>.iter_major   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+   )rP   ri   r4   r*   rg   r   rh   r   r   pirA   r   	functoolspartialmpl
transforms_interval_contains_closerY   )r7   r=   r   r   r   r   r   r   r   r   e0rm   r   maskdxx1dyy1dxx2dyy2mmrU   r   rT   r   r   r   r   r   s   ``                  @@@@@@@r)   r\   z+FloatingAxisArtistHelper.get_tick_iterators   sT    '+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 z||T"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 )Nrw   )r;   rP   r   r   r   )r7   r=   r   r   s       r)   get_linez!FloatingAxisArtistHelper.get_line   s@    y)1BOQF++,,,r+   r:   )r]   r^   r_   r2   ro   r;   r   r   rA   r\   r   r   ra   rb   s   @r)   rd   rd   \   s        	$ 	$ 	$ 	$ 	$ 	$     )
 )
 )
V    *# # #.& .& .&`  - - - - - - -r+   rd   c                        e Zd Z	 	 	 	 	 d fd	ZddZ ej        dd          	 dd            ZddZd	 Z	ddZ
 ej        d          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   rP   r   rx   )r7   	aux_transry   r}   r~   tick_formatter1tick_formatter2r8   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   )rx   update_transformupdate_old_limits)r7   r   kwargss      r)   update_grid_finderz(GridHelperCurveLinear.update_grid_finder  sI     --i888))&)))r+   z3.9r4   c                 h    || j         }||}t          | ||          }t          |||          }|S )N)r5   )rk   )r=   r-   r   )r7   r0   r4   rk   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=   rd   r   lineset_clip_onset_clip_boxbbox)r7   r4   rg   r=   rk   r   r   s          r)   new_floating_axisz'GridHelperCurveLinear.new_floating_axis&  sm    <9D))UN4 4dF++!!$'''""8=#5666 r+   c                 J    | j                             ||||          | _        d S r:   )rx   get_grid_inforP   )r7   r   r   r   r   s        r)   _update_gridz"GridHelperCurveLinear._update_grid2  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   rK   lines)r   r   rL   )rP   extend)r7   whichaxis
grid_linesgls        r)   get_gridlinesz#GridHelperCurveLinear.get_gridlines5  s    
=  oe,W5 & &!!"%%%%=  oe,W5 & &!!"%%%%r+   Fc              #     K   t          dddd          |         }ddg|         }|s5| j        |         d         |         D ]}g |d         ||d         R V  d S | j        |         d         |         D ]}g |d         |d	R V  d S )
NrH   r   rI   rK   rL   rM   r0   rN   rO   )rX   rP   )r7   r4   	axis_sideminorrT   
lon_or_latrS   s          r)   get_tick_iteratorz'GridHelperCurveLinear.get_tick_iterator?  s      "Bqa@@@KU^I.
 	6
3G<YG A A@tE{@M@4=@@@@@@A A 
3G<YG 6 65tE{5M525555556 6r+   )NNNNNr:   )NNNN)NrF   )r   r   )F)r]   r^   r_   r2   r   r   make_keyword_onlyr   r   r   r   
deprecatedr  ra   rb   s   @r)   r   r      s         $##!%!%!7 !7 !7 !7 !7 !7F        TE;//NR
 
 
 0/

 
 
 
I I I    T_U6 6 6 6 6 6 6 6r+   r   )r`   r   numpyr   
matplotlibr   r   matplotlib.pathr   matplotlib.transformsr   r   	axislinesr   r	   r
   axis_artistr   rx   r   r*   r-   rd   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-fY6 Y6 Y6 Y6 Y6N Y6 Y6 Y6 Y6 Y6r+   