
    hD                        S SK rS SKrS SKJr  S SKJr  S SKJr	  S SK
Jr  S SKJr  S SKJr  S SKJrJrJrJr  S SKJrJrJr   " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N)_api)AxesCircle)Path)	FormatterNullLocatorFixedLocatorNullFormatter)Affine2DBboxTransformTo	Transformc                      ^  \ rS rSrSr " S S\5      rSrS rU 4S jr	S r
S	 rS S
 jrS rS rS S jrS rS rS rS rS r\rS r\r\r\rS r\rS rS rS rS rS r S r!S r"S r#S r$S r%Sr&U =r'$ )!GeoAxes   z2An abstract base class for geographic projections.c                   ,    \ rS rSrSrSS jrSS jrSrg)	GeoAxes.ThetaFormatter   zs
Used to format the theta tick labels.  Converts the native
unit of radians into degrees and adds a degree symbol.
c                     Xl         g N	_round_to)selfround_tos     L/var/www/html/env/lib/python3.13/site-packages/matplotlib/projections/geo.py__init__GeoAxes.ThetaFormatter.__init__   s    %N    Nc                     [        [        R                  " U5      U R                  -  5      U R                  -  nUS S3$ )Nz0.0f   °)roundnprad2degr   )r   xposdegreess       r   __call__GeoAxes.ThetaFormatter.__call__   s5    BJJqMDNN:;dnnLGd^?33r   r   )      ?r   )__name__
__module____qualname____firstlineno____doc__r   r'   __static_attributes__ r   r   ThetaFormatterr      s    		&	4r   r1   K   c                     [         R                  " U SS9U l        [         R                  " U SS9U l        U R
                  S   R                  U R                  5        g )NF)cleargeo)maxisXAxisxaxisYAxisyaxisspinesregister_axisr   s    r   
_init_axisGeoAxes._init_axis    sA    [[U3
[[U3
E((4r   c                   > [         TU ]  5         U R                  S5        U R                  S5        U R	                  S5        U R
                  R                  [        5       5        U R                  R                  [        5       5        U R
                  R                  S5        U R                  R                  S5        U R                  R                  SS9  U R                  [        R                  S   5        [        R                  " U [         R"                  * [         R"                  5        [        R$                  " U [         R"                  * S-  [         R"                  S-  5        g )	N   r   r2   noneT)label1Onz	axes.grid       @)superr4   set_longitude_gridset_latitude_gridset_longitude_grid_endsr8   set_minor_locatorr	   r:   set_ticks_positionset_tick_paramsgridmplrcParamsr   set_xlimr"   piset_ylimr   	__class__s    r   r4   GeoAxes.clear%   s    #r"$$R(

$$[]3

$$[]3

%%f-

%%f-

""D"1 			#,,{+,dRUUFBEE*dRUUFSL"%%#+6r   c                    U R                  U R                  5      U l        U R                  5       U l        [        U R                  5      U l        U R                  U R                  -   U R                  -   U l        [        5       R                  SU R                  S-  5      R                  SU R                  * 5      U l        U R                  U R                  -   U l        [        5       R                  SS5      U R                  -   [        5       R                  SS5      -   U l        [        5       R                  SS5      U R                  -   [        5       R                  SS5      -   U l        [        5       R                  ["        R$                  S-  S5      R                  ["        R$                  * S5      n[        5       R                  SS5      nUU R                  -   U l        UU R                  -   UU R                  -   U R                  -   -   nU[        5       R                  SS5      -   U l        U[        5       R                  SS5      -   U l        g )	N      r      g?i   )_get_core_transform
RESOLUTIONtransProjection_get_affine_transformtransAffiner   bbox	transAxes	transDatar   scale_longitude_cap	translate_xaxis_pretransform_xaxis_transform_xaxis_text1_transform_xaxis_text2_transformr"   rP   _yaxis_transform_yaxis_text1_transform_yaxis_text2_transform)r   yaxis_stretchyaxis_spaceyaxis_text_bases       r   _set_lim_and_transformsGeoAxes._set_lim_and_transforms9   s   #77H557(3
   NN 	 JU1d))A-.Yq4.../ 	 
 $$NN 	 JQ"NNJ  A&' 	#
 JQ"NNJ  B'( 	# !
((A6@@"%%Kj&&q#.NN 	   !^^ 	 J  Q'( 	# J  A&' 	#r   c                    U R                  S5      nUR                  [        R                  S45      u  p#UR                  S[        R                  S-  45      u  p4[	        5       R                  SU-  SU-  5      R                  SS5      $ )NrV   r   rW         ?)r[   	transformr"   rP   r   rc   re   )r   rt   xscale_yscales        r   r^   GeoAxes._get_affine_transforml   st    ,,Q/	''
3	''BEE!G5	zU3<v.YsC 	!r   c                 H    [         R                  " / SQUS9  U R                  $ N)tick1tick2rL   )which)r   check_in_listrg   r   r}   s     r   get_xaxis_transformGeoAxes.get_xaxis_transformt       5UC$$$r   c                      U R                   SS4$ )Nbottomcenter)rh   r   pads     r   get_xaxis_text1_transform!GeoAxes.get_xaxis_text1_transformx   s    **Hh>>r   c                      U R                   SS4$ )Ntopr   )ri   r   s     r   get_xaxis_text2_transform!GeoAxes.get_xaxis_text2_transform{   s    **E8;;r   c                 H    [         R                  " / SQUS9  U R                  $ rz   )r   r~   rj   r   s     r   get_yaxis_transformGeoAxes.get_yaxis_transform~   r   r   c                      U R                   SS4$ )Nr   right)rk   r   s     r   get_yaxis_text1_transform!GeoAxes.get_yaxis_text1_transform   s    **Hg==r   c                      U R                   SS4$ )Nr   left)rl   r   s     r   get_yaxis_text2_transform!GeoAxes.get_yaxis_text2_transform   s    **Hf<<r   c                     [        SS5      $ )Nrs   rs   rs   r   r=   s    r   _gen_axes_patchGeoAxes._gen_axes_patch   s    j#&&r   c                 H    S[         R                  R                  U SS5      0$ )Nr5   r   rs   )mspinesSpinecircular_spiner=   s    r   _gen_axes_spinesGeoAxes._gen_axes_spines   s     w}}33D*cJKKr   c                 "    US   S:w  a  [         eg )Nr   linear)NotImplementedErrorr   argskwargss      r   
set_yscaleGeoAxes.set_yscale   s    7h%% r   c                     [        S5      ez-Not supported. Please consider using Cartopy.zaChanging axes limits of a geographic projection is not supported.  Please consider using Cartopy.	TypeErrorr   s      r   rO   GeoAxes.set_xlim        I J 	Jr   c                     [        S5      er   r   r=   s    r   invert_xaxisGeoAxes.invert_xaxis   r   r   c                     [         R                  " X/5      u  pUS:  a  SOSnUS:  a  SOSnS[        U5      U[        U5      U4-  $ )z1Return a format string formatting the coordinate.        NSEWu   %f°%s, %f°%s)r"   r#   abs)r   lonlatnsews        r   format_coordGeoAxes.format_coord   sO    ::sj)3JSC3JSC:s8RS2./ 	0r   c                     [         R                  " SU-   SU5      nU R                  R                  [	        [         R
                  " U5      5      5        U R                  R                  U R                  U5      5        g)z8
Set the number of degrees between each longitude grid.
iL   N)r"   aranger8   set_major_locatorr
   deg2radset_major_formatterr1   r   r&   rL   s      r   rF   GeoAxes.set_longitude_grid   sW    
 yyg6

$$\"**T2B%CD

&&t':':7'CDr   c                     [         R                  " SU-   SU5      nU R                  R                  [	        [         R
                  " U5      5      5        U R                  R                  U R                  U5      5        g)z7
Set the number of degrees between each latitude grid.
iZ   N)r"   r   r:   r   r
   r   r   r1   r   s      r   rG   GeoAxes.set_latitude_grid   sW    
 yywG4

$$\"**T2B%CD

&&t':':7'CDr   c                     [         R                  " U5      U l        U R                  R	                  5       R                  SU R                  S-  5      R                  SU R                  * 5        g)zC
Set the latitude(s) at which to stop drawing the longitude grids.
r)   rD   r   N)r"   r   rd   rf   r4   rc   re   )r   r&   s     r   rH   GeoAxes.set_longitude_grid_ends   sQ     !jj1  UWU3++c12YsT0001r   c                     g)z+Return the aspect ratio of the data itself.r)   r0   r=   s    r   get_data_ratioGeoAxes.get_data_ratio   s    r   c                     g)z
Return whether this Axes supports the zoom box button functionality.

This Axes object does not support interactive zoom box.
Fr0   r=   s    r   can_zoomGeoAxes.can_zoom        r   c                     g)z
Return whether this Axes supports the pan/zoom button functionality.

This Axes object does not support interactive pan/zoom.
Fr0   r=   s    r   can_panGeoAxes.can_pan   r   r   c                     g r   r0   )r   r$   ybuttons       r   	start_panGeoAxes.start_pan       r   c                     g r   r0   r=   s    r   end_panGeoAxes.end_pan   r   r   c                     g r   r0   )r   r   keyr$   r   s        r   drag_panGeoAxes.drag_pan   r   r   )rd   rf   rh   ri   rg   rk   rl   rj   r_   ra   rb   r]   r8   r:   )rL   )(r*   r+   r,   r-   r.   r   r1   r\   r>   r4   rp   r^   r   r   r   r   r   r   r   r   r   
set_xscalerO   rQ   
set_xbound
set_yboundr   invert_yaxisr   rF   rG   rH   r   r   r   r   r   r   r/   __classcell__rS   s   @r   r   r      s    <
4 
4 J5
7(1'f!%?<%>='L& JJ
 HJJJ
  L0EE2 r   r   c                   <   ^  \ rS rSrS=rrU 4S jrS rS rSr	U =r
$ )_GeoTransform   rW   c                 .   > [         TU ]  5         Xl        g)z
Create a new geographical transform.

Resolution is the number of steps to interpolate between each input
line segment to approximate its path in curved space.
N)rE   r   _resolution)r   
resolutionrS   s     r   r   _GeoTransform.__init__   s     	%r   c                 L    [        U 5      R                   SU R                   S3$ )N())typer*   r   r=   s    r   __str___GeoTransform.__str__   s'    t*%%&a(8(8'9;;r   c                     UR                  U R                  5      n[        U R                  UR                  5      UR
                  5      $ r   )interpolatedr   r   rt   verticescodes)r   pathipaths      r   transform_path_non_affine'_GeoTransform.transform_path_non_affine   s6    !!$"2"23DNN5>>2EKK@@r   )r   )r*   r+   r,   r-   
input_dimsoutput_dimsr   r   r   r/   r   r   s   @r   r   r      s#      J&<A Ar   r   c                   ^   ^  \ rS rSrSr " S S\5      r " S S\5      rU 4S jrS r	S	r
U =r$ )

AitoffAxes   aitoffc                   $    \ rS rSrSrS rS rSrg)AitoffAxes.AitoffTransformi  zThe base Aitoff transform.c                    UR                   u  p#US-  n[        R                  " U5      n[        R                  " U[        R                  " U5      -  5      n[        R                  " U[        R
                  -  5      nU[        R                  " U5      -  U-  n[        R                  " U5      U-  n	[        R                  " X/5      $ )NrD   )Tr"   cosarccossincrP   sincolumn_stack)
r   values	longitudelatitude	half_longcos_latitudealpha
sinc_alphar$   r   s
             r   transform_non_affine/AitoffAxes.AitoffTransform.transform_non_affine  s    "(((I "CI66(+LIIlRVVI->>?E/Jy 11Z?Ax :-A??A6**r   c                 @    [         R                  U R                  5      $ r   )r  InvertedAitoffTransformr   r=   s    r   inverted#AitoffAxes.AitoffTransform.inverted      55d6F6FGGr   r0   Nr*   r+   r,   r-   r.   r  r  r/   r0   r   r   AitoffTransformr    s    (	+	Hr   r  c                        \ rS rSrS rS rSrg)"AitoffAxes.InvertedAitoffTransformi  c                 L    [         R                  " U[         R                  5      $ r   )r"   	full_likenan)r   r  s     r   r  7AitoffAxes.InvertedAitoffTransform.transform_non_affine  s     <<//r   c                 @    [         R                  U R                  5      $ r   )r  r  r   r=   s    r   r  +AitoffAxes.InvertedAitoffTransform.inverted      --d.>.>??r   r0   Nr*   r+   r,   r-   r  r  r/   r0   r   r   r  r     s    	0
	@r   r  c                    > [         R                  S-  U l        [        TU ]  " U0 UD6  U R                  SSSS9  U R                  5         g NrD   rs   boxC
adjustableanchorr"   rP   rd   rE   r   
set_aspectr4   r   r   r   rS   s      r   r   AitoffAxes.__init__#  @     eeck$)&)c:

r   c                 $    U R                  U5      $ r   )r  r   r   s     r   r[   AitoffAxes._get_core_transform)      ##J//r   rd   )r*   r+   r,   r-   namer   r  r  r   r[   r/   r   r   s   @r   r  r     s3    DH- H,	@- 	@0 0r   r  c                   ^   ^  \ rS rSrSr " S S\5      r " S S\5      rU 4S jrS r	S	r
U =r$ )

HammerAxesi-  hammerc                   $    \ rS rSrSrS rS rSrg)HammerAxes.HammerTransformi0  zThe base Hammer transform.c                    UR                   u  p#US-  n[        R                  " U5      n[        R                  " S5      n[        R                  " SU[        R                  " U5      -  -   5      nSU-  U[        R                  " U5      -  -  U-  nU[        R                  " U5      -  U-  n	[        R
                  " X/5      $ )NrD   r)   )r	  r"   r
  sqrtr  r  )
r   r  r  r  r  r  sqrt2r  r$   r   s
             r   r  /HammerAxes.HammerTransform.transform_non_affine3  s    "(((I!CI66(+LGGCLEGGC,	1B"BBCEuy0A!ABUJA))U2A??A6**r   c                 @    [         R                  U R                  5      $ r   )r<  InvertedHammerTransformr   r=   s    r   r  #HammerAxes.HammerTransform.inverted>  r  r   r0   Nr  r0   r   r   HammerTransformr?  0  s    (		+	Hr   rG  c                        \ rS rSrS rS rSrg)"HammerAxes.InvertedHammerTransformiB  c                     UR                   u  p#[        R                  " SUS-  S-  -
  US-  S-  -
  5      nS[        R                  " XB-  SSUS-  -  S-
  -  -  5      -  n[        R                  " X4-  5      n[        R
                  " XV/5      $ )NrV   rX   rW   )r	  r"   rA  arctanarcsinr  )r   r  r$   r   zr  r  s          r   r  7HammerAxes.InvertedHammerTransform.transform_non_affineD  s    88DAQUqL(AEa<78ABIIqua!q&j1n1E&FGGIyy~H??I#899r   c                 @    [         R                  U R                  5      $ r   )r<  rG  r   r=   s    r   r  +HammerAxes.InvertedHammerTransform.invertedL  r'  r   r0   Nr(  r0   r   r   rE  rI  B  s    	:	@r   rE  c                    > [         R                  S-  U l        [        TU ]  " U0 UD6  U R                  SSSS9  U R                  5         g r*  r0  r2  s      r   r   HammerAxes.__init__P  r4  r   c                 $    U R                  U5      $ r   )rG  r6  s     r   r[   HammerAxes._get_core_transformV  r8  r   r9  )r*   r+   r,   r-   r:  r   rG  rE  r   r[   r/   r   r   s   @r   r<  r<  -  s3    DH- H$@- @0 0r   r<  c                   ^   ^  \ rS rSrSr " S S\5      r " S S\5      rU 4S jrS r	S	r
U =r$ )
MollweideAxesiZ  	mollweidec                   $    \ rS rSrSrS rS rSrg) MollweideAxes.MollweideTransformi]  zThe base Mollweide transform.c                 <  ^ U4S jnUR                   u  p4[        R                  S-  [        R                  " U5      -
  nUS:  nU) n[        R                  " UR
                  [        S9nUR                  5       (       a  [        R                  [        R                  " XG   5      -  mSXG   -  n	U" U	5      u  p[        R                  " U5      (       a5  X==   X   -  ss'   U" U	5      u  p[        R                  " U5      (       a  M5  U	S-  X'   UR                  5       (       aT  XV   nSS[        R                  -  US-  -  S-  -  n[        R                  S-  U-
  [        R                  " XF   5      -  X'   [        R                  " UR
                  [        S9nS[        R                  " S5      -  [        R                  -  U-  [        R                  " U5      -  US S 2S	4'   [        R                  " S5      [        R                  " U5      -  US S 2S
4'   U$ )Nc                    > U [         R                  " U 5      -   T-
  * S[         R                  " U 5      -   -  nU[         R                  " U5      S:  4$ )NrV   gMbP?)r"   r  r
  r   )thetadeltapi_sin_ls     r   d@MollweideAxes.MollweideTransform.transform_non_affine.<locals>.db  sJ     266%=08;<u-/bffUme333r   rW   gʡE?)dtyperD   rs      gUUUUUU?r   rV   )r	  r"   rP   r   emptyshapefloatanyr  signrA  r
  )r   r  r_  r  r  clatihighilowauxr\  r]  large_deltaexyr^  s                 @r   r  5MollweideAxes.MollweideTransform.transform_non_affine`  s   4
 #)((I557RVVH--D5LE6D((8>>7Cxxzz55266(.#99hn,%&uX"ff[))&%*<<&)*5&E ff[)) "AI	yy{{K1ruu9q!t+77 eeAgkRWWX_-EE
&,,e4Bbggcl*RUU2i?"&&+MBq!tHwws|bffSk1Bq!tHIr   c                 @    [         R                  U R                  5      $ r   )rV  InvertedMollweideTransformr   r=   s    r   r  )MollweideAxes.MollweideTransform.inverted  s     ;;D<L<LMMr   r0   Nr  r0   r   r   MollweideTransformrY  ]  s    + 	D	Nr   rs  c                        \ rS rSrS rS rSrg)(MollweideAxes.InvertedMollweideTransformi  c                    UR                   u  p#[        R                  " U[        R                  " S5      -  5      n[        R                  S[        R                  " S5      -  -  U-  [        R
                  " U5      -  n[        R                  " SU-  [        R                  " SU-  5      -   [        R                  -  5      n[        R                  " XV/5      $ )NrW   )r	  r"   rL  rA  rP   r
  r  r  )r   r  r$   r   r\  r  r  s          r   r  =MollweideAxes.InvertedMollweideTransform.transform_non_affine  s    88DA IIa"''!*n-E!bggaj.1Q6FIyy!e)bffQY.?"?255!HIH??I#899r   c                 @    [         R                  U R                  5      $ r   )rV  rs  r   r=   s    r   r  1MollweideAxes.InvertedMollweideTransform.inverted  s     33D4D4DEEr   r0   Nr(  r0   r   r   rq  ru    s    	:	Fr   rq  c                    > [         R                  S-  U l        [        TU ]  " U0 UD6  U R                  SSSS9  U R                  5         g r*  r0  r2  s      r   r   MollweideAxes.__init__  r4  r   c                 $    U R                  U5      $ r   )rs  r6  s     r   r[   !MollweideAxes._get_core_transform  s    &&z22r   r9  )r*   r+   r,   r-   r:  r   rs  rq  r   r[   r/   r   r   s   @r   rV  rV  Z  s4    D'N] 'NRF] F 3 3r   rV  c                   z   ^  \ rS rSrSr " S S\5      r " S S\5      rSSS.U 4S	 jjrU 4S
 jr	S r
S rSrU =r$ )LambertAxesi  lambertc                   *    \ rS rSrSrS rS rS rSrg)LambertAxes.LambertTransformi  zThe base Lambert transform.c                 F    [         R                  X5        Xl        X l        g)z
Create a new Lambert transform.  Resolution is the number of steps
to interpolate between each input line segment to approximate its
path in curved Lambert space.
Nr   r   _center_longitude_center_latituder   center_longitudecenter_latituder   s       r   r   %LambertAxes.LambertTransform.__init__  s     ""44%5"$3!r   c                 ~   UR                   u  p#U R                  nU R                  n[        R                  " U5      n[        R
                  " U5      nX$-
  n[        R                  " U5      n	[        R                  " S[        R
                  " U5      U-  -   [        R                  " U5      U-  U	-  -   S5      n
[        R                  " SU
-  5      nX-  [        R
                  " U5      -  nU[        R                  " U5      U-  [        R
                  " U5      U-  U	-  -
  -  n[        R                  " X/5      $ )NrV   gV瞯<rW   )	r	  r  r  r"   r
  r  maximumrA  r  )r   r  r  r  clongrh  cos_latsin_lat	diff_longcos_diff_longinner_kkr$   r   s                 r   r  1LambertAxes.LambertTransform.transform_non_affine  s    "(((I**E((DffX&GffX&G!)IFF9-MjjBFF4L((266$<+?+MMG G$ABFF9--ARVVD\')BFF4L,@,NNOA??A6**r   c                 l    [         R                  U R                  U R                  U R                  5      $ r   )r  InvertedLambertTransformr  r  r   r=   s    r   r  %LambertAxes.LambertTransform.inverted  s0    77&&%%  " "r   r  r  N)	r*   r+   r,   r-   r.   r   r  r  r/   r0   r   r   LambertTransformr    s    )	4	+&	"r   r  c                   &    \ rS rSrS rS rS rSrg)$LambertAxes.InvertedLambertTransformi  c                 F    [         R                  X5        Xl        X l        g r   r  r  s       r   r   -LambertAxes.InvertedLambertTransform.__init__  s    ""44%5"$3!r   c           	         UR                   u  p#U R                  nU R                  n[        R                  " [        R
                  " X#5      S5      nS[        R                  " SU-  5      -  n[        R                  " U5      n[        R                  " U5      n	[        R                  " U	[        R                  " U5      -  X8-  [        R                  " U5      -  U-  -   5      n
U[        R                  " X(-  U[        R                  " U5      -  U	-  U[        R                  " U5      -  U-  -
  -  5      -   n[        R                  " X/5      $ )Ng&.>rW   rs   )r	  r  r  r"   r  hypotrL  r  r
  rK  r  )r   r  r$   r   r  rh  pcsin_ccos_cr  r  s               r   r  9LambertAxes.InvertedLambertTransform.transform_non_affine  s   88DA**E((D

288A>40ABIIcAg&&AFF1IEFF1IEyyrvvd|!3#$7266$<#71"<"> ?H		Qrvvd|^E1AbffTlN54HHI!K KI ??I#899r   c                 l    [         R                  U R                  U R                  U R                  5      $ r   )r  r  r  r  r   r=   s    r   r  -LambertAxes.InvertedLambertTransform.inverted  s0    //&&%%  " "r   r  N)r*   r+   r,   r-   r   r  r  r/   r0   r   r   r  r    s    	4
	:"	"r   r  r   )r  r  c                   > [         R                  S-  U l        Xl        X l        [
        TU ]  " U0 UD6  U R                  SSSS9  U R                  5         g )NrW   equalr+  r,  r-  )	r"   rP   rd   r  r  rE   r   r1  r4   )r   r  r  r   r   rS   s        r   r   LambertAxes.__init__  sL     eeai!1 /$)&)E#>

r   c                 h   > [         TU ]  5         U R                  R                  [	        5       5        g r   )rE   r4   r:   r   r   rR   s    r   r4   LambertAxes.clear  s     

&&}7r   c                 P    U R                  U R                  U R                  U5      $ r   )r  r  r  r6  s     r   r[   LambertAxes._get_core_transform  s*    $$""!! 	r   c                 T    [        5       R                  S5      R                  SS5      $ )Ng      ?rs   )r   rc   re   r=   s    r   r^   !LambertAxes._get_affine_transform  s!    zU4[YsC 	!r   )r  r  rd   )r*   r+   r,   r-   r:  r   r  r  r   r4   r[   r^   r/   r   r   s   @r   r  r    sF    D%"= %"N"= "> 01!  8
! !r   r  ) numpyr"   
matplotlibrM   r   matplotlib.axesr   matplotlib.axisaxisr6   matplotlib.patchesr   matplotlib.pathr   matplotlib.spinesr;   r   matplotlib.tickerr   r	   r
   r   matplotlib.transformsr   r   r   r   r   r  r<  rV  r  r0   r   r   <module>r     s          %   #9 9 F FVd VrAI A.+0 +0\*0 *0ZC3G C3L_!' _!r   