update test development

This commit is contained in:
SowinskiBraeden committed 2022-02-20 16:38:09 -08:00
1 parent fa3d6d0a4c
commit cc986c41f7
4 files changed
+97 -57

No files matched your search

+3
View File
@@ -1,2 +1,5 @@
# Environment # Environment
.env .env
# Pycache
/test/__pycache__/*
+24 -24
View File
@@ -5,7 +5,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl2": { "cl2": {
"name": "class2", "name": "class2",
@@ -13,7 +13,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl3": { "cl3": {
"name": "class3", "name": "class3",
@@ -21,7 +21,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl4": { "cl4": {
"name": "class4", "name": "class4",
@@ -29,7 +29,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl5": { "cl5": {
"name": "class5", "name": "class5",
@@ -37,7 +37,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl6": { "cl6": {
"name": "class6", "name": "class6",
@@ -45,7 +45,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl7": { "cl7": {
"name": "class7", "name": "class7",
@@ -53,7 +53,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl8": { "cl8": {
"name": "class8", "name": "class8",
@@ -61,7 +61,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl9": { "cl9": {
"name": "class9", "name": "class9",
@@ -69,7 +69,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl10": { "cl10": {
"name": "class10", "name": "class10",
@@ -77,7 +77,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl11": { "cl11": {
"name": "class11", "name": "class11",
@@ -85,7 +85,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl12": { "cl12": {
"name": "class12", "name": "class12",
@@ -93,7 +93,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl13": { "cl13": {
"name": "class13", "name": "class13",
@@ -101,7 +101,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl14": { "cl14": {
"name": "class14", "name": "class14",
@@ -109,7 +109,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl15": { "cl15": {
"name": "class15", "name": "class15",
@@ -117,7 +117,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl16": { "cl16": {
"name": "class16", "name": "class16",
@@ -125,7 +125,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl17": { "cl17": {
"name": "class17", "name": "class17",
@@ -133,7 +133,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl18": { "cl18": {
"name": "class18", "name": "class18",
@@ -141,7 +141,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl19": { "cl19": {
"name": "class19", "name": "class19",
@@ -149,7 +149,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl20": { "cl20": {
"name": "class20", "name": "class20",
@@ -157,7 +157,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl21": { "cl21": {
"name": "class21", "name": "class21",
@@ -165,7 +165,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl22": { "cl22": {
"name": "class22", "name": "class22",
@@ -173,7 +173,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl23": { "cl23": {
"name": "class23", "name": "class23",
@@ -181,7 +181,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
}, },
"cl24": { "cl24": {
"name": "class24", "name": "class24",
@@ -189,7 +189,7 @@ courses = {
"credits": 4, "credits": 4,
"gradelevel": 11, "gradelevel": 11,
"totalrequests": 0, "totalrequests": 0,
"studentindexs": [] "studentindexes": []
} }
} }
+12 -10
View File
@@ -9,16 +9,18 @@
# } # }
# } # }
# query = {
# "code1": {
# "name": "hello",
# "value": 3
# }
# }
# if "code1" in myList: # myList = ["a","b","c","d","e","f","g","h","i","j"]
# print(True) # print(len(myList))
# print(list(myList).index("code2"))
myList = ["a","b","c","d","e","f","g","h","i","j"] # for i in range(len(myList)-2): # Subtract last 2 classes as they are alternatives
print(len(myList)) # print()
for i in range(len(myList)-2): # Subtract last 2 classes as they are alternatives # # Get first alternative
print() # print(myList[len(myList)-2])
# Get first alternative
print(myList[len(myList)-2])
+58 -23
View File
@@ -1,5 +1,8 @@
#!/usr/bin/python3 #!/usr/bin/python3
import random import random
import names
import math
from prettytable import PrettyTable
from courses import courses, activeCourses from courses import courses, activeCourses
''' '''
@@ -34,16 +37,16 @@ schedule: {
running example: running example:
running: { running: {
"semester1": { "semester1": {
"block1": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}, "block1": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}},
"block2": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}, "block2": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}},
"block3": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}, "block3": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}},
"block4": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}} "block4": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}}
}, },
"semester2": { "semester2": {
"block1": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}, "block1": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}},
"block2": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}, "block2": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}},
"block3": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}, "block3": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}},
"block4": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}} "block4": {classCode:{"className":name,"students":[student Name]},classCode:{"className":name,"students":[student Name]}}
] ]
} }
''' '''
@@ -57,15 +60,15 @@ running = []
def generateMockStudents(n): def generateMockStudents(n):
for _ in range(n): for _ in range(n):
newStudent = { newStudent = {
"name": "someName", "name": names.get_full_name(),
"requests": [], "requests": [], # list of class codes
"schedule": {} "schedule": {}
} }
# Get list of random class choices with no repeats # Get list of random class choices with no repeats
# 8 primary choices, 2 secondary choices # 8 primary choices, 2 secondary choices
courseSelection = random.sample(range(0, len(courses), 10)) courseSelection = random.sample(range(0, len(courses)), 10)
for courseNum in courseSelection: for courseNum in courseSelection:
newStudent["requests"] = courses[courseNum]["code"] newStudent["requests"].append(list(courses)[courseNum])
mockStudents.append(newStudent) mockStudents.append(newStudent)
@@ -75,20 +78,51 @@ def generateSchedule():
# Tally class request # Tally class request
for request in student["requests"]: for request in student["requests"]:
courses[request]["totalrequests"] += 1 courses[request]["totalrequests"] += 1
courses[request]["studentindexes"].append(i) courses[request]["studentindexes"].append(mockStudents.index(student))
# Add course to active list if enough requests # Add course to active list if enough requests
if courses[request]["totalRequests"] > minReq and courses[request] not in activeCourses: activeCourses.append(courses[request]) if courses[request]["totalrequests"] > minReq and courses[request]["code"] not in activeCourses: activeCourses[courses[request]["code"]] = courses[request]
# calculate # of times to run class
for i in range(len(activeCourses)):
classRunCount = math.floor(activeCourses[list(activeCourses)[i]]["totalrequests"] / classCap)
# If there is 18+ requests left, 1 more class could be run
if (activeCourses[list(activeCourses)[i]]["totalrequests"] % classCap) > minReq: classRunCount += 1
activeCourses[list(activeCourses)[i]]["classRunCount"] = classRunCount
for student in mockStudents: for student in mockStudents:
alternateOffset = len(student["requests"])-8
for i in range(len(student["requests"])-alternateOffset): # Subtract x classes as they are alternatives
currentCourse = student["requests"][i]
while True:
if currentCourse in activeCourses:
blockIndex = 1
semesterIndex = 1
while True:
block = f"block{blockIndex}"
semester = f"semester{semesterIndex}"
if currentCourse in running[semester][block]:
# Add student to class
if len(running[semester][block][currentCourse]["students"]) == classCap:
# TODO: Class is full, find next class or generate new class
break
else:
running[semester][block][currentCourse]["students"].append(student["name"])
student["schedule"][semester][block] = running[semester][block][currentCourse]["name"]
else:
if semesterIndex == 2 and blockIndex == 4:
# TODO: Class does not exist, create class in first available slot
break
elif blockIndex == 4: # 4th Block (final block)
blockIndex = 0 blockIndex = 0
semesterIndex = 0 semesterIndex += 1
for i in range(len(student["requests"])-2): # Subtract last 2 classes as they are alternatives else: blockIndex += 1
currentClass = student break
if student["requests"][i] in activeCourses: elif currentCourse not in activeCourses:
pass if alternateOffset == 0:
elif student["requests"][i] not in activeCourses: # TODO: No more alternatives, solve problem
# Get first alternative break
student["requests"][len(student["requests"])-2] currentCourse = student["requests"][len(student["requests"])-alternateOffset]
alternateOffset -= 1
# for course in courses: # for course in courses:
# blockIndex = 0 # blockIndex = 0
@@ -125,8 +159,9 @@ def generateSchedule():
# else: # else:
# running["semester1"][blockIndex].append(q) # running["semester1"][blockIndex].append(q)
# for studentIndex in course["studentindexs"]: # for studentIndex in course["studentindexes"]:
# if studentIndex == i: # if studentIndex == i:
# pass # pass
generateMockStudents(400) generateMockStudents(400)
generateSchedule()