Exemplo n.º 1
0
    def get_reticulate_completions(document, complete_event):
        word = document.get_word_before_cursor()
        prefix_length = settings.completion_prefix_length
        if len(word
               ) < prefix_length and not complete_event.completion_requested:
            return []

        glo = rcopy(rcall(("reticulate", "py_run_string"), "globals()"))
        loc = rcopy(rcall(("reticulate", "py_run_string"), "locals()"))
        try:
            script = jedi.Interpreter(document.text,
                                      column=document.cursor_position_col,
                                      line=document.cursor_position_row + 1,
                                      path="input-text",
                                      namespaces=[glo, loc])
            return [
                Completion(
                    text_type(c.name_with_symbols),
                    len(text_type(c.complete)) -
                    len(text_type(c.name_with_symbols)))
                for c in script.completions()
            ]

        except Exception:
            return []
Exemplo n.º 2
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
Exemplo n.º 3
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)
Exemplo n.º 4
0
def installed_packages():
    return rcopy(
        list,
        reval("""
            tryCatch(
                base::rownames(utils::installed.packages()),
                error = function(e) character(0)
            )
            """))
Exemplo n.º 5
0
def test_functions():
    def f(x):
        return x + 3

    fun = robject(f)
    assert "PyCallable" in rclass(fun)
    assert rcopy(rcall(fun, 4)) == f(4)
    assert rcopy(rcall(fun, x=4)) == f(4)

    fun = robject(lambda x: x + 3, convert=False)
    assert "PyCallable" in rclass(fun)
    ret = rcall(fun, 4)
    assert "PyObject" in rclass(ret)
    assert rcopy(ret) == f(4)

    makef = robject(lambda: f, convert=False)
    ret = rcall(makef)
    assert "PyCallable" in rclass(ret)
    assert rcopy(ret) == f
Exemplo n.º 6
0
def get_reticulate_completions(document, complete_event):
    word = document.get_word_before_cursor()
    if len(word) < 3 and not complete_event.completion_requested:
        return []

    glo = rcopy(rcall(("reticulate", "py_run_string"), "globals()"))
    loc = rcopy(rcall(("reticulate", "py_run_string"), "locals()"))
    try:
        script = jedi.Interpreter(document.text,
                                  column=document.cursor_position_col,
                                  line=document.cursor_position_row + 1,
                                  path="input-text",
                                  namespaces=[glo, loc])
    except Exception:
        script = None

    if not script:
        return []

    return list(script.completions())
Exemplo n.º 7
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()
Exemplo n.º 8
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)]
Exemplo n.º 9
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)
Exemplo n.º 10
0
def apply_settings(session, settings):
    setoption("prompt", settings.prompt)

    if settings.auto_width:
        output_width = session.app.output.get_size().columns
        if output_width:
            setoption("width", output_width)

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

    if is_windows() and roption("crayon.enabled", None) is None:
        setoption("crayon.enabled", True)

    # enables completion of installed package names
    if rcopy(rcall(("utils", "rc.settings"), "ipck")) is None:
        rcall(("utils", "rc.settings"), ipck=True)
Exemplo n.º 11
0
def apply_settings(session, settings):
    setoption("prompt", settings.prompt)

    if settings.auto_width:
        output_width = session.app.output.get_size().columns
        if output_width:
            setoption("width", output_width)

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

    def askpass(message):
        from prompt_toolkit import prompt
        return prompt(message, is_password=True)

    setoption("askpass", askpass)

    # enables completion of installed package names
    if rcopy(rcall(("utils", "rc.settings"), "ipck")) is None:
        rcall(("utils", "rc.settings"), ipck=True)
Exemplo n.º 12
0
def package_is_loaded(pkg):
    return pkg in rcopy(rcall(("base", "loadedNamespaces")))
Exemplo n.º 13
0
def package_is_installed(pkg):
    return pkg in rcopy(reval("rownames(installed.packages())"))
Exemplo n.º 14
0
def test_pyfunction(gctorture):
    def f():
        pass

    assert rcopy(robject(f)) == f
Exemplo n.º 15
0
def test_rfunction(gctorture):
    f = reval("function() {}")
    assert unbox(robject(rcopy(f))) == unbox(f)
Exemplo n.º 16
0
def greeting():
    info = rcopy(rcall(rsym("R.Version")))
    return "{} -- \"{}\"\nPlatform: {} ({}-bit)\n".format(
        info["version.string"], info["nickname"], info["platform"], 8 * struct.calcsize("P"))
Exemplo n.º 17
0
def test_raw(gctorture):
    assert rcopy(reval("as.raw(charToRaw('hello'))")) == b"hello"
Exemplo n.º 18
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))
Exemplo n.º 19
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()
Exemplo n.º 20
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
Exemplo n.º 21
0
def test_rcopy_reticulate_object():
    reval("library(reticulate)")
    py_object = reval("r_to_py(LETTERS)")
    assert rcopy(py_object) == list(string.ascii_uppercase)
Exemplo n.º 22
0
def test_unicode():
    assert rcopy(rstring("β")) == "β"
    assert rcopy(rstring("你")) == "你"
Exemplo n.º 23
0
def test_number():
    assert rcopy(reval("5")) == 5
Exemplo n.º 24
0
def user_path(*args):
    return os.path.join(rcopy(rcall(("base", "path.expand"), "~")), *args)
Exemplo n.º 25
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)
Exemplo n.º 26
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]
Exemplo n.º 27
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
Exemplo n.º 28
0
def user_path(*args):
    return make_path(rcopy(rcall(("base", "path.expand"), "~")), *args)
Exemplo n.º 29
0
def test_read_console(mocker, gctorture):
    mocker.patch("rchitect.setup.ask_input", return_value="hello")
    ret = reval("readline('> ')")
    assert rcopy(ret) == "hello"
Exemplo n.º 30
0
def test_lambda():
    rcopy(rcall(robject(lambda x: x + 3), 4)) == 7