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
Example #2
0
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])))