Ticket #4498: trac_4498_arg.3.patch

File trac_4498_arg.3.patch, 8.1 KB (added by ktkohl, 9 years ago)

symbolic arg--fixed whitespace issues--use this one instead of others

  • sage/functions/all.py

    # HG changeset patch
    # User Karen T. Kohl <ktkohl96@gmail.com>
    # Date 1326306162 21600
    # Node ID 6a250b57f11f590c35c331cac2a29fba9e694d9c
    # Parent  92c93226b64f933e0af00bbcbd1a8a79c444f43f
    Trac 4498:  symbolic arg function
    
    diff --git a/sage/functions/all.py b/sage/functions/all.py
    a b  
    1818from other import ( ceil, floor, gamma, psi, factorial,
    1919                    abs_symbolic, erf, sqrt,
    2020                    gamma_inc, incomplete_gamma,
    21                     real_part, real,
     21                    arg, real_part, real,
    2222                    imag_part, imag, imaginary, conjugate)
    2323
    2424from log import (exp, log, ln, polylog, dilog)
  • sage/functions/other.py

    diff --git a/sage/functions/other.py b/sage/functions/other.py
    a b  
    1919from sage.symbolic.constants import pi
    2020from sage.symbolic.function import is_inexact
    2121from sage.functions.log import exp
     22from sage.functions.trig import arctan2
    2223from sage.functions.transcendental import Ei
    2324from sage.libs.mpmath import utils as mpmath_utils
    2425
     
    13261327        {'__call__': staticmethod(sqrt),
    13271328            '__setstate__': lambda x, y: None})
    13281329
     1330class Function_arg(BuiltinFunction):
     1331    def __init__(self):
     1332        r"""
     1333        The argument function for complex numbers.
     1334
     1335        EXAMPLES::
     1336
     1337            sage: arg(3+i)
     1338            arctan(1/3)
     1339            sage: arg(-1+i)
     1340            3/4*pi
     1341            sage: arg(2+2*i)
     1342            1/4*pi
     1343            sage: arg(2+x)
     1344            arg(x + 2)
     1345            sage: arg(2.0+i+x)
     1346            arg(x + 2.00000000000000 + 1.00000000000000*I)
     1347            sage: arg(-3)
     1348            pi
     1349            sage: arg(3)
     1350            0
     1351            sage: arg(0)
     1352            0
     1353            sage: latex(arg(x))
     1354            \text{arg}\left(x\right)
     1355            sage: maxima(arg(x))
     1356            atan2(0,x)
     1357            sage: maxima(arg(2+i))
     1358            atan(1/2)
     1359            sage: maxima(arg(sqrt(2)+i))
     1360            atan(1/sqrt(2))
     1361            sage: arg(2+i)
     1362            arctan(1/2)
     1363            sage: arg(sqrt(2)+i)
     1364            arg(sqrt(2) + I)
     1365            sage: arg(sqrt(2)+i).simplify()
     1366            arctan(1/2*sqrt(2))
     1367
     1368        TESTS::
     1369
     1370            sage: arg(3+i)
     1371            arctan(1/3)
     1372            sage: arg(-1+i)
     1373            3/4*pi
     1374            sage: arg(2+2*i)
     1375            1/4*pi
     1376            sage: arg(2+x)
     1377            arg(x + 2)
     1378            sage: arg(2.0+i+x)
     1379            arg(x + 2.00000000000000 + 1.00000000000000*I)
     1380            sage: arg(-3)
     1381            pi
     1382            sage: arg(3)
     1383            0
     1384            sage: arg(0)
     1385            0
     1386            sage: arg(0.0)
     1387            0.000000000000000
     1388            sage: arg(3.0)
     1389            0.000000000000000
     1390            sage: arg(-2.5)
     1391            3.14159265358979
     1392            sage: arg(2.0+3*i)
     1393            0.982793723247329
     1394            sage: maxima(arg(x))
     1395            atan2(0,x)
     1396            sage: maxima(arg(2+i))
     1397            atan(1/2)
     1398            sage: maxima(arg(sqrt(2)+i))
     1399            atan(1/sqrt(2))
     1400            sage: arg(2+i)
     1401            arctan(1/2)
     1402            sage: arg(sqrt(2)+i)
     1403            arg(sqrt(2) + I)
     1404            sage: arg(sqrt(2)+i).simplify()
     1405            arctan(1/2*sqrt(2))
     1406
     1407        """
     1408
     1409        BuiltinFunction.__init__(self, "arg",  latex_name=r"\text{arg}",
     1410                                   conversions=dict(maxima='carg',mathematica='Arg'))
     1411    def _eval_(self, x):
     1412        """
     1413        EXAMPLES::
     1414
     1415            sage: arg(3+i)
     1416            arctan(1/3)
     1417            sage: arg(-1+i)
     1418            3/4*pi
     1419            sage: arg(2+2*i)
     1420            1/4*pi
     1421            sage: arg(2+x)
     1422            arg(x + 2)
     1423            sage: arg(2.0+i+x)
     1424            arg(x + 2.00000000000000 + 1.00000000000000*I)
     1425            sage: arg(-3)
     1426            pi
     1427            sage: arg(3)
     1428            0
     1429            sage: arg(0)
     1430            0
     1431            sage: arg(sqrt(2)+i)
     1432            arg(sqrt(2) + I)
     1433
     1434        """
     1435        if not isinstance(x,Expression):
     1436            # x contains no variables
     1437            if is_inexact(x):
     1438                # inexact complex numbers, e.g. 2.0+i
     1439                return self._evalf_(x, parent(x))
     1440            else:
     1441                # exact complex numbers, e.g. 2+i
     1442                return arctan2(imag_part(x),real_part(x))
     1443        else:
     1444            # x contains variables, e.g. 2+i+y or 2.0+i+y
     1445            # or x involves an expression such as sqrt(2)
     1446            return None
     1447
     1448    def _evalf_(self, x, parent=None):
     1449        """
     1450        EXAMPLES::
     1451
     1452            sage: arg(0.0)
     1453            0.000000000000000
     1454            sage: arg(3.0)
     1455            0.000000000000000
     1456            sage: arg(-2.5)
     1457            3.14159265358979
     1458            sage: arg(2.0+3*i)
     1459            0.982793723247329
     1460
     1461        """
     1462        try:
     1463            return x.arg()
     1464        except AttributeError:
     1465            C = ComplexField()
     1466            x = C(x)
     1467            return x.arg()
     1468
     1469arg=Function_arg()
     1470
     1471
    13291472############################
    13301473# Real and Imaginary Parts #
    13311474############################
  • sage/misc/all.py

    diff --git a/sage/misc/all.py b/sage/misc/all.py
    a b  
    8080
    8181from functional import (additive_order,
    8282                        sqrt as numerical_sqrt,
    83                         arg,
    8483                        base_ring,
    8584                        base_field,
    8685                        basis,
  • sage/misc/functional.py

    diff --git a/sage/misc/functional.py b/sage/misc/functional.py
    a b  
    6262    """
    6363    return x.additive_order()
    6464
    65 def arg(x):
    66     """
    67     Returns the argument of a complex number `x`.
    68    
    69     EXAMPLES::
    70    
    71         sage: z = CC(1,2)
    72         sage: theta = arg(z)
    73         sage: cos(theta)*abs(z)   
    74         1.00000000000000
    75         sage: sin(theta)*abs(z)
    76         2.00000000000000
    77     """
    78     try: return x.arg()
    79     except AttributeError: return CDF(x).arg()
    80 
    8165def base_ring(x):
    8266    """
    8367    Returns the base ring over which x is defined.
  • sage/symbolic/random_tests.py

    diff --git a/sage/symbolic/random_tests.py b/sage/symbolic/random_tests.py
    a b  
    1616        sage: [f for (one,f,arity) in _mk_full_functions()]
    1717        [Ei, abs, arccos, arccosh, arccot, arccoth, arccsc, arccsch,
    1818        arcsec, arcsech, arcsin, arcsinh, arctan, arctan2, arctanh,
    19         binomial, ceil, conjugate, cos, cosh, cot, coth, csc, csch,
    20         dickman_rho, dilog, dirac_delta, elliptic_e, elliptic_ec,
    21         elliptic_eu, elliptic_f, elliptic_kc, elliptic_pi, erf, exp,
    22         factorial, floor, heaviside, imag_part, integrate,
    23         kronecker_delta, log, polylog, real_part, sec, sech, sgn, sin,
    24         sinh, tan, tanh, unit_step, zeta, zetaderiv]
     19        arg, binomial, ceil, conjugate, cos, cosh, cot, coth, csc,
     20        csch, dickman_rho, dilog, dirac_delta, elliptic_e,
     21        elliptic_ec, elliptic_eu, elliptic_f, elliptic_kc,
     22        elliptic_pi, erf, exp, factorial, floor, heaviside, imag_part,
     23        integrate, kronecker_delta, log, polylog, real_part, sec,
     24        sech, sgn, sin, sinh, tan, tanh, unit_step, zeta, zetaderiv]
    2525
    2626    Note that this doctest will fail whenever a Pynac function is added or
    2727    removed.  In that case, it is very likely that the doctests for
     
    237237        (euler_gamma - v3^(-e) + (v2 - factorial(-e/v2))^(((2.85879036573 - 1.18163393202*I)*v2 + (2.85879036573 - 1.18163393202*I)*v3)*pi - 0.247786879678 + 0.931826724898*I)*arccsc((0.891138386848 - 0.0936820840629*I)/v1) - (0.553423153995 - 0.5481180572*I)*v3 + 0.149683576515 - 0.155746451854*I)*v1 + arccsch(pi + e)*elliptic_f(khinchin*v2, 1.4656989704 + 0.863754357069*I)
    238238        sage: random_expr(5, verbose=True)
    239239        About to apply dirac_delta to [1]
    240         About to apply arccsch to [0]
    241         About to apply <built-in function add> to [0, arccsch(0)]
    242         arccsch(0)
     240        About to apply arcsec to [0]
     241        About to apply <built-in function add> to [0, arcsec(0)]
     242        arcsec(0)
     243
    243244    """
    244245    vars = [(1.0, sage.calculus.calculus.var('v%d' % (n+1))) for n in range(nvars)]
    245246    if ncoeffs is None: