requisite_processor 0.1.5__tar.gz → 0.2.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {requisite_processor-0.1.5 → requisite_processor-0.2.6}/PKG-INFO +1 -1
- {requisite_processor-0.1.5 → requisite_processor-0.2.6}/pyproject.toml +1 -1
- {requisite_processor-0.1.5 → requisite_processor-0.2.6}/requisite_processor/requisite_processor.py +55 -0
- {requisite_processor-0.1.5 → requisite_processor-0.2.6}/README.md +0 -0
- {requisite_processor-0.1.5 → requisite_processor-0.2.6}/requisite_processor/__init__.py +0 -0
- {requisite_processor-0.1.5 → requisite_processor-0.2.6}/requisite_processor/requisite_check.py +0 -0
{requisite_processor-0.1.5 → requisite_processor-0.2.6}/requisite_processor/requisite_processor.py
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import re
|
|
2
|
+
from typing import List
|
|
2
3
|
from requisite_processor.requisite_check import RequisiteCheckResult
|
|
3
4
|
|
|
4
5
|
class RequisiteProcessor:
|
|
@@ -88,6 +89,28 @@ class RequisiteProcessor:
|
|
|
88
89
|
return self.__traverse_prereqs(prereq_rule, academic_period, courses_taken, test_scores, ignore_grades)
|
|
89
90
|
|
|
90
91
|
|
|
92
|
+
def fast_check(self, course_code: str, courses_taken = None, academic_period = None) -> bool:
|
|
93
|
+
if academic_period is None:
|
|
94
|
+
academic_period = self.latest_available_academic_period
|
|
95
|
+
|
|
96
|
+
if academic_period not in self.prerequisite_rules:
|
|
97
|
+
raise self.AcademicPeriodNotFound(f"The academic period '{academic_period}' is not found in the given prerequisite data.")
|
|
98
|
+
|
|
99
|
+
if course_code not in self.prerequisite_rules[academic_period]:
|
|
100
|
+
raise self.CourseNotFound(f"Course {course_code} not found in {academic_period}")
|
|
101
|
+
|
|
102
|
+
prereq_rule = self.prerequisite_rules[academic_period][course_code]
|
|
103
|
+
|
|
104
|
+
if prereq_rule is None:
|
|
105
|
+
return True
|
|
106
|
+
|
|
107
|
+
if courses_taken is None:
|
|
108
|
+
courses_taken = []
|
|
109
|
+
|
|
110
|
+
return self.__fast_check(prereq_rule, courses_taken)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
91
114
|
def __grade_score(self, grade) -> float:
|
|
92
115
|
grades = {
|
|
93
116
|
'A+': 4.3, 'A': 4, 'A-': 3.7,
|
|
@@ -95,6 +118,7 @@ class RequisiteProcessor:
|
|
|
95
118
|
'C+': 2.3, 'C': 2, 'C-': 2,
|
|
96
119
|
'CR': 2,
|
|
97
120
|
'D+': 1.7, 'D': 1, 'D-': 0.7,
|
|
121
|
+
'F': 0
|
|
98
122
|
}
|
|
99
123
|
|
|
100
124
|
processed_grade = re.sub('(T|X|R|\\*)', '', grade)
|
|
@@ -186,6 +210,37 @@ class RequisiteProcessor:
|
|
|
186
210
|
return result
|
|
187
211
|
|
|
188
212
|
|
|
213
|
+
def __fast_check(self, prereq_data: dict, courses_taken: List[str]) -> bool:
|
|
214
|
+
if prereq_data['type'] == 'placement_test':
|
|
215
|
+
raise NotImplementedError('Not Implemented')
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
if prereq_data['type'] == 'course':
|
|
219
|
+
for course in courses_taken:
|
|
220
|
+
if course == prereq_data['course']['code']:
|
|
221
|
+
return True
|
|
222
|
+
|
|
223
|
+
return False
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
if prereq_data['type'] == 'and':
|
|
227
|
+
for sub_prereq_data in prereq_data['operands']:
|
|
228
|
+
if self.__fast_check(sub_prereq_data, courses_taken) is False:
|
|
229
|
+
return False
|
|
230
|
+
|
|
231
|
+
return True
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
if prereq_data['type'] == 'or':
|
|
235
|
+
for sub_prereq_data in prereq_data['operands']:
|
|
236
|
+
if self.__fast_check(sub_prereq_data, courses_taken) is True:
|
|
237
|
+
return True
|
|
238
|
+
|
|
239
|
+
return False
|
|
240
|
+
|
|
241
|
+
return False
|
|
242
|
+
|
|
243
|
+
|
|
189
244
|
def __reduce_rule(self, prereq_data, filter_rule):
|
|
190
245
|
if prereq_data is None:
|
|
191
246
|
return None
|
|
File without changes
|
|
File without changes
|
{requisite_processor-0.1.5 → requisite_processor-0.2.6}/requisite_processor/requisite_check.py
RENAMED
|
File without changes
|