def mate(c1, c2): #note take care to prevent alliasing issues c = Coordinator() c.generateSlots() c.generateCourses() c.generateProfs() c.assignRequests() c.generateStudentGroups() c.generateCourseClasses() c.appendSTGtoCC() c.setHardBlocks() for i in range(len(c1.courseClasses)): #we need to manage the professor and stg manually randomInt = random.randint(0, 1) if (randomInt == 0): currCourseClass = c1.courseClasses[i] else: currCourseClass = c2.courseClasses[i] #from courseclass get stg, get prof, get slot and update values courseName = currCourseClass.course.name req = currCourseClass.req duration = currCourseClass.duration day = currCourseClass.day startTime = currCourseClass.startTime endTime = currCourseClass.endTime profNameList = [p.name for p in currCourseClass.professors] #copying courseClasses attributes no alliasing c.courseClasses[i].course = c.getCourse(courseName) c.courseClasses[i].req = req c.courseClasses[i].duration = duration c.courseClasses[i].day = day c.courseClasses[i].startTime = startTime c.courseClasses[i].endTime = endTime for name in profNameList: c.courseClasses[i].professors.append(c.getProf(name)) for prof in c.courseClasses[i].professors: prof.courseClasses.append(c.courseClasses[i]) for slot in currCourseClass.slots: index = slot.index c.slots[index].counter += 1 c.courseClasses[i].slots.append(c.slots[index]) for stg in c.courseClasses[i].studentGroups: stg.slots.append(c.slots[index]) for prof in c.courseClasses[i].professors: prof.slots.append(c.slots[index]) return c