def __getitem__(self, i: int) -> typing.Union[int, 'IntSexpVector']: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) res = openrlib.INTEGER_ELT(cdata, i_c) if res == NA_Integer: res = NA_Integer elif isinstance(i, slice): res = type(self).from_iterable([ openrlib.INTEGER_ELT(cdata, i_c) for i_c in range(*i.indices(len(self))) ]) else: raise TypeError('Indices must be integers or slices, not %s' % type(i)) return res
def getshape(cdata, rk: typing.Optional[int] = None) -> typing.Tuple[int, ...]: if rk is None: rk = getrank(cdata) dim_cdata = openrlib.rlib.Rf_getAttrib(cdata, openrlib.rlib.R_DimSymbol) shape = [ None, ] * rk if dim_cdata == openrlib.rlib.R_NilValue: shape[0] = openrlib.rlib.Rf_length(cdata) else: for i in range(rk): shape[i] = openrlib.INTEGER_ELT(dim_cdata, i) return tuple(shape)
def getshape(cdata, rk: typing.Optional[int] = None) -> typing.Tuple[int, ...]: if rk is None: rk = getrank(cdata) dim_cdata = openrlib.rlib.Rf_getAttrib(cdata, openrlib.rlib.R_DimSymbol) shape: typing.Tuple[int, ...] if dim_cdata == openrlib.rlib.R_NilValue: shape = (openrlib.rlib.Rf_length(cdata), ) else: _ = [] for i in range(rk): _.append(openrlib.INTEGER_ELT(dim_cdata, i)) shape = tuple(_) return shape
def test_get_integer_elt_fallback(): rpy2.rinterface.initr() v = rpy2.rinterface.IntSexpVector([1, 2, 3]) assert (openrlib.INTEGER_ELT(v.__sexp__._cdata, 1) \ == \ openrlib._get_integer_elt_fallback(v.__sexp__._cdata, 1))