diff options
author | Ronan Collobert <ronan@collobert.com> | 2014-02-13 20:40:19 +0400 |
---|---|---|
committer | Ronan Collobert <ronan@collobert.com> | 2014-02-14 13:00:20 +0400 |
commit | b2b35a6ba9ce8245030510ffe4b8558d68d309fd (patch) | |
tree | c729eadedbc9351644ac74af1aa140c582f55a75 /types.lua | |
parent | 28c17710cde9fd9a22359f5e0c6fef47e12edd46 (diff) |
repackaged wrap into a standalone cwrap module
Diffstat (limited to 'types.lua')
-rw-r--r-- | types.lua | 263 |
1 files changed, 7 insertions, 256 deletions
@@ -1,255 +1,4 @@ -wrap.argtypes = {} - -wrap.argtypes.Tensor = { - - helpname = function(arg) - if arg.dim then - return string.format("Tensor~%dD", arg.dim) - else - return "Tensor" - end - end, - - declare = function(arg) - local txt = {} - table.insert(txt, string.format("THTensor *arg%d = NULL;", arg.i)) - if arg.returned then - table.insert(txt, string.format("int arg%d_idx = 0;", arg.i)); - end - return table.concat(txt, '\n') - end, - - check = function(arg, idx) - if arg.dim then - return string.format("(arg%d = luaT_toudata(L, %d, torch_Tensor)) && (arg%d->nDimension == %d)", arg.i, idx, arg.i, arg.dim) - else - return string.format("(arg%d = luaT_toudata(L, %d, torch_Tensor))", arg.i, idx) - end - end, - - read = function(arg, idx) - if arg.returned then - return string.format("arg%d_idx = %d;", arg.i, idx) - end - end, - - init = function(arg) - if type(arg.default) == 'boolean' then - return string.format('arg%d = THTensor_(new)();', arg.i) - elseif type(arg.default) == 'number' then - return string.format('arg%d = %s;', arg.i, arg.args[arg.default]:carg()) - else - error('unknown default tensor type value') - end - end, - - carg = function(arg) - return string.format('arg%d', arg.i) - end, - - creturn = function(arg) - return string.format('arg%d', arg.i) - end, - - precall = function(arg) - local txt = {} - if arg.default and arg.returned then - table.insert(txt, string.format('if(arg%d_idx)', arg.i)) -- means it was passed as arg - table.insert(txt, string.format('lua_pushvalue(L, arg%d_idx);', arg.i)) - table.insert(txt, string.format('else')) - if type(arg.default) == 'boolean' then -- boolean: we did a new() - table.insert(txt, string.format('luaT_pushudata(L, arg%d, torch_Tensor);', arg.i)) - else -- otherwise: point on default tensor --> retain - table.insert(txt, string.format('{')) - table.insert(txt, string.format('THTensor_(retain)(arg%d);', arg.i)) -- so we need a retain - table.insert(txt, string.format('luaT_pushudata(L, arg%d, torch_Tensor);', arg.i)) - table.insert(txt, string.format('}')) - end - elseif arg.default then - -- we would have to deallocate the beast later if we did a new - -- unlikely anyways, so i do not support it for now - if type(arg.default) == 'boolean' then - error('a tensor cannot be optional if not returned') - end - elseif arg.returned then - table.insert(txt, string.format('lua_pushvalue(L, arg%d_idx);', arg.i)) - end - return table.concat(txt, '\n') - end, - - postcall = function(arg) - local txt = {} - if arg.creturned then - -- this next line is actually debatable - table.insert(txt, string.format('THTensor_(retain)(arg%d);', arg.i)) - table.insert(txt, string.format('luaT_pushudata(L, arg%d, torch_Tensor);', arg.i)) - end - return table.concat(txt, '\n') - end -} - -wrap.argtypes.IndexTensor = { - - helpname = function(arg) - return "LongTensor" - end, - - declare = function(arg) - local txt = {} - table.insert(txt, string.format("THLongTensor *arg%d = NULL;", arg.i)) - if arg.returned then - table.insert(txt, string.format("int arg%d_idx = 0;", arg.i)); - end - return table.concat(txt, '\n') - end, - - check = function(arg, idx) - return string.format('(arg%d = luaT_toudata(L, %d, "torch.LongTensor"))', arg.i, idx) - end, - - read = function(arg, idx) - local txt = {} - if not arg.noreadadd then - table.insert(txt, string.format("THLongTensor_add(arg%d, arg%d, -1);", arg.i, arg.i)); - end - if arg.returned then - table.insert(txt, string.format("arg%d_idx = %d;", arg.i, idx)) - end - return table.concat(txt, '\n') - end, - - init = function(arg) - return string.format('arg%d = THLongTensor_new();', arg.i) - end, - - carg = function(arg) - return string.format('arg%d', arg.i) - end, - - creturn = function(arg) - return string.format('arg%d', arg.i) - end, - - precall = function(arg) - local txt = {} - if arg.default and arg.returned then - table.insert(txt, string.format('if(arg%d_idx)', arg.i)) -- means it was passed as arg - table.insert(txt, string.format('lua_pushvalue(L, arg%d_idx);', arg.i)) - table.insert(txt, string.format('else')) -- means we did a new() - table.insert(txt, string.format('luaT_pushudata(L, arg%d, "torch.LongTensor");', arg.i)) - elseif arg.default then - error('a tensor cannot be optional if not returned') - elseif arg.returned then - table.insert(txt, string.format('lua_pushvalue(L, arg%d_idx);', arg.i)) - end - return table.concat(txt, '\n') - end, - - postcall = function(arg) - local txt = {} - if arg.creturned or arg.returned then - table.insert(txt, string.format("THLongTensor_add(arg%d, arg%d, 1);", arg.i, arg.i)); - end - if arg.creturned then - -- this next line is actually debatable - table.insert(txt, string.format('THLongTensor_retain(arg%d);', arg.i)) - table.insert(txt, string.format('luaT_pushudata(L, arg%d, "torch.LongTensor");', arg.i)) - end - return table.concat(txt, '\n') - end -} - -for _,typename in ipairs({"ByteTensor", "CharTensor", "ShortTensor", "IntTensor", "LongTensor", - "FloatTensor", "DoubleTensor"}) do - - wrap.argtypes[typename] = { - - helpname = function(arg) - if arg.dim then - return string.format('%s~%dD', typename, arg.dim) - else - return typename - end - end, - - declare = function(arg) - local txt = {} - table.insert(txt, string.format("TH%s *arg%d = NULL;", typename, arg.i)) - if arg.returned then - table.insert(txt, string.format("int arg%d_idx = 0;", arg.i)); - end - return table.concat(txt, '\n') - end, - - check = function(arg, idx) - if arg.dim then - return string.format('(arg%d = luaT_toudata(L, %d, "torch.%s")) && (arg%d->nDimension == %d)', arg.i, idx, typename, arg.i, arg.dim) - else - return string.format('(arg%d = luaT_toudata(L, %d, "torch.%s"))', arg.i, idx, typename) - end - end, - - read = function(arg, idx) - if arg.returned then - return string.format("arg%d_idx = %d;", arg.i, idx) - end - end, - - init = function(arg) - if type(arg.default) == 'boolean' then - return string.format('arg%d = TH%s_new();', arg.i, typename) - elseif type(arg.default) == 'number' then - return string.format('arg%d = %s;', arg.i, arg.args[arg.default]:carg()) - else - error('unknown default tensor type value') - end - end, - - carg = function(arg) - return string.format('arg%d', arg.i) - end, - - creturn = function(arg) - return string.format('arg%d', arg.i) - end, - - precall = function(arg) - local txt = {} - if arg.default and arg.returned then - table.insert(txt, string.format('if(arg%d_idx)', arg.i)) -- means it was passed as arg - table.insert(txt, string.format('lua_pushvalue(L, arg%d_idx);', arg.i)) - table.insert(txt, string.format('else')) - if type(arg.default) == 'boolean' then -- boolean: we did a new() - table.insert(txt, string.format('luaT_pushudata(L, arg%d, "torch.%s");', arg.i, typename)) - else -- otherwise: point on default tensor --> retain - table.insert(txt, string.format('{')) - table.insert(txt, string.format('TH%s_retain(arg%d);', typename, arg.i)) -- so we need a retain - table.insert(txt, string.format('luaT_pushudata(L, arg%d, "torch.%s");', arg.i, typename)) - table.insert(txt, string.format('}')) - end - elseif arg.default then - -- we would have to deallocate the beast later if we did a new - -- unlikely anyways, so i do not support it for now - if type(arg.default) == 'boolean' then - error('a tensor cannot be optional if not returned') - end - elseif arg.returned then - table.insert(txt, string.format('lua_pushvalue(L, arg%d_idx);', arg.i)) - end - return table.concat(txt, '\n') - end, - - postcall = function(arg) - local txt = {} - if arg.creturned then - -- this next line is actually debatable - table.insert(txt, string.format('TH%s_retain(arg%d);', typename, arg.i)) - table.insert(txt, string.format('luaT_pushudata(L, arg%d, "torch.%s");', arg.i, typename)) - end - return table.concat(txt, '\n') - end - } -end +local argtypes = {} local function interpretdefaultvalue(arg) local default = arg.default @@ -274,7 +23,7 @@ local function interpretdefaultvalue(arg) end end -wrap.argtypes.index = { +argtypes.index = { helpname = function(arg) return "index" @@ -326,7 +75,7 @@ wrap.argtypes.index = { } for _,typename in ipairs({"real", "unsigned char", "char", "short", "int", "long", "float", "double"}) do - wrap.argtypes[typename] = { + argtypes[typename] = { helpname = function(arg) return typename @@ -378,9 +127,9 @@ for _,typename in ipairs({"real", "unsigned char", "char", "short", "int", "long } end -wrap.argtypes.byte = wrap.argtypes['unsigned char'] +argtypes.byte = argtypes['unsigned char'] -wrap.argtypes.boolean = { +argtypes.boolean = { helpname = function(arg) return "boolean" @@ -430,3 +179,5 @@ wrap.argtypes.boolean = { end end } + +return argtypes |