OpenFPGA/vpr/scripts/profile/util.py

86 lines
2.3 KiB
Python

from __future__ import print_function, division
import re
import sys
import os
import socket
import getpass
# working on the task directory
def sort_runs(runs):
natural_sort(runs)
def walk_runs(params, operation, select=sort_runs):
"""walk the selected run# directories and apply operation on each"""
runs = [run for run in immediate_subdir(params.task_dir) if run.startswith(params.run_prefix)]
# select how to and which runs to use for a certain range
select(runs)
if not runs:
print("no {}s in {}".format(params.run_prefix, params.task_dir))
sys.exit(1)
for run in runs:
operation(params, run)
def natural_sort(l):
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
l.sort(key=alphanum_key)
def get_result_file(params, run):
return os.path.join(params.task_dir, run, params.result_file)
def get_task_table_name(params):
return '[' + "|".join([params.task_name, socket.gethostname(), getpass.getuser(), params.task_path]) + ']'
def immediate_subdir(root):
return [name for name in os.listdir(root) if os.path.isdir(os.path.join(root, name))]
def get_trailing_num(s):
match = re.search(r'\d+$', s)
return int(match.group()) if match else None
def sql_escape(s):
return '\"' + s + '\"'
def strip_last_word(s):
return s.rsplit(' ', 1)[0]
def is_type_of(s, convert):
try:
convert(s)
return True
except ValueError:
return False
def is_int(s):
return is_type_of(s, int)
def is_float(s):
return is_type_of(s, float)
# try converting to numerical types using the strictest converters first
def convert_strictest(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
return s
# automatic return and exception safe
class Chdir:
def __init__(self, new_path):
self.prev_path = os.getcwd()
self.new_path = new_path
def __enter__(self):
os.chdir(self.new_path)
def __exit__(self, type, value, traceback):
os.chdir(self.prev_path)
class Params(object):
def __iter__(self):
for attr, value in self.__dict__.iteritems():
yield attr, value