TREPL: A REPL for Torch
______ __ | Torch7
/_ __/__ ________/ / | Scientific computing for LuaJIT.
/ / / _ \/ __/ __/ _ \ |
/_/ \___/_/ \__/_//_/ | https://github.com/torch
| http://torch.ch
th>
A pure Lua REPL for LuaJIT, with heavy support for Torch types.
Uses Readline for tab completion, with code borrowed from iluajit.
If Readline is not found, it defaults to using Linenoise, which is significantly more simplistic.
This package installs a new binary named th
, which
comes packed with all these features:
Features:
- Tab-completion on nested namespaces
- Tab-completion on disk files (when opening a string)
- History
- Pretty print (table introspection and coloring)
- Auto-print after eval (can be stopped with ;)
- Each command is profiled, timing is reported
- No need for '=' to print
- Easy help with:
? funcname
- Self help:
?
- Shell commands with: $ cmd (example:
$ ls
) - Print all user globals with
who()
- Import a package's symbols globally with
import(package)
- Require is overloaded to provide relative search paths:
require('./mylocallib/')
- Optional strict global namespace monitoring
- Optional async repl (based on async)
Install
Via luarocks:
luarocks install trepl
Launch
We install a binary, simple to remember:
th
> -- amazing repl!
Alternatively, you can always bring up the repl by loading it as a lib, from anywhere:
luajit
> repl = require 'trepl'
> repl()
Use
Completion:
> cor+TAB ... completes to: coroutine
History:
> ARROW_UP | ARROW_DOWN
Help (shortcut to Torch's help method):
> ? torch.FloatTensor
prints help...
Shell commands:
> $ ls
README.md
init.lua
trepl-scm-1.rockspec
[Lua # 2] > $ ll
...
> $ ls
...
History / last results. Two variables are used:
_RESULTS: contains the history of results:
> a = 1
> a
1
> 'test'
test
> _RESULTS
{
1 : 1
2 : test
}
_LAST: contains the last result
> _LAST
test
Convenient to get output from shell commands:
> $ ls -l
> _LAST
contains the results from ls -l, in a string.
Hide output. By default, TREPL always tries to dump the content of what's evaluated. Use ; to stop it.
> a = torch.Tensor(3)
> a:zero()
0
0
0
[torch.DoubleTensor of dimension 3]
> a:zero();
>
Helpers
Colors libraries can be loaded independently:
> c = require 'trepl.colorize'
> print(c.red('a red string') .. c.Blue('a bold blue string'))
Globals
Global variables are a well known issue with Lua. th
can be run
with a flag -g
that will monitor global variables creation and access.
Creation of a variable will generate a warning message, while access will generate an error.
th -g
> require 'sys';
created global variable: sys @ [c-module]
> a = 1
created global variable: a @ a = 1
> b
error: attempt to read undeclared variable b
Async repl [BETA]
An asynchronous repl can be started with -a
. Based on async,
this repl is non-blocking, and can be used to spawn/schedule asyncrhonous jobs. It is still beta,
and does not yet have readline support:
th -a
> idx = 1
> async.setInterval(1000, function() print('will be printed every second - step #' .. idx) idx = idx + 1 end)
will be printed every second - step #1
will be printed every second - step #2
will be printed every second - step #3
> idx = 20
will be printed every second - step #20
will be printed every second - step #21