17db96d56Sopenharmony_ci:mod:`cmath` --- Mathematical functions for complex numbers
27db96d56Sopenharmony_ci===========================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: cmath
57db96d56Sopenharmony_ci   :synopsis: Mathematical functions for complex numbers.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci--------------
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciThis module provides access to mathematical functions for complex numbers.  The
107db96d56Sopenharmony_cifunctions in this module accept integers, floating-point numbers or complex
117db96d56Sopenharmony_cinumbers as arguments. They will also accept any Python object that has either a
127db96d56Sopenharmony_ci:meth:`__complex__` or a :meth:`__float__` method: these methods are used to
137db96d56Sopenharmony_ciconvert the object to a complex or floating-point number, respectively, and
147db96d56Sopenharmony_cithe function is then applied to the result of the conversion.
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci.. note::
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci   For functions involving branch cuts, we have the problem of deciding how to
197db96d56Sopenharmony_ci   define those functions on the cut itself. Following Kahan's "Branch cuts for
207db96d56Sopenharmony_ci   complex elementary functions" paper, as well as Annex G of C99 and later C
217db96d56Sopenharmony_ci   standards, we use the sign of zero to distinguish one side of the branch cut
227db96d56Sopenharmony_ci   from the other: for a branch cut along (a portion of) the real axis we look
237db96d56Sopenharmony_ci   at the sign of the imaginary part, while for a branch cut along the
247db96d56Sopenharmony_ci   imaginary axis we look at the sign of the real part.
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci   For example, the :func:`cmath.sqrt` function has a branch cut along the
277db96d56Sopenharmony_ci   negative real axis. An argument of ``complex(-2.0, -0.0)`` is treated as
287db96d56Sopenharmony_ci   though it lies *below* the branch cut, and so gives a result on the negative
297db96d56Sopenharmony_ci   imaginary axis::
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci      >>> cmath.sqrt(complex(-2.0, -0.0))
327db96d56Sopenharmony_ci      -1.4142135623730951j
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci   But an argument of ``complex(-2.0, 0.0)`` is treated as though it lies above
357db96d56Sopenharmony_ci   the branch cut::
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci      >>> cmath.sqrt(complex(-2.0, 0.0))
387db96d56Sopenharmony_ci      1.4142135623730951j
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ciConversions to and from polar coordinates
427db96d56Sopenharmony_ci-----------------------------------------
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ciA Python complex number ``z`` is stored internally using *rectangular*
457db96d56Sopenharmony_cior *Cartesian* coordinates.  It is completely determined by its *real
467db96d56Sopenharmony_cipart* ``z.real`` and its *imaginary part* ``z.imag``.  In other
477db96d56Sopenharmony_ciwords::
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci   z == z.real + z.imag*1j
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci*Polar coordinates* give an alternative way to represent a complex
527db96d56Sopenharmony_cinumber.  In polar coordinates, a complex number *z* is defined by the
537db96d56Sopenharmony_cimodulus *r* and the phase angle *phi*. The modulus *r* is the distance
547db96d56Sopenharmony_cifrom *z* to the origin, while the phase *phi* is the counterclockwise
557db96d56Sopenharmony_ciangle, measured in radians, from the positive x-axis to the line
567db96d56Sopenharmony_cisegment that joins the origin to *z*.
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ciThe following functions can be used to convert from the native
597db96d56Sopenharmony_cirectangular coordinates to polar coordinates and back.
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci.. function:: phase(x)
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci   Return the phase of *x* (also known as the *argument* of *x*), as a float.
647db96d56Sopenharmony_ci   ``phase(x)`` is equivalent to ``math.atan2(x.imag, x.real)``.  The result
657db96d56Sopenharmony_ci   lies in the range [-\ *π*, *π*], and the branch cut for this operation lies
667db96d56Sopenharmony_ci   along the negative real axis.  The sign of the result is the same as the
677db96d56Sopenharmony_ci   sign of ``x.imag``, even when ``x.imag`` is zero::
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci      >>> phase(complex(-1.0, 0.0))
707db96d56Sopenharmony_ci      3.141592653589793
717db96d56Sopenharmony_ci      >>> phase(complex(-1.0, -0.0))
727db96d56Sopenharmony_ci      -3.141592653589793
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci.. note::
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   The modulus (absolute value) of a complex number *x* can be
787db96d56Sopenharmony_ci   computed using the built-in :func:`abs` function.  There is no
797db96d56Sopenharmony_ci   separate :mod:`cmath` module function for this operation.
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci.. function:: polar(x)
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci   Return the representation of *x* in polar coordinates.  Returns a
857db96d56Sopenharmony_ci   pair ``(r, phi)`` where *r* is the modulus of *x* and phi is the
867db96d56Sopenharmony_ci   phase of *x*.  ``polar(x)`` is equivalent to ``(abs(x),
877db96d56Sopenharmony_ci   phase(x))``.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci.. function:: rect(r, phi)
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci   Return the complex number *x* with polar coordinates *r* and *phi*.
937db96d56Sopenharmony_ci   Equivalent to ``r * (math.cos(phi) + math.sin(phi)*1j)``.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ciPower and logarithmic functions
977db96d56Sopenharmony_ci-------------------------------
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci.. function:: exp(x)
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   Return *e* raised to the power *x*, where *e* is the base of natural
1027db96d56Sopenharmony_ci   logarithms.
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci.. function:: log(x[, base])
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci   Returns the logarithm of *x* to the given *base*. If the *base* is not
1087db96d56Sopenharmony_ci   specified, returns the natural logarithm of *x*. There is one branch cut,
1097db96d56Sopenharmony_ci   from 0 along the negative real axis to -∞.
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci.. function:: log10(x)
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   Return the base-10 logarithm of *x*. This has the same branch cut as
1157db96d56Sopenharmony_ci   :func:`log`.
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci.. function:: sqrt(x)
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci   Return the square root of *x*. This has the same branch cut as :func:`log`.
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ciTrigonometric functions
1247db96d56Sopenharmony_ci-----------------------
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci.. function:: acos(x)
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   Return the arc cosine of *x*. There are two branch cuts: One extends right
1297db96d56Sopenharmony_ci   from 1 along the real axis to ∞. The other extends left from -1 along the
1307db96d56Sopenharmony_ci   real axis to -∞.
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci.. function:: asin(x)
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci   Return the arc sine of *x*. This has the same branch cuts as :func:`acos`.
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci.. function:: atan(x)
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci   Return the arc tangent of *x*. There are two branch cuts: One extends from
1417db96d56Sopenharmony_ci   ``1j`` along the imaginary axis to ``∞j``. The other extends from ``-1j``
1427db96d56Sopenharmony_ci   along the imaginary axis to ``-∞j``.
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci.. function:: cos(x)
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci   Return the cosine of *x*.
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci.. function:: sin(x)
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci   Return the sine of *x*.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci.. function:: tan(x)
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci   Return the tangent of *x*.
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ciHyperbolic functions
1617db96d56Sopenharmony_ci--------------------
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci.. function:: acosh(x)
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci   Return the inverse hyperbolic cosine of *x*. There is one branch cut,
1667db96d56Sopenharmony_ci   extending left from 1 along the real axis to -∞.
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci.. function:: asinh(x)
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci   Return the inverse hyperbolic sine of *x*. There are two branch cuts:
1727db96d56Sopenharmony_ci   One extends from ``1j`` along the imaginary axis to ``∞j``.  The other
1737db96d56Sopenharmony_ci   extends from ``-1j`` along the imaginary axis to ``-∞j``.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci.. function:: atanh(x)
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci   Return the inverse hyperbolic tangent of *x*. There are two branch cuts: One
1797db96d56Sopenharmony_ci   extends from ``1`` along the real axis to ``∞``. The other extends from
1807db96d56Sopenharmony_ci   ``-1`` along the real axis to ``-∞``.
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci.. function:: cosh(x)
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci   Return the hyperbolic cosine of *x*.
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci.. function:: sinh(x)
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci   Return the hyperbolic sine of *x*.
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci.. function:: tanh(x)
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   Return the hyperbolic tangent of *x*.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ciClassification functions
1997db96d56Sopenharmony_ci------------------------
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci.. function:: isfinite(x)
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   Return ``True`` if both the real and imaginary parts of *x* are finite, and
2047db96d56Sopenharmony_ci   ``False`` otherwise.
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci   .. versionadded:: 3.2
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci.. function:: isinf(x)
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci   Return ``True`` if either the real or the imaginary part of *x* is an
2127db96d56Sopenharmony_ci   infinity, and ``False`` otherwise.
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci.. function:: isnan(x)
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci   Return ``True`` if either the real or the imaginary part of *x* is a NaN,
2187db96d56Sopenharmony_ci   and ``False`` otherwise.
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci.. function:: isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci   Return ``True`` if the values *a* and *b* are close to each other and
2247db96d56Sopenharmony_ci   ``False`` otherwise.
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci   Whether or not two values are considered close is determined according to
2277db96d56Sopenharmony_ci   given absolute and relative tolerances.
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci   *rel_tol* is the relative tolerance -- it is the maximum allowed difference
2307db96d56Sopenharmony_ci   between *a* and *b*, relative to the larger absolute value of *a* or *b*.
2317db96d56Sopenharmony_ci   For example, to set a tolerance of 5%, pass ``rel_tol=0.05``.  The default
2327db96d56Sopenharmony_ci   tolerance is ``1e-09``, which assures that the two values are the same
2337db96d56Sopenharmony_ci   within about 9 decimal digits.  *rel_tol* must be greater than zero.
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci   *abs_tol* is the minimum absolute tolerance -- useful for comparisons near
2367db96d56Sopenharmony_ci   zero. *abs_tol* must be at least zero.
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci   If no errors occur, the result will be:
2397db96d56Sopenharmony_ci   ``abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)``.
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci   The IEEE 754 special values of ``NaN``, ``inf``, and ``-inf`` will be
2427db96d56Sopenharmony_ci   handled according to IEEE rules.  Specifically, ``NaN`` is not considered
2437db96d56Sopenharmony_ci   close to any other value, including ``NaN``.  ``inf`` and ``-inf`` are only
2447db96d56Sopenharmony_ci   considered close to themselves.
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci   .. versionadded:: 3.5
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   .. seealso::
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci      :pep:`485` -- A function for testing approximate equality
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ciConstants
2547db96d56Sopenharmony_ci---------
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. data:: pi
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   The mathematical constant *π*, as a float.
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci.. data:: e
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci   The mathematical constant *e*, as a float.
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci.. data:: tau
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci   The mathematical constant *τ*, as a float.
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci   .. versionadded:: 3.6
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci.. data:: inf
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci   Floating-point positive infinity. Equivalent to ``float('inf')``.
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci   .. versionadded:: 3.6
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci.. data:: infj
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_ci   Complex number with zero real part and positive infinity imaginary
2837db96d56Sopenharmony_ci   part. Equivalent to ``complex(0.0, float('inf'))``.
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci   .. versionadded:: 3.6
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci.. data:: nan
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ci   A floating-point "not a number" (NaN) value.  Equivalent to
2917db96d56Sopenharmony_ci   ``float('nan')``.
2927db96d56Sopenharmony_ci
2937db96d56Sopenharmony_ci   .. versionadded:: 3.6
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci.. data:: nanj
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci   Complex number with zero real part and NaN imaginary part. Equivalent to
2997db96d56Sopenharmony_ci   ``complex(0.0, float('nan'))``.
3007db96d56Sopenharmony_ci
3017db96d56Sopenharmony_ci   .. versionadded:: 3.6
3027db96d56Sopenharmony_ci
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci.. index:: pair: module; math
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ciNote that the selection of functions is similar, but not identical, to that in
3077db96d56Sopenharmony_cimodule :mod:`math`.  The reason for having two modules is that some users aren't
3087db96d56Sopenharmony_ciinterested in complex numbers, and perhaps don't even know what they are.  They
3097db96d56Sopenharmony_ciwould rather have ``math.sqrt(-1)`` raise an exception than return a complex
3107db96d56Sopenharmony_cinumber. Also note that the functions defined in :mod:`cmath` always return a
3117db96d56Sopenharmony_cicomplex number, even if the answer can be expressed as a real number (in which
3127db96d56Sopenharmony_cicase the complex number has an imaginary part of zero).
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ciA note on branch cuts: They are curves along which the given function fails to
3157db96d56Sopenharmony_cibe continuous.  They are a necessary feature of many complex functions.  It is
3167db96d56Sopenharmony_ciassumed that if you need to compute with complex functions, you will understand
3177db96d56Sopenharmony_ciabout branch cuts.  Consult almost any (not too elementary) book on complex
3187db96d56Sopenharmony_civariables for enlightenment.  For information of the proper choice of branch
3197db96d56Sopenharmony_cicuts for numerical purposes, a good reference should be the following:
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ci.. seealso::
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_ci   Kahan, W:  Branch cuts for complex elementary functions; or, Much ado about
3257db96d56Sopenharmony_ci   nothing's sign bit.  In Iserles, A., and Powell, M. (eds.), The state of the art
3267db96d56Sopenharmony_ci   in numerical analysis. Clarendon Press (1987) pp165--211.
327