
    g2                     &   d dl Zd dl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)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                  a/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/mpl_toolkits/axisartist/angle_helper.pyselect_step_degreer6      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.   r/   hour_limits
hour_stepsr2   r3   r4   s                  r5   select_step_hourrE   !   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<r7   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&   tmpr4   r3   s       r5   select_step_subrK   ;   s     DJJrN#B&
'CVF
3w"} < 
C2 < 
C2
 < V<r7   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   )
rE   r6   rK   r#   arangefloorceilrG   r"   r$   )v1v2nvhourinclude_lastthreshold_factorr&   _select_stepcycler3   r4   levsr2   s                r5   select_stepr\   O   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$$r7   c                 P    | dz  |dz  }} t        | ||d||      \  }}}|dz  ||fS )Nr   TrV   rW   rX   r\   )rS   rT   rU   rW   rX   r[   r2   r4   s           r5   select_step24r`      sE    "Wb2gB!"b"4/;3CEOD!V "9ar7   c                 $    t        | ||d||      S )NFr^   r_   )rS   rT   rU   rW   rX   s        r5   select_step360rb      s    r2r$0(8: :r7   c                       e Zd ZddZddZy)LocatorBasec                      || _         || _        y N)nbins_include_last)selfrg   rW   s      r5   __init__zLocatorBase.__init__   s    
)r7   Nc                 *    |t        |      | _        y y rf   )rG   rg   )ri   rg   s     r5   
set_paramszLocatorBase.set_params   s    UDJ r7   )Trf   )__name__
__module____qualname__rj   rl    r7   r5   rd   rd      s    *$r7   rd   c                       e Zd Zd Zy)
LocatorHMSc                 F    t        ||| j                  | j                        S rf   r`   rg   rh   ri   rS   rT   s      r5   __call__zLocatorHMS.__call__   s    RTZZ1C1CDDr7   Nrm   rn   ro   rv   rp   r7   r5   rr   rr      s    Er7   rr   c                       e Zd Zd Zy)	LocatorHMc                 J    t        ||| j                  | j                  d      S Nr   rX   rt   ru   s      r5   rv   zLocatorHM.__call__   s$    RTZZ1C1C.02 	2r7   Nrw   rp   r7   r5   ry   ry          2r7   ry   c                       e Zd Zd Zy)LocatorHc                 J    t        ||| j                  | j                  d      S Nr   r|   rt   ru   s      r5   rv   zLocatorH.__call__   s$    RTZZ1C1C./1 	1r7   Nrw   rp   r7   r5   r   r      s    1r7   r   c                       e Zd Zd Zy)
LocatorDMSc                 F    t        ||| j                  | j                        S rf   rb   rg   rh   ru   s      r5   rv   zLocatorDMS.__call__   s    b"djj$2D2DEEr7   Nrw   rp   r7   r5   r   r      s    Fr7   r   c                       e Zd Zd Zy)	LocatorDMc                 J    t        ||| j                  | j                  d      S r{   r   ru   s      r5   rv   zLocatorDM.__call__   s$    b"djj$2D2D/13 	3r7   Nrw   rp   r7   r5   r   r      s    3r7   r   c                       e Zd Zd Zy)LocatorDc                 J    t        ||| j                  | j                  d      S r   r   ru   s      r5   rv   zLocatorD.__call__   s$    b"djj$2D2D/02 	2r7   Nrw   rp   r7   r5   r   r      r}   r7   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   )rG   r#   rQ   rI   )ri   r4   number_fraction	thresholdd	int_log_ds         r5   _get_number_fractionz!FormatterDMS._get_number_fraction   s     ' 		/I" && )#ABHHRXXa[12I9}!a1f"+2y=0..		/ &&r7   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   rO   TFr   z$%s^{\circ}$)r"   r#   signr   absdivmodzipfmt_drG   fmt_dsfmt_d_mfmt_d_msfmt_s_partialfmt_ss_partialfmt_d_m_partialappend)ri   	directionr4   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                             r5   rv   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)rm   rn   ro   deg_markmin_marksec_markr   r   r   r   r   r   r   r   rv   rp   r7   r5   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<r7   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   )superrv   r#   asarray)ri   r   r4   r   	__class__s       r5   rv   zFormatterHMS.__call__2  s%    w	62::f3E3JKKr7   )rm   rn   ro   r   r   r   r   r   r   r   r   r   r   rv   __classcell__)r   s   @r5   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r7   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)ri   r   r   r   r   r   r   s          r5   rj   zExtremeFinderCycle.__init__9  s3    @ r)2I&$$r7   c                    t        j                  t        j                  ||| j                        t        j                  ||| j                              \  }} |t        j
                  |      t        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                  |      t        j                  |      }}t        j                  |	      t        j                  |	      }}| j                  ||||      \  }}}}| j                  rt        ||| j                  z         }| j                  rt        ||| j                  z         }| j                  6| j                  d   }t        ||      }| j                  d   }t        ||      }| j                  6| j                  d   }t        ||      }| j                  d   }t        ||      }||||fS # 1 sw Y   KxY w)Nignore)invalidrM   g     f@r   r   )r#   meshgridlinspacer   r   ravelerrstater   nanminr   nanmax_add_padminr   maxr   )ri   transform_xyx1y1x2y2xylonlatlon0lat0lon_minlon_maxlat_minlat_maxmin0max0s                     r5   rv   zExtremeFinderCycle.__call__^  s   {{KKB("++b"dgg*FH1RXXa[9S [[* 	4~~)yy~td
d233~~)yy~td
d233	4 99S>299S>99S>299S> MM'7GW= 	+'7 >>'7T^^#;<G>>'7T^^#;<G??&??1%D$(G??1%D$(G??&??1%D$(G??1%D$(G'11A	4 	4s    AII)rM   NN)ir   )rm   rn   ro   rj   rv   rp   r7   r5   r   r   6  s     ,0-6#%J,2r7   r   )FTr    )Tr   )numpyr#   rH   #mpl_toolkits.axisartist.grid_finderr   r6   rE   rK   r\   r`   rb   rd   rr   ry   r   r   r   r   r   r   r   rp   r7   r5   <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2, T2r7   