def __setitem__( self, i: typing.Union[int, slice], value: typing.Union[str, typing.Sequence[typing.Optional[str]], 'StrSexpVector', 'na_values.NA_Character'] ) -> None: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) if isinstance(value, Sexp): val_cdata = value.__sexp__._cdata else: if not isinstance(value, str): value = str(value) val_cdata = _as_charsxp_cdata(value) self._R_SET_VECTOR_ELT(cdata, i_c, val_cdata) elif isinstance(i, slice): for i_c, v in zip(range(*i.indices(len(self))), value): if v is None: v_cdata = openrlib.rlib.R_NaString else: if not isinstance(value, str): v = str(v) v_cdata = _as_charsxp_cdata(v) self._R_SET_VECTOR_ELT(cdata, i_c, v_cdata) else: raise TypeError('Indices must be integers or slices, ' 'not %s' % type(i))
def __setitem__(self, i: int, value) -> None: cdata = self.__sexp__._cdata i_c = _rinterface._python_index_to_c(cdata, i) openrlib.rlib.SETCAR( openrlib.rlib.Rf_nthcdr(cdata, i_c), value.__sexp__._cdata )
def get_charsxp(self, i: int) -> CharSexp: """Get the R CharSexp objects for the index i.""" i_c = _rinterface._python_index_to_c(self.__sexp__._cdata, i) return CharSexp( _rinterface.SexpCapsule( openrlib.rlib.STRING_ELT(self.__sexp__._cdata, i_c) ) )
def __setitem__(self, i: typing.Union[int, slice], value: sexp.SupportsSEXP) -> None: if isinstance(i, slice): raise NotImplementedError( 'Assigning slices to LangSexpVectors is not yet implemented.') cdata = self.__sexp__._cdata i_c = _rinterface._python_index_to_c(cdata, i) openrlib.rlib.SETCAR(openrlib.rlib.Rf_nthcdr(cdata, i_c), value.__sexp__._cdata)
def __setitem__(self, i: Union[int, slice], value) -> None: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) openrlib.SET_REAL_ELT(cdata, i_c, float(value)) elif isinstance(i, slice): for i_c, v in zip(range(*i.indices(len(self))), value): openrlib.SET_REAL_ELT(cdata, i_c, float(v)) else: raise TypeError('Indices must be integers or slices, not %s' % type(i))
def __setitem__(self, i: typing.Union[int, slice], value) -> None: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) self._R_SET_VECTOR_ELT(cdata, i_c, value.__sexp__._cdata) elif isinstance(i, slice): for i_c, v in zip(range(*i.indices(len(self))), value): self._R_SET_VECTOR_ELT(cdata, i_c, v.__sexp__._cdata) else: raise TypeError('Indices must be integers or slices, not %s' % type(i))
def __setitem__(self, i: int, value) -> None: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) openrlib.COMPLEX(cdata)[i_c] = self._CAST_IN(value) elif isinstance(i, slice): for i_c, v in zip(range(*i.indices(len(self))), value): openrlib.COMPLEX(cdata)[i_c] = self._CAST_IN(v) else: raise TypeError('Indices must be integers or slices, not %s' % type(i))
def __getitem__(self, i: Union[int, slice]) -> Sexp: cdata = self.__sexp__._cdata rlib = openrlib.rlib if isinstance(i, int): # R-exts says that it is converted to a VECSXP when subsetted. i_c = _rinterface._python_index_to_c(cdata, i) item_cdata = rlib.Rf_nthcdr(cdata, i_c) with memorymanagement.rmemory() as rmemory: res_cdata = rmemory.protect( rlib.Rf_allocVector(RTYPES.VECSXP, 1)) rlib.SET_VECTOR_ELT( res_cdata, 0, rlib.CAR( item_cdata )) res_name = rmemory.protect( rlib.Rf_allocVector(RTYPES.STRSXP, 1)) item_cdata_name = rlib.PRINTNAME(rlib.TAG(item_cdata)) if _rinterface._TYPEOF(item_cdata_name) != rlib.NILSXP: rlib.SET_STRING_ELT( res_name, 0, item_cdata_name) rlib.Rf_namesgets(res_cdata, res_name) res = conversion._cdata_to_rinterface(res_cdata) elif isinstance(i, slice): iter_indices = range(*i.indices(len(self))) n = len(iter_indices) with memorymanagement.rmemory() as rmemory: res_cdata = rmemory.protect( rlib.Rf_allocVector( self._R_TYPE, n) ) iter_res_cdata = res_cdata prev_i = 0 lst_cdata = self.__sexp__._cdata for i in iter_indices: if i >= len(self): raise IndexError('index out of range') lst_cdata = rlib.Rf_nthcdr(lst_cdata, i - prev_i) prev_i = i rlib.SETCAR(iter_res_cdata, rlib.CAR(lst_cdata)) rlib.SET_TAG(iter_res_cdata, rlib.TAG(lst_cdata)) iter_res_cdata = rlib.CDR(iter_res_cdata) res = conversion._cdata_to_rinterface(res_cdata) else: raise TypeError( 'Indices must be integers or slices, not %s' % type(i)) return res
def __setitem__(self, i: int, value): cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) openrlib.rlib.RAW(cdata)[i_c] = _cast_in_byte(value) elif isinstance(i, slice): for i_c, v in zip(range(*i.indices(len(self))), value): if v > 255: raise ValueError('byte must be in range(0, 256)') openrlib.rlib.RAW(cdata)[i_c] = _cast_in_byte(v) else: raise TypeError('Indices must be integers or slices, not %s' % type(i))
def __getitem__(self, i: int) -> typing.Union[float, 'FloatSexpVector']: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) res = openrlib.REAL_ELT(cdata, i_c) elif isinstance(i, slice): res = type(self).from_iterable([ openrlib.REAL_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 __getitem__( self, i: Union[int, slice]) -> Union[complex, 'ComplexSexpVector']: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) _ = openrlib.COMPLEX_ELT(cdata, i_c) res = complex(_.r, _.i) elif isinstance(i, slice): res = type(self).from_iterable([ openrlib.COMPLEX_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 __getitem__(self, i: Union[int, slice]) -> 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 __getitem__(self, i: int) -> typing.Union[typing.Optional[bool], 'BoolSexpVector']: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) elt = openrlib.LOGICAL_ELT(cdata, i_c) res = na_values.NA_Logical if elt == NA_Logical else bool(elt) elif isinstance(i, slice): res = type(self).from_iterable( [openrlib.LOGICAL_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 __setitem__( self, i: typing.Union[int, slice], value: typing.Union[str, typing.Sequence[typing.Optional[str]], 'StrSexpVector', 'NACharacterType'] ) -> None: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) if isinstance(value, Sexp): val_cdata = value.__sexp__._cdata else: if not isinstance(value, str): value = str(value) val_cdata = _as_charsxp_cdata(value) self._R_SET_VECTOR_ELT( cdata, i_c, val_cdata ) elif isinstance(i, slice): value_slice: typing.Iterable if ( isinstance(value, NACharacterType) or isinstance(value, str) ): value_slice = itertools.cycle((value, )) elif len(value) == 1: value_slice = itertools.cycle(value) else: value_slice = value for i_c, _ in zip(range(*i.indices(len(self))), value_slice): if _ is None: v_cdata = openrlib.rlib.R_NaString else: if isinstance(_, str): v = _ else: v = str(_) v_cdata = _as_charsxp_cdata(v) self._R_SET_VECTOR_ELT( cdata, i_c, v_cdata ) else: raise TypeError('Indices must be integers or slices, ' 'not %s' % type(i))
def __getitem__( self, i: typing.Union[int, slice] ) -> typing.Union['StrSexpVector', str, 'na_values.NA_Character']: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) res = _rinterface._string_getitem(cdata, i_c) if res is None: res = na_values.NA_Character elif isinstance(i, slice): res = self.from_iterable([ _rinterface._string_getitem(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 __getitem__( self, i: typing.Union[int, slice]) -> typing.Union[Sexp, VT, typing.Any]: cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) res = conversion._cdata_to_rinterface( self._R_VECTOR_ELT(cdata, i_c)) elif isinstance(i, slice): res = self.from_iterable([ self._R_VECTOR_ELT( cdata, i_c, ) for i_c in range(*i.indices(len(self))) ], cast_value=lambda x: x) else: raise TypeError('Indices must be integers or slices, not %s' % type(i)) return res
def __getitem__( self, i: Union[int, slice] ) -> Union[bool, 'sexp.NALogicalType', 'BoolSexpVector']: res: Union[bool, 'sexp.NALogicalType', 'BoolSexpVector'] cdata = self.__sexp__._cdata if isinstance(i, int): i_c = _rinterface._python_index_to_c(cdata, i) elt = openrlib.LOGICAL_ELT(cdata, i_c) res = ( na_values.NA_Logical # type: ignore if elt == NA_Logical else bool(elt)) elif isinstance(i, slice): res = type(self).from_iterable([ openrlib.LOGICAL_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 __getitem__(self, i: int): cdata = self.__sexp__._cdata i_c = _rinterface._python_index_to_c(cdata, i) return openrlib.rlib.CAR(openrlib.rlib.Rf_nthcdr(cdata, i_c))