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 []
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
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)
def installed_packages(): return rcopy( list, reval(""" tryCatch( base::rownames(utils::installed.packages()), error = function(e) character(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
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())
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()
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)]
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)
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)
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)
def package_is_loaded(pkg): return pkg in rcopy(rcall(("base", "loadedNamespaces")))
def package_is_installed(pkg): return pkg in rcopy(reval("rownames(installed.packages())"))
def test_pyfunction(gctorture): def f(): pass assert rcopy(robject(f)) == f
def test_rfunction(gctorture): f = reval("function() {}") assert unbox(robject(rcopy(f))) == unbox(f)
def greeting(): info = rcopy(rcall(rsym("R.Version"))) return "{} -- \"{}\"\nPlatform: {} ({}-bit)\n".format( info["version.string"], info["nickname"], info["platform"], 8 * struct.calcsize("P"))
def test_raw(gctorture): assert rcopy(reval("as.raw(charToRaw('hello'))")) == b"hello"
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))
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()
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
def test_rcopy_reticulate_object(): reval("library(reticulate)") py_object = reval("r_to_py(LETTERS)") assert rcopy(py_object) == list(string.ascii_uppercase)
def test_unicode(): assert rcopy(rstring("β")) == "β" assert rcopy(rstring("你")) == "你"
def test_number(): assert rcopy(reval("5")) == 5
def user_path(*args): return os.path.join(rcopy(rcall(("base", "path.expand"), "~")), *args)
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)
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]
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
def user_path(*args): return make_path(rcopy(rcall(("base", "path.expand"), "~")), *args)
def test_read_console(mocker, gctorture): mocker.patch("rchitect.setup.ask_input", return_value="hello") ret = reval("readline('> ')") assert rcopy(ret) == "hello"
def test_lambda(): rcopy(rcall(robject(lambda x: x + 3), 4)) == 7