249 lines
6.8 KiB
Python
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,
|
|
# )
|