diff --git a/src/sage/modules/free_module_element.pyx b/src/sage/modules/free_module_element.pyx index 5bd5b408417..ce6f68b7e0c 100644 --- a/src/sage/modules/free_module_element.pyx +++ b/src/sage/modules/free_module_element.pyx @@ -1920,15 +1920,20 @@ cdef class FreeModuleElement(Vector): # abstract base class def get(self, i): """ - Like ``__getitem__`` but without bounds checking: - `i` must satisfy ``0 <= i < self.degree``. + Return the `i`-th entry of ``self``. + + This is equivalent to ``self[i]``. EXAMPLES:: sage: vector(SR, [1/2,2/5,0]).get(0) # needs sage.symbolic 1/2 + sage: zero_vector(3).get(5) + Traceback (most recent call last): + ... + IndexError: vector index out of range """ - return self.get_unsafe(i) + return self[i] def __setitem__(self, i, value): """ @@ -1982,19 +1987,23 @@ cdef class FreeModuleElement(Vector): # abstract base class def set(self, i, value): """ - Like ``__setitem__`` but without type or bounds checking: - `i` must satisfy ``0 <= i < self.degree`` and ``value`` must be - an element of the coordinate ring. + Set the `i`-th entry of ``self`` to ``value``. + + This is equivalent to ``self[i] = value``. EXAMPLES:: - sage: v = vector(SR, [1/2,2/5,0]); v # needs sage.symbolic + sage: # needs sage.symbolic + sage: v = vector(SR, [1/2,2/5,0]); v (1/2, 2/5, 0) - sage: v.set(2, pi); v # needs sage.symbolic + sage: v.set(2, pi); v (1/2, 2/5, pi) + sage: v.set(5, 1) + Traceback (most recent call last): + ... + IndexError: vector index out of range """ - assert value.parent() is self.coordinate_ring() - self.set_unsafe(i, value) + self[i] = value def __invert__(self): """ @@ -4667,12 +4676,13 @@ cdef class FreeModuleElement_generic_dense(FreeModuleElement): @cython.boundscheck(False) @cython.wraparound(False) - cdef get_unsafe(self, Py_ssize_t i): + cpdef get_unsafe(self, Py_ssize_t i): """ EXAMPLES:: - sage: v = vector(RR, [-1,0,2/3,pi]) # needs sage.symbolic - sage: v.get(3) # needs sage.symbolic + sage: # needs sage.symbolic + sage: v = vector(RR, [-1,0,2/3,pi]) + sage: v.get_unsafe(3) 3.14159265358979 :: @@ -4704,13 +4714,15 @@ cdef class FreeModuleElement_generic_dense(FreeModuleElement): @cython.boundscheck(False) @cython.wraparound(False) - cdef int set_unsafe(self, Py_ssize_t i, value) except -1: + cpdef int set_unsafe(self, Py_ssize_t i, value) except -1: """ EXAMPLES:: - sage: v = vector(RR, [-1, 0, 2/3, pi]) # needs sage.symbolic - sage: v.set(3, RR(1)) # needs sage.symbolic - sage: v # needs sage.symbolic + sage: # needs sage.symbolic + sage: v = vector(RR, [-1, 0, 2/3, pi]) + sage: v.set_unsafe(3, RR(1)) + 0 + sage: v (-1.00000000000000, 0.000000000000000, 0.666666666666667, 1.00000000000000) """ self._entries[i] = value @@ -5298,27 +5310,27 @@ cdef class FreeModuleElement_generic_sparse(FreeModuleElement): raise IndexError("vector index out of range") return self.get_unsafe(n) - cdef get_unsafe(self, Py_ssize_t i): + cpdef get_unsafe(self, Py_ssize_t i): """ EXAMPLES:: - sage: v = vector([-1,0,2/3,pi], sparse=True) # needs sage.symbolic - sage: v.get(1) # needs sage.symbolic + sage: # needs sage.symbolic + sage: v = vector([-1,0,2/3,pi], sparse=True) + sage: v.get_unsafe(1) 0 - sage: v.get(2) # needs sage.symbolic + sage: v.get_unsafe(2) 2/3 - - For this class, 0 is returned if the access is out of bounds:: - - sage: v.get(10) # needs sage.symbolic - 0 + sage: v.get(10) + Traceback (most recent call last): + ... + IndexError: vector index out of range """ try: return self._entries[i] except KeyError: return self.coordinate_ring().zero() - cdef int set_unsafe(self, Py_ssize_t i, value) except -1: + cpdef int set_unsafe(self, Py_ssize_t i, value) except -1: """ EXAMPLES:: @@ -5336,26 +5348,26 @@ cdef class FreeModuleElement_generic_sparse(FreeModuleElement): ... TypeError: self must be a numeric expression - :: + TESTS:: sage: # needs sage.symbolic sage: v = vector([1,2/3,pi], sparse=True) - sage: v.set(1, pi^3) + sage: v.set_unsafe(1, pi^3) + 0 sage: v (1, pi^3, pi) - sage: v.set(2, SR(0)) + sage: v.set_unsafe(2, SR(0)) + 0 sage: v (1, pi^3, 0) This assignment is illegal:: - sage: v.set(10, pi) # needs sage.symbolic - - This lack of bounds checking causes trouble later:: - - sage: v # needs sage.symbolic - ) failed: - IndexError: list assignment index out of range> + sage: # needs sage.symbolic + sage: v.set(10, pi) + Traceback (most recent call last): + ... + IndexError: vector index out of range """ if value: self._entries[i] = value