
    Oi                     4    d Z ddlZddlZ G d d          ZdS )z7geomath.py: transcription of GeographicLib::Math class.    Nc                   0   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dS )Mathz1
  Additional math routines for GeographicLib.
  c                     | | z  S )zSquare a number xs    M/srv/django_bis/venv311/lib/python3.11/site-packages/geographiclib/geomath.pysqzMath.sq   s     q5L    c                 l    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0!444r   c                    dt           j        cxk    rdk     rJn nGt          j        t                              |           t                              |          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"   s}     c&000000000 
4771::

*	+	+	+ jA  Q3!8Or   c                 \    | |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/   sV     	
AA	
QB
b&C!GB1HC!VVS)A a4Kr   c                     t          | dk     rdn||                   }| dk    r| dz  } |dz  }||z  ||         z   }| dk    |S )zEvaluate a polynomial.r      )float)Npr!   r   r   s        r	   polyvalzMath.polyval?   s^     	1q55aaad##A
a%%1faa1fa
a%!A$,a a%% Hr   c                 j    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   s;     	AAA1uu!q1u+a=Ar   c                 l    t          j        |           rt          j        | |          n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,     $(=#3#3A4>!QAr   c                     t                               | d          }t          |          dk    rt          j        d|           n|S )zreduce angle to [-180,180]h     g     f@)r   r1   r   r   r   r3   s     r	   AngNormalizezMath.AngNormalize^   s<     	q#A&)!ffmm4=""":r   c                 D    t          |           dk    rt          j        n| S )z&replace angles outside [-90,90] by NaNZ   )r   r   r2   r   s    r	   LatFixzMath.LatFixe   s     1vv{{488)r   c                    t                               t                               |  d          t                               |d                    \  }}t                               t                               |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-CDDDAq88DNN1c**A..DAqAvvQ3
-AFF1q55
3
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48AZ]]2E!b&MM 2 2AaKAT\!__A!Q	AA	
aQBA	
aQBA	
aQA	CAAvv4=A&&qa4Kr   c                    t          j        |           rt          t          | dz                      nd}| d|z  z
  }t          j        t
                              ||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     #mA..5E!b&MMAA	BF
AT]]1q5%9%9::AA!Q	AA	
aQBA	
aQBA	
aQA	CAAvv4=A&&qa4Kr   c                 .   t          |           t          |          k    rd}| |} }nd}|dk     r|dz  }| }t          j        t          j        | |                    }|dk    rt          j        d|           |z
  }n|dk    rd|z
  }n|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     1vvA
aAqQQ
a1uu1fa1"a
,tz!Q''
(
(C	
at}S!,,s2	
abm	
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 <5
 
 
 <
   <   <   < B B <B
 ; ; <; * * <*
   <   <   <   <  r   r   )rU   r   r   r   r   r   r	   <module>rW      s[    = = 


 Q Q Q Q Q Q Q Q Q Qr   