
    ^j3                     2   d dl Zd dlZd dlmZ d dlmZ d Zd Zd Z		 	 ddZ
ddZdd	Z G d
 d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d      Z G d de      Z G d de      Zy)     N)Bbox)ExtremeFinderSimplec                 T   g d}g d}dgt        |      z  }g d}g d}t        j                  |      dz  }dgt        |      z  }t        j                  |      dz  }d	gt        |      z  }	g |||}
g |||}g |	||}t        j                  |
|       }||   }||   }||fS )
N)
      ?            (   F   x   i  i  )
         
         -   Z      ih        ?)r         @      @            r   )r   r   r   r   r   r   r
   r   <         N@        @lennparraysearchsorted)dvdegree_limits_degree_steps_degree_factorsminsec_limits_minsec_steps_minute_limits_minute_factorssecond_limits_second_factorsdegree_limitsdegree_stepsnstepfactors                  o/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/mpl_toolkits/axisartist/angle_helper.pyselect_step_degreer7      s    ?N?MTC..N7N7MXXn-2NUS00NXXn-4NWs>22NGnG~GGMC]C]C]CLH~HHHN
r*A?DAF<    c                 T   g d}g d}dgt        |      z  }g d}g d}t        j                  |      dz  }dgt        |      z  }t        j                  |      dz  }d	gt        |      z  }	g |||}
g |||}g |	||}t        j                  |
|       }||   }||   }||fS )
N)	r   r   r   r   r   r   r      $   )	r   r   r         r      r      r   )r   r   r   g      @g      @r   r      r   r   r   )r   r   r   r<   r   r=   r   r>   r   r
   r   r   r   r    r!   r"   )r'   hour_limits_hour_steps_hour_factorsr+   r,   r-   r.   r/   r0   hour_limits
hour_stepsr3   r4   r5   s                  r6   select_step_hourrF   "   s    8L8K4#k**LENEMXXn-2NUS00NXXn-4NWs>22NCNC^ClCK?=?=?;?JD^DnD|DL
R(Aa=D!_F<r8   c                     dt        t        j                  |             dz
  z  }d|z  }d|z  | k\  rd}||fS d|z  | k\  rd}||fS d|z  | k\  rd}||fS d}d	|z  }||fS )
Ng      $@r   r   r   g      @r   g      @r   g?)intmathlog10)r'   tmpr5   r4   s       r6   select_step_subrL   <   s     DJJrN#B&
'CVF
3w"} < 
C2 < 
C2
 < V<r8   c                 p   | |kD  r|| }} || z
  |z  }|r	t         }d}nt        }d}|d|z  kD  r ||      \  }	}
nt        ||z        \  }	}
|
|z  }
t        j                  t        j
                  | |
z  |	z        t        j                  ||
z  |	z        dz   t              |	z  }t        |      }|
dk(  rm|d   |d   |z   k\  r_t        ||	z        }|r$|d   t        j                  d|dz   d      |	z  z   }n |d   t        j                  d|d      |	z  z   }t        |      }t        j                  |      ||
fS )	Ng      8@     v@r   g      ?)dtyper   r   )
rF   r7   rL   r$   arangefloorceilrH   r#   r%   )v1v2nvhourinclude_lastthreshold_factorr'   _select_stepcycler4   r5   levsr3   s                r6   select_stepr]   P   sV    
BwRB
r'RB') 
A   #B'f&r*:':;f**99RXXb6kD01WWR&[4/036 "&'D 	D	A
 |RDGeO37RYYq"Q$2T99D7RYYq"a0477DI88D>1f$$r8   c                 P    | dz  |dz  }} t        | ||d||      \  }}}|dz  ||fS )Nr   TrW   rX   rY   r]   )rT   rU   rV   rX   rY   r\   r3   r5   s           r6   select_step24ra      sE    "Wb2gB!"b"4/;3CEOD!V "9ar8   c                 $    t        | ||d||      S )NFr_   r`   )rT   rU   rV   rX   rY   s        r6   select_step360rc      s    r2r$0(8: :r8   c                       e Zd ZddZddZy)LocatorBasec                      || _         || _        y N)nbins_include_last)selfrh   rX   s      r6   __init__zLocatorBase.__init__   s    
)r8   Nc                 *    |t        |      | _        y y rg   )rH   rh   )rj   rh   s     r6   
set_paramszLocatorBase.set_params   s    UDJ r8   )Trg   )__name__
__module____qualname__rk   rm    r8   r6   re   re      s    *$r8   re   c                       e Zd Zd Zy)
LocatorHMSc                 F    t        ||| j                  | j                        S rg   ra   rh   ri   rj   rT   rU   s      r6   __call__zLocatorHMS.__call__   s    RTZZ1C1CDDr8   Nrn   ro   rp   rw   rq   r8   r6   rs   rs      s    Er8   rs   c                       e Zd Zd Zy)	LocatorHMc                 J    t        ||| j                  | j                  d      S Nr   rY   ru   rv   s      r6   rw   zLocatorHM.__call__   s$    RTZZ1C1C.02 	2r8   Nrx   rq   r8   r6   rz   rz          2r8   rz   c                       e Zd Zd Zy)LocatorHc                 J    t        ||| j                  | j                  d      S Nr   r}   ru   rv   s      r6   rw   zLocatorH.__call__   s$    RTZZ1C1C./1 	1r8   Nrx   rq   r8   r6   r   r      s    1r8   r   c                       e Zd Zd Zy)
LocatorDMSc                 F    t        ||| j                  | j                        S rg   rc   rh   ri   rv   s      r6   rw   zLocatorDMS.__call__   s    b"djj$2D2DEEr8   Nrx   rq   r8   r6   r   r      s    Fr8   r   c                       e Zd Zd Zy)	LocatorDMc                 J    t        ||| j                  | j                  d      S r|   r   rv   s      r6   rw   zLocatorDM.__call__   s$    b"djj$2D2D/13 	3r8   Nrx   rq   r8   r6   r   r      s    3r8   r   c                       e Zd Zd Zy)LocatorDc                 J    t        ||| j                  | j                  d      S r   r   rv   s      r6   rw   zLocatorD.__call__   s$    b"djj$2D2D/02 	2r8   Nrx   rq   r8   r6   r   r      r~   r8   r   c                       e Zd ZdZdZdZdez   dz   Zdez   dz   Zdez   dz   ez   dz   Zdez   d	z   ez   dz   Z	dez   dz   ez   d
z   Z
dez   dz   Zdez   dz   Zd Zd Zy)FormatterDMSz^{\circ}z	^{\prime}z^{\prime\prime}$%d$$%d.%s$%s%d\,%02d	\,%02d.%s\,%02d%02d.%sc                     d }dD ]`  }||k  r ||fS ||z  }t        t        j                  t        j                  |                  }d|z  |k(  sL|dk7  sR|}|d|z  z  }||fc S  ||fS )N)r   r   r    r   r   )rH   r$   rR   rJ   )rj   r5   number_fraction	thresholdd	int_log_ds         r6   _get_number_fractionz!FormatterDMS._get_number_fraction   s     ' 		/I" && )#ABHHRXXa[12I9}!a1f"+2y=0..		/ &&r8   c                    t        |      dk(  rg S t        j                  |      }|D cg c]  }|dk  rdnd }}| j                  |      \  }}t        j                  |      }|+t        |d|z        \  }}d|fz  }	|D 
cg c]  }
|	|
fz  
 }}
|dk(  ry|9t        ||      D cg c]!  \  }}| j                  |t        |      z  fz  # c}}S t        ||      D 
cg c]#  \  }}}
| j                  |t        |      z  |
fz  % c}
}}S |dk(  r|t        |d      \  }}|3t        |||      D cg c]  \  }}}| j                  |||fz   c}}}S t        |||      D 
cg c]  \  }}}}
| j                  ||||
fz   c}
}}}S |dk(  r|d	   d	k(  rd
}|d d d	   }|d d d	   }nd}d}g }t        |d      \  }}t        |d      \  }}||D cg c]  }| j                  |fz   }}n-t        |      D 
cg c]  \  }}
| j                  ||
fz   }}}
t        ||||      D ]?  \  }}}}| j                  |||fz  }||k7  r|}||z   }nd|z   |z   }|j                  |       A |r|d d d	   S |S ||z  D cg c]  }d|z  	 c}S c c}w c c}
w c c}}w c c}
}}w c c}}}w c c}
}}}w c c}w c c}
}w c c}w )Nr   - r   z%%0%ddr   r   r    rP   TFr   z$%s^{\circ}$)r#   r$   signr   absdivmodzipfmt_drH   fmt_dsfmt_d_mfmt_d_msfmt_s_partialfmt_ss_partialfmt_d_m_partialappend)rj   	directionr5   valuesssvsignsr   	frac_partfrac_fmtf1frac_strsdeg_partmin_parts1d1m1inverse_orderl_hm_oldr	min_part_sec_partsec_strl_hmls                             r6   rw   zFormatterDMS.__call__   sh   v;!IWWV_/56!A2%66"&";";F"C& &vr_/D EFI?"44H3<=RB5(=H=Q;&?B2vOtq!

a#a&j]2OO ),B(AC C$Aq" q3q6z2&66 C Cr\!'!3Hh&*-eXx*HJ J&BB B|3 J J
 uh(CE E)Ar2r BB7 E E t^"v| $"dd %HA"("6Hi!'	2!6Hh&@HI"4--5II *-Xx)@B%r2  .."b9 B B "%UHh!H 2r2++q"bk98##Hr	Aa"A 2w 24F;AOa';;} 7 > PC
JE& JB$ <s5   JJ(&J#(J$7J+,J2
J:J?KN)rn   ro   rp   deg_markmin_marksec_markr   r   r   r   r   r   r   r   rw   rq   r8   r6   r   r      s    HH!HHs"E!C'F !I-83>G("\1H<sBH(94x?%GOX%+M)C/N'$C<r8   r   c                        e Zd ZdZdZdZdez   dz   Zdez   dz   Zdez   dz   ez   dz   Zdez   d	z   ez   dz   Z	dez   dz   ez   d
z   Z
dez   dz   Zdez   dz   Z fdZ xZS )FormatterHMSz^\mathrm{h}z^\mathrm{m}z^\mathrm{s}r   r   r   r   r   r   r   r   r   c                 R    t         |   ||t        j                  |      dz        S )Nr   )superrw   r$   asarray)rj   r   r5   r   	__class__s       r6   rw   zFormatterHMS.__call__3  s%    w	62::f3E3JKKr8   )rn   ro   rp   r   r   r   r   r   r   r   r   r   r   rw   __classcell__)r   s   @r6   r   r   #  s    HHHHs"E!C'F !I-8<G("\1H<S@H(94x?%GOX%+M)C/NL Lr8   r   c                       e Zd Z	 	 ddZd Zy)ExtremeFinderCycleNc                 \    ||c| _         | _        ||c| _        | _        || _        || _        y)aB  
        This subclass handles the case where one or both coordinates should be
        taken modulo 360, or be restricted to not exceed a specific range.

        Parameters
        ----------
        nx, ny : int
            The number of samples in each direction.

        lon_cycle, lat_cycle : 360 or None
            If not None, values in the corresponding direction are taken modulo
            *lon_cycle* or *lat_cycle*; in theory this can be any number but
            the implementation actually assumes that it is 360 (if not None);
            other values give nonsensical results.

            This is done by "unwrapping" the transformed grid coordinates so
            that jumps are less than a half-cycle; then normalizing the span to
            no more than a full cycle.

            For example, if values are in the union of the [0, 2] and
            [358, 360] intervals (typically, angles measured modulo 360), the
            values in the second interval are normalized to [-2, 0] instead so
            that the values now cover [-2, 2].  If values are in a range of
            [5, 1000], this gets normalized to [5, 365].

        lon_minmax, lat_minmax : (float, float) or None
            If not None, the computed bounding box is clipped to the given
            range in the corresponding direction.
        N)nxny	lon_cycle	lat_cycle
lon_minmax
lat_minmax)rj   r   r   r   r   r   r   s          r6   rk   zExtremeFinderCycle.__init__:  s3    @ r)2I&$$r8   c           
      L   t        j                  t        j                  t        j                  |j                  |j
                  | j                        t        j                  |j                  |j                  | j                              d      j                  }|j                  |      j                  \  }}t        j                  d      5  | j                  #t        j                  |      }|d||z
  dkD  z  z  }| j                  #t        j                  |      }|d||z
  dkD  z  z  }d d d        t!        j"                         }|j%                  t        j&                  ||g             |j)                  dd| j                  z  z   dd| j                  z  z         }|j*                  \  }	}
}}| j                  rt-        ||	| j                  z         }| j                  rt-        ||
| j                  z         }| j.                  6| j.                  d   }t1        ||	      }	| j.                  d   }t-        ||      }| j2                  6| j2                  d   }t1        ||
      }
| j2                  d   }t-        ||      }t!        j4                  |	|
||      S # 1 sw Y   mxY w)	N)r   rP   ignore)invalidrN   g     f@r   r   r   )r$   reshapemeshgridlinspacex0x1r   y0y1r   T	transformerrstater   nanminr   r   nullupdate_from_data_xycolumn_stackexpandedextentsminr   maxr   from_extents)rj   transbboxgridlonlatlon0lat0tbboxlon_minlat_minlon_maxlat_maxmin0max0s                  r6   _find_transformed_bboxz)ExtremeFinderCycle._find_transformed_bbox_  s(   zz"++bkk$''477DGG&L&(kk$''477DGG&LN!##$1 	 ??4(**S [[* 	4~~)yy~td
d233~~)yy~td
d233	4 		!!"//3*"=>q1tww;AK@-2]]*'7 >>'7T^^#;<G>>'7T^^#;<G??&??1%D$(G??1%D$(G??&??1%D$(G??1%D$(G  '7GDD?	4 	4s   AJJ#)rN   NN)ir   )rn   ro   rp   rk   r   rq   r8   r6   r   r   7  s     ,0-6#%J,Er8   r   )FTr!   )Tr    )numpyr$   rI   matplotlib.transformsr   #mpl_toolkits.axisartist.grid_finderr   r7   rF   rL   r]   ra   rc   re   rs   rz   r   r   r   r   r   r   r   rq   r8   r6   <module>r      s      & C44( 6:!&.%b :$ $E E
2 21{ 1F F
3 32{ 2e< e<PL< L(TE, TEr8   