Changeset 4041:95376008d175
- Timestamp:
- 04/20/07 16:51:35 (6 years ago)
- Branch:
- default
- Parents:
- 3932:2f9acd04105a (diff), 4040:11af6f84b0bc (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Location:
- sage
- Files:
-
- 13 edited
-
misc/hg.py (modified) (1 diff)
-
misc/hg.py (modified) (1 diff)
-
rings/arith.py (modified) (6 diffs)
-
rings/arith.py (modified) (1 diff)
-
rings/integer.pyx (modified) (8 diffs)
-
rings/integer.pyx (modified) (23 diffs)
-
rings/polynomial_element.pyx (modified) (7 diffs)
-
rings/polynomial_element.pyx (modified) (4 diffs)
-
rings/power_series_ring_element.py (modified) (2 diffs)
-
rings/real_double.pyx (modified) (8 diffs)
-
rings/real_double.pyx (modified) (4 diffs)
-
rings/real_mpfr.pyx (modified) (6 diffs)
-
rings/real_mpfr.pyx (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sage/misc/hg.py
r3928 r4041 564 564 self('%s --help | %s'%(cmd, pager())) 565 565 566 def outgoing(self, url=None, opts=''): 567 """ 568 Use this to find changsets that are in your branch, but not in the 569 specified destination repository. If no destination is specified, the 570 official repository is used. 571 572 From the Mercurial documentation: 573 Show changesets not found in the specified destination repository or the 574 default push location. These are the changesets that would be pushed if 575 a push was requested. 576 577 See pull() for valid destination format details. 578 579 INPUT: 580 url: default: self.url() -- the official repository 581 * http://[user@]host[:port]/[path] 582 * https://[user@]host[:port]/[path] 583 * ssh://[user@]host[:port]/[path] 584 * local directory (starting with a /) 585 * name of a branch (for hg_sage); no /'s 586 options: (default: none) 587 -M --no-merges do not show merges 588 -f --force run even when remote repository is unrelated 589 -p --patch show patch 590 --style display using template map file 591 -r --rev a specific revision you would like to push 592 -n --newest-first show newest record first 593 --template display with template 594 -e --ssh specify ssh command to use 595 --remotecmd specify hg command to run on the remote side 596 """ 597 if url is None: 598 url = self.__url 599 600 if not '/' in url: 601 url = '%s/devel/sage-%s'%(SAGE_ROOT, url) 602 603 self('outgoing %s %s | %s' % (opts, url, pager())) 604 566 605 def pull(self, url=None, options='-u'): 567 606 """ -
sage/misc/hg.py
r4013 r4041 179 179 180 180 print_open_msg(address, port) 181 tries = 0 182 while self('serve --address %s --port %s %s'%(address, port, options)) != 2: 183 port += 1 184 tries += 1 185 if tries > 100: 186 raise RuntimeError, "no port found after trying 100 (maybe your network is down)" 187 print_open_msg(address, port) 188 181 self('serve --address %s --port %s %s'%(address, port, options)) 182 print_open_msg(address, port) 189 183 190 184 browse = serve -
sage/rings/arith.py
r3926 r4041 62 62 63 63 This example involves a complex number. 64 sage: z = (1/2)*(1 + sqrt(3) *CC.0); z64 sage: z = (1/2)*(1 + RDF(sqrt(3)) *CC.0); z 65 65 0.500000000000000 + 0.866025403784439*I 66 66 sage: p = algdep(z, 6); p … … 1483 1483 # primes at most a given limit. 1484 1484 1485 def factor(n, proof=True, int_=False, algorithm='pari', verbose=0 ):1485 def factor(n, proof=True, int_=False, algorithm='pari', verbose=0, **kwds): 1486 1486 """ 1487 1487 Returns the factorization of the integer n as a sorted list of … … 1536 1536 if not isinstance(n, (int,long, integer.Integer)): 1537 1537 try: 1538 return n.factor( )1538 return n.factor(**kwds) 1539 1539 except AttributeError: 1540 1540 raise TypeError, "unable to factor n" … … 2284 2284 [2, 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, 1, 1, 10, 1, 1, 12, 1, 1, 14, 1, 1, 16, 1, 1, 18, 1, 1, 20, 1, 1, 22, 1, 1, 24, 1, 1, 26, 1, 1, 28, 1, 1, 30, 1, 1, 32, 1, 1, 34, 1, 1, 36, 1, 1, 38, 1, 1] 2285 2285 """ 2286 import sage.calculus.calculus 2287 import sage.functions.constants 2288 # if x is a SymbolicExpression, try coercing it to a real number 2286 2289 if not bits is None: 2287 x = sage.rings.real_mpfr.RealField(bits)(x) 2290 try: 2291 x = sage.rings.real_mpfr.RealField(bits)(x) 2292 except TypeError: 2293 raise TypeError, "can only find the continued fraction of a number" 2294 elif isinstance(x, float): 2295 from real_double import RDF 2296 x = RDF(x) 2297 elif isinstance(x, (sage.calculus.calculus.SymbolicExpression, 2298 sage.functions.constants.Constant)): 2299 try: 2300 x = sage.rings.real_mpfr.RealField(53)(x) 2301 except TypeError: 2302 raise TypeError, "can only find the continued fraction of a number" 2288 2303 elif not partial_convergents and \ 2289 2304 isinstance(x, (integer.Integer, sage.rings.rational.Rational, … … 2615 2630 0.652965496420167 + 0.343065839816545*I 2616 2631 sage: falling_factorial(1+I, 4) 2617 2.00000000000000 + 4.00000000000000*I 2632 (I - 2)*(I - 1)*I*(I + 1) 2633 sage: expand(falling_factorial(1+I, 4)) 2634 4*I + 2 2618 2635 sage: falling_factorial(I, 4) 2619 -10.00000000000002636 (I - 3)*(I - 2)*(I - 1)*I 2620 2637 2621 2638 sage: M = MatrixSpace(ZZ, 4, 4) … … 2676 2693 0.266816390637832 + 0.122783354006372*I 2677 2694 2678 sage: rising_factorial(I, 4) 2679 -10.0000000000000 2695 sage: a = rising_factorial(I, 4); a 2696 I*(I + 1)*(I + 2)*(I + 3) 2697 sage: expand(a) 2698 -10 2680 2699 2681 2700 See falling_factorial(I, 4). 2682 2701 2683 sage: R = ZZ['x']2702 sage: x = polygen(ZZ) 2684 2703 sage: rising_factorial(x, 4) 2685 2704 x^4 + 6*x^3 + 11*x^2 + 6*x -
sage/rings/arith.py
r4037 r4041 1874 1874 -1 1875 1875 1876 IMPLEMENTATION: Using Pari.1876 IMPLEMENTATION: Using GMP. 1877 1877 """ 1878 1878 x = integer_ring.ZZ(x) 1879 y = integer_ring.ZZ(y) 1880 return integer_ring.ZZ(pari(x).kronecker(y).python()) 1879 return integer_ring.ZZ(x.kronecker(y)) 1881 1880 1882 1881 def kronecker(x,y): -
sage/rings/integer.pyx
r3927 r4041 676 676 RuntimeError: exponent must be at most 4294967294 # 32-bit 677 677 RuntimeError: exponent must be at most 18446744073709551614 # 64-bit 678 679 We raise 2 to various interesting exponents: 680 sage: 2^x # symbolic x 681 2^x 682 sage: 2^1.5 # real number 683 2.82842712474619 684 sage: 2^I # complex number 685 2^I 686 sage: sage: f = 2^(sin(x)-cos(x)); f 687 2^(sin(x) - cos(x)) 688 sage: f(3) 689 2^(sin(3) - cos(3)) 690 sage: 2^(x+y+z) 691 2^(z + y + x) 692 sage: 2^(1/2) 693 sqrt(2) 694 sage: 2^(-1/2) 695 1/sqrt(2) 678 696 """ 679 697 cdef Integer _n … … 690 708 _n = Integer(n) 691 709 except TypeError: 692 raise TypeError, "exponent (=%s) must be an integer.\nCoerce your numbers to real or complex numbers first."%n 710 try: 711 s = n.parent()(self) 712 return s**n 713 except AttributeError: 714 raise TypeError, "exponent (=%s) must be an integer.\nCoerce your numbers to real or complex numbers first."%n 693 715 694 716 if _n < 0: … … 806 828 807 829 sage: x = 3^100000 808 sage: log(RR(x), 3)830 sage: RR(log(RR(x), 3)) 809 831 100000.000000000 810 sage: log(RR(x + 100000), 3)832 sage: RR(log(RR(x + 100000), 3)) 811 833 100000.000000000 812 834 … … 1629 1651 1630 1652 1631 def sqrt (self, bits=None):1653 def sqrt_approx(self, bits=None): 1632 1654 r""" 1633 1655 Returns the positive square root of self, possibly as a … … 1639 1661 If bits is not specified, the number of 1640 1662 bits of precision is at least twice the 1641 number of bits of self (the precision 1642 is always at least 53 bits if not specified). 1663 number of bits of self. 1643 1664 OUTPUT: 1644 1665 integer, real number, or complex number. … … 1649 1670 EXAMPLE: 1650 1671 sage: Z = IntegerRing() 1651 sage: Z(4).sqrt() 1652 2 1653 sage: Z(4).sqrt(53) 1672 sage: Z(4).sqrt_approx(53) 1654 1673 2.00000000000000 1655 sage: Z(2).sqrt (53)1674 sage: Z(2).sqrt_approx(53) 1656 1675 1.41421356237310 1657 sage: Z(2).sqrt (100)1676 sage: Z(2).sqrt_approx(100) 1658 1677 1.4142135623730950488016887242 1659 sage: n = 39188072418583779289; n.sq uare_root()1678 sage: n = 39188072418583779289; n.sqrt() 1660 1679 6260037733 1661 sage: (100^100).sqrt ()1680 sage: (100^100).sqrt_approx() 1662 1681 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1682 sage: (-1).sqrt_approx() 1683 1.00000000000000*I 1663 1684 sage: (-1).sqrt() 1664 1.00000000000000*I1685 I 1665 1686 sage: sqrt(-2) 1666 1.41421356237310*I 1687 sqrt(2)*I 1688 sage: sqrt(-2.0) 1689 sqrt(2)*I 1667 1690 sage: sqrt(97) 1668 9.848857801796101669 sage: n = 97; n.sqrt (200)1691 sqrt(97) 1692 sage: n = 97; n.sqrt_approx(200) 1670 1693 9.8488578017961047217462114149176244816961362874427641717232 1671 1694 """ 1672 1695 if bits is None: 1673 try:1674 return self.square_root()1675 except ValueError:1676 pass1677 1696 bits = max(53, 2*(mpz_sizeinbase(self.value, 2)+2)) 1678 1697 … … 1686 1705 return R(self).sqrt() 1687 1706 1688 def sq uare_root(self):1707 def sqrt(self): 1689 1708 """ 1690 1709 Return the positive integer square root of self, or raises a ValueError … … 1692 1711 1693 1712 EXAMPLES: 1694 sage: Integer(144).sq uare_root()1713 sage: Integer(144).sqrt() 1695 1714 12 1696 sage: Integer(102).square_root() 1697 Traceback (most recent call last): 1698 ... 1699 ValueError: self (=102) is not a perfect square 1715 sage: Integer(102).sqrt() 1716 sqrt(102) 1700 1717 """ 1701 1718 n = self.isqrt() 1702 1719 if n * n == self: 1703 1720 return n 1704 raise ValueError, "self (=%s) is not a perfect square"%self 1721 from sage.calculus.calculus import sqrt 1722 return sqrt(self) 1723 #raise ValueError, "self (=%s) is not a perfect square"%self 1705 1724 1706 1725 -
sage/rings/integer.pyx
r4033 r4041 13 13 -- Rishikesh (2007-02-25): changed quo_rem so that the rem is positive 14 14 -- David Harvey, Martin Albrecht, Robert Bradshaw (2007-03-01): optimized Integer constructor and pool 15 -- Robert Bradshaw (2007-04-12): is_perfect_power, Jacobi symbol (with Kronecker extension) 16 Convert some methods to use GMP directly rather than pari, Integer() -> PY_NEW(Integer) 15 17 16 18 EXAMPLES: … … 297 299 def _xor(Integer self, Integer other): 298 300 cdef Integer x 299 x = Integer()301 x = PY_NEW(Integer) 300 302 mpz_xor(x.value, self.value, other.value) 301 303 return x … … 337 339 """ 338 340 cdef Integer z 339 z = Integer()341 z = PY_NEW(Integer) 340 342 set_mpz(z,self.value) 341 343 return z … … 616 618 def __floordiv(Integer self, Integer other): 617 619 cdef Integer x 618 x = Integer() 619 620 620 x = PY_NEW(Integer) 621 621 622 _sig_on 622 623 mpz_fdiv_q(x.value, self.value, other.value) … … 784 785 cdef Integer x 785 786 cdef int is_exact 786 x = Integer()787 x = PY_NEW(Integer) 787 788 _sig_on 788 789 is_exact = mpz_root(x.value, self.value, n) … … 895 896 """ 896 897 cdef Integer x 897 x = Integer()898 x = PY_NEW(Integer) 898 899 mpz_abs(x.value, self.value) 899 900 return x … … 919 920 920 921 cdef Integer x 921 x = Integer()922 x = PY_NEW(Integer) 922 923 923 924 _sig_on … … 958 959 959 960 cdef Integer q, r 960 q = Integer()961 r = Integer()961 q = PY_NEW(Integer) 962 r = PY_NEW(Integer) 962 963 963 964 _sig_on … … 998 999 999 1000 cdef Integer q, r 1000 q = Integer()1001 r = Integer()1001 q = PY_NEW(Integer) 1002 r = PY_NEW(Integer) 1002 1003 1003 1004 _sig_on … … 1032 1033 raise ZeroDivisionError, "cannot raise to a power modulo 0" 1033 1034 1034 x = Integer()1035 x = PY_NEW(Integer) 1035 1036 1036 1037 _sig_on … … 1074 1075 cdef Integer x, _mod 1075 1076 _mod = Integer(mod) 1076 x = Integer()1077 x = PY_NEW(Integer) 1077 1078 1078 1079 _sig_on … … 1232 1233 1233 1234 cdef Integer z 1234 z = Integer()1235 z = PY_NEW(Integer) 1235 1236 mpz_set(z.value,x) 1236 1237 mpz_clear(x) … … 1300 1301 _sig_off 1301 1302 1302 z = Integer()1303 z = PY_NEW(Integer) 1303 1304 set_mpz(z, x) 1304 1305 mpz_clear(x) … … 1376 1377 False 1377 1378 """ 1378 return bool( self._pari_().issquare())1379 return bool(mpz_perfect_square_p(self.value)) 1379 1380 1380 1381 def is_prime(self): … … 1405 1406 """ 1406 1407 return bool(self._pari_().ispseudoprime()) 1407 1408 1409 def is_perfect_power(self): 1410 r""" 1411 Retuns \code{True} if self is a perfect power. 1412 1413 EXAMPLES: 1414 sage: z = 8 1415 sage: z.is_perfect_power() 1416 True 1417 sage: z = 144 1418 sage: z.is_perfect_power() 1419 True 1420 sage: z = 10 1421 sage: z.is_perfect_power() 1422 False 1423 """ 1424 return bool(mpz_perfect_power_p(self.value)) 1425 1426 def jacobi(self, b): 1427 """ 1428 Calculate the Jacobi symbol $\left(\frac{self,b}\right)$. 1429 1430 EXAMPLES: 1431 sage: z = -1 1432 sage: z.jacobi(17) 1433 1 1434 sage: z.jacobi(19) 1435 -1 1436 sage: z.jacobi(17*19) 1437 -1 1438 sage: (2).jacobi(17) 1439 1 1440 sage: (3).jacobi(19) 1441 -1 1442 sage: (6).jacobi(17*19) 1443 -1 1444 sage: (6).jacobi(33) 1445 0 1446 sage: a = 3; b = 7 1447 sage: a.jacobi(b) == -b.jacobi(a) 1448 True 1449 """ 1450 cdef long tmp 1451 if PY_TYPE_CHECK(b, int): 1452 tmp = b 1453 if (tmp & 1) == 0: 1454 raise ValueError, "Jacobi symbol not defined for even b." 1455 return mpz_kronecker_si(self.value, tmp) 1456 if not PY_TYPE_CHECK(b, Integer): 1457 b = Integer(b) 1458 if mpz_even_p((<Integer>b).value): 1459 raise ValueError, "Jacobi symbol not defined for even b." 1460 return mpz_jacobi(self.value, (<Integer>b).value) 1461 1462 def kronecker(self, b): 1463 """ 1464 Calculate the Jacobi symbol $\left(\frac{self,b}\right)$ with the Kronecker extension 1465 $(self/2)=(2/self)$ when self odd, or $(self/2)=0$ when $self$ even. 1466 1467 EXAMPLES: 1468 EXAMPLES: 1469 sage: z = 5 1470 sage: z.kronecker(41) 1471 1 1472 sage: z.kronecker(43) 1473 -1 1474 sage: z.kronecker(8) 1475 -1 1476 sage: z.kronecker(15) 1477 0 1478 sage: a = 2; b = 5 1479 sage: a.kronecker(b) == b.kronecker(a) 1480 True 1481 """ 1482 if PY_TYPE_CHECK(b, int): 1483 return mpz_kronecker_si(self.value, b) 1484 if not PY_TYPE_CHECK(b, Integer): 1485 b = Integer(b) 1486 return mpz_kronecker(self.value, (<Integer>b).value) 1487 1408 1488 def square_free_part(self): 1409 1489 """ … … 1562 1642 raise ValueError, "square root of negative number not defined." 1563 1643 cdef Integer x 1564 x = Integer()1644 x = PY_NEW(Integer) 1565 1645 1566 1646 _sig_on … … 1670 1750 _sig_off 1671 1751 1672 g0 = Integer()1673 s0 = Integer()1674 t0 = Integer()1752 g0 = PY_NEW(Integer) 1753 s0 = PY_NEW(Integer) 1754 t0 = PY_NEW(Integer) 1675 1755 set_mpz(g0,g) 1676 1756 set_mpz(s0,s) … … 1765 1845 cdef _and(Integer self, Integer other): 1766 1846 cdef Integer x 1767 x = Integer()1847 x = PY_NEW(Integer) 1768 1848 mpz_and(x.value, self.value, other.value) 1769 1849 return x … … 1777 1857 cdef _or(Integer self, Integer other): 1778 1858 cdef Integer x 1779 x = Integer()1859 x = PY_NEW(Integer) 1780 1860 mpz_ior(x.value, self.value, other.value) 1781 1861 return x … … 1857 1937 if r == 0: 1858 1938 raise ZeroDivisionError, "Inverse does not exist." 1859 ans = Integer()1939 ans = PY_NEW(Integer) 1860 1940 set_mpz(ans,x) 1861 1941 mpz_clear(x) … … 1889 1969 _sig_off 1890 1970 1891 g0 = Integer()1971 g0 = PY_NEW(Integer) 1892 1972 set_mpz(g0,g) 1893 1973 mpz_clear(g) … … 1962 2042 1963 2043 1964 w = Integer()2044 w = PY_NEW(Integer) 1965 2045 mpz_set(w.value, z) 1966 2046 mpz_clear(z) … … 2005 2085 2006 2086 2007 w = Integer()2087 w = PY_NEW(Integer) 2008 2088 mpz_set(w.value, z) 2009 2089 mpz_clear(z) -
sage/rings/polynomial_element.pyx
r3925 r4041 5 5 -- William Stein: first version 6 6 -- Martin Albrecht: Added singular coercion. 7 8 TESTS: 9 sage: R.<x> = ZZ[] 10 sage: f = x^5 + 2*x^2 + (-1) 11 sage: f == loads(dumps(f)) 12 True 13 7 14 """ 8 15 … … 518 525 r""" 519 526 EXAMPLES: 527 sage: x = polygen(QQ) 520 528 sage: f = x^3+2/3*x^2 - 5/3 521 529 sage: f._repr_() … … 530 538 r""" 531 539 EXAMPLES: 540 sage: x = polygen(QQ) 532 541 sage: latex(x^3+2/3*x^2 - 5/3) 533 542 x^{3} + \frac{2}{3}x^{2} - \frac{5}{3} … … 939 948 940 949 Notice that the unit factor is included when we multiply $F$ back out. 941 sage: F.mul()950 sage: expand(F) 942 951 2*x^10 + 2*x + 2*a 943 952 … … 974 983 sage: F = factor(x^2-3); F 975 984 (1.0000000000000000000000000000*x + 1.7320508075688772935274463415) * (1.0000000000000000000000000000*x - 1.7320508075688772935274463415) 976 sage: F.mul()985 sage: expand(F) 977 986 1.0000000000000000000000000000*x^2 - 3.0000000000000000000000000000 978 987 sage: factor(x^2 + 1) … … 982 991 sage: F = factor(x^2+3); F 983 992 (1.0000000000000000000000000000*x + -1.7320508075688772935274463415*I) * (1.0000000000000000000000000000*x + 1.7320508075688772935274463415*I) 984 sage: F.mul()993 sage: expand(F) 985 994 1.0000000000000000000000000000*x^2 + 3.0000000000000000000000000000 986 995 sage: factor(x^2+1) … … 988 997 sage: f = C.0 * (x^2 + 1) ; f 989 998 1.0000000000000000000000000000*I*x^2 + 1.0000000000000000000000000000*I 990 sage: F =factor(f); F999 sage: F = factor(f); F 991 1000 (1.0000000000000000000000000000*I) * (1.0000000000000000000000000000*x + -1.0000000000000000000000000000*I) * (1.0000000000000000000000000000*x + 1.0000000000000000000000000000*I) 992 sage: F.mul()1001 sage: expand(F) 993 1002 1.0000000000000000000000000000*I*x^2 + 1.0000000000000000000000000000*I 994 1003 """ -
sage/rings/polynomial_element.pyx
r4037 r4041 149 149 return self * self.parent()(right) 150 150 151 def __call__(self, * a):151 def __call__(self, *x): 152 152 """ 153 153 Evaluate polynomial at x=a using Horner's rule … … 199 199 Full MatrixSpace of 2 by 2 dense matrices over Rational Field 200 200 201 201 Nested polynomial ring elements can be called like multi-variate polynomials. 202 sage: R.<x> = QQ[] 203 sage: S.<y> = R[] 204 sage: f = x+y*x+y^2 205 sage: f.parent() 206 Univariate Polynomial Ring in y over Univariate Polynomial Ring in x over Rational Field 207 sage: f(2) 208 3*x + 4 209 sage: f(2,4) 210 16 211 sage: R.<t> = PowerSeriesRing(QQ, 't'); S.<x> = R[] 212 sage: f = 1 + x*t^2 + 3*x*t^4 213 sage: f(2) 214 1 + 2*t^2 + 6*t^4 215 sage: f(2, 1/2) 216 15/8 217 202 218 AUTHORS: 203 219 -- David Joyner, 2005-04-10 … … 205 221 is determined by the arithmetic 206 222 -- William Stein, 2007-03-24: fix parent being determined in the constant case! 207 """ 208 a = a[0] 209 if isinstance(a, tuple): 210 a = a[0] 223 -- Robert Bradshaw, 2007-04-09: add support for nested calling 224 """ 225 if isinstance(x[0], tuple): 226 x = x[0] 227 a = x[0] 228 211 229 d = self.degree() 212 230 result = self[d] 231 if len(x) > 1: 232 other_args = x[1:] 233 if hasattr(result, '__call__'): 234 result = result(other_args) 235 else: 236 raise TypeError, "Wrong number of arguments" 237 213 238 if d == 0: 214 239 try: … … 216 241 except AttributeError: 217 242 return result 243 218 244 i = d - 1 219 while i >= 0: 220 result = result * a + self[i] 221 i -= 1 245 if len(x) > 1: 246 while i >= 0: 247 result = result * a + self[i](other_args) 248 i -= 1 249 else: 250 while i >= 0: 251 result = result * a + self[i] 252 i -= 1 222 253 return result 223 254 -
sage/rings/power_series_ring_element.py
r4003 r4041 1184 1184 return self.__f 1185 1185 1186 def __call__(self, x):1186 def __call__(self, *xs): 1187 1187 """ 1188 1188 EXAMPLE: … … 1192 1192 2 1193 1193 """ 1194 if isinstance(xs[0], tuple): 1195 xs = xs[0] 1196 x = xs[0] 1194 1197 try: 1195 1198 if x.parent() is self.parent(): 1196 1199 if not (self.prec() is infinity): 1197 1200 x = x.add_bigoh(self.prec()*x.valuation()) 1201 xs = list(xs); xs[0] = x; xs = tuple(xs) # tuples are immutable 1198 1202 except AttributeError: 1199 1203 pass 1200 return self.__f(x )1204 return self.__f(xs) 1201 1205 1202 1206 def __setitem__(self, n, value): -
sage/rings/real_double.pyx
r3927 r4041 40 40 import sage.rings.integer 41 41 import sage.rings.rational 42 43 from sage.rings.integer cimport Integer 44 45 def is_RealDoubleField(x): 46 return bool(PY_TYPE_CHECK(x, RealDoubleField_class)) 42 47 43 48 cdef class RealDoubleField_class(Field): … … 112 117 True 113 118 """ 119 if hasattr(x, '_real_double_'): 120 return x._real_double_(self) 114 121 return RealDoubleElement(x) 115 122 … … 659 666 return long(self._value) 660 667 661 def _complex_number_(self): 662 return sage.rings.complex_field.ComplexField()(self) 663 664 def _complex_double_(self): 665 return sage.rings.complex_double.ComplexDoubleField()(self) 668 def _complex_mpfr_field_(self, CC): 669 """ 670 EXAMPLES: 671 sage: a = RDF(1/3) 672 sage: CC(a) 673 0.333333333333333 674 sage: a._complex_mpfr_field_(CC) 675 0.333333333333333 676 677 If we coerce to a higher-precision field the extra bits appear 678 random; they are actualy 0's in base 2. 679 sage: a._complex_mpfr_field_(ComplexField(100)) 680 0.33333333333333331482961625625 681 sage: a._complex_mpfr_field_(ComplexField(100)).str(2) 682 '0.01010101010101010101010101010101010101010101010101010100000000000000000000000000000000000000000000000' 683 """ 684 return CC(self._value) 685 686 def _complex_double_(self, CDF): 687 """ 688 EXAMPLES: 689 sage: CDF(RDF(1/3)) 690 0.333333333333 691 """ 692 return CDF(self._value) 666 693 667 694 def _pari_(self): … … 729 756 if self._value >= 0: 730 757 return self.square_root() 731 return self._complex_double_( ).sqrt()758 return self._complex_double_(sage.rings.complex_double.CDF).sqrt() 732 759 733 760 … … 818 845 sage: a^a 819 846 1.29711148178 847 848 Symbolic examples: 849 sage: RDF('-2.3')^(x+y^3+sin(x)) 850 -2.30000000000000^(y^3 + sin(x) + x) 851 sage: RDF('-2.3')^x 852 -2.30000000000000^x 820 853 """ 821 854 cdef RealDoubleElement x 822 if PY_TYPE_CHECK( self, RealDoubleElement):855 if PY_TYPE_CHECK(exponent, RealDoubleElement): 823 856 return self.__pow(RealDoubleElement(exponent)) 824 857 elif PY_TYPE_CHECK(exponent, int): … … 826 859 elif PY_TYPE_CHECK(exponent, Integer) and exponent < INT_MAX: 827 860 return self.__pow_int(int(exponent)) 828 elif not isinstance(exponent, RealDoubleElement): 829 x = RealDoubleElement(exponent) 830 else: 831 x = exponent 861 try: 862 x = self.parent()(exponent) 863 except TypeError: 864 try: 865 return exponent.parent()(self)**exponent 866 except AttributeError: 867 raise TypeError 832 868 return self.__pow(x) 833 869 … … 900 936 sage: r = RDF('16.0'); r.log10() 901 937 1.20411998266 902 sage: r.log() / log(10)938 sage: r.log() / RDF(log(10)) 903 939 1.20411998266 904 940 sage: r = RDF('39.9'); r.log10() … … 917 953 sage: r = RDF(16); r.logpi() 918 954 2.42204624559 919 sage: r.log() / log(pi)955 sage: r.log() / RDF(log(pi)) 920 956 2.42204624559 921 957 sage: r = RDF('39.9'); r.logpi() -
sage/rings/real_double.pyx
r4036 r4041 22 22 include '../ext/cdefs.pxi' 23 23 include '../ext/stdsage.pxi' 24 include '../ext/random.pxi' 24 25 include '../ext/interrupt.pxi' 25 26 include '../gsl/gsl.pxi' … … 31 32 cimport sage.libs.pari.gen 32 33 import sage.libs.pari.gen 33 34 from random import random35 34 36 35 from sage.misc.sage_eval import sage_eval … … 207 206 return x 208 207 209 def random_element(self, float min=-1, floatmax=1):208 def random_element(self, double min=-1, double max=1): 210 209 """ 211 210 Return a random element of this real double field in the interval [min, max]. … … 217 216 106.592535785 218 217 """ 219 return self._new_c((max-min)* random()+ min)218 return self._new_c((max-min)*(<double>random())/RAND_MAX + min) 220 219 221 220 def name(self): -
sage/rings/real_mpfr.pyx
r3927 r4041 247 247 elif self.__prec <= 53 and is_RealDoubleElement(x): 248 248 return self(x) 249 import sage.functions.constants 250 return self._coerce_try(x, [sage.functions.constants.ConstantRing]) 249 raise TypeError 250 #import sage.functions.constants 251 #return self._coerce_try(x, [sage.functions.constants.ConstantRing]) 251 252 252 253 def __cmp__(self, other): … … 1767 1768 1.0000000*I # 32-bit 1768 1769 -1.0842022e-19 + 1.0000000*I # 64-bit 1770 1771 We raise a real number to a symbolic object: 1772 sage: 1.5^x 1773 1.50000000000000^x 1774 sage: -2.3^(x+y^3+sin(x)) 1775 -2.30000000000000^(y^3 + sin(x) + x) 1769 1776 """ 1770 1777 cdef RealNumber x … … 1772 1779 return self.__pow__(float(exponent)) 1773 1780 if not PY_TYPE_CHECK(exponent, RealNumber): 1774 x = self 1775 exponent = x._parent(exponent) 1781 try: 1782 x = self 1783 exponent = x._parent(exponent) 1784 except TypeError: 1785 try: 1786 return exponent.parent()(self)**exponent 1787 except AttributeError: 1788 raise TypeError 1776 1789 return self.__pow(exponent) 1777 1790 … … 2268 2281 2269 2282 EXAMPLE: 2270 sage: r = sqrt(2 ); r2283 sage: r = sqrt(2.0); r 2271 2284 1.41421356237310 2272 2285 sage: r.algdep(5) … … 2285 2298 2286 2299 EXAMPLE: 2287 sage: r = sqrt(2 ); r2300 sage: r = sqrt(2.0); r 2288 2301 1.41421356237310 2289 2302 sage: r.algdep(5) … … 2385 2398 2386 2399 def is_RealField(x): 2387 return PY_TYPE_CHECK(x, RealField)2400 return bool(PY_TYPE_CHECK(x, RealField)) 2388 2401 2389 2402 def is_RealNumber(x): 2390 return PY_TYPE_CHECK(x, RealNumber)2403 return bool(PY_TYPE_CHECK(x, RealNumber)) 2391 2404 2392 2405 def __create__RealField_version0(prec, sci_not, rnd): -
sage/rings/real_mpfr.pyx
r4034 r4041 48 48 include '../ext/interrupt.pxi' 49 49 include "../ext/stdsage.pxi" 50 include "../ext/random.pxi" 50 51 51 52 cimport sage.rings.ring … … 412 413 0.69314718055994530941723212146 413 414 """ 414 cdef RealNumber x 415 x = self._new() 415 cdef RealNumber x = self._new() 416 416 mpfr_const_log2(x.value, self.rnd) 417 417 return x 418 419 def random_element(self, min=-1, max=1, distribution=None): 420 """ 421 Returns a uniformly distributed random number between 422 min and max (default -1 to 1). 423 424 EXAMPLES: 425 sage: RealField(100).random_element(-5, 10) 426 4.2682457657074627882421620493 427 sage: RealField(10).random_element() 428 .27 429 """ 430 cdef RealNumber x = self._new() 431 mpfr_urandomb(x.value, state) 432 if min == 0 and max == 1: 433 return x 434 else: 435 return (max-min)*x + min 418 436 419 437 def factorial(self, int n):
Note: See TracChangeset
for help on using the changeset viewer.
