
    ga(                     ~   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mZ ddlmZ dd	lmZ  G d
 dej,                        Z G d dej,                        Z G d de      Z G d dej2                        Z G d d      Z ej6                  ed      Z e eej:                              ZeZy)z/
An experimental support for curvilinear grid.
    N)_apicbook)Path)host_axes_class_factory   )	axislinesgrid_helper_curvelinear)
AxisArtist)ExtremeFinderSimplec                       e Zd Zy)FloatingAxisArtistHelperN)__name__
__module____qualname__     b/var/www/dash_apps/app1/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   check_getitem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   r3   z FixedAxisArtistHelper.update_lim1   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(  rR||k  ||k  z  }t        j                  || j                  ||   ||f||f      \  \   \  }}\  }}| j                  d   n`| j
                  d	k(  rQ||	k  |	|k  z  }t        j                  ||	|   | j                  ||f||f      \  \   \  }}\  }}| j                  d
   t              D cg c]
  \  }}|s	| c}}t        j                        t        j                        |dk(  |dk(  z  }|   t        j                  dz  z   |<   | 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 r2   )get_transform	transData	transformnpcolumn_stackbroadcast_arraysT)xytrfr5   r    s      r   trf_xyz8FixedAxisArtistHelper.get_tick_iterators.<locals>.trf_xyD   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)rB   rC   normaltangentlabc2angle_normalangle_tangentin_01labelstick_to_axesxx1yy1s         r   f1z4FixedAxisArtistHelper.get_tick_iterators.<locals>.f1a   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    r4   r!   sortedr/   r	   _value_and_jacobianr'   rI   r>   arctan2piget_tick_transform	transAxes	functoolspartialmpl
transforms_interval_contains_closeiter)!r*   r5   lat_levslat_n
lat_factoryy0lon_levslon_n
lon_factorxx0extremesxminxmaxyminymaxrE   maskdxx1dyy1dxx2dyy2lmmmrV   rO   rP   r    rQ   rR   rS   rT   rU   s!    `                       @@@@@@@@r   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iterators5   sM    &&22&*ooj&A#%#&*ooj&A#%#>4##//>>
KHRaL)
dHQRL)
d	O >>QCKC4K0D';;DJJD	D$<$O 3JS#tltT __\2F^^q CKC4K0D';;CItzzD$<$O 3JS#tltT __\2F #FD 171Q!7zz$-

4.aiDAI&(,ruuqy8R..t4t~~E!!NN33V=	F 	F tT"X~% 8s   /
H>:H>c                     | j                  |       t        dddd      | j                     \  }}| j                  |   |   \  }}t	        t        j                  ||g            S )N)
lon_lines0r   )rz   r   )
lat_lines0r   )r{   r   r   )r3   r#   r)   r4   r   r>   r?   )r*   r5   kvxxyys         r   get_linezFixedAxisArtistHelper.get_linej   sg    *+,)+ ,0::71 #A&BBOORH-..r   r2   )r   r   r   r%   r3   rx   r   __classcell__r0   s   @r   r   r      s    $63j/r   r   c                       e Zd Zd Zd Zy)ExtremeFinderFixedc                     || _         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	_extremes)r*   rk   s     r   r%   zExtremeFinderFixed.__init__w   s     "r   c                     | j                   S r2   r   )r*   transform_xyx1y1x2y2s         r   __call__zExtremeFinderFixed.__call__   s    ~~r   N)r   r   r   r%   r   r   r   r   r   r   t   s    	"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_transrk   r   r   r   r   r0   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)r5   r   r
   lineset_clip_onset_clip_boxbbox)r*   locr/   r   offsetr5   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                  ||||      }t        |d d       \  }}	t        |dd        \  }
}||	|
|f|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                  |d d |dd  g| \  }}||d<   ||d<   y )Nr9   rk   r8   r7   r   r   rG   rF   	lon_lines	lat_linesrz   r{   )r4   r#   r    r!   inv_transform_xyrW   r   r>   asarrayr   _format_ticks_get_raw_grid_lines)r*   r   r   r   r   	grid_infor    rk   lon_minlon_maxlat_minlat_maxrg   rh   ri   rc   rd   re   
lon_values
lat_valuesr   r   s                         r   _update_gridz"GridHelperCurveLinear._update_grid   s   ??""fDOOO	&&--k.J.J.0"b"> "(2A,/!(12,/ ''7 B	* %%gw7 	$%::h'%%gw7 	$%::h' (% ;	* (% ;	*"-";";xX#/	,"-";";xX#/	, fu%
2
fu%
2
*>>*,g1EFG*,g1EFGWgw 0	9
 "+	+!*	+>{>>RaL(12, 3)1 3	9 #,	,"+	,r   c                     g }|dv r|j                  | j                  d          |dv r|j                  | j                  d          |S )N)bothrB   r   )r   rC   r   )extendr4   )r*   whichaxis
grid_liness       r   get_gridlinesz#GridHelperCurveLinear.get_gridlines   sK    
= dook:;= dook:;r   )NNNN)majorr   )r   r   r   r%   r   r   r   r   r   s   @r   r   r      s-      $#!%!%	: OS<-,^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kwargsr0   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*   x0r   y0r   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_patchr0   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_xlimrl   rm   set_ylimrn   ro   )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   r   r   s   @r   r   r      s    
,r   r   z
Floating{}) __doc__r]   numpyr>   
matplotlibr_   r   r   matplotlib.patchespatchesr   matplotlib.pathr   %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	
T/3LL T/n, &b3II bJ", ",J 7U667GV )*A)..*QRr   