
     hS+                     2   d dl mZ d dlmZ 	 d dlZdZddgZ	dZ
d	Zeez  Zeez  Zed
ez
  z  Z ej                  d
ez
        Zd
ez
  d
ez   z  Zeez  Zeez  Zeez  Zeez  Zd
edz  z
  dez  dz  z
  dez  dz  z
  Zdez  dz  dez  dz  z   dez  dz  z   Zdez  dz  dez  dz  z   Zdez  dz  Zdez  dez  z
  dez  z   Zdez  dez  z
  Zdez  dez  z
  Zdez  ZdZd Zd-d!Z d" Z!d# Z"d$ Z#d% Z$d& Z%d.d'Z&d/d(Z'd) Z(d* Z)d+ Z*d, Z+y# e$ r
 d dlZdZY w xY w)0    )divisionOutOfRangeErrorNTF	to_latlonfrom_latlongx#?gk{?         @                -   i      #   i   g      ?g      ?g     ?g      ?g     ?g*?g     
@g     $@iRa CDEFGHJKLMNPQRSTUVWXXc                 6   |r8t         r2|t        j                  |       k  xr t        j                  |       |k  S |rt         s|| cxk  xr |k  S c S t         r2|t        j                  |       k  xr t        j                  |       |k  S || cxk  xr |k  S c S N	use_numpymathlibminmax)xlowerupperupper_stricts       j/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/utm/conversion.py	in_boundsr    ,   s    	A&A7;;q>E+AA	i!E!!!!	A&B7;;q>U+BBA    c                 r    | j                         } d| cxk  rdk  rn t        d      | dv rt        d      y )NCX)IOz2zone letter out of range (must be between C and X))r   r   zone_letters    r   check_valid_zone_letterr)   6   sE    ##%K+$$RSS )4z(ARSS )Br!   c                 H    d| cxk  rdk  st        d       t        d      y )Nr   <   z3zone number out of range (must be between 1 and 60)r   zone_numbers    r   check_valid_zone_numberr.   <   s1    !r!STT "STT "r!   c                 6    t        |        |rt        |       y y r   )r.   r)   )r-   r(   s     r   check_valid_zoner0   A   s    K(, r!   c                 v    t         xr2 t        j                  |       dk  xr t        j                  |       dk\  S )Nr   r   )r   s    r   mixed_signsr2   G   s,    CQ!+CA!0CCr!   c                 r    | t         j                  z   dt         j                  z  z  t         j                  z
  S )z1Returns angle in radians to be between -pi and pi   )r   pi)values    r   	mod_angler7   K   s'    GJJ1wzz>2WZZ??r!   c                    |s|t        d      |r|t        d      |r2t        | ddd      st        d      t        |dd	      st        d
      t        ||       |r|j	                         }|dk\  }| dz
  }|r|n|d	z
  }|t
        z  }|t        t        z  z  }	|	t        t        j                  d|	z        z  z   t        t        j                  d|	z        z  z   t        t        j                  d|	z        z  z   t        t        j                  d|	z        z  z   }
t        j                  |
      }||z  }t        j                  |
      }||z  }||z  }||z  }dt        |z  z
  }t        j                   dt        |z  z
        }t        |z  }dt        z
  |z  }t"        |dz  z  }||z  }||t
        z  z  }||z  }||z  }||z  }||z  }||z  }|
||z  |dz  |dz  dd|z  z   d|z  z   d|z  z
  dt"        z  z
  z  z
  |dz  dd|z  z   d|z  z   d|z  z   dt"        z  z
  d|z  z
  z  z   z  z
  }||dz  dd|z  z   |z   z  z
  |dz  dd|z  z
  d|z  z   d|z  z
  dt"        z  z   d|z  z   z  z   |z  }t%        |t        j&                  t)        |            z         }t        j*                  |      t        j*                  |      fS )am  This function converts UTM coordinates to Latitude and Longitude

        Parameters
        ----------
        easting: int or NumPy array
            Easting value of UTM coordinates

        northing: int or NumPy array
            Northing value of UTM coordinates

        zone_number: int
            Zone number is represented with global map numbers of a UTM zone
            numbers map. For more information see utmzones [1]_

        zone_letter: str
            Zone letter can be represented as string values.  UTM zone
            designators can be seen in [1]_

        northern: bool
            You can set True (North) or False (South) as an alternative to
            providing a zone letter. Default is None

        strict: bool
            Raise an OutOfRangeError if outside of bounds

        Returns
        -------
        latitude: float or NumPy array
            Latitude between 80 deg S and 84 deg N, e.g. (-80.0 to 84.0)

        longitude: float or NumPy array
            Longitude between 180 deg W and 180 deg E, e.g. (-180.0 to 180.0).


       .. _[1]: http://www.jaworski.ca/utmzones.htm

    z.either zone_letter or northern needs to be setz0set either zone_letter or northern, but not bothi i@B T)r   z>easting out of range (must be between 100,000 m and 999,999 m)r   逖 z<northing out of range (must be between 0 m and 10,000,000 m)N  r4   r	      r   r      r   r
   
   	     =   Z   i*  r      x      )
ValueErrorr    r   r0   r   K0RM1P2r   sinP3P4P5cosEsqrtE_P2r7   radians zone_number_to_central_longitudedegrees)eastingnorthingr-   r(   northernstrictr   ymmup_radp_sinp_sin2p_cosp_tanp_tan2p_tan4ep_sinep_sin_sqrtnrcc2dd2d3d4d5d6latitude	longitudes                                  r   r   r   P   s7   L 8+IJJ	-KLL&'E!"bcc1h/!"`aa[+.!'')3&&A(X"5A	BA	
a"fB'++a"f%%&'++a"f%%& '++a"f%%& '++a"f%%	&E KKEU]FKKEEMEU]Ff_FV^F,,q1v:~.K	KA	
Q&AuaxA	
QB	QVA	
QB	aB	aB	aB	aB	abAF
NR!V3a"f<q4xGHIcR"v+-a7"v+Ed
RUVY[U[[\]^ ^H
 a1q6z>A-./cQQYf4q2v=DH2PV;VWX[`aI )goo6VWb6c&ddeIOOH%OOI&( (r!   c           	         t        | dd      st        d      t        |dd      st        d      |r|t        d      |t        ||       t	        j
                  |       }t	        j                  |      }t	        j                  |      }||z  }||z  }	|	|	z  }
|t        | |      }n|}||t        |       }n|}||d	k\  }n|}t	        j
                  |      }t        |      }t	        j
                  |      }t        t	        j                  d
t        |dz  z  z
        z  }t        |dz  z  }|t        ||z
        z  }||z  }||z  }||z  }||z  }||z  }t        t         |z  t"        t	        j                  d|z        z  z
  t$        t	        j                  d|z        z  z   t&        t	        j                  d|z        z  z
  z  }t(        |z  ||dz  d
|	z
  |z   z  z   |dz  dd|	z  z
  |
z   d|z  z   dt        z  z
  z  z   z  dz   }t(        |||z  |dz  |dz  d|	z
  d|z  z   d|dz  z  z   z  z   |dz  dd|	z  z
  |
z   d|z  z   dt        z  z
  z  z   z  z   z  }|du xr |du }|rt+        |       rt        d      |s|dz  }||||fS )a   This function converts Latitude and Longitude to UTM coordinate

        Parameters
        ----------
        latitude: float or NumPy array
            Latitude between 80 deg S and 84 deg N, e.g. (-80.0 to 84.0)

        longitude: float or NumPy array
            Longitude between 180 deg W and 180 deg E, e.g. (-180.0 to 180.0).

        force_zone_number: int
            Zone number is represented by global map numbers of an UTM zone
            numbers map. You may force conversion to be included within one
            UTM zone number.  For more information see utmzones [1]_

        force_zone_letter: str
            You may force conversion to be included within one UTM zone
            letter.  For more information see utmzones [1]_

        force_northern: bool
            You can set True (North) or False (South) as an alternative to
            forcing with a zone letter. When set, the returned zone_letter will
            be None. Default is None

        Returns
        -------
        easting: float or NumPy array
            Easting value of UTM coordinates

        northing: float or NumPy array
            Northing value of UTM coordinates

        zone_number: int
            Zone number is represented by global map numbers of a UTM zone
            numbers map. More information see utmzones [1]_

        zone_letter: str
            Zone letter is represented by a string value. UTM zone designators
            can be accessed in [1]_


       .. _[1]: http://www.jaworski.ca/utmzones.htm
    T   z=latitude out of range (must be between 80 deg S and 84 deg N)iL   z@longitude out of range (must be between 180 deg W and 180 deg E)Nz<set either force_zone_letter or force_northern, but not bothr:   r   r4   r	   r<   rD   r      H   :   r;   r=   r?   r@   rA   iX  iJ  z%latitudes must all have the same signr9   )r    r   rF   r0   r   rS   rK   rO   latlon_to_zone_numberlatitude_to_zone_letterrT   rH   rQ   rP   rR   r7   rI   M2M3M4rG   r2   )rp   rq   force_zone_numberforce_zone_letterforce_northernlat_radlat_sinlat_coslat_tanlat_tan2lat_tan4r-   r(   rX   lon_radcentral_loncentral_lon_radrf   rh   aa2a3a4a5a6r[   rV   rW   check_signss                                r   r   r      s   X XsB']^^Yc*`aa^7WXX$*,=>ooh'Gkk'"Gkk'"GG H("H +Hi@' ^%;-h7'3&!ooi(G2;?Kook2O	GLLQ!^+,,AwzA)Go566A	
QB	aB	aB	aB	aB	R'\'++a'k**+'++a'k**+ '++a'k**+ 	,A
 1fQ!h,"234SAX$5$@26$IBQUI$UVW XZ`aG QWQ(*R1x<!a%3G!aQRd(3R(S)T(*SBh4F4QTWZ[T[4[^adh^h4h(i)j k k lH !D(F->$-FK{8,@AAHHk;66r!   c                     t         r)t        | t        j                        r| j                  d   } d| cxk  rdk  rn y t
        t        | dz         dz	     S y )Nr   rs   rt   P   r
   )r   
isinstancer   ndarrayflatZONE_LETTERSint)rp   s    r   rz   rz   *  sR     Z'//:==#
h"  C2.!344r!   c                    t         rRt        | t        j                        r| j                  d   } t        |t        j                        r|j                  d   }|dz  dz   dz  dz
  }d| cxk  rdk  rn nd|cxk  rdk  ry	 d
| cxk  rdk  r n n|dk\  r|dk  ry|dk  ry|dk  ry|dk  ryt        |dz   dz        dz   S )Nr   ih  i  ru   8   r   r
      r   rw   rt   r?         !   r   *   %   r<   r   )r   r   r   r   r   r   )rp   rq   s     r   ry   ry   6  s     h0}}Q'Hi1!q)I S3&#-3I 
XqI22  3 
X	Qq=^^^	C1$%))r!   c                 4    t        |        | dz
  dz  dz
  dz   S )Nr   r<   ru   r
   )r.   r,   s    r   rT   rT   S  s#    K(!Oq 3&**r!   c                 z    t        |        | j                         } | dk(  rydt        j                  |       dz  z   S )Nr$   N   ir   )r)   r   r   indexr'   s    r   zone_letter_to_central_latituder   W  s>    K(##%Kcl((59::r!   )F)NNT)NNN),
__future__r   	utm.errorr   numpyr   r   ImportErrormath__all__rG   rP   E2E3rR   rQ   SQRT_E_E_E2_E3_E4_E5rI   r{   r|   r}   rJ   rL   rM   rN   rH   r   r    r)   r.   r0   r2   r7   r   r   rz   ry   rT   r    r!   r   <module>r      s    %I
 
&U!VAE{	a!e	&jQZ 2g	Bh	Bh	Bh!a%i!b&2+B,!eai!b&2+R$.2gmb2gn$2gnbj7S= 9s?2mgm#ny3&3&TU
-D@
h(Vl7^	*:+;]
  Is   D DD