Use tabulate for output format, add day names and --simple
This commit is contained in:
parent
09ea4ee5ca
commit
7c0ccaf0b6
@ -9,13 +9,16 @@ from collections import OrderedDict, defaultdict
|
|||||||
from pyscipopt import Model, quicksum
|
from pyscipopt import Model, quicksum
|
||||||
from typing import Any, Tuple, TypeVar
|
from typing import Any, Tuple, TypeVar
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
|
from tabulate import tabulate
|
||||||
conf = yaml.safe_load(open('config.yaml', 'r'))
|
conf = yaml.safe_load(open('config.yaml', 'r'))
|
||||||
|
|
||||||
DEFAULT_CONFIG = {
|
DEFAULT_CONFIG = {
|
||||||
"max_load_person": 6
|
"max_load_person": 6,
|
||||||
|
"day_names": [f"dag {str(i)}" for i in range(conf['config']['days'])],
|
||||||
}
|
}
|
||||||
config = DEFAULT_CONFIG | conf['config']
|
config = DEFAULT_CONFIG | conf['config']
|
||||||
config['ignore'].append('')
|
config['ignore'].append('')
|
||||||
|
assert(len(config['day_names']) == config['days'])
|
||||||
|
|
||||||
QUADRATIC = False
|
QUADRATIC = False
|
||||||
|
|
||||||
@ -105,17 +108,26 @@ def set_capabilities(tasks: dict[str, TaskConfig], people: dict[str, Person]):
|
|||||||
if pers:
|
if pers:
|
||||||
people[pers.lower()].does.add((day, task))
|
people[pers.lower()].does.add((day, task))
|
||||||
|
|
||||||
def write_tasks(people, tasks, file=sys.stdout):
|
def write_tasks(people: dict[str, Person], tasks: dict[str, TaskConfig], file=sys.stdout):
|
||||||
for name, p in people.items():
|
headers = ["wie"] + config['day_names']
|
||||||
days = [[] for i in range(config['days'])]
|
if not args.simple:
|
||||||
|
headers += ["workload", "vrolijkheid"]
|
||||||
|
tabl = []
|
||||||
|
for p in people.values():
|
||||||
|
days = [[] for _ in range(config['days'])]
|
||||||
for (d,t) in p.does:
|
for (d,t) in p.does:
|
||||||
days[d].append((t, t in p.loves, t in p.hates))
|
days[d].append((t, t in p.loves, t in p.hates))
|
||||||
def q(w):
|
if not args.simple:
|
||||||
return ",".join([t + (" <3" if love else "") + (" :(" if hate else "") for (t,love,hate) in w])
|
def q(w):
|
||||||
days_fmt = " {} ||" * len(days)
|
return ",".join([tasks[t].name + (" :)" if love else "") + (" :(" if hate else "") for (t,love,hate) in w])
|
||||||
days_filled = days_fmt.format(*map(q, days))
|
else:
|
||||||
print("| {} ||{} {} || {}".format(name, days_filled, p.vrolijkheid(), p.workload(tasks)), file=file)
|
def q(w):
|
||||||
print("|-")
|
return ",".join([tasks[t].name for (t,_,_) in w])
|
||||||
|
row = [p.name, *map(q, days)]
|
||||||
|
if not args.simple:
|
||||||
|
row += [p.workload(tasks), p.vrolijkheid()]
|
||||||
|
tabl.append(row)
|
||||||
|
print(tabulate(tabl, headers=headers, tablefmt=args.output_format), file=file)
|
||||||
|
|
||||||
def scipsol(people: dict[str, Person], tasks: dict[str, TaskConfig]):
|
def scipsol(people: dict[str, Person], tasks: dict[str, TaskConfig]):
|
||||||
max_loads: dict[Tuple[str, int], int] = {}
|
max_loads: dict[Tuple[str, int], int] = {}
|
||||||
@ -201,7 +213,9 @@ def scipsol(people: dict[str, Person], tasks: dict[str, TaskConfig]):
|
|||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("-q", "--quadratic", action="store_true")
|
parser.add_argument("-q", "--quadratic", action="store_true")
|
||||||
|
parser.add_argument("--simple", action="store_true", help="hide workload and happiness")
|
||||||
parser.add_argument("--max_total_error", type=int, default=None)
|
parser.add_argument("--max_total_error", type=int, default=None)
|
||||||
|
parser.add_argument("--output-format", default="mediawiki", help="`tabulate` output format")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
QUADRATIC = args.quadratic
|
QUADRATIC = args.quadratic
|
||||||
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
tabulate~=0.9.0
|
||||||
|
PySCIPOpt~=4.4.0
|
||||||
|
PyYAML~=6.0.1
|
Loading…
Reference in New Issue
Block a user