Commit e6683371 authored by Mo Zhou's avatar Mo Zhou

Imported Upstream version 0~20160227-g98c11ca

parents
language: c
compiler:
- gcc
- clang
cache:
directories:
- $HOME/OpenBlasInstall
sudo: false
addons:
apt:
packages:
- cmake
- gfortran
- gcc-multilib
- gfortran-multilib
- liblapack-dev
- build-essential
- gcc
- g++
- curl
- cmake
- libreadline-dev
- git-core
- libqt4-core
- libqt4-gui
- libqt4-dev
- libjpeg-dev
- libpng-dev
- ncurses-dev
- imagemagick
- libzmq3-dev
- gfortran
- unzip
- gnuplot
- gnuplot-x11
before_script:
- export ROOT_TRAVIS_DIR=$(pwd)
- export INSTALL_PREFIX=~/torch/install
- ls $HOME/OpenBlasInstall/lib || (cd /tmp/ && git clone https://github.com/xianyi/OpenBLAS.git -b master && cd OpenBLAS && (make NO_AFFINITY=1 -j$(getconf _NPROCESSORS_ONLN) 2>/dev/null >/dev/null) && make PREFIX=$HOME/OpenBlasInstall install)
- git clone https://github.com/torch/distro.git ~/torch --recursive
- cd ~/torch && git submodule update --init --recursive
- mkdir build && cd build
- export CMAKE_LIBRARY_PATH=$HOME/OpenBlasInstall/include:$HOME/OpenBlasInstall/lib:$CMAKE_LIBRARY_PATH
- cmake .. -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" -DCMAKE_BUILD_TYPE=Release -DWITH_LUAJIT21=ON
- make && make install
- cd $ROOT_TRAVIS_DIR
- export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:$LD_LIBRARY_PATH
script:
- ${INSTALL_PREFIX}/bin/luarocks make xlua-1.1-0.rockspec
- ${INSTALL_PREFIX}/bin/luajit -lxlua -e "print('xlua loaded succesfully')"
CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)
CMAKE_POLICY(VERSION 2.6)
IF(LUAROCKS_PREFIX)
MESSAGE(STATUS "Installing Torch through Luarocks")
STRING(REGEX REPLACE "(.*)lib/luarocks/rocks.*" "\\1" CMAKE_INSTALL_PREFIX "${LUAROCKS_PREFIX}")
MESSAGE(STATUS "Prefix inferred from Luarocks: ${CMAKE_INSTALL_PREFIX}")
ENDIF()
FIND_PACKAGE(Torch REQUIRED)
SET(src)
SET(luasrc init.lua OptionParser.lua Profiler.lua)
ADD_TORCH_PACKAGE(xlua "${src}" "${luasrc}" "System")
--
-- Lua command line option parser.
-- Interface based on Pythons optparse.
-- http://docs.python.org/lib/module-optparse.html
-- (c) 2008 David Manura, Licensed under the same terms as Lua (MIT license)
--
-- To be used like this:
-- t={usage="<some usage message>", version="<version string>"}
-- op = xlua.OptionParser(t)
-- op:option{"<opt>", action=<action>, dest=<dest>, help="<help message for this option>"}
--
-- with :
-- <opt> the option string to be used (can be anything, if one letter opt, then should be -x val, more letters: -xy=val )
-- <action> one of
-- - store: store in options as key, val
-- - store_true: stores key, true
-- - store_false: stores key, false
-- <dest> is the key under which the option is saved
--
-- options,args = op.parse_args()
--
-- now options is the table of options (key, val) and args is the table with non-option arguments.
-- You can use op.fail(message) for failing and op.help() for printing the usage as you like.
--
-- modifed by Benoit Corda, Clement Farabet
--
local OptionParser = {}
function xlua.OptionParser(usage)
local self = {}
self.usage = usage
self.option_descriptions = {}
self.option_of = {}
for k,v in pairs(OptionParser) do
self[k] = v
end
self:option{"-h", "--help", action="store_true", dest="help",
help="show this help message and exit"}
return self
end
function OptionParser:fail(s) -- extension
io.stderr:write(s .. '\n')
self:help()
os.exit(1)
end
function OptionParser:option(optdesc)
self.option_descriptions[#self.option_descriptions+1] = optdesc
for _,v in ipairs(optdesc) do
self.option_of[v] = optdesc
end
end
function OptionParser:parse(options)
local options = options or {}
local args = {}
-- set the default
for _,v in ipairs(self.option_descriptions) do
if v.default ~= nil and options[v.dest]==nil then
options[v.dest] = v.default
end
end
if not arg then
options.__main__ = false -- python like main
self.options = options
return options, args
end
options.__main__ = true -- python like main
-- expand options (e.g. "--input=file" -> "--input", "file")
local arg = {unpack(arg)}
for i=#arg,1,-1 do local v = arg[i]
local flag, val = v:match('^(%-%-%w+)=(.*)')
if flag then
arg[i] = flag
table.insert(arg, i+1, val)
end
end
local i = 1
while i <= #arg do
local v = arg[i]
local optdesc = self.option_of[v]
if optdesc then
local default = optdesc.default
local action = optdesc.action
local val = default
if action == 'store' or action == nil then
i = i + 1
val = arg[i] or default
if not val then self:fail('option requires an argument ' .. v) end
elseif action == 'store_true' then
val = true
elseif action == 'store_false' then
val = false
end
options[optdesc.dest] = val
else
if v:match('^%-') then self:fail('invalid option ' .. v) end
args[#args+1] = v
end
i = i + 1
end
for k,opt in pairs(self.option_of) do
if opt.req and not options[opt.dest] then
self:fail('option '.. k .. ' requires an argument ')
end
end
if options.help then
self:help()
os.exit()
end
-- set the default if nil
self.options = options
return options, args
end
function OptionParser:flags(optdesc)
local sflags = {}
local action = optdesc and optdesc.action
for _,flag in ipairs(optdesc) do
local sflagend
if action == nil or action == 'store' then
local metavar = optdesc.metavar or optdesc.dest:upper()
sflagend = #flag == 2 and ' ' .. metavar
or '=' .. metavar
else
sflagend = ''
end
sflags[#sflags+1] = flag .. sflagend
end
return table.concat(sflags, ', ')
end
function OptionParser:help()
if arg[-1] then
io.stdout:write("Usage: " .. self.usage:gsub('%%prog', (arg[-1] .. ' ' .. arg[0])) .. "\n")
elseif arg[0] then
io.stdout:write("Usage: " .. self.usage:gsub('%%prog', arg[0]) .. "\n")
else
io.stdout:write("Usage: " .. self.usage:gsub('%%prog', 'THISPROG') .. "\n")
end
io.stdout:write("\n")
io.stdout:write("Options:\n")
pad = 0
for _,optdesc in ipairs(self.option_descriptions) do
pad = math.max(pad, #self:flags(optdesc))
end
for _,optdesc in ipairs(self.option_descriptions) do
local defstr = ''
if optdesc.req then
defstr = ' [REQUIRED]'
elseif optdesc.default then
defstr = ' [default = ' .. tostring(optdesc.default) .. ']'
end
io.stdout:write(" " .. self:flags(optdesc) ..
string.rep(' ', pad - #self:flags(optdesc)) ..
" " .. optdesc.help .. defstr .. "\n")
end
end
function OptionParser:tostring(generatefilename, params)
local str = ''
if not generatefilename then
str = '<'.. ((arg and arg[0]) or 'interpreted.lua'):gsub('.lua','') .. "> configuration:\n"
for k,v in pairs(self.options) do
str = str .. ' + ' .. k .. ' = ' .. tostring(v) .. '\n'
end
else
local first = true
for i,entry in ipairs(self.option_descriptions) do
local key = entry[1]
local match = true
if #params > 0 then
match = false
for i,param in ipairs(params) do
if key == param then match = true; break end
end
end
local val = self.options[entry.dest]
if val and match then
if first then
str = str .. key .. '=' .. tostring(val)
else
str = str .. ',' .. key .. '=' .. tostring(val)
end
first = false
end
end
str = str:gsub('/','|'):gsub(' ','_')
end
return str
end
function OptionParser:summarize(compact)
io.write(self:tostring(compact))
end
--------------------------------------------------------------------------------
-- Profiler: a simple class to help profiling code
--------------------------------------------------------------------------------
local Profiler = {}
function xlua.Profiler(mode,verbose)
local self = {}
self.events = {}
self.list = {}
self.off = (mode == 'off') or false
self.verbose = verbose or false
for k,v in pairs(Profiler) do
self[k] = v
end
return self
end
function Profiler:start(name, fps)
if self.events[name] then
-- update
self.events[name].cpu = os.clock()
self.events[name].real = sys.clock()
else
-- create
self.events[name] = {cpu=os.clock(), real=sys.clock(), name=name}
self.list[#self.list+1] = self.events[name]
end
if fps and fps == 'fps' then
self.events[name].fps = true
end
if self.verbose then io.write('<' .. name .. '>') io.flush() end
end
function Profiler:setColor(name, color)
if self.events[name] then
-- update
self.events[name].color = color
else
error('# ERROR: There is no such profiler - '.. name..', create it first')
end
end
function Profiler:cpu(name,divider)
local delta = os.clock() - self.events[name].cpu
if divider then delta = delta / divider end
self.events[name].cpud = delta
return delta
end
function Profiler:real(name,divider)
local delta = sys.clock() - self.events[name].real
if divider then delta = delta / divider end
self.events[name].reald = delta
return delta
end
function Profiler:lap(name,divider)
local r = self:real(name,divider)
local c = self:cpu(name,divider)
if self.verbose then io.write('\r') self:print(name) end
return r,c
end
function Profiler:format(name)
return string.format('$ real | cpu: %f | %f <%s>',
self.events[name].reald or -1, self.events[name].cpud or -1, name)
end
function Profiler:print(name)
if not self.off then
print(self:format(name))
end
end
function Profiler:formatAll()
local str = '$ profiler report:'
for i = 1,#self.list do
if self.list[i].fps then
str = str .. '\n' .. string.format('$ real %f | cpu %f <%s> = %f fps',
self.list[i].reald or -1,
self.list[i].cpud or -1,
self.list[i].name,
1/self.list[i].reald)
else
str = str .. '\n' .. string.format('$ real %f | cpu %f <%s>',
self.list[i].reald or -1,
self.list[i].cpud or -1,
self.list[i].name)
end
end
return str
end
function Profiler:printAll()
if not self.off then
print(self:formatAll())
end
end
function Profiler:displayAll(args)
-- args
local x = args.x or 0
local y = args.y or 0
local zoom = args.zoom or 1
local painter = args.painter or args.win
local font = args.font or 24*zoom
if not painter then error('# ERROR: Profiler.displayAll() needs a painter') end
painter:setfont(qt.QFont{serif=false,italic=false,size=font})
if not self.off then
for i = 1,#self.list do
painter:setcolor(self.list[i].color or "black")
local str
if self.list[i].fps then
str = string.format('$ real %f | cpu %f <%s> = %f fps',
self.list[i].reald or -1,
self.list[i].cpud or -1,
self.list[i].name,
1/self.list[i].reald)
else
str = string.format('$ real %f | cpu %f <%s>',
self.list[i].reald or -1,
self.list[i].cpud or -1,
self.list[i].name)
end
-- disp line:
painter:moveto(x,y); y = y + font*1.5
painter:show(str)
end
end
end
# A set of useful extensions to Lua
[![Build Status](https://travis-ci.org/torch/xlua.svg)](https://travis-ci.org/torch/xlua)
## Dependencies:
Torch7 (www.torch.ch)
## Install:
```
$ torch-rocks install xlua
```
## Use
```
$ torch -lxlua
xLua > a = 5
xLua > b = 'test'
xLua > xlua.who()
Global Libs:
{[1] = string,
[2] = package,
[3] = os,
[4] = io,
[5] = xlua,
[6] = sys,
[7] = math,
[8] = debug,
[9] = table,
[10] = coroutine}
Global Vars:
{[a] = 5,
[b] = test}
xLua > xlua.clearall() -- also calls the garbage collector !
xLua > xlua.who()
Global Libs:
{[1] = string,
[2] = package,
[3] = os,
[4] = io,
[5] = xlua,
[6] = sys,
[7] = math,
[8] = debug,
[9] = table,
[10] = coroutine}
Global Vars:
{}
xLua > print(xlua)
{[clear] = function: 0x10020cd10,
[clearall] = function: 0x10020ca70,
[_PACKAGE] = ,
[progress] = function: 0x10020cda0,
[print] = function: 0x10020c9d0,
[_NAME] = xlua,
[who] = function: 0x10020cd50,
[_M] = table: 0x10020c990,
[lua_print] = function: 0x100201900}
xLua > test = {a = 14, b = "test"}
xLua > =test
{[a] = 14,
[b] = test}
xLua >
```
This diff is collapsed.
package = "xlua"
version = "1.0-0"
source = {
url = "git://github.com/torch/xlua",
dir = 'xlua',
tag = '1.0-0'
}
description = {
summary = "Extra Lua functions.",
detailed = [[
Lua is pretty compact in terms of built-in functionalities:
this package extends the table and string libraries,
and provide other general purpose tools (progress bar, ...).
]],
homepage = "https://github.com/torch/xlua",
license = "BSD"
}
dependencies = {
"torch >= 7.0",
"sys >= 1.0"
}
build = {
type = "builtin",
modules = {
['xlua.init'] = 'init.lua',
['xlua.OptionParser'] = 'OptionParser.lua',
['xlua.Profiler'] = 'Profiler.lua'
}
}
package = "xlua"
version = "1.1-0"
source = {
url = "git://github.com/torch/xlua",
}
description = {
summary = "Extra Lua functions.",
detailed = [[
Lua is pretty compact in terms of built-in functionalities:
this package extends the table and string libraries,
and provide other general purpose tools (progress bar, ...).
]],
homepage = "https://github.com/torch/xlua",
license = "BSD"
}
dependencies = {
"torch >= 7.0",
"sys >= 1.0"
}
build = {
type = "builtin",
modules = {
['xlua.init'] = 'init.lua',
['xlua.OptionParser'] = 'OptionParser.lua',
['xlua.Profiler'] = 'Profiler.lua'
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment