Ticket #11751: trac_11751_free_module_generic_pid-review.patch

File trac_11751_free_module_generic_pid-review.patch, 5.9 KB (added by mderickx, 10 years ago)

fixes the failing doctests

  • sage/modules/free_module.py

    # HG changeset patch
    # User Julian Rueth <julian.rueth@gmail.com>
    # Date 1315685953 -7200
    # Node ID 2eee091cd7531e7cb4d3f1843bdd4ffb714bfeb3
    # Parent  7b6bc20199a725f5df65cdff8f5d3619186f31d2
    Trac 11751: cast coefficients to the appropriate ring
    
    diff --git a/sage/modules/free_module.py b/sage/modules/free_module.py
    a b  
    829829        if isinstance(x, (int, long, sage.rings.integer.Integer)) and x==0:
    830830            return self.zero_vector()
    831831        elif isinstance(x, free_module_element.FreeModuleElement):
    832             if x.parent() == self:
     832            if x.parent() is self:
    833833                if copy:
    834834                    return x.__copy__()
    835835                else:
     
    51145114        if len(B) == 0:
    51155115            return 1
    51165116        d = B[0].denominator()
     5117        from sage.rings.arith import lcm
    51175118        for x in B[1:]:
    5118             d = d.lcm(x.denominator())
     5119            d = lcm(d,x.denominator())
    51195120        return d
    51205121   
    51215122    def _repr_(self):
  • sage/modules/free_module_element.pyx

    diff --git a/sage/modules/free_module_element.pyx b/sage/modules/free_module_element.pyx
    a b  
    33333333
    33343334            sage: type(vector([-1,0,3,pi]))   # indirect doctest
    33353335            <class 'sage.modules.vector_symbolic_dense.Vector_symbolic_dense'>
     3336
     3337        TESTS::
     3338       
     3339        Check that #11751 is fixed::
     3340
     3341            sage: K.<x> = QQ[]
     3342            sage: M = K^1
     3343            sage: N = M.span([[1/x]]); N
     3344            Free module of degree 1 and rank 1 over Univariate Polynomial Ring in x over Rational Field
     3345            Echelon basis matrix:
     3346            [1/x]
     3347            sage: N([1/x]) # this used to fail prior to #11751
     3348            (1/x)
     3349            sage: N([1/x^2])
     3350            Traceback (most recent call last):
     3351            ...
     3352            TypeError: element (= [1/x^2]) is not in free module
     3353       
     3354       
     3355            sage: L=K^2
     3356            sage: R=L.span([[x,0],[0,1/x]], check=False, already_echelonized=True)
     3357            sage: R.basis()[0][0].parent()
     3358            Fraction Field of Univariate Polynomial Ring in x over Rational Field
     3359            sage: R=L.span([[x,x^2]])
     3360            sage: R.basis()[0][0].parent()
     3361            Univariate Polynomial Ring in x over Rational Field
     3362       
    33363363        """
    33373364        FreeModuleElement.__init__(self, parent)
    33383365        R = self.parent().base_ring()
     
    33403367            entries = [R(0)]*self.degree()
    33413368        else:
    33423369            if not isinstance(entries, (list, tuple)):
    3343                
    33443370                raise TypeError, "entries (=%s) must be a list"%(entries, )
    33453371           
    33463372            if len(entries) != self.degree():
    33473373                raise TypeError, "entries must be a list of length %s"%\
    33483374                            self.degree()
    3349             if coerce:
    3350                 try:
    3351                     entries = [R(x) for x in entries]
    3352                 except TypeError:
    3353                     raise TypeError, "Unable to coerce entries (=%s) to %s"%(entries, R)
     3375            if coerce:
     3376                if len(entries) != 0:
     3377                    coefficient_ring = parent.basis()[0][0].parent()
     3378                    try:
     3379                        entries = [coefficient_ring(x) for x in entries]
     3380                    except TypeError:
     3381                        raise TypeError, "Unable to coerce entries (=%s) to coefficients in %s"%(entries, coefficient_ring)
    33543382            elif copy:
    33553383                # Make a copy
    33563384                entries = list(entries)
     
    37793807            (0, 5/4, 0)
    37803808            sage: v.is_sparse()
    37813809            True
     3810       
     3811           
     3812        TESTS::
     3813
     3814        Test that 11751 is fixed
     3815           
     3816            sage: K.<x> = QQ[]
     3817            sage: M = FreeModule(K, 1, sparse=True)
     3818            sage: N = M.span([{0:1/x}]); N
     3819            Sparse free module of degree 1 and rank 1 over Univariate Polynomial Ring in x over Rational Field
     3820            Echelon basis matrix:
     3821            [1/x]
     3822            sage: N({0:1/x}) # this used to fail prior to #11751
     3823            (1/x)
     3824            sage: N({0:1/x^2})
     3825            Traceback (most recent call last):
     3826            ...
     3827            TypeError: element (= {0: 1/x^2}) is not in free module
     3828       
     3829       
     3830            sage: L = FreeModule(K, 2, sparse=True)
     3831            sage: R = L.span([{0:x, 1:0}, {0:0, 1:1/x}], check=False, already_echelonized=True)
     3832            sage: R.basis()[0][0].parent()
     3833            Fraction Field of Univariate Polynomial Ring in x over Rational Field
     3834            sage: R = L.span([{0:x, 1:x^2}])
     3835            sage: R.basis()[0][0].parent()
     3836            Univariate Polynomial Ring in x over Rational Field
     3837       
    37823838        """
    37833839        #WARNING: In creation, we do not check that the i pairs satisfy
    37843840        #     0 <= i < degree.
     
    37983854                copy = False
    37993855            if not isinstance(entries, dict):
    38003856                raise TypeError, "entries must be a dict"
    3801             if coerce:
    3802                 try:
    3803                     for k, x in entries.iteritems():
    3804                         entries[k] = R(x)
    3805                 except TypeError:
    3806                     raise TypeError, "Unable to coerce values of entries dict (=%s) to %s"%(entries, R)
    3807             elif copy:
     3857            if copy:
    38083858                # Make a copy
    38093859                entries = dict(entries)
     3860            if coerce:
     3861                if len(entries) != 0:
     3862                    coefficient_ring = parent.basis()[0][0].parent()
     3863                    try:
     3864                        for k, x in entries.iteritems():
     3865                            entries[k] = coefficient_ring(x)
     3866                    except TypeError:
     3867                        raise TypeError, "Unable to coerce value (=%s) of entries dict (=%s) to %s"%(x, entries, coefficient_ring)
    38103868        self._entries = entries
    38113869
    38123870    cpdef ModuleElement _add_(left, ModuleElement right):