Example #1
0
def test_functions(gctorture):
    f = rcopy(reval("function(x) x^2"))
    assert f(3) == 9
    f2 = rcopy(reval("function(x) x^2"), convert=False)
    assert rcopy(f2(3)) == 9
    sumfun = rcopy(reval("sum"))
    assert sumfun([1, 2, 3]) == 6
Example #2
0
def test_lists(gctorture):
    d = rcopy(reval("list(a = 1, b = 'hello')"))
    assert isinstance(d, OrderedDict)
    assert d["a"] == 1 and d["b"] == "hello"
    d = rcopy(dict, reval("list(a = 1, b = 'hello')"))
    assert isinstance(d, dict)
    assert d["a"] == 1 and d["b"] == "hello"
    d = rcopy(reval("list(x = list(1, 2))"))
    assert d["x"] == [1, 2]
    assert rcopy(tuple, reval("list(1, 2)")) == (1, 2)
Example #3
0
def load_settings(session):
    if roption("radian.editing_mode", "emacs") in ["vim", "vi"]:
        session.app.editing_mode = EditingMode.VI
    else:
        session.app.editing_mode = EditingMode.EMACS

    color_scheme = roption("radian.color_scheme", "native")
    session.style = style_from_pygments_cls(get_style_by_name(color_scheme))

    session.auto_match = roption("radian.auto_match", False)
    session.auto_indentation = roption("radian.auto_indentation", True)
    session.tab_size = int(roption("radian.tab_size", 4))
    session.complete_while_typing = roption("radian.complete_while_typing",
                                            True)
    session.completion_timeout = roption("radian.completion_timeout", 0.05)

    session.history_search_no_duplicates = roption(
        "radian.history_search_no_duplicates", False)
    session.insert_new_line = roption("radian.insert_new_line", True)
    session.indent_lines = roption("radian.indent_lines", True)

    prompt = roption("radian.prompt", None)
    if not prompt:
        sys_prompt = roption("prompt")
        if sys_prompt == "> ":
            prompt = PROMPT
        else:
            prompt = sys_prompt

    session.default_prompt = prompt
    setoption("prompt", prompt)

    shell_prompt = roption("radian.shell_prompt", SHELL_PROMPT)
    session.shell_prompt = shell_prompt

    browse_prompt = roption("radian.browse_prompt", BROWSE_PROMPT)
    session.browse_prompt = browse_prompt

    set_width_on_resize = roption("setWidthOnResize", True)
    session.auto_width = roption("radian.auto_width", set_width_on_resize)
    output_width = session.app.output.get_size().columns
    if output_width and session.auto_width:
        setoption("width", output_width)

    # necessary on windows
    setoption("menu.graphics", False)

    # enables completion of installed package names
    if rcopy(reval("rc.settings('ipck')")) is None:
        reval("rc.settings(ipck = TRUE)")

    # backup the updated settings
    session._backup_settings()
Example #4
0
def data_from_R(dataset, package):
    """
    Import datasets from R.

    This is basically a wrapper around R's `data`
    function in the base library.

    https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/data
    """
    s = f"data({dataset}, package = \"{package}\")"
    R.reval(s)
    d = R.reval(f"{dataset}")
    df = R.rcopy(d)
    return pd.DataFrame(df)
Example #5
0
def test_strings():
    assert rcall("identical", robject("abc"), rstring("abc"), _convert=True)
    assert rcall("identical", robject("β"), rstring("β"), _convert=True)
    assert rcall("identical", robject("你"), rstring("你"), _convert=True)
    assert rcall("identical",
                 robject(['a', 'b']),
                 reval("c('a', 'b')"),
                 _convert=True)
Example #6
0
def installed_packages():
    return rcopy(
        list,
        reval("""
            tryCatch(
                base::rownames(utils::installed.packages()),
                error = function(e) character(0)
            )
            """))
Example #7
0
def test_numbers(gctorture):
    assert rcopy(reval("5")) == 5
    assert rcopy(list, reval("5")) == [5]
    assert rcopy(reval("2 + 1i")) == complex(2, 1)
    assert rcopy(reval("c(1L, 3L, 5L)")) == [1, 3, 5]
    assert rcopy(reval("c(1, 3, 5)")) == [1.0, 3.0, 5.0]
    assert rcopy(reval("c(1 + 3i, 3 + 2i)")) == [complex(1, 3), complex(3, 2)]
Example #8
0
def test_numbers():
    assert rcall("identical", robject(1), rint(1), _convert=True)
    assert rcall("identical", robject(1.0), rdouble(1), _convert=True)
    assert not rcall("identical", robject(1), rdouble(1), _convert=True)
    assert not rcall("identical", robject(1.0), rint(1), _convert=True)

    assert rcall("identical",
                 robject(complex(1, 2)),
                 reval("1 + 2i"),
                 _convert=True)

    assert rcall("identical",
                 robject([1, 2]),
                 reval("c(1L, 2L)"),
                 _convert=True)
    assert rcall("identical",
                 robject([1.0, 2.0]),
                 reval("c(1, 2)"),
                 _convert=True)
    assert rcall("identical",
                 robject([complex(1, 2), complex(2, 1)]),
                 reval("c(1 + 2i, 2 + 1i)"),
                 _convert=True)
Example #9
0
def test_write_console_utf8(mocker, gctorture):
    mocker_write_console = mocker.patch("rchitect.console.write_console")
    # windows still doesn't like `�`
    reval("cat('文字')")
    mocker_write_console.assert_called_once_with('文字', 0)
Example #10
0
def test_read_console_interrupt(mocker, gctorture):
    mocker.patch("rchitect.setup.ask_input", side_effect=KeyboardInterrupt())
    with pytest.raises(Exception) as excinfo:
        reval("readline('> ')")
    assert str(excinfo.value).startswith("Error")
Example #11
0
def test_read_console_long(mocker, gctorture):
    s = "a" * 5000
    mocker.patch("rchitect.setup.ask_input", return_value=s)
    ret = reval("readline('> ')")
    assert rcopy(ret) == s
Example #12
0
def test_reval(gctorture):
    exp = rparse("x = 1L")
    assert "expression" in rclass(exp)
    assert "integer" in rclass(reval(exp))
    assert str(exp) == 'RObject{EXPRSXP}\nexpression(x = 1L)'
Example #13
0
 def enable_reticulate_prompt():
     enable = "reticulate" in rcopy(reval("rownames(installed.packages())")) and \
             roption("radian.enable_reticulate_prompt", True)
     if enable:
         setoption("radian.suppress_reticulate_message", True)
     return enable
Example #14
0
def package_is_installed(pkg):
    return pkg in rcopy(reval("rownames(installed.packages())"))
Example #15
0
def test_r_to_py_rchitect_object():
    reval("library(reticulate)")
    foo = Foo()
    x = rcall("r_to_py", robject(foo))
    assert "python.builtin.object" in rcopy(rcall("class", x))
Example #16
0
def test_write_console(mocker):
    mocker_write_console = mocker.patch("rchitect.console.write_console")
    reval("cat('helloworld')")
    mocker_write_console.assert_called_once_with('helloworld', 0)
Example #17
0
def test_booleans():
    assert rcall("identical",
                 robject([True, False]),
                 reval("c(TRUE, FALSE)"),
                 _convert=True)
Example #18
0
def test_ordered_list():
    d = OrderedDict([("a", 2), ("b", "hello")])
    assert rcall("identical",
                 robject(d),
                 reval("list(a = 2L, b = 'hello')"),
                 _convert=True)
Example #19
0
def test_none():
    assert rcall("identical", robject(None), reval("NULL"), _convert=True)
Example #20
0
def test_number():
    assert rcopy(reval("5")) == 5
Example #21
0
def test_write_console_stderr(mocker, gctorture):
    mocker_write_console = mocker.patch("rchitect.console.write_console")
    reval("cat('helloworld', file = stderr())")
    mocker_write_console.assert_called_once_with('helloworld', 1)
Example #22
0
def test_booleans(gctorture):
    assert rcopy(reval("TRUE")) is True
    assert rcopy(reval("FALSE")) is False
    assert rcopy(list, reval("FALSE")) == [False]
    assert rcopy(reval("c(TRUE, FALSE)")) == [True, False]
Example #23
0
def test_rcopy_reticulate_object():
    reval("library(reticulate)")
    py_object = reval("r_to_py(LETTERS)")
    assert rcopy(py_object) == list(string.ascii_uppercase)
Example #24
0
def test_raw(gctorture):
    assert rcopy(reval("as.raw(charToRaw('hello'))")) == b"hello"
Example #25
0
def test_rfunction(gctorture):
    f = reval("function() {}")
    assert unbox(robject(rcopy(f))) == unbox(f)
Example #26
0
def test_none(gctorture):
    assert rcopy(reval("NULL")) is None
Example #27
0
def test_py_tools():
    env = rcall(("base", "new.env"))
    reval("getOption('rchitect.py_tools')$attach()", envir=env)
    assert "import" in rcall("names", env, _convert=True)

    reval("os <- import('os')", envir=env)

    path = reval("""
        os$path$join("foo", "bar")
    """, envir=env)
    assert "character" in rclass(path)
    assert rcopy(path) == os.path.join("foo", "bar")

    path = reval("""
        py_call(os$path$join, "foo", "bar")
    """,
                 envir=env)
    assert "PyObject" in rclass(path)
    assert rcopy(path) == os.path.join("foo", "bar")

    ret = reval("""
        bulitins <- import_builtins()
        len <- bulitins$len
        len(py_eval("[1, 2, 3]"))
    """,
                envir=env)
    assert rcopy(ret) == 3

    ret = reval("""
        pyo <- py_object("hello")
        py_copy(pyo)
    """,
                envir=env)
    assert rcopy(ret) == "hello"

    ret = reval("""
        x <- py_eval("[1, 2, 3]")
        x[2L]
    """,
                envir=env)
    assert rcopy(ret) == 3

    ret = reval("""
        x <- py_eval("[1, 2, 3]")
        x[2L] <- 4L
        x
    """,
                envir=env)
    assert rcopy(ret) == [1, 2, 4]

    ret = reval("""
        d <- dict(a = 1L, b = 2L)
        d['b']
    """,
                envir=env)
    assert rcopy(ret) == 2

    ret = reval("""
        Foo <- py_eval("type(str('Foo'), (object,), {})")
        foo <- Foo()
        foo$x <- 1L
        foo
    """,
                envir=env)
    assert rcopy(ret).x == 1

    assert rcopy(reval("py_unicode('hello')", envir=env)) == "hello"

    assert rcopy(reval("tuple('a', 3)", envir=env)) == ('a', 3)
Example #28
0
def test_read_console(mocker, gctorture):
    mocker.patch("rchitect.setup.ask_input", return_value="hello")
    ret = reval("readline('> ')")
    assert rcopy(ret) == "hello"
Example #29
0
def session_initialize(session):
    if not sys.platform.startswith("win"):

        def reticulate_hook(*args):
            rcall(("base", "source"),
                  os.path.join(os.path.dirname(__file__), "data",
                               "patching_reticulate.R"), new_env())

        set_hook(package_event("reticulate", "onLoad"), reticulate_hook)

    if not roption("radian.suppress_reticulate_message", False):

        def reticulate_message_hook(*args):
            if not roption("radian.suppress_reticulate_message", False):
                rcall("packageStartupMessage", RETICULATE_MESSAGE)

        set_hook(package_event("reticulate", "onLoad"),
                 reticulate_message_hook)

    if roption("radian.enable_reticulate_prompt", True):

        def reticulate_prompt(*args):
            rcall(("base", "source"),
                  os.path.join(os.path.dirname(__file__), "data",
                               "register_reticulate.R"), new_env())

        set_hook(package_event("reticulate", "onLoad"), reticulate_prompt)

    if roption("radian.editing_mode", "emacs") in ["vim", "vi"]:
        session.app.editing_mode = EditingMode.VI
    else:
        session.app.editing_mode = EditingMode.EMACS

    color_scheme = roption("radian.color_scheme", "native")
    session.style = style_from_pygments_cls(get_style_by_name(color_scheme))

    session.auto_match = roption("radian.auto_match", False)
    session.auto_indentation = roption("radian.auto_indentation", True)
    session.tab_size = int(roption("radian.tab_size", 4))
    session.complete_while_typing = roption("radian.complete_while_typing",
                                            True)
    session.completion_timeout = roption("radian.completion_timeout", 0.05)

    session.history_search_no_duplicates = roption(
        "radian.history_search_no_duplicates", False)
    session.insert_new_line = roption("radian.insert_new_line", True)
    session.indent_lines = roption("radian.indent_lines", True)

    prompt = roption("radian.prompt", None)
    if not prompt:
        sys_prompt = roption("prompt")
        if sys_prompt == "> ":
            prompt = PROMPT
        else:
            prompt = sys_prompt

    session.default_prompt = prompt
    setoption("prompt", prompt)

    shell_prompt = roption("radian.shell_prompt", SHELL_PROMPT)
    session.shell_prompt = shell_prompt

    browse_prompt = roption("radian.browse_prompt", BROWSE_PROMPT)
    session.browse_prompt = browse_prompt

    set_width_on_resize = roption("setWidthOnResize", True)
    session.auto_width = roption("radian.auto_width", set_width_on_resize)
    output_width = session.app.output.get_size().columns
    if output_width and session.auto_width:
        setoption("width", output_width)

    # necessary on windows
    setoption("menu.graphics", False)

    # enables completion of installed package names
    if rcopy(reval("rc.settings('ipck')")) is None:
        reval("rc.settings(ipck = TRUE)")

    # backup the updated settings
    session._backup_settings()
Example #30
0
def test_reval_error(gctorture):
    with pytest.raises(Exception) as excinfo:
        reval("1 + 'A'")
        assert "non-numeric argument to binary operator" in str(excinfo.value)