def test_get_classes_to_take_double_nested_4(self): taken = ['2.001', '2.02A'] reqs = [[1, [2, "2.001", [1, "2.02A", "2.002"]], [2, "2.01", [1, "2.02A", "2.02B", "2.002"]]]] new_classes = get_new_classes.get_classes_to_take(None, taken, reqs) self.assertEqual(new_classes, [])
def test_get_classes_to_take_2(self): taken = ['6.01', '6.042'] reqs = ['6.01', [1, '6.UAR', [2, '6.UAT', '6.UAP']]] new_classes = get_new_classes.get_classes_to_take(None, taken, reqs) self.assertTrue('6.UAR' in new_classes) self.assertTrue('6.UAT' in new_classes) self.assertTrue('6.UAP' in new_classes) self.assertTrue('6.01' not in new_classes)
def test_get_classes_to_take_3(self): taken = ['6.046', '6.01', '6.042'] reqs = [[3, "6.033", [1, "6.034", "6.036"], [1, "6.045", "6.046"]]] new_classes = get_new_classes.get_classes_to_take(None, taken, reqs) self.assertTrue('6.033' in new_classes) self.assertTrue('6.034' in new_classes) self.assertTrue('6.036' in new_classes) self.assertTrue('6.045' not in new_classes) self.assertTrue('6.046' not in new_classes)
def test_get_classes_to_take_double_nested_2(self): taken = ['2.01', '1.00', '6.000', '99.99'] reqs = [[1, [2, "2.001", [1, "2.02A", "2.002"]], [2, "2.01", [1, "2.02A", "2.02B", "2.002"]]]] new_classes = get_new_classes.get_classes_to_take(None, taken, reqs) self.assertTrue('2.001' in new_classes) self.assertTrue('2.002' in new_classes) self.assertTrue('2.02A' in new_classes) self.assertTrue('2.02B' in new_classes) self.assertTrue('2.01' not in new_classes)
def generate_recommendations(major, cur_semester, student_classes): new_classes = get_new_classes.get_classes_to_take(major, student_classes) all_classes = student_classes + new_classes if major == '18_applied' or major == '18_general': major = '18' else: major = major.replace('_', ' ') class_table = {k:v for k, v in zip(all_classes, xrange(len(all_classes)))} shared_classes_table = create_shared_classes_table(major, all_classes, class_table) # consider caching # Calculate time (semester) relevance cur_term = "term%s" % cur_semester term_data, class_titles = get_term_relevance_data(cur_term, new_classes) # Calculate "importance" of each class that hasn't been taken by the student importance_ratings = {} for new_class in new_classes: rating = calculate_rating(new_class, student_classes, class_table, shared_classes_table) # try: # rating *= term_data[new_class] # time relevance # except: # pass importance_ratings[new_class] = rating # Create list of classes in order of popularity sorted_classes = sorted(importance_ratings, key=importance_ratings.get, reverse=True) recs = [] for c in sorted_classes[:20]: try: title = class_titles[c] except: try: title = subject_info.get_online_info(c)['title'] except: title = "" recs.append((c, title)) return recs
def generate_recommendations(student, major, term, random_students): # def generate_recommendations(student, major, term, random_students, specific_classes): student_classes = db_wrapper.get_student_classes_before_term(student, term) new_classes = get_new_classes.get_classes_to_take(major, student_classes) # new_classes = [c for c in specific_classes if c not in student_classes] all_classes = student_classes + new_classes class_table = {k:v for k, v in zip(all_classes, xrange(len(all_classes)))} shared_classes_table = create_shared_classes_table(major, random_students, all_classes, class_table) # consider caching # Calculate "importance" of each class that hasn't been taken by the student importance_ratings = {} for new_class in new_classes: rating = calculate_rating(new_class, student_classes, class_table, shared_classes_table) importance_ratings[new_class] = rating # Create list of classes in order of popularity recommendations = sorted(importance_ratings, key=importance_ratings.get, reverse=True) return recommendations
def test_get_classes_to_take_1(self): taken = ['6.01', '6.042', '6.UAR'] reqs = ['6.01', [1, '6.UAR', [2, '6.UAT', '6.UAP']]] new_classes = get_new_classes.get_classes_to_take(None, taken, reqs) self.assertEqual(new_classes, [])