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