Ticket #9481: trac_9481_ps_random_element.2.patch
| File trac_9481_ps_random_element.2.patch, 4.3 KB (added by jdemeyer, 2 years ago) |
|---|
-
sage/rings/power_series_ring.py
# HG changeset patch # User Niles Johnson <nilesj@gmail.com> # Date 1280679891 14400 # Node ID 657c360f5f757f3b23c14346aa4d3ad1c5c385d9 # Parent 67b231396bed3566f1b83019ffffc2a26dd6f924 #9481 patch emulates behavior of random_element for polynomial rings diff -r 67b231396bed -r 657c360f5f75 sage/rings/power_series_ring.py
a b 7 7 :: 8 8 9 9 sage: R.<t> = PowerSeriesRing(QQ) 10 sage: R.random_element(6) 10 sage: R.random_element(6) # random 11 11 -4 - 1/2*t^2 - 1/95*t^3 + 1/2*t^4 - 12*t^5 + O(t^6) 12 12 13 13 The default precision is specified at construction, but does not … … 16 16 :: 17 17 18 18 sage: R.<t> = PowerSeriesRing(QQ, default_prec=5) 19 sage: R.random_element(6) 19 sage: R.random_element(6) # random 20 20 1/2 - 1/4*t + 2/3*t^2 - 5/2*t^3 + 2/3*t^5 + O(t^6) 21 21 22 22 :: … … 619 619 """ 620 620 return 1 621 621 622 def random_element(self, prec , bound=None):622 def random_element(self, prec=None, *args, **kwds): 623 623 r""" 624 624 Return a random power series. 625 625 626 626 627 INPUT: 627 628 629 - ``prec`` - Integer specifying precision of output (default: 630 default precision of self) 628 631 629 - ``prec`` - an integer 630 631 - ``bound`` - an integer (default: None, which tries 632 to spread choice across ring, if implemented) 633 632 - ``*args, **kwds`` - Passed on to the ``random_element`` method for 633 the base ring 634 634 635 635 OUTPUT: 636 636 637 - Power series with precision ``prec`` whose coefficients are 638 random elements from the base ring, randomized subject to the 639 arguments ``*args`` and ``**kwds`` 640 637 641 638 - ``power series`` - a power series such that the 639 coefficient of `x^i`, for `i` up to 640 ``degree``, are coercions to the base ring of random 641 integers between -``bound`` and 642 ``bound``. 643 644 645 IMPLEMENTATION: Call the random_element method on the underlying 642 IMPLEMENTATION:: 643 644 Call the ``random_element`` method on the underlying 646 645 polynomial ring. 647 646 648 647 EXAMPLES:: 649 648 650 649 sage: R.<t> = PowerSeriesRing(QQ) 651 sage: R.random_element(5) 650 sage: R.random_element(5) # random 652 651 -4 - 1/2*t^2 - 1/95*t^3 + 1/2*t^4 + O(t^5) 653 sage: R.random_element(5,20) 654 1/15 + 19/17*t + 10/3*t^2 + 5/2*t^3 + 1/2*t^4 + O(t^5) 652 sage: R.random_element(10) # random 653 -1/2 + 2*t - 2/7*t^2 - 25*t^3 - t^4 + 2*t^5 - 4*t^7 - 1/3*t^8 - t^9 + O(t^10) 654 655 If given no argument, random_element uses default precision of self:: 656 657 sage: T = PowerSeriesRing(ZZ,'t') 658 sage: T.default_prec() 659 20 660 sage: T.random_element() # random 661 4 + 2*t - t^2 - t^3 + 2*t^4 + t^5 + t^6 - 2*t^7 - t^8 - t^9 + t^11 - 6*t^12 + 2*t^14 + 2*t^16 - t^17 - 3*t^18 + O(t^20) 662 sage: S = PowerSeriesRing(ZZ,'t', default_prec=4) 663 sage: S.random_element() # random 664 2 - t - 5*t^2 + t^3 + O(t^4) 665 666 667 Further arguments are passed to the underlying base ring (ticket #9481):: 668 669 sage: SZ = PowerSeriesRing(ZZ,'v') 670 sage: SQ = PowerSeriesRing(QQ,'v') 671 sage: SR = PowerSeriesRing(RR,'v') 672 673 sage: SZ.random_element(x=4, y=6) # random 674 4 + 5*v + 5*v^2 + 5*v^3 + 4*v^4 + 5*v^5 + 5*v^6 + 5*v^7 + 4*v^8 + 5*v^9 + 4*v^10 + 4*v^11 + 5*v^12 + 5*v^13 + 5*v^14 + 5*v^15 + 5*v^16 + 5*v^17 + 4*v^18 + 5*v^19 + O(v^20) 675 sage: SZ.random_element(3, x=4, y=6) # random 676 5 + 4*v + 5*v^2 + O(v^3) 677 sage: SQ.random_element(3, num_bound=3, den_bound=100) # random 678 1/87 - 3/70*v - 3/44*v^2 + O(v^3) 679 sage: SR.random_element(3, max=10, min=-10) # random 680 2.85948321262904 - 9.73071330911226*v - 6.60414378519265*v^2 + O(v^3) 681 655 682 """ 656 return self(self.__poly_ring.random_element(prec, bound), prec) 683 if prec is None: 684 prec = self.default_prec() 685 return self(self.__poly_ring.random_element(prec-1, *args, **kwds), prec) 657 686 658 687 def __cmp__(self, other): 659 688 """
