Exemplo n.º 1
0
    def testNew(self):
        sexp = rinterface.baseenv.get("letters")
        sexp_new = rinterface.Sexp(sexp)

        idem = rinterface.baseenv.get("identical")
        self.assertTrue(idem(sexp, sexp_new)[0])

        sexp_new2 = rinterface.Sexp(sexp)
        self.assertTrue(idem(sexp, sexp_new2)[0])
        del (sexp)
        self.assertTrue(idem(sexp_new, sexp_new2)[0])
Exemplo n.º 2
0
def test_unserialize():
    x = rinterface.IntSexpVector([1, 2, 3])
    x_serialized = x.__getstate__()
    x_again = rinterface.Sexp(rinterface.unserialize(x_serialized))
    identical = rinterface.baseenv['identical']
    assert not x.rsame(x_again)
    assert identical(x, x_again)[0]
Exemplo n.º 3
0
def default_py2ri(o):
    """ Convert arbitrary Python object to :class:`rpy2.rinterface.Sexp` to objects,
    creating an R object with the content of the Python object in the process
    (wich means data copying).

    :param o: object
    :rtype: :class:`rpy2.rinterface.Sexp` (and subclasses)

    """
    if isinstance(o, RObject):
        res = rinterface.Sexp(o)
    if isinstance(o, Sexp):
        res = o
    elif isinstance(o, array.array):
        if o.typecode in ('h', 'H', 'i', 'I'):
            res = rinterface.SexpVector(o, rinterface.INTSXP)
        elif o.typecode in ('f', 'd'):
            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) or isinstance(o, long):
        # special case for NA_Logical
        if o is rinterface.NA_Logical:
            res = rinterface.SexpVector([
                o,
            ], rinterface.LGLSXP)
        else:
            res = rinterface.SexpVector([
                o,
            ], rinterface.INTSXP)
    elif isinstance(o, float):
        res = rinterface.SexpVector([
            o,
        ], rinterface.REALSXP)
    elif isinstance(o, str):
        res = rinterface.SexpVector([
            o,
        ], rinterface.STRSXP)
    elif isinstance(o, unicode):
        res = rinterface.SexpVector([
            o,
        ], rinterface.STRSXP)
    elif isinstance(o, list):
        res = r.list(*[conversion.ri2py(conversion.py2ri(x)) for x in o])
    elif isinstance(o, complex):
        res = rinterface.SexpVector([
            o,
        ], rinterface.CPLXSXP)
    else:
        raise (ValueError(
            "Nothing can be done for the type %s at the moment." % (type(o))))
    return res
Exemplo n.º 4
0
    def testNew(self):
        sexp = rinterface.globalenv
        sexp_new = rinterface.SexpEnvironment(sexp)

        idem = rinterface.globalenv.get("identical")
        self.assertTrue(idem(sexp, sexp_new)[0])

        sexp_new2 = rinterface.Sexp(sexp)
        self.assertTrue(idem(sexp, sexp_new2)[0])
        del (sexp)
        self.assertTrue(idem(sexp_new, sexp_new2)[0])

        self.assertRaises(ValueError, rinterface.SexpEnvironment, '2')
Exemplo n.º 5
0
def test_new():
    sexp = rinterface.globalenv
    sexp_new = rinterface.SexpEnvironment(sexp)

    assert sexp.rsame(sexp_new)

    sexp_new2 = rinterface.Sexp(sexp)
    assert sexp.rsame(sexp_new2)

    del (sexp)

    assert sexp_new.rsame(sexp_new2)

    with pytest.raises(ValueError):
        rinterface.SexpEnvironment('2')
Exemplo n.º 6
0
def test_invalid_init():
    with pytest.raises(ValueError):
        rinterface.Sexp('a')
Exemplo n.º 7
0
def test_init_from_existing():
    sexp = rinterface.baseenv.find('letters')
    sexp_new = rinterface.Sexp(sexp)
    assert sexp_new._sexpobject is sexp._sexpobject
Exemplo n.º 8
0
def _py2rpy_robject(obj):
    return rinterface.Sexp(obj)
Exemplo n.º 9
0
def _(obj):
    return rinterface.Sexp(obj)