Files
llm-tricks/lib/timing.lua
T

52 lines
1.3 KiB
Lua

local timing = {}
local function human_readable_time(delta)
if delta >= 2*7*24*60*60 then -- if more than 2 weeks
delta = tostring(math.floor(delta/(7*24*60*60))/10) .. " weeks"
elseif delta >= 2*24*60*60 then -- if more than 2 days
delta = tostring(math.floor(delta/(24*60*60))/10) .. " days"
elseif delta >= 2*60*60 then -- if more than 2 hours
delta = tostring(math.floor(delta/(60*60/10))/10) .. " hours"
elseif delta >= 2*60 then -- if more then 2 minutes
delta = tostring(math.floor(delta/(60/10))/10) .. " minutes"
else
delta = tostring(delta) .. " seconds"
end
return delta
end
timing.display = function(n)
local function _display(n)
local time = timing[n]
local previous = timing[n - 1]
local delta = human_readable_time(time.time - previous.time)
print(delta, previous.label)
end
if n then
_display(n)
else
print("All measured timings:")
for i = 2, #timing do
_display(i)
end
end
end
timing.mark = function(label)
timing[#timing + 1] = { label = label, time = os.time(), }
if #timing > 1 then
timing.display(#timing)
end
end
timing.estimate = function(current_position, total_operations)
local delta = os.time() - timing[#timing].time
local estimate = delta * total_operations / current_position - delta
return human_readable_time(estimate)
end
return timing