Ticket #4498: trac_4498_arg.1.patch

File trac_4498_arg.1.patch, 5.3 KB (added by ktkohl, 9 years ago)

symbolic arg function

  • sage/functions/all.py

    # HG changeset patch
    # User Karen T. Kohl <ktkohl96@gmail.com>
    # Date 1326306162 21600
    # Node ID ecf4c6a8e13db47ad3340a8f3525c5fd4b96e6cc
    # 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            sage: arg(3+i)
     1337            arctan(1/3)
     1338            sage: arg(-1+i)
     1339            3/4*pi
     1340            sage: arg(2+2*i)
     1341            1/4*pi
     1342            sage: arg(2+x)
     1343            arg(x + 2)
     1344            sage: arg(2.0+i+x)
     1345            arg(x + 2.00000000000000 + 1.00000000000000*I)
     1346            sage: arg(-3)
     1347            pi
     1348            sage: arg(3)
     1349            0
     1350            sage: arg(0)
     1351            0
     1352            sage: arg(sqrt(2)+i)
     1353            arg(sqrt(2) + I)
     1354            sage: latex(arg(x))
     1355            \text{arg}\left(x\right)
     1356
     1357        TESTS:
     1358            sage: arg(3+i)
     1359            arctan(1/3)
     1360            sage: arg(-1+i)
     1361            3/4*pi
     1362            sage: arg(2+2*i)
     1363            1/4*pi
     1364            sage: arg(2+x)
     1365            arg(x + 2)
     1366            sage: arg(2.0+i+x)
     1367            arg(x + 2.00000000000000 + 1.00000000000000*I)
     1368            sage: arg(-3)
     1369            pi
     1370            sage: arg(3)
     1371            0
     1372            sage: arg(0)
     1373            0
     1374            sage: arg(0.0)
     1375            0.000000000000000
     1376            sage: arg(3.0)
     1377            0.000000000000000
     1378            sage: arg(-2.5)
     1379            3.14159265358979
     1380            sage: arg(2.0+3*i)
     1381            0.982793723247329
     1382
     1383        """
     1384
     1385        BuiltinFunction.__init__(self, "arg",  latex_name=r"\text{arg}",
     1386                                   conversions=dict(maxima='arg',mathematica='Arg'))
     1387    def _eval_(self, x):
     1388        """
     1389        EXAMPLES::
     1390
     1391            sage: arg(3+i)
     1392            arctan(1/3)
     1393            sage: arg(-1+i)
     1394            3/4*pi
     1395            sage: arg(2+2*i)
     1396            1/4*pi
     1397            sage: arg(2+x)
     1398            arg(x + 2)
     1399            sage: arg(2.0+i+x)
     1400            arg(x + 2.00000000000000 + 1.00000000000000*I)
     1401            sage: arg(-3)
     1402            pi
     1403            sage: arg(3)
     1404            0
     1405            sage: arg(0)
     1406            0
     1407            sage: arg(sqrt(2)+i)
     1408            arg(sqrt(2) + I)
     1409
     1410        """
     1411        if not isinstance(x,Expression):
     1412            # x contains no variables
     1413            if is_inexact(x):
     1414                # inexact complex numbers, e.g. 2.0+i
     1415                return self._evalf_(x, parent(x))
     1416            else:
     1417                # exact complex numbers, e.g. 2+i
     1418                return arctan2(imag_part(x),real_part(x))
     1419        else:
     1420            # x contains variables, e.g. 2+i+y or 2.0+i+y
     1421            # or x involves an expression such as sqrt(2)
     1422            return None
     1423
     1424    def _evalf_(self, x, parent=None):
     1425        """
     1426        EXAMPLES::
     1427
     1428            sage: arg(0.0)
     1429            0.000000000000000
     1430            sage: arg(3.0)
     1431            0.000000000000000
     1432            sage: arg(-2.5)
     1433            3.14159265358979
     1434            sage: arg(2.0+3*i)
     1435            0.982793723247329
     1436
     1437        """
     1438        try:
     1439            return x.arg()
     1440        except AttributeError:
     1441            C = ComplexField()
     1442            x = C(x)
     1443            return x.arg()
     1444
     1445arg=Function_arg()
     1446
     1447
    13291448############################
    13301449# Real and Imaginary Parts #
    13311450############################
  • 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.