Revision: 450
          http://rpy.svn.sourceforge.net/rpy/?rev=450&view=rev
Author:   lgautier
Date:     2008-03-21 04:21:35 -0700 (Fri, 21 Mar 2008)

Log Message:
-----------
- Added len method for Rvector
- Fixed incorrect handling of boolean Python type (get tricked by their 
int/bool 
nature)
- Added unit tests to catch the above
- Added unit tests for the method subset 

Modified Paths:
--------------
    branches/rpy_nextgen/rpy/robjects/__init__.py
    branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py

Modified: branches/rpy_nextgen/rpy/robjects/__init__.py
===================================================================
--- branches/rpy_nextgen/rpy/robjects/__init__.py       2008-03-21 09:47:18 UTC 
(rev 449)
+++ branches/rpy_nextgen/rpy/robjects/__init__.py       2008-03-21 11:21:35 UTC 
(rev 450)
@@ -42,12 +42,12 @@
             res = rinterface.SexpVector(o, rinterface.REALSXP)
         else:
             raise(ValueError("Nothing can be done for this array type at the 
moment."))
+    elif isinstance(o, bool):
+        res = rinterface.SexpVector([o, ], rinterface.LGLSXP)
     elif isinstance(o, int):
         res = rinterface.SexpVector([o, ], rinterface.INTSXP)
     elif isinstance(o, float):
         res = rinterface.SexpVector([o, ], rinterface.REALSXP)
-    elif isinstance(o, bool):
-        res = rinterface.SexpVector([o, ], rinterface.LGLSXP)
     elif isinstance(o, str):
         res = rinterface.SexpVector([o, ], rinterface.STRSXP)
     elif isinstance(o, list):
@@ -146,9 +146,9 @@
         res = r.get("&")(self, x)
         return res
 
+    def __len__(self):
+        return len(self._sexp)
 
-
-
 class Rfunction(Robject):
     """ An R function (aka "closure").
     

Modified: branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py
===================================================================
--- branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py     2008-03-21 
09:47:18 UTC (rev 449)
+++ branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py     2008-03-21 
11:21:35 UTC (rev 450)
@@ -10,7 +10,7 @@
         self.assertTrue(isinstance(letters_R, robjects.Rvector))
         letters = (('a', 0), ('b', 1), ('c', 2), ('x', 23), ('y', 24), ('z', 
25))
         for l, i in letters:
-            self.assertTrue(letters_R[i] == l)
+            self.assertTrue(letters_R[i]._sexp[0] == l)
         
         as_list_R = robjects.r["as.list"]
         seq_R = robjects.r["seq"]
@@ -20,18 +20,18 @@
         myList = as_list_R(mySeq)
         
         for i, li in enumerate(myList):
-            self.assertEquals(i, myList[i][0])
+            self.assertEquals(i, myList[i][0]._sexp[0])
 
     def testOperators(self):
         seq_R = robjects.r["seq"]
         mySeq = seq_R(0, 10)
         mySeqAdd = mySeq + 2
         for i, li in enumerate(mySeq):
-            self.assertEquals(i + 2, mySeqAdd[i])
+            self.assertEquals(i + 2, mySeqAdd[i]._sexp[0])
 
         mySeqAdd = mySeq + mySeq
         for i, li in enumerate(mySeq):
-            self.assertEquals(mySeq[i] * 2, mySeqAdd[i])
+            self.assertEquals(mySeq[i]._sexp[0] * 2, mySeqAdd[i]._sexp[0])
 
         
     def testSubset(self):
@@ -41,15 +41,34 @@
         myIndex = robjects.Rvector(array.array('i', range(1, 11, 2)))
 
         mySubset = mySeq.subset(myIndex)
+        #import pdb; pdb.set_trace()
         for i, si in enumerate(myIndex):
-            self.assertEquals(mySeq[si-1], mySubset[i])
+            self.assertEquals(mySeq[si._sexp[0]-1]._sexp[0], 
mySubset[i]._sexp[0])
 
+        # recycling rule
+        v = robjects.Rvector(array.array('i', range(1, 23)))
+        m = robjects.r.matrix(v, ncol = 2)
+        col = m.subset(True, 1)
+        #import pdb; pdb.set_trace()
+        self.assertEquals(11, len(col))
+        
+        
+
     def testMapperR2Python(self):
         sexp = rinterface.globalEnv.get("letters")
-        self.assertTrue(isinstance(robjects.defaultRobjects2PyMapper(sexp), 
robjects.Rvector))
-        
+        ob = robjects.defaultRobjects2PyMapper(sexp)
+        self.assertTrue(isinstance(ob, 
+                                   robjects.Rvector))
+
+        sexp = rinterface.globalEnv.get("T")
+        ob = robjects.defaultRobjects2PyMapper(sexp)
+        self.assertTrue(isinstance(ob, 
+                                   robjects.Rvector))
+
         sexp = rinterface.globalEnv.get("plot")
-        self.assertTrue(isinstance(robjects.defaultRobjects2PyMapper(sexp), 
robjects.Rfunction))
+        ob = robjects.defaultRobjects2PyMapper(sexp)
+        self.assertTrue(isinstance(ob, 
+                                   robjects.Rfunction))
 
         sexp = rinterface.globalEnv.get(".GlobalEnv")
         self.assertTrue(isinstance(robjects.defaultRobjects2PyMapper(sexp), 
robjects.Renvironment))
@@ -58,8 +77,14 @@
 
     def testMapperPy2R(self):
         py = 1
-        self.assertTrue(isinstance(robjects.defaultPy2RobjectsMapper(py), 
robjects.Rvector))
+        rob = robjects.defaultPy2RobjectsMapper(py)
+        self.assertTrue(isinstance(rob, robjects.Rvector))
         
+        py = True
+        rob = robjects.defaultPy2RobjectsMapper(py)
+        self.assertTrue(isinstance(rob, robjects.Rvector))
+        self.assertEquals(rinterface.LGLSXP, rob._sexp.typeof())
+
         #FIXME: more tests
 
 if __name__ == '__main__':


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
rpy-list mailing list
rpy-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rpy-list

Reply via email to