Ë
    Ï.fð  ã                   ó,   — 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    úTC:\Users\user\Documents\project_loop\venv\Lib\site-packages\geographiclib/geomath.pyÚsqzMath.sq   s   € ð ˆq‰5€Ló    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ô 
�‰”4—7‘7˜1“:¤§¡¨£
Ñ*Ô	+ô �j‰j˜˜AÓð ð ˆQ‰3��!‘ˆ8€Or   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Øˆ!�G€BØˆ1�H€CØ�!ŠV‰˜  S¡Ñ)€Að ˆaˆ4€Kr   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   € ô 	�1�q’5‰a˜a ™dÓ#€AØ
ˆaŠ%Øˆ1�f€aˆa�1‰fˆaØ
ˆ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àˆ1‚u�!�q˜1‘u‘+ˆ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)   € ô $(§=¡=°Ô#3Œ4�>‰>˜!˜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°¢mŒ4�=‰=˜ Ó"Ð:¸Ð:r   c                 óB   — t        | «      dkD  rt        j                  S | S )z&replace angles outside [-90,90] by NaNéZ   )r   r   r2   r   s    r	   ÚLatFixzMath.LatFixe   s   € ô ˜1“v ’{Œ4�8‰8Ð)¨Ð)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‡   € ô �8‰8”D—N‘N A 2 sÓ+¬T¯^©^¸A¸sÓ-CÓD�D€A€qÜ�8‰8”D—N‘N 1 cÓ*¨AÓ.�D€A€qØˆA‚v”�Q“˜3’Ü
�-‰-˜ A¨¢F˜1˜qš5°°Ó
3€aØˆaˆ4€Kr   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Ô´4·8±8€AÜ�Z‰Z˜Œ]‰¤¤E¨!¨b©&£MÓ 2€AØˆˆa‰�K€A”T—\‘\ !“_�Ü�‰�‹€AœŸ™ !›�QØ	ˆA‰€AØ	
ˆaŠ˜˜Q˜B�A‘Ø	
ˆaŠ˜˜˜Q˜B�A‘Ø	
ˆaŠ˜˜˜Q�A�Ø	ˆC‰€AØˆA‚v”4—=‘=  AÓ&ˆqØˆaˆ4€Kr   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É   € ô #Ÿm™m¨AÔ.ŒŒE�!�b‘&‹MÔ°A€AØ	ˆB�‰F‰
€AœŸ™¤T§]¡]°1°q±5Ó%9Ó:�AÜ�‰�‹€AœŸ™ !›�QØ	ˆA‰€AØ	
ˆaŠ˜˜Q˜B�A‘Ø	
ˆaŠ˜˜˜Q˜B�A‘Ø	
ˆaŠ˜˜˜Q�A�Ø	ˆC‰€AØˆA‚v”4—=‘=  AÓ&ˆqØˆaˆ4€Kr   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¢   € ô ˆ1ƒv”�A“‚Ø
€a�A�q�‰Qà
€aØˆ1‚uØˆ1�f€a�1�"ˆaÜ
�,‰,”t—z‘z ! QÓ'Ó
(€CØ	
ˆaŠ”t—}‘} S¨!Ó,¨sÑ2�ð €Jð 
ˆaŠ b°¡m�à€Jð 
ˆaŠ S¨s¡]�Ø€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   