Example #1
0
	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, [])
Example #2
0
	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)
Example #3
0
	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)
Example #4
0
	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)
Example #5
0
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
Example #6
0
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
Example #7
0
	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, [])