def test_tabular(): if(not on_travis): return a = Tabular('spike/excel.xlsx') print(a,a[0]) assert(len(a) == 3) assert(len(a[0]) == 3) assert(a[0][0] == 'name') assert(a[1]['name'] == 'pagal') assert(a['name'][0] == 'pagal') assert(len(a['name']) == 2) a.write_csv('test.csv') a.write_json('test.json') a.write_xls('test.xlsx') # strict a.load_xls('spike/strict.xlsx',strict=True) assert(len(a) == 8) b = Tabular('test.xlsx') assert(len(b) == 3) assert(len(b[0]) == 3) assert(b[0][0] == 'name') assert(b[1]['name'] == 'pagal') assert(b['name'][0] == 'pagal') assert(len(b['name']) == 2) c = Tabular('test.csv') c = Tabular('test.json')
def dump_output(self, teachers_list, session_list, output_path): matrix = [["Name of Faculty Member", "Info"]] if debug: matrix[0].extend(['rank', 'total', 'res', 'credits']) # srbdebug for session in session_list: matrix[0].append(session.name) matrix[0].append("Total") for teacher in teachers_list: if teacher.duties != len(teacher.alloted): print('broke on') print(teacher) sys.exit(1) teachers_row = [teacher.name, teacher.info] if debug: teachers_row.extend([ teacher.rank, len(teacher.alloted), len(teacher.alloted_res), int(teacher._credits) ]) for session in session_list: if session.name in teacher.alloted: teachers_row.append(teacher.alloted[session.name]) else: teachers_row.append('-') teachers_row.append(len(teacher.alloted)) matrix.append(teachers_row) sheet = Tabular(matrix) sheet.write_xls(output_path)
def extract_output(): data = [[ "Sno", "N", "Cap", "SA", "SA-time", "ACO", "ACO-time", "ACO-SA", "ACO-SA-time", "Kmean-SA", "Kmean-SA-time" ]] for i in range(100): cities = City.generate_cities() n = len(cities) cap = 10 if n <= 60 else 20 c_ret, t_ret, h_ret = run(cities, cap, disp=False) tabular_ret = [i + 1, n, cap] for a, b in zip(c_ret, t_ret): tabular_ret.append(a) tabular_ret.append(b) data.append(tabular_ret) print(Tabular([tabular_ret])) tabular = Tabular(data) tabular.write_json('output/out.json') tabular.write_xls('output/data.xls')
def schedule(self, output_path=default_output_xlsx_path): teacher_list_for_pq = randomize(Teacher.get_teachers( self.teacher_list)) pq = PriorityQueue(teacher_list_for_pq) teacher_list = Teacher.get_teachers(self.teacher_list) session_list = Session.get_sessions(self.schedule_list, self.room_list) for session in session_list: done_list = [] for i in range(len(session.room_list)): for j in range(session.room_list[i].teachers): teacher = pq.pop() session.room_list[i].teachers_alloted.append(teacher) teacher._credits += credits_calc(teacher.rank) done_list.append(teacher) teacher_list[teacher.idd - 2].alloted[ session.name] = session.room_list[i].name for teacher in done_list: pq.push(teacher) matrix = [["Name of Faculty Member", "Designation", "Dept"]] for session in session_list: matrix[0].append(session.name) matrix[0].append("Total") for teacher in teacher_list: teacher_row = [teacher.name, teacher.desg, teacher.dept] for session in session_list: if session.name in teacher.alloted: teacher_row.append(teacher.alloted[session.name]) else: teacher_row.append('-') teacher_row.append(len(teacher.alloted)) matrix.append(teacher_row) sheet = Tabular(matrix) sheet.write_xls(output_path)
def dump_output(self, teachers_list, session_list, output_path): matrix = [["Name of Faculty Member", "Info"]] if debug: matrix[0].extend(['_rank', '_total', '_res', '_credits']) # srbdebug dmap = {} # map to contain count of avg duties of some rank rmap = {} # map to contain count of teachers of some rank for teacher in teachers_list: rmap[teacher.rank] = 0 dmap[teacher.rank] = 0 for teacher in teachers_list: rmap[teacher.rank] += 1 dmap[teacher.rank] += teacher.duties def divide(a, b): a = int((a * 1000) / b) return a / 1000 for rank in rmap: dmap[rank] = divide(dmap[rank], rmap[rank]) tmap = {} # map to contain count of room types for session in session_list: matrix[0].append(session.name) for room in session.room_list: if room.reserved: continue if room.get_type() in tmap: tmap[room.get_type()] += 1 else: tmap[room.get_type()] = 1 matrix[0].append("Total") matrix[0].append("mail") same_day_duties = self._get_same_day_multiple_duties(teachers_list) if (same_day_duties): matrix[0].append("s_d_m_d") for teacher in teachers_list: teachers_row = [teacher.name, teacher.info] if teacher.duties != len(teacher.alloted) - len( teacher.alloted_res): print( 'ERROR: teacher unable to get enough slots as anticipated') print(teacher) raise Exception( 'ERROR: teacher unable to get enough slots as anticipated') if debug: teachers_row.extend([ teacher.rank, len(teacher.alloted), len(teacher.alloted_res), int(teacher._credits), ]) for session in session_list: if session.name in teacher.alloted: teachers_row.append(teacher.alloted[session.name]) else: teachers_row.append('-') teachers_row.append(len(teacher.alloted)) teachers_row.append(teacher.mail) if (same_day_duties): same_day_duties_t = 0 # compute same day duties per teacher sess_set = set() for session_name in teacher.alloted.keys(): if Session.get_base(session_name) in sess_set: same_day_duties_t += 1 continue sess_set.add(Session.get_base(session_name)) teachers_row.append(same_day_duties_t) matrix.append(teachers_row) lmap = json.dumps(rmap, indent=3, sort_keys=True) Colour.print('rank count : ', Colour.CYAN, end='') Colour.print(lmap, Colour.GREEN) lmap = json.dumps(dmap, indent=3, sort_keys=True) Colour.print('average duties : ', Colour.CYAN, end='') Colour.print(lmap, Colour.GREEN) lmap = json.dumps(tmap, indent=3, sort_keys=True) Colour.print('type of rooms : ', Colour.CYAN, end='') Colour.print(lmap, Colour.GREEN) matrix.extend([[], [], ['', 'rank', 'count', 'avg duties']]) for key in sorted(rmap): matrix.append(['', key, rmap[key], dmap[key]]) matrix.extend([[], [], ['', 'type of room', 'number']]) for key in sorted(tmap): matrix.append(['', key, tmap[key]]) if same_day_duties > 0: Colour.print('Got ' + str(same_day_duties) + ' same-day-duties', Colour.YELLOW) matrix.extend( [[], [], ['', 'WARNING:', 'Adv-algo value was ' + str(self.adv)]]) matrix.extend( [['', '', 'You may get teacher duty multiple in a day']]) matrix.extend( [['', '', 'We got ' + str(same_day_duties) + ' such cases']]) matrix.extend([[ '', '', 'Please visit s_d_m_d(same-day-multiple-duties) column for number of such cases per teacher' ]]) matrix.extend( [[], [], [ '', 'Help:', 'In case help required please visit help section on website' ]]) matrix.extend([[ '', '', 'In case of unsatisfactory results please contact [email protected]' ]]) matrix.extend([[], [], ['', '', 'a srbcheema1 Production']]) sheet = Tabular(matrix) sheet.write_xls(output_path)