
    g                     ,    d Z ddlZddlZ G d d      Zy)z7geomath.py: transcription of GeographicLib::Math class.    Nc                       e Zd ZdZed        Zed        Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zed
        Zed        Zed        Zed        Zed        Zy)Mathz1
  Additional math routines for GeographicLib.
  c                     | | z  S )zSquare a number xs    U/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/geographiclib/geomath.pysqzMath.sq   s     q5L    c                 h    t        j                  t        j                  t        |       d      |       S )zReal cube root of a numbergUUUUUU?)mathcopysignpowabsr   s    r	   cbrtz	Math.cbrt   s$     ==#a&%0!44r   c                     dt         j                  cxk  rdk  rAn n>t        j                  t        j                  |       t        j                  |      z         nt        j                  | |      }| |z  ||z  fS )z Private: Normalize a two-vector.)      )r   
   )sysversion_infor   sqrtr   r
   hypot)r   yrs      r	   normz	Math.norm"   sb     c&&00 
4771:
*	+ jjA  Q3!8Or   c                 Z    | |z   }||z
  }||z
  }|| z  }||z  }|dk(  r|nd||z   z
  }||fS )z#Error free transformation of a sum.r           r   )uvsupvppts         r	   sumzMath.sum/   sR     	
AA	
QB
b&C!GB1HC!VS)A a4Kr   c                 p    t        | dk  rdn||         }| dkD  r| dz  } |dz  }||z  ||   z   }| dkD  r|S )zEvaluate a polynomial.r      )float)Npr!   r   r   s        r	   polyvalzMath.polyval?   sS     	1q5aad#A
a%1faa1fa
a%!A$,a a% Hr   c                 b    d}t        |       }||k  r|||z
  z
  }t        j                  ||       S )z?Private: Round an angle so that small values underflow to zero.g      ?)r   r   r   )r   zr   s      r	   AngRoundzMath.AngRoundI   s6     	AAA1u!q1u+a==Ar   c                 x    t        j                  |       rt        j                  | |      S t         j                  S )z*remainder of x/y in the range [-y/2, y/2].)r   isfinite	remaindernanr   r   s     r	   r1   zMath.remainderX   s)     $(==#34>>!QAAr   c                 z    t         j                  | d      }t        |      dk(  rt        j                  d|       S |S )zreduce angle to [-180,180]h     g     f@)r   r1   r   r   r   r3   s     r	   AngNormalizezMath.AngNormalize^   s4     	q#A&)!fm4=="::r   c                 B    t        |       dkD  rt        j                  S | S )z&replace angles outside [-90,90] by NaNZ   )r   r   r2   r   s    r	   LatFixzMath.LatFixe   s     1v{488))r   c                 P   t         j                  t         j                  |  d      t         j                  |d            \  }}t         j                  t         j                  |d      |      \  }}|dk(  st        |      dk(  r!t	        j
                  ||dk(  r|| z
  n|       }||fS )z1compute y - x and reduce to [-180,180] accuratelyr5   r   r6   )r   r%   r1   r   r   r   )r   r   dr$   s       r	   AngDiffzMath.AngDiffk   s     88DNNA2s+T^^As-CDDAq88DNN1c*A.DAqAvQ3
--AF1q5
3aa4Kr   c                    t        j                  |       rt        j                  | d      nt         j                  }t        j                  |      rdnt        t        |dz              }|d|z  z  }t        j                  |      }t        j                  |      }t        j                  |      }|dz  }|dk(  r|| }}n|dk(  r| | }}n
|dk(  r| |}}|dz   }|dk(  rt        j                  ||       }||fS )	z(Compute sine and cosine of x in degrees.r5   r   r9      r'      r   r   )r   r0   fmodr2   isnanintroundradianssincosr   )r   r   qr!   cs        r	   sincosdzMath.sincosdu   s     "]]1-		!S488AZZ]E!b&M 2AaKAT\\!_A!Q	AA	
aQBA	
aQBA	
aQA	CAAv4==A&qa4Kr   c                    t        j                  |       rt        t        | dz              nd}| d|z  z
  }t        j                  t
        j                  ||z               }t        j                  |      }t        j                  |      }|dz  }|dk(  r|| }}n|dk(  r| | }}n
|dk(  r| |}}|dz   }|dk(  rt        j                  ||       }||fS )zCCompute sine and cosine of (x + t) in degrees with x in [-180, 180]r9   r   r?   r'   r@   r   r   )
r   r0   rC   rD   rE   r   r.   rF   rG   r   )r   r$   rH   r   r!   rI   s         r	   sincosdezMath.sincosde   s     #mmA.E!b&MAA	BF
AT]]1q5%9:AA!Q	AA	
aQBA	
aQBA	
aQA	CAAv4==A&qa4Kr   c                    t        |       t        |      kD  rd}| |} }nd}|dk  r|dz  }| }t        j                  t        j                  | |            }|dk(  rt        j                  d|       |z
  }|S |dk(  rd|z
  }|S |dk(  rd|z   }|S )z.compute atan2(y, x) with the result in degreesr@   r   r'   r6   r9   r   i)r   r   degreesatan2r   )r   r   rH   angs       r	   atan2dzMath.atan2d   s     1vA
aAqQ
a1u1fa1"a
,,tzz!Q'
(C	
at}}S!,s2 J 
abmJ 
aSs]Jr   N)__name__
__module____qualname____doc__staticmethodr
   r   r   r%   r+   r.   r1   r7   r:   r=   rJ   rL   rQ   r   r   r	   r   r      s     
 5 5
 
 
       B B
 ; ; * *
        r   r   )rU   r   r   r   r   r   r	   <module>rW      s    =  Q Qr   