python : better format_time_ns & moved unit test to seperate file
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
from typing import Any, Callable, List, Union
|
||||
from typing import Any, Callable, List, Union, Final
|
||||
from time import perf_counter_ns
|
||||
from numba import njit
|
||||
import numpy as np
|
||||
import pickle
|
||||
import os
|
||||
from config import MODEL_DIR, OUT_DIR
|
||||
from decorators import njit
|
||||
|
||||
formats = ["ns", "µs", "ms", "s", "m", "h", "j", "w", "M", "y"]
|
||||
nb = np.array([1, 1000, 1000, 1000, 60, 60, 24, 7, 4, 12], dtype = np.uint16)
|
||||
time_formats: Final = ["ns", "µs", "ms", "s", "m", "h", "j", "w", "M", "y", "c"]
|
||||
time_numbers: Final = np.array([1, 1e3, 1e6, 1e9, 6e10, 36e11, 864e11, 6048e11, 26784e11, 31536e12, 31536e14], dtype = np.uint64)
|
||||
@njit('str(uint64)')
|
||||
def format_time_ns(time: int) -> str:
|
||||
"""Format the time in nanoseconds in human readable format.
|
||||
|
||||
@@ -20,35 +22,17 @@ def format_time_ns(time: int) -> str:
|
||||
assert time >= 0, "Incorrect time stamp"
|
||||
if time == 0:
|
||||
return "0ns"
|
||||
prod = nb.prod(dtype = np.uint64)
|
||||
|
||||
s = ""
|
||||
for i in range(nb.shape[0])[::-1]:
|
||||
if time >= prod:
|
||||
res = int(time // prod)
|
||||
time = time % prod
|
||||
s += f"{res}{formats[i]} "
|
||||
prod = prod // nb[i]
|
||||
for i in range(time_numbers.shape[0])[::-1]:
|
||||
if time >= time_numbers[i]:
|
||||
res = int(time // time_numbers[i])
|
||||
time = time % time_numbers[i]
|
||||
s += f"{res}{time_formats[i]} "
|
||||
|
||||
assert time == 0, "Leftover in formatting time !"
|
||||
return s.rstrip()
|
||||
|
||||
def toolbox_unit_test() -> None:
|
||||
# FIXME Move unit test to different file
|
||||
assert "0ns" == format_time_ns(0)
|
||||
assert "1ns" == format_time_ns(1)
|
||||
assert "1µs" == format_time_ns(int(1e3))
|
||||
assert "1ms" == format_time_ns(int(1e6))
|
||||
assert "1s" == format_time_ns(int(1e9))
|
||||
assert "1m" == format_time_ns(int(6e10))
|
||||
assert "1h" == format_time_ns(int(36e11))
|
||||
assert "1j" == format_time_ns(int(864e11))
|
||||
assert "1w" == format_time_ns(int(6048e11))
|
||||
assert "1M" == format_time_ns(int(24192e11))
|
||||
assert "1y" == format_time_ns(int(290304e11))
|
||||
# UINT64_MAX == 2^64 = 18446744073709551615 == -1
|
||||
assert "635y 5M 3j 23h 34m 33s 709ms 551µs 616ns" == format_time_ns(2**64)
|
||||
|
||||
def picke_multi_loader(filenames: List[str], save_dir: str = MODEL_DIR) -> List[Any]:
|
||||
"""Load multiple pickle data files.
|
||||
|
||||
|
Reference in New Issue
Block a user