ED_LRR/rust/run_test.py

249 lines
6.8 KiB
Python

import subprocess as SP
import sys
from datetime import datetime, timedelta
import os
import shutil
import json
def setup_logging(loglevel="INFO", file=False):
import logging
import coloredlogs
logfmt = " | ".join(
["[%(delta)s] %(levelname)s", "%(name)s:%(pathname)s:%(lineno)s", "%(message)s"]
)
class ColorDeltaTimeFormatter(coloredlogs.ColoredFormatter):
def format(self, record):
seconds = record.relativeCreated / 1000
duration = timedelta(seconds=seconds)
record.delta = str(duration)
return super().format(record)
class DeltaTimeFormatter(coloredlogs.BasicFormatter):
def format(self, record):
seconds = record.relativeCreated / 1000
duration = timedelta(seconds=seconds)
record.delta = str(duration)
return super().format(record)
logger = logging.getLogger()
if file:
open("ed_lrr_test.log", "w").close()
fh = logging.FileHandler("ed_lrr_test.log")
fh.setLevel(logging.DEBUG)
fh.setFormatter(DeltaTimeFormatter(logfmt))
logger.addHandler(fh)
coloredlogs.DEFAULT_FIELD_STYLES["delta"] = {"color": "green"}
coloredlogs.DEFAULT_FIELD_STYLES["levelname"] = {"color": "yellow"}
coloredlogs.ColoredFormatter = ColorDeltaTimeFormatter
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
raise ValueError("Invalid log level: %s" % loglevel)
coloredlogs.install(level=numeric_level, fmt=logfmt, logger=logger)
return
JUMP_RANGE = 48
globals().setdefault("__file__", r"D:\devel\rust\ed_lrr_gui\rust\run_test.py")
dirname = os.path.dirname(__file__) or "."
os.chdir(dirname)
t_start = datetime.now()
os.environ["PYO3_PYTHON"] = sys.executable
if "--clean" in sys.argv[1:]:
SP.check_call(["cargo", "clean"])
if "--build" in sys.argv[1:]:
SP.check_call(["cargo", "lcheck"])
SP.check_call([sys.executable, "-m", "pip", "install", "-e", ".."])
print("Build+Install took:", datetime.now() - t_start)
sys.path.append("..")
setup_logging(file=True)
_ed_lrr = __import__("_ed_lrr")
def callback(state):
print(state)
print(_ed_lrr)
r = _ed_lrr.PyRouter(callback)
r.load("../stars.csv", immediate=False)
# r.nb_perf_test(JUMP_RANGE)
# exit()
# start, end = "Sol", "Colonia"
# systems = r.resolve(start, end)
# sys_ids = {k: v["id"] for k, v in systems.items()}
r.floyd_warshall_test(JUMP_RANGE)
# r.bfs_test(JUMP_RANGE)
# cfg = {}
# cfg["mode"] = "incremental_broadening"
# # input("{}>".format(os.getpid()))
# # route = r.precompute_neighbors(JUMP_RANGE)
# route = r.route([sys_ids[start], sys_ids[end]], JUMP_RANGE, cfg, 0)
# print("Optimal route:", len(route))
exit()
ships = _ed_lrr.PyShip.from_journal()
r = _ed_lrr.PyRouter(callback)
r.load("../stars.csv", immediate=False)
def func(*args, **kwargs):
print(kwargs)
return 12
r.precompute_neighbors(JUMP_RANGE)
exit()
# start, end = "Sol", "Colonia" # # 135 in 22m 36s 664ms 268us 800ns
"""
{'mode': 'BFS_serial', 'system': 'Nuwo OP-N c23-1', 'from': 'Sol', 'to': 'Beagle Point', 'depth': 492, 'queue_size': 1602, 'd_rem': 2456.31298828125, 'd_total': 65279.3515625, 'prc_done': 96.23722839355469, 'n_seen': 17366296, 'prc_seen': 26.25494384765625}
[0:43:19.715858] INFO | _ed_lrr.route:src\route.rs:2402 | Took: 34m 38s 40ms 256us 500ns
"""
"""
{'mode': 'BFS_serial', 'system': 'Syriae Thaa DN-B d13-2', 'from': 'Sol', 'to': 'Beagle Point', 'depth': 521, 'queue_size': 2311, 'd_rem': 492.8757019042969, 'd_total': 65279.3515625, 'prc_done': 99.2449722290039, 'n_seen': 19566797, 'prc_seen': 29.58173179626465}
[0:53:28.431326] INFO | _ed_lrr.route:src\route.rs:2402 | Took: 48m 34s 958ms 326us 300ns
"""
"""
[0:36:02.738233] INFO | _ed_lrr.route:src\route.rs:2404 | Took: 27m 6s 216ms 161us 100ns
Optimal route: 534
"""
"""
Sol, Colonia
Took: 30m 22s 63ms 818us
Allocs: 26622742
Reallocs: 45809664
Deallocs: 26622600
Optimal route: 135
"""
"""
Sol, Ix
Took: 1s 995ms 115us 100ns
Allocs: 17058
Reallocs: 32042
Deallocs: 17047
Optimal route: 4
"""
# Stats { allocations: 23257531, deallocations: 23257389, reallocations: 42747420, bytes_allocated: 179667997387, bytes_deallocated: 179667853217, bytes_reallocated: 151573742821 }
start, end = "Sol", "Colonia"
systems = r.resolve(start, end)
sys_ids = {k: v["id"] for k, v in systems.items()}
cfg = {}
cfg["mode"] = "incremental_broadening"
# input("{}>".format(os.getpid()))
route = r.route([sys_ids[start], sys_ids[end]], JUMP_RANGE, cfg, 0)
print("Optimal route:", len(route))
# cfg["mode"] = "beam_stack"
# route = r.route([sys_ids[start], sys_ids[end]], JUMP_RANGE, cfg, 0)
exit()
# bw_l = [
# 1,
# 2,
# 4,
# 8,
# 16,
# 32,
# 64,
# 128,
# 256,
# 512,
# 1024,
# 2048,
# 4096,
# 8192,
# 16384,
# 0.1,
# 0.25,
# 0.5,
# 0.75,
# 0.9,
# 0.99,
# 0,
# ]
# cfg = {
# "mode": "bfs",
# "greedyness": 0,
# }
# bw_l = [0]
# for bw in bw_l:
# ofn = "../logs/route_log_beam_{}.txt".format(bw)
# # if os.path.isfile(ofn):
# # continue
# print(ofn)
# t_start = datetime.today()
# try:
# if isinstance(bw, int):
# cfg["beam_width"] = {"absolute": bw}
# else:
# cfg["beam_width"] = {"fraction": bw}
# route = r.route([sys_ids["Sol"], sys_ids["Beagle Point"]], JUMP_RANGE, cfg, 8)
# print(route)
# except Exception as e:
# print("Error:", e)
# route = []
# dt = (datetime.today() - t_start).total_seconds()
# shutil.copy("route_log.txt", ofn)
# with open(ofn.replace(".txt", ".json"), "w") as of:
# json.dump({"route": route, "dt": dt}, of)
# g_l = [1.0, 0.99, 0.9, 0.75, 0.5, 0.25]
# g_l.clear()
# cfg["beam_width"] = 0
# for g in g_l:
# ofn = "../logs/route_log_g_{}.txt".format(g)
# if os.path.isfile(ofn):
# continue
# print(ofn)
# t_start = datetime.today()
# try:
# cfg["greedyness"] = g
# route = r.route([sys_ids["Sol"], sys_ids["Beagle Point"]], JUMP_RANGE, cfg)
# except Exception as e:
# print("Error:", e)
# route = []
# dt = (datetime.today() - t_start).total_seconds()
# shutil.copy("route_log.txt", ofn)
# with open(ofn.replace(".txt", ".json"), "w") as of:
# json.dump({"route": route, "dt": dt}, of)
# r.unload()
# exit()
# os.chdir("..")
# SP.check_call(
# [
# "conda",
# "run",
# "-n",
# "base",
# "--no-capture-output",
# "python",
# "plot_heatmap_vaex.py",
# "logs/route_log_*.txt",
# ],
# shell=True,
# )