Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 70 additions & 1 deletion RLA/easy_log/time_used_recorder.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,78 @@
from RLA.easy_log import logger
import time

class SingleTimeTracker:
def __init__(self,name:str='untitled') -> None:
self.name=name
self.t = 0.0
self.call_time=0
self.time_cost = 0.0

rc_start_time = {}
def __enter__(self):
# trace time
self.call_time+=1
self.t = time.perf_counter()

return self

def __exit__(self, exc_type, exc_val, exc_tb):
self.time_cost += time.perf_counter() - self.t


class TimeTracker:
def __init__(self):
self.t0=time.time()#to calc total time
self.time_dict=dict()

def add(self,name='untitled'):
"""
:param name: specify the SingleTimeTracker in the time_dict, recommend use
line num in the scripts, like 'xxx.py Line xxx', can be easily got in python scripts using
`os.path.basename(__file__)+' line '+str(sys._getframe().f_lineno)`
"""
if name not in self.time_dict.keys():
self.time_dict.update({name:SingleTimeTracker(name)})
return self.time_dict[name]

def __call__(self, name:str):
return self.time_dict[name]

def clear(self):
self.time_dict=dict()

def statistic_entry(self,name:str):
"""
calc total calls of the
"""
assert name in self.time_dict.keys()

t1=time.time()
t_passed=t1-self.t0
return {
'total calls/'+name:self.time_dict[name].call_time,
'total time cost/'+name:self.time_dict[name].time_cost,
'average time cost/'+name:self.time_dict[name].time_cost/(1e-6+self.time_dict[name].call_time),
'time cost percentage/'+name:self.time_dict[name].time_cost/(1e-6+t_passed)
}

def get_info(self):
info={}
for k in self.time_dict.keys():
for entry_k,entry_v in self.statistic_entry(k).items():
info[entry_k]=entry_v
return info

def log(self,exclude_lst=['csv']):
logger.info('---------time dashboard---------')
for k in self.time_dict.keys():
for entry_k,entry_v in self.statistic_entry(k).items():
logger.record_tabular('time_used/'+entry_k,entry_v,exclude=exclude_lst)
logger.info(f"[{entry_k}]: {entry_v}")
logger.info('')
logger.info('---------dashboard end---------')


rc_start_time = {}

def time_record(name):
"""
Expand Down
3 changes: 2 additions & 1 deletion RLA/easy_plot/plot_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,7 @@ def plot_results(
smooth_step: float - when resampling (i.e. when resample > 0 or average_group is True), use this EMA decay parameter (in units of the new grid step).
See docstrings for decay_steps in symmetric_ema or one_sided_ema functions.


'''
score_results = {}
if vary_len_plot:
Expand Down Expand Up @@ -401,7 +402,7 @@ def plot_results(
# figsize = list(figsize)
# figsize[0] += 4
# figsize = tuple(figsize)
f, axarr = plt.subplots(nrows, ncols, sharex=False, squeeze=False, figsize=figsize, dpi=90 * ncols)
f, axarr = plt.subplots(nrows, ncols, sharex=False, squeeze=False, figsize=figsize)
groups = []
for results in allresults:
groups.extend(group_fn(results)[0])
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setup(
name='RLA',
version="0.6.0-pre",
version="0.6.0",
description=(
'RL assistant'
),
Expand Down