Exemple #1
0
def _post_initr_setup() -> None:

    emptyenv.__sexp__ = _rinterface.SexpCapsule(openrlib.rlib.R_EmptyEnv)
    baseenv.__sexp__ = _rinterface.SexpCapsule(openrlib.rlib.R_BaseEnv)
    globalenv.__sexp__ = _rinterface.SexpCapsule(openrlib.rlib.R_GlobalEnv)

    global NULL
    NULL = NULLType()

    MissingArg._sexpobject = _rinterface.UnmanagedSexpCapsule(
        openrlib.rlib.R_MissingArg)

    global NA_Character
    na_values.NA_Character = sexp.NACharacterType()
    NA_Character = na_values.NA_Character

    global NA_Integer
    na_values.NA_Integer = sexp.NAIntegerType(openrlib.rlib.R_NaInt)
    NA_Integer = na_values.NA_Integer

    global NA_Logical, NA
    na_values.NA_Logical = sexp.NALogicalType(openrlib.rlib.R_NaInt)
    NA_Logical = na_values.NA_Logical
    NA = NA_Logical

    global NA_Real
    na_values.NA_Real = sexp.NARealType(openrlib.rlib.R_NaReal)
    NA_Real = na_values.NA_Real

    global NA_Complex
    na_values.NA_Complex = sexp.NAComplexType(
        _rinterface.ffi.new('Rcomplex *',
                            [openrlib.rlib.R_NaReal, openrlib.rlib.R_NaReal]))
    NA_Complex = na_values.NA_Complex
Exemple #2
0
def _post_initr_setup() -> None:

    emptyenv.__sexp__ = _rinterface.SexpCapsule(openrlib.rlib.R_EmptyEnv)
    baseenv.__sexp__ = _rinterface.SexpCapsule(openrlib.rlib.R_BaseEnv)
    globalenv.__sexp__ = _rinterface.SexpCapsule(openrlib.rlib.R_GlobalEnv)

    global NULL
    NULL = NULLType()

    MissingArg._sexpobject = _rinterface.UnmanagedSexpCapsule(
        openrlib.rlib.R_MissingArg)

    global NA_Character
    na_values.NA_Character = sexp.NACharacterType()
    NA_Character = na_values.NA_Character

    global NA_Integer
    na_values.NA_Integer = sexp.NAIntegerType(openrlib.rlib.R_NaInt)
    NA_Integer = na_values.NA_Integer

    global NA_Logical, NA
    na_values.NA_Logical = sexp.NALogicalType(openrlib.rlib.R_NaInt)
    NA_Logical = na_values.NA_Logical
    NA = NA_Logical

    global NA_Real
    na_values.NA_Real = sexp.NARealType(openrlib.rlib.R_NaReal)
    NA_Real = na_values.NA_Real

    global NA_Complex
    na_values.NA_Complex = sexp.NAComplexType(
        _rinterface.ffi.new('Rcomplex *',
                            [openrlib.rlib.R_NaReal, openrlib.rlib.R_NaReal]))
    NA_Complex = na_values.NA_Complex

    warn_about_thread = False
    if threading.current_thread() is threading.main_thread():
        try:
            signal.signal(signal.SIGINT, _sigint_handler)
        except ValueError as ve:
            if str(ve) == 'signal only works in main thread':
                warn_about_thread = True
            else:
                raise ve
    else:
        warn_about_thread = True
    if warn_about_thread:
        warnings.warn(
            textwrap.dedent("""R is not initialized by the main thread.
                Its taking over SIGINT cannot be reversed here, and as a
                consequence the embedded R cannot be interrupted with Ctrl-C.
                Consider (re)setting the signal handler of your choice from
                the main thread."""))

    _update_R_ENC_PY()
Exemple #3
0
def _post_initr_setup():

    embedded.emptyenv = SexpEnvironment(
        _rinterface.SexpCapsule(openrlib.rlib.R_EmptyEnv)
    )
    global emptyenv
    emptyenv = embedded.emptyenv

    embedded.baseenv = SexpEnvironment(
        _rinterface.SexpCapsule(openrlib.rlib.R_BaseEnv)
    )
    global baseenv
    baseenv = embedded.baseenv

    embedded.globalenv = SexpEnvironment(
        _rinterface.SexpCapsule(openrlib.rlib.R_GlobalEnv)
    )
    global globalenv
    globalenv = embedded.globalenv

    global NULL
    NULL = NULLType()

    global MissingArg
    MissingArg = _MissingArgType()

    global NA_Character
    na_values.NA_Character = na_values.NACharacterType()
    NA_Character = na_values.NA_Character

    global NA_Integer
    na_values.NA_Integer = na_values.NAIntegerType(openrlib.rlib.R_NaInt)
    NA_Integer = na_values.NA_Integer

    global NA_Logical, NA
    na_values.NA_Logical = na_values.NALogicalType(openrlib.rlib.R_NaInt)
    NA_Logical = na_values.NA_Logical
    NA = NA_Logical

    global NA_Real
    na_values.NA_Real = na_values.NARealType(openrlib.rlib.R_NaReal)
    NA_Real = na_values.NA_Real

    global NA_Complex
    na_values.NA_Complex = na_values.NAComplexType(
        _rinterface.ffi.new(
            'Rcomplex *',
            [openrlib.rlib.R_NaReal, openrlib.rlib.R_NaReal])
    )
    NA_Complex = na_values.NA_Complex
Exemple #4
0
 def __init__(self):
     embedded.assert_isready()
     super().__init__(
         CharSexp(
             _rinterface.SexpCapsule(openrlib.rlib.R_NaString)
         )
     )
Exemple #5
0
def _cdata_to_rinterface(cdata):
    scaps = _rinterface.SexpCapsule(cdata)
    t = cdata.sxpinfo.type
    if t in _R_RPY2_MAP:
        cls = _R_RPY2_MAP[t]
    else:
        cls = _R_RPY2_DEFAULT_MAP
    return cls(scaps)
Exemple #6
0
 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)
         )
     )
Exemple #7
0
def unserialize(state):
    n = len(state)
    with memorymanagement.rmemory() as rmemory:
        cdata = rmemory.protect(
            openrlib.rlib.Rf_allocVector(openrlib.rlib.RAWSXP, n))
        _rinterface.ffi.memmove(openrlib.rlib.RAW(cdata), state, n)
        ser = rmemory.protect(
            _rinterface.unserialize(cdata, globalenv.__sexp__._cdata))
        res = _rinterface.SexpCapsule(ser)
    return res
Exemple #8
0
 def __init__(self, obj):
     if isinstance(obj, Sexp) or isinstance(obj, _rinterface.SexpCapsule):
         super().__init__(obj)
     elif isinstance(obj, str):
         name_cdata = _rinterface.ffi.new('char []', obj.encode('utf-8'))
         sexp = _rinterface.SexpCapsule(
             openrlib.rlib.Rf_install(name_cdata))
         super().__init__(sexp)
     else:
         raise TypeError(
             'The constructor must be called '
             'with that is an instance of rpy2.rinterface.sexp.Sexp '
             'or an instance of rpy2.rinterface._rinterface.SexpCapsule')