
    ^j'                        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 ddlmZmZ dd	lmZ dd
lmZ  G d dej0                        Z G d dej0                        Z G d de      Z G d dej6                        Z G d d      Z ej:                  ed      Z e eej>                              Z e Z!y)z/
An experimental support for curvilinear grid.
    N)_apicbook)Path)Bbox)host_axes_class_factory   )	axislinesgrid_helper_curvelinear)
AxisArtist)ExtremeFinderSimplec                       e Zd Zy)FloatingAxisArtistHelperN)__name__
__module____qualname__     p/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/mpl_toolkits/axisartist/floating_axes.pyr   r      s    r   r   c                   2     e Zd Zd fd	Zd Zd Zd Z xZS )FixedAxisArtistHelperc           	          |j                   j                  dgdz   \  }}}}t        j                  t	        |df|df|df|df      |      \  }}	t
        
|   ||	||       ||	}|| _        || _        || _	        || _
        y)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   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&   zFixedAxisArtistHelper.__init__   s    
 "H!8!8!G!G$RS!TdD$//tQiay$q	Ry 	itL"'O.
&
r   c                 p    | j                   j                  |       | j                   j                  | _        y N)r)   
update_lim
_grid_info)r+   axess     r   r4   z FixedAxisArtistHelper.update_lim0   s)    ##D)**55r   c                    | 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(  rL||k  ||k  z  }t        j                  || j                  ||   ||f||f      \  \  | j                  d   nZ| j
                  d	k(  rK||	k  |	|k  z  }t        j                  ||	|   | j                  ||f||f      \  \  | j                  d
   t              D cg c]
  \  }}|s	| c}}| j                        j                  z
  t        j                  t        j                  j                   d      fd} |       t#        g       fS c c}}w )z9tick_loc, tick_angle, tick_label, (optionally) tick_labellat_infolon_infoNr      c                     j                         j                  z   }|j                  t        j                  t        j
                  | |                  j                  S r3   )get_transform	transData	transformnpcolumn_stackbroadcast_arraysT)xytrfr6   r!   s      r   trf_xyz8FixedAxisArtistHelper.get_tick_iterators.<locals>.trf_xyC   sE    ++->C==1D1DQ1J!KLNNNr   r   
lat_labelsr   
lon_labels)r   r   c               3      K   t        	      D ]T  \  } }}}}
j                  | |f      } |d         s( |d         s4| |ggt        j                  ||g      | V y w)Nr   r   )zipr>   r?   rad2deg)rC   rD   normaltangentlabc2angle_normalangle_tangentin_01labelstick_to_axesxx1yy1s         r   f1z4FixedAxisArtistHelper.get_tick_iterators.<locals>.f1Z   s~     3\=&IF*1fgs!++QF3A<E"Q%La&E2::vw.?#@E#EE	Fs   7A+A+$A+)r)   r!   r5   r"   sortedr0   r
   _value_and_jac_angler(   rJ   get_tick_transform	transAxes	functoolspartialmpl
transforms_interval_contains_closeiter)r+   r6   lat_levslat_n
lat_factoryy0lon_levslon_n
lon_factorxx0extremesxminxmaxyminymaxrF   masklmrW   rP   rQ   r!   rR   rS   rT   rU   rV   s    `                  @@@@@@@@r   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iterators4   s    &&22&*ooj&A#%#&*ooj&A#%#>4##//>>
KHRaL)
dHQRL)
d	O >>QCKC4K0D'<<DJJD	D$<$O 4JS#m __\2F^^q CKC4K0D'<<CItzzD$<$O 4JS#| __\2F #FD 171Q!7..t4t~~E!!NN33V=	F 	F tT"X~ 8s   #
G.Gc                     | j                  |       t        dddd      | j                     \  }}t        | j                  |   |         S )N)
lon_lines0r   )rt   r   )
lat_lines0r   )ru   r   r   )r4   r$   r*   r   r5   )r+   r6   kvs       r   get_linezFixedAxisArtistHelper.get_linec   sQ    *+,)+ ,0::71 DOOA&q)**r   r3   )r   r   r   r&   r4   rr   rx   __classcell__r1   s   @r   r   r      s    $6-^+r   r   c                       e Zd Zd Zd Zy)ExtremeFinderFixedc                 L    |\  }}}}t        j                  ||||      | _        y)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+   rj   x0x1y0y1s         r   r&   zExtremeFinderFixed.__init__o   s)     "BB''BB7r   c                     | j                   S r3   )r   )r+   transbboxs      r   _find_transformed_bboxz)ExtremeFinderFixed._find_transformed_bbox{   s    {{r   N)r   r   r   r&   r   r   r   r   r|   r|   l   s    
8r   r|   c                   @     e Zd Z	 	 	 	 d fd	Z	 ddZd ZddZ xZS )GridHelperCurveLinearc                 B    t         |   |t        |      ||||       y )N)r"   grid_locator1grid_locator2tick_formatter1tick_formatter2)r%   r&   r|   )r+   	aux_transrj   r   r   r   r   r1   s          r   r&   zGridHelperCurveLinear.__init__   s-     	(:8(D'4'4)8)8 	 	:r   c                     || j                   }||}t        | ||      }t        |||      }|j                  j	                  d       |j                  j                  |j                   j                         |S )N)r'   r   T)r6   r   r   lineset_clip_onset_clip_boxr   )r+   locr0   r    offsetr6   helperaxislines           r   new_fixed_axisz$GridHelperCurveLinear.new_fixed_axis   so    <99D! N '#y2dF>J!!$'""8==#5#56r   c                 &   | j                   t               | _         | j                   }| j                  }|j                  j	                  |j                         j                         |      }|j                  \  }}}}||d<   |j                  ||      \  }	}
}t        j                  |	      }	|j                  ||      \  }}}t        j                  |      }|	|
|f|d<   |||f|d<   |j                  dd||	      |d<   |j                  dd||      |d<   |	d |
 |z  }|d | |z  }|j                  |||k  ||k  z     |||k  ||k  z     |      \  }}||d	<   ||d
<   |j                  |j                  |j                  |      \  }}||d<   ||d<   y )Nrj   r9   r8   r   r   rH   r:   rG   	lon_lines	lat_linesrt   ru   )r5   r$   r!   r"   r   r<   invertedextentsr   r?   asarrayr   _format_ticks_get_raw_grid_lines	intervalx	intervaly)r+   r   	grid_infor!   tbboxlon_minlat_minlon_maxlat_maxrf   rg   rh   rb   rc   rd   
lon_values
lat_valuesr   r   s                      r   _update_gridz"GridHelperCurveLinear._update_grid   s   ??""fDOOO	&&**AA%%'002D: .3]]*'7 %	*&1&?&?&Q#%::h'&1&?&?&Q#%::h' (% ;	* (% ;	*"-";";xX#/	,"-";";xX#/	, fu%
2
fu%
2
*>>*,g1EFG*,g1EFG 	9
 "+	+!*	+*>>OOU__e 5	9 #,	,"+	,r   c                     g }|dv r6|j                  t        t        j                  | j                  d                |dv r6|j                  t        t        j                  | j                  d                |S )N)bothrC   r   )r   rD   r   )extendmapr?   	transposer5   )r+   whichaxis
grid_liness       r   get_gridlinesz#GridHelperCurveLinear.get_gridlines   sa    
= c",,0LMN= c",,0LMNr   )NNNN)majorr   )r   r   r   r&   r   r   r   ry   rz   s   @r   r   r      s-      $#!%!%	: OS<),V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        |   |d|i| | j                  d       y )N)r)   r)   g      ?)r   check_isinstancer   r%   r&   
set_aspect)r+   r)   argskwargsr1   s       r   r&   zFloatingAxesBase.__init__   s7    3M$BKB6Br   c                      | j                         j                  j                  d gdz   \  }}}}t        j                  ||f||f||f||fg      }d|j                         _        |S )Nr   d   )get_grid_helperr!   r"   mpatchesPolygonget_path_interpolation_steps)r+   r   r   r   r   patchs         r   _gen_axes_patchz FloatingAxesBase._gen_axes_patch   so    J--/;;JJTFUVJWBB  2r(RHr2hR!IJ03-r   c                    t         |           | j                  j                  | j	                         j
                  j                         | j                  z          t         | !         }|j                  | j                  d             |j                  | j                         | j                  j                  |       | j                  j                  |       | j                          y )NF)root)r%   clearr   set_transformr   r!   r<   r=   r   
set_figure
get_figurer[   set_clip_path	gridlinesadjust_axes_lim)r+   
orig_patchr1   s     r   r   zFloatingAxesBase.clear   s    

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

  ,$$Z0r   c                 \   | j                   j                         j                  | j                   j                         | j                  z
        }|j                  dd      }| j                  |j                  |j                         | j                  |j                  |j                         y )NgRQ?)r   r   get_extentsr<   r=   expandedset_xlimrk   rl   set_ylimrm   rn   )r+   r   s     r   r   z FloatingAxesBase.adjust_axes_lim   sv    zz""$00JJ$$&79 }}T4(dii+dii+r   )r   r   r   r&   r   r   r   ry   rz   s   @r   r   r      s    
,r   r   z
Floating{})"__doc__r\   numpyr?   
matplotlibr^   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 7U667GV )*A)..*QRr   