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)

Same patch, fixed commit message

  • 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  
    77:: 
    88 
    99    sage: R.<t> = PowerSeriesRing(QQ) 
    10     sage: R.random_element(6) 
     10    sage: R.random_element(6)  # random 
    1111    -4 - 1/2*t^2 - 1/95*t^3 + 1/2*t^4 - 12*t^5 + O(t^6) 
    1212 
    1313The default precision is specified at construction, but does not 
     
    1616:: 
    1717 
    1818    sage: R.<t> = PowerSeriesRing(QQ, default_prec=5) 
    19     sage: R.random_element(6) 
     19    sage: R.random_element(6)  # random 
    2020    1/2 - 1/4*t + 2/3*t^2 - 5/2*t^3 + 2/3*t^5 + O(t^6) 
    2121 
    2222:: 
     
    619619        """ 
    620620        return 1 
    621621 
    622     def random_element(self, prec, bound=None): 
     622    def random_element(self, prec=None, *args, **kwds): 
    623623        r""" 
    624624        Return a random power series. 
    625          
     625 
     626 
    626627        INPUT: 
    627628         
     629        -  ``prec`` - Integer specifying precision of output (default: 
     630           default precision of self) 
    628631         
    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 
    634634         
    635635        OUTPUT: 
    636636         
     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 
    637641         
    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 
    646645        polynomial ring. 
    647646         
    648647        EXAMPLES:: 
    649648         
    650649            sage: R.<t> = PowerSeriesRing(QQ) 
    651             sage: R.random_element(5) 
     650            sage: R.random_element(5)  # random 
    652651            -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 
    655682        """ 
    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) 
    657686 
    658687    def __cmp__(self, other): 
    659688        """