Ticket #3838: RElementAccessNew.patch

File RElementAccessNew.patch, 2.3 KB (added by SimonKing, 13 years ago)

Replaces all previous patches

  • sage/interfaces/r.py

    # HG changeset patch
    # User Simon King <king@mathematik.uni-jena.de>
    # Date 1218698169 -7200
    # Node ID 108c50ddb254a072e8af416e75d2fb04389c170a
    # Parent  6417e6c84a2a6f4851d87a7702a6257624ec8f13
    Extend the features of __getitem__ for RElement
    
    diff -r 6417e6c84a2a -r 108c50ddb254 sage/interfaces/r.py
    a b  
    11591159
    11601160    def __getitem__(self, n):
    11611161        """
    1162         Return n-th element of self.
     1162        Return element(s) of self.
    11631163       
    11641164        INPUT:
    1165             n -- an integer
     1165            n -- an integer, a tuple, a string that makes sense to R, or an RElement
    11661166        OUTPUT:
    11671167            RElement
    11681168           
     
    11781178            [1] 10.4  3.1  6.4 21.7
    11791179            sage: x[-3]
    11801180            [1] 10.4  5.6  6.4 21.7
    1181             sage: x[4]
    1182             [1] 6.4
     1181            sage: x['c(2,3)']
     1182            [1]  5.6 3.1
     1183            sage: key = r.c(2,3)
     1184            sage: x[key]
     1185            [1]  5.6 3.1
     1186            sage: m = r.array('1:3',r.c(2,4,2))
     1187            sage: m
     1188            , , 1
     1189                 [,1] [,2] [,3] [,4]
     1190            [1,]    1    3    2    1
     1191            [2,]    2    1    3    2
     1192            , , 2
     1193                 [,1] [,2] [,3] [,4]
     1194            [1,]    3    2    1    3
     1195            [2,]    1    3    2    1
     1196            sage: m[1,2,2]
     1197            [1] 2
     1198            sage: m[1,r.c(1,2),1]
     1199            [1] 1 3
    11831200        """
    11841201        P = self._check_valid()
    11851202        if isinstance(n, basestring):
    11861203            n = n.replace('self', self._name)
    11871204            return P.new('%s[%s]'%(self._name, n))
    1188         elif not isinstance(n, tuple):
     1205        elif (hasattr(n,'parent') and n.parent() is P): # the key is RElement itself
     1206            return P.new('%s[%s]'%(self._name, n.name()))
     1207        elif not isinstance(n,tuple):
    11891208            return P.new('%s[%s]'%(self._name, n))
    11901209        else:
    1191             return P.new('%s[%s]'%(self._name, str(n)[1:-1]))
     1210            L = []
     1211            for i in xrange(len(n)):
     1212                if (hasattr(n[i],'parent') and n[i].parent() is P):
     1213                    L.append(n[i].name())
     1214                else:
     1215                    L.append(str(n[i]))
     1216            return P.new('%s[%s]'%(self._name, ','.join(L)))
    11921217
    11931218    def __nonzero__(self):
    11941219        """