ignore capitalization in names, store original name
This commit is contained in:
		
							parent
							
								
									298842222d
								
							
						
					
					
						commit
						9fd67ff514
					
				@ -5,7 +5,7 @@ import sys
 | 
				
			|||||||
import yaml
 | 
					import yaml
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
from collections import OrderedDict
 | 
					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
 | 
				
			||||||
@ -24,10 +24,11 @@ class TaskConfig:
 | 
				
			|||||||
    personen: list[str]
 | 
					    personen: list[str]
 | 
				
			||||||
    workload: int
 | 
					    workload: int
 | 
				
			||||||
    req: list[int]
 | 
					    req: list[int]
 | 
				
			||||||
 | 
					    name: str
 | 
				
			||||||
    hardcode: list[str] | None = None
 | 
					    hardcode: list[str] | None = None
 | 
				
			||||||
    lookup: list[str] = field(default_factory=list)
 | 
					    lookup: list[str] = field(default_factory=list)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tasks: dict[str, TaskConfig] = OrderedDict({k: TaskConfig(**t) for k, t in conf['tasks'].items()})
 | 
					tasks: dict[str, TaskConfig] = OrderedDict({k: TaskConfig(**({"name": k} | t)) for k, t in conf['tasks'].items()})
 | 
				
			||||||
X = TypeVar("X")
 | 
					X = TypeVar("X")
 | 
				
			||||||
def index(x: dict[X, Any]) -> dict[X, int]:
 | 
					def index(x: dict[X, Any]) -> dict[X, int]:
 | 
				
			||||||
    return {v: k for k, v in enumerate(x)}
 | 
					    return {v: k for k, v in enumerate(x)}
 | 
				
			||||||
@ -35,7 +36,8 @@ daily_workloads = \
 | 
				
			|||||||
     [sum(task.workload * task.req[d] for task in tasks.values()) for d in range(config['days'])]
 | 
					     [sum(task.workload * task.req[d] for task in tasks.values()) for d in range(config['days'])]
 | 
				
			||||||
ALL_DAYS: set[int] = set(range(config['days']))
 | 
					ALL_DAYS: set[int] = set(range(config['days']))
 | 
				
			||||||
class Person(object):
 | 
					class Person(object):
 | 
				
			||||||
    def __init__(self, conf={"dagen":ALL_DAYS}):
 | 
					    def __init__(self, name: str, conf={"dagen":ALL_DAYS}):
 | 
				
			||||||
 | 
					        self.name = name
 | 
				
			||||||
        self.can: set[str] = set()
 | 
					        self.can: set[str] = set()
 | 
				
			||||||
        self.loves: set[str] = set()
 | 
					        self.loves: set[str] = set()
 | 
				
			||||||
        self.hates: set[str] = set()
 | 
					        self.hates: set[str] = set()
 | 
				
			||||||
@ -62,17 +64,17 @@ def read_people(conf_ppl) -> dict[str, Person]:
 | 
				
			|||||||
        val = {"dagen": ALL_DAYS}
 | 
					        val = {"dagen": ALL_DAYS}
 | 
				
			||||||
        if isinstance(x, dict):
 | 
					        if isinstance(x, dict):
 | 
				
			||||||
            x,val = x.popitem()
 | 
					            x,val = x.popitem()
 | 
				
			||||||
        people[x.lower()] = Person(val)
 | 
					        people[x.lower()] = Person(x, val)
 | 
				
			||||||
    return people
 | 
					    return people
 | 
				
			||||||
# deal with loves/hates
 | 
					# deal with loves/hates
 | 
				
			||||||
def make_task_lut(tasks: dict[str, TaskConfig]):
 | 
					def make_task_lut(tasks: dict[str, TaskConfig]):
 | 
				
			||||||
    task_lut = {}
 | 
					    task_lut = defaultdict(set)
 | 
				
			||||||
    for t, taskconf in tasks.items():
 | 
					    for t, taskconf in tasks.items():
 | 
				
			||||||
        for lookup in taskconf.lookup:
 | 
					        for lookup in taskconf.lookup:
 | 
				
			||||||
            task_lut[lookup] = t
 | 
					            task_lut[lookup] |= {t.lower()}
 | 
				
			||||||
    task_re = re.compile(config['task_re'])
 | 
					    task_re = re.compile(config['task_re'])
 | 
				
			||||||
    def lookup_tasks(tasks):
 | 
					    def lookup_tasks(tasks):
 | 
				
			||||||
        return (task_lut[x] for x in task_re.split(tasks) if x not in config['ignore'])
 | 
					        return set.union(*(task_lut[x.strip()] for x in task_re.split(tasks) if x not in config['ignore']))
 | 
				
			||||||
    return lookup_tasks
 | 
					    return lookup_tasks
 | 
				
			||||||
def read_prefs(pref_file, tasks, people):
 | 
					def read_prefs(pref_file, tasks, people):
 | 
				
			||||||
    lookup_tasks = make_task_lut(tasks)
 | 
					    lookup_tasks = make_task_lut(tasks)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user