def parse(dataset='data/exam_comp_set1.exam'): with open(dataset) as f: indices = {} lines = [] for i, line in enumerate(f): if line.startswith('['): indices[determine_header(line)] = i lines.append(line.strip()) exams = parse_data(lines, indices[EXAMS_HEADER], indices[PERIOD_HEADER], lambda x: Exam(int(x[0]), [int(i) for i in x[1:]])) periods = parse_data(lines, indices[PERIOD_HEADER], indices[ROOM_HEADER], lambda x: Period(x[0], x[1], int(x[2]), int(x[3]))) rooms = parse_data(lines, indices[ROOM_HEADER], indices[PERIOD_CONSTRAINTS_HEADER], lambda x: Room(int(x[0]), int(x[1]))) period_constraints = parse_constraint(lines, indices[PERIOD_CONSTRAINTS_HEADER], indices[ROOM_CONSTRAINTS_HEADER], lambda x: PeriodHardConstraint(PeriodHardEnum.fromstring(x[1]), int(x[0]), int(x[2])), PeriodHardEnum) room_constraints = parse_constraint(lines, indices[ROOM_CONSTRAINTS_HEADER], indices[INSTITUTIONAL_CONSTRAINTS_HEADER], lambda x: RoomHardConstraint(RoomHardEnum.fromstring(x[1]), int(x[0])), RoomHardEnum) institutional_constraints = parse_constraint(lines, indices[INSTITUTIONAL_CONSTRAINTS_HEADER], len(lines), lambda x: InstitutionalConstraint( InstitutionalEnum.fromstring(x[0]), [int(i) for i in x[1:]]), InstitutionalEnum) return exams, periods, rooms, period_constraints, room_constraints, institutional_constraints
def parse(dataset='data/exam_comp_set1.exam'): with open(dataset) as f: indices = {} lines = [] for i, line in enumerate(f): if line.startswith('['): indices[determine_header(line)] = i lines.append(line.strip()) exams = parse_data(lines, indices[EXAMS_HEADER], indices[PERIOD_HEADER], lambda x: Exam(int(x[0]), [int(i) for i in x[1:]])) periods = parse_data( lines, indices[PERIOD_HEADER], indices[ROOM_HEADER], lambda x: Period(x[0], x[1], int(x[2]), int(x[3]))) rooms = parse_data(lines, indices[ROOM_HEADER], indices[PERIOD_CONSTRAINTS_HEADER], lambda x: Room(int(x[0]), int(x[1]))) period_constraints = parse_constraint( lines, indices[PERIOD_CONSTRAINTS_HEADER], indices[ROOM_CONSTRAINTS_HEADER], lambda x: PeriodHardConstraint( PeriodHardEnum.fromstring(x[1]), int(x[0]), int(x[2])), PeriodHardEnum) room_constraints = parse_constraint( lines, indices[ROOM_CONSTRAINTS_HEADER], indices[INSTITUTIONAL_CONSTRAINTS_HEADER], lambda x: RoomHardConstraint(RoomHardEnum.fromstring(x[1]), int(x[0])), RoomHardEnum) institutional_constraints = parse_constraint( lines, indices[INSTITUTIONAL_CONSTRAINTS_HEADER], len(lines), lambda x: InstitutionalConstraint( InstitutionalEnum.fromstring(x[0]), [int(i) for i in x[1:]]), InstitutionalEnum) return exams, periods, rooms, period_constraints, room_constraints, institutional_constraints
def parse_period_hard_constraints(f): # If it encounters this header it should stop room_header = '[RoomHardConstraints]' # period_hard_constraints = [] period_hard_constraints = {} for constraint in PeriodHardEnum: period_hard_constraints[constraint] = [] for line in f: if (room_header in line): return period_hard_constraints else: vals = [s.strip() for s in line.split(',')] constraint = PeriodHardEnum.fromstring(vals[1]) period_hard_constraints[constraint].append( PeriodHardConstraint(constraint, int(vals[0]), int(vals[2])))