require 'class' require 'tuple' require 'dict' require 'list' require 'str' -- Python builtin super function super(klass, self) return setmetatable({__name__ = "super_index"}, {__index = function(klass_index, key) return setmetatable({__name__ = "super_call"}, {__call = function(...) for i_base, base in pairs(klass.__bases__) do v = base[key] if v then v(self, ...) end end end}) end}) end function setattr(self, key, value) self[key.value] = value end NotImplementedError = class("NotImplementedError") function NotImplementedError:__init__(message) self.message = message end function decorator_method(func_name, ...) local decors = {...} return function(self, ...) f = self[func_name] d = f for k, v in pairs(decors) do d = v(d) end d(self, ...) end end function range(n) t = {} for a = 0,n do table.insert(t,a) end return t end staticmethod = setmetatable({__name__ = str("staticmethod")}, {__call = function(local_function_self, func) return func end }) function get_package_searchers() local package_searchers = {} for k, v in pairs(package.searchers) do table.insert(package_searchers, v) end return package_searchers end function package_searchers_update_local(current_package) local new_package_searchers = {} for k, v in pairs(package.searchers) do searcher = function(a) new_a = current_package .. a l = v(new_a) return l end table.insert(new_package_searchers, v) table.insert(new_package_searchers, searcher) end package.searchers = new_package_searchers end