113 lines
3.1 KiB
Python
113 lines
3.1 KiB
Python
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
"""Utils file for exploitation schedule"""
|
|
|
|
import json
|
|
import os
|
|
|
|
import numpy as np # type: ignore
|
|
|
|
|
|
def write_file(json_list: list, log: str = "/tmp/file.json", mode: str = "w") -> str:
|
|
"""Write the log file
|
|
|
|
Parameters
|
|
----------
|
|
json_list: list
|
|
The list input json
|
|
log: Optional[str]
|
|
Path destiny to save the log file
|
|
mode: Optional[str]
|
|
Mode save, "a" means append and "w" means write
|
|
|
|
Returns
|
|
-------
|
|
ret: str
|
|
log path file
|
|
"""
|
|
with open(log, mode, encoding="utf-8") as outfile:
|
|
for j in json_list:
|
|
outfile.write(json.dumps(j) + "\n")
|
|
return log
|
|
|
|
|
|
def clean_file(filename: str) -> None:
|
|
"""Clean temporary files
|
|
|
|
Parameters
|
|
----------
|
|
filename: str
|
|
The filepath with remove from the system
|
|
"""
|
|
if os.path.isfile(filename):
|
|
os.remove(filename)
|
|
|
|
|
|
def get_time(log: str) -> list:
|
|
"""Get the time from the log file
|
|
|
|
Parameters
|
|
----------
|
|
log: str
|
|
log file
|
|
|
|
Returns
|
|
-------
|
|
ret: list
|
|
A list with the best time and the json data
|
|
"""
|
|
best_time = [1e10, None]
|
|
with open(log, encoding="utf-8") as log_file:
|
|
for line in log_file.readlines():
|
|
data = json.loads(line)
|
|
params = data[1]
|
|
time = params[1]
|
|
if np.mean(best_time[0]) > np.mean(time):
|
|
best_time = [time, data]
|
|
return best_time
|
|
|
|
|
|
def read_cfg_file(path_tuning_file: str, path_workload_file: str) -> dict[int, list]:
|
|
"""Colect the info from meta logfile
|
|
|
|
Parameters
|
|
----------
|
|
log: str
|
|
The input log path with the meta parameter
|
|
|
|
Returns
|
|
-------
|
|
ret: dict[layer, Union[time, dict]]
|
|
Returns the best time, total time, and data
|
|
"""
|
|
workload_list = []
|
|
with open(path_workload_file, encoding="utf-8") as log_file:
|
|
for line in log_file.readlines():
|
|
workload_list.append(json.loads(line))
|
|
|
|
cfg: dict[int, list] = dict()
|
|
with open(path_tuning_file, encoding="utf-8") as log_file:
|
|
for line in log_file.readlines():
|
|
data = json.loads(line)
|
|
layer = data[0]
|
|
params = data[1]
|
|
time = params[1]
|
|
|
|
if layer not in cfg.keys() or np.mean(cfg[layer][0]) > np.mean(time):
|
|
cfg[layer] = [time, data, workload_list[layer]]
|
|
return cfg
|