From 353d0c1b68b1085ee846a57c155f724057d7f89b Mon Sep 17 00:00:00 2001 From: KaranChauhan777 Date: Wed, 20 Nov 2024 17:17:34 +0530 Subject: [PATCH 01/67] Solved Time constants problem --- Samples/Fitness_Files/LabConstraints.py | 167 ++++++++++++++++++++++++ Samples/Mutation_Files/crossover.py | 138 ++++++++++++++++++++ 2 files changed, 305 insertions(+) create mode 100644 Samples/Fitness_Files/LabConstraints.py diff --git a/Samples/Fitness_Files/LabConstraints.py b/Samples/Fitness_Files/LabConstraints.py new file mode 100644 index 0000000..32896c1 --- /dev/null +++ b/Samples/Fitness_Files/LabConstraints.py @@ -0,0 +1,167 @@ +import random +import json +from constants.time_intervals import TimeIntervalConstant + +# Constants +LABS = ["Lab1", "Lab2", "Lab3", "Lab4"] +CLASSES = ["Class1", "Class2", "Class3", "Class4"] +TEACHERS = ["Teacher1", "Teacher2", "Teacher3", "Teacher4"] + +# Constraints +MAX_LAB_COUNT = 2 # Max labs per week for a teacher +MAX_CLASS_COUNT = 3 # Max classes per week for a teacher +MAX_TEACHER_WORKLOAD = 5 # Max hours a teacher can work in a week +MAX_CONTINUOUS_CLASSES = 2 # Max consecutive hours for a teacher + +# Workload for subjects +SUBJECT_WORKLOAD = { + "TCS-531": 3, + "TCS-502": 3, + "TCS-503": 3, + "PCS-506": 1, + "PCS-503": 1, + "TMA-502": 3, + "PMA-502": 1, + "TCS-509": 3, + "XCS-501": 2, + "CSP-501": 1, + "SCS-501": 1, + "Placement_Class": 1 +} + +# Teacher availability and subjects they teach +TEACHER_SUBJECTS = { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"], + "PCS-503": ["RS11", "DP07", "SP06", "VD25"], + "Placement_Class": ["AK26"] +} + +# Initialize available time slots +TimeSlots = TimeIntervalConstant.time_slots # Assuming TimeIntervalConstant has a list of time intervals + + +class TimetableFitness: + def __init__(self): + self.teachers = TEACHERS + self.labs = LABS + self.classes = CLASSES + self.subject_workload = SUBJECT_WORKLOAD + self.teacher_subjects = TEACHER_SUBJECTS + self.teacher_schedule = {teacher: {} for teacher in self.teachers} + self.section_strength = {cls: random.randint(40, 60) for cls in self.classes} + + def assign_classes_and_labs(self): + """ + Assign classes and labs to teachers based on constraints and time slots. + """ + for teacher in self.teachers: + subjects = [subject for subject, teachers in TEACHER_SUBJECTS.items() if teacher in teachers] + for subject in subjects: + time_slot = random.choice(TimeSlots) # Randomly select an available time slot + if time_slot not in self.teacher_schedule[teacher]: + self.teacher_schedule[teacher][time_slot] = subject + + def LabNo(self): + """ + Check if the number of labs assigned is within the constraints. + """ + for teacher, schedule in self.teacher_schedule.items(): + lab_count = sum(1 for subject in schedule.values() if subject in self.labs) + if lab_count > MAX_LAB_COUNT: + return False + return True + + def ClassNo(self): + """ + Check if the number of classes assigned is within the constraints. + """ + for teacher, schedule in self.teacher_schedule.items(): + class_count = sum(1 for subject in schedule.values() if subject in self.classes) + if class_count > MAX_CLASS_COUNT: + return False + return True + + def TeacherWorkload(self): + """ + Ensure total workload per teacher is within the limit. + """ + for teacher, schedule in self.teacher_schedule.items(): + total_hours = sum(SUBJECT_WORKLOAD.get(subject, 0) for subject in schedule.values()) + if total_hours > MAX_TEACHER_WORKLOAD: + return False + return True + + def ContinuousClasses(self): + """ + Ensure teachers do not have more than the allowed continuous classes. + """ + for teacher, schedule in self.teacher_schedule.items(): + sorted_slots = sorted(schedule.keys()) + continuous_count = 0 + for i in range(len(sorted_slots) - 1): + if TimeSlots.index(sorted_slots[i + 1]) - TimeSlots.index(sorted_slots[i]) == 1: + continuous_count += 1 + if continuous_count > MAX_CONTINUOUS_CLASSES: + return False + else: + continuous_count = 0 + return True + + def fitnessFunc(self): + """ + Calculate fitness score based on all constraints. + """ + fitness_score = 0 + + if self.LabNo(): + fitness_score += 10 + else: + fitness_score -= 10 + + if self.ClassNo(): + fitness_score += 10 + else: + fitness_score -= 10 + + if self.TeacherWorkload(): + fitness_score += 10 + else: + fitness_score -= 10 + + if self.ContinuousClasses(): + fitness_score += 10 + else: + fitness_score -= 10 + + return fitness_score + + +# Main Execution +timetable_fitness = TimetableFitness() + +# Assign classes and labs to teachers +timetable_fitness.assign_classes_and_labs() + +# Calculate fitness score +fitness_score = timetable_fitness.fitnessFunc() + +# Output +print(f"Final Fitness Score: {fitness_score}") + +# Save results to a JSON file +output = { + "teacher_schedule": timetable_fitness.teacher_schedule, + "fitness_score": fitness_score, + "section_strength": timetable_fitness.section_strength +} +with open("Timetable_Fitness_Result.json", "w") as f: + json.dump(output, f, indent=4) diff --git a/Samples/Mutation_Files/crossover.py b/Samples/Mutation_Files/crossover.py index e69de29..7fdd170 100644 --- a/Samples/Mutation_Files/crossover.py +++ b/Samples/Mutation_Files/crossover.py @@ -0,0 +1,138 @@ +import random +from constants.TimeIntervals import TimeIntervalConstant +from constants.constant import WorkingDays + + +class Chromosome: + def __init__(self): + self.sections = ["A", "B", "C", "D"] + self.time_slots = TimeIntervalConstant.time_slots + self.days = WorkingDays.days + self.subject_teacher_map = { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"] + } + self.classrooms = ["R1", "R2", "R3", "R4", "R5"] + self.room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} + self.section_strength = {"A": 200, "B": 200, "C": 200, "D": 100} + + def create_chromosome(self): + schedule = {} + teacher_schedule = {slot: {} for slot in self.time_slots} + room_schedule = {slot: {} for slot in self.time_slots} + + for day in self.days: + schedule[day] = {} + for section in self.sections: + schedule[day][section] = [] + for time_slot in self.time_slots: + subject = random.choice(list(self.subject_teacher_map.keys())) + teacher = random.choice(self.subject_teacher_map[subject]) + classroom = random.choice(self.classrooms) + + if (teacher not in teacher_schedule[time_slot] and + section not in room_schedule[time_slot].get(classroom, [])): + entry = { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": classroom, + "time_slot": time_slot + } + schedule[day][section].append(entry) + teacher_schedule[time_slot][teacher] = True + if classroom not in room_schedule[time_slot]: + room_schedule[time_slot][classroom] = [] + room_schedule[time_slot][classroom].append(section) + return schedule + + def create_multiple_chromosomes(self, num_chromosomes): + chromosomes = [] + for _ in range(num_chromosomes): + chromosomes.append(self.create_chromosome()) + return chromosomes + + def crossover(self, parent1, parent2): + """Perform single-point crossover on two parent chromosomes.""" + offspring1 = {} + offspring2 = {} + + days = self.days + crossover_point = random.randint(1, len(days) - 1) + + for i, day in enumerate(days): + if i < crossover_point: + offspring1[day] = parent1[day] + offspring2[day] = parent2[day] + else: + offspring1[day] = parent2[day] + offspring2[day] = parent1[day] + + return offspring1, offspring2 + + def mutate_timetable(self, chromosome, mutation_rate=0.7): + """Applies mutation to a timetable chromosome.""" + classrooms = self.classrooms + sections = self.sections + mutated_chromosome = chromosome.copy() + + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + if random.random() < mutation_rate: + entry["time_slot"] = random.choice(self.time_slots) + entry["classroom_id"] = random.choice(classrooms) + entry["section"] = random.choice(sections) + + return mutated_chromosome + + def create_population_with_crossover_and_mutation(self, parent_chromosomes, num_offspring, mutation_rate=0.7): + """Generate offspring using crossover and mutation from parent chromosomes.""" + offspring = [] + while len(offspring) < num_offspring: + parent1, parent2 = random.sample(parent_chromosomes, 2) + child1, child2 = self.crossover(parent1, parent2) + + child1 = self.mutate_timetable(child1, mutation_rate) + child2 = self.mutate_timetable(child2, mutation_rate) + + offspring.append(child1) + if len(offspring) < num_offspring: + offspring.append(child2) + + return offspring + + def print_chromosomes(self, chromosomes): + for idx, chromosome in enumerate(chromosomes, 1): + print(f"\nChromosome {idx}:") + for day, sections in chromosome.items(): + print(f" {day}:") + for section, schedule in sections.items(): + print(f" Section {section}:") + for entry in schedule: + print(f" Time Slot: {entry['time_slot']}") + print(f" Teacher ID: {entry['teacher_id']}") + print(f" Subject ID: {entry['subject_id']}") + print(f" Classroom ID: {entry['classroom_id']}") + print() + + +if __name__ == "__main__": + chromosome_constant = Chromosome() + num_parents = 4 + num_offspring = 6 + + parent_chromosomes = chromosome_constant.create_multiple_chromosomes(num_parents) + print("Parent Chromosomes:") + chromosome_constant.print_chromosomes(parent_chromosomes) + + offspring = chromosome_constant.create_population_with_crossover_and_mutation(parent_chromosomes, num_offspring) + print("\nOffspring Chromosomes:") + chromosome_constant.print_chromosomes(offspring) From 582ccd130b8caf72d26a8f3fbd5455ad9daefe91 Mon Sep 17 00:00:00 2001 From: KaranChauhan777 Date: Thu, 28 Nov 2024 16:40:39 +0530 Subject: [PATCH 02/67] Tested function in each file by checking test case is running or not. --- test_suite/Crossover_Test.py | 629 ++++++++++++++++++++++++++++++ test_suite/Fitness_Test.py | 692 ++++++++++++++++++++++++++++++++++ test_suite/Mutation_Test.py | 366 ++++++++++++++++++ test_suite/ReadMe.md | 7 + test_suite/Selection_Tests.py | 298 +++++++++++++++ test_suite/unit_test.py | 0 6 files changed, 1992 insertions(+) create mode 100644 test_suite/Crossover_Test.py create mode 100644 test_suite/Fitness_Test.py create mode 100644 test_suite/Mutation_Test.py create mode 100644 test_suite/ReadMe.md create mode 100644 test_suite/Selection_Tests.py create mode 100644 test_suite/unit_test.py diff --git a/test_suite/Crossover_Test.py b/test_suite/Crossover_Test.py new file mode 100644 index 0000000..bce6513 --- /dev/null +++ b/test_suite/Crossover_Test.py @@ -0,0 +1,629 @@ +#CROSSOVER + +#1. def create_chromosome(self): + +import random +import unittest + +# TimetableScheduler Class +class TimetableScheduler: + def __init__(self): + self.sections = ["A", "B", "C", "D"] + self.time_slots = [1, 2, 3, 4, 5, 6, 7] # Time slots per day + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.subject_teacher_map = { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"] + } + self.classrooms = ["R1", "R2", "R3", "R4", "R5"] + self.room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} + self.section_strength = {"A": 200, "B": 200, "C": 200, "D": 100} + + def create_chromosome(self): + schedule = {} + teacher_schedule = {slot: set() for slot in self.time_slots} + room_schedule = {slot: {} for slot in self.time_slots} + + for day in self.days: + schedule[day] = {} + for section in self.sections: + schedule[day][section] = [] + used_time_slots = set() + + while len(schedule[day][section]) < 7: + subject = random.choice(list(self.subject_teacher_map.keys())) + teacher = random.choice(self.subject_teacher_map[subject]) + classroom = random.choice(self.classrooms) + + # Find an available time slot + available_slots = [ + slot for slot in self.time_slots if slot not in used_time_slots + ] + if not available_slots: + break + + time_slot = random.choice(available_slots) + + # Check for conflicts + if (teacher not in teacher_schedule[time_slot] and + section not in room_schedule[time_slot].get(classroom, [])): + + entry = { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": classroom, + "time_slot": time_slot + } + schedule[day][section].append(entry) + used_time_slots.add(time_slot) + + # Update schedules to avoid future conflicts + teacher_schedule[time_slot].add(teacher) + if classroom not in room_schedule[time_slot]: + room_schedule[time_slot][classroom] = [] + room_schedule[time_slot][classroom].append(section) + + # Ensure the section has all 7 slots for the day + if len(schedule[day][section]) < 7: + raise RuntimeError( + f"Failed to generate a complete schedule for section {section} on {day}." + ) + + return schedule + + +# Unit Test Class for TimetableScheduler +class TestTimetableScheduler(unittest.TestCase): + def setUp(self): + self.scheduler = TimetableScheduler() + + def test_schedule_for_all_days_and_sections(self): + schedule = self.scheduler.create_chromosome() + + # Check every day has all sections with 7 time slots + for day in self.scheduler.days: + self.assertIn(day, schedule) + for section in self.scheduler.sections: + self.assertIn(section, schedule[day]) + self.assertEqual(len(schedule[day][section]), 7) + + def test_conflict_free_teacher_allocation(self): + schedule = self.scheduler.create_chromosome() + + # Check for teacher conflicts + for day in self.scheduler.days: + teacher_schedule = {slot: set() for slot in self.scheduler.time_slots} + for section in self.scheduler.sections: + for entry in schedule[day][section]: + teacher = entry["teacher_id"] + time_slot = entry["time_slot"] + self.assertNotIn(teacher, teacher_schedule[time_slot]) + teacher_schedule[time_slot].add(teacher) + + def test_room_capacity(self): + schedule = self.scheduler.create_chromosome() + + # Ensure room capacity meets section strength + for day in self.scheduler.days: + for section in self.scheduler.sections: + for entry in schedule[day][section]: + classroom = entry["classroom_id"] + self.assertGreaterEqual( + self.scheduler.room_capacity[classroom], + self.scheduler.section_strength[section] + ) + + def test_time_slots_coverage(self): + schedule = self.scheduler.create_chromosome() + + # Check if all time slots are covered per section per day + for day in self.scheduler.days: + for section in self.scheduler.sections: + time_slots = [entry["time_slot"] for entry in schedule[day][section]] + self.assertEqual(len(set(time_slots)), 7) # Ensure exactly 7 slots + + +if __name__ == "__main__": + unittest.main() + +#2. def create_multiple_chromosomes(self, num_chromosomes): + +import random +import unittest +import time + +class TimetableScheduler: + def __init__(self, subjects, rooms, days, sections, max_attempts=10): + self.subjects = subjects # List of subject codes + self.rooms = rooms # List of available rooms + self.days = days # List of days in the week + self.sections = sections # List of sections + self.max_attempts = max_attempts # Max attempts to find a valid slot + + self.schedule = {} # Schedule dictionary to store the timetable + + def generate_random_schedule(self): + """ Generate a random schedule for each subject and section. """ + timetable = {} + for subject in self.subjects: + for section in self.sections: + attempts = 0 + while attempts < self.max_attempts: + # Randomly select a day, room, and time slot + day = random.choice(self.days) + room = random.choice(self.rooms) + time_slot = f"{day}_{room}" + + # Check if the time_slot is available (no conflicts) + if self.is_slot_available(subject, section, time_slot): + timetable[subject] = (section, day, room, time_slot) + break + else: + attempts += 1 + if attempts == self.max_attempts: + raise RuntimeError( + f"Failed to assign a valid slot for {subject} on {day} for {section} after {attempts} attempts." + ) + return timetable + + def is_slot_available(self, subject, section, time_slot): + """ Check if a slot is available by ensuring no conflicts. """ + # Check if any other subject has been scheduled in the same time slot + for key, value in self.schedule.items(): + if value[3] == time_slot: # Slot conflict + return False + return True + + def create_chromosome(self): + """ Create a chromosome that represents a valid timetable. """ + attempts = 0 + while attempts < self.max_attempts: + try: + timetable = self.generate_random_schedule() + self.schedule = timetable # Assign the generated schedule to the global timetable + return timetable + except RuntimeError as e: + print(f"Error: {e}") + attempts += 1 + if attempts == self.max_attempts: + raise RuntimeError("Failed to generate a valid timetable after multiple attempts.") + # Reset and retry + self.schedule = {} + + return None + + def create_multiple_chromosomes(self, num_chromosomes): + """ Create multiple chromosomes (timetables). """ + chromosomes = [] + for _ in range(num_chromosomes): + chromosome = self.create_chromosome() + if chromosome: + chromosomes.append(chromosome) + else: + print("Failed to create a valid chromosome.") + return chromosomes + + +class TestTimetableScheduler(unittest.TestCase): + + def setUp(self): + """ Setup the test case environment. """ + self.subjects = ['PCS-506', 'XCS-501', 'TCS-502', 'CSP-501', 'TCS-531'] + self.rooms = ['Room 101', 'Room 102', 'Room 103'] + self.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] + self.sections = ['A', 'B', 'C'] + + self.scheduler = TimetableScheduler(self.subjects, self.rooms, self.days, self.sections) + + def test_chromosome_structure(self): + """ Test the structure of each chromosome. """ + num_chromosomes = 3 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + for idx, chromosome in enumerate(chromosomes): + print(f"Chromosome {idx+1}:") + for subject, (section, day, room, time_slot) in chromosome.items(): + print(f"{subject} - {section} - {day} - {room} - {time_slot}") + print() + + def test_conflict_free_chromosomes(self): + """ Test that chromosomes are conflict-free. """ + num_chromosomes = 3 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + for idx, chromosome in enumerate(chromosomes): + for subject, (section, day, room, time_slot) in chromosome.items(): + # Check for conflicts (same time slot for different subjects) + for other_subject, other_values in chromosome.items(): + if subject != other_subject and time_slot == other_values[3]: + self.fail(f"Conflict detected: {subject} and {other_subject} in the same time slot: {time_slot}") + + def test_create_multiple_chromosomes_count(self): + """ Test if the correct number of chromosomes is generated. """ + num_chromosomes = 5 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + def test_room_capacity_in_multiple_chromosomes(self): + """ Test room capacity constraint across multiple chromosomes. """ + num_chromosomes = 3 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + # Test room capacity constraints for each timetable (e.g., number of rooms used) + for idx, chromosome in enumerate(chromosomes): + room_usage = {} + for subject, (section, day, room, time_slot) in chromosome.items(): + room_usage[room] = room_usage.get(room, 0) + 1 + print(f"Chromosome {idx+1} Room Usage: {room_usage}") + + +# Run the tests +if __name__ == "__main__": + unittest.main() + +#3. def crossover(self, parent1, parent2): + +import random +import unittest + +class TimetableScheduler: + def __init__(self, subjects, rooms, days, sections): + self.subjects = subjects # List of subject codes + self.rooms = rooms # List of available rooms + self.days = days # List of days in the week + self.sections = sections # List of sections + + def crossover(self, parent1, parent2): + """Perform single-point crossover on two parent chromosomes.""" + offspring1 = {} + offspring2 = {} + + days = self.days + crossover_point = random.randint(1, len(days) - 1) + + for i, day in enumerate(days): + if i < crossover_point: + offspring1[day] = parent1[day] + offspring2[day] = parent2[day] + else: + offspring1[day] = parent2[day] + offspring2[day] = parent1[day] + + return offspring1, offspring2 + +# Unit test for the crossover function +class TestCrossoverMethod(unittest.TestCase): + + def setUp(self): + # Example data to simulate chromosomes for testing + self.subjects = ['PCS-506', 'XCS-501', 'TCS-502', 'CSP-501', 'TCS-531'] + self.rooms = ['Room 101', 'Room 102', 'Room 103'] + self.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] + self.sections = ['A', 'B', 'C'] + + # Example chromosomes (parents) + self.parent1 = { + 'Monday': 'PCS-506', + 'Tuesday': 'XCS-501', + 'Wednesday': 'TCS-502', + 'Thursday': 'CSP-501', + 'Friday': 'TCS-531' + } + self.parent2 = { + 'Monday': 'TCS-502', + 'Tuesday': 'PCS-506', + 'Wednesday': 'CSP-501', + 'Thursday': 'TCS-531', + 'Friday': 'XCS-501' + } + + # Create an instance of the TimetableScheduler + self.scheduler = TimetableScheduler(self.subjects, self.rooms, self.days, self.sections) + + def test_crossover_correct_number_of_offspring(self): + """Test if crossover produces exactly two offspring.""" + offspring1, offspring2 = self.scheduler.crossover(self.parent1, self.parent2) + self.assertEqual(len(offspring1), len(self.days)) + self.assertEqual(len(offspring2), len(self.days)) + + def test_crossover_correct_assignment(self): + """Test if crossover correctly assigns the parts from parents.""" + offspring1, offspring2 = self.scheduler.crossover(self.parent1, self.parent2) + + # Get the crossover point from the offspring's first day in the timetable + crossover_point = next(i for i, day in enumerate(self.days) if offspring1[self.days[i]] != self.parent1[self.days[i]]) + + # Check the assignment from parent1 and parent2 in the offspring + for i in range(crossover_point): + self.assertEqual(offspring1[self.days[i]], self.parent1[self.days[i]]) + self.assertEqual(offspring2[self.days[i]], self.parent2[self.days[i]]) + + for i in range(crossover_point, len(self.days)): + self.assertEqual(offspring1[self.days[i]], self.parent2[self.days[i]]) + self.assertEqual(offspring2[self.days[i]], self.parent1[self.days[i]]) + + def test_crossover_randomness(self): + """Test if the crossover point is truly random by checking different results.""" + offspring1_a, offspring2_a = self.scheduler.crossover(self.parent1, self.parent2) + offspring1_b, offspring2_b = self.scheduler.crossover(self.parent1, self.parent2) + + # Check that the offspring are not the same (i.e., crossover point was different) + self.assertNotEqual(offspring1_a, offspring1_b) + self.assertNotEqual(offspring2_a, offspring2_b) + + def test_crossover_empty_parent(self): + """Test if crossover handles empty parents gracefully.""" + empty_parent = {} + with self.assertRaises(KeyError): + self.scheduler.crossover(empty_parent, self.parent2) + + with self.assertRaises(KeyError): + self.scheduler.crossover(self.parent1, empty_parent) + + +if __name__ == '__main__': + unittest.main() + +#4. def mutate_timetable(self, chromosome, mutation_rate=0.7): + +import random +import unittest + +class TimetableScheduler: + def __init__(self, classrooms, sections, time_slots): + self.classrooms = classrooms # List of classrooms available for assignment + self.sections = sections # List of sections + self.time_slots = time_slots # List of time slots available for scheduling + + def mutate_timetable(self, chromosome, mutation_rate=0.7): + """Applies mutation to a timetable chromosome.""" + classrooms = self.classrooms + sections = self.sections + mutated_chromosome = chromosome.copy() + + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + if random.random() < mutation_rate: + entry["time_slot"] = random.choice(self.time_slots) + entry["classroom_id"] = random.choice(classrooms) + entry["section"] = random.choice(sections) + + return mutated_chromosome + + +class TestMutateTimetable(unittest.TestCase): + + def setUp(self): + # Example data to simulate a timetable chromosome + self.classrooms = ['Room 101', 'Room 102', 'Room 103'] + self.sections = ['A', 'B', 'C'] + self.time_slots = ['9:00 AM', '10:00 AM', '11:00 AM', '1:00 PM', '2:00 PM'] + + # Example timetable (chromosome) + self.chromosome = { + 'Monday': { + 'A': [{'time_slot': '9:00 AM', 'classroom_id': 'Room 101', 'section': 'A'}], + 'B': [{'time_slot': '10:00 AM', 'classroom_id': 'Room 102', 'section': 'B'}], + 'C': [{'time_slot': '11:00 AM', 'classroom_id': 'Room 103', 'section': 'C'}], + }, + 'Tuesday': { + 'A': [{'time_slot': '9:00 AM', 'classroom_id': 'Room 101', 'section': 'A'}], + 'B': [{'time_slot': '10:00 AM', 'classroom_id': 'Room 102', 'section': 'B'}], + 'C': [{'time_slot': '11:00 AM', 'classroom_id': 'Room 103', 'section': 'C'}], + } + } + + # Create an instance of the TimetableScheduler + self.scheduler = TimetableScheduler(self.classrooms, self.sections, self.time_slots) + + def test_mutation_occurrence(self): + """Test if the mutation occurs with the expected frequency.""" + mutation_rate = 0.7 # Mutation rate is set to 70% + + # Run multiple mutations to get more stable results + num_runs = 10 # You can try more runs for higher accuracy + mutation_count = 0 + total_entries = sum(len(entries) for day in self.chromosome.values() for section, entries in day.items()) + + for _ in range(num_runs): + mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate) + + # Count how many entries were mutated + mutated_count = 0 + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + # Check if the mutation applied (i.e., values changed) + if entry["time_slot"] != '9:00 AM' or entry["classroom_id"] != 'Room 101' or entry["section"] != 'A': + mutated_count += 1 + + mutation_percentage = mutated_count / total_entries + mutation_count += mutation_percentage # Accumulate mutation percentages + + # Calculate average mutation rate across runs + average_mutation_percentage = mutation_count / num_runs + print(f"Average Mutation Rate: {average_mutation_percentage}") # To check the mutation rate in the output + + # Assert that mutation occurs in the expected range + self.assertGreaterEqual(average_mutation_percentage, 0.5) # At least 50% mutation + self.assertLessEqual(average_mutation_percentage, 1.0) # No more than 100% mutation + + def test_mutate_timetable(self): + """Test if mutation correctly applies changes to the timetable.""" + mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate=1.0) + + # Check if mutation has applied changes + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + # Check if time_slot, classroom_id, and section have been mutated + self.assertIn(entry["time_slot"], self.time_slots) + self.assertIn(entry["classroom_id"], self.classrooms) + self.assertIn(entry["section"], self.sections) + + def test_mutation_validity(self): + """Test if the mutated timetable remains valid.""" + mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate=1.0) + + # Validate that the mutation results in valid values (time_slot, classroom_id, section) + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + # Ensure the mutated values are within the expected lists + self.assertIn(entry["time_slot"], self.time_slots) + self.assertIn(entry["classroom_id"], self.classrooms) + self.assertIn(entry["section"], self.sections) + + def test_mutate_empty_chromosome(self): + """Test mutation with an empty chromosome.""" + empty_chromosome = {} + mutated_chromosome = self.scheduler.mutate_timetable(empty_chromosome, mutation_rate=1.0) + self.assertEqual(mutated_chromosome, empty_chromosome) # Should remain empty + + +if __name__ == '__main__': + unittest.main() + +#5.def print_chromosomes(self, chromosomes): + +import unittest +from unittest.mock import patch +from io import StringIO + +class TimetableScheduler: + def __init__(self, classrooms, sections, teachers, subjects, time_slots): + self.classrooms = classrooms # List of classrooms available for assignment + self.sections = sections # List of sections + self.teachers = teachers # List of teacher IDs + self.subjects = subjects # List of subject IDs + self.time_slots = time_slots # List of time slots available for scheduling + + def print_chromosomes(self, chromosomes): + for idx, chromosome in enumerate(chromosomes, 1): + print(f"\nChromosome {idx}:") + for day, sections in chromosome.items(): + print(f" {day}:") + for section, schedule in sections.items(): + print(f" Section {section}:") + for entry in schedule: + print(f" Time Slot: {entry['time_slot']}") + print(f" Teacher ID: {entry['teacher_id']}") + print(f" Subject ID: {entry['subject_id']}") + print(f" Classroom ID: {entry['classroom_id']}") + print() + + +class TestTimetableScheduler(unittest.TestCase): + + def setUp(self): + # Example data to simulate a timetable chromosome + self.classrooms = ['Room 101', 'Room 102', 'Room 103'] + self.sections = ['A', 'B', 'C'] + self.teachers = ['T1', 'T2', 'T3'] + self.subjects = ['S1', 'S2', 'S3'] + self.time_slots = ['9:00 AM', '10:00 AM', '11:00 AM', '1:00 PM', '2:00 PM'] + + # Example timetable chromosomes + self.chromosomes = [ + { + 'Monday': { + 'A': [{'time_slot': '9:00 AM', 'teacher_id': 'T1', 'subject_id': 'S1', 'classroom_id': 'Room 101'}], + 'B': [{'time_slot': '10:00 AM', 'teacher_id': 'T2', 'subject_id': 'S2', 'classroom_id': 'Room 102'}], + 'C': [{'time_slot': '11:00 AM', 'teacher_id': 'T3', 'subject_id': 'S3', 'classroom_id': 'Room 103'}], + }, + 'Tuesday': { + 'A': [{'time_slot': '9:00 AM', 'teacher_id': 'T1', 'subject_id': 'S1', 'classroom_id': 'Room 101'}], + 'B': [{'time_slot': '10:00 AM', 'teacher_id': 'T2', 'subject_id': 'S2', 'classroom_id': 'Room 102'}], + 'C': [{'time_slot': '11:00 AM', 'teacher_id': 'T3', 'subject_id': 'S3', 'classroom_id': 'Room 103'}], + } + } + ] + + # Create an instance of the TimetableScheduler + self.scheduler = TimetableScheduler(self.classrooms, self.sections, self.teachers, self.subjects, self.time_slots) + + @patch('sys.stdout', new_callable=StringIO) + def test_print_chromosomes(self, mock_stdout): + """Test if print_chromosomes correctly prints the chromosome information.""" + self.scheduler.print_chromosomes(self.chromosomes) + + # Get the printed output + output = mock_stdout.getvalue() + + # Expected output for the given chromosomes + expected_output = """ +Chromosome 1: + Monday: + Section A: + Time Slot: 9:00 AM + Teacher ID: T1 + Subject ID: S1 + Classroom ID: Room 101 + + Section B: + Time Slot: 10:00 AM + Teacher ID: T2 + Subject ID: S2 + Classroom ID: Room 102 + + Section C: + Time Slot: 11:00 AM + Teacher ID: T3 + Subject ID: S3 + Classroom ID: Room 103 + + Tuesday: + Section A: + Time Slot: 9:00 AM + Teacher ID: T1 + Subject ID: S1 + Classroom ID: Room 101 + + Section B: + Time Slot: 10:00 AM + Teacher ID: T2 + Subject ID: S2 + Classroom ID: Room 102 + + Section C: + Time Slot: 11:00 AM + Teacher ID: T3 + Subject ID: S3 + Classroom ID: Room 103 +""" + # Clean up any extra whitespace from the actual output + output = output.strip() + + # Assert if the output matches the expected output + self.assertEqual(output, expected_output.strip()) + +if __name__ == '__main__': + unittest.main() diff --git a/test_suite/Fitness_Test.py b/test_suite/Fitness_Test.py new file mode 100644 index 0000000..43b709b --- /dev/null +++ b/test_suite/Fitness_Test.py @@ -0,0 +1,692 @@ +# FITNESS + +#1. def __init__(self, sections): + +import unittest + +class Sections: + def __init__(self, num_sections): + # Generate sections as sectionA, sectionB, sectionC, etc. + self.sections = [f"section{chr(65 + i)}" for i in range(num_sections)] + + def __iter__(self): + # Make the class iterable by returning an iterator over the sections list + return iter(self.sections) + + def __len__(self): + # Optionally, define the length of the sections + return len(self.sections) + + def __getitem__(self, index): + # Optional: Enable indexing for the sections + return self.sections[index] + + +# TimetableFitness Class (to manage and calculate timetable fitness) +class TimetableFitness: + def __init__(self, sections): + # Ensure `self.sections` is iterable (convert Sections object to a list if needed) + if isinstance(sections, Sections): + self.sections = list(sections) # Convert to list if it is a custom iterable object + else: + self.sections = sections # Assume it is already a list or other iterable + + # Mocking additional data attributes for the sake of this example + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.time_slots = ["9-10 AM", "10-11 AM", "11-12 PM", "1-2 PM", "2-3 PM"] + + # Teacher-subject mapping + self.subject_teacher_map = {"TCS-531": ["Teacher1", "Teacher2"], "TCS-502": ["Teacher3", "Teacher4"]} + + # Classroom and capacity details + self.classrooms = ["Room1", "Room2", "Room3"] + self.room_capacity = {"Room1": 30, "Room2": 25, "Room3": 40} + + # Data structures for tracking schedules + self.teacher_schedule = {slot: {} for slot in self.time_slots} + self.room_schedule = {slot: {} for slot in self.time_slots} + self.assigned_teachers = {section: {} for section in self.sections} + self.section_rooms = {section: self.classrooms[i % len(self.classrooms)] for i, section in enumerate(self.sections)} + + # Subject-specific constraints + self.subject_weekly_quota = { + "TCS-531": 3, + "TCS-502": 3, + "Placement_Class": 1 + } + + self.weekly_assignments = {section: {subject: 0 for subject in self.subject_weekly_quota} for section in self.sections} + + # Teacher constraints + self.teacher_preferences = {teacher_id: [1, 2, 3, 4, 5, 6, 7] for teacher_id in ["Teacher1", "Teacher2", "Teacher3", "Teacher4"]} + self.teacher_work_load = {teacher: 5 for teacher in self.teacher_preferences} + self.teacher_assignments = {} + + +# Unit Test Class +class TestTimetableFitness(unittest.TestCase): + def setUp(self): + # Create an instance of Sections with 5 sections + self.sections = Sections(5) + self.timetable_fitness = TimetableFitness(self.sections) + + def test_sections_iterable(self): + # Test that Sections object is iterable + sections_list = list(self.sections) + expected_sections = ["sectionA", "sectionB", "sectionC", "sectionD", "sectionE"] + self.assertEqual(sections_list, expected_sections) + + def test_section_rooms_mapping(self): + # Test that each section is mapped to a classroom + section_rooms = self.timetable_fitness.section_rooms + self.assertEqual(len(section_rooms), len(self.sections)) + self.assertTrue(all(section in section_rooms for section in self.sections)) + + def test_assigned_teachers_structure(self): + # Test that assigned teachers structure is initialized correctly + assigned_teachers = self.timetable_fitness.assigned_teachers + self.assertEqual(len(assigned_teachers), len(self.sections)) + self.assertTrue(all(section in assigned_teachers for section in self.sections)) + + +if __name__ == "__main__": + unittest.main() + +#2. def generate_day_schedule(self, day, half_day_sections, week_number): + +import random +from collections import defaultdict + +class TimetableGenerator: + def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab): + self.sections = sections + self.time_slots = time_slots + self.subject_teacher_map = subject_teacher_map + self.section_rooms = section_rooms + self.lab = lab + self.weekly_assignments = defaultdict(lambda: defaultdict(int)) + self.teacher_schedule = defaultdict(dict) + self.room_schedule = defaultdict(dict) + self.teacher_assignments = defaultdict(dict) + + def generate_day_schedule(self, day, half_day_sections, week_number): + day_schedule = {} + subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + + for section in self.sections: + section_schedule = [] + subjects_used_today = set() + current_room = self.section_rooms[section] + num_slots = 4 if section in half_day_sections else 7 + + index = 1 + while index <= num_slots: + time_slot = self.time_slots[index] + + # Skip if time_slot is already used + if any(item['time_slot'] == time_slot for item in section_schedule): + index += 1 + continue + + available_subjects = list(self.subject_teacher_map.keys()) + subject, teacher = None, None + is_lab = False + + while available_subjects: + subject = random.choice(available_subjects) + + # Handle special rules for Placement_Class and labs + if subject == "Placement_Class" and index != 6: + available_subjects.remove(subject) + continue + + if "Lab" in subject: + if index + 1 > num_slots: # Ensure space for double slot + available_subjects.remove(subject) + continue + is_lab = True # Mark this as a lab + + if subject not in subjects_used_today: + teacher_iter = subject_teacher_usage[subject] + try: + teacher = next(teacher_iter) + except StopIteration: + teacher_iter = iter(self.subject_teacher_map[subject]) + teacher = next(teacher_iter) + subject_teacher_usage[subject] = teacher_iter + break + + available_subjects.remove(subject) + + if subject is None or teacher is None: + subject, teacher = "Library", "None" + + if subject != "Library": + self.weekly_assignments[section][subject] += 1 + + subjects_used_today.add(subject) + + # Assign rooms based on whether it's a lab + assigned_room = random.choice(self.lab) if is_lab else current_room + self.teacher_schedule[time_slot][teacher] = section + self.room_schedule[time_slot][assigned_room] = section + + # Handle double slot allocation for labs + if is_lab: + next_slot_index = index + 1 + if next_slot_index <= num_slots: + next_time_slot = self.time_slots[next_slot_index] + section_schedule.append({ + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot + }) + self.room_schedule[next_time_slot][assigned_room] = section + self.teacher_schedule[next_time_slot][teacher] = section + index += 1 # Skip the next slot for lab + + section_schedule.append({ + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": time_slot + }) + + index += 1 + + day_schedule[section] = section_schedule + return day_schedule +import unittest + +class TestGenerateDaySchedule(unittest.TestCase): + def setUp(self): + self.sections = ["A", "B", "C"] + self.time_slots = { + 1: "9:00-10:00", + 2: "10:00-11:00", + 3: "11:00-12:00", + 4: "12:00-1:00", + 5: "2:00-3:00", + 6: "3:00-4:00", + 7: "4:00-5:00" + } + self.subject_teacher_map = { + "Math": ["T1", "T2"], + "Physics": ["T3"], + "Chemistry Lab": ["T4"], + "Placement_Class": ["T5"], + } + self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} + self.lab = ["Lab1", "Lab2"] + self.tt = TimetableGenerator( + self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, self.lab + ) + + def test_schedule_structure(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + self.assertIsInstance(schedule, dict) + for section, section_schedule in schedule.items(): + self.assertIsInstance(section_schedule, list) + for entry in section_schedule: + self.assertIn("teacher_id", entry) + self.assertIn("subject_id", entry) + self.assertIn("classroom_id", entry) + self.assertIn("time_slot", entry) + + def test_half_day_slots(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + if section == "A": + self.assertEqual(len(section_schedule), 4) + else: + self.assertEqual(len(section_schedule), 7) + + def test_no_repeated_time_slots(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + time_slots = [entry["time_slot"] for entry in section_schedule] + self.assertEqual(len(time_slots), len(set(time_slots))) + + def test_lab_double_slots(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + for i, entry in enumerate(section_schedule): + if "Lab" in entry['subject_id']: + current_slot = entry['time_slot'] + current_index = list(self.tt.time_slots.values()).index(current_slot) + + # Check if the lab occupies the next time slot + if current_index + 1 < len(self.tt.time_slots): + next_slot = section_schedule[i + 1]['time_slot'] + expected_next_slot = self.tt.time_slots[current_index + 1] + self.assertEqual( + next_slot, + expected_next_slot, + f"Lab for section {section} did not occupy consecutive slots as expected." + ) + + def test_teacher_and_room_assignments(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + for entry in section_schedule: + teacher = entry['teacher_id'] + room = entry['classroom_id'] + time_slot = entry['time_slot'] + self.assertIn(teacher, self.tt.teacher_schedule[time_slot]) + self.assertIn(room, self.tt.room_schedule[time_slot]) + + +if __name__ == "__main__": + unittest.main() + +#3. def create_timetable(self, num_weeks=1): + +import unittest +from collections import defaultdict +import random + +class TimetableGenerator: + def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab): + self.sections = sections + self.time_slots = time_slots + self.subject_teacher_map = subject_teacher_map + self.section_rooms = section_rooms + self.lab = lab + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] # Ensure days are initialized + self.weekly_assignments = defaultdict(lambda: defaultdict(int)) + self.teacher_schedule = defaultdict(dict) + self.room_schedule = defaultdict(dict) + self.teacher_assignments = defaultdict(dict) + + def generate_day_schedule(self, day, half_day_sections, week_number): + day_schedule = {} + subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + + for section in self.sections: + section_schedule = [] + subjects_used_today = set() + current_room = self.section_rooms[section] + num_slots = 4 if section in half_day_sections else 7 + + for index in range(1, num_slots + 1): + time_slot = self.time_slots[index] + + # Skip if time_slot is already used + if any(item["time_slot"] == time_slot for item in section_schedule): + continue + + available_subjects = list(self.subject_teacher_map.keys()) + subject, teacher = None, None + is_lab = False + + while available_subjects: + subject = random.choice(available_subjects) + + # Handle special rules for Placement_Class and labs + if subject == "Placement_Class" and index <= 4: # Placement classes are after lunch + available_subjects.remove(subject) + continue + + if "Lab" in subject: + if index + 1 > num_slots: # Ensure space for double slot + available_subjects.remove(subject) + continue + is_lab = True # Mark this as a lab + + if subject not in subjects_used_today: + teacher_iter = subject_teacher_usage[subject] + try: + teacher = next(teacher_iter) + self.teacher_assignments.setdefault(section, {})[subject] = teacher + except StopIteration: + teacher_iter = iter(self.subject_teacher_map[subject]) + teacher = next(teacher_iter) + subject_teacher_usage[subject] = teacher_iter + self.teacher_assignments.setdefault(section, {})[subject] = teacher + + break + + available_subjects.remove(subject) + + if subject is None or teacher is None: + subject, teacher = "Library", "None" + + if subject != "Library": + self.weekly_assignments[section][subject] += 1 + + subjects_used_today.add(subject) + + # Assign rooms based on whether it's a lab + if is_lab: + assigned_room = random.choice(self.lab) + else: + assigned_room = current_room + + self.teacher_schedule[time_slot][teacher] = section + self.room_schedule[time_slot][assigned_room] = section + + # Handle double slot allocation for labs + if is_lab: + next_slot_index = index + 1 + if next_slot_index <= num_slots: + next_time_slot = self.time_slots[next_slot_index] + + # Assign consecutive slot to the lab + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + } + ) + self.room_schedule[next_time_slot][assigned_room] = section + self.teacher_schedule[next_time_slot][teacher] = section + index += 1 # Skip the next slot for lab + + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + } + ) + + day_schedule[section] = section_schedule + return day_schedule + + def create_timetable(self, num_weeks=1): + timetable = {} + for week in range(1, num_weeks + 1): + week_schedule = {} + for week_day in self.days: + half_day_sections = random.sample(self.sections, len(self.sections) // 2) + week_schedule[week_day] = self.generate_day_schedule(week_day, half_day_sections, week) + timetable[f"Week {week}"] = week_schedule + return timetable + + +class TestTimetableGenerator(unittest.TestCase): + def setUp(self): + self.sections = ["A", "B", "C"] + self.time_slots = { + 1: "9:00-10:00", + 2: "10:00-11:00", + 3: "11:00-12:00", + 4: "12:00-1:00", + 5: "2:00-3:00", + 6: "3:00-4:00", + 7: "4:00-5:00" + } + self.subject_teacher_map = { + "Math": ["T1", "T2"], + "Physics": ["T3"], + "Chemistry Lab": ["T4"], + "Placement_Class": ["T5"], + } + self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} + self.lab = ["Lab1", "Lab2"] + self.tt = TimetableGenerator( + self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, self.lab + ) + + def test_create_timetable(self): + timetable = self.tt.create_timetable(num_weeks=2) + self.assertIsInstance(timetable, dict) + self.assertGreater(len(timetable), 0) + self.assertIn("Week 1", timetable) + self.assertIn("Week 2", timetable) + + # Verify timetable structure + for week, week_schedule in timetable.items(): + self.assertIsInstance(week_schedule, dict) + for day, day_schedule in week_schedule.items(): + self.assertIsInstance(day_schedule, dict) + for section, section_schedule in day_schedule.items(): + self.assertIsInstance(section_schedule, list) + for entry in section_schedule: + self.assertIn("teacher_id", entry) + self.assertIn("subject_id", entry) + self.assertIn("classroom_id", entry) + self.assertIn("time_slot", entry) + +if __name__ == "__main__": + unittest.main() + +#4. def calculate_fitness(self, chromosome): + +import unittest +from collections import defaultdict +import random + +class TimetableGenerator: + def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab, section_strength, room_capacity, teacher_preferences, teacher_work_load): + self.sections = sections + self.time_slots = time_slots + self.subject_teacher_map = subject_teacher_map + self.section_rooms = section_rooms + self.lab = lab + self.section_strength = section_strength + self.room_capacity = room_capacity + self.teacher_preferences = teacher_preferences + self.teacher_work_load = teacher_work_load + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.weekly_assignments = defaultdict(lambda: defaultdict(int)) + self.teacher_schedule = defaultdict(dict) + self.room_schedule = defaultdict(dict) + self.teacher_assignments = defaultdict(dict) + + def generate_day_schedule(self, day, half_day_sections, week_number): + day_schedule = {} + subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + + for section in self.sections: + section_schedule = [] + subjects_used_today = set() + current_room = self.section_rooms[section] + num_slots = 4 if section in half_day_sections else 7 + + for index in range(1, num_slots + 1): + time_slot = self.time_slots[index] + + if any(item["time_slot"] == time_slot for item in section_schedule): + continue + + available_subjects = list(self.subject_teacher_map.keys()) + subject, teacher = None, None + is_lab = False + + while available_subjects: + subject = random.choice(available_subjects) + + if subject == "Placement_Class" and index <= 4: + available_subjects.remove(subject) + continue + + if "Lab" in subject: + if index + 1 > num_slots: + available_subjects.remove(subject) + continue + is_lab = True + + if subject not in subjects_used_today: + teacher_iter = subject_teacher_usage[subject] + try: + teacher = next(teacher_iter) + self.teacher_assignments.setdefault(section, {})[subject] = teacher + except StopIteration: + teacher_iter = iter(self.subject_teacher_map[subject]) + teacher = next(teacher_iter) + subject_teacher_usage[subject] = teacher_iter + self.teacher_assignments.setdefault(section, {})[subject] = teacher + + break + + available_subjects.remove(subject) + + if subject is None or teacher is None: + subject, teacher = "Library", "None" + + if subject != "Library": + self.weekly_assignments[section][subject] += 1 + + subjects_used_today.add(subject) + + if is_lab: + assigned_room = random.choice(self.lab) + else: + assigned_room = current_room + + self.teacher_schedule[time_slot][teacher] = section + self.room_schedule[time_slot][assigned_room] = section + + if is_lab: + next_slot_index = index + 1 + if next_slot_index <= num_slots: + next_time_slot = self.time_slots[next_slot_index] + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + } + ) + self.room_schedule[next_time_slot][assigned_room] = section + self.teacher_schedule[next_time_slot][teacher] = section + index += 1 + + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + } + ) + + day_schedule[section] = section_schedule + return day_schedule + + def calculate_fitness(self, chromosome): + week_fitness_scores = [] + + for week_num, (week, week_schedule) in enumerate(chromosome.items(), start=1): + overall_fitness_score = 0 + section_fitness_scores = {} + + for day, day_schedule in week_schedule.items(): + section_fitness_scores[day] = {} + + for section, section_schedule in day_schedule.items(): + section_score = 100 + teacher_time_slots = {} + classroom_time_slots = {} + teacher_load = {} + + for item in section_schedule: + teacher = item['teacher_id'] + classroom = item['classroom_id'] + time_slot = item['time_slot'] + strength = self.section_strength.get(section, 0) + + if "Break" in time_slot: + continue + + if (teacher, time_slot) in teacher_time_slots: + section_score -= 30 + else: + teacher_time_slots[(teacher, time_slot)] = section + + if (classroom, time_slot) in classroom_time_slots: + section_score -= 20 + else: + classroom_time_slots[(classroom, time_slot)] = section + + if teacher not in teacher_load: + teacher_load[teacher] = [] + teacher_load[teacher].append(time_slot) + + if strength > self.room_capacity.get(classroom, 0): + section_score -= 25 + + preferred_slots = self.teacher_preferences.get(teacher, []) + if time_slot not in preferred_slots: + section_score -= 5 + + for teacher, time_slots in teacher_load.items(): + if len(time_slots) > self.teacher_work_load.get(teacher, 5): + section_score -= 10 + + section_fitness_scores[day][section] = section_score + overall_fitness_score += section_score + + week_fitness_scores.append({ + "week": f"Week {week_num}", + "score": overall_fitness_score + }) + + return week_fitness_scores, section_fitness_scores + + +class TestTimetableGenerator(unittest.TestCase): + def setUp(self): + self.sections = ["A", "B", "C"] + self.time_slots = { + 1: "9:00-10:00", + 2: "10:00-11:00", + 3: "11:00-12:00", + 4: "12:00-1:00", + 5: "2:00-3:00", + 6: "3:00-4:00", + 7: "4:00-5:00" + } + self.subject_teacher_map = { + "Math": ["T1", "T2"], + "Physics": ["T3"], + "Chemistry Lab": ["T4"], + "Placement_Class": ["T5"], + } + self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} + self.lab = ["Lab1", "Lab2"] + self.section_strength = {"A": 40, "B": 35, "C": 50} + self.room_capacity = {"R1": 40, "R2": 35, "R3": 50} + self.teacher_preferences = {"T1": ["9:00-10:00", "3:00-4:00"], "T2": ["10:00-11:00"]} + self.teacher_work_load = {"T1": 10, "T2": 15, "T3": 8, "T4": 12, "T5": 6} + + self.tt = TimetableGenerator( + self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, + self.lab, self.section_strength, self.room_capacity, self.teacher_preferences, self.teacher_work_load + ) + + def test_calculate_fitness(self): + # Create a mock chromosome with timetable data + chromosome = { + "Week 1": { + "Monday": { + "A": [{"teacher_id": "T1", "subject_id": "Math", "classroom_id": "R1", "time_slot": "9:00-10:00"}], + "B": [{"teacher_id": "T3", "subject_id": "Physics", "classroom_id": "R2", "time_slot": "10:00-11:00"}], + }, + "Tuesday": { + "C": [{"teacher_id": "T4", "subject_id": "Chemistry Lab", "classroom_id": "Lab1", "time_slot": "11:00-12:00"}], + } + } + } + + week_fitness_scores, section_fitness_scores = self.tt.calculate_fitness(chromosome) + + # Test the overall fitness score for Week 1 + self.assertIsInstance(week_fitness_scores, list) + self.assertGreater(len(week_fitness_scores), 0) + self.assertEqual(week_fitness_scores[0]["week"], "Week 1") + self.assertIn("score", week_fitness_scores[0]) + + # Test the section fitness score for a specific day and section + self.assertIn("Monday", section_fitness_scores) + self.assertIn("A", section_fitness_scores["Monday"]) + self.assertIsInstance(section_fitness_scores["Monday"]["A"], int) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/test_suite/Mutation_Test.py b/test_suite/Mutation_Test.py new file mode 100644 index 0000000..8e0e1aa --- /dev/null +++ b/test_suite/Mutation_Test.py @@ -0,0 +1,366 @@ +#MUTATION TESTS + +#1. def mutate_time_slots_in_section(self, schedule, section): + +import unittest +import random + +class TestMutateTimeSlots(unittest.TestCase): + def setUp(self): + # Initialize a mock schedule for testing + self.schedule = { + "SectionA": [ + {"subject": "Math", "time_slot": "9:00-10:00"}, + {"subject": "English", "time_slot": "10:00-11:00"}, + {"subject": "Science", "time_slot": "11:00-12:00"} + ], + "SectionB": [ + {"subject": "History", "time_slot": "9:00-10:00"}, + ], + "SectionC": [] # Empty section + } + + def mutate_time_slots_in_section(self, schedule, section): + """ + Mutates the time slots within a particular section by shuffling them. + + Args: + schedule (dict): The schedule containing sections and their data. + section (str): The section in which mutation should occur. + + Returns: + bool: True if mutation was performed, False otherwise. + """ + if section in schedule: + section_list = schedule[section] + + if len(section_list) < 2: + return False + + time_slots = [entry["time_slot"] for entry in section_list] + random.shuffle(time_slots) + + for i, entry in enumerate(section_list): + entry["time_slot"] = time_slots[i] + + return True + return False + + def test_valid_mutation(self): + # Test a valid mutation for SectionA + original_schedule = [entry["time_slot"] for entry in self.schedule["SectionA"]] + result = self.mutate_time_slots_in_section(self.schedule, "SectionA") + self.assertTrue(result, "Mutation should occur with valid input") + mutated_schedule = [entry["time_slot"] for entry in self.schedule["SectionA"]] + + # Check if time slots were shuffled + self.assertNotEqual(original_schedule, mutated_schedule, "Schedules should differ after mutation") + self.assertCountEqual(original_schedule, mutated_schedule, "Schedules should have the same elements after mutation") + + def test_not_enough_time_slots(self): + # Test mutation for SectionB (not enough time slots to shuffle) + result = self.mutate_time_slots_in_section(self.schedule, "SectionB") + self.assertFalse(result, "Mutation should not occur for single-element sections") + + def test_empty_section(self): + # Test mutation for SectionC (empty section) + result = self.mutate_time_slots_in_section(self.schedule, "SectionC") + self.assertFalse(result, "Mutation should not occur for empty sections") + + def test_non_existent_section(self): + # Test mutation for a section not in the schedule + result = self.mutate_time_slots_in_section(self.schedule, "SectionD") + self.assertFalse(result, "Mutation should not occur for non-existent sections") + +if __name__ == "__main__": + unittest.main(verbosity=2) + + + +#2. def mutate_schedule_for_week(self, weekly_schedule): + +import unittest +import random +import copy +from unittest.mock import patch + + +class Mutator: + def __init__(self, mutation_rate=0.5): + self.mutation_rate = mutation_rate + + def mutate_time_slots_in_section(self, schedule, section): + """ + Mutates the time slots within a particular section by shuffling them. + + Args: + schedule (dict): The schedule containing sections and their data. + section (str): The section in which mutation should occur. + + Returns: + bool: True if mutation was performed, False otherwise. + """ + if section in schedule: + section_list = schedule[section] + if len(section_list) < 2: + return False # Not enough time slots to shuffle. + + original_slots = [entry["time_slot"] for entry in section_list] + mutated_slots = original_slots[:] + attempt_count = 0 + + while mutated_slots == original_slots and attempt_count < 5: # Ensure mutation occurs + random.shuffle(mutated_slots) + attempt_count += 1 + + if mutated_slots != original_slots: + for i, entry in enumerate(section_list): + entry["time_slot"] = mutated_slots[i] + return True + + return False + + def mutate_schedule_for_week(self, weekly_schedule): + """ + Mutates the time slots for all weekdays in the weekly schedule. + + Args: + weekly_schedule (dict): The weekly schedule containing days, sections, and data. + + Returns: + dict: The mutated weekly schedule. + """ + mutated_weekly_schedule = copy.deepcopy(weekly_schedule) + has_mutation = False # Track if any mutation occurs + + for day, day_schedule in mutated_weekly_schedule.items(): + total_sections = list(day_schedule.keys()) + num_to_mutate = max(1, int(self.mutation_rate * len(total_sections))) + + sections_to_mutate = random.sample(total_sections, num_to_mutate) + + for section in sections_to_mutate: + if self.mutate_time_slots_in_section(day_schedule, section): + has_mutation = True + + if not has_mutation: # Ensure at least one mutation occurs + random_section = random.choice(list(mutated_weekly_schedule.values())) + random_section_name = random.choice(list(random_section.keys())) + self.mutate_time_slots_in_section(random_section, random_section_name) + + return mutated_weekly_schedule + + def print_weekly_schedule(self, weekly_schedule): + """ + Prints the weekly schedule in a readable format. + + Args: + weekly_schedule (dict): The weekly schedule to print. + """ + print("\nWeekly Schedule:") + print("=" * 50) + for day, day_schedule in weekly_schedule.items(): + print(f"Day: {day}") + print("-" * 30) + for section, entries in day_schedule.items(): + print(f" Section {section}:") + for entry in entries: + print( + f" Teacher: {entry['teacher_id']}, Subject: {entry['subject_id']}, " + f"Time Slot: {entry['time_slot']}" + ) + print("=" * 50) + + +class TestMutation(unittest.TestCase): + def setUp(self): + self.weekly_schedule = { + "Monday": { + "A": [ + {"teacher_id": "T1", "subject_id": "Math", "time_slot": "9:00 - 9:55"}, + {"teacher_id": "T2", "subject_id": "Physics", "time_slot": "9:55 - 10:50"}, + ], + "B": [ + {"teacher_id": "T3", "subject_id": "Chemistry", "time_slot": "11:10 - 12:05"}, + {"teacher_id": "T4", "subject_id": "Biology", "time_slot": "12:05 - 1:00"}, + ], + }, + "Tuesday": { + "A": [ + {"teacher_id": "T5", "subject_id": "History", "time_slot": "1:20 - 2:15"}, + ] + }, + } + self.mutator = Mutator() + + def test_default_mutation_rate(self): + self.assertEqual(self.mutator.mutation_rate, 0.5) + + def test_mutate_time_slots_in_section(self): + section_schedule = [ + {"teacher_id": "T1", "subject_id": "Math", "time_slot": "9:00 - 9:55"}, + {"teacher_id": "T2", "subject_id": "Physics", "time_slot": "9:55 - 10:50"}, + ] + original_schedule = copy.deepcopy(section_schedule) + result = self.mutator.mutate_time_slots_in_section({"A": section_schedule}, "A") + self.assertTrue(result) + mutated_schedule = section_schedule + self.assertNotEqual( + [entry["time_slot"] for entry in original_schedule], + [entry["time_slot"] for entry in mutated_schedule], + "Time slots were not mutated", + ) + + @patch("random.shuffle") + def test_mutate_schedule_for_week(self, mock_shuffle): + # Mock shuffle to ensure mutation logic works. + def mock_shuffle_fn(lst): + lst.reverse() + + mock_shuffle.side_effect = mock_shuffle_fn + + mutated_schedule = self.mutator.mutate_schedule_for_week(self.weekly_schedule) + self.assertIsInstance(mutated_schedule, dict) + + # Ensure the time slots are not identical + original_time_slots = [ + entry["time_slot"] + for day in self.weekly_schedule.values() + for section in day.values() + for entry in section + ] + mutated_time_slots = [ + entry["time_slot"] + for day in mutated_schedule.values() + for section in day.values() + for entry in section + ] + self.assertNotEqual(original_time_slots, mutated_time_slots, "Mutation did not occur.") + + def test_print_weekly_schedule(self): + # This is primarily for manual verification; ensure no exceptions occur + self.mutator.print_weekly_schedule(self.weekly_schedule) + + +if __name__ == "__main__": + unittest.main() + + +#3. def print_weekly_schedule(self, weekly_schedule): + +import unittest +from unittest.mock import patch +import random +import copy +from Samples.Mutation_Files.mutation import Mutation + +class TestMutation(unittest.TestCase): + + def setUp(self): + """Setup a basic schedule for testing.""" + self.schedule = { + "Monday": { + "A": [ + {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:55 - 10:50"}, + {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:00 - 9:55"} + ] + }, + "Tuesday": { + "A": [{"teacher_id": "AK22", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55"}], + "B": [{"teacher_id": "BJ16", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50"}] + } + } + + def test_mutate_schedule_for_week(self): + """ + Test mutation of the entire week's schedule. + """ + mutation_rate = 0.5 # For testing, we can use a fixed mutation rate (50%) + mutator = Mutation(mutation_rate=mutation_rate) + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test if the mutated schedule is different from the original schedule + self.assertNotEqual(self.schedule, mutated_schedule, "The mutated schedule should be different from the original schedule.") + + # Test that at least one section was mutated + for day in mutated_schedule: + for section in mutated_schedule[day]: + # Check if time slots were shuffled (i.e., they're different from the original time slots) + for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): + self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should be mutated.") + + def test_mutate_schedule_with_no_mutation(self): + """ + Test if mutation does not occur when the mutation rate is 0. + """ + mutation_rate = 0 # No mutation expected + mutator = Mutation(mutation_rate=mutation_rate) + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test that the mutated schedule is the same as the original schedule + self.assertEqual(self.schedule, mutated_schedule, "The schedule should remain the same if mutation rate is 0.") + + def test_mutate_schedule_with_max_mutation(self): + """ + Test if mutation affects all sections when mutation rate is 1. + """ + mutation_rate = 1 # Full mutation expected + mutator = Mutation(mutation_rate=mutation_rate) + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test that the mutated schedule is different from the original schedule + self.assertNotEqual(self.schedule, mutated_schedule, "The mutated schedule should be different from the original schedule.") + + # Check that all time slots were mutated + for day in mutated_schedule: + for section in mutated_schedule[day]: + for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): + self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should be mutated.") + + @patch("random.sample") # Mock random.sample to control which sections get mutated + def test_mutate_schedule_with_controlled_mutation(self, mock_sample): + """ + Test mutation when we control which sections are selected for mutation. + """ + mutation_rate = 0.5 + mutator = Mutation(mutation_rate=mutation_rate) + + # Mock random.sample to return a controlled selection of sections to mutate + mock_sample.return_value = ["A"] # Only mutate section A + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test that only section A was mutated, and others remain the same + for day in mutated_schedule: + for section in mutated_schedule[day]: + for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): + if section == "A": + self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should be mutated.") + else: + self.assertEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should not be mutated.") + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/test_suite/ReadMe.md b/test_suite/ReadMe.md new file mode 100644 index 0000000..4759136 --- /dev/null +++ b/test_suite/ReadMe.md @@ -0,0 +1,7 @@ +This folder will contain the test for all the +different flows we have. + +Along with, + +1. unit test -> these will test individual components, like functionalities of Fitness, Crossover, Mutation, etc. +2. functional test -> collectively working of these modules. \ No newline at end of file diff --git a/test_suite/Selection_Tests.py b/test_suite/Selection_Tests.py new file mode 100644 index 0000000..f16f42f --- /dev/null +++ b/test_suite/Selection_Tests.py @@ -0,0 +1,298 @@ +# SELECTION TESTS + +#1.def get_all_time_slots(): + +import unittest +from Constants.time_intervals import TimeIntervalConstant +class TestTimeIntervalConstant(unittest.TestCase): + + def test_get_all_time_slots(self): + expected_time_slots = ["9:00 - 9:55", "9:55 - 10:50", "11:10 - 12:05", "12:05 - 1:00", "1:20 - 2:15", "2:15 - 3:10", "3:30 - 4:25"] + self.assertEqual(TimeIntervalConstant.get_all_time_slots(), expected_time_slots) + +if __name__ == "__main__": + unittest.main() + +import unittest +from Samples.Selection_Files.selection import Timetable # Correct import +from unittest import mock + +class TestTimetable(unittest.TestCase): + + def setUp(self): + # Initialize the object to be tested + self.timetable = Timetable() # Initialize the correct class + + def test_generate_day_schedule_structure(self): + # Call the method + day_schedule = self.timetable.generate_day_schedule() + + # Check if the returned day_schedule is a dictionary with sections + self.assertIsInstance(day_schedule, dict) + self.assertGreater(len(day_schedule), 0) + + for section, schedule in day_schedule.items(): + self.assertIn(section, self.timetable.sections) # Ensure sections are correct + self.assertIsInstance(schedule, list) + self.assertGreater(len(schedule), 0) + + def test_teacher_and_classroom_usage(self): + # Call the method + day_schedule = self.timetable.generate_day_schedule() + + # Check that no teacher is assigned to the same time slot more than once + time_slot_teacher_usage = {time_slot: set() for time_slot in self.timetable.time_slots} + time_slot_classroom_usage = {time_slot: set() for time_slot in self.timetable.time_slots} + + for section, schedule in day_schedule.items(): + for schedule_item in schedule: + if "Break" not in schedule_item["time_slot"]: + self.assertNotIn(schedule_item["teacher_id"], time_slot_teacher_usage[schedule_item["time_slot"]]) + self.assertNotIn(schedule_item["classroom_id"], time_slot_classroom_usage[schedule_item["time_slot"]]) + + # Track teacher and classroom usage + time_slot_teacher_usage[schedule_item["time_slot"]].add(schedule_item["teacher_id"]) + time_slot_classroom_usage[schedule_item["time_slot"]].add(schedule_item["classroom_id"]) + + def test_break_periods(self): + # Call the method + day_schedule = self.timetable.generate_day_schedule() + + # Check that "Break" is assigned correctly + break_found = False + for section, schedule in day_schedule.items(): + for schedule_item in schedule: + if "Break" in schedule_item["subject_id"]: + break_found = True + self.assertEqual(schedule_item["teacher_id"], "None") + self.assertEqual(schedule_item["classroom_id"], "N/A") + + self.assertTrue(break_found, "No break periods found in the schedule") + +if __name__ == "__main__": + unittest.main() + + +#2. def create_timetable(self): + +import unittest +from Samples.Selection_Files.selection import Timetable +from unittest import mock + +class TestTimetable(unittest.TestCase): + + def setUp(self): + # Initialize the Timetable object + self.timetable = Timetable() + + def test_create_timetable_structure(self): + # Call the method + timetable = self.timetable.create_timetable() + + # Check if the timetable is a dictionary with days as keys + self.assertIsInstance(timetable, dict) + self.assertGreater(len(timetable), 0) # Ensure timetable is not empty + + # Verify that all days are present + for day in self.timetable.days: + self.assertIn(day, timetable) + + # Verify that each day contains a schedule (which is a dictionary) + for day, day_schedule in timetable.items(): + self.assertIsInstance(day_schedule, dict) + self.assertGreater(len(day_schedule), 0) + + def test_generate_day_schedule_called(self): + # Mock the generate_day_schedule method to check if it's called for each day + with mock.patch.object(self.timetable, 'generate_day_schedule', return_value={}) as mock_method: + self.timetable.create_timetable() + + # Check if generate_day_schedule was called for each day + self.assertEqual(mock_method.call_count, len(self.timetable.days)) + + def test_timetable_content(self): + # Call the method + timetable = self.timetable.create_timetable() + + # Check that each day's schedule contains sections + for day, day_schedule in timetable.items(): + for section, schedule in day_schedule.items(): + self.assertIn(section, self.timetable.sections) # Ensure valid sections + self.assertIsInstance(schedule, list) + self.assertGreater(len(schedule), 0) + +if __name__ == "__main__": + unittest.main() + +#3. def create_multiple_timelines(self, num_chromosomes): + +import unittest +from Samples.Selection_Files.selection import Timetable # Adjust the import as necessary + +class TestTimetable(unittest.TestCase): + + def setUp(self): + # Initialize the object to be tested + self.timetable = Timetable() # Ensure this is the correct class that has create_multiple_timelines method + + def test_create_multiple_timelines(self): + num_chromosomes = 5 # You can change this number to test with different sizes + + # Call the method + timelines = self.timetable.create_multiple_timelines(num_chromosomes) + + # Check if the returned value is a list + self.assertIsInstance(timelines, list) + + # Check if the list has the correct number of timetables + self.assertEqual(len(timelines), num_chromosomes) + + # Optionally, check if each element in the list is a timetable (or has the correct structure) + for timetable in timelines: + self.assertIsInstance(timetable, dict) # Assuming the timetable is a dictionary as in your previous methods + # Check that the timetable contains valid data, like sections + for section, schedule in timetable.items(): + self.assertIn(section, self.timetable.sections) + self.assertIsInstance(schedule, list) + self.assertGreater(len(schedule), 0) + +if __name__ == "__main__": + unittest.main() + +#4. def calculate_fitness(self, chromosome): + +import unittest +from Samples.Selection_Files.selection import Timetable # Adjust the import path + +class TestTimetableFitness(unittest.TestCase): + + def setUp(self): + # Initialize the object to be tested + self.timetable = Timetable() # Ensure this is the class that has calculate_fitness method + + def test_fitness_calculation_valid_chromosome(self): + # Create a valid chromosome structure + chromosome = { + "Monday": { + "A": [ + {"teacher_id": "T1", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S1"}, + {"teacher_id": "T2", "classroom_id": "R2", "time_slot": "10:00-11:00", "subject_id": "S2"}, + {"teacher_id": "T3", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S3"}, + {"teacher_id": "None", "classroom_id": "N/A", "time_slot": "Break", "subject_id": "Break"}, + ], + "B": [ + {"teacher_id": "T4", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S4"}, + {"teacher_id": "T5", "classroom_id": "R2", "time_slot": "10:00-11:00", "subject_id": "S5"}, + {"teacher_id": "T1", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S6"}, + {"teacher_id": "None", "classroom_id": "N/A", "time_slot": "Break", "subject_id": "Break"}, + ], + } + } + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score is within expected range + self.assertIsInstance(fitness_score, int) + self.assertGreaterEqual(fitness_score, 0) # Fitness should not be negative + + def test_fitness_calculation_with_violations(self): + # Create a chromosome with violations (e.g., overlapping time slots) + chromosome = { + "Monday": { + "A": [ + {"teacher_id": "T1", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S1"}, + {"teacher_id": "T1", "classroom_id": "R2", "time_slot": "9:00-10:00", "subject_id": "S2"}, # Teacher overlap + {"teacher_id": "T3", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S3"}, + ], + "B": [ + {"teacher_id": "T4", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S4"}, + {"teacher_id": "T5", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S5"}, # Room overlap + ], + } + } + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score accounts for penalties + self.assertIsInstance(fitness_score, int) + self.assertLess(fitness_score, 100) # Expect reduced fitness score due to violations + + def test_fitness_calculation_with_over_capacity(self): + # Create a chromosome where room capacity is exceeded + chromosome = { + "Monday": { + "A": [ + {"teacher_id": "T1", "classroom_id": "R3", "time_slot": "9:00-10:00", "subject_id": "S1"}, # Over capacity + ] + } + } + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score is reduced due to capacity violation + self.assertIsInstance(fitness_score, int) + self.assertLess(fitness_score, 100) # Expect reduced fitness score due to capacity penalty + + def test_fitness_calculation_no_timetable(self): + # Test with an empty chromosome + chromosome = {} + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score is zero + self.assertEqual(fitness_score, 0) + +if __name__ == "__main__": + unittest.main() + +#5. def select_top_chromosomes(self, population: list, percentage=0.30) -> list: + +import random +def select_top_chromosomes(self, population: list, percentage=0.30) -> list: + num_to_select = int(len(population) * percentage) + fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in population] + sorted_chromosomes = sorted(fitness_scores, key=lambda x: x[1], reverse=True) + + best_num = int(num_to_select * 0.20) + worst_num = int(num_to_select * 0.10) + middle_num = num_to_select - (best_num + worst_num) + + best_chromosomes = sorted_chromosomes[:best_num] + worst_chromosomes = sorted_chromosomes[-worst_num:] + middle_chromosomes = sorted_chromosomes[best_num:best_num + middle_num] + + roulette_num = int(middle_num * 0.70) + rank_num = middle_num - roulette_num + + # Handle empty middle_chromosomes for roulette selection + if middle_chromosomes: + total_fitness = sum(fitness for _, fitness in middle_chromosomes) + roulette_chromosomes = random.choices( + middle_chromosomes, + weights=[fitness / total_fitness for _, fitness in middle_chromosomes], + k=roulette_num + ) + else: + roulette_chromosomes = [] + + if middle_chromosomes: + total_rank = sum(range(1, len(middle_chromosomes) + 1)) + rank_probabilities = [i / total_rank for i in range(1, len(middle_chromosomes) + 1)] + rank_chromosomes = random.choices( + middle_chromosomes, + weights=rank_probabilities, + k=rank_num + ) + else: + rank_chromosomes = [] + + selected_chromosomes = [chromosome for chromosome, _ in best_chromosomes] + selected_chromosomes += [chromosome for chromosome, _ in worst_chromosomes] + selected_chromosomes += [chromosome for chromosome, _ in roulette_chromosomes] + selected_chromosomes += [chromosome for chromosome, _ in rank_chromosomes] + + return selected_chromosomes \ No newline at end of file diff --git a/test_suite/unit_test.py b/test_suite/unit_test.py new file mode 100644 index 0000000..e69de29 From cdf6f8e3263c5443a7c0eb872810aa0966076d1c Mon Sep 17 00:00:00 2001 From: Ayush-Techie Date: Sun, 1 Dec 2024 14:57:05 +0530 Subject: [PATCH 03/67] Refactor for classroom_allocate & section_allocate. --- {GA => Constants}/classroom_allocate.py | 0 {GA => Constants}/section_allocation.py | 0 __init__.py | 16 +++------------- 3 files changed, 3 insertions(+), 13 deletions(-) rename {GA => Constants}/classroom_allocate.py (100%) rename {GA => Constants}/section_allocation.py (100%) diff --git a/GA/classroom_allocate.py b/Constants/classroom_allocate.py similarity index 100% rename from GA/classroom_allocate.py rename to Constants/classroom_allocate.py diff --git a/GA/section_allocation.py b/Constants/section_allocation.py similarity index 100% rename from GA/section_allocation.py rename to Constants/section_allocation.py diff --git a/__init__.py b/__init__.py index 8fb8fc1..32c8e80 100644 --- a/__init__.py +++ b/__init__.py @@ -32,8 +32,7 @@ def timetable_generation(): ) timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) - from icecream import ic - ic(timetable) + # Fitness of each Chromosome fitness_calculator = TimetableFitnessEvaluator( timetable, @@ -48,13 +47,14 @@ def timetable_generation(): timetable_generator.weekly_workload, ) + # Calc the fitness score. fitness_scores = fitness_calculator.evaluate_timetable_fitness() # Selection of all Chromosomes selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - ic(len(selected_chromosomes)) + # Crossover for all selected Chromosomes crossover_object = TimeTableCrossOver() @@ -81,11 +81,6 @@ def timetable_generation(): for chromosome in crossover_chromosomes ] - - ic(mutated_chromosomes) - ic(selected_chromosomes) - - ic(selected_chromosomes) # Store best of Chromosomes best_chromosome_score = -1 best_chromosome = dict() @@ -95,13 +90,8 @@ def timetable_generation(): best_chromosome_score = int(week_score) best_chromosome = timetable[week_no] - ic(f"Best Chromosome: {best_chromosome}") - def run_timetable_generation(): for generation in range(Defaults.total_no_of_generations): best_chromosome = timetable_generation() return best_chromosome - - -run_timetable_generation() \ No newline at end of file From 324dffb5f8212e9211488fff2695719a1783b07a Mon Sep 17 00:00:00 2001 From: Ayush-Techie Date: Sun, 1 Dec 2024 16:05:14 +0530 Subject: [PATCH 04/67] Fix for setup. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7ea9ea4..24d5735 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="TimeTableLib", - packages=find_packages(include=["managers", "managers.common"]), + packages=find_packages(include=["GA", "Samples"]), version="v0.1.0", description="This Library generates timetable and is a plug and play solution for any python based backend service.", long_description=open("README.md").read(), From 3acff15a33cd676e68e4b6d75131fef11b1746ab Mon Sep 17 00:00:00 2001 From: Falguni Makhija Date: Sun, 1 Dec 2024 18:21:26 +0530 Subject: [PATCH 05/67] teacher's tt added --- Constants/teacher's.json | 277 ++++++++++++++++++++++++++++++++++++++ Constants/teacher's_tt.py | 0 2 files changed, 277 insertions(+) create mode 100644 Constants/teacher's.json create mode 100644 Constants/teacher's_tt.py diff --git a/Constants/teacher's.json b/Constants/teacher's.json new file mode 100644 index 0000000..aa5f1ea --- /dev/null +++ b/Constants/teacher's.json @@ -0,0 +1,277 @@ +{ + "Teacher1": { + "Monday": [ + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "9:00 - 9:55", + "section": "A" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "10:00 - 10:55", + "section": "A" + } + ], + "Tuesday": [ + { + "course_name": "BCA", + "subject_id": "CSP-501", + "classroom_name": "L2", + "time_slot": "9:00 - 9:55", + "section": "B" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "11:00 - 11:55", + "section": "A" + } + ], + "Wednesday": [ + { + "course_name": "MBA", + "subject_id": "MKT-202", + "classroom_name": "R3", + "time_slot": "9:00 - 9:55", + "section": "A" + }, + { + "course_name": "BCA", + "subject_id": "CSP-501", + "classroom_name": "L2", + "time_slot": "10:00 - 10:55", + "section": "B" + } + ], + "Thursday": [ + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "9:00 - 9:55", + "section": "A" + }, + { + "course_name": "MBA", + "subject_id": "MKT-202", + "classroom_name": "R3", + "time_slot": "11:00 - 11:55", + "section": "A" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "2:00 - 2:55", + "section": "B" + } + ], + "Friday": [ + { + "course_name": "BCA", + "subject_id": "CSP-501", + "classroom_name": "L2", + "time_slot": "9:00 - 9:55", + "section": "B" + }, + { + "course_name": "MBA", + "subject_id": "MKT-202", + "classroom_name": "R3", + "time_slot": "11:00 - 11:55", + "section": "A" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "2:00 - 2:55", + "section": "A" + } + ] + }, + "Teacher2": { + "Tuesday": [ + { + "course_name": "BCA", + "subject_id": "CSP-501", + "classroom_name": "L2", + "time_slot": "9:00 - 9:55", + "section": "B" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "11:00 - 11:55", + "section": "A" + } + ], + "Wednesday": [ + { + "course_name": "MBA", + "subject_id": "MKT-202", + "classroom_name": "R3", + "time_slot": "9:00 - 9:55", + "section": "A" + }, + { + "course_name": "BCA", + "subject_id": "CSP-501", + "classroom_name": "L2", + "time_slot": "10:00 - 10:55", + "section": "B" + } + ], + "Thursday": [ + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "9:00 - 9:55", + "section": "A" + }, + { + "course_name": "MBA", + "subject_id": "MKT-202", + "classroom_name": "R3", + "time_slot": "11:00 - 11:55", + "section": "A" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "2:00 - 2:55", + "section": "B" + } + ], + "Friday": [ + { + "course_name": "BCA", + "subject_id": "CSP-501", + "classroom_name": "L2", + "time_slot": "9:00 - 9:55", + "section": "B" + }, + { + "course_name": "MBA", + "subject_id": "MKT-202", + "classroom_name": "R3", + "time_slot": "11:00 - 11:55", + "section": "A" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "2:00 - 2:55", + "section": "A" + } + ], + "Saturday": [ + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "9:00 - 9:55", + "section": "A" + }, + { + "course_name": "BTech", + "subject_id": "TCS-509", + "classroom_name": "R1", + "time_slot": "10:00 - 10:55", + "section": "A" + } + ] + }, + "Teacher3": { + "Monday": [ + { + "course_name": "BBA", + "subject_id": "HRM-301", + "classroom_name": "L3", + "time_slot": "9:00 - 9:55", + "section": "C" + }, + { + "course_name": "MBA", + "subject_id": "FIN-305", + "classroom_name": "R4", + "time_slot": "11:00 - 11:55", + "section": "A" + } + ], + "Tuesday": [ + { + "course_name": "BTech", + "subject_id": "TCS-510", + "classroom_name": "R2", + "time_slot": "10:00 - 10:55", + "section": "A" + }, + { + "course_name": "BCA", + "subject_id": "CSP-502", + "classroom_name": "L1", + "time_slot": "2:00 - 2:55", + "section": "B" + } + ], + "Wednesday": [ + { + "course_name": "MBA", + "subject_id": "MKT-203", + "classroom_name": "R3", + "time_slot": "10:00 - 10:55", + "section": "A" + }, + { + "course_name": "BBA", + "subject_id": "HRM-301", + "classroom_name": "L3", + "time_slot": "2:00 - 2:55", + "section": "C" + } + ] + }, + "Teacher4": { + "Thursday": [ + { + "course_name": "BCA", + "subject_id": "CSP-503", + "classroom_name": "L1", + "time_slot": "9:00 - 9:55", + "section": "B" + }, + { + "course_name": "BTech", + "subject_id": "TCS-511", + "classroom_name": "R2", + "time_slot": "11:00 - 11:55", + "section": "C" + } + ], + "Friday": [ + { + "course_name": "MBA", + "subject_id": "FIN-306", + "classroom_name": "R4", + "time_slot": "9:00 - 9:55", + "section": "A" + }, + { + "course_name": "BBA", + "subject_id": "HRM-302", + "classroom_name": "L3", + "time_slot": "10:00 - 10:55", + } + ] + } +} \ No newline at end of file diff --git a/Constants/teacher's_tt.py b/Constants/teacher's_tt.py new file mode 100644 index 0000000..e69de29 From 0e9c76be5f060bb8c76346fff761cdba14c128d7 Mon Sep 17 00:00:00 2001 From: Ayush-Techie Date: Sun, 1 Dec 2024 21:54:26 +0530 Subject: [PATCH 06/67] revert code~ --- __init__.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/__init__.py b/__init__.py index 32c8e80..8fb8fc1 100644 --- a/__init__.py +++ b/__init__.py @@ -32,7 +32,8 @@ def timetable_generation(): ) timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) - + from icecream import ic + ic(timetable) # Fitness of each Chromosome fitness_calculator = TimetableFitnessEvaluator( timetable, @@ -47,14 +48,13 @@ def timetable_generation(): timetable_generator.weekly_workload, ) - # Calc the fitness score. fitness_scores = fitness_calculator.evaluate_timetable_fitness() # Selection of all Chromosomes selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - + ic(len(selected_chromosomes)) # Crossover for all selected Chromosomes crossover_object = TimeTableCrossOver() @@ -81,6 +81,11 @@ def timetable_generation(): for chromosome in crossover_chromosomes ] + + ic(mutated_chromosomes) + ic(selected_chromosomes) + + ic(selected_chromosomes) # Store best of Chromosomes best_chromosome_score = -1 best_chromosome = dict() @@ -90,8 +95,13 @@ def timetable_generation(): best_chromosome_score = int(week_score) best_chromosome = timetable[week_no] + ic(f"Best Chromosome: {best_chromosome}") + def run_timetable_generation(): for generation in range(Defaults.total_no_of_generations): best_chromosome = timetable_generation() return best_chromosome + + +run_timetable_generation() \ No newline at end of file From 2837d708730e1d4c1dcb219ccc1e15c27860a473 Mon Sep 17 00:00:00 2001 From: Vishal Joshi Date: Mon, 2 Dec 2024 13:18:10 +0530 Subject: [PATCH 07/67] changed init --- .DS_Store | Bin 0 -> 6148 bytes GA/__init__.py | 107 ++ Samples/__init__.py | 0 TimeTableLib.egg-info/PKG-INFO | 129 ++ TimeTableLib.egg-info/SOURCES.txt | 22 + TimeTableLib.egg-info/dependency_links.txt | 1 + TimeTableLib.egg-info/requires.txt | 4 + TimeTableLib.egg-info/top_level.txt | 3 + __init__.py | 5 +- build/lib/Constants/__init__.py | 0 build/lib/Constants/classroom_allocate.py | 54 + build/lib/Constants/constant.py | 69 + build/lib/Constants/is_conflict.py | 124 ++ build/lib/Constants/section_allocation.py | 164 ++ build/lib/Constants/teacher's_tt.py | 0 build/lib/Constants/time_intervals.py | 84 ++ build/lib/Constants/utils.py | 1 + build/lib/GA/__init__.py | 105 ++ build/lib/GA/chromosome.py | 223 +++ build/lib/GA/fitness.py | 160 ++ build/lib/GA/mutation.py | 88 ++ build/lib/GA/selection.py | 119 ++ build/lib/Samples/__init__.py | 0 build/lib/Samples/samples.py | 1585 ++++++++++++++++++++ setup.py | 5 +- 25 files changed, 3046 insertions(+), 6 deletions(-) create mode 100644 .DS_Store create mode 100644 Samples/__init__.py create mode 100644 TimeTableLib.egg-info/PKG-INFO create mode 100644 TimeTableLib.egg-info/SOURCES.txt create mode 100644 TimeTableLib.egg-info/dependency_links.txt create mode 100644 TimeTableLib.egg-info/requires.txt create mode 100644 TimeTableLib.egg-info/top_level.txt create mode 100644 build/lib/Constants/__init__.py create mode 100644 build/lib/Constants/classroom_allocate.py create mode 100644 build/lib/Constants/constant.py create mode 100644 build/lib/Constants/is_conflict.py create mode 100644 build/lib/Constants/section_allocation.py create mode 100644 build/lib/Constants/teacher's_tt.py create mode 100644 build/lib/Constants/time_intervals.py create mode 100644 build/lib/Constants/utils.py create mode 100644 build/lib/GA/__init__.py create mode 100644 build/lib/GA/chromosome.py create mode 100644 build/lib/GA/fitness.py create mode 100644 build/lib/GA/mutation.py create mode 100644 build/lib/GA/selection.py create mode 100644 build/lib/Samples/__init__.py create mode 100644 build/lib/Samples/samples.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..92b131da0862f63e70bc127513bcd3ea7bfa08a3 GIT binary patch literal 6148 zcmeHKyGjE=6g{)97_||!5VTmZR)}A)(TKIAR*VmPkhqaVu@M#pVC$pA1LS4U-F4nT=RFrJ|rBI1`ZAd$B$5RJ^yI4Rc- zvu0}`QVq(0GVm7}kasu68cuMAPVoLtzMmI;&8%8IXk-Vpl|I++?ssoqDxv>qtiN?y z*c+B|reYeK$Z&x+I;aynXa^nO@_Kkwv6r2dy}IvZ$b8ML*VXvQpg%lGe-XA(2|9|G zg%fKp_VE1J?ZNwcRr`HGo%liOOrgg0H_<`^$9)_`^B;o|#oEzpw|3t=#kG%)3i^rc z);+^-f_+f0QeVk01IGamFt_Y#Xk4+k`dhcR5wSge%Cq6Fq zm^*aoF#hskd}ZTrD8^Rj{D}>RNgb+I29$x2feH6G^kPrewBeQ DOX8`~ literal 0 HcmV?d00001 diff --git a/GA/__init__.py b/GA/__init__.py index 8b13789..23a8fa0 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1 +1,108 @@ +# This is the Orchestrator file, which will govern the flow. +from Constants.constant import Defaults +from GA.mutation import TimeTableMutation, TimeTableCrossOver +from GA.selection import TimeTableSelection +from GA.fitness import TimetableFitnessEvaluator +from GA.chromosome import TimeTableGeneration +from Samples.samples import ( + SubjectTeacherMap, + TeacherWorkload, + SpecialSubjects, + SubjectWeeklyQuota, + Classrooms, + Sections, + +) + + +def timetable_generation(): + # Create Chromosomes + timetable_generator = TimeTableGeneration( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=6, + total_classrooms=8, + total_labs=3, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + labs_list=Classrooms.labs, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + ) + + timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) + from icecream import ic + ic(timetable) + # Fitness of each Chromosome + fitness_calculator = TimetableFitnessEvaluator( + timetable, + timetable_generator.sections_manager.sections, + SubjectTeacherMap.subject_teacher_map, + timetable_generator.classrooms_manager.classrooms, + timetable_generator.classrooms_manager.labs, + timetable_generator.room_capacity_manager.room_capacity, + timetable_generator.room_capacity_manager.section_strength, + timetable_generator.subject_quota_limits, + timetable_generator.teacher_availability_preferences, + timetable_generator.weekly_workload, + ) + + fitness_scores = fitness_calculator.evaluate_timetable_fitness() + + + # Selection of all Chromosomes + selection_object = TimeTableSelection() + selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) + ic(len(selected_chromosomes)) + + # Crossover for all selected Chromosomes + crossover_object = TimeTableCrossOver() + crossover_chromosomes = [] + selected_chromosome_keys = list(selected_chromosomes.keys()) + + for i in range(0, len(selected_chromosome_keys), 2): + if i + 1 < len(selected_chromosome_keys): + parent1 = selected_chromosome_keys[i] + parent2 = selected_chromosome_keys[i + 1] + child1, child2 = crossover_object.perform_crossover( + timetable[parent1], + timetable[parent2] + ) + + crossover_chromosomes.append(child1) + crossover_chromosomes.append(child2) + + + # Mutate all crossover Chromosomes + mutation_object = TimeTableMutation() + mutated_chromosomes = [ + mutation_object.mutate_schedule_for_week(chromosome) + for chromosome in crossover_chromosomes + ] + + + ic(mutated_chromosomes) + ic(selected_chromosomes) + + ic(selected_chromosomes) + # Store best of Chromosomes + best_chromosome_score = -1 + best_chromosome = dict() + + for week_no, week_score in selected_chromosomes.items(): + if int(week_score) > best_chromosome_score: + best_chromosome_score = int(week_score) + best_chromosome = timetable[week_no] + + ic(f"Best Chromosome: {best_chromosome}") + return best_chromosome + + +def run_timetable_generation(): + for generation in range(Defaults.total_no_of_generations): + best_chromosome = timetable_generation() + return best_chromosome + + +print(run_timetable_generation()) diff --git a/Samples/__init__.py b/Samples/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/TimeTableLib.egg-info/PKG-INFO b/TimeTableLib.egg-info/PKG-INFO new file mode 100644 index 0000000..48390c1 --- /dev/null +++ b/TimeTableLib.egg-info/PKG-INFO @@ -0,0 +1,129 @@ +Metadata-Version: 2.1 +Name: TimeTableLib +Version: 0.1.0 +Summary: This Library generates timetable and is a plug and play solution for any python based backend service. +License: MIT +Project-URL: Documentation, https://github.com/TImeTable-GEHU/Time-Table/blob/main/README.md +Project-URL: Source, https://github.com/TImeTable-GEHU/Time-Table +Requires-Python: >=3.7 +Requires-Dist: psycopg2-binary==2.9.9 +Requires-Dist: pytest==7.4.2 +Requires-Dist: ortools==9.11.4210 +Requires-Dist: icecream==2.1.3 + +# Timetable Scheduling Project + +## 📚 Overview +Welcome to the **Timetable Scheduling Project**! This repository documents research, findings, discussions, and progress on creating an efficient timetable scheduling system that addresses real-world challenges in academic scheduling. Our goal is to develop a scheduling model that optimally assigns rooms, teachers, and time slots while accommodating various constraints. + +## 🔍 Project Goals +- **Optimal Assignment**: Effectively allocate rooms, teachers, and time slots. +- **Constraint Management**: Consider teacher preferences, student load, room capacities, and subject assignments. +- **Dynamic Adaptability**: Adjust to changes, such as adding new rooms or teachers, without complete model retraining. +- **Simplicity and Flexibility**: Simplify complex constraints while remaining adaptable to real-world needs. + +## 🧬 Genetic Algorithm +The project employs a Genetic Algorithm (GA) to solve the scheduling problem, inspired by the principles of natural selection. Key modules in our GA include: + +1. **Data Encoding and Decoding**: Converting solutions into chromosomes for efficiency. +2. **Initial Population**: Generating a diverse set of potential solutions under specified constraints. +3. **Evaluation of Population**: Using a fitness function to assess solution quality. +4. **Crossover Evolution**: Creating new solutions by combining existing ones. +5. **Mutation**: Introducing random changes to explore new potential solutions. + +### Advantages +- Flexibility compared to manual systems +- Reduced processing power requirements +- Quick generation of accurate timetables +- User-friendly data entry and revision +- Improved productivity and minimal paperwork + +### Disadvantages +- Requires initial raw content input +- High memory consumption +- Internet connectivity needed + +## 📋 Applications +The genetic algorithm can efficiently create various timetables, including: +- University Timetable +- Exam Timetable +- School Timetable +- College Timetable +- Teacher Timetable + +## 📊 Results +The system generates distinct timetables for each class, faculty member, and lab, preventing slot conflicts and allowing customization. The program meets both hard and soft scheduling constraints. + +## ⚙️ Fitness Function +The fitness function is a critical component of our Genetic Algorithm, as it evaluates the quality of each timetable solution. It incorporates both hard and soft constraints to ensure a balanced and effective scheduling outcome. + +### Hard Constraints +These are strict requirements that must be satisfied for a solution to be considered valid: + +1. **No Overlap**: + - Teachers cannot be assigned to multiple classes at the same time. + - Time slots must not overlap for the same section. + - The same classroom cannot be allocated to multiple sections during the same time slot. + +2. **Room Capacity**: + - Each classroom's capacity must accommodate the number of students assigned to that class. + +3. **Time Slot Allocation**: + - Classes must be scheduled within designated time slots. + +4. **Teacher Load Distribution**: + - The total hours assigned to a teacher should not exceed their maximum allowable teaching hours. + +### Soft Constraints +These are preferences that enhance the quality of the solution but are not mandatory: + +1. **Teacher Preferences**: + - Assignments should consider teacher preferences for certain time slots or days. + +2. **Gaps Between Classes**: + - Minimizing the number of gaps between classes for teachers is preferred. + +3. **Balanced Workload**: + - Aim for a balanced distribution of classes among teachers to prevent overloading any single teacher. + +4. **Half Days for Sections** + - Every section should be provided half days so that resources can be utilised properly and also labs and calsses should be balanced. + +### Fitness Score Calculation +The fitness score is calculated based on the following criteria: + +- Each hard constraint violation deducts a significant penalty from the score (e.g., -100 points for each violation). +- Soft constraint preferences add to the score (e.g., +10 points for each preference met). +- The final score is a reflection of both the number of constraints satisfied and the overall quality of the timetable. + +A higher fitness score indicates a better solution, leading to more optimal timetables. The Genetic Algorithm iteratively evolves the population of solutions to maximize this fitness score over generations. + +## 🚀 Future Scope +This project aims to simplify faculty management by automatically assigning courses, considering workload balance, and tracking expertise. Future enhancements may include a master schedule for departments, integration with university websites, and personalized time slot assignments. + +## 🛠️ Installation + +To run this project, clone the repository, set up a virtual environment, and install the required dependencies: + +```bash +git clone https://github.com/yourusername/timetable-scheduling-project.git +cd timetable-scheduling-project + +# Set up a virtual environment +python -m venv venv + +# Activate the virtual environment +# For Linux/macOS: +source venv/bin/activate +# For Windows: +.\venv\Scripts\activate + +# Install dependencies +pip install -r requirements.txt + +# Optionally, set up environment variables in a .env file (e.g., DATABASE_URL, SECRET_KEY) +# Create and edit .env file with necessary variables +touch .env + +echo "Setup complete. You can now run the application." + diff --git a/TimeTableLib.egg-info/SOURCES.txt b/TimeTableLib.egg-info/SOURCES.txt new file mode 100644 index 0000000..89b7535 --- /dev/null +++ b/TimeTableLib.egg-info/SOURCES.txt @@ -0,0 +1,22 @@ +README.md +setup.py +Constants/__init__.py +Constants/classroom_allocate.py +Constants/constant.py +Constants/is_conflict.py +Constants/section_allocation.py +Constants/teacher's_tt.py +Constants/time_intervals.py +Constants/utils.py +GA/__init__.py +GA/chromosome.py +GA/fitness.py +GA/mutation.py +GA/selection.py +Samples/__init__.py +Samples/samples.py +TimeTableLib.egg-info/PKG-INFO +TimeTableLib.egg-info/SOURCES.txt +TimeTableLib.egg-info/dependency_links.txt +TimeTableLib.egg-info/requires.txt +TimeTableLib.egg-info/top_level.txt \ No newline at end of file diff --git a/TimeTableLib.egg-info/dependency_links.txt b/TimeTableLib.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/TimeTableLib.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/TimeTableLib.egg-info/requires.txt b/TimeTableLib.egg-info/requires.txt new file mode 100644 index 0000000..6efb963 --- /dev/null +++ b/TimeTableLib.egg-info/requires.txt @@ -0,0 +1,4 @@ +psycopg2-binary==2.9.9 +pytest==7.4.2 +ortools==9.11.4210 +icecream==2.1.3 diff --git a/TimeTableLib.egg-info/top_level.txt b/TimeTableLib.egg-info/top_level.txt new file mode 100644 index 0000000..aaadae1 --- /dev/null +++ b/TimeTableLib.egg-info/top_level.txt @@ -0,0 +1,3 @@ +Constants +GA +Samples diff --git a/__init__.py b/__init__.py index 8fb8fc1..90a99a7 100644 --- a/__init__.py +++ b/__init__.py @@ -12,7 +12,7 @@ SubjectWeeklyQuota, Classrooms, Sections, - + ) @@ -102,6 +102,3 @@ def run_timetable_generation(): for generation in range(Defaults.total_no_of_generations): best_chromosome = timetable_generation() return best_chromosome - - -run_timetable_generation() \ No newline at end of file diff --git a/build/lib/Constants/__init__.py b/build/lib/Constants/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/Constants/classroom_allocate.py b/build/lib/Constants/classroom_allocate.py new file mode 100644 index 0000000..238c1d2 --- /dev/null +++ b/build/lib/Constants/classroom_allocate.py @@ -0,0 +1,54 @@ +from ortools.sat.python import cp_model + +def assign_section_to_classes(x_section, y_classrooms, z_time_slots): + # Create a CP-SAT model + model = cp_model.CpModel() + + # Decision variables + classrooms = [ + model.NewIntVar(0, y_classrooms - 1, f'classroom_{i}') for i in range(x_section) + ] + timeslots = [ + model.NewIntVar(0, z_time_slots - 1, f'timeslot_{i}') for i in range(x_section) + ] + + # Constraints + # 1. No two section can share the same classroom and time slot + for i in range(x_section): + for j in range(i + 1, x_section): + # Define a Boolean variable for the condition (timeslots[i] == timeslots[j]) + same_timeslot = model.NewBoolVar(f'same_timeslot_{i}_{j}') + model.Add(timeslots[i] == timeslots[j]).OnlyEnforceIf(same_timeslot) + model.Add(timeslots[i] != timeslots[j]).OnlyEnforceIf(same_timeslot.Not()) + + # Enforce classroom difference if the timeslot is the same + model.Add(classrooms[i] != classrooms[j]).OnlyEnforceIf(same_timeslot) + + + # Solver + solver = cp_model.CpSolver() + status = solver.Solve(model) + + # Check results + if status == cp_model.OPTIMAL or status == cp_model.FEASIBLE: + for i in range(x_section): + assigned_classroom = solver.Value(classrooms[i]) + assigned_timeslot = solver.Value(timeslots[i]) + print(f"Subject {i + 1} -> Classroom {assigned_classroom}, Timeslot {assigned_timeslot}") + else: + print("No feasible solution found.") + +from datetime import datetime + + +start_time = datetime.now() + +X = 80 # Number of section +Y = 50 # Number of classrooms +Z = 7 # Number of time slots + +assign_section_to_classes(X, Y, Z) + +end_time = datetime.now() + +print(end_time - start_time) \ No newline at end of file diff --git a/build/lib/Constants/constant.py b/build/lib/Constants/constant.py new file mode 100644 index 0000000..0bf8d3f --- /dev/null +++ b/build/lib/Constants/constant.py @@ -0,0 +1,69 @@ +class Defaults: + # All the defaults values over GA folder. + room_capacity = 60 + working_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + starting_section_fitness = 1000 + max_class_capacity = 250 + initial_no_of_chromosomes = 10 + total_no_of_generations = 10 + + +class Sections: + def __init__(self, section_number): + self.sections = [chr(65 + i) for i in range(section_number)] + + +class Classrooms: + def __init__(self, room_count, lab_count): + self.classrooms = [f"R{i + 1}" for i in range(room_count)] + self.labs = [f"L{i + 1}" for i in range(lab_count)] + + +class RoomCapacity: + def __init__(self, classrooms, sections, default_capacity=Defaults.room_capacity): + self.room_capacity = {room: default_capacity for room in classrooms} + self.section_strength = {section: default_capacity for section in sections} + + +class SubjectWeeklyQuota: + def __init__(self, subject_quota): + self.subject_quota = subject_quota + + +class TeacherPreloads: + def __init__(self, teacher_preferences: dict, weekly_workload: dict): + self.teacher_preferences = teacher_preferences + self.weekly_workload = weekly_workload + + +class TeachersDutyDays: + def __init__(self, teacher_duty_days: dict): + self.teacher_duty_days = teacher_duty_days + + +class SpecialSubjects: + def __init__(self, special_subjects: list, labs: list, specialization_subjects: list): + self.special_subjects = special_subjects + self.labs = labs + self.specialization_subjects = specialization_subjects + + +class PenaltyConstants: + PENALTY_TEACHER_DOUBLE_BOOKED = 30 + PENALTY_CLASSROOM_DOUBLE_BOOKED = 20 + PENALTY_OVER_CAPACITY = 25 + PENALTY_UN_PREFERRED_SLOT = 5 + PENALTY_OVERLOAD_TEACHER = 10 + PENALTY_NON_DUTY_DAY=40 + + +class SectionsConstants: + # Define attribute weights and conditions + ATTRIBUTE_WEIGHTS = { + 'good_cgpa': 1, # 2^0 + 'hostler': 2, # 2^1 + } + + ATTRIBUTE_CONDITIONS = { + 'hostler': lambda student: student.get('Hostler', False), + } diff --git a/build/lib/Constants/is_conflict.py b/build/lib/Constants/is_conflict.py new file mode 100644 index 0000000..d13e692 --- /dev/null +++ b/build/lib/Constants/is_conflict.py @@ -0,0 +1,124 @@ +import psycopg2 +from Samples.samples import SampleChromosome +class IsConflict: + def __init__(self, dbname="timetable", user="postgres", password="root", host="localhost", port="5432"): + self.dbname = dbname + self.user = user + self.password = password + self.host = host + self.port = port + self.conn = None + self.cursor = None + + def connect_to_database(self): + try: + self.conn = psycopg2.connect( + dbname=self.dbname, + user=self.user, + password=self.password, + host=self.host, + port=self.port + ) + self.cursor = self.conn.cursor() + print("Connected to PostgreSQL database!") + except Exception as e: + print(f"Error connecting to the database: {e}") + raise + + def insert_schedule(self, timetable, chromosome_name): + try: + for day, sections in timetable.items(): + for section, classes in sections.items(): + for cls in classes: + + print(f"Inserting data: {chromosome_name}, {day}, {section}, {cls['teacher_id']}, {cls['subject_id']}, {cls['classroom_id']}, {cls['time_slot']}") + self.cursor.execute(""" + INSERT INTO schedule (chromosome, day, section, teacher_id, subject_id, classroom_id, time_slot) + VALUES (%s, %s, %s, %s, %s, %s, %s); + """, (chromosome_name, day, section, cls['teacher_id'], cls['subject_id'], cls['classroom_id'], cls['time_slot'])) + self.conn.commit() + print(f"Schedule data for {chromosome_name} inserted successfully.") + except Exception as e: + self.conn.rollback() + print(f"Error inserting schedule data: {e}") + + def detect_teacher_conflicts(self): + self.cursor.execute(""" + SELECT s1.teacher_id, s1.day, s1.time_slot, COUNT(*) + FROM schedule s1 + JOIN schedule s2 + ON s1.teacher_id = s2.teacher_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.teacher_id, s1.day, s1.time_slot + HAVING COUNT(*) > 1; + """) + return self.cursor.fetchall() + + def detect_classroom_conflicts(self): + self.cursor.execute(""" + SELECT s1.classroom_id, s1.day, s1.time_slot, COUNT(*) + FROM schedule s1 + JOIN schedule s2 + ON s1.classroom_id = s2.classroom_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.classroom_id, s1.day, s1.time_slot + HAVING COUNT(*) > 1; + """) + return self.cursor.fetchall() + + def truncate_schedule(self): + self.cursor.execute("TRUNCATE TABLE schedule;") + self.conn.commit() + print("Schedule table truncated.") + + def close_connection(self): + if self.cursor: + self.cursor.close() + if self.conn: + self.conn.close() + print("\nDatabase connection closed.") + + def process_schedules(self, timetable1, timetable2): + try: + self.connect_to_database() + + # Insert Chromosome data for both timetables + self.insert_schedule(timetable1, "Week 1") + self.insert_schedule(timetable2, "Week 2") + + # Check for Teacher Conflicts + teacher_conflicts = self.detect_teacher_conflicts() + + # Check for Classroom Conflicts + classroom_conflicts = self.detect_classroom_conflicts() + + # Return both conflicts as a dictionary + return { + "teacher_conflicts": teacher_conflicts, + "classroom_conflicts": classroom_conflicts + } + + finally: + # Cleanup and close database connection + self.truncate_schedule() + self.close_connection() + + +if __name__ == "__main__": + timetable_processor = IsConflict() + sample_chromosome_1 = SampleChromosome() + sample_chromosome_2 = SampleChromosome() + chromosome1 = sample_chromosome_1.schedule1 + chromosome2 = sample_chromosome_2.schedule2 + conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) + print("\nTeacher Conflicts:") + for conflict in conflicts["teacher_conflicts"]: + print(f"Teacher ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}") + + print("\nClassroom Conflicts:") + for conflict in conflicts["classroom_conflicts"]: + print(f"Classroom ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}") diff --git a/build/lib/Constants/section_allocation.py b/build/lib/Constants/section_allocation.py new file mode 100644 index 0000000..4c866a2 --- /dev/null +++ b/build/lib/Constants/section_allocation.py @@ -0,0 +1,164 @@ +import random +from collections import defaultdict +from typing import List, Dict +from Constants.constant import SectionsConstants + + +class StudentScorer: + def __init__(self, attribute_weights: Dict[str, int] = None): + """ + Initialize the scorer with attribute weights. + + Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. + """ + + self.attribute_weights = attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS + + + def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: int = 30) -> float: + """ + Calculate the CGPA threshold for the top X% of students. + + Args: + students (List[Dict]): List of student dictionaries with 'CGPA'. + top_percentage (int): Percentage of students considered top. + + Returns: + float: The CGPA threshold. + + """ + + sorted_cgpas = sorted( + (student['CGPA'] for student in students), + reverse=True + ) + + threshold_index = max(1, int(len(sorted_cgpas) * top_percentage / 100)) - 1 + return sorted_cgpas[threshold_index] + + + def assign_dynamic_conditions(self, cgpa_threshold: float): + """ + Assign a dynamic condition for CGPA based on the threshold. + + Args: + cgpa_threshold (float): The CGPA threshold for "good_cgpa". + """ + SectionsConstants.ATTRIBUTE_CONDITIONS['good_cgpa'] = lambda student: student['CGPA'] >= cgpa_threshold + + + def calculate_student_score(self, student: Dict) -> int: + """ + Calculate the score for a student based on attribute weights. + + Args: + student (Dict): A dictionary representing a student. + + Returns: + int: The student's score. + """ + + return sum( + weight + for attribute, weight in self.attribute_weights.items() + if SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False)(student) + ) + + + def assign_scores_to_students(self, students: List[Dict]) -> List[Dict]: + """ + Assign scores to all students. + + Args: + students (List[Dict]): List of student dictionaries. + + Returns: + List[Dict]: The updated list of students with scores. + """ + + for student in students: + student['score'] = self.calculate_student_score(student) + return students + + + def divide_students_into_sections(self, students: List[Dict], class_strength: int) -> List[List[Dict]]: + """ + Divide students into sections based on their scores and class strength. + + Args: + students (List[Dict]): List of student dictionaries with scores. + class_strength (int): Maximum number of students per section. + + Returns: + List[List[Dict]]: List of sections containing students. + """ + grouped_by_score = defaultdict(list) + for student in students: + grouped_by_score[student['score']].append(student) + + sections = [] + current_section = [] + + for score_group in grouped_by_score.values(): + for student in score_group: + current_section.append(student) + if len(current_section) == class_strength: + sections.append(current_section) + current_section = [] + + if current_section: + sections.append(current_section) + + return sections + + + + + + +def generate_students(num_students: int = 500) -> List[Dict]: + """ + Generate a list of random students with CGPA and hostler status. + + Args: + num_students (int): Number of students to generate. + + Returns: + List[Dict]: List of student dictionaries. + """ + + return [ + { + 'ID': i, + 'CGPA': round(random.uniform(6.0, 9.8), 2), + 'Hostler': random.choice([True, False]) + } + for i in range(1, num_students + 1) + ] + + +if __name__ == "__main__": + # Initialize constants and scorer + scorer = StudentScorer() + students = generate_students(num_students=500) + + # Calculate the dynamic CGPA threshold + cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold(students, top_percentage=30) + print(f"Dynamic CGPA Threshold (Top 30%): {cgpa_threshold}") + + # Assign conditions and scores + scorer.assign_dynamic_conditions(cgpa_threshold) + students_with_scores = scorer.assign_scores_to_students(students) + + # Divide students into sections + class_strength = 50 + sections = scorer.divide_students_into_sections(students_with_scores, class_strength) + + # Display the sections + for i, section in enumerate(sections, 1): + print(f"Section {i} (Total Students: {len(section)}):") + for student in section: + print( + f" Student ID: {student['ID']}, CGPA: {student['CGPA']}, " + f"Hostler: {student['Hostler']}, score: {student['score']}" + ) diff --git a/build/lib/Constants/teacher's_tt.py b/build/lib/Constants/teacher's_tt.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/Constants/time_intervals.py b/build/lib/Constants/time_intervals.py new file mode 100644 index 0000000..1a6de92 --- /dev/null +++ b/build/lib/Constants/time_intervals.py @@ -0,0 +1,84 @@ +from datetime import datetime + + +class TimeIntervalConstant: + time_slots = { + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + } + + time_mapping = { + "9:00 - 9:55": 1, + "9:55 - 10:50": 2, + "11:10 - 12:05": 3, + "12:05 - 1:00": 4, + "1:20 - 2:15": 5, + "2:15 - 3:10": 6, + "3:30 - 4:25": 7, + } + + @staticmethod + def get_slot(slot_number: int) -> str: + """Retrieve time slot based on slot number. + + Args: + slot_number (int): The slot number corresponding to a time interval. + + Returns: + str: The time interval for the given slot number. + + Raises: + ValueError: If the slot number is out of the valid range. + """ + + if slot_number in TimeIntervalConstant.time_slots: + return TimeIntervalConstant.time_slots[slot_number] + + else: + max_slot = len(TimeIntervalConstant.time_slots) + raise ValueError(f"Invalid slot number. Please provide a slot number between 1 and {max_slot + 1}.") + + + @classmethod + def get_slot_number(cls, start_time: str, end_time: str): + """Get the slot number for a given start and end time. + + Args: + start_time (str): The start time in "HH:MM" format. + end_time (str): The end time in "HH:MM" format. + + Returns: + int or str: The slot number if found; otherwise, returns an error message. + """ + + try: + # Format start and end times to ensure they only include hours and minutes + start_time = str(datetime.strptime(start_time, "%H:%M").time()).strip(" ") + end_time = str(datetime.strptime(end_time, "%H:%M").time()).strip(" ") + + for slot, interval in cls.time_slots.items(): + # Making string in this format: "3:30 - 4:25". + slot_start_time = datetime.strptime(interval.split(" - ")[0], "%H:%M").time() + slot_end_time = datetime.strptime(interval.split(" - ")[1], "%H:%M").time() + + if start_time == slot_start_time and end_time == slot_end_time: + return slot + raise LookupError("No Time slot for this time interval found!") + + except ValueError: + raise ValueError("Invalid time format!") + + @staticmethod + def get_all_slot_numbers(): + """Retrieve all slot numbers.""" + return list(TimeIntervalConstant.time_slots.keys()) + + @staticmethod + def get_all_time_slots(): + """Retrieve all time intervals.""" + return list(TimeIntervalConstant.time_slots.values()) diff --git a/build/lib/Constants/utils.py b/build/lib/Constants/utils.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/build/lib/Constants/utils.py @@ -0,0 +1 @@ + diff --git a/build/lib/GA/__init__.py b/build/lib/GA/__init__.py new file mode 100644 index 0000000..213ef33 --- /dev/null +++ b/build/lib/GA/__init__.py @@ -0,0 +1,105 @@ +# This is the Orchestrator file, which will govern the flow. + +from Constants.constant import Defaults +from GA.mutation import TimeTableMutation, TimeTableCrossOver +from GA.selection import TimeTableSelection +from GA.fitness import TimetableFitnessEvaluator +from GA.chromosome import TimeTableGeneration +from Samples.samples import ( + SubjectTeacherMap, + TeacherWorkload, + SpecialSubjects, + SubjectWeeklyQuota, + Classrooms, + Sections, + +) + + +def timetable_generation(): + # Create Chromosomes + timetable_generator = TimeTableGeneration( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=6, + total_classrooms=8, + total_labs=3, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + labs_list=Classrooms.labs, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + ) + + timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) + from icecream import ic + ic(timetable) + # Fitness of each Chromosome + fitness_calculator = TimetableFitnessEvaluator( + timetable, + timetable_generator.sections_manager.sections, + SubjectTeacherMap.subject_teacher_map, + timetable_generator.classrooms_manager.classrooms, + timetable_generator.classrooms_manager.labs, + timetable_generator.room_capacity_manager.room_capacity, + timetable_generator.room_capacity_manager.section_strength, + timetable_generator.subject_quota_limits, + timetable_generator.teacher_availability_preferences, + timetable_generator.weekly_workload, + ) + + fitness_scores = fitness_calculator.evaluate_timetable_fitness() + + + # Selection of all Chromosomes + selection_object = TimeTableSelection() + selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) + ic(len(selected_chromosomes)) + + # Crossover for all selected Chromosomes + crossover_object = TimeTableCrossOver() + crossover_chromosomes = [] + selected_chromosome_keys = list(selected_chromosomes.keys()) + + for i in range(0, len(selected_chromosome_keys), 2): + if i + 1 < len(selected_chromosome_keys): + parent1 = selected_chromosome_keys[i] + parent2 = selected_chromosome_keys[i + 1] + child1, child2 = crossover_object.perform_crossover( + timetable[parent1], + timetable[parent2] + ) + + crossover_chromosomes.append(child1) + crossover_chromosomes.append(child2) + + + # Mutate all crossover Chromosomes + mutation_object = TimeTableMutation() + mutated_chromosomes = [ + mutation_object.mutate_schedule_for_week(chromosome) + for chromosome in crossover_chromosomes + ] + + + ic(mutated_chromosomes) + ic(selected_chromosomes) + + ic(selected_chromosomes) + # Store best of Chromosomes + best_chromosome_score = -1 + best_chromosome = dict() + + for week_no, week_score in selected_chromosomes.items(): + if int(week_score) > best_chromosome_score: + best_chromosome_score = int(week_score) + best_chromosome = timetable[week_no] + + ic(f"Best Chromosome: {best_chromosome}") + return best_chromosome + + +def run_timetable_generation(): + for generation in range(Defaults.total_no_of_generations): + best_chromosome = timetable_generation() + return best_chromosome diff --git a/build/lib/GA/chromosome.py b/build/lib/GA/chromosome.py new file mode 100644 index 0000000..74c86b4 --- /dev/null +++ b/build/lib/GA/chromosome.py @@ -0,0 +1,223 @@ +import random +from Constants.time_intervals import TimeIntervalConstant +from Constants.constant import ( + Sections, + Classrooms, + RoomCapacity, + Defaults, +) + +class TimeTableGeneration: + def __init__( + self, + teacher_subject_mapping: dict, + total_sections: int, + total_classrooms: int, + total_labs: int, + teacher_preferences: dict, + teacher_weekly_workload: dict, + special_subjects: dict, + subject_quota_limits: dict, + labs_list: list, + teacher_duty_days: dict, + ): + self.sections_manager = Sections(total_sections) + self.classrooms_manager = Classrooms(total_classrooms, total_labs) + self.room_capacity_manager = RoomCapacity( + self.classrooms_manager.classrooms, self.sections_manager.sections + ) + self.weekdays = Defaults.working_days + self.subject_teacher_mapping = teacher_subject_mapping + self.subject_quota_limits = subject_quota_limits + self.lab_subject_list = labs_list + self.special_subject_list = special_subjects + self.teacher_availability_preferences = teacher_preferences + self.available_time_slots = TimeIntervalConstant.time_slots + self.teacher_duty_days = teacher_duty_days + self.weekly_workload = teacher_weekly_workload + + self.teacher_assignment_tracker = {teacher: 0 for teacher in teacher_weekly_workload.keys()} + self._map_sections_to_classrooms() + self._teacher_section() + + def _map_sections_to_classrooms(self): + """Map sections to classrooms based on capacity.""" + sorted_classrooms = sorted( + self.classrooms_manager.classrooms, + key=lambda c: self.room_capacity_manager.room_capacity[c], + reverse=True, + ) + sorted_sections = sorted( + self.sections_manager.sections, + key=lambda s: self.room_capacity_manager.section_strength[s], + reverse=True, + ) + + self.section_to_classroom_map = {} + for section in sorted_sections: + for classroom in sorted_classrooms: + if self.room_capacity_manager.room_capacity[classroom] >= self.room_capacity_manager.section_strength[section]: + self.section_to_classroom_map[section] = classroom + sorted_classrooms.remove(classroom) + break + else: + raise ValueError( + f"No classroom can accommodate section {section} with strength {self.room_capacity_manager.section_strength[section]}." + ) + + def _teacher_section(self): + """Map sections to teachers and subjects, ensuring balanced assignments.""" + self.teacher_section_map = { + section: {subject: None for subject in self.subject_teacher_mapping.keys()} + for section in self.sections_manager.sections + } + + for section in self.sections_manager.sections: + for subject, teachers in self.subject_teacher_mapping.items(): + # Select teacher with the least workload + teachers_with_least_load = sorted( + teachers, key=lambda teacher: self.teacher_assignment_tracker[teacher] + ) + selected_teacher = teachers_with_least_load[0] + self.teacher_section_map[section][subject] = selected_teacher + self.teacher_assignment_tracker[selected_teacher] += 1 + + def _initialize_teacher_workload_tracker(self): + """Initialize a tracker for teacher workloads.""" + return {teacher: 0 for teacher in self.weekly_workload.keys()} + + def _generate_section_schedule( + self, section, half_day_section_list, section_subject_usage_tracker, teacher_workload_tracker + ): + """Generate a schedule for an individual section.""" + section_schedule = [] + subjects_scheduled_today = set() + assigned_classroom = self.section_to_classroom_map[section] + total_slots_for_section = 4 if section in half_day_section_list else 7 + + for slot_index, current_time_slot in enumerate(self.available_time_slots.values(), start=1): + if slot_index > total_slots_for_section: + break + + assigned_teacher, selected_subject, assigned_room = self._assign_subject_and_teacher( + section, + slot_index, + subjects_scheduled_today, + assigned_classroom, + section_subject_usage_tracker, + teacher_workload_tracker, + ) + section_schedule.append( + { + "teacher_id": assigned_teacher, + "subject_id": selected_subject, + "classroom_id": assigned_room, + "time_slot": current_time_slot, + } + ) + if selected_subject != "Library": + section_subject_usage_tracker[section][selected_subject] += 1 + + # Handle double-slot subjects + if selected_subject in self.lab_subject_list and slot_index + 1 <= total_slots_for_section: + next_time_slot = self.available_time_slots.get(slot_index + 1) + section_schedule.append( + { + "teacher_id": assigned_teacher, + "subject_id": selected_subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + } + ) + section_subject_usage_tracker[section][selected_subject] += 1 + return section_schedule + + def _assign_subject_and_teacher( + self, + section, + slot_index, + subjects_scheduled_today, + assigned_classroom, + section_subject_usage_tracker, + teacher_workload_tracker, + ): + """Assign a subject and teacher for a specific slot.""" + available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) + random.shuffle(available_subjects) + + assigned_teacher = None + selected_subject = None + assigned_room = None + + for subject in available_subjects: + if subject in self.lab_subject_list and slot_index not in [1, 3, 5]: + continue + if subject in self.special_subject_list and slot_index not in [5]: + continue + + if subject not in subjects_scheduled_today: + teachers_for_subject = self.subject_teacher_mapping[subject] + teachers_with_least_load = sorted( + teachers_for_subject, key=lambda teacher: teacher_workload_tracker[teacher] + ) + assigned_teacher = teachers_with_least_load[0] + teacher_workload_tracker[assigned_teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + assigned_room = ( + self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] + if subject in self.lab_subject_list + else assigned_classroom + ) + break + + if not assigned_teacher: + selected_subject = "Library" + assigned_teacher = "None" + assigned_room = assigned_classroom + + return assigned_teacher, selected_subject, assigned_room + + def _get_available_subjects(self, section, section_subject_usage_tracker): + """Get a list of subjects available for a specific section.""" + return [ + subject + for subject in self.subject_teacher_mapping.keys() + if section_subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) + ] + + def generate_daily_schedule(self, half_day_section_list, section_subject_usage_tracker): + """Generate the daily schedule for all sections.""" + daily_schedule = {} + teacher_workload_tracker = self._initialize_teacher_workload_tracker() + + for section in self.sections_manager.sections: + section_schedule = self._generate_section_schedule( + section, half_day_section_list, section_subject_usage_tracker, teacher_workload_tracker + ) + daily_schedule[section] = section_schedule + + return daily_schedule, section_subject_usage_tracker + + def _generate_weekly_schedule(self): + """Generate a schedule for a single week.""" + week_schedule = {} + section_subject_usage_tracker = { + section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} + for section in self.sections_manager.sections + } + for week_day in self.weekdays: + half_day_sections = self.sections_manager.sections[: len(self.sections_manager.sections) // 2] + daily_schedule, section_subject_usage_tracker = self.generate_daily_schedule( + half_day_sections, section_subject_usage_tracker + ) + week_schedule[week_day] = daily_schedule + return week_schedule, section_subject_usage_tracker + + def create_timetable(self, num_weeks): + """Create the timetable for the given number of weeks.""" + timetable = {} + for week in range(1, num_weeks + 1): + week_schedule, section_subject_usage_tracker = self._generate_weekly_schedule() + timetable[f"Week {week}"] = week_schedule + return timetable diff --git a/build/lib/GA/fitness.py b/build/lib/GA/fitness.py new file mode 100644 index 0000000..7dcdb65 --- /dev/null +++ b/build/lib/GA/fitness.py @@ -0,0 +1,160 @@ +import json +from Constants.time_intervals import TimeIntervalConstant +from GA.chromosome import TimeTableGeneration +from Constants.constant import ( + PenaltyConstants, + Defaults, +) +from Samples.samples import SubjectTeacherMap, SpecialSubjects, SubjectWeeklyQuota, Classrooms, TeacherWorkload + + +class TimetableFitnessEvaluator: + def __init__( + self, + timetable, + all_sections, + subject_teacher_mapping, + available_classrooms, + available_labs, + classroom_capacity, + section_student_strength, + subject_quota_data, + teacher_time_preferences, + teacher_daily_workload, + ): + self.timetable = timetable + self.available_days = Defaults.working_days # Removed trailing comma + self.all_sections = all_sections + self.subject_teacher_mapping = subject_teacher_mapping + self.available_classrooms = available_classrooms + self.available_labs = available_labs + self.classroom_capacity = classroom_capacity + self.section_student_strength = section_student_strength + self.subject_quota_data = subject_quota_data + self.teacher_time_preferences = teacher_time_preferences + self.teacher_daily_workload = teacher_daily_workload + + def evaluate_timetable_fitness(self): + daily_section_fitness_scores = {} + weekly_fitness_scores = {} + teacher_workload_tracking = {} + for week, week_schedule in self.timetable.items(): + weekly_fitness = 0 + daily_section_fitness_scores[week] = {} + teacher_time_slot_tracking = {} + for day, day_schedule in week_schedule.items(): + daily_section_fitness_scores[week][day] = {} + day_fitness = 0 + for section, section_schedule in day_schedule.items(): + section_fitness = Defaults.starting_section_fitness + + classroom_time_slot_tracking = {} + + for schedule_item in section_schedule: + assigned_teacher = schedule_item["teacher_id"] + assigned_classroom = schedule_item["classroom_id"] + assigned_time_slot = TimeIntervalConstant.time_mapping.get( + schedule_item["time_slot"] + ) + section_strength = self.section_student_strength.get(section, 0) + + # Penalty 1: Double booking a teacher in the same time slot + if (assigned_teacher, assigned_time_slot) in teacher_time_slot_tracking.keys(): + section_fitness -= PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED + else: + teacher_time_slot_tracking[(assigned_teacher, assigned_time_slot)] = section + + # Penalty 2: Double booking a classroom in the same time slot + if (assigned_classroom, assigned_time_slot) in classroom_time_slot_tracking: + section_fitness -= PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED + else: + classroom_time_slot_tracking[(assigned_classroom, assigned_time_slot)] = section + + # Penalty 3: Over-capacity classrooms + if section_strength > self.classroom_capacity.get( + assigned_classroom, Defaults.max_class_capacity + ): + section_fitness -= PenaltyConstants.PENALTY_OVER_CAPACITY + + # Penalty 4: Assigning teachers during unpreferred time slots + preferred_time_slots = self.teacher_time_preferences.get( + assigned_teacher, [] + ) + if assigned_time_slot not in preferred_time_slots: + section_fitness -= PenaltyConstants.PENALTY_UN_PREFERRED_SLOT + + # Penalty 5: Scheduling teacher on a non-duty day + assigned_day = day + if assigned_day not in TeacherWorkload.teacher_duty_days.get(assigned_teacher, []): + section_fitness -= PenaltyConstants.PENALTY_NON_DUTY_DAY + + # Tracking teacher workload + if assigned_teacher not in teacher_workload_tracking: + teacher_workload_tracking[assigned_teacher] = [] + teacher_workload_tracking[assigned_teacher].append(assigned_time_slot) + + # Penalty 6: Exceeding teacher daily workload + for teacher, times_assigned in teacher_workload_tracking.items(): + if teacher is not None: + if len(times_assigned) > self.teacher_daily_workload.get(teacher, 0): + section_fitness -= PenaltyConstants.PENALTY_OVERLOAD_TEACHER + + daily_section_fitness_scores[week][day][section] = section_fitness + day_fitness += section_fitness + + weekly_fitness += day_fitness + + weekly_fitness_scores[week] = weekly_fitness + + return daily_section_fitness_scores, weekly_fitness_scores + + +if __name__ == "__main__": + total_sections = 6 + total_classrooms = 8 + total_labs = 3 + + # Generate timetable + timetable_generator = TimeTableGeneration( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + labs_list=SpecialSubjects.Labs, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + ) + generated_timetables = timetable_generator.create_timetable(5) + + # Evaluate fitness + fitness_evaluator = TimetableFitnessEvaluator( + generated_timetables, + timetable_generator.sections_manager.sections, + SubjectTeacherMap.subject_teacher_map, + timetable_generator.classrooms_manager.classrooms, + timetable_generator.classrooms_manager.labs, + timetable_generator.room_capacity_manager.room_capacity, + timetable_generator.room_capacity_manager.section_strength, + timetable_generator.subject_quota_limits, + timetable_generator.teacher_availability_preferences, + timetable_generator.weekly_workload, + ) + + section_fitness_data, weekly_fitness_data = fitness_evaluator.evaluate_timetable_fitness() + + # Save results + with open("GA/chromosome.json", "w") as timetable_file: + json.dump(generated_timetables, timetable_file, indent=4) + + fitness_output_data = { + "section_fitness_scores": section_fitness_data, + "weekly_fitness_scores": weekly_fitness_data, + } + + with open("GA/fitness.json", "w") as fitness_scores_file: + json.dump(fitness_output_data, fitness_scores_file, indent=4) + + print("Timetable and fitness scores have been saved.") diff --git a/build/lib/GA/mutation.py b/build/lib/GA/mutation.py new file mode 100644 index 0000000..76156b6 --- /dev/null +++ b/build/lib/GA/mutation.py @@ -0,0 +1,88 @@ +import copy +import random + +from Constants.constant import Defaults + + +class TimeTableMutation: + def __init__(self, mutation_rate = 0.7): + """ + Initializes the Mutation class with a specified mutation rate. + + Args: + mutation_rate (float): Fraction (0 to 1) of sections to mutate. + """ + + self.mutation_rate = mutation_rate + + + def mutate_time_slots_in_section(self, schedule, section): + """ + Mutates the time slots within a particular section by shuffling them. + + Args: + schedule (dict): The schedule containing sections and their data. + section (str): The section in which mutation should occur. + + Returns: + bool: True if mutation was performed, False otherwise. + """ + + if section in schedule: + section_list = schedule[section] + + if len(section_list) < 2: # Not enough time slots to shuffle + return False + + time_slots = [entry["time_slot"] for entry in section_list] + random.shuffle(time_slots) + + for i, entry in enumerate(section_list): + entry["time_slot"] = time_slots[i] + + return True + return False + + + def mutate_schedule_for_week(self, weekly_schedule): + """ + Mutates the time slots for all weekdays in the weekly schedule. + + Args: + weekly_schedule (dict): The weekly schedule containing days, sections, and data. + + Returns: + dict: The mutated weekly schedule. + """ + + # Create a deep copy to keep the original intact + mutated_weekly_schedule = copy.deepcopy(weekly_schedule) + + for day, day_schedule in mutated_weekly_schedule.items(): + # Calculate the number of sections to mutate + total_sections = list(day_schedule.keys()) + num_to_mutate = max(1, int(self.mutation_rate * len(total_sections))) + + # Randomly select sections to mutate + sections_to_mutate = random.sample(total_sections, num_to_mutate) + for section in sections_to_mutate: + self.mutate_time_slots_in_section(day_schedule, section) + + return mutated_weekly_schedule + + +class TimeTableCrossOver: + def perform_crossover(self, timetable1: dict, timetable2: dict): + """ + Crossovers two timetables. + Rule1: Swap the entire day TT. + """ + + crossover_days = Defaults.working_days + + # Perform the crossover between week1 and week2 + for day in crossover_days: + if day in (timetable1, timetable2): + timetable1[day], timetable2[day] = timetable1[day], timetable1[day] + + return timetable1, timetable2 diff --git a/build/lib/GA/selection.py b/build/lib/GA/selection.py new file mode 100644 index 0000000..ac254ea --- /dev/null +++ b/build/lib/GA/selection.py @@ -0,0 +1,119 @@ +import random + + +class TimeTableSelection: + def __init__(self): + pass + + + def select_chromosomes( + self, + weekly_fitness_scores, + top_percentage=0.20, + roulette_percentage=0.10 + ): + """ + Entry point for selecting chromosomes. + Select chromosomes based on top scores and roulette wheel selection. + """ + + if not weekly_fitness_scores: + print("Weekly fitness scores are empty. Ensure data is loaded correctly!") + return {} + + top_selected, remaining_scores = self.get_top_and_remaining_items(weekly_fitness_scores, top_percentage) + + roulette_selected = self.roulette_wheel_selection( + remaining_scores, + int( + len(weekly_fitness_scores) * roulette_percentage + ) + ) + + selected_fitness = {**top_selected, **roulette_selected} + # self.display_selected_chromosomes(selected_fitness) + return selected_fitness + + + @staticmethod + def calculate_cumulative_probabilities(scores): + """ + Calculate cumulative probabilities for roulette wheel selection. + """ + + cumulative_probabilities = [] + cumulative_sum = 0 + + for week, score in scores.items(): + cumulative_sum += score + cumulative_probabilities.append((cumulative_sum, week)) + + return cumulative_probabilities + + + @staticmethod + def perform_roulette_selection(cumulative_probabilities, total_fitness, num_select): + """ + Perform roulette wheel selection to choose items. + """ + + selected_items = [] + for _ in range(num_select): + rand_value = random.uniform(0, total_fitness) + for cumulative_sum, week in cumulative_probabilities: + if rand_value <= cumulative_sum: + selected_items.append(week) + break + + return selected_items + + + def roulette_wheel_selection(self, scores, num_select): + """ + Select items using roulette wheel selection. + """ + + if not scores: + print("Scores are empty. Cannot perform roulette selection.") + return {} + + total_fitness = sum(scores.values()) + cumulative_probabilities = self.calculate_cumulative_probabilities(scores) + selected_items = self.perform_roulette_selection(cumulative_probabilities, total_fitness, num_select) + return { + week: scores[week] for week in selected_items + } + + + @staticmethod + def get_top_and_remaining_items(scores, percentage): + """ + Select the top percentage of items based on scores and return the remaining items. + + Args: + scores (dict): A dictionary of items with their scores. + percentage (float): The percentage of top items to select. + + Returns: + tuple: A tuple of two dictionaries: + - Top-selected items and their scores. + - Remaining items and their scores. + """ + + # at least 1 chromosome to select. + num_select = max(1, int(len(scores) * percentage)) + sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) + top_selected = dict(sorted_scores[:num_select]) + remaining_items = dict(sorted_scores[num_select:]) + return top_selected, remaining_items + + + @staticmethod + def display_selected_chromosomes(selected_fitness): + """ + Display the selected chromosomes and their fitness scores. + """ + + print("\n--- Selected Weeks and Fitness Scores ---") + for week, score in selected_fitness.items(): + print(f"Week: {week}, Score: {score}") diff --git a/build/lib/Samples/__init__.py b/build/lib/Samples/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/Samples/samples.py b/build/lib/Samples/samples.py new file mode 100644 index 0000000..f4c1b39 --- /dev/null +++ b/build/lib/Samples/samples.py @@ -0,0 +1,1585 @@ +class SubjectTeacherMap: + subject_teacher_map = { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"], + "PCS-503": ["RS11", "DP07", "SP06", "VD25"], + "Placement_Class": ["AK26"], + "TCS-511":["PK02"], + "TCS-592":["AB01"], + "TCS-512":["HP18"], + "TCS-519":["DP07"], + "PCS-512":["VD25"] + + } +class WorkingDays: + days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + + +class Sections: + sections = [] + + def __init__(self, section_number): + self.sections = [chr(65 + i) for i in range(section_number)] + + +class Classrooms: + classrooms = ["R1", "R2", "R3", "R4", "R5"] + labs = ["L1", "L2", "L3", "L4", "L5"] + + +class RoomCapacity: + room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} + section_strength = {"A": 200, "B": 200, "C": 200, "D": 100} + + +class SubjectWeeklyQuota: + subject_quota = { + "TCS-531": 3, + "TCS-502": 3, + "TCS-503": 3, + "PCS-506": 1, + "TMA-502": 3, + "PMA-502": 1, + "TCS-509": 3, + "XCS-501": 2, + "CSP-501": 1, + "SCS-501": 1, + "PCS-503": 1, + "Placement_Class": 1, + } + + +class SpecialSubjects: + special_subjects = ["Placement_Class"] + Labs=["PCS-506", "PCS-503", "PMA-502"] + + +class PenaltyConstants: + PENALTY_TEACHER_DOUBLE_BOOKED = 30 + PENALTY_CLASSROOM_DOUBLE_BOOKED = 20 + PENALTY_OVER_CAPACITY = 25 + PENALTY_UN_PREFERRED_SLOT = 5 + PENALTY_OVERLOAD_TEACHER = 10 + + +class TeacherWorkload: + Weekly_workLoad = { + "AB01": 5, + "PK02": 5, + "SS03": 5, + "AA04": 5, + "AC05": 5, + "SP06": 5, + "DP07": 5, + "AD08": 5, + "RD09": 5, + "BJ10": 5, + "RS11": 5, + "JM12": 5, + "NJ13": 5, + "PM14": 5, + "AA15": 5, + "SJ16": 5, + "AB17": 5, + "HP18": 5, + "SG19": 5, + "DT20": 5, + "PA21": 5, + "NB22": 5, + "AK23": 5, + "AP24": 5, + "VD25": 5, + "AK26": 5 + } + + teacher_preferences = { + "AB01": [1], + "PK02": [1, 2, 3, 4, 5, 6, 7], + "SS03": [1, 2, 3, 4, 5, 6, 7], + "AA04": [1, 2, 3, 4, 5, 6, 7], + "AC05": [1, 2, 3, 4, 5, 6, 7], + "SP06": [1, 2, 3, 4, 5, 6, 7], + "DP07": [1, 2, 3, 4, 5, 6, 7], + "AD08": [1, 2, 3, 4, 5, 6, 7], + "RD09": [1, 2, 3, 4, 5, 6, 7], + "BJ10": [1, 2, 3, 4, 5, 6, 7], + "RS11": [1, 2, 3, 4, 5, 6, 7], + "JM12": [1, 2, 3, 4, 5, 6, 7], + "NJ13": [1, 2, 3, 4, 5, 6, 7], + "PM14": [1, 2, 3, 4, 5, 6, 7], + "AA15": [1, 2, 3, 4, 5, 6, 7], + "SJ16": [1, 2, 3, 4, 5, 6, 7], + "AB17": [1, 2, 3, 4, 5, 6, 7], + "HP18": [1, 2, 3, 4, 5, 6, 7], + "SG19": [1, 2, 3, 4, 5, 6, 7], + "DT20": [1, 2, 3, 4, 5, 6, 7], + "PA21": [1, 2, 3, 4, 5, 6, 7], + "NB22": [1, 2, 3, 4, 5, 6, 7], + "AK23": [1, 2, 3, 4, 5, 6, 7], + "AP24": [1, 2, 3, 4, 5, 6, 7], + "VD25": [1, 2, 3, 4, 5, 6, 7], + "AK26": [5], + } + teacher_duty_days = { + "AB01": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "PK02": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "SS03": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AA04": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AC05": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "SP06": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "DP07": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AD08": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "RD09": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "BJ10": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "RS11": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "JM12": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "NJ13": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "PM14": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AA15": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "SJ16": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AB17": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "HP18": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "SG19": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "DT20": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "PA21": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "NB22": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "AK23": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AP24": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "VD25": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "AK26": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + } +class SampleChromosome: + schedule1={ + "Monday": { + "A": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25" + } + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L4", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L4", + "time_slot": "11:10 - 12:05" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" + } + ], + "D": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" + } + ] + }, + "Tuesday": { + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05" + } + ], + "B": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25" + } + ], + "C": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + }, + "Wednesday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25" + } + ], + "B": [ + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + } + ], + "C": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "L2", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "L2", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + }, + "Thursday": { + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" + } + ], + "B": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25" + } + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + }, + "Friday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" + } + ], + "B": [ + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25" + } + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + } + } + schedule2={ + "Monday": { + "A": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25" + } + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25" + } + ], + "C": [ + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "11:10 - 12:05" + } + ], + "D": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + }, + "Tuesday": { + "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25" + } + ], + "B": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + } + ], + "C": [ + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + }, + "Wednesday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05" + } + ], + "B": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + } + ], + "C": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" + } + ] + }, + "Thursday": { + "A": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25" + } + ], + "B": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + } + ], + "C": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + }, + "Friday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" + } + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25" + } + ], + "C": [ + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25" + } + ], + "D": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + } + ] + } + + + } diff --git a/setup.py b/setup.py index 24d5735..bada970 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="TimeTableLib", - packages=find_packages(include=["GA", "Samples"]), + packages=find_packages(include=["GA", "Samples", "Constants"]), version="v0.1.0", description="This Library generates timetable and is a plug and play solution for any python based backend service.", long_description=open("README.md").read(), @@ -11,7 +11,8 @@ install_requires=[ "psycopg2-binary==2.9.9", "pytest==7.4.2", - "ortools==9.11.4210" + "ortools==9.11.4210", + "icecream==2.1.3" ], # noqa: E501 setup_requires=["pytest-runner"], tests_require=["pytest==7.4.2"], From 851a46b8bf0dc3730f07e269ceb4e5b13e7c3ac7 Mon Sep 17 00:00:00 2001 From: Vishal Joshi Date: Mon, 2 Dec 2024 13:20:14 +0530 Subject: [PATCH 08/67] init changed --- GA/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/GA/__init__.py b/GA/__init__.py index 23a8fa0..168955f 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -105,4 +105,5 @@ def run_timetable_generation(): return best_chromosome -print(run_timetable_generation()) +if __name__ == "__main__": + print(run_timetable_generation()) From 36219a9d5231604b8b43fd3648af9682d1f46b76 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Mon, 2 Dec 2024 14:05:40 +0530 Subject: [PATCH 09/67] mutation.py refacted --- GA/mutation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GA/mutation.py b/GA/mutation.py index 76156b6..8b3ac15 100644 --- a/GA/mutation.py +++ b/GA/mutation.py @@ -83,6 +83,6 @@ def perform_crossover(self, timetable1: dict, timetable2: dict): # Perform the crossover between week1 and week2 for day in crossover_days: if day in (timetable1, timetable2): - timetable1[day], timetable2[day] = timetable1[day], timetable1[day] + timetable1[day], timetable2[day] = timetable2[day], timetable1[day] return timetable1, timetable2 From d05bc7075cc40c24e9f626970314655d970514a3 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Mon, 2 Dec 2024 14:50:28 +0530 Subject: [PATCH 10/67] Deleted build and eggs --- Constants/teacher's.json | 277 ---- Constants/teacher's_tt.py | 0 TimeTableLib.egg-info/PKG-INFO | 129 -- TimeTableLib.egg-info/SOURCES.txt | 22 - TimeTableLib.egg-info/dependency_links.txt | 1 - TimeTableLib.egg-info/requires.txt | 4 - TimeTableLib.egg-info/top_level.txt | 3 - build/lib/Constants/__init__.py | 0 build/lib/Constants/classroom_allocate.py | 54 - build/lib/Constants/constant.py | 69 - build/lib/Constants/is_conflict.py | 124 -- build/lib/Constants/section_allocation.py | 164 -- build/lib/Constants/teacher's_tt.py | 0 build/lib/Constants/time_intervals.py | 84 -- build/lib/Constants/utils.py | 1 - build/lib/GA/__init__.py | 105 -- build/lib/GA/chromosome.py | 223 --- build/lib/GA/fitness.py | 160 -- build/lib/GA/mutation.py | 88 -- build/lib/GA/selection.py | 119 -- build/lib/Samples/__init__.py | 0 build/lib/Samples/samples.py | 1585 -------------------- 22 files changed, 3212 deletions(-) delete mode 100644 Constants/teacher's.json delete mode 100644 Constants/teacher's_tt.py delete mode 100644 TimeTableLib.egg-info/PKG-INFO delete mode 100644 TimeTableLib.egg-info/SOURCES.txt delete mode 100644 TimeTableLib.egg-info/dependency_links.txt delete mode 100644 TimeTableLib.egg-info/requires.txt delete mode 100644 TimeTableLib.egg-info/top_level.txt delete mode 100644 build/lib/Constants/__init__.py delete mode 100644 build/lib/Constants/classroom_allocate.py delete mode 100644 build/lib/Constants/constant.py delete mode 100644 build/lib/Constants/is_conflict.py delete mode 100644 build/lib/Constants/section_allocation.py delete mode 100644 build/lib/Constants/teacher's_tt.py delete mode 100644 build/lib/Constants/time_intervals.py delete mode 100644 build/lib/Constants/utils.py delete mode 100644 build/lib/GA/__init__.py delete mode 100644 build/lib/GA/chromosome.py delete mode 100644 build/lib/GA/fitness.py delete mode 100644 build/lib/GA/mutation.py delete mode 100644 build/lib/GA/selection.py delete mode 100644 build/lib/Samples/__init__.py delete mode 100644 build/lib/Samples/samples.py diff --git a/Constants/teacher's.json b/Constants/teacher's.json deleted file mode 100644 index aa5f1ea..0000000 --- a/Constants/teacher's.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "Teacher1": { - "Monday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "10:00 - 10:55", - "section": "A" - } - ], - "Tuesday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "11:00 - 11:55", - "section": "A" - } - ], - "Wednesday": [ - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "10:00 - 10:55", - "section": "B" - } - ], - "Thursday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "B" - } - ], - "Friday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "A" - } - ] - }, - "Teacher2": { - "Tuesday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "11:00 - 11:55", - "section": "A" - } - ], - "Wednesday": [ - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "10:00 - 10:55", - "section": "B" - } - ], - "Thursday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "B" - } - ], - "Friday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "A" - } - ], - "Saturday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "10:00 - 10:55", - "section": "A" - } - ] - }, - "Teacher3": { - "Monday": [ - { - "course_name": "BBA", - "subject_id": "HRM-301", - "classroom_name": "L3", - "time_slot": "9:00 - 9:55", - "section": "C" - }, - { - "course_name": "MBA", - "subject_id": "FIN-305", - "classroom_name": "R4", - "time_slot": "11:00 - 11:55", - "section": "A" - } - ], - "Tuesday": [ - { - "course_name": "BTech", - "subject_id": "TCS-510", - "classroom_name": "R2", - "time_slot": "10:00 - 10:55", - "section": "A" - }, - { - "course_name": "BCA", - "subject_id": "CSP-502", - "classroom_name": "L1", - "time_slot": "2:00 - 2:55", - "section": "B" - } - ], - "Wednesday": [ - { - "course_name": "MBA", - "subject_id": "MKT-203", - "classroom_name": "R3", - "time_slot": "10:00 - 10:55", - "section": "A" - }, - { - "course_name": "BBA", - "subject_id": "HRM-301", - "classroom_name": "L3", - "time_slot": "2:00 - 2:55", - "section": "C" - } - ] - }, - "Teacher4": { - "Thursday": [ - { - "course_name": "BCA", - "subject_id": "CSP-503", - "classroom_name": "L1", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "BTech", - "subject_id": "TCS-511", - "classroom_name": "R2", - "time_slot": "11:00 - 11:55", - "section": "C" - } - ], - "Friday": [ - { - "course_name": "MBA", - "subject_id": "FIN-306", - "classroom_name": "R4", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BBA", - "subject_id": "HRM-302", - "classroom_name": "L3", - "time_slot": "10:00 - 10:55", - } - ] - } -} \ No newline at end of file diff --git a/Constants/teacher's_tt.py b/Constants/teacher's_tt.py deleted file mode 100644 index e69de29..0000000 diff --git a/TimeTableLib.egg-info/PKG-INFO b/TimeTableLib.egg-info/PKG-INFO deleted file mode 100644 index 48390c1..0000000 --- a/TimeTableLib.egg-info/PKG-INFO +++ /dev/null @@ -1,129 +0,0 @@ -Metadata-Version: 2.1 -Name: TimeTableLib -Version: 0.1.0 -Summary: This Library generates timetable and is a plug and play solution for any python based backend service. -License: MIT -Project-URL: Documentation, https://github.com/TImeTable-GEHU/Time-Table/blob/main/README.md -Project-URL: Source, https://github.com/TImeTable-GEHU/Time-Table -Requires-Python: >=3.7 -Requires-Dist: psycopg2-binary==2.9.9 -Requires-Dist: pytest==7.4.2 -Requires-Dist: ortools==9.11.4210 -Requires-Dist: icecream==2.1.3 - -# Timetable Scheduling Project - -## 📚 Overview -Welcome to the **Timetable Scheduling Project**! This repository documents research, findings, discussions, and progress on creating an efficient timetable scheduling system that addresses real-world challenges in academic scheduling. Our goal is to develop a scheduling model that optimally assigns rooms, teachers, and time slots while accommodating various constraints. - -## 🔍 Project Goals -- **Optimal Assignment**: Effectively allocate rooms, teachers, and time slots. -- **Constraint Management**: Consider teacher preferences, student load, room capacities, and subject assignments. -- **Dynamic Adaptability**: Adjust to changes, such as adding new rooms or teachers, without complete model retraining. -- **Simplicity and Flexibility**: Simplify complex constraints while remaining adaptable to real-world needs. - -## 🧬 Genetic Algorithm -The project employs a Genetic Algorithm (GA) to solve the scheduling problem, inspired by the principles of natural selection. Key modules in our GA include: - -1. **Data Encoding and Decoding**: Converting solutions into chromosomes for efficiency. -2. **Initial Population**: Generating a diverse set of potential solutions under specified constraints. -3. **Evaluation of Population**: Using a fitness function to assess solution quality. -4. **Crossover Evolution**: Creating new solutions by combining existing ones. -5. **Mutation**: Introducing random changes to explore new potential solutions. - -### Advantages -- Flexibility compared to manual systems -- Reduced processing power requirements -- Quick generation of accurate timetables -- User-friendly data entry and revision -- Improved productivity and minimal paperwork - -### Disadvantages -- Requires initial raw content input -- High memory consumption -- Internet connectivity needed - -## 📋 Applications -The genetic algorithm can efficiently create various timetables, including: -- University Timetable -- Exam Timetable -- School Timetable -- College Timetable -- Teacher Timetable - -## 📊 Results -The system generates distinct timetables for each class, faculty member, and lab, preventing slot conflicts and allowing customization. The program meets both hard and soft scheduling constraints. - -## ⚙️ Fitness Function -The fitness function is a critical component of our Genetic Algorithm, as it evaluates the quality of each timetable solution. It incorporates both hard and soft constraints to ensure a balanced and effective scheduling outcome. - -### Hard Constraints -These are strict requirements that must be satisfied for a solution to be considered valid: - -1. **No Overlap**: - - Teachers cannot be assigned to multiple classes at the same time. - - Time slots must not overlap for the same section. - - The same classroom cannot be allocated to multiple sections during the same time slot. - -2. **Room Capacity**: - - Each classroom's capacity must accommodate the number of students assigned to that class. - -3. **Time Slot Allocation**: - - Classes must be scheduled within designated time slots. - -4. **Teacher Load Distribution**: - - The total hours assigned to a teacher should not exceed their maximum allowable teaching hours. - -### Soft Constraints -These are preferences that enhance the quality of the solution but are not mandatory: - -1. **Teacher Preferences**: - - Assignments should consider teacher preferences for certain time slots or days. - -2. **Gaps Between Classes**: - - Minimizing the number of gaps between classes for teachers is preferred. - -3. **Balanced Workload**: - - Aim for a balanced distribution of classes among teachers to prevent overloading any single teacher. - -4. **Half Days for Sections** - - Every section should be provided half days so that resources can be utilised properly and also labs and calsses should be balanced. - -### Fitness Score Calculation -The fitness score is calculated based on the following criteria: - -- Each hard constraint violation deducts a significant penalty from the score (e.g., -100 points for each violation). -- Soft constraint preferences add to the score (e.g., +10 points for each preference met). -- The final score is a reflection of both the number of constraints satisfied and the overall quality of the timetable. - -A higher fitness score indicates a better solution, leading to more optimal timetables. The Genetic Algorithm iteratively evolves the population of solutions to maximize this fitness score over generations. - -## 🚀 Future Scope -This project aims to simplify faculty management by automatically assigning courses, considering workload balance, and tracking expertise. Future enhancements may include a master schedule for departments, integration with university websites, and personalized time slot assignments. - -## 🛠️ Installation - -To run this project, clone the repository, set up a virtual environment, and install the required dependencies: - -```bash -git clone https://github.com/yourusername/timetable-scheduling-project.git -cd timetable-scheduling-project - -# Set up a virtual environment -python -m venv venv - -# Activate the virtual environment -# For Linux/macOS: -source venv/bin/activate -# For Windows: -.\venv\Scripts\activate - -# Install dependencies -pip install -r requirements.txt - -# Optionally, set up environment variables in a .env file (e.g., DATABASE_URL, SECRET_KEY) -# Create and edit .env file with necessary variables -touch .env - -echo "Setup complete. You can now run the application." - diff --git a/TimeTableLib.egg-info/SOURCES.txt b/TimeTableLib.egg-info/SOURCES.txt deleted file mode 100644 index 89b7535..0000000 --- a/TimeTableLib.egg-info/SOURCES.txt +++ /dev/null @@ -1,22 +0,0 @@ -README.md -setup.py -Constants/__init__.py -Constants/classroom_allocate.py -Constants/constant.py -Constants/is_conflict.py -Constants/section_allocation.py -Constants/teacher's_tt.py -Constants/time_intervals.py -Constants/utils.py -GA/__init__.py -GA/chromosome.py -GA/fitness.py -GA/mutation.py -GA/selection.py -Samples/__init__.py -Samples/samples.py -TimeTableLib.egg-info/PKG-INFO -TimeTableLib.egg-info/SOURCES.txt -TimeTableLib.egg-info/dependency_links.txt -TimeTableLib.egg-info/requires.txt -TimeTableLib.egg-info/top_level.txt \ No newline at end of file diff --git a/TimeTableLib.egg-info/dependency_links.txt b/TimeTableLib.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/TimeTableLib.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/TimeTableLib.egg-info/requires.txt b/TimeTableLib.egg-info/requires.txt deleted file mode 100644 index 6efb963..0000000 --- a/TimeTableLib.egg-info/requires.txt +++ /dev/null @@ -1,4 +0,0 @@ -psycopg2-binary==2.9.9 -pytest==7.4.2 -ortools==9.11.4210 -icecream==2.1.3 diff --git a/TimeTableLib.egg-info/top_level.txt b/TimeTableLib.egg-info/top_level.txt deleted file mode 100644 index aaadae1..0000000 --- a/TimeTableLib.egg-info/top_level.txt +++ /dev/null @@ -1,3 +0,0 @@ -Constants -GA -Samples diff --git a/build/lib/Constants/__init__.py b/build/lib/Constants/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/Constants/classroom_allocate.py b/build/lib/Constants/classroom_allocate.py deleted file mode 100644 index 238c1d2..0000000 --- a/build/lib/Constants/classroom_allocate.py +++ /dev/null @@ -1,54 +0,0 @@ -from ortools.sat.python import cp_model - -def assign_section_to_classes(x_section, y_classrooms, z_time_slots): - # Create a CP-SAT model - model = cp_model.CpModel() - - # Decision variables - classrooms = [ - model.NewIntVar(0, y_classrooms - 1, f'classroom_{i}') for i in range(x_section) - ] - timeslots = [ - model.NewIntVar(0, z_time_slots - 1, f'timeslot_{i}') for i in range(x_section) - ] - - # Constraints - # 1. No two section can share the same classroom and time slot - for i in range(x_section): - for j in range(i + 1, x_section): - # Define a Boolean variable for the condition (timeslots[i] == timeslots[j]) - same_timeslot = model.NewBoolVar(f'same_timeslot_{i}_{j}') - model.Add(timeslots[i] == timeslots[j]).OnlyEnforceIf(same_timeslot) - model.Add(timeslots[i] != timeslots[j]).OnlyEnforceIf(same_timeslot.Not()) - - # Enforce classroom difference if the timeslot is the same - model.Add(classrooms[i] != classrooms[j]).OnlyEnforceIf(same_timeslot) - - - # Solver - solver = cp_model.CpSolver() - status = solver.Solve(model) - - # Check results - if status == cp_model.OPTIMAL or status == cp_model.FEASIBLE: - for i in range(x_section): - assigned_classroom = solver.Value(classrooms[i]) - assigned_timeslot = solver.Value(timeslots[i]) - print(f"Subject {i + 1} -> Classroom {assigned_classroom}, Timeslot {assigned_timeslot}") - else: - print("No feasible solution found.") - -from datetime import datetime - - -start_time = datetime.now() - -X = 80 # Number of section -Y = 50 # Number of classrooms -Z = 7 # Number of time slots - -assign_section_to_classes(X, Y, Z) - -end_time = datetime.now() - -print(end_time - start_time) \ No newline at end of file diff --git a/build/lib/Constants/constant.py b/build/lib/Constants/constant.py deleted file mode 100644 index 0bf8d3f..0000000 --- a/build/lib/Constants/constant.py +++ /dev/null @@ -1,69 +0,0 @@ -class Defaults: - # All the defaults values over GA folder. - room_capacity = 60 - working_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] - starting_section_fitness = 1000 - max_class_capacity = 250 - initial_no_of_chromosomes = 10 - total_no_of_generations = 10 - - -class Sections: - def __init__(self, section_number): - self.sections = [chr(65 + i) for i in range(section_number)] - - -class Classrooms: - def __init__(self, room_count, lab_count): - self.classrooms = [f"R{i + 1}" for i in range(room_count)] - self.labs = [f"L{i + 1}" for i in range(lab_count)] - - -class RoomCapacity: - def __init__(self, classrooms, sections, default_capacity=Defaults.room_capacity): - self.room_capacity = {room: default_capacity for room in classrooms} - self.section_strength = {section: default_capacity for section in sections} - - -class SubjectWeeklyQuota: - def __init__(self, subject_quota): - self.subject_quota = subject_quota - - -class TeacherPreloads: - def __init__(self, teacher_preferences: dict, weekly_workload: dict): - self.teacher_preferences = teacher_preferences - self.weekly_workload = weekly_workload - - -class TeachersDutyDays: - def __init__(self, teacher_duty_days: dict): - self.teacher_duty_days = teacher_duty_days - - -class SpecialSubjects: - def __init__(self, special_subjects: list, labs: list, specialization_subjects: list): - self.special_subjects = special_subjects - self.labs = labs - self.specialization_subjects = specialization_subjects - - -class PenaltyConstants: - PENALTY_TEACHER_DOUBLE_BOOKED = 30 - PENALTY_CLASSROOM_DOUBLE_BOOKED = 20 - PENALTY_OVER_CAPACITY = 25 - PENALTY_UN_PREFERRED_SLOT = 5 - PENALTY_OVERLOAD_TEACHER = 10 - PENALTY_NON_DUTY_DAY=40 - - -class SectionsConstants: - # Define attribute weights and conditions - ATTRIBUTE_WEIGHTS = { - 'good_cgpa': 1, # 2^0 - 'hostler': 2, # 2^1 - } - - ATTRIBUTE_CONDITIONS = { - 'hostler': lambda student: student.get('Hostler', False), - } diff --git a/build/lib/Constants/is_conflict.py b/build/lib/Constants/is_conflict.py deleted file mode 100644 index d13e692..0000000 --- a/build/lib/Constants/is_conflict.py +++ /dev/null @@ -1,124 +0,0 @@ -import psycopg2 -from Samples.samples import SampleChromosome -class IsConflict: - def __init__(self, dbname="timetable", user="postgres", password="root", host="localhost", port="5432"): - self.dbname = dbname - self.user = user - self.password = password - self.host = host - self.port = port - self.conn = None - self.cursor = None - - def connect_to_database(self): - try: - self.conn = psycopg2.connect( - dbname=self.dbname, - user=self.user, - password=self.password, - host=self.host, - port=self.port - ) - self.cursor = self.conn.cursor() - print("Connected to PostgreSQL database!") - except Exception as e: - print(f"Error connecting to the database: {e}") - raise - - def insert_schedule(self, timetable, chromosome_name): - try: - for day, sections in timetable.items(): - for section, classes in sections.items(): - for cls in classes: - - print(f"Inserting data: {chromosome_name}, {day}, {section}, {cls['teacher_id']}, {cls['subject_id']}, {cls['classroom_id']}, {cls['time_slot']}") - self.cursor.execute(""" - INSERT INTO schedule (chromosome, day, section, teacher_id, subject_id, classroom_id, time_slot) - VALUES (%s, %s, %s, %s, %s, %s, %s); - """, (chromosome_name, day, section, cls['teacher_id'], cls['subject_id'], cls['classroom_id'], cls['time_slot'])) - self.conn.commit() - print(f"Schedule data for {chromosome_name} inserted successfully.") - except Exception as e: - self.conn.rollback() - print(f"Error inserting schedule data: {e}") - - def detect_teacher_conflicts(self): - self.cursor.execute(""" - SELECT s1.teacher_id, s1.day, s1.time_slot, COUNT(*) - FROM schedule s1 - JOIN schedule s2 - ON s1.teacher_id = s2.teacher_id - AND s1.time_slot = s2.time_slot - AND s1.day = s2.day - AND s1.chromosome != s2.chromosome - GROUP BY s1.teacher_id, s1.day, s1.time_slot - HAVING COUNT(*) > 1; - """) - return self.cursor.fetchall() - - def detect_classroom_conflicts(self): - self.cursor.execute(""" - SELECT s1.classroom_id, s1.day, s1.time_slot, COUNT(*) - FROM schedule s1 - JOIN schedule s2 - ON s1.classroom_id = s2.classroom_id - AND s1.time_slot = s2.time_slot - AND s1.day = s2.day - AND s1.chromosome != s2.chromosome - GROUP BY s1.classroom_id, s1.day, s1.time_slot - HAVING COUNT(*) > 1; - """) - return self.cursor.fetchall() - - def truncate_schedule(self): - self.cursor.execute("TRUNCATE TABLE schedule;") - self.conn.commit() - print("Schedule table truncated.") - - def close_connection(self): - if self.cursor: - self.cursor.close() - if self.conn: - self.conn.close() - print("\nDatabase connection closed.") - - def process_schedules(self, timetable1, timetable2): - try: - self.connect_to_database() - - # Insert Chromosome data for both timetables - self.insert_schedule(timetable1, "Week 1") - self.insert_schedule(timetable2, "Week 2") - - # Check for Teacher Conflicts - teacher_conflicts = self.detect_teacher_conflicts() - - # Check for Classroom Conflicts - classroom_conflicts = self.detect_classroom_conflicts() - - # Return both conflicts as a dictionary - return { - "teacher_conflicts": teacher_conflicts, - "classroom_conflicts": classroom_conflicts - } - - finally: - # Cleanup and close database connection - self.truncate_schedule() - self.close_connection() - - -if __name__ == "__main__": - timetable_processor = IsConflict() - sample_chromosome_1 = SampleChromosome() - sample_chromosome_2 = SampleChromosome() - chromosome1 = sample_chromosome_1.schedule1 - chromosome2 = sample_chromosome_2.schedule2 - conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) - print("\nTeacher Conflicts:") - for conflict in conflicts["teacher_conflicts"]: - print(f"Teacher ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}") - - print("\nClassroom Conflicts:") - for conflict in conflicts["classroom_conflicts"]: - print(f"Classroom ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}") diff --git a/build/lib/Constants/section_allocation.py b/build/lib/Constants/section_allocation.py deleted file mode 100644 index 4c866a2..0000000 --- a/build/lib/Constants/section_allocation.py +++ /dev/null @@ -1,164 +0,0 @@ -import random -from collections import defaultdict -from typing import List, Dict -from Constants.constant import SectionsConstants - - -class StudentScorer: - def __init__(self, attribute_weights: Dict[str, int] = None): - """ - Initialize the scorer with attribute weights. - - Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. - """ - - self.attribute_weights = attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS - - - def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: int = 30) -> float: - """ - Calculate the CGPA threshold for the top X% of students. - - Args: - students (List[Dict]): List of student dictionaries with 'CGPA'. - top_percentage (int): Percentage of students considered top. - - Returns: - float: The CGPA threshold. - - """ - - sorted_cgpas = sorted( - (student['CGPA'] for student in students), - reverse=True - ) - - threshold_index = max(1, int(len(sorted_cgpas) * top_percentage / 100)) - 1 - return sorted_cgpas[threshold_index] - - - def assign_dynamic_conditions(self, cgpa_threshold: float): - """ - Assign a dynamic condition for CGPA based on the threshold. - - Args: - cgpa_threshold (float): The CGPA threshold for "good_cgpa". - """ - SectionsConstants.ATTRIBUTE_CONDITIONS['good_cgpa'] = lambda student: student['CGPA'] >= cgpa_threshold - - - def calculate_student_score(self, student: Dict) -> int: - """ - Calculate the score for a student based on attribute weights. - - Args: - student (Dict): A dictionary representing a student. - - Returns: - int: The student's score. - """ - - return sum( - weight - for attribute, weight in self.attribute_weights.items() - if SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False)(student) - ) - - - def assign_scores_to_students(self, students: List[Dict]) -> List[Dict]: - """ - Assign scores to all students. - - Args: - students (List[Dict]): List of student dictionaries. - - Returns: - List[Dict]: The updated list of students with scores. - """ - - for student in students: - student['score'] = self.calculate_student_score(student) - return students - - - def divide_students_into_sections(self, students: List[Dict], class_strength: int) -> List[List[Dict]]: - """ - Divide students into sections based on their scores and class strength. - - Args: - students (List[Dict]): List of student dictionaries with scores. - class_strength (int): Maximum number of students per section. - - Returns: - List[List[Dict]]: List of sections containing students. - """ - grouped_by_score = defaultdict(list) - for student in students: - grouped_by_score[student['score']].append(student) - - sections = [] - current_section = [] - - for score_group in grouped_by_score.values(): - for student in score_group: - current_section.append(student) - if len(current_section) == class_strength: - sections.append(current_section) - current_section = [] - - if current_section: - sections.append(current_section) - - return sections - - - - - - -def generate_students(num_students: int = 500) -> List[Dict]: - """ - Generate a list of random students with CGPA and hostler status. - - Args: - num_students (int): Number of students to generate. - - Returns: - List[Dict]: List of student dictionaries. - """ - - return [ - { - 'ID': i, - 'CGPA': round(random.uniform(6.0, 9.8), 2), - 'Hostler': random.choice([True, False]) - } - for i in range(1, num_students + 1) - ] - - -if __name__ == "__main__": - # Initialize constants and scorer - scorer = StudentScorer() - students = generate_students(num_students=500) - - # Calculate the dynamic CGPA threshold - cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold(students, top_percentage=30) - print(f"Dynamic CGPA Threshold (Top 30%): {cgpa_threshold}") - - # Assign conditions and scores - scorer.assign_dynamic_conditions(cgpa_threshold) - students_with_scores = scorer.assign_scores_to_students(students) - - # Divide students into sections - class_strength = 50 - sections = scorer.divide_students_into_sections(students_with_scores, class_strength) - - # Display the sections - for i, section in enumerate(sections, 1): - print(f"Section {i} (Total Students: {len(section)}):") - for student in section: - print( - f" Student ID: {student['ID']}, CGPA: {student['CGPA']}, " - f"Hostler: {student['Hostler']}, score: {student['score']}" - ) diff --git a/build/lib/Constants/teacher's_tt.py b/build/lib/Constants/teacher's_tt.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/Constants/time_intervals.py b/build/lib/Constants/time_intervals.py deleted file mode 100644 index 1a6de92..0000000 --- a/build/lib/Constants/time_intervals.py +++ /dev/null @@ -1,84 +0,0 @@ -from datetime import datetime - - -class TimeIntervalConstant: - time_slots = { - 1: "9:00 - 9:55", - 2: "9:55 - 10:50", - 3: "11:10 - 12:05", - 4: "12:05 - 1:00", - 5: "1:20 - 2:15", - 6: "2:15 - 3:10", - 7: "3:30 - 4:25", - } - - time_mapping = { - "9:00 - 9:55": 1, - "9:55 - 10:50": 2, - "11:10 - 12:05": 3, - "12:05 - 1:00": 4, - "1:20 - 2:15": 5, - "2:15 - 3:10": 6, - "3:30 - 4:25": 7, - } - - @staticmethod - def get_slot(slot_number: int) -> str: - """Retrieve time slot based on slot number. - - Args: - slot_number (int): The slot number corresponding to a time interval. - - Returns: - str: The time interval for the given slot number. - - Raises: - ValueError: If the slot number is out of the valid range. - """ - - if slot_number in TimeIntervalConstant.time_slots: - return TimeIntervalConstant.time_slots[slot_number] - - else: - max_slot = len(TimeIntervalConstant.time_slots) - raise ValueError(f"Invalid slot number. Please provide a slot number between 1 and {max_slot + 1}.") - - - @classmethod - def get_slot_number(cls, start_time: str, end_time: str): - """Get the slot number for a given start and end time. - - Args: - start_time (str): The start time in "HH:MM" format. - end_time (str): The end time in "HH:MM" format. - - Returns: - int or str: The slot number if found; otherwise, returns an error message. - """ - - try: - # Format start and end times to ensure they only include hours and minutes - start_time = str(datetime.strptime(start_time, "%H:%M").time()).strip(" ") - end_time = str(datetime.strptime(end_time, "%H:%M").time()).strip(" ") - - for slot, interval in cls.time_slots.items(): - # Making string in this format: "3:30 - 4:25". - slot_start_time = datetime.strptime(interval.split(" - ")[0], "%H:%M").time() - slot_end_time = datetime.strptime(interval.split(" - ")[1], "%H:%M").time() - - if start_time == slot_start_time and end_time == slot_end_time: - return slot - raise LookupError("No Time slot for this time interval found!") - - except ValueError: - raise ValueError("Invalid time format!") - - @staticmethod - def get_all_slot_numbers(): - """Retrieve all slot numbers.""" - return list(TimeIntervalConstant.time_slots.keys()) - - @staticmethod - def get_all_time_slots(): - """Retrieve all time intervals.""" - return list(TimeIntervalConstant.time_slots.values()) diff --git a/build/lib/Constants/utils.py b/build/lib/Constants/utils.py deleted file mode 100644 index 8b13789..0000000 --- a/build/lib/Constants/utils.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/build/lib/GA/__init__.py b/build/lib/GA/__init__.py deleted file mode 100644 index 213ef33..0000000 --- a/build/lib/GA/__init__.py +++ /dev/null @@ -1,105 +0,0 @@ -# This is the Orchestrator file, which will govern the flow. - -from Constants.constant import Defaults -from GA.mutation import TimeTableMutation, TimeTableCrossOver -from GA.selection import TimeTableSelection -from GA.fitness import TimetableFitnessEvaluator -from GA.chromosome import TimeTableGeneration -from Samples.samples import ( - SubjectTeacherMap, - TeacherWorkload, - SpecialSubjects, - SubjectWeeklyQuota, - Classrooms, - Sections, - -) - - -def timetable_generation(): - # Create Chromosomes - timetable_generator = TimeTableGeneration( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=6, - total_classrooms=8, - total_labs=3, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - labs_list=Classrooms.labs, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - ) - - timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) - from icecream import ic - ic(timetable) - # Fitness of each Chromosome - fitness_calculator = TimetableFitnessEvaluator( - timetable, - timetable_generator.sections_manager.sections, - SubjectTeacherMap.subject_teacher_map, - timetable_generator.classrooms_manager.classrooms, - timetable_generator.classrooms_manager.labs, - timetable_generator.room_capacity_manager.room_capacity, - timetable_generator.room_capacity_manager.section_strength, - timetable_generator.subject_quota_limits, - timetable_generator.teacher_availability_preferences, - timetable_generator.weekly_workload, - ) - - fitness_scores = fitness_calculator.evaluate_timetable_fitness() - - - # Selection of all Chromosomes - selection_object = TimeTableSelection() - selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - ic(len(selected_chromosomes)) - - # Crossover for all selected Chromosomes - crossover_object = TimeTableCrossOver() - crossover_chromosomes = [] - selected_chromosome_keys = list(selected_chromosomes.keys()) - - for i in range(0, len(selected_chromosome_keys), 2): - if i + 1 < len(selected_chromosome_keys): - parent1 = selected_chromosome_keys[i] - parent2 = selected_chromosome_keys[i + 1] - child1, child2 = crossover_object.perform_crossover( - timetable[parent1], - timetable[parent2] - ) - - crossover_chromosomes.append(child1) - crossover_chromosomes.append(child2) - - - # Mutate all crossover Chromosomes - mutation_object = TimeTableMutation() - mutated_chromosomes = [ - mutation_object.mutate_schedule_for_week(chromosome) - for chromosome in crossover_chromosomes - ] - - - ic(mutated_chromosomes) - ic(selected_chromosomes) - - ic(selected_chromosomes) - # Store best of Chromosomes - best_chromosome_score = -1 - best_chromosome = dict() - - for week_no, week_score in selected_chromosomes.items(): - if int(week_score) > best_chromosome_score: - best_chromosome_score = int(week_score) - best_chromosome = timetable[week_no] - - ic(f"Best Chromosome: {best_chromosome}") - return best_chromosome - - -def run_timetable_generation(): - for generation in range(Defaults.total_no_of_generations): - best_chromosome = timetable_generation() - return best_chromosome diff --git a/build/lib/GA/chromosome.py b/build/lib/GA/chromosome.py deleted file mode 100644 index 74c86b4..0000000 --- a/build/lib/GA/chromosome.py +++ /dev/null @@ -1,223 +0,0 @@ -import random -from Constants.time_intervals import TimeIntervalConstant -from Constants.constant import ( - Sections, - Classrooms, - RoomCapacity, - Defaults, -) - -class TimeTableGeneration: - def __init__( - self, - teacher_subject_mapping: dict, - total_sections: int, - total_classrooms: int, - total_labs: int, - teacher_preferences: dict, - teacher_weekly_workload: dict, - special_subjects: dict, - subject_quota_limits: dict, - labs_list: list, - teacher_duty_days: dict, - ): - self.sections_manager = Sections(total_sections) - self.classrooms_manager = Classrooms(total_classrooms, total_labs) - self.room_capacity_manager = RoomCapacity( - self.classrooms_manager.classrooms, self.sections_manager.sections - ) - self.weekdays = Defaults.working_days - self.subject_teacher_mapping = teacher_subject_mapping - self.subject_quota_limits = subject_quota_limits - self.lab_subject_list = labs_list - self.special_subject_list = special_subjects - self.teacher_availability_preferences = teacher_preferences - self.available_time_slots = TimeIntervalConstant.time_slots - self.teacher_duty_days = teacher_duty_days - self.weekly_workload = teacher_weekly_workload - - self.teacher_assignment_tracker = {teacher: 0 for teacher in teacher_weekly_workload.keys()} - self._map_sections_to_classrooms() - self._teacher_section() - - def _map_sections_to_classrooms(self): - """Map sections to classrooms based on capacity.""" - sorted_classrooms = sorted( - self.classrooms_manager.classrooms, - key=lambda c: self.room_capacity_manager.room_capacity[c], - reverse=True, - ) - sorted_sections = sorted( - self.sections_manager.sections, - key=lambda s: self.room_capacity_manager.section_strength[s], - reverse=True, - ) - - self.section_to_classroom_map = {} - for section in sorted_sections: - for classroom in sorted_classrooms: - if self.room_capacity_manager.room_capacity[classroom] >= self.room_capacity_manager.section_strength[section]: - self.section_to_classroom_map[section] = classroom - sorted_classrooms.remove(classroom) - break - else: - raise ValueError( - f"No classroom can accommodate section {section} with strength {self.room_capacity_manager.section_strength[section]}." - ) - - def _teacher_section(self): - """Map sections to teachers and subjects, ensuring balanced assignments.""" - self.teacher_section_map = { - section: {subject: None for subject in self.subject_teacher_mapping.keys()} - for section in self.sections_manager.sections - } - - for section in self.sections_manager.sections: - for subject, teachers in self.subject_teacher_mapping.items(): - # Select teacher with the least workload - teachers_with_least_load = sorted( - teachers, key=lambda teacher: self.teacher_assignment_tracker[teacher] - ) - selected_teacher = teachers_with_least_load[0] - self.teacher_section_map[section][subject] = selected_teacher - self.teacher_assignment_tracker[selected_teacher] += 1 - - def _initialize_teacher_workload_tracker(self): - """Initialize a tracker for teacher workloads.""" - return {teacher: 0 for teacher in self.weekly_workload.keys()} - - def _generate_section_schedule( - self, section, half_day_section_list, section_subject_usage_tracker, teacher_workload_tracker - ): - """Generate a schedule for an individual section.""" - section_schedule = [] - subjects_scheduled_today = set() - assigned_classroom = self.section_to_classroom_map[section] - total_slots_for_section = 4 if section in half_day_section_list else 7 - - for slot_index, current_time_slot in enumerate(self.available_time_slots.values(), start=1): - if slot_index > total_slots_for_section: - break - - assigned_teacher, selected_subject, assigned_room = self._assign_subject_and_teacher( - section, - slot_index, - subjects_scheduled_today, - assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, - ) - section_schedule.append( - { - "teacher_id": assigned_teacher, - "subject_id": selected_subject, - "classroom_id": assigned_room, - "time_slot": current_time_slot, - } - ) - if selected_subject != "Library": - section_subject_usage_tracker[section][selected_subject] += 1 - - # Handle double-slot subjects - if selected_subject in self.lab_subject_list and slot_index + 1 <= total_slots_for_section: - next_time_slot = self.available_time_slots.get(slot_index + 1) - section_schedule.append( - { - "teacher_id": assigned_teacher, - "subject_id": selected_subject, - "classroom_id": assigned_room, - "time_slot": next_time_slot, - } - ) - section_subject_usage_tracker[section][selected_subject] += 1 - return section_schedule - - def _assign_subject_and_teacher( - self, - section, - slot_index, - subjects_scheduled_today, - assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, - ): - """Assign a subject and teacher for a specific slot.""" - available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) - random.shuffle(available_subjects) - - assigned_teacher = None - selected_subject = None - assigned_room = None - - for subject in available_subjects: - if subject in self.lab_subject_list and slot_index not in [1, 3, 5]: - continue - if subject in self.special_subject_list and slot_index not in [5]: - continue - - if subject not in subjects_scheduled_today: - teachers_for_subject = self.subject_teacher_mapping[subject] - teachers_with_least_load = sorted( - teachers_for_subject, key=lambda teacher: teacher_workload_tracker[teacher] - ) - assigned_teacher = teachers_with_least_load[0] - teacher_workload_tracker[assigned_teacher] += 1 - selected_subject = subject - subjects_scheduled_today.add(subject) - assigned_room = ( - self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] - if subject in self.lab_subject_list - else assigned_classroom - ) - break - - if not assigned_teacher: - selected_subject = "Library" - assigned_teacher = "None" - assigned_room = assigned_classroom - - return assigned_teacher, selected_subject, assigned_room - - def _get_available_subjects(self, section, section_subject_usage_tracker): - """Get a list of subjects available for a specific section.""" - return [ - subject - for subject in self.subject_teacher_mapping.keys() - if section_subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) - ] - - def generate_daily_schedule(self, half_day_section_list, section_subject_usage_tracker): - """Generate the daily schedule for all sections.""" - daily_schedule = {} - teacher_workload_tracker = self._initialize_teacher_workload_tracker() - - for section in self.sections_manager.sections: - section_schedule = self._generate_section_schedule( - section, half_day_section_list, section_subject_usage_tracker, teacher_workload_tracker - ) - daily_schedule[section] = section_schedule - - return daily_schedule, section_subject_usage_tracker - - def _generate_weekly_schedule(self): - """Generate a schedule for a single week.""" - week_schedule = {} - section_subject_usage_tracker = { - section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} - for section in self.sections_manager.sections - } - for week_day in self.weekdays: - half_day_sections = self.sections_manager.sections[: len(self.sections_manager.sections) // 2] - daily_schedule, section_subject_usage_tracker = self.generate_daily_schedule( - half_day_sections, section_subject_usage_tracker - ) - week_schedule[week_day] = daily_schedule - return week_schedule, section_subject_usage_tracker - - def create_timetable(self, num_weeks): - """Create the timetable for the given number of weeks.""" - timetable = {} - for week in range(1, num_weeks + 1): - week_schedule, section_subject_usage_tracker = self._generate_weekly_schedule() - timetable[f"Week {week}"] = week_schedule - return timetable diff --git a/build/lib/GA/fitness.py b/build/lib/GA/fitness.py deleted file mode 100644 index 7dcdb65..0000000 --- a/build/lib/GA/fitness.py +++ /dev/null @@ -1,160 +0,0 @@ -import json -from Constants.time_intervals import TimeIntervalConstant -from GA.chromosome import TimeTableGeneration -from Constants.constant import ( - PenaltyConstants, - Defaults, -) -from Samples.samples import SubjectTeacherMap, SpecialSubjects, SubjectWeeklyQuota, Classrooms, TeacherWorkload - - -class TimetableFitnessEvaluator: - def __init__( - self, - timetable, - all_sections, - subject_teacher_mapping, - available_classrooms, - available_labs, - classroom_capacity, - section_student_strength, - subject_quota_data, - teacher_time_preferences, - teacher_daily_workload, - ): - self.timetable = timetable - self.available_days = Defaults.working_days # Removed trailing comma - self.all_sections = all_sections - self.subject_teacher_mapping = subject_teacher_mapping - self.available_classrooms = available_classrooms - self.available_labs = available_labs - self.classroom_capacity = classroom_capacity - self.section_student_strength = section_student_strength - self.subject_quota_data = subject_quota_data - self.teacher_time_preferences = teacher_time_preferences - self.teacher_daily_workload = teacher_daily_workload - - def evaluate_timetable_fitness(self): - daily_section_fitness_scores = {} - weekly_fitness_scores = {} - teacher_workload_tracking = {} - for week, week_schedule in self.timetable.items(): - weekly_fitness = 0 - daily_section_fitness_scores[week] = {} - teacher_time_slot_tracking = {} - for day, day_schedule in week_schedule.items(): - daily_section_fitness_scores[week][day] = {} - day_fitness = 0 - for section, section_schedule in day_schedule.items(): - section_fitness = Defaults.starting_section_fitness - - classroom_time_slot_tracking = {} - - for schedule_item in section_schedule: - assigned_teacher = schedule_item["teacher_id"] - assigned_classroom = schedule_item["classroom_id"] - assigned_time_slot = TimeIntervalConstant.time_mapping.get( - schedule_item["time_slot"] - ) - section_strength = self.section_student_strength.get(section, 0) - - # Penalty 1: Double booking a teacher in the same time slot - if (assigned_teacher, assigned_time_slot) in teacher_time_slot_tracking.keys(): - section_fitness -= PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED - else: - teacher_time_slot_tracking[(assigned_teacher, assigned_time_slot)] = section - - # Penalty 2: Double booking a classroom in the same time slot - if (assigned_classroom, assigned_time_slot) in classroom_time_slot_tracking: - section_fitness -= PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED - else: - classroom_time_slot_tracking[(assigned_classroom, assigned_time_slot)] = section - - # Penalty 3: Over-capacity classrooms - if section_strength > self.classroom_capacity.get( - assigned_classroom, Defaults.max_class_capacity - ): - section_fitness -= PenaltyConstants.PENALTY_OVER_CAPACITY - - # Penalty 4: Assigning teachers during unpreferred time slots - preferred_time_slots = self.teacher_time_preferences.get( - assigned_teacher, [] - ) - if assigned_time_slot not in preferred_time_slots: - section_fitness -= PenaltyConstants.PENALTY_UN_PREFERRED_SLOT - - # Penalty 5: Scheduling teacher on a non-duty day - assigned_day = day - if assigned_day not in TeacherWorkload.teacher_duty_days.get(assigned_teacher, []): - section_fitness -= PenaltyConstants.PENALTY_NON_DUTY_DAY - - # Tracking teacher workload - if assigned_teacher not in teacher_workload_tracking: - teacher_workload_tracking[assigned_teacher] = [] - teacher_workload_tracking[assigned_teacher].append(assigned_time_slot) - - # Penalty 6: Exceeding teacher daily workload - for teacher, times_assigned in teacher_workload_tracking.items(): - if teacher is not None: - if len(times_assigned) > self.teacher_daily_workload.get(teacher, 0): - section_fitness -= PenaltyConstants.PENALTY_OVERLOAD_TEACHER - - daily_section_fitness_scores[week][day][section] = section_fitness - day_fitness += section_fitness - - weekly_fitness += day_fitness - - weekly_fitness_scores[week] = weekly_fitness - - return daily_section_fitness_scores, weekly_fitness_scores - - -if __name__ == "__main__": - total_sections = 6 - total_classrooms = 8 - total_labs = 3 - - # Generate timetable - timetable_generator = TimeTableGeneration( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=total_sections, - total_classrooms=total_classrooms, - total_labs=total_labs, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - labs_list=SpecialSubjects.Labs, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - ) - generated_timetables = timetable_generator.create_timetable(5) - - # Evaluate fitness - fitness_evaluator = TimetableFitnessEvaluator( - generated_timetables, - timetable_generator.sections_manager.sections, - SubjectTeacherMap.subject_teacher_map, - timetable_generator.classrooms_manager.classrooms, - timetable_generator.classrooms_manager.labs, - timetable_generator.room_capacity_manager.room_capacity, - timetable_generator.room_capacity_manager.section_strength, - timetable_generator.subject_quota_limits, - timetable_generator.teacher_availability_preferences, - timetable_generator.weekly_workload, - ) - - section_fitness_data, weekly_fitness_data = fitness_evaluator.evaluate_timetable_fitness() - - # Save results - with open("GA/chromosome.json", "w") as timetable_file: - json.dump(generated_timetables, timetable_file, indent=4) - - fitness_output_data = { - "section_fitness_scores": section_fitness_data, - "weekly_fitness_scores": weekly_fitness_data, - } - - with open("GA/fitness.json", "w") as fitness_scores_file: - json.dump(fitness_output_data, fitness_scores_file, indent=4) - - print("Timetable and fitness scores have been saved.") diff --git a/build/lib/GA/mutation.py b/build/lib/GA/mutation.py deleted file mode 100644 index 76156b6..0000000 --- a/build/lib/GA/mutation.py +++ /dev/null @@ -1,88 +0,0 @@ -import copy -import random - -from Constants.constant import Defaults - - -class TimeTableMutation: - def __init__(self, mutation_rate = 0.7): - """ - Initializes the Mutation class with a specified mutation rate. - - Args: - mutation_rate (float): Fraction (0 to 1) of sections to mutate. - """ - - self.mutation_rate = mutation_rate - - - def mutate_time_slots_in_section(self, schedule, section): - """ - Mutates the time slots within a particular section by shuffling them. - - Args: - schedule (dict): The schedule containing sections and their data. - section (str): The section in which mutation should occur. - - Returns: - bool: True if mutation was performed, False otherwise. - """ - - if section in schedule: - section_list = schedule[section] - - if len(section_list) < 2: # Not enough time slots to shuffle - return False - - time_slots = [entry["time_slot"] for entry in section_list] - random.shuffle(time_slots) - - for i, entry in enumerate(section_list): - entry["time_slot"] = time_slots[i] - - return True - return False - - - def mutate_schedule_for_week(self, weekly_schedule): - """ - Mutates the time slots for all weekdays in the weekly schedule. - - Args: - weekly_schedule (dict): The weekly schedule containing days, sections, and data. - - Returns: - dict: The mutated weekly schedule. - """ - - # Create a deep copy to keep the original intact - mutated_weekly_schedule = copy.deepcopy(weekly_schedule) - - for day, day_schedule in mutated_weekly_schedule.items(): - # Calculate the number of sections to mutate - total_sections = list(day_schedule.keys()) - num_to_mutate = max(1, int(self.mutation_rate * len(total_sections))) - - # Randomly select sections to mutate - sections_to_mutate = random.sample(total_sections, num_to_mutate) - for section in sections_to_mutate: - self.mutate_time_slots_in_section(day_schedule, section) - - return mutated_weekly_schedule - - -class TimeTableCrossOver: - def perform_crossover(self, timetable1: dict, timetable2: dict): - """ - Crossovers two timetables. - Rule1: Swap the entire day TT. - """ - - crossover_days = Defaults.working_days - - # Perform the crossover between week1 and week2 - for day in crossover_days: - if day in (timetable1, timetable2): - timetable1[day], timetable2[day] = timetable1[day], timetable1[day] - - return timetable1, timetable2 diff --git a/build/lib/GA/selection.py b/build/lib/GA/selection.py deleted file mode 100644 index ac254ea..0000000 --- a/build/lib/GA/selection.py +++ /dev/null @@ -1,119 +0,0 @@ -import random - - -class TimeTableSelection: - def __init__(self): - pass - - - def select_chromosomes( - self, - weekly_fitness_scores, - top_percentage=0.20, - roulette_percentage=0.10 - ): - """ - Entry point for selecting chromosomes. - Select chromosomes based on top scores and roulette wheel selection. - """ - - if not weekly_fitness_scores: - print("Weekly fitness scores are empty. Ensure data is loaded correctly!") - return {} - - top_selected, remaining_scores = self.get_top_and_remaining_items(weekly_fitness_scores, top_percentage) - - roulette_selected = self.roulette_wheel_selection( - remaining_scores, - int( - len(weekly_fitness_scores) * roulette_percentage - ) - ) - - selected_fitness = {**top_selected, **roulette_selected} - # self.display_selected_chromosomes(selected_fitness) - return selected_fitness - - - @staticmethod - def calculate_cumulative_probabilities(scores): - """ - Calculate cumulative probabilities for roulette wheel selection. - """ - - cumulative_probabilities = [] - cumulative_sum = 0 - - for week, score in scores.items(): - cumulative_sum += score - cumulative_probabilities.append((cumulative_sum, week)) - - return cumulative_probabilities - - - @staticmethod - def perform_roulette_selection(cumulative_probabilities, total_fitness, num_select): - """ - Perform roulette wheel selection to choose items. - """ - - selected_items = [] - for _ in range(num_select): - rand_value = random.uniform(0, total_fitness) - for cumulative_sum, week in cumulative_probabilities: - if rand_value <= cumulative_sum: - selected_items.append(week) - break - - return selected_items - - - def roulette_wheel_selection(self, scores, num_select): - """ - Select items using roulette wheel selection. - """ - - if not scores: - print("Scores are empty. Cannot perform roulette selection.") - return {} - - total_fitness = sum(scores.values()) - cumulative_probabilities = self.calculate_cumulative_probabilities(scores) - selected_items = self.perform_roulette_selection(cumulative_probabilities, total_fitness, num_select) - return { - week: scores[week] for week in selected_items - } - - - @staticmethod - def get_top_and_remaining_items(scores, percentage): - """ - Select the top percentage of items based on scores and return the remaining items. - - Args: - scores (dict): A dictionary of items with their scores. - percentage (float): The percentage of top items to select. - - Returns: - tuple: A tuple of two dictionaries: - - Top-selected items and their scores. - - Remaining items and their scores. - """ - - # at least 1 chromosome to select. - num_select = max(1, int(len(scores) * percentage)) - sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) - top_selected = dict(sorted_scores[:num_select]) - remaining_items = dict(sorted_scores[num_select:]) - return top_selected, remaining_items - - - @staticmethod - def display_selected_chromosomes(selected_fitness): - """ - Display the selected chromosomes and their fitness scores. - """ - - print("\n--- Selected Weeks and Fitness Scores ---") - for week, score in selected_fitness.items(): - print(f"Week: {week}, Score: {score}") diff --git a/build/lib/Samples/__init__.py b/build/lib/Samples/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/Samples/samples.py b/build/lib/Samples/samples.py deleted file mode 100644 index f4c1b39..0000000 --- a/build/lib/Samples/samples.py +++ /dev/null @@ -1,1585 +0,0 @@ -class SubjectTeacherMap: - subject_teacher_map = { - "TCS-531": ["AB01", "PK02"], - "TCS-502": ["SS03", "AA04", "AC05"], - "TCS-503": ["SP06", "DP07", "AC05"], - "PCS-506": ["AD08", "RD09"], - "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], - "PMA-502": ["PM14", "AD08", "AA15"], - "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], - "XCS-501": ["DT20", "PA21", "NB22"], - "CSP-501": ["AK23"], - "SCS-501": ["AP24"], - "PCS-503": ["RS11", "DP07", "SP06", "VD25"], - "Placement_Class": ["AK26"], - "TCS-511":["PK02"], - "TCS-592":["AB01"], - "TCS-512":["HP18"], - "TCS-519":["DP07"], - "PCS-512":["VD25"] - - } -class WorkingDays: - days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] - - -class Sections: - sections = [] - - def __init__(self, section_number): - self.sections = [chr(65 + i) for i in range(section_number)] - - -class Classrooms: - classrooms = ["R1", "R2", "R3", "R4", "R5"] - labs = ["L1", "L2", "L3", "L4", "L5"] - - -class RoomCapacity: - room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} - section_strength = {"A": 200, "B": 200, "C": 200, "D": 100} - - -class SubjectWeeklyQuota: - subject_quota = { - "TCS-531": 3, - "TCS-502": 3, - "TCS-503": 3, - "PCS-506": 1, - "TMA-502": 3, - "PMA-502": 1, - "TCS-509": 3, - "XCS-501": 2, - "CSP-501": 1, - "SCS-501": 1, - "PCS-503": 1, - "Placement_Class": 1, - } - - -class SpecialSubjects: - special_subjects = ["Placement_Class"] - Labs=["PCS-506", "PCS-503", "PMA-502"] - - -class PenaltyConstants: - PENALTY_TEACHER_DOUBLE_BOOKED = 30 - PENALTY_CLASSROOM_DOUBLE_BOOKED = 20 - PENALTY_OVER_CAPACITY = 25 - PENALTY_UN_PREFERRED_SLOT = 5 - PENALTY_OVERLOAD_TEACHER = 10 - - -class TeacherWorkload: - Weekly_workLoad = { - "AB01": 5, - "PK02": 5, - "SS03": 5, - "AA04": 5, - "AC05": 5, - "SP06": 5, - "DP07": 5, - "AD08": 5, - "RD09": 5, - "BJ10": 5, - "RS11": 5, - "JM12": 5, - "NJ13": 5, - "PM14": 5, - "AA15": 5, - "SJ16": 5, - "AB17": 5, - "HP18": 5, - "SG19": 5, - "DT20": 5, - "PA21": 5, - "NB22": 5, - "AK23": 5, - "AP24": 5, - "VD25": 5, - "AK26": 5 - } - - teacher_preferences = { - "AB01": [1], - "PK02": [1, 2, 3, 4, 5, 6, 7], - "SS03": [1, 2, 3, 4, 5, 6, 7], - "AA04": [1, 2, 3, 4, 5, 6, 7], - "AC05": [1, 2, 3, 4, 5, 6, 7], - "SP06": [1, 2, 3, 4, 5, 6, 7], - "DP07": [1, 2, 3, 4, 5, 6, 7], - "AD08": [1, 2, 3, 4, 5, 6, 7], - "RD09": [1, 2, 3, 4, 5, 6, 7], - "BJ10": [1, 2, 3, 4, 5, 6, 7], - "RS11": [1, 2, 3, 4, 5, 6, 7], - "JM12": [1, 2, 3, 4, 5, 6, 7], - "NJ13": [1, 2, 3, 4, 5, 6, 7], - "PM14": [1, 2, 3, 4, 5, 6, 7], - "AA15": [1, 2, 3, 4, 5, 6, 7], - "SJ16": [1, 2, 3, 4, 5, 6, 7], - "AB17": [1, 2, 3, 4, 5, 6, 7], - "HP18": [1, 2, 3, 4, 5, 6, 7], - "SG19": [1, 2, 3, 4, 5, 6, 7], - "DT20": [1, 2, 3, 4, 5, 6, 7], - "PA21": [1, 2, 3, 4, 5, 6, 7], - "NB22": [1, 2, 3, 4, 5, 6, 7], - "AK23": [1, 2, 3, 4, 5, 6, 7], - "AP24": [1, 2, 3, 4, 5, 6, 7], - "VD25": [1, 2, 3, 4, 5, 6, 7], - "AK26": [5], - } - teacher_duty_days = { - "AB01": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "PK02": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "SS03": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AA04": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AC05": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "SP06": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "DP07": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AD08": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "RD09": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "BJ10": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "RS11": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "JM12": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "NJ13": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "PM14": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AA15": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "SJ16": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AB17": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "HP18": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "SG19": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "DT20": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "PA21": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "NB22": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "AK23": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AP24": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "VD25": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "AK26": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - } -class SampleChromosome: - schedule1={ - "Monday": { - "A": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L4", - "time_slot": "11:10 - 12:05" - } - ], - "C": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - } - ], - "D": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "3:30 - 4:25" - } - ] - }, - "Tuesday": { - "A": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - } - ], - "B": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Wednesday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "L2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Thursday": { - "A": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Friday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - } - } - schedule2={ - "Monday": { - "A": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "11:10 - 12:05" - } - ], - "D": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Tuesday": { - "A": [ - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Wednesday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - } - ], - "B": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "3:30 - 4:25" - } - ] - }, - "Thursday": { - "A": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "NJ13", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Friday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - } - - - } From 115dc8ce70f4283a5f31cc077104195ee78c6980 Mon Sep 17 00:00:00 2001 From: Ayush-Techie Date: Mon, 2 Dec 2024 15:00:45 +0530 Subject: [PATCH 11/67] Changes for section allocation --- Constants/section_allocation.py | 83 ++++++++++++++------------------- Samples/Adhocs/common.py | 22 +++++++++ 2 files changed, 57 insertions(+), 48 deletions(-) create mode 100644 Samples/Adhocs/common.py diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index 4c866a2..417b905 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -1,11 +1,12 @@ import random from collections import defaultdict from typing import List, Dict -from Constants.constant import SectionsConstants +from Constants.constant import SectionsConstants, Defaults +from Samples.Adhocs.common import generate_students class StudentScorer: - def __init__(self, attribute_weights: Dict[str, int] = None): + def __init__(self, students: list, attribute_weights: Dict[str, int] = None): """ Initialize the scorer with attribute weights. @@ -13,18 +14,19 @@ def __init__(self, attribute_weights: Dict[str, int] = None): """ self.attribute_weights = attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS + self.students = students def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: int = 30) -> float: """ - Calculate the CGPA threshold for the top X% of students. + Calculate the CGPA threshold for the top X% of students. - Args: - students (List[Dict]): List of student dictionaries with 'CGPA'. - top_percentage (int): Percentage of students considered top. + Args: + students (List[Dict]): List of student dictionaries with 'CGPA'. + top_percentage (int): Percentage of students considered top. - Returns: - float: The CGPA threshold. + Returns: + float: The CGPA threshold. """ @@ -111,54 +113,39 @@ def divide_students_into_sections(self, students: List[Dict], class_strength: in return sections + def entry_point_for_section_divide(self): + # Calculate the dynamic CGPA threshold + cgpa_threshold_calc = self.calculate_dynamic_cgpa_threshold( + self.students, + top_percentage=30 + ) + # Assign conditions and scores + self.assign_dynamic_conditions(cgpa_threshold_calc) + students_with_scores = self.assign_scores_to_students(self.students) + # Divide students into sections + class_strength = Defaults.max_class_capacity + sections = self.divide_students_into_sections( + students_with_scores, + class_strength + ) + section_allocated_students = list() -def generate_students(num_students: int = 500) -> List[Dict]: - """ - Generate a list of random students with CGPA and hostler status. + for i, section in enumerate(sections, 1): + for student in section: + student["section"] = chr(64 + i) + section_allocated_students.append(student) - Args: - num_students (int): Number of students to generate. + return section_allocated_students - Returns: - List[Dict]: List of student dictionaries. - """ - return [ - { - 'ID': i, - 'CGPA': round(random.uniform(6.0, 9.8), 2), - 'Hostler': random.choice([True, False]) - } - for i in range(1, num_students + 1) - ] if __name__ == "__main__": - # Initialize constants and scorer - scorer = StudentScorer() - students = generate_students(num_students=500) - - # Calculate the dynamic CGPA threshold - cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold(students, top_percentage=30) - print(f"Dynamic CGPA Threshold (Top 30%): {cgpa_threshold}") - - # Assign conditions and scores - scorer.assign_dynamic_conditions(cgpa_threshold) - students_with_scores = scorer.assign_scores_to_students(students) - - # Divide students into sections - class_strength = 50 - sections = scorer.divide_students_into_sections(students_with_scores, class_strength) - - # Display the sections - for i, section in enumerate(sections, 1): - print(f"Section {i} (Total Students: {len(section)}):") - for student in section: - print( - f" Student ID: {student['ID']}, CGPA: {student['CGPA']}, " - f"Hostler: {student['Hostler']}, score: {student['score']}" - ) + + scorer = StudentScorer(generate_students(num_students=500)) + from icecream import ic + ic(scorer.entry_point_for_section_divide()) diff --git a/Samples/Adhocs/common.py b/Samples/Adhocs/common.py new file mode 100644 index 0000000..dd72e78 --- /dev/null +++ b/Samples/Adhocs/common.py @@ -0,0 +1,22 @@ +import random + + +def generate_students(num_students: int = 500) -> list: + """ + Generate a list of random students with CGPA and hostler status. + + Args: + num_students (int): Number of students to generate. + + Returns: + List[Dict]: List of student dictionaries. + """ + + return [ + { + 'ID': i, + 'CGPA': round(random.uniform(6.0, 9.8), 2), + 'Hostler': random.choice([True, False]) + } + for i in range(1, num_students + 1) + ] From 61634d681d7220e14ad988bba70144f0679fd327 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Mon, 2 Dec 2024 15:06:45 +0530 Subject: [PATCH 12/67] init.py modified --- GA/__init__.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index 168955f..dcb9319 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -32,8 +32,6 @@ def timetable_generation(): ) timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) - from icecream import ic - ic(timetable) # Fitness of each Chromosome fitness_calculator = TimetableFitnessEvaluator( timetable, @@ -54,7 +52,6 @@ def timetable_generation(): # Selection of all Chromosomes selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - ic(len(selected_chromosomes)) # Crossover for all selected Chromosomes crossover_object = TimeTableCrossOver() @@ -80,13 +77,6 @@ def timetable_generation(): mutation_object.mutate_schedule_for_week(chromosome) for chromosome in crossover_chromosomes ] - - - ic(mutated_chromosomes) - ic(selected_chromosomes) - - ic(selected_chromosomes) - # Store best of Chromosomes best_chromosome_score = -1 best_chromosome = dict() @@ -94,8 +84,6 @@ def timetable_generation(): if int(week_score) > best_chromosome_score: best_chromosome_score = int(week_score) best_chromosome = timetable[week_no] - - ic(f"Best Chromosome: {best_chromosome}") return best_chromosome @@ -104,6 +92,4 @@ def run_timetable_generation(): best_chromosome = timetable_generation() return best_chromosome - -if __name__ == "__main__": - print(run_timetable_generation()) +run_timetable_generation() From 6dac561594a141892ceaeb7655d9447025cee8f3 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Mon, 2 Dec 2024 15:51:08 +0530 Subject: [PATCH 13/67] Teachers_tt.py updated --- Constants/Teacher's chromo.json | 277 -- Constants/Teachers_tt.py | 28 +- GA/chromosome.json | 6310 +++++++++++++++++-------------- GA/fitness.json | 563 +-- 4 files changed, 3599 insertions(+), 3579 deletions(-) delete mode 100644 Constants/Teacher's chromo.json diff --git a/Constants/Teacher's chromo.json b/Constants/Teacher's chromo.json deleted file mode 100644 index aa5f1ea..0000000 --- a/Constants/Teacher's chromo.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "Teacher1": { - "Monday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "10:00 - 10:55", - "section": "A" - } - ], - "Tuesday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "11:00 - 11:55", - "section": "A" - } - ], - "Wednesday": [ - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "10:00 - 10:55", - "section": "B" - } - ], - "Thursday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "B" - } - ], - "Friday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "A" - } - ] - }, - "Teacher2": { - "Tuesday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "11:00 - 11:55", - "section": "A" - } - ], - "Wednesday": [ - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "10:00 - 10:55", - "section": "B" - } - ], - "Thursday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "B" - } - ], - "Friday": [ - { - "course_name": "BCA", - "subject_id": "CSP-501", - "classroom_name": "L2", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "MBA", - "subject_id": "MKT-202", - "classroom_name": "R3", - "time_slot": "11:00 - 11:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "2:00 - 2:55", - "section": "A" - } - ], - "Saturday": [ - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BTech", - "subject_id": "TCS-509", - "classroom_name": "R1", - "time_slot": "10:00 - 10:55", - "section": "A" - } - ] - }, - "Teacher3": { - "Monday": [ - { - "course_name": "BBA", - "subject_id": "HRM-301", - "classroom_name": "L3", - "time_slot": "9:00 - 9:55", - "section": "C" - }, - { - "course_name": "MBA", - "subject_id": "FIN-305", - "classroom_name": "R4", - "time_slot": "11:00 - 11:55", - "section": "A" - } - ], - "Tuesday": [ - { - "course_name": "BTech", - "subject_id": "TCS-510", - "classroom_name": "R2", - "time_slot": "10:00 - 10:55", - "section": "A" - }, - { - "course_name": "BCA", - "subject_id": "CSP-502", - "classroom_name": "L1", - "time_slot": "2:00 - 2:55", - "section": "B" - } - ], - "Wednesday": [ - { - "course_name": "MBA", - "subject_id": "MKT-203", - "classroom_name": "R3", - "time_slot": "10:00 - 10:55", - "section": "A" - }, - { - "course_name": "BBA", - "subject_id": "HRM-301", - "classroom_name": "L3", - "time_slot": "2:00 - 2:55", - "section": "C" - } - ] - }, - "Teacher4": { - "Thursday": [ - { - "course_name": "BCA", - "subject_id": "CSP-503", - "classroom_name": "L1", - "time_slot": "9:00 - 9:55", - "section": "B" - }, - { - "course_name": "BTech", - "subject_id": "TCS-511", - "classroom_name": "R2", - "time_slot": "11:00 - 11:55", - "section": "C" - } - ], - "Friday": [ - { - "course_name": "MBA", - "subject_id": "FIN-306", - "classroom_name": "R4", - "time_slot": "9:00 - 9:55", - "section": "A" - }, - { - "course_name": "BBA", - "subject_id": "HRM-302", - "classroom_name": "L3", - "time_slot": "10:00 - 10:55", - } - ] - } -} \ No newline at end of file diff --git a/Constants/Teachers_tt.py b/Constants/Teachers_tt.py index a76498b..30c4d7b 100644 --- a/Constants/Teachers_tt.py +++ b/Constants/Teachers_tt.py @@ -49,31 +49,39 @@ def generate_teacher_timetable(self, chromosome): "day": day } - # Debug: Ensure each teacher is assigned a class - if teacher_id not in self.teacher_timetable: - print(f"Teacher {teacher_id} has no classes assigned.") + return self.teacher_timetable def save_timetable_to_json(self, file_path="Constants/teacher_timetable.json"): """ - Save the teacher's timetable to a JSON file. + Create a dictionary and save the teacher's timetable to a JSON file. """ try: + # Create a dictionary explicitly from the teacher timetable + timetable_dict = { + teacher: { + day: classes + for day, classes in days.items() + } + for teacher, days in self.teacher_timetable.items() + } + + # Save the dictionary to a JSON file with open(file_path, "w") as json_file: - json.dump(self.teacher_timetable, json_file, indent=4) + json.dump(timetable_dict, json_file, indent=4) + + print(f"Timetable successfully saved to '{file_path}'.") except Exception as e: print(f"Error saving timetable to '{file_path}': {e}") - if __name__ == "__main__": teacher_timetable = TeacherTimetable() - # Generate timetable from the sample chromosome (Week 1 and Week 2) w = { "Week 2": SampleChromosome.schedule2, "Week 1": SampleChromosome.schedule1 } - teacher_timetable.generate_teacher_timetable(w) - + teacher_tt=teacher_timetable.generate_teacher_timetable(w) + print(teacher_tt) # Save timetable to a JSON file - teacher_timetable.save_timetable_to_json() + teacher_timetable.save_timetable_to_json() diff --git a/GA/chromosome.json b/GA/chromosome.json index 650e577..942da23 100644 --- a/GA/chromosome.json +++ b/GA/chromosome.json @@ -3,34 +3,40 @@ "Monday": { "A": [ { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, @@ -41,172 +47,208 @@ "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "DP07", + "teacher_id": "RS11", "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", + "teacher_id": "RS11", "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "12:05 - 1:00" - }, + } + ], + "D": [ { - "teacher_id": "PM14", + "teacher_id": "AA15", "subject_id": "PMA-502", "classroom_id": "L2", - "time_slot": "2:15 - 3:10" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PM14", + "teacher_id": "AA15", "subject_id": "PMA-502", "classroom_id": "L2", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R4", - "time_slot": "9:00 - 9:55" + "time_slot": "11:10 - 12:05" }, { "teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R4", - "time_slot": "9:55 - 10:50" + "time_slot": "12:05 - 1:00" }, { "teacher_id": "AC05", - "subject_id": "TCS-503", + "subject_id": "TCS-502", "classroom_id": "R4", - "time_slot": "11:10 - 12:05" + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R4", - "time_slot": "12:05 - 1:00" + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R5", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R6", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R6", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -215,116 +257,92 @@ "Tuesday": { "A": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", + "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", + "teacher_id": "DP07", + "subject_id": "PCS-503", "classroom_id": "L1", - "time_slot": "1:20 - 2:15" + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ @@ -335,214 +353,232 @@ "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB17", + "teacher_id": "HP18", "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Wednesday": { "A": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R2", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SJ16", + "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R3", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R3", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, @@ -553,344 +589,386 @@ "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PK02", + "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R5", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R5", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "JM12", + "teacher_id": "NJ13", "subject_id": "TMA-502", "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "NJ13", - "subject_id": "TMA-502", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Thursday": { "A": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, { "teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, { "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R2", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "PA21", + "teacher_id": "NB22", "subject_id": "XCS-501", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AC05", + "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R5", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R5", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R6", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Friday": { "A": [ { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ @@ -901,160 +979,184 @@ "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA15", + "teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA15", + "teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -1063,210 +1165,216 @@ "Saturday": { "A": [ { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -1277,90 +1385,84 @@ "Monday": { "A": [ { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", - "time_slot": "11:10 - 12:05" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "1:20 - 2:15" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", + "teacher_id": "AD08", + "subject_id": "PMA-502", "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", + "teacher_id": "AD08", + "subject_id": "PMA-502", "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, @@ -1369,66 +1471,60 @@ "subject_id": "CSP-501", "classroom_id": "R3", "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" } ], "D": [ { - "teacher_id": "DP07", - "subject_id": "PCS-503", + "teacher_id": "AA15", + "subject_id": "PMA-502", "classroom_id": "L2", - "time_slot": "9:55 - 10:50" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", + "teacher_id": "AA15", + "subject_id": "PMA-502", "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } @@ -1440,121 +1536,151 @@ "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" + }, { "teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R5", - "time_slot": "9:55 - 10:50" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - } - ], - "F": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R6", - "time_slot": "9:00 - 9:55" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" + } + ], + "F": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R6", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Tuesday": { "A": [ { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { "teacher_id": "AD08", "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" }, { "teacher_id": "AD08", "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ @@ -1565,52 +1691,52 @@ "time_slot": "9:00 - 9:55" }, { - "teacher_id": "HP18", + "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "NB22", + "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "RS11", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "1:20 - 2:15" }, @@ -1621,78 +1747,108 @@ "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", + "teacher_id": "VD25", + "subject_id": "PCS-503", "classroom_id": "L2", - "time_slot": "9:55 - 10:50" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", + "teacher_id": "VD25", + "subject_id": "PCS-503", "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R5", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R6", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -1701,69 +1857,63 @@ "Wednesday": { "A": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", - "time_slot": "12:05 - 1:00" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AB17", + "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", + "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", + "teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "12:05 - 1:00" @@ -1771,20 +1921,26 @@ ], "C": [ { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R3", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, @@ -1793,92 +1949,98 @@ "subject_id": "XCS-501", "classroom_id": "R3", "time_slot": "12:05 - 1:00" - }, + } + ], + "D": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "1:20 - 2:15" + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AC05", + "teacher_id": "SS03", "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, { "teacher_id": "NJ13", "subject_id": "TMA-502", "classroom_id": "R4", - "time_slot": "9:00 - 9:55" + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R4", - "time_slot": "9:55 - 10:50" + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "PK02", + "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R4", - "time_slot": "11:10 - 12:05" + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", - "time_slot": "12:05 - 1:00" + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } @@ -1891,444 +2053,492 @@ "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "11:10 - 12:05" + }, { "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", + "subject_id": "TMA-502", + "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Thursday": { "A": [ { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, { "teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", - "time_slot": "1:20 - 2:15" + "time_slot": "11:10 - 12:05" }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "RD09", - "subject_id": "PCS-506", + "teacher_id": "PM14", + "subject_id": "PMA-502", "classroom_id": "L2", - "time_slot": "9:55 - 10:50" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", + "teacher_id": "PM14", + "subject_id": "PMA-502", "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "RS11", + "subject_id": "TMA-502", "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R4", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { "teacher_id": "AD08", "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" }, { "teacher_id": "AD08", "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R6", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Friday": { "A": [ { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "12:05 - 1:00" - } - ], - "E": [ - { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" + } + ], + "E": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -2337,70 +2547,58 @@ "Saturday": { "A": [ { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R1", "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" } ], "B": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", "time_slot": "12:05 - 1:00" } @@ -2413,134 +2611,152 @@ "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "NJ13", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "1:20 - 2:15" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -2551,23 +2767,29 @@ "Monday": { "A": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, { "teacher_id": "SP06", "subject_id": "TCS-503", @@ -2577,184 +2799,226 @@ ], "B": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "12:05 - 1:00" } ], "C": [ - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "time_slot": "9:00 - 9:55" }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "1:20 - 2:15" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" }, { "teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ + "time_slot": "11:10 - 12:05" + }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" + } + ], + "D": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "NB22", + "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { "teacher_id": "AA15", "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R5", - "time_slot": "11:10 - 12:05" + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R5", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R6", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R6", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -2763,20 +3027,20 @@ "Tuesday": { "A": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, @@ -2789,184 +3053,196 @@ ], "B": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R3", - "time_slot": "11:10 - 12:05" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R3", - "time_slot": "12:05 - 1:00" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R3", - "time_slot": "1:20 - 2:15" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SJ16", + "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "RS11", + "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AC05", + "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R6", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "NJ13", - "subject_id": "TMA-502", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -2975,55 +3251,49 @@ "Wednesday": { "A": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { "teacher_id": "PM14", "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" }, { "teacher_id": "PM14", "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, { "teacher_id": "AK23", "subject_id": "CSP-501", @@ -3031,22 +3301,22 @@ "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "RS11", + "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, @@ -3057,101 +3327,107 @@ "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", + "teacher_id": "AC05", "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", "time_slot": "11:10 - 12:05" - } - ], - "E": [ + }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" }, { "teacher_id": "AB01", "subject_id": "TCS-531", - "classroom_id": "R5", - "time_slot": "11:10 - 12:05" + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" + } + ], + "E": [ + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R5", - "time_slot": "12:05 - 1:00" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "HP18", + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "3:30 - 4:25" @@ -3159,238 +3435,262 @@ ], "F": [ { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Thursday": { "A": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "NJ13", - "subject_id": "TMA-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R6", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -3399,210 +3699,222 @@ "Friday": { "A": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", + "teacher_id": "RS11", + "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "DP07", + "teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "1:20 - 2:15" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -3611,210 +3923,222 @@ "Saturday": { "A": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R1", "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" } ], "B": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", + "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R3", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "NJ13", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -3825,136 +4149,148 @@ "Monday": { "A": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" } ], "C": [ { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AC05", + "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { "teacher_id": "PM14", "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" }, { "teacher_id": "PM14", "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, @@ -3965,70 +4301,76 @@ "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R5", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R5", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", "time_slot": "2:15 - 3:10" }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "NJ13", - "subject_id": "TMA-502", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R6", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AC05", + "teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "NB22", + "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -4037,422 +4379,476 @@ "Tuesday": { "A": [ { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, { "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "12:05 - 1:00" + } + ], + "B": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], - "B": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, + "C": [ { - "teacher_id": "AB17", + "teacher_id": "SJ16", "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", + "teacher_id": "AB01", "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", + "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "AC05", + "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "NB22", + "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R5", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "DP07", - "subject_id": "PCS-503", + "teacher_id": "RD09", + "subject_id": "PCS-506", "classroom_id": "L2", - "time_slot": "9:55 - 10:50" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", + "teacher_id": "RD09", + "subject_id": "PCS-506", "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Wednesday": { "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, { "teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", - "time_slot": "9:00 - 9:55" + "time_slot": "9:55 - 10:50" }, { "teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R1", - "time_slot": "9:55 - 10:50" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" } ], "B": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { "teacher_id": "DP07", "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "classroom_id": "L3", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "1:20 - 2:15" + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R5", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R6", - "time_slot": "11:10 - 12:05" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R6", - "time_slot": "12:05 - 1:00" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "JM12", + "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R6", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -4461,396 +4857,402 @@ "Thursday": { "A": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R1", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "subject_id": "TCS-503", "classroom_id": "R2", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { "teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", + "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", + "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Friday": { "A": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "12:05 - 1:00" } ], "B": [ - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R2", - "time_slot": "12:05 - 1:00" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R2", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R3", - "time_slot": "11:10 - 12:05" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB17", + "teacher_id": "HP18", "subject_id": "TCS-509", "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } @@ -4858,237 +5260,267 @@ "F": [ { "teacher_id": "AC05", - "subject_id": "TCS-503", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "3:30 - 4:25" } ] }, "Saturday": { "A": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R2", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", "time_slot": "12:05 - 1:00" + } + ], + "B": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -5099,178 +5531,178 @@ "Monday": { "A": [ { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", + "teacher_id": "RD09", + "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "NB22", + "subject_id": "XCS-501", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { "teacher_id": "AD08", "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" }, { "teacher_id": "AD08", "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "2:15 - 3:10" }, @@ -5283,168 +5715,180 @@ ], "F": [ { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R6", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R6", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - } - ] - }, - "Tuesday": { - "A": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, { "teacher_id": "SS03", "subject_id": "TCS-502", - "classroom_id": "R1", + "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DT20", + "teacher_id": "NB22", "subject_id": "XCS-501", - "classroom_id": "R1", + "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { "teacher_id": "AP24", "subject_id": "SCS-501", - "classroom_id": "R1", + "classroom_id": "R6", "time_slot": "3:30 - 4:25" } - ], - "B": [ + ] + }, + "Tuesday": { + "A": [ { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", "time_slot": "12:05 - 1:00" } ], - "C": [ + "B": [ { - "teacher_id": "RD09", - "subject_id": "PCS-506", + "teacher_id": "RS11", + "subject_id": "PCS-503", "classroom_id": "L2", - "time_slot": "9:55 - 10:50" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", + "teacher_id": "RS11", + "subject_id": "PCS-503", "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" + } + ], + "C": [ + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB17", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R3", - "time_slot": "2:15 - 3:10" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R4", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, @@ -5455,14 +5899,14 @@ "time_slot": "1:20 - 2:15" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } @@ -5475,258 +5919,306 @@ "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" + } + ], + "F": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R6", "time_slot": "11:10 - 12:05" - } - ], - "F": [ + }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "HP18", + "teacher_id": "SG19", "subject_id": "TCS-509", "classroom_id": "R6", - "time_slot": "11:10 - 12:05" + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R6", - "time_slot": "12:05 - 1:00" + "time_slot": "3:30 - 4:25" } ] }, "Wednesday": { "A": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", + "teacher_id": "DP07", "subject_id": "TCS-503", "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DP07", + "teacher_id": "AC05", "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R5", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R6", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "RS11", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -5734,211 +6226,247 @@ }, "Thursday": { "A": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" + }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R1", + "time_slot": "12:05 - 1:00" + } + ], + "B": [ + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SS03", + "teacher_id": "AA04", "subject_id": "TCS-502", - "classroom_id": "R1", + "classroom_id": "R2", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", "time_slot": "12:05 - 1:00" - }, + } + ], + "C": [ { "teacher_id": "AD08", "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" }, { "teacher_id": "AD08", "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R2", + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], - "C": [ + "D": [ { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L1", - "time_slot": "9:00 - 9:55" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], - "D": [ + "E": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R5", "time_slot": "11:10 - 12:05" - } - ], - "E": [ + }, { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", - "time_slot": "11:10 - 12:05" + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", - "time_slot": "12:05 - 1:00" + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", + "time_slot": "9:55 - 10:50" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R6", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -5947,210 +6475,222 @@ "Friday": { "A": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - }, + } + ], + "B": [ { "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R2", - "time_slot": "1:20 - 2:15" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", - "time_slot": "11:10 - 12:05" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R3", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } @@ -6165,204 +6705,204 @@ "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R1", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R1", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R1", "time_slot": "12:05 - 1:00" } ], "B": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB17", + "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R2", - "time_slot": "12:05 - 1:00" + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", - "time_slot": "1:20 - 2:15" + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", - "time_slot": "2:15 - 3:10" + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R2", - "time_slot": "3:30 - 4:25" + "time_slot": "12:05 - 1:00" } ], "C": [ { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R3", "time_slot": "12:05 - 1:00" } ], "D": [ { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "9:55 - 10:50" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "9:00 - 9:55" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "2:15 - 3:10" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "1:20 - 2:15" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R4", "time_slot": "3:30 - 4:25" } ], "E": [ { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:00 - 9:55" }, { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "9:55 - 10:50" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "11:10 - 12:05" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "12:05 - 1:00" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "1:20 - 2:15" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "2:15 - 3:10" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "3:30 - 4:25" } ], "F": [ { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:00 - 9:55" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "9:55 - 10:50" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:10 - 12:05" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:05 - 1:00" }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "1:20 - 2:15" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "2:15 - 3:10" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "3:30 - 4:25" } diff --git a/GA/fitness.json b/GA/fitness.json index 9032c90..f2a7857 100644 --- a/GA/fitness.json +++ b/GA/fitness.json @@ -2,481 +2,239 @@ "section_fitness_scores": { "Week 1": { "Monday": { - "A": 995, - "B": 960, - "C": 1000, -<<<<<<< HEAD - "D": 960, - "E": 955, - "F": 900 - }, - "Tuesday": { "A": 1000, - "B": 935, - "C": 930, - "D": 950, - "E": 910, - "F": 905 - }, - "Wednesday": { - "A": 915, - "B": 850, - "C": 895, - "D": 870, - "E": 780, - "F": 900 - }, - "Thursday": { - "A": 855, - "B": 850, - "C": 820, - "D": 785, - "E": 790, - "F": 850 - }, - "Friday": { - "A": 735, - "B": 770, - "C": 860, - "D": 785, - "E": 700, - "F": 750 - }, - "Saturday": { - "A": 570, - "B": 650, - "C": 590, - "D": 470, - "E": 400, - "F": 475 -======= - "D": 920, + "B": 960, + "C": 995, + "D": 850, "E": 995, - "F": 920 + "F": 930 }, "Tuesday": { - "A": 970, - "B": 970, - "C": 960, + "A": 965, + "B": 910, + "C": 940, "D": 925, - "E": 870, - "F": 925 + "E": 990, + "F": 950 }, "Wednesday": { - "A": 960, - "B": 840, - "C": 875, - "D": 845, - "E": 865, - "F": 735 + "A": 920, + "B": 855, + "C": 880, + "D": 860, + "E": 855, + "F": 775 }, "Thursday": { - "A": 835, - "B": 860, - "C": 850, - "D": 540, - "E": 525, - "F": 480 + "A": 860, + "B": 845, + "C": 800, + "D": 575, + "E": 515, + "F": 490 }, "Friday": { - "A": 710, - "B": 740, + "A": 795, + "B": 760, "C": 700, "D": 355, "E": 325, "F": 325 }, "Saturday": { - "A": 490, - "B": 560, - "C": 555, - "D": 325, - "E": 325, - "F": 325 ->>>>>>> 6a716a08517c777806fe28ece2e5c4f10034d9f9 + "A": 560, + "B": 590, + "C": 480, + "D": 315, + "E": 315, + "F": 315 } }, "Week 2": { "Monday": { -<<<<<<< HEAD - "A": 995, - "B": 1000, - "C": 960, - "D": 920, - "E": 1000, - "F": 970 + "A": 835, + "B": 800, + "C": 835, + "D": 750, + "E": 715, + "F": 700 }, "Tuesday": { - "A": 910, - "B": 935, - "C": 1000, - "D": 940, - "E": 970, - "F": 930 - }, - "Wednesday": { - "A": 900, - "B": 945, - "C": 880, - "D": 930, - "E": 805, - "F": 870 - }, - "Thursday": { - "A": 815, - "B": 790, - "C": 910, - "D": 760, - "E": 850, - "F": 790 - }, - "Friday": { - "A": 790, - "B": 840, - "C": 780, + "A": 735, + "B": 710, + "C": 790, "D": 755, - "E": 750, - "F": 750 - }, - "Saturday": { - "A": 445, - "B": 600, - "C": 600, - "D": 530, - "E": 650, - "F": 410 -======= - "A": 850, - "B": 850, - "C": 850, - "D": 810, - "E": 725, - "F": 740 - }, - "Tuesday": { - "A": 780, - "B": 780, - "C": 735, - "D": 670, - "E": 695, - "F": 720 + "E": 760, + "F": 725 }, "Wednesday": { - "A": 720, - "B": 750, - "C": 690, - "D": 605, - "E": 635, - "F": 600 + "A": 695, + "B": 730, + "C": 700, + "D": 710, + "E": 675, + "F": 625 }, "Thursday": { - "A": 645, - "B": 670, - "C": 640, - "D": 445, - "E": 380, - "F": 320 + "A": 720, + "B": 655, + "C": 660, + "D": 420, + "E": 420, + "F": 455 }, "Friday": { - "A": 645, - "B": 650, - "C": 620, - "D": 290, + "A": 650, + "B": 635, + "C": 735, + "D": 305, "E": 245, - "F": 215 + "F": 245 }, "Saturday": { - "A": 410, - "B": 380, + "A": 480, + "B": 410, "C": 480, - "D": 215, - "E": 215, - "F": 215 ->>>>>>> 6a716a08517c777806fe28ece2e5c4f10034d9f9 + "D": 245, + "E": 245, + "F": 245 } }, "Week 3": { "Monday": { -<<<<<<< HEAD - "A": 1000, - "B": 1000, - "C": 960, - "D": 1000, - "E": 960, - "F": 955 - }, - "Tuesday": { - "A": 970, - "B": 930, - "C": 985, - "D": 930, - "E": 930, - "F": 980 - }, - "Wednesday": { - "A": 905, - "B": 830, - "C": 890, - "D": 860, - "E": 865, - "F": 840 - }, - "Thursday": { - "A": 775, - "B": 840, - "C": 900, - "D": 870, - "E": 810, - "F": 830 - }, - "Friday": { - "A": 800, - "B": 810, - "C": 810, - "D": 760, - "E": 720, - "F": 750 - }, - "Saturday": { - "A": 460, - "B": 670, - "C": 520, - "D": 560, - "E": 640, - "F": 490 -======= - "A": 740, - "B": 735, + "A": 770, + "B": 765, "C": 700, - "D": 665, - "E": 700, - "F": 670 + "D": 725, + "E": 760, + "F": 700 }, "Tuesday": { - "A": 710, - "B": 710, - "C": 675, - "D": 710, - "E": 675, - "F": 670 + "A": 730, + "B": 760, + "C": 760, + "D": 715, + "E": 660, + "F": 655 }, "Wednesday": { - "A": 640, - "B": 610, - "C": 640, - "D": 605, - "E": 640, - "F": 635 + "A": 690, + "B": 655, + "C": 660, + "D": 640, + "E": 660, + "F": 555 }, "Thursday": { - "A": 580, - "B": 665, - "C": 670, - "D": 445, - "E": 325, - "F": 355 + "A": 630, + "B": 660, + "C": 660, + "D": 440, + "E": 335, + "F": 410 }, "Friday": { - "A": 560, - "B": 610, - "C": 580, - "D": 265, - "E": 205, - "F": 205 + "A": 675, + "B": 575, + "C": 650, + "D": 275, + "E": 215, + "F": 215 }, "Saturday": { - "A": 370, - "B": 360, - "C": 400, - "D": 205, - "E": 205, - "F": 205 ->>>>>>> 6a716a08517c777806fe28ece2e5c4f10034d9f9 + "A": 450, + "B": 415, + "C": 380, + "D": 215, + "E": 215, + "F": 215 } }, "Week 4": { "Monday": { -<<<<<<< HEAD - "A": 1000, - "B": 960, - "C": 960, - "D": 1000, - "E": 935, - "F": 890 -======= - "A": 730, - "B": 725, - "C": 730, - "D": 690, - "E": 660, - "F": 650 + "A": 735, + "B": 740, + "C": 670, + "D": 695, + "E": 590, + "F": 695 }, "Tuesday": { - "A": 665, - "B": 670, - "C": 635, + "A": 670, + "B": 730, + "C": 725, "D": 685, - "E": 550, - "F": 695 + "E": 695, + "F": 700 }, "Wednesday": { - "A": 640, + "A": 670, "B": 670, - "C": 640, - "D": 725, - "E": 670, - "F": 530 ->>>>>>> 6a716a08517c777806fe28ece2e5c4f10034d9f9 - }, - "Tuesday": { - "A": 935, - "B": 910, - "C": 1000, - "D": 960, - "E": 920, - "F": 975 - }, - "Wednesday": { - "A": 910, - "B": 880, - "C": 870, - "D": 880, - "E": 790, - "F": 925 + "C": 635, + "D": 670, + "E": 605, + "F": 565 }, "Thursday": { -<<<<<<< HEAD - "A": 780, - "B": 720, - "C": 860, - "D": 825, - "E": 920, - "F": 860 + "A": 665, + "B": 700, + "C": 580, + "D": 460, + "E": 310, + "F": 295 }, "Friday": { - "A": 830, - "B": 715, - "C": 830, - "D": 770, - "E": 755, - "F": 780 - }, - "Saturday": { - "A": 655, - "B": 510, + "A": 640, + "B": 580, "C": 610, - "D": 590, - "E": 580, - "F": 405 -======= - "A": 635, - "B": 640, - "C": 635, - "D": 400, - "E": 385, - "F": 340 - }, - "Friday": { - "A": 605, - "B": 640, - "C": 580, "D": 235, - "E": 205, - "F": 205 + "E": 250, + "F": 280 }, "Saturday": { - "A": 400, - "B": 470, - "C": 500, + "A": 370, + "B": 370, + "C": 435, "D": 205, "E": 205, "F": 205 ->>>>>>> 6a716a08517c777806fe28ece2e5c4f10034d9f9 } }, "Week 5": { "Monday": { -<<<<<<< HEAD - "A": 995, - "B": 960, - "C": 960, - "D": 995, - "E": 890, - "F": 970 + "A": 730, + "B": 690, + "C": 725, + "D": 650, + "E": 665, + "F": 730 }, "Tuesday": { - "A": 930, - "B": 925, - "C": 930, - "D": 895, - "E": 930, - "F": 920 + "A": 700, + "B": 670, + "C": 700, + "D": 670, + "E": 700, + "F": 610 }, "Wednesday": { - "A": 960, - "B": 870, - "C": 885, - "D": 760, - "E": 850, - "F": 835 - }, - "Thursday": { - "A": 870, - "B": 810, - "C": 795, - "D": 820, - "E": 840, - "F": 745 - }, - "Friday": { - "A": 890, - "B": 790, + "A": 670, + "B": 670, "C": 730, - "D": 810, - "E": 780, - "F": 795 + "D": 575, + "E": 460, + "F": 530 }, - "Saturday": { + "Thursday": { "A": 610, - "B": 505, - "C": 630, - "D": 375, - "E": 650, - "F": 480 -======= - "A": 725, - "B": 730, - "C": 690, - "D": 730, - "E": 655, - "F": 690 - }, - "Tuesday": { - "A": 670, - "B": 730, + "B": 665, "C": 670, - "D": 670, - "E": 550, - "F": 670 - }, - "Wednesday": { - "A": 700, - "B": 640, - "C": 700, - "D": 595, - "E": 610, - "F": 560 - }, - "Thursday": { - "A": 700, - "B": 610, - "C": 700, - "D": 455, - "E": 355, + "D": 350, + "E": 475, "F": 400 }, "Friday": { - "A": 605, + "A": 610, "B": 640, "C": 605, "D": 265, @@ -484,29 +242,20 @@ "F": 205 }, "Saturday": { - "A": 440, - "B": 505, - "C": 440, + "A": 510, + "B": 465, + "C": 465, "D": 205, "E": 205, "F": 205 ->>>>>>> 6a716a08517c777806fe28ece2e5c4f10034d9f9 } } }, "weekly_fitness_scores": { -<<<<<<< HEAD - "Week 1": 29315, - "Week 2": 29675, - "Week 3": 29805, - "Week 4": 29695, - "Week 5": 29385 -======= - "Week 1": 26355, - "Week 2": 20885, - "Week 3": 19340, - "Week 4": 19450, - "Week 5": 19730 ->>>>>>> 6a716a08517c777806fe28ece2e5c4f10034d9f9 + "Week 1": 26475, + "Week 2": 21495, + "Week 3": 20190, + "Week 4": 19540, + "Week 5": 19630 } } \ No newline at end of file From 514d45bb72933290b263e42e952fb8a47cc5e6ce Mon Sep 17 00:00:00 2001 From: gunjan Date: Wed, 29 Jan 2025 22:15:25 +0530 Subject: [PATCH 14/67] Dynamic Time Slots --- Constants/time_intervals.py | 70 ++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/Constants/time_intervals.py b/Constants/time_intervals.py index 1a6de92..d56e96f 100644 --- a/Constants/time_intervals.py +++ b/Constants/time_intervals.py @@ -1,26 +1,36 @@ -from datetime import datetime +from datetime import datetime,timedelta class TimeIntervalConstant: - time_slots = { - 1: "9:00 - 9:55", - 2: "9:55 - 10:50", - 3: "11:10 - 12:05", - 4: "12:05 - 1:00", - 5: "1:20 - 2:15", - 6: "2:15 - 3:10", - 7: "3:30 - 4:25", - } - - time_mapping = { - "9:00 - 9:55": 1, - "9:55 - 10:50": 2, - "11:10 - 12:05": 3, - "12:05 - 1:00": 4, - "1:20 - 2:15": 5, - "2:15 - 3:10": 6, - "3:30 - 4:25": 7, - } + + time_slots = {} + time_mapping = {} + + @staticmethod + def generate_dynamic_schedule(start_time, period_duration=55, total_periods=7, break_after_periods=None, lunch_after_period=4, break_duration=10, lunch_duration=30): + if break_after_periods is None: + break_after_periods = set() + TimeIntervalConstant.time_slots.clear() + TimeIntervalConstant.time_mapping.clear() + + + start_time = datetime.strptime(start_time, "%H:%M") + + current_time = start_time + period_counter = 1 + + while period_counter <= total_periods: + end_time = current_time + timedelta(minutes=period_duration) + time_slot = f"{current_time.strftime('%H:%M')} - {end_time.strftime('%H:%M')}" + TimeIntervalConstant.time_slots[period_counter] = time_slot + TimeIntervalConstant.time_mapping[time_slot] = period_counter + current_time = end_time + if period_counter in break_after_periods: + current_time += timedelta(minutes=break_duration) + if period_counter == lunch_after_period: + current_time += timedelta(minutes=lunch_duration) + + period_counter += 1 @staticmethod def get_slot(slot_number: int) -> str: @@ -82,3 +92,23 @@ def get_all_slot_numbers(): def get_all_time_slots(): """Retrieve all time intervals.""" return list(TimeIntervalConstant.time_slots.values()) + + +TimeIntervalConstant.generate_dynamic_schedule( + "8:00", # Start time (positional argument) + 60, # Period duration (positional argument) + 7, # Total periods (positional argument) + {2, 6}, # Break after periods (positional argument) + 4, # Lunch after period (positional argument) + 60, # Break duration (positional argument) + 50 # Lunch duration (positional argument) +) + +slot_numbers = TimeIntervalConstant.get_all_slot_numbers() + + +time_slots = TimeIntervalConstant.get_all_time_slots() + + +print("Slot Numbers:", slot_numbers) +print("Time Slots:", time_slots) \ No newline at end of file From 51fd41d9e31f426d2a65e5488dcdf05d03304115 Mon Sep 17 00:00:00 2001 From: gunjan Date: Fri, 31 Jan 2025 18:24:58 +0530 Subject: [PATCH 15/67] adding encoding to setup --- setup.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index bada970..b50a98d 100644 --- a/setup.py +++ b/setup.py @@ -5,8 +5,9 @@ packages=find_packages(include=["GA", "Samples", "Constants"]), version="v0.1.0", description="This Library generates timetable and is a plug and play solution for any python based backend service.", - long_description=open("README.md").read(), - authors=["Graphic Era Hill University, Bhimtal"], + long_description=open("README.md",encoding="utf-8").read(), + long_description_content_type="text/markdown", + author="Graphic Era Hill University, Bhimtal",, license="MIT", install_requires=[ "psycopg2-binary==2.9.9", From c5816133b7732b91e49b33003e387a439356d23d Mon Sep 17 00:00:00 2001 From: Vibha Date: Mon, 3 Feb 2025 18:27:29 +0530 Subject: [PATCH 16/67] Updated the isConflict code to integrate with backend --- Constants/is_conflict.py | 203 ++++++++++++++++++++++---------- Constants/section_allocation.py | 10 +- 2 files changed, 144 insertions(+), 69 deletions(-) diff --git a/Constants/is_conflict.py b/Constants/is_conflict.py index d13e692..77ce088 100644 --- a/Constants/is_conflict.py +++ b/Constants/is_conflict.py @@ -1,7 +1,16 @@ import psycopg2 from Samples.samples import SampleChromosome + + class IsConflict: - def __init__(self, dbname="timetable", user="postgres", password="root", host="localhost", port="5432"): + def __init__( + self, + dbname="timetable_postgres_db", + user="postgres", + password="13989333", + host="localhost", + port="5432", + ): self.dbname = dbname self.user = user self.password = password @@ -11,114 +20,180 @@ def __init__(self, dbname="timetable", user="postgres", password="root", host="l self.cursor = None def connect_to_database(self): + """Establishes a connection to the database.""" try: self.conn = psycopg2.connect( dbname=self.dbname, user=self.user, password=self.password, host=self.host, - port=self.port + port=self.port, ) self.cursor = self.conn.cursor() - print("Connected to PostgreSQL database!") + print("Database connection successful") except Exception as e: - print(f"Error connecting to the database: {e}") + print(f"Database connection failed: {e}") + self.conn = None + self.cursor = None raise def insert_schedule(self, timetable, chromosome_name): + """Inserts the given schedule into the database.""" + if not self.conn or not self.cursor: + self.connect_to_database() + try: for day, sections in timetable.items(): for section, classes in sections.items(): for cls in classes: - - print(f"Inserting data: {chromosome_name}, {day}, {section}, {cls['teacher_id']}, {cls['subject_id']}, {cls['classroom_id']}, {cls['time_slot']}") - self.cursor.execute(""" + self.cursor.execute( + """ INSERT INTO schedule (chromosome, day, section, teacher_id, subject_id, classroom_id, time_slot) VALUES (%s, %s, %s, %s, %s, %s, %s); - """, (chromosome_name, day, section, cls['teacher_id'], cls['subject_id'], cls['classroom_id'], cls['time_slot'])) - self.conn.commit() - print(f"Schedule data for {chromosome_name} inserted successfully.") + """, + ( + chromosome_name, + day, + section, + cls["teacher_id"], + cls["subject_id"], + cls["classroom_id"], + cls["time_slot"], + ), + ) + self.conn.commit() except Exception as e: - self.conn.rollback() - print(f"Error inserting schedule data: {e}") + self.conn.rollback() + print(f"Error inserting schedule: {e}") + raise def detect_teacher_conflicts(self): - self.cursor.execute(""" - SELECT s1.teacher_id, s1.day, s1.time_slot, COUNT(*) - FROM schedule s1 - JOIN schedule s2 - ON s1.teacher_id = s2.teacher_id - AND s1.time_slot = s2.time_slot - AND s1.day = s2.day - AND s1.chromosome != s2.chromosome - GROUP BY s1.teacher_id, s1.day, s1.time_slot - HAVING COUNT(*) > 1; - """) - return self.cursor.fetchall() + """Detects scheduling conflicts for teachers.""" + if not self.conn or not self.cursor: + self.connect_to_database() + + try: + self.cursor.execute( + """ + SELECT s1.teacher_id, s1.day, s1.time_slot + FROM schedule s1 + JOIN schedule s2 + ON s1.teacher_id = s2.teacher_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.teacher_id, s1.day, s1.time_slot; + """ + ) + return self.cursor.fetchall() + except Exception as e: + print(f"Error detecting teacher conflicts: {e}") + raise def detect_classroom_conflicts(self): - self.cursor.execute(""" - SELECT s1.classroom_id, s1.day, s1.time_slot, COUNT(*) - FROM schedule s1 - JOIN schedule s2 - ON s1.classroom_id = s2.classroom_id - AND s1.time_slot = s2.time_slot - AND s1.day = s2.day - AND s1.chromosome != s2.chromosome - GROUP BY s1.classroom_id, s1.day, s1.time_slot - HAVING COUNT(*) > 1; - """) - return self.cursor.fetchall() + """Detects scheduling conflicts for classrooms.""" + if not self.conn or not self.cursor: + self.connect_to_database() + + try: + self.cursor.execute( + """ + SELECT s1.classroom_id, s1.day, s1.time_slot + FROM schedule s1 + JOIN schedule s2 + ON s1.classroom_id = s2.classroom_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.classroom_id, s1.day, s1.time_slot; + """ + ) + return self.cursor.fetchall() + except Exception as e: + print(f"Error detecting classroom conflicts: {e}") + raise def truncate_schedule(self): - self.cursor.execute("TRUNCATE TABLE schedule;") - self.conn.commit() - print("Schedule table truncated.") + """Clears the schedule table.""" + if not self.conn or not self.cursor: + self.connect_to_database() + + try: + self.cursor.execute("TRUNCATE TABLE schedule;") + self.conn.commit() + except Exception as e: + print(f"Error truncating schedule table: {e}") + raise def close_connection(self): + """Closes the database connection.""" if self.cursor: self.cursor.close() if self.conn: self.conn.close() - print("\nDatabase connection closed.") + print("Database connection closed.") def process_schedules(self, timetable1, timetable2): + """Processes schedules and detects conflicts.""" + print("Processing schedules...") try: self.connect_to_database() - # Insert Chromosome data for both timetables + # Insert schedules self.insert_schedule(timetable1, "Week 1") self.insert_schedule(timetable2, "Week 2") - # Check for Teacher Conflicts + # Detect conflicts teacher_conflicts = self.detect_teacher_conflicts() - - # Check for Classroom Conflicts classroom_conflicts = self.detect_classroom_conflicts() - # Return both conflicts as a dictionary - return { - "teacher_conflicts": teacher_conflicts, - "classroom_conflicts": classroom_conflicts - } + conflicts = [] + + for conflict in teacher_conflicts: + conflicts.append( + { + "type": "Teacher Conflict", + "teacher": conflict[0], + "day": conflict[1], + "time_slot": conflict[2], + } + ) + + for conflict in classroom_conflicts: + conflicts.append( + { + "type": "Classroom Conflict", + "classroom": conflict[0], + "day": conflict[1], + "time_slot": conflict[2], + } + ) + + return conflicts if conflicts else [{"message": "No conflicts found."}] + + except Exception as e: + print(f"Error in process_schedules: {e}") + return [{"error": str(e)}] finally: - # Cleanup and close database connection - self.truncate_schedule() - self.close_connection() + if self.conn and self.cursor: + self.truncate_schedule() + self.close_connection() if __name__ == "__main__": timetable_processor = IsConflict() - sample_chromosome_1 = SampleChromosome() - sample_chromosome_2 = SampleChromosome() - chromosome1 = sample_chromosome_1.schedule1 - chromosome2 = sample_chromosome_2.schedule2 - conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) - print("\nTeacher Conflicts:") - for conflict in conflicts["teacher_conflicts"]: - print(f"Teacher ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}") - - print("\nClassroom Conflicts:") - for conflict in conflicts["classroom_conflicts"]: - print(f"Classroom ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}") + + # Sample timetable instances + try: + sample_chromosome_1 = SampleChromosome() + sample_chromosome_2 = SampleChromosome() + + chromosome1 = sample_chromosome_1.schedule1 + chromosome2 = sample_chromosome_2.schedule2 + + conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) + + print(conflicts) + except Exception as e: + print(f"Error in main execution: {e}") diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index 417b905..a45b921 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -2,7 +2,7 @@ from collections import defaultdict from typing import List, Dict from Constants.constant import SectionsConstants, Defaults -from Samples.Adhocs.common import generate_students +# from Samples.Adhocs.common import generate_students class StudentScorer: @@ -144,8 +144,8 @@ def entry_point_for_section_divide(self): -if __name__ == "__main__": +# if __name__ == "__main__": - scorer = StudentScorer(generate_students(num_students=500)) - from icecream import ic - ic(scorer.entry_point_for_section_divide()) +# scorer = StudentScorer(generate_students(num_students=500)) +# from icecream import ic +# ic(scorer.entry_point_for_section_divide()) From 0b397b1a36f2db195979e1f3cc836f1d4f08bd44 Mon Sep 17 00:00:00 2001 From: Vibha Date: Wed, 5 Feb 2025 16:11:35 +0530 Subject: [PATCH 17/67] Updated is_conflict --- Constants/is_conflict.py | 154 +++++++++++------------------------ Constants/is_conflict_new.py | 154 +++++++++++++++++++++++++++++++++++ setup.py | 2 +- 3 files changed, 203 insertions(+), 107 deletions(-) create mode 100644 Constants/is_conflict_new.py diff --git a/Constants/is_conflict.py b/Constants/is_conflict.py index 77ce088..5823924 100644 --- a/Constants/is_conflict.py +++ b/Constants/is_conflict.py @@ -20,7 +20,6 @@ def __init__( self.cursor = None def connect_to_database(self): - """Establishes a connection to the database.""" try: self.conn = psycopg2.connect( dbname=self.dbname, @@ -30,48 +29,34 @@ def connect_to_database(self): port=self.port, ) self.cursor = self.conn.cursor() - print("Database connection successful") except Exception as e: - print(f"Database connection failed: {e}") - self.conn = None - self.cursor = None + print(f"Error connecting to database: {e}") raise def insert_schedule(self, timetable, chromosome_name): - """Inserts the given schedule into the database.""" - if not self.conn or not self.cursor: - self.connect_to_database() - try: - for day, sections in timetable.items(): - for section, classes in sections.items(): - for cls in classes: - self.cursor.execute( - """ - INSERT INTO schedule (chromosome, day, section, teacher_id, subject_id, classroom_id, time_slot) - VALUES (%s, %s, %s, %s, %s, %s, %s); - """, - ( - chromosome_name, - day, - section, - cls["teacher_id"], - cls["subject_id"], - cls["classroom_id"], - cls["time_slot"], - ), - ) + for day, classes in timetable.items(): + for cls in classes: + self.cursor.execute( + """ + INSERT INTO schedule (chromosome, day, teacher_id, subject_id, classroom_id, time_slot) + VALUES (%s, %s, %s, %s, %s, %s); + """, + ( + chromosome_name, + day, + cls["teacher_id"], + cls["subject_id"], + "N/A", + cls["time_slot"], + ), + ) # "N/A" for classroom_id self.conn.commit() except Exception as e: - self.conn.rollback() print(f"Error inserting schedule: {e}") - raise + self.conn.rollback() def detect_teacher_conflicts(self): - """Detects scheduling conflicts for teachers.""" - if not self.conn or not self.cursor: - self.connect_to_database() - try: self.cursor.execute( """ @@ -81,74 +66,50 @@ def detect_teacher_conflicts(self): ON s1.teacher_id = s2.teacher_id AND s1.time_slot = s2.time_slot AND s1.day = s2.day - AND s1.chromosome != s2.chromosome - GROUP BY s1.teacher_id, s1.day, s1.time_slot; + AND ( + s1.chromosome != s2.chromosome -- Conflict across chromosomes + OR s1.chromosome = s2.chromosome -- Conflict within the same chromosome + ) + GROUP BY s1.teacher_id, s1.day, s1.time_slot + HAVING COUNT(s1.teacher_id) > 1; -- More than one class for the same teacher at the same time """ ) return self.cursor.fetchall() except Exception as e: print(f"Error detecting teacher conflicts: {e}") - raise - - def detect_classroom_conflicts(self): - """Detects scheduling conflicts for classrooms.""" - if not self.conn or not self.cursor: - self.connect_to_database() - - try: - self.cursor.execute( - """ - SELECT s1.classroom_id, s1.day, s1.time_slot - FROM schedule s1 - JOIN schedule s2 - ON s1.classroom_id = s2.classroom_id - AND s1.time_slot = s2.time_slot - AND s1.day = s2.day - AND s1.chromosome != s2.chromosome - GROUP BY s1.classroom_id, s1.day, s1.time_slot; - """ - ) - return self.cursor.fetchall() - except Exception as e: - print(f"Error detecting classroom conflicts: {e}") - raise + return [] def truncate_schedule(self): - """Clears the schedule table.""" - if not self.conn or not self.cursor: - self.connect_to_database() - try: self.cursor.execute("TRUNCATE TABLE schedule;") self.conn.commit() except Exception as e: - print(f"Error truncating schedule table: {e}") - raise + print(f"Error truncating schedule: {e}") + self.conn.rollback() def close_connection(self): - """Closes the database connection.""" - if self.cursor: - self.cursor.close() - if self.conn: - self.conn.close() - print("Database connection closed.") + try: + if self.cursor: + self.cursor.close() + if self.conn: + self.conn.close() + except Exception as e: + print(f"Error closing connection: {e}") def process_schedules(self, timetable1, timetable2): - """Processes schedules and detects conflicts.""" - print("Processing schedules...") try: self.connect_to_database() - # Insert schedules + # Insert both timetables into the database with proper chromosomes self.insert_schedule(timetable1, "Week 1") self.insert_schedule(timetable2, "Week 2") - # Detect conflicts + # Detect teacher conflicts teacher_conflicts = self.detect_teacher_conflicts() - classroom_conflicts = self.detect_classroom_conflicts() conflicts = [] + # Add teacher conflicts to the list for conflict in teacher_conflicts: conflicts.append( { @@ -159,41 +120,22 @@ def process_schedules(self, timetable1, timetable2): } ) - for conflict in classroom_conflicts: - conflicts.append( - { - "type": "Classroom Conflict", - "classroom": conflict[0], - "day": conflict[1], - "time_slot": conflict[2], - } - ) - return conflicts if conflicts else [{"message": "No conflicts found."}] - - except Exception as e: - print(f"Error in process_schedules: {e}") - return [{"error": str(e)}] - finally: - if self.conn and self.cursor: - self.truncate_schedule() - self.close_connection() + self.truncate_schedule() + self.close_connection() if __name__ == "__main__": timetable_processor = IsConflict() + sample_chromosome_1 = SampleChromosome() + sample_chromosome_2 = SampleChromosome() + chromosome1 = sample_chromosome_1.schedule1 + chromosome2 = sample_chromosome_2.schedule2 - # Sample timetable instances - try: - sample_chromosome_1 = SampleChromosome() - sample_chromosome_2 = SampleChromosome() - - chromosome1 = sample_chromosome_1.schedule1 - chromosome2 = sample_chromosome_2.schedule2 - - conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) + # Process the timetables and check for conflicts + conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) - print(conflicts) - except Exception as e: - print(f"Error in main execution: {e}") + # Print the detected conflicts (if any) + print("Conflicts detected:") + print(conflicts) diff --git a/Constants/is_conflict_new.py b/Constants/is_conflict_new.py new file mode 100644 index 0000000..c964f12 --- /dev/null +++ b/Constants/is_conflict_new.py @@ -0,0 +1,154 @@ +import psycopg2 +from Samples.samples import SampleChromosome + + +class IsConflict: + def __init__( + self, + dbname="timetable", + user="postgres", + password="root", + host="localhost", + port="5432", + ): + self.dbname = dbname + self.user = user + self.password = password + self.host = host + self.port = port + self.conn = None + self.cursor = None + + def connect_to_database(self): + try: + self.conn = psycopg2.connect( + dbname=self.dbname, + user=self.user, + password=self.password, + host=self.host, + port=self.port, + ) + self.cursor = self.conn.cursor() + print("Connected to PostgreSQL database!") + except Exception as e: + print(f"Error connecting to the database: {e}") + raise + + def insert_schedule(self, timetable, chromosome_name): + try: + for day, sections in timetable.items(): + for section, classes in sections.items(): + for cls in classes: + + print( + f"Inserting data: {chromosome_name}, {day}, {section}, {cls['teacher_id']}, {cls['subject_id']}, {cls['classroom_id']}, {cls['time_slot']}" + ) + self.cursor.execute( + """ + INSERT INTO schedule (chromosome, day, section, teacher_id, subject_id, classroom_id, time_slot) + VALUES (%s, %s, %s, %s, %s, %s, %s); + """, + ( + chromosome_name, + day, + section, + cls["teacher_id"], + cls["subject_id"], + cls["classroom_id"], + cls["time_slot"], + ), + ) + self.conn.commit() + print(f"Schedule data for {chromosome_name} inserted successfully.") + except Exception as e: + self.conn.rollback() + print(f"Error inserting schedule data: {e}") + + def detect_teacher_conflicts(self): + self.cursor.execute( + """ + SELECT s1.teacher_id, s1.day, s1.time_slot, COUNT(*) + FROM schedule s1 + JOIN schedule s2 + ON s1.teacher_id = s2.teacher_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.teacher_id, s1.day, s1.time_slot + HAVING COUNT(*) > 1; + """ + ) + return self.cursor.fetchall() + + def detect_classroom_conflicts(self): + self.cursor.execute( + """ + SELECT s1.classroom_id, s1.day, s1.time_slot, COUNT(*) + FROM schedule s1 + JOIN schedule s2 + ON s1.classroom_id = s2.classroom_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.classroom_id, s1.day, s1.time_slot + HAVING COUNT(*) > 1; + """ + ) + return self.cursor.fetchall() + + def truncate_schedule(self): + self.cursor.execute("TRUNCATE TABLE schedule;") + self.conn.commit() + print("Schedule table truncated.") + + def close_connection(self): + if self.cursor: + self.cursor.close() + if self.conn: + self.conn.close() + print("\nDatabase connection closed.") + + def process_schedules(self, timetable1, timetable2): + try: + self.connect_to_database() + + # Insert Chromosome data for both timetables + self.insert_schedule(timetable1, "Week 1") + self.insert_schedule(timetable2, "Week 2") + + # Check for Teacher Conflicts + teacher_conflicts = self.detect_teacher_conflicts() + + # Check for Classroom Conflicts + classroom_conflicts = self.detect_classroom_conflicts() + + # Return both conflicts as a dictionary + return { + "teacher_conflicts": teacher_conflicts, + "classroom_conflicts": classroom_conflicts, + } + + finally: + # Cleanup and close database connection + self.truncate_schedule() + self.close_connection() + + +if __name__ == "__main__": + timetable_processor = IsConflict() + sample_chromosome_1 = SampleChromosome() + sample_chromosome_2 = SampleChromosome() + chromosome1 = sample_chromosome_1.schedule1 + chromosome2 = sample_chromosome_2.schedule2 + conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) + print("\nTeacher Conflicts:") + for conflict in conflicts["teacher_conflicts"]: + print( + f"Teacher ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}" + ) + + print("\nClassroom Conflicts:") + for conflict in conflicts["classroom_conflicts"]: + print( + f"Classroom ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}" + ) diff --git a/setup.py b/setup.py index bada970..072643f 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ packages=find_packages(include=["GA", "Samples", "Constants"]), version="v0.1.0", description="This Library generates timetable and is a plug and play solution for any python based backend service.", - long_description=open("README.md").read(), + long_description=open("README.md", encoding="utf-8").read(), authors=["Graphic Era Hill University, Bhimtal"], license="MIT", install_requires=[ From caedb7dc9540dacd8589d58858cc8883914e6b68 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Wed, 5 Feb 2025 22:35:00 +0530 Subject: [PATCH 18/67] Setup for Library fixup --- GA/chromosome.py | 259 +++++++++++++++++++++------------------------ GA/fitness.py | 2 + Samples/samples.py | 31 ++++++ __init__.py | 20 ++-- 4 files changed, 162 insertions(+), 150 deletions(-) diff --git a/GA/chromosome.py b/GA/chromosome.py index 74c86b4..40f3c0e 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -17,9 +17,12 @@ def __init__( teacher_preferences: dict, teacher_weekly_workload: dict, special_subjects: dict, + labs: dict, subject_quota_limits: dict, labs_list: list, teacher_duty_days: dict, + teacher_availability_matrix=None, + teacher_department_mapping=dict ): self.sections_manager = Sections(total_sections) self.classrooms_manager = Classrooms(total_classrooms, total_labs) @@ -29,19 +32,18 @@ def __init__( self.weekdays = Defaults.working_days self.subject_teacher_mapping = teacher_subject_mapping self.subject_quota_limits = subject_quota_limits - self.lab_subject_list = labs_list + self.lab_subject_list = labs self.special_subject_list = special_subjects self.teacher_availability_preferences = teacher_preferences self.available_time_slots = TimeIntervalConstant.time_slots self.teacher_duty_days = teacher_duty_days self.weekly_workload = teacher_weekly_workload - - self.teacher_assignment_tracker = {teacher: 0 for teacher in teacher_weekly_workload.keys()} + self.teacher_assignment_tracker = {t: 0 for t in teacher_weekly_workload} + self.teacher_availability_matrix = teacher_availability_matrix self._map_sections_to_classrooms() self._teacher_section() def _map_sections_to_classrooms(self): - """Map sections to classrooms based on capacity.""" sorted_classrooms = sorted( self.classrooms_manager.classrooms, key=lambda c: self.room_capacity_manager.room_capacity[c], @@ -52,172 +54,147 @@ def _map_sections_to_classrooms(self): key=lambda s: self.room_capacity_manager.section_strength[s], reverse=True, ) - self.section_to_classroom_map = {} for section in sorted_sections: for classroom in sorted_classrooms: - if self.room_capacity_manager.room_capacity[classroom] >= self.room_capacity_manager.section_strength[section]: + if ( + self.room_capacity_manager.room_capacity[classroom] + >= self.room_capacity_manager.section_strength[section] + ): self.section_to_classroom_map[section] = classroom sorted_classrooms.remove(classroom) break - else: - raise ValueError( - f"No classroom can accommodate section {section} with strength {self.room_capacity_manager.section_strength[section]}." - ) def _teacher_section(self): - """Map sections to teachers and subjects, ensuring balanced assignments.""" self.teacher_section_map = { - section: {subject: None for subject in self.subject_teacher_mapping.keys()} - for section in self.sections_manager.sections + s: {sub: None for sub in self.subject_teacher_mapping} for s in self.sections_manager.sections } - - for section in self.sections_manager.sections: - for subject, teachers in self.subject_teacher_mapping.items(): - # Select teacher with the least workload - teachers_with_least_load = sorted( - teachers, key=lambda teacher: self.teacher_assignment_tracker[teacher] - ) - selected_teacher = teachers_with_least_load[0] - self.teacher_section_map[section][subject] = selected_teacher - self.teacher_assignment_tracker[selected_teacher] += 1 + for s in self.sections_manager.sections: + for sub, t_list in self.subject_teacher_mapping.items(): + t_list_sorted = sorted(t_list, key=lambda t: self.teacher_assignment_tracker[t]) + chosen = t_list_sorted[0] + self.teacher_section_map[s][sub] = chosen + self.teacher_assignment_tracker[chosen] += 1 def _initialize_teacher_workload_tracker(self): - """Initialize a tracker for teacher workloads.""" - return {teacher: 0 for teacher in self.weekly_workload.keys()} - - def _generate_section_schedule( - self, section, half_day_section_list, section_subject_usage_tracker, teacher_workload_tracker - ): - """Generate a schedule for an individual section.""" - section_schedule = [] - subjects_scheduled_today = set() - assigned_classroom = self.section_to_classroom_map[section] - total_slots_for_section = 4 if section in half_day_section_list else 7 + return {t: 0 for t in self.weekly_workload} - for slot_index, current_time_slot in enumerate(self.available_time_slots.values(), start=1): - if slot_index > total_slots_for_section: - break - - assigned_teacher, selected_subject, assigned_room = self._assign_subject_and_teacher( - section, - slot_index, - subjects_scheduled_today, - assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, - ) - section_schedule.append( - { - "teacher_id": assigned_teacher, - "subject_id": selected_subject, - "classroom_id": assigned_room, - "time_slot": current_time_slot, - } - ) - if selected_subject != "Library": - section_subject_usage_tracker[section][selected_subject] += 1 - - # Handle double-slot subjects - if selected_subject in self.lab_subject_list and slot_index + 1 <= total_slots_for_section: - next_time_slot = self.available_time_slots.get(slot_index + 1) - section_schedule.append( - { - "teacher_id": assigned_teacher, - "subject_id": selected_subject, - "classroom_id": assigned_room, - "time_slot": next_time_slot, - } - ) - section_subject_usage_tracker[section][selected_subject] += 1 - return section_schedule + def _get_available_subjects(self, section, usage): + return [ + sub for sub in self.subject_teacher_mapping + if usage[section][sub] < self.subject_quota_limits.get(sub, 0) + ] def _assign_subject_and_teacher( self, section, slot_index, - subjects_scheduled_today, + used_today, assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, + usage, + teacher_load, + availability_matrix, + day_index, + total_slots ): - """Assign a subject and teacher for a specific slot.""" - available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) - random.shuffle(available_subjects) - - assigned_teacher = None - selected_subject = None - assigned_room = None - - for subject in available_subjects: - if subject in self.lab_subject_list and slot_index not in [1, 3, 5]: + subs = self._get_available_subjects(section, usage) + random.shuffle(subs) + teacher, chosen_sub, room = None, None, None + for sub in subs: + if sub in self.lab_subject_list and slot_index not in [1, 3, 5]: continue - if subject in self.special_subject_list and slot_index not in [5]: + if sub in self.special_subject_list and slot_index not in [5]: continue - - if subject not in subjects_scheduled_today: - teachers_for_subject = self.subject_teacher_mapping[subject] - teachers_with_least_load = sorted( - teachers_for_subject, key=lambda teacher: teacher_workload_tracker[teacher] - ) - assigned_teacher = teachers_with_least_load[0] - teacher_workload_tracker[assigned_teacher] += 1 - selected_subject = subject - subjects_scheduled_today.add(subject) - assigned_room = ( - self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] - if subject in self.lab_subject_list - else assigned_classroom - ) + if sub not in used_today: + t_list = self.subject_teacher_mapping[sub] + preferred = [tt for tt in t_list if self.teacher_availability_preferences.get(tt, [])] + preferred_sorted = sorted(preferred, key=lambda x: teacher_load[x]) + for t in preferred_sorted: + if ( + t in availability_matrix + and len(availability_matrix[t]) > day_index + and len(availability_matrix[t][day_index]) > (slot_index - 1) + and availability_matrix[t][day_index][slot_index - 1] + ): + teacher = t + teacher_load[teacher] += 1 + chosen_sub = sub + used_today.add(sub) + room = ( + self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] + if sub in self.lab_subject_list + else assigned_classroom + ) + break + if teacher: break + if not teacher: + chosen_sub, teacher, room = "Library", "None", assigned_classroom + return teacher, chosen_sub, room - if not assigned_teacher: - selected_subject = "Library" - assigned_teacher = "None" - assigned_room = assigned_classroom - - return assigned_teacher, selected_subject, assigned_room - - def _get_available_subjects(self, section, section_subject_usage_tracker): - """Get a list of subjects available for a specific section.""" - return [ - subject - for subject in self.subject_teacher_mapping.keys() - if section_subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) - ] - - def generate_daily_schedule(self, half_day_section_list, section_subject_usage_tracker): - """Generate the daily schedule for all sections.""" - daily_schedule = {} - teacher_workload_tracker = self._initialize_teacher_workload_tracker() - - for section in self.sections_manager.sections: - section_schedule = self._generate_section_schedule( - section, half_day_section_list, section_subject_usage_tracker, teacher_workload_tracker + def _generate_section_schedule( + self, section, half_day_sections, usage, teacher_load, availability_matrix, day_index + ): + schedule = [] + used_subs = set() + assigned_classroom = self.section_to_classroom_map[section] + total_slots = 4 if section in half_day_sections else 7 + slot_idx = 1 + while slot_idx <= total_slots: + time_slot = self.available_time_slots[slot_idx] + a_teacher, a_sub, a_room = self._assign_subject_and_teacher( + section, slot_idx, used_subs, assigned_classroom, usage, + teacher_load, availability_matrix, day_index, total_slots ) - daily_schedule[section] = section_schedule - - return daily_schedule, section_subject_usage_tracker + schedule.append({ + "teacher_id": a_teacher, + "subject_id": a_sub, + "classroom_id": a_room, + "time_slot": time_slot + }) + if a_sub != "Library": + usage[section][a_sub] += 1 + if a_sub in self.lab_subject_list or a_sub in self.special_subject_list: + nxt = slot_idx + 1 + if nxt <= total_slots: + next_time = self.available_time_slots[nxt] + schedule.append({ + "teacher_id": a_teacher, + "subject_id": a_sub, + "classroom_id": a_room, + "time_slot": next_time + }) + usage[section][a_sub] += 1 + slot_idx += 1 + slot_idx += 1 + return schedule, availability_matrix + + def generate_daily_schedule(self, half_day_sections, usage, day_index): + daily = {} + teacher_load = self._initialize_teacher_workload_tracker() + for s in self.sections_manager.sections: + sec_sched, self.teacher_availability_matrix = self._generate_section_schedule( + s, half_day_sections, usage, teacher_load, self.teacher_availability_matrix, day_index + ) + daily[s] = sec_sched + return daily, usage, self.teacher_availability_matrix def _generate_weekly_schedule(self): - """Generate a schedule for a single week.""" - week_schedule = {} - section_subject_usage_tracker = { - section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} - for section in self.sections_manager.sections + week_data = {} + usage_tracker = { + s: {sub: 0 for sub in self.subject_teacher_mapping} for s in self.sections_manager.sections } - for week_day in self.weekdays: - half_day_sections = self.sections_manager.sections[: len(self.sections_manager.sections) // 2] - daily_schedule, section_subject_usage_tracker = self.generate_daily_schedule( - half_day_sections, section_subject_usage_tracker + for i, w_day in enumerate(self.weekdays): + half_day = self.sections_manager.sections[: len(self.sections_manager.sections)//2] + d, usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( + half_day, usage_tracker, i ) - week_schedule[week_day] = daily_schedule - return week_schedule, section_subject_usage_tracker + week_data[w_day] = d + return week_data, usage_tracker, self.teacher_availability_matrix def create_timetable(self, num_weeks): - """Create the timetable for the given number of weeks.""" timetable = {} - for week in range(1, num_weeks + 1): - week_schedule, section_subject_usage_tracker = self._generate_weekly_schedule() - timetable[f"Week {week}"] = week_schedule - return timetable + for w in range(1, num_weeks + 1): + ws, u_tracker, self.teacher_availability_matrix = self._generate_weekly_schedule() + timetable[f"Week {w}"] = ws + return timetable, self.teacher_availability_matrix \ No newline at end of file diff --git a/GA/fitness.py b/GA/fitness.py index 7dcdb65..404f3f2 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -38,6 +38,8 @@ def evaluate_timetable_fitness(self): daily_section_fitness_scores = {} weekly_fitness_scores = {} teacher_workload_tracking = {} + from icecream import ic + ic(self.timetable) for week, week_schedule in self.timetable.items(): weekly_fitness = 0 daily_section_fitness_scores[week] = {} diff --git a/Samples/samples.py b/Samples/samples.py index f4c1b39..8cf67f5 100644 --- a/Samples/samples.py +++ b/Samples/samples.py @@ -156,6 +156,37 @@ class TeacherWorkload: "VD25": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], "AK26": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], } + +class InterDepartment: + teacher_availability_matrix = { + "AB01": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "PK02": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "SS03": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AA04": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AC05": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "SP06": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "DP07": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AD08": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "RD09": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "BJ10": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "RS11": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "JM12": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "NJ13": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "PM14": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AA15": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "SJ16": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AB17": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "HP18": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "SG19": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "DT20": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "PA21": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "NB22": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AK23": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AP24": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "VD25": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "AK26": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + } + class SampleChromosome: schedule1={ "Monday": { diff --git a/__init__.py b/__init__.py index 90a99a7..20d0104 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,5 @@ # This is the Orchestrator file, which will govern the flow. +import json from Constants.constant import Defaults from GA.mutation import TimeTableMutation, TimeTableCrossOver @@ -11,7 +12,7 @@ SpecialSubjects, SubjectWeeklyQuota, Classrooms, - Sections, + Sections, InterDepartment, ) @@ -29,9 +30,11 @@ def timetable_generation(): subject_quota_limits=SubjectWeeklyQuota.subject_quota, labs_list=Classrooms.labs, teacher_duty_days=TeacherWorkload.teacher_duty_days, + labs=SpecialSubjects.Labs, + teacher_availability_matrix=InterDepartment.teacher_availability_matrix, ) - timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) + timetable, teacher_avail_matrix = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) from icecream import ic ic(timetable) # Fitness of each Chromosome @@ -54,7 +57,6 @@ def timetable_generation(): # Selection of all Chromosomes selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - ic(len(selected_chromosomes)) # Crossover for all selected Chromosomes crossover_object = TimeTableCrossOver() @@ -81,11 +83,6 @@ def timetable_generation(): for chromosome in crossover_chromosomes ] - - ic(mutated_chromosomes) - ic(selected_chromosomes) - - ic(selected_chromosomes) # Store best of Chromosomes best_chromosome_score = -1 best_chromosome = dict() @@ -95,10 +92,15 @@ def timetable_generation(): best_chromosome_score = int(week_score) best_chromosome = timetable[week_no] - ic(f"Best Chromosome: {best_chromosome}") + return best_chromosome def run_timetable_generation(): + best_chromosome = dict() for generation in range(Defaults.total_no_of_generations): best_chromosome = timetable_generation() return best_chromosome + + +json_data = json.dumps(run_timetable_generation(), indent=4) +print(json_data) From eab809adcdc1e14962197183e9b3e750a7dc1140 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Wed, 5 Feb 2025 23:01:01 +0530 Subject: [PATCH 19/67] fixup! Setup for Library fixup --- GA/__init__.py | 12 ++++++------ GA/chromosome.py | 2 ++ GA/fitness.py | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index 168955f..5b3d3dc 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -33,7 +33,7 @@ def timetable_generation(): timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) from icecream import ic - ic(timetable) + # ic(timetable) # Fitness of each Chromosome fitness_calculator = TimetableFitnessEvaluator( timetable, @@ -54,7 +54,7 @@ def timetable_generation(): # Selection of all Chromosomes selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - ic(len(selected_chromosomes)) + # ic(len(selected_chromosomes)) # Crossover for all selected Chromosomes crossover_object = TimeTableCrossOver() @@ -82,10 +82,10 @@ def timetable_generation(): ] - ic(mutated_chromosomes) - ic(selected_chromosomes) - - ic(selected_chromosomes) + # ic(mutated_chromosomes) + # ic(selected_chromosomes) + # + # ic(selected_chromosomes) # Store best of Chromosomes best_chromosome_score = -1 best_chromosome = dict() diff --git a/GA/chromosome.py b/GA/chromosome.py index 40f3c0e..3c2c8d1 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -164,6 +164,7 @@ def _generate_section_schedule( "classroom_id": a_room, "time_slot": next_time }) + availability_matrix[a_teacher][day_index][nxt - 1] = False usage[section][a_sub] += 1 slot_idx += 1 slot_idx += 1 @@ -197,4 +198,5 @@ def create_timetable(self, num_weeks): for w in range(1, num_weeks + 1): ws, u_tracker, self.teacher_availability_matrix = self._generate_weekly_schedule() timetable[f"Week {w}"] = ws + print(self.teacher_availability_matrix) return timetable, self.teacher_availability_matrix \ No newline at end of file diff --git a/GA/fitness.py b/GA/fitness.py index 404f3f2..521905c 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -39,7 +39,7 @@ def evaluate_timetable_fitness(self): weekly_fitness_scores = {} teacher_workload_tracking = {} from icecream import ic - ic(self.timetable) + # ic(self.timetable) for week, week_schedule in self.timetable.items(): weekly_fitness = 0 daily_section_fitness_scores[week] = {} From b5676fac34ac7eeadbeb799720f5a1a837cd94fd Mon Sep 17 00:00:00 2001 From: Vibha Date: Sat, 8 Feb 2025 19:22:30 +0530 Subject: [PATCH 20/67] Updated detectConflicts structure --- Constants/is_conflict.py | 8 +--- Constants/time_intervals.py | 92 +++++++++++++++++++++++++++---------- 2 files changed, 70 insertions(+), 30 deletions(-) diff --git a/Constants/is_conflict.py b/Constants/is_conflict.py index 5823924..4586c9a 100644 --- a/Constants/is_conflict.py +++ b/Constants/is_conflict.py @@ -50,7 +50,7 @@ def insert_schedule(self, timetable, chromosome_name): "N/A", cls["time_slot"], ), - ) # "N/A" for classroom_id + ) self.conn.commit() except Exception as e: print(f"Error inserting schedule: {e}") @@ -100,16 +100,12 @@ def process_schedules(self, timetable1, timetable2): try: self.connect_to_database() - # Insert both timetables into the database with proper chromosomes self.insert_schedule(timetable1, "Week 1") self.insert_schedule(timetable2, "Week 2") - # Detect teacher conflicts teacher_conflicts = self.detect_teacher_conflicts() - conflicts = [] - # Add teacher conflicts to the list for conflict in teacher_conflicts: conflicts.append( { @@ -120,7 +116,7 @@ def process_schedules(self, timetable1, timetable2): } ) - return conflicts if conflicts else [{"message": "No conflicts found."}] + return conflicts finally: self.truncate_schedule() self.close_connection() diff --git a/Constants/time_intervals.py b/Constants/time_intervals.py index 1a6de92..ffe9dad 100644 --- a/Constants/time_intervals.py +++ b/Constants/time_intervals.py @@ -1,26 +1,45 @@ -from datetime import datetime +from datetime import datetime, timedelta class TimeIntervalConstant: - time_slots = { - 1: "9:00 - 9:55", - 2: "9:55 - 10:50", - 3: "11:10 - 12:05", - 4: "12:05 - 1:00", - 5: "1:20 - 2:15", - 6: "2:15 - 3:10", - 7: "3:30 - 4:25", - } - - time_mapping = { - "9:00 - 9:55": 1, - "9:55 - 10:50": 2, - "11:10 - 12:05": 3, - "12:05 - 1:00": 4, - "1:20 - 2:15": 5, - "2:15 - 3:10": 6, - "3:30 - 4:25": 7, - } + + time_slots = {} + time_mapping = {} + + @staticmethod + def generate_dynamic_schedule( + start_time, + period_duration=55, + total_periods=7, + break_after_periods=None, + lunch_after_period=4, + break_duration=10, + lunch_duration=30, + ): + if break_after_periods is None: + break_after_periods = set() + TimeIntervalConstant.time_slots.clear() + TimeIntervalConstant.time_mapping.clear() + + start_time = datetime.strptime(start_time, "%H:%M") + + current_time = start_time + period_counter = 1 + + while period_counter <= total_periods: + end_time = current_time + timedelta(minutes=period_duration) + time_slot = ( + f"{current_time.strftime('%H:%M')} - {end_time.strftime('%H:%M')}" + ) + TimeIntervalConstant.time_slots[period_counter] = time_slot + TimeIntervalConstant.time_mapping[time_slot] = period_counter + current_time = end_time + if period_counter in break_after_periods: + current_time += timedelta(minutes=break_duration) + if period_counter == lunch_after_period: + current_time += timedelta(minutes=lunch_duration) + + period_counter += 1 @staticmethod def get_slot(slot_number: int) -> str: @@ -41,8 +60,9 @@ def get_slot(slot_number: int) -> str: else: max_slot = len(TimeIntervalConstant.time_slots) - raise ValueError(f"Invalid slot number. Please provide a slot number between 1 and {max_slot + 1}.") - + raise ValueError( + f"Invalid slot number. Please provide a slot number between 1 and {max_slot + 1}." + ) @classmethod def get_slot_number(cls, start_time: str, end_time: str): @@ -63,8 +83,12 @@ def get_slot_number(cls, start_time: str, end_time: str): for slot, interval in cls.time_slots.items(): # Making string in this format: "3:30 - 4:25". - slot_start_time = datetime.strptime(interval.split(" - ")[0], "%H:%M").time() - slot_end_time = datetime.strptime(interval.split(" - ")[1], "%H:%M").time() + slot_start_time = datetime.strptime( + interval.split(" - ")[0], "%H:%M" + ).time() + slot_end_time = datetime.strptime( + interval.split(" - ")[1], "%H:%M" + ).time() if start_time == slot_start_time and end_time == slot_end_time: return slot @@ -82,3 +106,23 @@ def get_all_slot_numbers(): def get_all_time_slots(): """Retrieve all time intervals.""" return list(TimeIntervalConstant.time_slots.values()) + + +TimeIntervalConstant.generate_dynamic_schedule( + "8:00", # Start time (positional argument) + 60, # Period duration (positional argument) + 7, # Total periods (positional argument) + {2, 6}, # Break after periods (positional argument) + 4, # Lunch after period (positional argument) + 60, # Break duration (positional argument) + 50, # Lunch duration (positional argument) +) + +slot_numbers = TimeIntervalConstant.get_all_slot_numbers() + + +time_slots = TimeIntervalConstant.get_all_time_slots() + + +# print("Slot Numbers:", slot_numbers) +# print("Time Slots:", time_slots) From 89e446522edc8a9e850e4501863e51b5601f157a Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sun, 9 Feb 2025 00:34:46 +0530 Subject: [PATCH 21/67] Updates in teacher_avail_matrix. --- Constants/classroom_allocate.py | 2 +- Constants/constant.py | 2 +- Constants/is_conflict.py | 3 + Constants/section_allocation.py | 8 +- GA/__init__.py | 203 +++++++++++++-------- GA/chromosome.py | 262 +++++++++++++++------------ GA/fitness.py | 10 +- Samples/Fitness_Files/fitness.py | 9 +- Samples/Mutation_Files/mutation.py | 3 +- Samples/Mutation_Files/mutation2.py | 1 + Samples/Selection_Files/selection.py | 1 + __init__.py | 26 +-- 12 files changed, 310 insertions(+), 220 deletions(-) diff --git a/Constants/classroom_allocate.py b/Constants/classroom_allocate.py index 238c1d2..dce45df 100644 --- a/Constants/classroom_allocate.py +++ b/Constants/classroom_allocate.py @@ -1,5 +1,6 @@ from ortools.sat.python import cp_model + def assign_section_to_classes(x_section, y_classrooms, z_time_slots): # Create a CP-SAT model model = cp_model.CpModel() @@ -40,7 +41,6 @@ def assign_section_to_classes(x_section, y_classrooms, z_time_slots): from datetime import datetime - start_time = datetime.now() X = 80 # Number of section diff --git a/Constants/constant.py b/Constants/constant.py index 0bf8d3f..97c7c64 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -6,7 +6,7 @@ class Defaults: max_class_capacity = 250 initial_no_of_chromosomes = 10 total_no_of_generations = 10 - + class_strength = 50 class Sections: def __init__(self, section_number): diff --git a/Constants/is_conflict.py b/Constants/is_conflict.py index d13e692..bf80803 100644 --- a/Constants/is_conflict.py +++ b/Constants/is_conflict.py @@ -1,5 +1,8 @@ import psycopg2 + from Samples.samples import SampleChromosome + + class IsConflict: def __init__(self, dbname="timetable", user="postgres", password="root", host="localhost", port="5432"): self.dbname = dbname diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index 4c866a2..abe2671 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -1,7 +1,8 @@ import random from collections import defaultdict -from typing import List, Dict -from Constants.constant import SectionsConstants +from typing import Dict, List + +from Constants.constant import Defaults, SectionsConstants class StudentScorer: @@ -151,8 +152,7 @@ def generate_students(num_students: int = 500) -> List[Dict]: students_with_scores = scorer.assign_scores_to_students(students) # Divide students into sections - class_strength = 50 - sections = scorer.divide_students_into_sections(students_with_scores, class_strength) + sections = scorer.divide_students_into_sections(students_with_scores, Defaults.class_strength) # Display the sections for i, section in enumerate(sections, 1): diff --git a/GA/__init__.py b/GA/__init__.py index 5b3d3dc..d186210 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,40 +1,56 @@ # This is the Orchestrator file, which will govern the flow. from Constants.constant import Defaults -from GA.mutation import TimeTableMutation, TimeTableCrossOver -from GA.selection import TimeTableSelection -from GA.fitness import TimetableFitnessEvaluator from GA.chromosome import TimeTableGeneration -from Samples.samples import ( - SubjectTeacherMap, - TeacherWorkload, - SpecialSubjects, - SubjectWeeklyQuota, - Classrooms, - Sections, - -) - - -def timetable_generation(): - # Create Chromosomes +from GA.fitness import TimetableFitnessEvaluator +from GA.mutation import TimeTableCrossOver, TimeTableMutation +from GA.selection import TimeTableSelection +from Samples.samples import (InterDepartment, SpecialSubjects, + SubjectTeacherMap, SubjectWeeklyQuota, + TeacherWorkload) + + +def update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome): + + for teacher_id, schedule_data in best_chromosome.items(): + if teacher_id in teacher_availability_matrix: + teacher_availability_matrix[teacher_id] = schedule_data + return teacher_availability_matrix + + +def timetable_generation( + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + prev_selected_chromosomes=None, + prev_mutated_chromosomes=None +): timetable_generator = TimeTableGeneration( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=6, - total_classrooms=8, - total_labs=3, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - labs_list=Classrooms.labs, - teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + ) + + timetable, teacher_availability_matrix = timetable_generator.create_timetable( + Defaults.initial_no_of_chromosomes ) - timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) - from icecream import ic - # ic(timetable) - # Fitness of each Chromosome fitness_calculator = TimetableFitnessEvaluator( timetable, timetable_generator.sections_manager.sections, @@ -47,63 +63,100 @@ def timetable_generation(): timetable_generator.teacher_availability_preferences, timetable_generator.weekly_workload, ) - fitness_scores = fitness_calculator.evaluate_timetable_fitness() - - # Selection of all Chromosomes selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - # ic(len(selected_chromosomes)) - # Crossover for all selected Chromosomes + if prev_selected_chromosomes: + selected_chromosomes.update(prev_selected_chromosomes) + crossover_object = TimeTableCrossOver() crossover_chromosomes = [] - selected_chromosome_keys = list(selected_chromosomes.keys()) - - for i in range(0, len(selected_chromosome_keys), 2): - if i + 1 < len(selected_chromosome_keys): - parent1 = selected_chromosome_keys[i] - parent2 = selected_chromosome_keys[i + 1] - child1, child2 = crossover_object.perform_crossover( - timetable[parent1], - timetable[parent2] - ) - - crossover_chromosomes.append(child1) - crossover_chromosomes.append(child2) + selected_keys = list(selected_chromosomes.keys()) + for i in range(0, len(selected_keys), 2): + if i + 1 < len(selected_keys): + parent1 = selected_keys[i] + parent2 = selected_keys[i + 1] + c1, c2 = crossover_object.perform_crossover(timetable[parent1], timetable[parent2]) + crossover_chromosomes.append(c1) + crossover_chromosomes.append(c2) - # Mutate all crossover Chromosomes mutation_object = TimeTableMutation() - mutated_chromosomes = [ - mutation_object.mutate_schedule_for_week(chromosome) - for chromosome in crossover_chromosomes - ] + mutated_chromosomes = [mutation_object.mutate_schedule_for_week(ch) for ch in crossover_chromosomes] + if prev_mutated_chromosomes: + mutated_chromosomes.extend(prev_mutated_chromosomes) - - # ic(mutated_chromosomes) - # ic(selected_chromosomes) - # - # ic(selected_chromosomes) - # Store best of Chromosomes best_chromosome_score = -1 - best_chromosome = dict() - - for week_no, week_score in selected_chromosomes.items(): - if int(week_score) > best_chromosome_score: - best_chromosome_score = int(week_score) - best_chromosome = timetable[week_no] - - ic(f"Best Chromosome: {best_chromosome}") - return best_chromosome - - -def run_timetable_generation(): - for generation in range(Defaults.total_no_of_generations): - best_chromosome = timetable_generation() - return best_chromosome + best_chromosome = None + + for w_no, w_score in selected_chromosomes.items(): + score = int(w_score) + if score > best_chromosome_score and w_no in timetable: + best_chromosome_score = score + best_chromosome = timetable[w_no] + + if best_chromosome: + teacher_availability_matrix = update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome) + + return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes + +def run_timetable_generation( + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + total_generations +): + prev_selected = None + prev_mutated = None + best_chromosome = None + + for _ in range(total_generations): + best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + prev_selected_chromosomes=prev_selected, + prev_mutated_chromosomes=prev_mutated + ) + prev_selected = selected + prev_mutated = mutated + + return best_chromosome, teacher_availability_matrix if __name__ == "__main__": - print(run_timetable_generation()) + best, correct_teacher_availability_matrix = run_timetable_generation( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=6, + total_classrooms=8, + total_labs=3, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + labs=SpecialSubjects.Labs, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_availability_matrix=InterDepartment.teacher_availability_matrix, + total_generations=Defaults.total_no_of_generations + ) + + from icecream import ic + ic(best, correct_teacher_availability_matrix) diff --git a/GA/chromosome.py b/GA/chromosome.py index 3c2c8d1..58ce590 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -1,11 +1,8 @@ import random + +from Constants.constant import Classrooms, Defaults, RoomCapacity, Sections from Constants.time_intervals import TimeIntervalConstant -from Constants.constant import ( - Sections, - Classrooms, - RoomCapacity, - Defaults, -) + class TimeTableGeneration: def __init__( @@ -19,10 +16,8 @@ def __init__( special_subjects: dict, labs: dict, subject_quota_limits: dict, - labs_list: list, teacher_duty_days: dict, - teacher_availability_matrix=None, - teacher_department_mapping=dict + teacher_availability_matrix=dict, ): self.sections_manager = Sections(total_sections) self.classrooms_manager = Classrooms(total_classrooms, total_labs) @@ -38,165 +33,208 @@ def __init__( self.available_time_slots = TimeIntervalConstant.time_slots self.teacher_duty_days = teacher_duty_days self.weekly_workload = teacher_weekly_workload - self.teacher_assignment_tracker = {t: 0 for t in teacher_weekly_workload} + self.teacher_assignment_tracker = {teacher: 0 for teacher in teacher_weekly_workload} self.teacher_availability_matrix = teacher_availability_matrix self._map_sections_to_classrooms() - self._teacher_section() + self._assign_teachers_to_sections() + def _map_sections_to_classrooms(self): sorted_classrooms = sorted( self.classrooms_manager.classrooms, - key=lambda c: self.room_capacity_manager.room_capacity[c], + key=lambda classroom: self.room_capacity_manager.room_capacity[classroom], reverse=True, ) sorted_sections = sorted( self.sections_manager.sections, - key=lambda s: self.room_capacity_manager.section_strength[s], + key=lambda section: self.room_capacity_manager.section_strength[section], reverse=True, ) self.section_to_classroom_map = {} for section in sorted_sections: for classroom in sorted_classrooms: - if ( - self.room_capacity_manager.room_capacity[classroom] - >= self.room_capacity_manager.section_strength[section] - ): + if self.room_capacity_manager.room_capacity[classroom] >= self.room_capacity_manager.section_strength[section]: self.section_to_classroom_map[section] = classroom sorted_classrooms.remove(classroom) break - def _teacher_section(self): + + def _assign_teachers_to_sections(self): self.teacher_section_map = { - s: {sub: None for sub in self.subject_teacher_mapping} for s in self.sections_manager.sections + section: {subject: None for subject in self.subject_teacher_mapping} + for section in self.sections_manager.sections } - for s in self.sections_manager.sections: - for sub, t_list in self.subject_teacher_mapping.items(): - t_list_sorted = sorted(t_list, key=lambda t: self.teacher_assignment_tracker[t]) - chosen = t_list_sorted[0] - self.teacher_section_map[s][sub] = chosen - self.teacher_assignment_tracker[chosen] += 1 + + for section in self.sections_manager.sections: + for subject, teacher_list in self.subject_teacher_mapping.items(): + sorted_teachers_by_load = sorted(teacher_list, key=lambda teacher: self.teacher_assignment_tracker[teacher]) + selected_teacher = sorted_teachers_by_load[0] + self.teacher_section_map[section][subject] = selected_teacher + self.teacher_assignment_tracker[selected_teacher] += 1 + def _initialize_teacher_workload_tracker(self): - return {t: 0 for t in self.weekly_workload} + return {teacher: 0 for teacher in self.weekly_workload} + - def _get_available_subjects(self, section, usage): + def _get_available_subjects(self, section, subject_usage_tracker): return [ - sub for sub in self.subject_teacher_mapping - if usage[section][sub] < self.subject_quota_limits.get(sub, 0) + subject + for subject in self.subject_teacher_mapping + if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] + def _assign_subject_and_teacher( self, section, slot_index, - used_today, + subjects_scheduled_today, assigned_classroom, - usage, - teacher_load, - availability_matrix, - day_index, - total_slots + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index ): - subs = self._get_available_subjects(section, usage) - random.shuffle(subs) - teacher, chosen_sub, room = None, None, None - for sub in subs: - if sub in self.lab_subject_list and slot_index not in [1, 3, 5]: + available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) + random.shuffle(available_subjects) + + assigned_teacher = None + selected_subject = None + assigned_room = None + + for subject in available_subjects: + if subject in self.lab_subject_list and slot_index not in [1, 3, 5]: continue - if sub in self.special_subject_list and slot_index not in [5]: + + if subject in self.special_subject_list and slot_index not in [5]: continue - if sub not in used_today: - t_list = self.subject_teacher_mapping[sub] - preferred = [tt for tt in t_list if self.teacher_availability_preferences.get(tt, [])] - preferred_sorted = sorted(preferred, key=lambda x: teacher_load[x]) - for t in preferred_sorted: + + if subject not in subjects_scheduled_today: + teachers_for_subject = self.subject_teacher_mapping[subject] + preferred_teachers = [ + teacher for teacher in teachers_for_subject + if self.teacher_availability_preferences.get( + teacher, [] + ) + ] + sorted_teachers_by_load = sorted(preferred_teachers, key=lambda teacher: teacher_workload_tracker[teacher]) + + for teacher in sorted_teachers_by_load: if ( - t in availability_matrix - and len(availability_matrix[t]) > day_index - and len(availability_matrix[t][day_index]) > (slot_index - 1) - and availability_matrix[t][day_index][slot_index - 1] + teacher in teacher_availability_matrix + and len(teacher_availability_matrix[teacher]) > day_index + and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) + and teacher_availability_matrix[teacher][day_index][slot_index - 1] ): - teacher = t - teacher_load[teacher] += 1 - chosen_sub = sub - used_today.add(sub) - room = ( + teacher_availability_matrix[teacher][day_index][slot_index - 1] = False + assigned_teacher = teacher + teacher_workload_tracker[assigned_teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + + assigned_room = ( self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] - if sub in self.lab_subject_list + if subject in self.lab_subject_list else assigned_classroom ) break - if teacher: + + if assigned_teacher: break - if not teacher: - chosen_sub, teacher, room = "Library", "None", assigned_classroom - return teacher, chosen_sub, room + + if not assigned_teacher: + selected_subject = "Library" + assigned_teacher = "None" + assigned_room = assigned_classroom + + return assigned_teacher, selected_subject, assigned_room + def _generate_section_schedule( - self, section, half_day_sections, usage, teacher_load, availability_matrix, day_index + self, + section, + half_day_sections, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index ): - schedule = [] - used_subs = set() + section_schedule = [] + subjects_scheduled_today = set() assigned_classroom = self.section_to_classroom_map[section] - total_slots = 4 if section in half_day_sections else 7 - slot_idx = 1 - while slot_idx <= total_slots: - time_slot = self.available_time_slots[slot_idx] - a_teacher, a_sub, a_room = self._assign_subject_and_teacher( - section, slot_idx, used_subs, assigned_classroom, usage, - teacher_load, availability_matrix, day_index, total_slots + total_slots_for_section = 4 if section in half_day_sections else 7 + slot_index = 1 + + while slot_index <= total_slots_for_section: + time_slot = self.available_time_slots[slot_index] + assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( + section, slot_index, subjects_scheduled_today, assigned_classroom, + section_subject_usage_tracker, teacher_workload_tracker, + teacher_availability_matrix, day_index ) - schedule.append({ - "teacher_id": a_teacher, - "subject_id": a_sub, - "classroom_id": a_room, + + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, "time_slot": time_slot }) - if a_sub != "Library": - usage[section][a_sub] += 1 - if a_sub in self.lab_subject_list or a_sub in self.special_subject_list: - nxt = slot_idx + 1 - if nxt <= total_slots: - next_time = self.available_time_slots[nxt] - schedule.append({ - "teacher_id": a_teacher, - "subject_id": a_sub, - "classroom_id": a_room, - "time_slot": next_time + + if assigned_subject != "Library": + section_subject_usage_tracker[section][assigned_subject] += 1 + + if assigned_subject in self.lab_subject_list: + if slot_index + 1 <= total_slots_for_section: + next_time_slot = self.available_time_slots[slot_index + 1] + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot }) - availability_matrix[a_teacher][day_index][nxt - 1] = False - usage[section][a_sub] += 1 - slot_idx += 1 - slot_idx += 1 - return schedule, availability_matrix - - def generate_daily_schedule(self, half_day_sections, usage, day_index): - daily = {} - teacher_load = self._initialize_teacher_workload_tracker() - for s in self.sections_manager.sections: - sec_sched, self.teacher_availability_matrix = self._generate_section_schedule( - s, half_day_sections, usage, teacher_load, self.teacher_availability_matrix, day_index + section_subject_usage_tracker[section][assigned_subject] += 1 + slot_index += 1 # Skip the next slot as it's taken by the lab subject + + slot_index += 1 + + return section_schedule, teacher_availability_matrix + + + def generate_daily_schedule(self, half_day_sections, section_subject_usage_tracker, day_index): + daily_schedule = {} + teacher_workload_tracker = self._initialize_teacher_workload_tracker() + + for section in self.sections_manager.sections: + section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( + section, half_day_sections, section_subject_usage_tracker, teacher_workload_tracker, self.teacher_availability_matrix, day_index ) - daily[s] = sec_sched - return daily, usage, self.teacher_availability_matrix + daily_schedule[section] = section_schedule + + return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix + def _generate_weekly_schedule(self): - week_data = {} - usage_tracker = { - s: {sub: 0 for sub in self.subject_teacher_mapping} for s in self.sections_manager.sections + weekly_schedule = {} + section_subject_usage_tracker = { + section: {subject: 0 for subject in self.subject_teacher_mapping} for section in self.sections_manager.sections } - for i, w_day in enumerate(self.weekdays): - half_day = self.sections_manager.sections[: len(self.sections_manager.sections)//2] - d, usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( - half_day, usage_tracker, i + + for day_index, weekday in enumerate(self.weekdays): + half_day_sections = self.sections_manager.sections[: len(self.sections_manager.sections)//2] + daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( + half_day_sections, section_subject_usage_tracker, day_index ) - week_data[w_day] = d - return week_data, usage_tracker, self.teacher_availability_matrix + weekly_schedule[weekday] = daily_schedule + + return weekly_schedule, section_subject_usage_tracker, self.teacher_availability_matrix + def create_timetable(self, num_weeks): timetable = {} - for w in range(1, num_weeks + 1): - ws, u_tracker, self.teacher_availability_matrix = self._generate_weekly_schedule() - timetable[f"Week {w}"] = ws - print(self.teacher_availability_matrix) + + for week_number in range(1, num_weeks + 1): + weekly_schedule, _, self.teacher_availability_matrix = self._generate_weekly_schedule() + timetable[f"Week {week_number}"] = weekly_schedule + return timetable, self.teacher_availability_matrix \ No newline at end of file diff --git a/GA/fitness.py b/GA/fitness.py index 521905c..79c5501 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -1,11 +1,10 @@ import json + +from Constants.constant import Defaults, PenaltyConstants from Constants.time_intervals import TimeIntervalConstant from GA.chromosome import TimeTableGeneration -from Constants.constant import ( - PenaltyConstants, - Defaults, -) -from Samples.samples import SubjectTeacherMap, SpecialSubjects, SubjectWeeklyQuota, Classrooms, TeacherWorkload +from Samples.samples import (Classrooms, SpecialSubjects, SubjectTeacherMap, + SubjectWeeklyQuota, TeacherWorkload) class TimetableFitnessEvaluator: @@ -39,6 +38,7 @@ def evaluate_timetable_fitness(self): weekly_fitness_scores = {} teacher_workload_tracking = {} from icecream import ic + # ic(self.timetable) for week, week_schedule in self.timetable.items(): weekly_fitness = 0 diff --git a/Samples/Fitness_Files/fitness.py b/Samples/Fitness_Files/fitness.py index fff0e31..c0dc251 100644 --- a/Samples/Fitness_Files/fitness.py +++ b/Samples/Fitness_Files/fitness.py @@ -1,11 +1,10 @@ import json + +from Constants.constant import Defaults, PenaltyConstants from Constants.time_intervals import TimeIntervalConstant from GA.chromosome import TimeTableGeneration -from Constants.constant import ( - PenaltyConstants, - Defaults, -) -from Samples.samples import SubjectTeacherMap, SpecialSubjects, SubjectWeeklyQuota, Classrooms, TeacherWorkload +from Samples.samples import (Classrooms, SpecialSubjects, SubjectTeacherMap, + SubjectWeeklyQuota, TeacherWorkload) class TimetableFitnessEvaluator: diff --git a/Samples/Mutation_Files/mutation.py b/Samples/Mutation_Files/mutation.py index 8082a14..324c0e2 100644 --- a/Samples/Mutation_Files/mutation.py +++ b/Samples/Mutation_Files/mutation.py @@ -1,5 +1,6 @@ -import random import copy +import random + class Mutation: def __init__(self, mutation_rate= random.random()): diff --git a/Samples/Mutation_Files/mutation2.py b/Samples/Mutation_Files/mutation2.py index 3295a22..23f4ebd 100644 --- a/Samples/Mutation_Files/mutation2.py +++ b/Samples/Mutation_Files/mutation2.py @@ -1,5 +1,6 @@ import random + def mutate_time_slots_in_section(schedule, section): """ Mutates the time slots within a particular section by shuffling them. diff --git a/Samples/Selection_Files/selection.py b/Samples/Selection_Files/selection.py index 006b4bc..301e157 100644 --- a/Samples/Selection_Files/selection.py +++ b/Samples/Selection_Files/selection.py @@ -1,5 +1,6 @@ import random + class TimeIntervalConstant: @staticmethod def get_all_time_slots(): diff --git a/__init__.py b/__init__.py index 20d0104..b1c2c58 100644 --- a/__init__.py +++ b/__init__.py @@ -1,20 +1,15 @@ -# This is the Orchestrator file, which will govern the flow. +# This init is for preloaded values and to test the flow the actual init is inside GA/__init__.py + import json from Constants.constant import Defaults -from GA.mutation import TimeTableMutation, TimeTableCrossOver -from GA.selection import TimeTableSelection -from GA.fitness import TimetableFitnessEvaluator from GA.chromosome import TimeTableGeneration -from Samples.samples import ( - SubjectTeacherMap, - TeacherWorkload, - SpecialSubjects, - SubjectWeeklyQuota, - Classrooms, - Sections, InterDepartment, - -) +from GA.fitness import TimetableFitnessEvaluator +from GA.mutation import TimeTableCrossOver, TimeTableMutation +from GA.selection import TimeTableSelection +from Samples.samples import (InterDepartment, SpecialSubjects, + SubjectTeacherMap, SubjectWeeklyQuota, + TeacherWorkload) def timetable_generation(): @@ -28,15 +23,14 @@ def timetable_generation(): teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, special_subjects=SpecialSubjects.special_subjects, subject_quota_limits=SubjectWeeklyQuota.subject_quota, - labs_list=Classrooms.labs, teacher_duty_days=TeacherWorkload.teacher_duty_days, labs=SpecialSubjects.Labs, teacher_availability_matrix=InterDepartment.teacher_availability_matrix, ) timetable, teacher_avail_matrix = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) - from icecream import ic - ic(timetable) + + # Fitness of each Chromosome fitness_calculator = TimetableFitnessEvaluator( timetable, From 04d5d57ff31bb4e8c8914d26560fdd80de947628 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sun, 9 Feb 2025 00:55:45 +0530 Subject: [PATCH 22/67] refactor v1 --- Constants/helper_routines.py | 6 ++++++ Constants/section_allocation.py | 4 ---- Constants/{Teachers_tt.py => teachers_tt.py} | 0 GA/__init__.py | 14 +++++--------- 4 files changed, 11 insertions(+), 13 deletions(-) create mode 100644 Constants/helper_routines.py rename Constants/{Teachers_tt.py => teachers_tt.py} (100%) diff --git a/Constants/helper_routines.py b/Constants/helper_routines.py new file mode 100644 index 0000000..bc517de --- /dev/null +++ b/Constants/helper_routines.py @@ -0,0 +1,6 @@ +def update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome): + + for teacher_id, schedule_data in best_chromosome.items(): + if teacher_id in teacher_availability_matrix: + teacher_availability_matrix[teacher_id] = schedule_data + return teacher_availability_matrix diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index abe2671..5eb9a2d 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -113,10 +113,6 @@ def divide_students_into_sections(self, students: List[Dict], class_strength: in return sections - - - - def generate_students(num_students: int = 500) -> List[Dict]: """ Generate a list of random students with CGPA and hostler status. diff --git a/Constants/Teachers_tt.py b/Constants/teachers_tt.py similarity index 100% rename from Constants/Teachers_tt.py rename to Constants/teachers_tt.py diff --git a/GA/__init__.py b/GA/__init__.py index d186210..1844b51 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,6 +1,7 @@ # This is the Orchestrator file, which will govern the flow. from Constants.constant import Defaults +from Constants.helper_routines import update_teacher_availability_matrix from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation @@ -10,14 +11,6 @@ TeacherWorkload) -def update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome): - - for teacher_id, schedule_data in best_chromosome.items(): - if teacher_id in teacher_availability_matrix: - teacher_availability_matrix[teacher_id] = schedule_data - return teacher_availability_matrix - - def timetable_generation( teacher_subject_mapping, total_sections, @@ -98,7 +91,10 @@ def timetable_generation( best_chromosome = timetable[w_no] if best_chromosome: - teacher_availability_matrix = update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome) + teacher_availability_matrix = update_teacher_availability_matrix( + teacher_availability_matrix, + best_chromosome + ) return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes From f035c0258b3c216602d9a76b777ef76876e4215f Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sun, 9 Feb 2025 00:56:47 +0530 Subject: [PATCH 23/67] refactor v2 --- GA/fitness.py | 1 - 1 file changed, 1 deletion(-) diff --git a/GA/fitness.py b/GA/fitness.py index 79c5501..2e01db2 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -126,7 +126,6 @@ def evaluate_timetable_fitness(self): teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, special_subjects=SpecialSubjects.special_subjects, subject_quota_limits=SubjectWeeklyQuota.subject_quota, - labs_list=SpecialSubjects.Labs, teacher_duty_days=TeacherWorkload.teacher_duty_days, ) generated_timetables = timetable_generator.create_timetable(5) From 33e14ae6a50083b5fc32f04e61f806af248cdf10 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sun, 9 Feb 2025 01:36:51 +0530 Subject: [PATCH 24/67] refactor v3 --- Constants/helper_routines.py | 46 ++++++++++++++++++++++++++++++++++++ GA/__init__.py | 32 +++++++++++++++++++++++-- GA/chromosome.py | 2 +- 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/Constants/helper_routines.py b/Constants/helper_routines.py index bc517de..d7ad06e 100644 --- a/Constants/helper_routines.py +++ b/Constants/helper_routines.py @@ -4,3 +4,49 @@ def update_teacher_availability_matrix(teacher_availability_matrix, best_chromos if teacher_id in teacher_availability_matrix: teacher_availability_matrix[teacher_id] = schedule_data return teacher_availability_matrix + + +def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map, time_slot_map): + """ + Set teacher_availability_matrix[teacher_id][day_index][slot_index] = False + for every (day, slot) where teacher_id != 'None' in the best chromosome. + """ + # print(teacher_availability_matrix) + for day_name, section_dict in best_chromosome.items(): + if day_name not in day_map: + continue # or raise an error + day_index = day_map[day_name] + + for section_name, schedule_items in section_dict.items(): + for item in schedule_items: + teacher_id = item["teacher_id"] + if teacher_id == "None": + continue + + time_slot_str = item["time_slot"] + if time_slot_str not in time_slot_map: + continue # or raise an error + slot_index = time_slot_map[time_slot_str] + print(teacher_id, day_index, slot_index) + print(teacher_availability_matrix) + + # Now set availability to False + teacher_availability_matrix[teacher_id][day_index][slot_index - 1] = False + + return teacher_availability_matrix + + +def initialize_teacher_availability(teacher_list, num_days=5, num_slots=7): + """ + Creates a dynamic teacher availability matrix. + + :param teacher_list: List of teacher IDs. + :param num_days: Number of working days (default: 5 for Mon-Fri). + :param num_slots: Number of slots per day (default: 7 per day). + :return: Dictionary mapping teacher IDs to a 2D availability matrix. + """ + + return { + teacher: [[True] * num_slots for _ in range(num_days)] + for teacher in teacher_list + } diff --git a/GA/__init__.py b/GA/__init__.py index 1844b51..8707e17 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,7 +1,8 @@ # This is the Orchestrator file, which will govern the flow. from Constants.constant import Defaults -from Constants.helper_routines import update_teacher_availability_matrix +from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best, \ + initialize_teacher_availability from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation @@ -150,9 +151,36 @@ def run_timetable_generation( labs=SpecialSubjects.Labs, subject_quota_limits=SubjectWeeklyQuota.subject_quota, teacher_duty_days=TeacherWorkload.teacher_duty_days, - teacher_availability_matrix=InterDepartment.teacher_availability_matrix, + teacher_availability_matrix=initialize_teacher_availability( + TeacherWorkload.Weekly_workLoad.keys(), + 5, + 8 + ), total_generations=Defaults.total_no_of_generations ) from icecream import ic + ic(best) + correct_teacher_availability_matrix = update_matrix_for_best( + best, + correct_teacher_availability_matrix, + { + "Monday": 0, + "Tuesday": 1, + "Wednesday": 2, + "Thursday": 3, + "Friday": 4, + "Saturday": 5, + "Sunday": 6 + },{ + "08:00 - 09:00": 1, + "09:00 - 10:00": 2, + "10:00 - 11:00": 3, + "11:00 - 12:00": 4, + "12:00 - 13:00": 5, + "13:50 - 14:50": 6, + "14:50 - 15:50": 7, + "16:50 - 17:50": 8 + } + ) ic(best, correct_teacher_availability_matrix) diff --git a/GA/chromosome.py b/GA/chromosome.py index 58ce590..13ae8d8 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -127,7 +127,7 @@ def _assign_subject_and_teacher( and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and teacher_availability_matrix[teacher][day_index][slot_index - 1] ): - teacher_availability_matrix[teacher][day_index][slot_index - 1] = False + # teacher_availability_matrix[teacher][day_index][slot_index - 1] = False assigned_teacher = teacher teacher_workload_tracker[assigned_teacher] += 1 selected_subject = subject From 90b86643a2486993440fe42a2df40d68cddd7538 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sun, 9 Feb 2025 01:38:19 +0530 Subject: [PATCH 25/67] refactor v5 --- Constants/helper_routines.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Constants/helper_routines.py b/Constants/helper_routines.py index d7ad06e..6613313 100644 --- a/Constants/helper_routines.py +++ b/Constants/helper_routines.py @@ -11,7 +11,7 @@ def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map Set teacher_availability_matrix[teacher_id][day_index][slot_index] = False for every (day, slot) where teacher_id != 'None' in the best chromosome. """ - # print(teacher_availability_matrix) + for day_name, section_dict in best_chromosome.items(): if day_name not in day_map: continue # or raise an error @@ -27,8 +27,6 @@ def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map if time_slot_str not in time_slot_map: continue # or raise an error slot_index = time_slot_map[time_slot_str] - print(teacher_id, day_index, slot_index) - print(teacher_availability_matrix) # Now set availability to False teacher_availability_matrix[teacher_id][day_index][slot_index - 1] = False From 5ac748733500b57c7eed1c85532589462fe48b8c Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Tue, 11 Feb 2025 16:01:26 +0530 Subject: [PATCH 26/67] Lab allocation for section time table. --- GA/chromosome.py | 114 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 88 insertions(+), 26 deletions(-) diff --git a/GA/chromosome.py b/GA/chromosome.py index 13ae8d8..4c7fc3c 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -150,15 +150,16 @@ def _assign_subject_and_teacher( return assigned_teacher, selected_subject, assigned_room - def _generate_section_schedule( - self, - section, - half_day_sections, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, - day_index + self, + section, + half_day_sections, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index, + section_strength=100, + labs_capacity: dict = {"L1": 50, "L2": 50} ): section_schedule = [] subjects_scheduled_today = set() @@ -174,29 +175,90 @@ def _generate_section_schedule( teacher_availability_matrix, day_index ) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot - }) - - if assigned_subject != "Library": - section_subject_usage_tracker[section][assigned_subject] += 1 - - if assigned_subject in self.lab_subject_list: - if slot_index + 1 <= total_slots_for_section: - next_time_slot = self.available_time_slots[slot_index + 1] + # Non-lab subjects (or labs when no special handling is needed) + if assigned_subject not in self.lab_subject_list: + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + "group": "all" + }) + if assigned_subject != "Library": + section_subject_usage_tracker[section][assigned_subject] += 1 + slot_index += 1 + else: + # split section, out section is too large. + if (section_strength is not None and labs_capacity is not None and + assigned_room in labs_capacity and section_strength > labs_capacity[assigned_room]): + + # Look for an alternative lab room for group 2. + lab2 = None + for lab in self.classrooms_manager.labs: + if lab != assigned_room and lab in labs_capacity: + # Check if lab2 can accommodate the remaining students. + if labs_capacity[lab] >= section_strength - labs_capacity[assigned_room]: + lab2 = lab + break + + if lab2 is None: + raise ValueError("Insufficient lab capacity to split section for lab subject.") + + # Use two consecutive slots (if available) for the two groups. + if slot_index + 1 <= total_slots_for_section: + next_time_slot = self.available_time_slots[slot_index + 1] + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + "group": 1 + }) + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": lab2, + "time_slot": next_time_slot, + "group": 2 + }) + section_subject_usage_tracker[section][assigned_subject] += 2 + slot_index += 2 + + else: + # Not enough slots to assign both groups; fall back to a single session. + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + "group": 1 + }) + section_subject_usage_tracker[section][assigned_subject] += 1 + slot_index += 1 + else: + # No split needed; assign lab in double slot if possible. section_schedule.append({ "teacher_id": assigned_teacher, "subject_id": assigned_subject, "classroom_id": assigned_room, - "time_slot": next_time_slot + "time_slot": time_slot, + "group": 1 }) - section_subject_usage_tracker[section][assigned_subject] += 1 - slot_index += 1 # Skip the next slot as it's taken by the lab subject - - slot_index += 1 + if slot_index + 1 <= total_slots_for_section: + next_time_slot = self.available_time_slots[slot_index + 1] + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + "group": 1 + }) + section_subject_usage_tracker[section][assigned_subject] += 2 + slot_index += 2 + + else: + section_subject_usage_tracker[section][assigned_subject] += 1 + slot_index += 1 return section_schedule, teacher_availability_matrix From fe3814e0055e03013bf75c3782c40c6336891983 Mon Sep 17 00:00:00 2001 From: Vibha Date: Tue, 11 Feb 2025 16:50:29 +0530 Subject: [PATCH 27/67] Restored some files --- Constants/Teachers_tt.py | 87 ++ Constants/section_allocation.py | 4 +- Constants/teacher_timetable.json | 1050 +++++++++++++++++++++++ Samples/Fitness_Files/LabConstraints.py | 167 ++++ test_suite/Crossover_Test.py | 629 ++++++++++++++ test_suite/Fitness_Test.py | 692 +++++++++++++++ test_suite/Mutation_Test.py | 366 ++++++++ test_suite/ReadMe.md | 7 + test_suite/Selection_Tests.py | 298 +++++++ test_suite/unit_test.py | 0 10 files changed, 3298 insertions(+), 2 deletions(-) create mode 100644 Constants/Teachers_tt.py create mode 100644 Constants/teacher_timetable.json create mode 100644 Samples/Fitness_Files/LabConstraints.py create mode 100644 test_suite/Crossover_Test.py create mode 100644 test_suite/Fitness_Test.py create mode 100644 test_suite/Mutation_Test.py create mode 100644 test_suite/ReadMe.md create mode 100644 test_suite/Selection_Tests.py create mode 100644 test_suite/unit_test.py diff --git a/Constants/Teachers_tt.py b/Constants/Teachers_tt.py new file mode 100644 index 0000000..30c4d7b --- /dev/null +++ b/Constants/Teachers_tt.py @@ -0,0 +1,87 @@ +import json +from Samples.samples import (SubjectTeacherMap, WorkingDays, SampleChromosome) + +class TeacherTimetable: + def __init__(self): + # Create timetable for each teacher + self.teacher_timetable = { + teacher: {day: [] for day in WorkingDays.days} + for teachers in SubjectTeacherMap.subject_teacher_map.values() + for teacher in teachers + } + self.teacher_assignments = {teacher: {} for teachers in SubjectTeacherMap.subject_teacher_map.values() for teacher in teachers} + + def generate_teacher_timetable(self, chromosome): + """ + Populate the teacher's timetable based on the provided chromosome schedule. + Now includes the course (Week 1, Week 2, etc.) information. + """ + for week, days in chromosome.items(): + for day, sections in days.items(): + for section, classes in sections.items(): + for entry in classes: + teacher_id = entry["teacher_id"] + subject_id = entry["subject_id"] + time_slot = entry["time_slot"] + classroom_id = entry["classroom_id"] + + # Conflict check: Ensure the teacher is not already assigned at this time slot + if teacher_id in self.teacher_assignments and time_slot in self.teacher_assignments[teacher_id]: + continue # Skip this assignment if there's a conflict + + # Add the class to the teacher's timetable + self.teacher_timetable[teacher_id][day].append({ + "course": week, # Include course information (Week 1, Week 2) + "section": section, + "subject_id": subject_id, + "time_slot": time_slot, + "classroom_id": classroom_id, + }) + + # Update the teacher's assignments to reflect the added class + if teacher_id not in self.teacher_assignments: + self.teacher_assignments[teacher_id] = {} + self.teacher_assignments[teacher_id][time_slot] = { + "course": week, + "section": section, + "subject_id": subject_id, + "classroom_id": classroom_id, + "day": day + } + + return self.teacher_timetable + + def save_timetable_to_json(self, file_path="Constants/teacher_timetable.json"): + """ + Create a dictionary and save the teacher's timetable to a JSON file. + """ + try: + # Create a dictionary explicitly from the teacher timetable + timetable_dict = { + teacher: { + day: classes + for day, classes in days.items() + } + for teacher, days in self.teacher_timetable.items() + } + + # Save the dictionary to a JSON file + with open(file_path, "w") as json_file: + json.dump(timetable_dict, json_file, indent=4) + + print(f"Timetable successfully saved to '{file_path}'.") + except Exception as e: + print(f"Error saving timetable to '{file_path}': {e}") + +if __name__ == "__main__": + teacher_timetable = TeacherTimetable() + # Generate timetable from the sample chromosome (Week 1 and Week 2) + w = { + "Week 2": SampleChromosome.schedule2, + "Week 1": SampleChromosome.schedule1 + } + + teacher_tt=teacher_timetable.generate_teacher_timetable(w) + print(teacher_tt) + # Save timetable to a JSON file + teacher_timetable.save_timetable_to_json() diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index a45b921..e1de2c0 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -31,7 +31,7 @@ def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: """ sorted_cgpas = sorted( - (student['CGPA'] for student in students), + (student['cgpa'] for student in students), reverse=True ) @@ -46,7 +46,7 @@ def assign_dynamic_conditions(self, cgpa_threshold: float): Args: cgpa_threshold (float): The CGPA threshold for "good_cgpa". """ - SectionsConstants.ATTRIBUTE_CONDITIONS['good_cgpa'] = lambda student: student['CGPA'] >= cgpa_threshold + SectionsConstants.ATTRIBUTE_CONDITIONS['good_cgpa'] = lambda student: student['cgpa'] >= cgpa_threshold def calculate_student_score(self, student: Dict) -> int: diff --git a/Constants/teacher_timetable.json b/Constants/teacher_timetable.json new file mode 100644 index 0000000..42c705c --- /dev/null +++ b/Constants/teacher_timetable.json @@ -0,0 +1,1050 @@ +{ + "AB01": { + "Monday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TCS-531", + "time_slot": "2:15 - 3:10", + "classroom_id": "R2" + }, + { + "course": "Week 1", + "section": "D", + "subject_id": "TCS-531", + "time_slot": "1:20 - 2:15", + "classroom_id": "R4" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-531", + "time_slot": "9:00 - 9:55", + "classroom_id": "R1" + }, + { + "course": "Week 1", + "section": "B", + "subject_id": "TCS-531", + "time_slot": "9:55 - 10:50", + "classroom_id": "R2" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-531", + "time_slot": "11:10 - 12:05", + "classroom_id": "R3" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-531", + "time_slot": "3:30 - 4:25", + "classroom_id": "R3" + } + ], + "Friday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-531", + "time_slot": "12:05 - 1:00", + "classroom_id": "R3" + } + ], + "Saturday": [] + }, + "PK02": { + "Monday": [], + "Tuesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-531", + "time_slot": "12:05 - 1:00", + "classroom_id": "R3" + }, + { + "course": "Week 1", + "section": "C", + "subject_id": "TCS-531", + "time_slot": "1:20 - 2:15", + "classroom_id": "R3" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "TCS-531", + "time_slot": "2:15 - 3:10", + "classroom_id": "R4" + } + ], + "Thursday": [ + { + "course": "Week 1", + "section": "D", + "subject_id": "TCS-531", + "time_slot": "9:55 - 10:50", + "classroom_id": "R4" + } + ], + "Friday": [], + "Saturday": [] + }, + "SS03": { + "Monday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-502", + "time_slot": "3:30 - 4:25", + "classroom_id": "R1" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-502", + "time_slot": "12:05 - 1:00", + "classroom_id": "R1" + }, + { + "course": "Week 1", + "section": "B", + "subject_id": "TCS-502", + "time_slot": "9:00 - 9:55", + "classroom_id": "R2" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TCS-502", + "time_slot": "9:55 - 10:50", + "classroom_id": "R2" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-502", + "time_slot": "2:15 - 3:10", + "classroom_id": "R1" + } + ], + "Friday": [], + "Saturday": [] + }, + "AA04": { + "Monday": [], + "Tuesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-502", + "time_slot": "3:30 - 4:25", + "classroom_id": "R3" + } + ], + "Wednesday": [], + "Thursday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TCS-502", + "time_slot": "9:00 - 9:55", + "classroom_id": "R2" + } + ], + "Friday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "TCS-502", + "time_slot": "12:05 - 1:00", + "classroom_id": "R4" + } + ], + "Saturday": [] + }, + "AC05": { + "Monday": [], + "Tuesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-503", + "time_slot": "9:55 - 10:50", + "classroom_id": "R3" + }, + { + "course": "Week 2", + "section": "D", + "subject_id": "TCS-502", + "time_slot": "12:05 - 1:00", + "classroom_id": "R4" + } + ], + "Wednesday": [ + { + "course": "Week 1", + "section": "D", + "subject_id": "TCS-503", + "time_slot": "11:10 - 12:05", + "classroom_id": "R4" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-503", + "time_slot": "1:20 - 2:15", + "classroom_id": "R3" + } + ], + "Friday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TCS-503", + "time_slot": "9:00 - 9:55", + "classroom_id": "R3" + } + ], + "Saturday": [] + }, + "SP06": { + "Monday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TCS-503", + "time_slot": "1:20 - 2:15", + "classroom_id": "R2" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-503", + "time_slot": "11:10 - 12:05", + "classroom_id": "R1" + }, + { + "course": "Week 1", + "section": "C", + "subject_id": "TCS-503", + "time_slot": "2:15 - 3:10", + "classroom_id": "R3" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "PCS-503", + "time_slot": "9:55 - 10:50", + "classroom_id": "L4" + }, + { + "course": "Week 2", + "section": "D", + "subject_id": "PCS-503", + "time_slot": "9:00 - 9:55", + "classroom_id": "L4" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-503", + "time_slot": "3:30 - 4:25", + "classroom_id": "R1" + } + ], + "Friday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-503", + "time_slot": "12:05 - 1:00", + "classroom_id": "R1" + } + ], + "Saturday": [] + }, + "DP07": { + "Monday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-503", + "time_slot": "12:05 - 1:00", + "classroom_id": "L4" + }, + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-503", + "time_slot": "11:10 - 12:05", + "classroom_id": "L4" + }, + { + "course": "Week 1", + "section": "C", + "subject_id": "TCS-503", + "time_slot": "9:00 - 9:55", + "classroom_id": "R3" + } + ], + "Tuesday": [], + "Wednesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-503", + "time_slot": "2:15 - 3:10", + "classroom_id": "L1" + }, + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-503", + "time_slot": "1:20 - 2:15", + "classroom_id": "L1" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TCS-503", + "time_slot": "9:55 - 10:50", + "classroom_id": "R2" + } + ], + "Friday": [], + "Saturday": [] + }, + "AD08": { + "Monday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "PCS-506", + "time_slot": "12:05 - 1:00", + "classroom_id": "L5" + }, + { + "course": "Week 2", + "section": "A", + "subject_id": "PCS-506", + "time_slot": "11:10 - 12:05", + "classroom_id": "L5" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "PCS-506", + "time_slot": "9:55 - 10:50", + "classroom_id": "L3" + }, + { + "course": "Week 2", + "section": "D", + "subject_id": "PCS-506", + "time_slot": "9:00 - 9:55", + "classroom_id": "L3" + } + ], + "Wednesday": [], + "Thursday": [], + "Friday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-506", + "time_slot": "2:15 - 3:10", + "classroom_id": "L5" + }, + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-506", + "time_slot": "1:20 - 2:15", + "classroom_id": "L5" + } + ], + "Saturday": [] + }, + "RD09": { + "Monday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-506", + "time_slot": "9:55 - 10:50", + "classroom_id": "L5" + }, + { + "course": "Week 2", + "section": "C", + "subject_id": "PCS-506", + "time_slot": "9:00 - 9:55", + "classroom_id": "L5" + } + ], + "Tuesday": [], + "Wednesday": [], + "Thursday": [], + "Friday": [], + "Saturday": [] + }, + "BJ10": { + "Monday": [ + { + "course": "Week 1", + "section": "A", + "subject_id": "TMA-502", + "time_slot": "1:20 - 2:15", + "classroom_id": "R1" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TMA-502", + "time_slot": "2:15 - 3:10", + "classroom_id": "R3" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TMA-502", + "time_slot": "12:05 - 1:00", + "classroom_id": "R2" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TMA-502", + "time_slot": "11:10 - 12:05", + "classroom_id": "R1" + } + ], + "Friday": [ + { + "course": "Week 1", + "section": "B", + "subject_id": "TMA-502", + "time_slot": "9:00 - 9:55", + "classroom_id": "R2" + } + ], + "Saturday": [] + }, + "RS11": { + "Monday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "PCS-503", + "time_slot": "9:55 - 10:50", + "classroom_id": "L3" + }, + { + "course": "Week 2", + "section": "B", + "subject_id": "PCS-503", + "time_slot": "9:00 - 9:55", + "classroom_id": "L3" + } + ], + "Tuesday": [], + "Wednesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "PCS-503", + "time_slot": "12:05 - 1:00", + "classroom_id": "L3" + }, + { + "course": "Week 2", + "section": "A", + "subject_id": "PCS-503", + "time_slot": "11:10 - 12:05", + "classroom_id": "L3" + } + ], + "Thursday": [ + { + "course": "Week 1", + "section": "B", + "subject_id": "TMA-502", + "time_slot": "1:20 - 2:15", + "classroom_id": "R2" + } + ], + "Friday": [ + { + "course": "Week 1", + "section": "B", + "subject_id": "PCS-503", + "time_slot": "2:15 - 3:10", + "classroom_id": "L3" + } + ], + "Saturday": [] + }, + "JM12": { + "Monday": [], + "Tuesday": [], + "Wednesday": [ + { + "course": "Week 1", + "section": "D", + "subject_id": "TMA-502", + "time_slot": "12:05 - 1:00", + "classroom_id": "R4" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "TMA-502", + "time_slot": "9:55 - 10:50", + "classroom_id": "R3" + }, + { + "course": "Week 1", + "section": "D", + "subject_id": "TMA-502", + "time_slot": "11:10 - 12:05", + "classroom_id": "R4" + } + ], + "Friday": [], + "Saturday": [] + }, + "NJ13": { + "Monday": [], + "Tuesday": [], + "Wednesday": [], + "Thursday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "TMA-502", + "time_slot": "9:00 - 9:55", + "classroom_id": "R4" + } + ], + "Friday": [], + "Saturday": [] + }, + "PM14": { + "Monday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "PMA-502", + "time_slot": "9:55 - 10:50", + "classroom_id": "L1" + }, + { + "course": "Week 2", + "section": "D", + "subject_id": "PMA-502", + "time_slot": "9:00 - 9:55", + "classroom_id": "L1" + }, + { + "course": "Week 1", + "section": "B", + "subject_id": "PMA-502", + "time_slot": "12:05 - 1:00", + "classroom_id": "L4" + }, + { + "course": "Week 1", + "section": "B", + "subject_id": "PMA-502", + "time_slot": "11:10 - 12:05", + "classroom_id": "L4" + } + ], + "Tuesday": [], + "Wednesday": [], + "Thursday": [], + "Friday": [ + { + "course": "Week 1", + "section": "C", + "subject_id": "PMA-502", + "time_slot": "2:15 - 3:10", + "classroom_id": "L5" + }, + { + "course": "Week 1", + "section": "C", + "subject_id": "PMA-502", + "time_slot": "1:20 - 2:15", + "classroom_id": "L5" + } + ], + "Saturday": [] + }, + "AA15": { + "Monday": [], + "Tuesday": [], + "Wednesday": [], + "Thursday": [], + "Friday": [], + "Saturday": [] + }, + "SJ16": { + "Monday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-509", + "time_slot": "9:55 - 10:50", + "classroom_id": "R1" + }, + { + "course": "Week 1", + "section": "A", + "subject_id": "TCS-509", + "time_slot": "2:15 - 3:10", + "classroom_id": "R1" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-509", + "time_slot": "3:30 - 4:25", + "classroom_id": "R1" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-509", + "time_slot": "9:00 - 9:55", + "classroom_id": "R1" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "TCS-509", + "time_slot": "12:05 - 1:00", + "classroom_id": "R1" + } + ], + "Friday": [], + "Saturday": [] + }, + "AB17": { + "Monday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TCS-509", + "time_slot": "12:05 - 1:00", + "classroom_id": "R2" + }, + { + "course": "Week 1", + "section": "B", + "subject_id": "TCS-509", + "time_slot": "9:55 - 10:50", + "classroom_id": "R2" + } + ], + "Tuesday": [], + "Wednesday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "TCS-509", + "time_slot": "11:10 - 12:05", + "classroom_id": "R2" + }, + { + "course": "Week 1", + "section": "B", + "subject_id": "TCS-509", + "time_slot": "9:00 - 9:55", + "classroom_id": "R2" + } + ], + "Thursday": [], + "Friday": [ + { + "course": "Week 1", + "section": "C", + "subject_id": "TCS-509", + "time_slot": "3:30 - 4:25", + "classroom_id": "R3" + } + ], + "Saturday": [] + }, + "HP18": { + "Monday": [ + { + "course": "Week 1", + "section": "C", + "subject_id": "TCS-509", + "time_slot": "9:55 - 10:50", + "classroom_id": "R3" + } + ], + "Tuesday": [], + "Wednesday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "TCS-509", + "time_slot": "3:30 - 4:25", + "classroom_id": "R4" + } + ], + "Thursday": [], + "Friday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "TCS-509", + "time_slot": "11:10 - 12:05", + "classroom_id": "R4" + }, + { + "course": "Week 1", + "section": "D", + "subject_id": "TCS-509", + "time_slot": "12:05 - 1:00", + "classroom_id": "R4" + } + ], + "Saturday": [] + }, + "SG19": { + "Monday": [ + { + "course": "Week 1", + "section": "D", + "subject_id": "TCS-509", + "time_slot": "2:15 - 3:10", + "classroom_id": "R4" + } + ], + "Tuesday": [ + { + "course": "Week 1", + "section": "D", + "subject_id": "TCS-509", + "time_slot": "9:00 - 9:55", + "classroom_id": "R4" + } + ], + "Wednesday": [], + "Thursday": [], + "Friday": [], + "Saturday": [] + }, + "DT20": { + "Monday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "XCS-501", + "time_slot": "1:20 - 2:15", + "classroom_id": "R1" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "XCS-501", + "time_slot": "11:10 - 12:05", + "classroom_id": "R4" + }, + { + "course": "Week 1", + "section": "D", + "subject_id": "XCS-501", + "time_slot": "12:05 - 1:00", + "classroom_id": "R4" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "XCS-501", + "time_slot": "9:55 - 10:50", + "classroom_id": "R1" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "XCS-501", + "time_slot": "9:00 - 9:55", + "classroom_id": "R3" + } + ], + "Friday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "XCS-501", + "time_slot": "3:30 - 4:25", + "classroom_id": "R3" + } + ], + "Saturday": [] + }, + "PA21": { + "Monday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "XCS-501", + "time_slot": "3:30 - 4:25", + "classroom_id": "R2" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "XCS-501", + "time_slot": "9:55 - 10:50", + "classroom_id": "R2" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "XCS-501", + "time_slot": "12:05 - 1:00", + "classroom_id": "R3" + } + ], + "Thursday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "XCS-501", + "time_slot": "11:10 - 12:05", + "classroom_id": "R4" + } + ], + "Friday": [], + "Saturday": [] + }, + "NB22": { + "Monday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "XCS-501", + "time_slot": "11:10 - 12:05", + "classroom_id": "R4" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "XCS-501", + "time_slot": "9:00 - 9:55", + "classroom_id": "R3" + }, + { + "course": "Week 1", + "section": "C", + "subject_id": "XCS-501", + "time_slot": "9:55 - 10:50", + "classroom_id": "R3" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "D", + "subject_id": "XCS-501", + "time_slot": "12:05 - 1:00", + "classroom_id": "R4" + } + ], + "Thursday": [], + "Friday": [], + "Saturday": [] + }, + "AK23": { + "Monday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "CSP-501", + "time_slot": "9:00 - 9:55", + "classroom_id": "R1" + }, + { + "course": "Week 1", + "section": "D", + "subject_id": "CSP-501", + "time_slot": "3:30 - 4:25", + "classroom_id": "R4" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "C", + "subject_id": "CSP-501", + "time_slot": "11:10 - 12:05", + "classroom_id": "R3" + } + ], + "Wednesday": [], + "Thursday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "CSP-501", + "time_slot": "1:20 - 2:15", + "classroom_id": "R1" + }, + { + "course": "Week 2", + "section": "C", + "subject_id": "CSP-501", + "time_slot": "2:15 - 3:10", + "classroom_id": "R3" + }, + { + "course": "Week 2", + "section": "D", + "subject_id": "CSP-501", + "time_slot": "12:05 - 1:00", + "classroom_id": "R4" + } + ], + "Friday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "CSP-501", + "time_slot": "9:55 - 10:50", + "classroom_id": "R1" + } + ], + "Saturday": [] + }, + "AP24": { + "Monday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "SCS-501", + "time_slot": "2:15 - 3:10", + "classroom_id": "R1" + }, + { + "course": "Week 2", + "section": "B", + "subject_id": "SCS-501", + "time_slot": "11:10 - 12:05", + "classroom_id": "R2" + } + ], + "Tuesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "SCS-501", + "time_slot": "9:55 - 10:50", + "classroom_id": "R1" + }, + { + "course": "Week 2", + "section": "C", + "subject_id": "SCS-501", + "time_slot": "1:20 - 2:15", + "classroom_id": "R3" + } + ], + "Wednesday": [ + { + "course": "Week 2", + "section": "B", + "subject_id": "SCS-501", + "time_slot": "9:00 - 9:55", + "classroom_id": "R2" + } + ], + "Thursday": [], + "Friday": [], + "Saturday": [] + }, + "VD25": { + "Monday": [], + "Tuesday": [], + "Wednesday": [], + "Thursday": [], + "Friday": [], + "Saturday": [] + }, + "AK26": { + "Monday": [], + "Tuesday": [ + { + "course": "Week 2", + "section": "A", + "subject_id": "Placement_Class", + "time_slot": "2:15 - 3:10", + "classroom_id": "R1" + } + ], + "Wednesday": [], + "Thursday": [], + "Friday": [], + "Saturday": [] + } +} \ No newline at end of file diff --git a/Samples/Fitness_Files/LabConstraints.py b/Samples/Fitness_Files/LabConstraints.py new file mode 100644 index 0000000..32896c1 --- /dev/null +++ b/Samples/Fitness_Files/LabConstraints.py @@ -0,0 +1,167 @@ +import random +import json +from constants.time_intervals import TimeIntervalConstant + +# Constants +LABS = ["Lab1", "Lab2", "Lab3", "Lab4"] +CLASSES = ["Class1", "Class2", "Class3", "Class4"] +TEACHERS = ["Teacher1", "Teacher2", "Teacher3", "Teacher4"] + +# Constraints +MAX_LAB_COUNT = 2 # Max labs per week for a teacher +MAX_CLASS_COUNT = 3 # Max classes per week for a teacher +MAX_TEACHER_WORKLOAD = 5 # Max hours a teacher can work in a week +MAX_CONTINUOUS_CLASSES = 2 # Max consecutive hours for a teacher + +# Workload for subjects +SUBJECT_WORKLOAD = { + "TCS-531": 3, + "TCS-502": 3, + "TCS-503": 3, + "PCS-506": 1, + "PCS-503": 1, + "TMA-502": 3, + "PMA-502": 1, + "TCS-509": 3, + "XCS-501": 2, + "CSP-501": 1, + "SCS-501": 1, + "Placement_Class": 1 +} + +# Teacher availability and subjects they teach +TEACHER_SUBJECTS = { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"], + "PCS-503": ["RS11", "DP07", "SP06", "VD25"], + "Placement_Class": ["AK26"] +} + +# Initialize available time slots +TimeSlots = TimeIntervalConstant.time_slots # Assuming TimeIntervalConstant has a list of time intervals + + +class TimetableFitness: + def __init__(self): + self.teachers = TEACHERS + self.labs = LABS + self.classes = CLASSES + self.subject_workload = SUBJECT_WORKLOAD + self.teacher_subjects = TEACHER_SUBJECTS + self.teacher_schedule = {teacher: {} for teacher in self.teachers} + self.section_strength = {cls: random.randint(40, 60) for cls in self.classes} + + def assign_classes_and_labs(self): + """ + Assign classes and labs to teachers based on constraints and time slots. + """ + for teacher in self.teachers: + subjects = [subject for subject, teachers in TEACHER_SUBJECTS.items() if teacher in teachers] + for subject in subjects: + time_slot = random.choice(TimeSlots) # Randomly select an available time slot + if time_slot not in self.teacher_schedule[teacher]: + self.teacher_schedule[teacher][time_slot] = subject + + def LabNo(self): + """ + Check if the number of labs assigned is within the constraints. + """ + for teacher, schedule in self.teacher_schedule.items(): + lab_count = sum(1 for subject in schedule.values() if subject in self.labs) + if lab_count > MAX_LAB_COUNT: + return False + return True + + def ClassNo(self): + """ + Check if the number of classes assigned is within the constraints. + """ + for teacher, schedule in self.teacher_schedule.items(): + class_count = sum(1 for subject in schedule.values() if subject in self.classes) + if class_count > MAX_CLASS_COUNT: + return False + return True + + def TeacherWorkload(self): + """ + Ensure total workload per teacher is within the limit. + """ + for teacher, schedule in self.teacher_schedule.items(): + total_hours = sum(SUBJECT_WORKLOAD.get(subject, 0) for subject in schedule.values()) + if total_hours > MAX_TEACHER_WORKLOAD: + return False + return True + + def ContinuousClasses(self): + """ + Ensure teachers do not have more than the allowed continuous classes. + """ + for teacher, schedule in self.teacher_schedule.items(): + sorted_slots = sorted(schedule.keys()) + continuous_count = 0 + for i in range(len(sorted_slots) - 1): + if TimeSlots.index(sorted_slots[i + 1]) - TimeSlots.index(sorted_slots[i]) == 1: + continuous_count += 1 + if continuous_count > MAX_CONTINUOUS_CLASSES: + return False + else: + continuous_count = 0 + return True + + def fitnessFunc(self): + """ + Calculate fitness score based on all constraints. + """ + fitness_score = 0 + + if self.LabNo(): + fitness_score += 10 + else: + fitness_score -= 10 + + if self.ClassNo(): + fitness_score += 10 + else: + fitness_score -= 10 + + if self.TeacherWorkload(): + fitness_score += 10 + else: + fitness_score -= 10 + + if self.ContinuousClasses(): + fitness_score += 10 + else: + fitness_score -= 10 + + return fitness_score + + +# Main Execution +timetable_fitness = TimetableFitness() + +# Assign classes and labs to teachers +timetable_fitness.assign_classes_and_labs() + +# Calculate fitness score +fitness_score = timetable_fitness.fitnessFunc() + +# Output +print(f"Final Fitness Score: {fitness_score}") + +# Save results to a JSON file +output = { + "teacher_schedule": timetable_fitness.teacher_schedule, + "fitness_score": fitness_score, + "section_strength": timetable_fitness.section_strength +} +with open("Timetable_Fitness_Result.json", "w") as f: + json.dump(output, f, indent=4) diff --git a/test_suite/Crossover_Test.py b/test_suite/Crossover_Test.py new file mode 100644 index 0000000..bce6513 --- /dev/null +++ b/test_suite/Crossover_Test.py @@ -0,0 +1,629 @@ +#CROSSOVER + +#1. def create_chromosome(self): + +import random +import unittest + +# TimetableScheduler Class +class TimetableScheduler: + def __init__(self): + self.sections = ["A", "B", "C", "D"] + self.time_slots = [1, 2, 3, 4, 5, 6, 7] # Time slots per day + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.subject_teacher_map = { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"] + } + self.classrooms = ["R1", "R2", "R3", "R4", "R5"] + self.room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} + self.section_strength = {"A": 200, "B": 200, "C": 200, "D": 100} + + def create_chromosome(self): + schedule = {} + teacher_schedule = {slot: set() for slot in self.time_slots} + room_schedule = {slot: {} for slot in self.time_slots} + + for day in self.days: + schedule[day] = {} + for section in self.sections: + schedule[day][section] = [] + used_time_slots = set() + + while len(schedule[day][section]) < 7: + subject = random.choice(list(self.subject_teacher_map.keys())) + teacher = random.choice(self.subject_teacher_map[subject]) + classroom = random.choice(self.classrooms) + + # Find an available time slot + available_slots = [ + slot for slot in self.time_slots if slot not in used_time_slots + ] + if not available_slots: + break + + time_slot = random.choice(available_slots) + + # Check for conflicts + if (teacher not in teacher_schedule[time_slot] and + section not in room_schedule[time_slot].get(classroom, [])): + + entry = { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": classroom, + "time_slot": time_slot + } + schedule[day][section].append(entry) + used_time_slots.add(time_slot) + + # Update schedules to avoid future conflicts + teacher_schedule[time_slot].add(teacher) + if classroom not in room_schedule[time_slot]: + room_schedule[time_slot][classroom] = [] + room_schedule[time_slot][classroom].append(section) + + # Ensure the section has all 7 slots for the day + if len(schedule[day][section]) < 7: + raise RuntimeError( + f"Failed to generate a complete schedule for section {section} on {day}." + ) + + return schedule + + +# Unit Test Class for TimetableScheduler +class TestTimetableScheduler(unittest.TestCase): + def setUp(self): + self.scheduler = TimetableScheduler() + + def test_schedule_for_all_days_and_sections(self): + schedule = self.scheduler.create_chromosome() + + # Check every day has all sections with 7 time slots + for day in self.scheduler.days: + self.assertIn(day, schedule) + for section in self.scheduler.sections: + self.assertIn(section, schedule[day]) + self.assertEqual(len(schedule[day][section]), 7) + + def test_conflict_free_teacher_allocation(self): + schedule = self.scheduler.create_chromosome() + + # Check for teacher conflicts + for day in self.scheduler.days: + teacher_schedule = {slot: set() for slot in self.scheduler.time_slots} + for section in self.scheduler.sections: + for entry in schedule[day][section]: + teacher = entry["teacher_id"] + time_slot = entry["time_slot"] + self.assertNotIn(teacher, teacher_schedule[time_slot]) + teacher_schedule[time_slot].add(teacher) + + def test_room_capacity(self): + schedule = self.scheduler.create_chromosome() + + # Ensure room capacity meets section strength + for day in self.scheduler.days: + for section in self.scheduler.sections: + for entry in schedule[day][section]: + classroom = entry["classroom_id"] + self.assertGreaterEqual( + self.scheduler.room_capacity[classroom], + self.scheduler.section_strength[section] + ) + + def test_time_slots_coverage(self): + schedule = self.scheduler.create_chromosome() + + # Check if all time slots are covered per section per day + for day in self.scheduler.days: + for section in self.scheduler.sections: + time_slots = [entry["time_slot"] for entry in schedule[day][section]] + self.assertEqual(len(set(time_slots)), 7) # Ensure exactly 7 slots + + +if __name__ == "__main__": + unittest.main() + +#2. def create_multiple_chromosomes(self, num_chromosomes): + +import random +import unittest +import time + +class TimetableScheduler: + def __init__(self, subjects, rooms, days, sections, max_attempts=10): + self.subjects = subjects # List of subject codes + self.rooms = rooms # List of available rooms + self.days = days # List of days in the week + self.sections = sections # List of sections + self.max_attempts = max_attempts # Max attempts to find a valid slot + + self.schedule = {} # Schedule dictionary to store the timetable + + def generate_random_schedule(self): + """ Generate a random schedule for each subject and section. """ + timetable = {} + for subject in self.subjects: + for section in self.sections: + attempts = 0 + while attempts < self.max_attempts: + # Randomly select a day, room, and time slot + day = random.choice(self.days) + room = random.choice(self.rooms) + time_slot = f"{day}_{room}" + + # Check if the time_slot is available (no conflicts) + if self.is_slot_available(subject, section, time_slot): + timetable[subject] = (section, day, room, time_slot) + break + else: + attempts += 1 + if attempts == self.max_attempts: + raise RuntimeError( + f"Failed to assign a valid slot for {subject} on {day} for {section} after {attempts} attempts." + ) + return timetable + + def is_slot_available(self, subject, section, time_slot): + """ Check if a slot is available by ensuring no conflicts. """ + # Check if any other subject has been scheduled in the same time slot + for key, value in self.schedule.items(): + if value[3] == time_slot: # Slot conflict + return False + return True + + def create_chromosome(self): + """ Create a chromosome that represents a valid timetable. """ + attempts = 0 + while attempts < self.max_attempts: + try: + timetable = self.generate_random_schedule() + self.schedule = timetable # Assign the generated schedule to the global timetable + return timetable + except RuntimeError as e: + print(f"Error: {e}") + attempts += 1 + if attempts == self.max_attempts: + raise RuntimeError("Failed to generate a valid timetable after multiple attempts.") + # Reset and retry + self.schedule = {} + + return None + + def create_multiple_chromosomes(self, num_chromosomes): + """ Create multiple chromosomes (timetables). """ + chromosomes = [] + for _ in range(num_chromosomes): + chromosome = self.create_chromosome() + if chromosome: + chromosomes.append(chromosome) + else: + print("Failed to create a valid chromosome.") + return chromosomes + + +class TestTimetableScheduler(unittest.TestCase): + + def setUp(self): + """ Setup the test case environment. """ + self.subjects = ['PCS-506', 'XCS-501', 'TCS-502', 'CSP-501', 'TCS-531'] + self.rooms = ['Room 101', 'Room 102', 'Room 103'] + self.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] + self.sections = ['A', 'B', 'C'] + + self.scheduler = TimetableScheduler(self.subjects, self.rooms, self.days, self.sections) + + def test_chromosome_structure(self): + """ Test the structure of each chromosome. """ + num_chromosomes = 3 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + for idx, chromosome in enumerate(chromosomes): + print(f"Chromosome {idx+1}:") + for subject, (section, day, room, time_slot) in chromosome.items(): + print(f"{subject} - {section} - {day} - {room} - {time_slot}") + print() + + def test_conflict_free_chromosomes(self): + """ Test that chromosomes are conflict-free. """ + num_chromosomes = 3 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + for idx, chromosome in enumerate(chromosomes): + for subject, (section, day, room, time_slot) in chromosome.items(): + # Check for conflicts (same time slot for different subjects) + for other_subject, other_values in chromosome.items(): + if subject != other_subject and time_slot == other_values[3]: + self.fail(f"Conflict detected: {subject} and {other_subject} in the same time slot: {time_slot}") + + def test_create_multiple_chromosomes_count(self): + """ Test if the correct number of chromosomes is generated. """ + num_chromosomes = 5 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + def test_room_capacity_in_multiple_chromosomes(self): + """ Test room capacity constraint across multiple chromosomes. """ + num_chromosomes = 3 + start_time = time.time() + chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) + end_time = time.time() + + self.assertEqual(len(chromosomes), num_chromosomes) + print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") + + # Test room capacity constraints for each timetable (e.g., number of rooms used) + for idx, chromosome in enumerate(chromosomes): + room_usage = {} + for subject, (section, day, room, time_slot) in chromosome.items(): + room_usage[room] = room_usage.get(room, 0) + 1 + print(f"Chromosome {idx+1} Room Usage: {room_usage}") + + +# Run the tests +if __name__ == "__main__": + unittest.main() + +#3. def crossover(self, parent1, parent2): + +import random +import unittest + +class TimetableScheduler: + def __init__(self, subjects, rooms, days, sections): + self.subjects = subjects # List of subject codes + self.rooms = rooms # List of available rooms + self.days = days # List of days in the week + self.sections = sections # List of sections + + def crossover(self, parent1, parent2): + """Perform single-point crossover on two parent chromosomes.""" + offspring1 = {} + offspring2 = {} + + days = self.days + crossover_point = random.randint(1, len(days) - 1) + + for i, day in enumerate(days): + if i < crossover_point: + offspring1[day] = parent1[day] + offspring2[day] = parent2[day] + else: + offspring1[day] = parent2[day] + offspring2[day] = parent1[day] + + return offspring1, offspring2 + +# Unit test for the crossover function +class TestCrossoverMethod(unittest.TestCase): + + def setUp(self): + # Example data to simulate chromosomes for testing + self.subjects = ['PCS-506', 'XCS-501', 'TCS-502', 'CSP-501', 'TCS-531'] + self.rooms = ['Room 101', 'Room 102', 'Room 103'] + self.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] + self.sections = ['A', 'B', 'C'] + + # Example chromosomes (parents) + self.parent1 = { + 'Monday': 'PCS-506', + 'Tuesday': 'XCS-501', + 'Wednesday': 'TCS-502', + 'Thursday': 'CSP-501', + 'Friday': 'TCS-531' + } + self.parent2 = { + 'Monday': 'TCS-502', + 'Tuesday': 'PCS-506', + 'Wednesday': 'CSP-501', + 'Thursday': 'TCS-531', + 'Friday': 'XCS-501' + } + + # Create an instance of the TimetableScheduler + self.scheduler = TimetableScheduler(self.subjects, self.rooms, self.days, self.sections) + + def test_crossover_correct_number_of_offspring(self): + """Test if crossover produces exactly two offspring.""" + offspring1, offspring2 = self.scheduler.crossover(self.parent1, self.parent2) + self.assertEqual(len(offspring1), len(self.days)) + self.assertEqual(len(offspring2), len(self.days)) + + def test_crossover_correct_assignment(self): + """Test if crossover correctly assigns the parts from parents.""" + offspring1, offspring2 = self.scheduler.crossover(self.parent1, self.parent2) + + # Get the crossover point from the offspring's first day in the timetable + crossover_point = next(i for i, day in enumerate(self.days) if offspring1[self.days[i]] != self.parent1[self.days[i]]) + + # Check the assignment from parent1 and parent2 in the offspring + for i in range(crossover_point): + self.assertEqual(offspring1[self.days[i]], self.parent1[self.days[i]]) + self.assertEqual(offspring2[self.days[i]], self.parent2[self.days[i]]) + + for i in range(crossover_point, len(self.days)): + self.assertEqual(offspring1[self.days[i]], self.parent2[self.days[i]]) + self.assertEqual(offspring2[self.days[i]], self.parent1[self.days[i]]) + + def test_crossover_randomness(self): + """Test if the crossover point is truly random by checking different results.""" + offspring1_a, offspring2_a = self.scheduler.crossover(self.parent1, self.parent2) + offspring1_b, offspring2_b = self.scheduler.crossover(self.parent1, self.parent2) + + # Check that the offspring are not the same (i.e., crossover point was different) + self.assertNotEqual(offspring1_a, offspring1_b) + self.assertNotEqual(offspring2_a, offspring2_b) + + def test_crossover_empty_parent(self): + """Test if crossover handles empty parents gracefully.""" + empty_parent = {} + with self.assertRaises(KeyError): + self.scheduler.crossover(empty_parent, self.parent2) + + with self.assertRaises(KeyError): + self.scheduler.crossover(self.parent1, empty_parent) + + +if __name__ == '__main__': + unittest.main() + +#4. def mutate_timetable(self, chromosome, mutation_rate=0.7): + +import random +import unittest + +class TimetableScheduler: + def __init__(self, classrooms, sections, time_slots): + self.classrooms = classrooms # List of classrooms available for assignment + self.sections = sections # List of sections + self.time_slots = time_slots # List of time slots available for scheduling + + def mutate_timetable(self, chromosome, mutation_rate=0.7): + """Applies mutation to a timetable chromosome.""" + classrooms = self.classrooms + sections = self.sections + mutated_chromosome = chromosome.copy() + + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + if random.random() < mutation_rate: + entry["time_slot"] = random.choice(self.time_slots) + entry["classroom_id"] = random.choice(classrooms) + entry["section"] = random.choice(sections) + + return mutated_chromosome + + +class TestMutateTimetable(unittest.TestCase): + + def setUp(self): + # Example data to simulate a timetable chromosome + self.classrooms = ['Room 101', 'Room 102', 'Room 103'] + self.sections = ['A', 'B', 'C'] + self.time_slots = ['9:00 AM', '10:00 AM', '11:00 AM', '1:00 PM', '2:00 PM'] + + # Example timetable (chromosome) + self.chromosome = { + 'Monday': { + 'A': [{'time_slot': '9:00 AM', 'classroom_id': 'Room 101', 'section': 'A'}], + 'B': [{'time_slot': '10:00 AM', 'classroom_id': 'Room 102', 'section': 'B'}], + 'C': [{'time_slot': '11:00 AM', 'classroom_id': 'Room 103', 'section': 'C'}], + }, + 'Tuesday': { + 'A': [{'time_slot': '9:00 AM', 'classroom_id': 'Room 101', 'section': 'A'}], + 'B': [{'time_slot': '10:00 AM', 'classroom_id': 'Room 102', 'section': 'B'}], + 'C': [{'time_slot': '11:00 AM', 'classroom_id': 'Room 103', 'section': 'C'}], + } + } + + # Create an instance of the TimetableScheduler + self.scheduler = TimetableScheduler(self.classrooms, self.sections, self.time_slots) + + def test_mutation_occurrence(self): + """Test if the mutation occurs with the expected frequency.""" + mutation_rate = 0.7 # Mutation rate is set to 70% + + # Run multiple mutations to get more stable results + num_runs = 10 # You can try more runs for higher accuracy + mutation_count = 0 + total_entries = sum(len(entries) for day in self.chromosome.values() for section, entries in day.items()) + + for _ in range(num_runs): + mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate) + + # Count how many entries were mutated + mutated_count = 0 + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + # Check if the mutation applied (i.e., values changed) + if entry["time_slot"] != '9:00 AM' or entry["classroom_id"] != 'Room 101' or entry["section"] != 'A': + mutated_count += 1 + + mutation_percentage = mutated_count / total_entries + mutation_count += mutation_percentage # Accumulate mutation percentages + + # Calculate average mutation rate across runs + average_mutation_percentage = mutation_count / num_runs + print(f"Average Mutation Rate: {average_mutation_percentage}") # To check the mutation rate in the output + + # Assert that mutation occurs in the expected range + self.assertGreaterEqual(average_mutation_percentage, 0.5) # At least 50% mutation + self.assertLessEqual(average_mutation_percentage, 1.0) # No more than 100% mutation + + def test_mutate_timetable(self): + """Test if mutation correctly applies changes to the timetable.""" + mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate=1.0) + + # Check if mutation has applied changes + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + # Check if time_slot, classroom_id, and section have been mutated + self.assertIn(entry["time_slot"], self.time_slots) + self.assertIn(entry["classroom_id"], self.classrooms) + self.assertIn(entry["section"], self.sections) + + def test_mutation_validity(self): + """Test if the mutated timetable remains valid.""" + mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate=1.0) + + # Validate that the mutation results in valid values (time_slot, classroom_id, section) + for day, section_schedule in mutated_chromosome.items(): + for section, entries in section_schedule.items(): + for entry in entries: + # Ensure the mutated values are within the expected lists + self.assertIn(entry["time_slot"], self.time_slots) + self.assertIn(entry["classroom_id"], self.classrooms) + self.assertIn(entry["section"], self.sections) + + def test_mutate_empty_chromosome(self): + """Test mutation with an empty chromosome.""" + empty_chromosome = {} + mutated_chromosome = self.scheduler.mutate_timetable(empty_chromosome, mutation_rate=1.0) + self.assertEqual(mutated_chromosome, empty_chromosome) # Should remain empty + + +if __name__ == '__main__': + unittest.main() + +#5.def print_chromosomes(self, chromosomes): + +import unittest +from unittest.mock import patch +from io import StringIO + +class TimetableScheduler: + def __init__(self, classrooms, sections, teachers, subjects, time_slots): + self.classrooms = classrooms # List of classrooms available for assignment + self.sections = sections # List of sections + self.teachers = teachers # List of teacher IDs + self.subjects = subjects # List of subject IDs + self.time_slots = time_slots # List of time slots available for scheduling + + def print_chromosomes(self, chromosomes): + for idx, chromosome in enumerate(chromosomes, 1): + print(f"\nChromosome {idx}:") + for day, sections in chromosome.items(): + print(f" {day}:") + for section, schedule in sections.items(): + print(f" Section {section}:") + for entry in schedule: + print(f" Time Slot: {entry['time_slot']}") + print(f" Teacher ID: {entry['teacher_id']}") + print(f" Subject ID: {entry['subject_id']}") + print(f" Classroom ID: {entry['classroom_id']}") + print() + + +class TestTimetableScheduler(unittest.TestCase): + + def setUp(self): + # Example data to simulate a timetable chromosome + self.classrooms = ['Room 101', 'Room 102', 'Room 103'] + self.sections = ['A', 'B', 'C'] + self.teachers = ['T1', 'T2', 'T3'] + self.subjects = ['S1', 'S2', 'S3'] + self.time_slots = ['9:00 AM', '10:00 AM', '11:00 AM', '1:00 PM', '2:00 PM'] + + # Example timetable chromosomes + self.chromosomes = [ + { + 'Monday': { + 'A': [{'time_slot': '9:00 AM', 'teacher_id': 'T1', 'subject_id': 'S1', 'classroom_id': 'Room 101'}], + 'B': [{'time_slot': '10:00 AM', 'teacher_id': 'T2', 'subject_id': 'S2', 'classroom_id': 'Room 102'}], + 'C': [{'time_slot': '11:00 AM', 'teacher_id': 'T3', 'subject_id': 'S3', 'classroom_id': 'Room 103'}], + }, + 'Tuesday': { + 'A': [{'time_slot': '9:00 AM', 'teacher_id': 'T1', 'subject_id': 'S1', 'classroom_id': 'Room 101'}], + 'B': [{'time_slot': '10:00 AM', 'teacher_id': 'T2', 'subject_id': 'S2', 'classroom_id': 'Room 102'}], + 'C': [{'time_slot': '11:00 AM', 'teacher_id': 'T3', 'subject_id': 'S3', 'classroom_id': 'Room 103'}], + } + } + ] + + # Create an instance of the TimetableScheduler + self.scheduler = TimetableScheduler(self.classrooms, self.sections, self.teachers, self.subjects, self.time_slots) + + @patch('sys.stdout', new_callable=StringIO) + def test_print_chromosomes(self, mock_stdout): + """Test if print_chromosomes correctly prints the chromosome information.""" + self.scheduler.print_chromosomes(self.chromosomes) + + # Get the printed output + output = mock_stdout.getvalue() + + # Expected output for the given chromosomes + expected_output = """ +Chromosome 1: + Monday: + Section A: + Time Slot: 9:00 AM + Teacher ID: T1 + Subject ID: S1 + Classroom ID: Room 101 + + Section B: + Time Slot: 10:00 AM + Teacher ID: T2 + Subject ID: S2 + Classroom ID: Room 102 + + Section C: + Time Slot: 11:00 AM + Teacher ID: T3 + Subject ID: S3 + Classroom ID: Room 103 + + Tuesday: + Section A: + Time Slot: 9:00 AM + Teacher ID: T1 + Subject ID: S1 + Classroom ID: Room 101 + + Section B: + Time Slot: 10:00 AM + Teacher ID: T2 + Subject ID: S2 + Classroom ID: Room 102 + + Section C: + Time Slot: 11:00 AM + Teacher ID: T3 + Subject ID: S3 + Classroom ID: Room 103 +""" + # Clean up any extra whitespace from the actual output + output = output.strip() + + # Assert if the output matches the expected output + self.assertEqual(output, expected_output.strip()) + +if __name__ == '__main__': + unittest.main() diff --git a/test_suite/Fitness_Test.py b/test_suite/Fitness_Test.py new file mode 100644 index 0000000..43b709b --- /dev/null +++ b/test_suite/Fitness_Test.py @@ -0,0 +1,692 @@ +# FITNESS + +#1. def __init__(self, sections): + +import unittest + +class Sections: + def __init__(self, num_sections): + # Generate sections as sectionA, sectionB, sectionC, etc. + self.sections = [f"section{chr(65 + i)}" for i in range(num_sections)] + + def __iter__(self): + # Make the class iterable by returning an iterator over the sections list + return iter(self.sections) + + def __len__(self): + # Optionally, define the length of the sections + return len(self.sections) + + def __getitem__(self, index): + # Optional: Enable indexing for the sections + return self.sections[index] + + +# TimetableFitness Class (to manage and calculate timetable fitness) +class TimetableFitness: + def __init__(self, sections): + # Ensure `self.sections` is iterable (convert Sections object to a list if needed) + if isinstance(sections, Sections): + self.sections = list(sections) # Convert to list if it is a custom iterable object + else: + self.sections = sections # Assume it is already a list or other iterable + + # Mocking additional data attributes for the sake of this example + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.time_slots = ["9-10 AM", "10-11 AM", "11-12 PM", "1-2 PM", "2-3 PM"] + + # Teacher-subject mapping + self.subject_teacher_map = {"TCS-531": ["Teacher1", "Teacher2"], "TCS-502": ["Teacher3", "Teacher4"]} + + # Classroom and capacity details + self.classrooms = ["Room1", "Room2", "Room3"] + self.room_capacity = {"Room1": 30, "Room2": 25, "Room3": 40} + + # Data structures for tracking schedules + self.teacher_schedule = {slot: {} for slot in self.time_slots} + self.room_schedule = {slot: {} for slot in self.time_slots} + self.assigned_teachers = {section: {} for section in self.sections} + self.section_rooms = {section: self.classrooms[i % len(self.classrooms)] for i, section in enumerate(self.sections)} + + # Subject-specific constraints + self.subject_weekly_quota = { + "TCS-531": 3, + "TCS-502": 3, + "Placement_Class": 1 + } + + self.weekly_assignments = {section: {subject: 0 for subject in self.subject_weekly_quota} for section in self.sections} + + # Teacher constraints + self.teacher_preferences = {teacher_id: [1, 2, 3, 4, 5, 6, 7] for teacher_id in ["Teacher1", "Teacher2", "Teacher3", "Teacher4"]} + self.teacher_work_load = {teacher: 5 for teacher in self.teacher_preferences} + self.teacher_assignments = {} + + +# Unit Test Class +class TestTimetableFitness(unittest.TestCase): + def setUp(self): + # Create an instance of Sections with 5 sections + self.sections = Sections(5) + self.timetable_fitness = TimetableFitness(self.sections) + + def test_sections_iterable(self): + # Test that Sections object is iterable + sections_list = list(self.sections) + expected_sections = ["sectionA", "sectionB", "sectionC", "sectionD", "sectionE"] + self.assertEqual(sections_list, expected_sections) + + def test_section_rooms_mapping(self): + # Test that each section is mapped to a classroom + section_rooms = self.timetable_fitness.section_rooms + self.assertEqual(len(section_rooms), len(self.sections)) + self.assertTrue(all(section in section_rooms for section in self.sections)) + + def test_assigned_teachers_structure(self): + # Test that assigned teachers structure is initialized correctly + assigned_teachers = self.timetable_fitness.assigned_teachers + self.assertEqual(len(assigned_teachers), len(self.sections)) + self.assertTrue(all(section in assigned_teachers for section in self.sections)) + + +if __name__ == "__main__": + unittest.main() + +#2. def generate_day_schedule(self, day, half_day_sections, week_number): + +import random +from collections import defaultdict + +class TimetableGenerator: + def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab): + self.sections = sections + self.time_slots = time_slots + self.subject_teacher_map = subject_teacher_map + self.section_rooms = section_rooms + self.lab = lab + self.weekly_assignments = defaultdict(lambda: defaultdict(int)) + self.teacher_schedule = defaultdict(dict) + self.room_schedule = defaultdict(dict) + self.teacher_assignments = defaultdict(dict) + + def generate_day_schedule(self, day, half_day_sections, week_number): + day_schedule = {} + subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + + for section in self.sections: + section_schedule = [] + subjects_used_today = set() + current_room = self.section_rooms[section] + num_slots = 4 if section in half_day_sections else 7 + + index = 1 + while index <= num_slots: + time_slot = self.time_slots[index] + + # Skip if time_slot is already used + if any(item['time_slot'] == time_slot for item in section_schedule): + index += 1 + continue + + available_subjects = list(self.subject_teacher_map.keys()) + subject, teacher = None, None + is_lab = False + + while available_subjects: + subject = random.choice(available_subjects) + + # Handle special rules for Placement_Class and labs + if subject == "Placement_Class" and index != 6: + available_subjects.remove(subject) + continue + + if "Lab" in subject: + if index + 1 > num_slots: # Ensure space for double slot + available_subjects.remove(subject) + continue + is_lab = True # Mark this as a lab + + if subject not in subjects_used_today: + teacher_iter = subject_teacher_usage[subject] + try: + teacher = next(teacher_iter) + except StopIteration: + teacher_iter = iter(self.subject_teacher_map[subject]) + teacher = next(teacher_iter) + subject_teacher_usage[subject] = teacher_iter + break + + available_subjects.remove(subject) + + if subject is None or teacher is None: + subject, teacher = "Library", "None" + + if subject != "Library": + self.weekly_assignments[section][subject] += 1 + + subjects_used_today.add(subject) + + # Assign rooms based on whether it's a lab + assigned_room = random.choice(self.lab) if is_lab else current_room + self.teacher_schedule[time_slot][teacher] = section + self.room_schedule[time_slot][assigned_room] = section + + # Handle double slot allocation for labs + if is_lab: + next_slot_index = index + 1 + if next_slot_index <= num_slots: + next_time_slot = self.time_slots[next_slot_index] + section_schedule.append({ + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot + }) + self.room_schedule[next_time_slot][assigned_room] = section + self.teacher_schedule[next_time_slot][teacher] = section + index += 1 # Skip the next slot for lab + + section_schedule.append({ + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": time_slot + }) + + index += 1 + + day_schedule[section] = section_schedule + return day_schedule +import unittest + +class TestGenerateDaySchedule(unittest.TestCase): + def setUp(self): + self.sections = ["A", "B", "C"] + self.time_slots = { + 1: "9:00-10:00", + 2: "10:00-11:00", + 3: "11:00-12:00", + 4: "12:00-1:00", + 5: "2:00-3:00", + 6: "3:00-4:00", + 7: "4:00-5:00" + } + self.subject_teacher_map = { + "Math": ["T1", "T2"], + "Physics": ["T3"], + "Chemistry Lab": ["T4"], + "Placement_Class": ["T5"], + } + self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} + self.lab = ["Lab1", "Lab2"] + self.tt = TimetableGenerator( + self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, self.lab + ) + + def test_schedule_structure(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + self.assertIsInstance(schedule, dict) + for section, section_schedule in schedule.items(): + self.assertIsInstance(section_schedule, list) + for entry in section_schedule: + self.assertIn("teacher_id", entry) + self.assertIn("subject_id", entry) + self.assertIn("classroom_id", entry) + self.assertIn("time_slot", entry) + + def test_half_day_slots(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + if section == "A": + self.assertEqual(len(section_schedule), 4) + else: + self.assertEqual(len(section_schedule), 7) + + def test_no_repeated_time_slots(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + time_slots = [entry["time_slot"] for entry in section_schedule] + self.assertEqual(len(time_slots), len(set(time_slots))) + + def test_lab_double_slots(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + for i, entry in enumerate(section_schedule): + if "Lab" in entry['subject_id']: + current_slot = entry['time_slot'] + current_index = list(self.tt.time_slots.values()).index(current_slot) + + # Check if the lab occupies the next time slot + if current_index + 1 < len(self.tt.time_slots): + next_slot = section_schedule[i + 1]['time_slot'] + expected_next_slot = self.tt.time_slots[current_index + 1] + self.assertEqual( + next_slot, + expected_next_slot, + f"Lab for section {section} did not occupy consecutive slots as expected." + ) + + def test_teacher_and_room_assignments(self): + schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) + for section, section_schedule in schedule.items(): + for entry in section_schedule: + teacher = entry['teacher_id'] + room = entry['classroom_id'] + time_slot = entry['time_slot'] + self.assertIn(teacher, self.tt.teacher_schedule[time_slot]) + self.assertIn(room, self.tt.room_schedule[time_slot]) + + +if __name__ == "__main__": + unittest.main() + +#3. def create_timetable(self, num_weeks=1): + +import unittest +from collections import defaultdict +import random + +class TimetableGenerator: + def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab): + self.sections = sections + self.time_slots = time_slots + self.subject_teacher_map = subject_teacher_map + self.section_rooms = section_rooms + self.lab = lab + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] # Ensure days are initialized + self.weekly_assignments = defaultdict(lambda: defaultdict(int)) + self.teacher_schedule = defaultdict(dict) + self.room_schedule = defaultdict(dict) + self.teacher_assignments = defaultdict(dict) + + def generate_day_schedule(self, day, half_day_sections, week_number): + day_schedule = {} + subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + + for section in self.sections: + section_schedule = [] + subjects_used_today = set() + current_room = self.section_rooms[section] + num_slots = 4 if section in half_day_sections else 7 + + for index in range(1, num_slots + 1): + time_slot = self.time_slots[index] + + # Skip if time_slot is already used + if any(item["time_slot"] == time_slot for item in section_schedule): + continue + + available_subjects = list(self.subject_teacher_map.keys()) + subject, teacher = None, None + is_lab = False + + while available_subjects: + subject = random.choice(available_subjects) + + # Handle special rules for Placement_Class and labs + if subject == "Placement_Class" and index <= 4: # Placement classes are after lunch + available_subjects.remove(subject) + continue + + if "Lab" in subject: + if index + 1 > num_slots: # Ensure space for double slot + available_subjects.remove(subject) + continue + is_lab = True # Mark this as a lab + + if subject not in subjects_used_today: + teacher_iter = subject_teacher_usage[subject] + try: + teacher = next(teacher_iter) + self.teacher_assignments.setdefault(section, {})[subject] = teacher + except StopIteration: + teacher_iter = iter(self.subject_teacher_map[subject]) + teacher = next(teacher_iter) + subject_teacher_usage[subject] = teacher_iter + self.teacher_assignments.setdefault(section, {})[subject] = teacher + + break + + available_subjects.remove(subject) + + if subject is None or teacher is None: + subject, teacher = "Library", "None" + + if subject != "Library": + self.weekly_assignments[section][subject] += 1 + + subjects_used_today.add(subject) + + # Assign rooms based on whether it's a lab + if is_lab: + assigned_room = random.choice(self.lab) + else: + assigned_room = current_room + + self.teacher_schedule[time_slot][teacher] = section + self.room_schedule[time_slot][assigned_room] = section + + # Handle double slot allocation for labs + if is_lab: + next_slot_index = index + 1 + if next_slot_index <= num_slots: + next_time_slot = self.time_slots[next_slot_index] + + # Assign consecutive slot to the lab + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + } + ) + self.room_schedule[next_time_slot][assigned_room] = section + self.teacher_schedule[next_time_slot][teacher] = section + index += 1 # Skip the next slot for lab + + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + } + ) + + day_schedule[section] = section_schedule + return day_schedule + + def create_timetable(self, num_weeks=1): + timetable = {} + for week in range(1, num_weeks + 1): + week_schedule = {} + for week_day in self.days: + half_day_sections = random.sample(self.sections, len(self.sections) // 2) + week_schedule[week_day] = self.generate_day_schedule(week_day, half_day_sections, week) + timetable[f"Week {week}"] = week_schedule + return timetable + + +class TestTimetableGenerator(unittest.TestCase): + def setUp(self): + self.sections = ["A", "B", "C"] + self.time_slots = { + 1: "9:00-10:00", + 2: "10:00-11:00", + 3: "11:00-12:00", + 4: "12:00-1:00", + 5: "2:00-3:00", + 6: "3:00-4:00", + 7: "4:00-5:00" + } + self.subject_teacher_map = { + "Math": ["T1", "T2"], + "Physics": ["T3"], + "Chemistry Lab": ["T4"], + "Placement_Class": ["T5"], + } + self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} + self.lab = ["Lab1", "Lab2"] + self.tt = TimetableGenerator( + self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, self.lab + ) + + def test_create_timetable(self): + timetable = self.tt.create_timetable(num_weeks=2) + self.assertIsInstance(timetable, dict) + self.assertGreater(len(timetable), 0) + self.assertIn("Week 1", timetable) + self.assertIn("Week 2", timetable) + + # Verify timetable structure + for week, week_schedule in timetable.items(): + self.assertIsInstance(week_schedule, dict) + for day, day_schedule in week_schedule.items(): + self.assertIsInstance(day_schedule, dict) + for section, section_schedule in day_schedule.items(): + self.assertIsInstance(section_schedule, list) + for entry in section_schedule: + self.assertIn("teacher_id", entry) + self.assertIn("subject_id", entry) + self.assertIn("classroom_id", entry) + self.assertIn("time_slot", entry) + +if __name__ == "__main__": + unittest.main() + +#4. def calculate_fitness(self, chromosome): + +import unittest +from collections import defaultdict +import random + +class TimetableGenerator: + def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab, section_strength, room_capacity, teacher_preferences, teacher_work_load): + self.sections = sections + self.time_slots = time_slots + self.subject_teacher_map = subject_teacher_map + self.section_rooms = section_rooms + self.lab = lab + self.section_strength = section_strength + self.room_capacity = room_capacity + self.teacher_preferences = teacher_preferences + self.teacher_work_load = teacher_work_load + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.weekly_assignments = defaultdict(lambda: defaultdict(int)) + self.teacher_schedule = defaultdict(dict) + self.room_schedule = defaultdict(dict) + self.teacher_assignments = defaultdict(dict) + + def generate_day_schedule(self, day, half_day_sections, week_number): + day_schedule = {} + subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + + for section in self.sections: + section_schedule = [] + subjects_used_today = set() + current_room = self.section_rooms[section] + num_slots = 4 if section in half_day_sections else 7 + + for index in range(1, num_slots + 1): + time_slot = self.time_slots[index] + + if any(item["time_slot"] == time_slot for item in section_schedule): + continue + + available_subjects = list(self.subject_teacher_map.keys()) + subject, teacher = None, None + is_lab = False + + while available_subjects: + subject = random.choice(available_subjects) + + if subject == "Placement_Class" and index <= 4: + available_subjects.remove(subject) + continue + + if "Lab" in subject: + if index + 1 > num_slots: + available_subjects.remove(subject) + continue + is_lab = True + + if subject not in subjects_used_today: + teacher_iter = subject_teacher_usage[subject] + try: + teacher = next(teacher_iter) + self.teacher_assignments.setdefault(section, {})[subject] = teacher + except StopIteration: + teacher_iter = iter(self.subject_teacher_map[subject]) + teacher = next(teacher_iter) + subject_teacher_usage[subject] = teacher_iter + self.teacher_assignments.setdefault(section, {})[subject] = teacher + + break + + available_subjects.remove(subject) + + if subject is None or teacher is None: + subject, teacher = "Library", "None" + + if subject != "Library": + self.weekly_assignments[section][subject] += 1 + + subjects_used_today.add(subject) + + if is_lab: + assigned_room = random.choice(self.lab) + else: + assigned_room = current_room + + self.teacher_schedule[time_slot][teacher] = section + self.room_schedule[time_slot][assigned_room] = section + + if is_lab: + next_slot_index = index + 1 + if next_slot_index <= num_slots: + next_time_slot = self.time_slots[next_slot_index] + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + } + ) + self.room_schedule[next_time_slot][assigned_room] = section + self.teacher_schedule[next_time_slot][teacher] = section + index += 1 + + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + } + ) + + day_schedule[section] = section_schedule + return day_schedule + + def calculate_fitness(self, chromosome): + week_fitness_scores = [] + + for week_num, (week, week_schedule) in enumerate(chromosome.items(), start=1): + overall_fitness_score = 0 + section_fitness_scores = {} + + for day, day_schedule in week_schedule.items(): + section_fitness_scores[day] = {} + + for section, section_schedule in day_schedule.items(): + section_score = 100 + teacher_time_slots = {} + classroom_time_slots = {} + teacher_load = {} + + for item in section_schedule: + teacher = item['teacher_id'] + classroom = item['classroom_id'] + time_slot = item['time_slot'] + strength = self.section_strength.get(section, 0) + + if "Break" in time_slot: + continue + + if (teacher, time_slot) in teacher_time_slots: + section_score -= 30 + else: + teacher_time_slots[(teacher, time_slot)] = section + + if (classroom, time_slot) in classroom_time_slots: + section_score -= 20 + else: + classroom_time_slots[(classroom, time_slot)] = section + + if teacher not in teacher_load: + teacher_load[teacher] = [] + teacher_load[teacher].append(time_slot) + + if strength > self.room_capacity.get(classroom, 0): + section_score -= 25 + + preferred_slots = self.teacher_preferences.get(teacher, []) + if time_slot not in preferred_slots: + section_score -= 5 + + for teacher, time_slots in teacher_load.items(): + if len(time_slots) > self.teacher_work_load.get(teacher, 5): + section_score -= 10 + + section_fitness_scores[day][section] = section_score + overall_fitness_score += section_score + + week_fitness_scores.append({ + "week": f"Week {week_num}", + "score": overall_fitness_score + }) + + return week_fitness_scores, section_fitness_scores + + +class TestTimetableGenerator(unittest.TestCase): + def setUp(self): + self.sections = ["A", "B", "C"] + self.time_slots = { + 1: "9:00-10:00", + 2: "10:00-11:00", + 3: "11:00-12:00", + 4: "12:00-1:00", + 5: "2:00-3:00", + 6: "3:00-4:00", + 7: "4:00-5:00" + } + self.subject_teacher_map = { + "Math": ["T1", "T2"], + "Physics": ["T3"], + "Chemistry Lab": ["T4"], + "Placement_Class": ["T5"], + } + self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} + self.lab = ["Lab1", "Lab2"] + self.section_strength = {"A": 40, "B": 35, "C": 50} + self.room_capacity = {"R1": 40, "R2": 35, "R3": 50} + self.teacher_preferences = {"T1": ["9:00-10:00", "3:00-4:00"], "T2": ["10:00-11:00"]} + self.teacher_work_load = {"T1": 10, "T2": 15, "T3": 8, "T4": 12, "T5": 6} + + self.tt = TimetableGenerator( + self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, + self.lab, self.section_strength, self.room_capacity, self.teacher_preferences, self.teacher_work_load + ) + + def test_calculate_fitness(self): + # Create a mock chromosome with timetable data + chromosome = { + "Week 1": { + "Monday": { + "A": [{"teacher_id": "T1", "subject_id": "Math", "classroom_id": "R1", "time_slot": "9:00-10:00"}], + "B": [{"teacher_id": "T3", "subject_id": "Physics", "classroom_id": "R2", "time_slot": "10:00-11:00"}], + }, + "Tuesday": { + "C": [{"teacher_id": "T4", "subject_id": "Chemistry Lab", "classroom_id": "Lab1", "time_slot": "11:00-12:00"}], + } + } + } + + week_fitness_scores, section_fitness_scores = self.tt.calculate_fitness(chromosome) + + # Test the overall fitness score for Week 1 + self.assertIsInstance(week_fitness_scores, list) + self.assertGreater(len(week_fitness_scores), 0) + self.assertEqual(week_fitness_scores[0]["week"], "Week 1") + self.assertIn("score", week_fitness_scores[0]) + + # Test the section fitness score for a specific day and section + self.assertIn("Monday", section_fitness_scores) + self.assertIn("A", section_fitness_scores["Monday"]) + self.assertIsInstance(section_fitness_scores["Monday"]["A"], int) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/test_suite/Mutation_Test.py b/test_suite/Mutation_Test.py new file mode 100644 index 0000000..8e0e1aa --- /dev/null +++ b/test_suite/Mutation_Test.py @@ -0,0 +1,366 @@ +#MUTATION TESTS + +#1. def mutate_time_slots_in_section(self, schedule, section): + +import unittest +import random + +class TestMutateTimeSlots(unittest.TestCase): + def setUp(self): + # Initialize a mock schedule for testing + self.schedule = { + "SectionA": [ + {"subject": "Math", "time_slot": "9:00-10:00"}, + {"subject": "English", "time_slot": "10:00-11:00"}, + {"subject": "Science", "time_slot": "11:00-12:00"} + ], + "SectionB": [ + {"subject": "History", "time_slot": "9:00-10:00"}, + ], + "SectionC": [] # Empty section + } + + def mutate_time_slots_in_section(self, schedule, section): + """ + Mutates the time slots within a particular section by shuffling them. + + Args: + schedule (dict): The schedule containing sections and their data. + section (str): The section in which mutation should occur. + + Returns: + bool: True if mutation was performed, False otherwise. + """ + if section in schedule: + section_list = schedule[section] + + if len(section_list) < 2: + return False + + time_slots = [entry["time_slot"] for entry in section_list] + random.shuffle(time_slots) + + for i, entry in enumerate(section_list): + entry["time_slot"] = time_slots[i] + + return True + return False + + def test_valid_mutation(self): + # Test a valid mutation for SectionA + original_schedule = [entry["time_slot"] for entry in self.schedule["SectionA"]] + result = self.mutate_time_slots_in_section(self.schedule, "SectionA") + self.assertTrue(result, "Mutation should occur with valid input") + mutated_schedule = [entry["time_slot"] for entry in self.schedule["SectionA"]] + + # Check if time slots were shuffled + self.assertNotEqual(original_schedule, mutated_schedule, "Schedules should differ after mutation") + self.assertCountEqual(original_schedule, mutated_schedule, "Schedules should have the same elements after mutation") + + def test_not_enough_time_slots(self): + # Test mutation for SectionB (not enough time slots to shuffle) + result = self.mutate_time_slots_in_section(self.schedule, "SectionB") + self.assertFalse(result, "Mutation should not occur for single-element sections") + + def test_empty_section(self): + # Test mutation for SectionC (empty section) + result = self.mutate_time_slots_in_section(self.schedule, "SectionC") + self.assertFalse(result, "Mutation should not occur for empty sections") + + def test_non_existent_section(self): + # Test mutation for a section not in the schedule + result = self.mutate_time_slots_in_section(self.schedule, "SectionD") + self.assertFalse(result, "Mutation should not occur for non-existent sections") + +if __name__ == "__main__": + unittest.main(verbosity=2) + + + +#2. def mutate_schedule_for_week(self, weekly_schedule): + +import unittest +import random +import copy +from unittest.mock import patch + + +class Mutator: + def __init__(self, mutation_rate=0.5): + self.mutation_rate = mutation_rate + + def mutate_time_slots_in_section(self, schedule, section): + """ + Mutates the time slots within a particular section by shuffling them. + + Args: + schedule (dict): The schedule containing sections and their data. + section (str): The section in which mutation should occur. + + Returns: + bool: True if mutation was performed, False otherwise. + """ + if section in schedule: + section_list = schedule[section] + if len(section_list) < 2: + return False # Not enough time slots to shuffle. + + original_slots = [entry["time_slot"] for entry in section_list] + mutated_slots = original_slots[:] + attempt_count = 0 + + while mutated_slots == original_slots and attempt_count < 5: # Ensure mutation occurs + random.shuffle(mutated_slots) + attempt_count += 1 + + if mutated_slots != original_slots: + for i, entry in enumerate(section_list): + entry["time_slot"] = mutated_slots[i] + return True + + return False + + def mutate_schedule_for_week(self, weekly_schedule): + """ + Mutates the time slots for all weekdays in the weekly schedule. + + Args: + weekly_schedule (dict): The weekly schedule containing days, sections, and data. + + Returns: + dict: The mutated weekly schedule. + """ + mutated_weekly_schedule = copy.deepcopy(weekly_schedule) + has_mutation = False # Track if any mutation occurs + + for day, day_schedule in mutated_weekly_schedule.items(): + total_sections = list(day_schedule.keys()) + num_to_mutate = max(1, int(self.mutation_rate * len(total_sections))) + + sections_to_mutate = random.sample(total_sections, num_to_mutate) + + for section in sections_to_mutate: + if self.mutate_time_slots_in_section(day_schedule, section): + has_mutation = True + + if not has_mutation: # Ensure at least one mutation occurs + random_section = random.choice(list(mutated_weekly_schedule.values())) + random_section_name = random.choice(list(random_section.keys())) + self.mutate_time_slots_in_section(random_section, random_section_name) + + return mutated_weekly_schedule + + def print_weekly_schedule(self, weekly_schedule): + """ + Prints the weekly schedule in a readable format. + + Args: + weekly_schedule (dict): The weekly schedule to print. + """ + print("\nWeekly Schedule:") + print("=" * 50) + for day, day_schedule in weekly_schedule.items(): + print(f"Day: {day}") + print("-" * 30) + for section, entries in day_schedule.items(): + print(f" Section {section}:") + for entry in entries: + print( + f" Teacher: {entry['teacher_id']}, Subject: {entry['subject_id']}, " + f"Time Slot: {entry['time_slot']}" + ) + print("=" * 50) + + +class TestMutation(unittest.TestCase): + def setUp(self): + self.weekly_schedule = { + "Monday": { + "A": [ + {"teacher_id": "T1", "subject_id": "Math", "time_slot": "9:00 - 9:55"}, + {"teacher_id": "T2", "subject_id": "Physics", "time_slot": "9:55 - 10:50"}, + ], + "B": [ + {"teacher_id": "T3", "subject_id": "Chemistry", "time_slot": "11:10 - 12:05"}, + {"teacher_id": "T4", "subject_id": "Biology", "time_slot": "12:05 - 1:00"}, + ], + }, + "Tuesday": { + "A": [ + {"teacher_id": "T5", "subject_id": "History", "time_slot": "1:20 - 2:15"}, + ] + }, + } + self.mutator = Mutator() + + def test_default_mutation_rate(self): + self.assertEqual(self.mutator.mutation_rate, 0.5) + + def test_mutate_time_slots_in_section(self): + section_schedule = [ + {"teacher_id": "T1", "subject_id": "Math", "time_slot": "9:00 - 9:55"}, + {"teacher_id": "T2", "subject_id": "Physics", "time_slot": "9:55 - 10:50"}, + ] + original_schedule = copy.deepcopy(section_schedule) + result = self.mutator.mutate_time_slots_in_section({"A": section_schedule}, "A") + self.assertTrue(result) + mutated_schedule = section_schedule + self.assertNotEqual( + [entry["time_slot"] for entry in original_schedule], + [entry["time_slot"] for entry in mutated_schedule], + "Time slots were not mutated", + ) + + @patch("random.shuffle") + def test_mutate_schedule_for_week(self, mock_shuffle): + # Mock shuffle to ensure mutation logic works. + def mock_shuffle_fn(lst): + lst.reverse() + + mock_shuffle.side_effect = mock_shuffle_fn + + mutated_schedule = self.mutator.mutate_schedule_for_week(self.weekly_schedule) + self.assertIsInstance(mutated_schedule, dict) + + # Ensure the time slots are not identical + original_time_slots = [ + entry["time_slot"] + for day in self.weekly_schedule.values() + for section in day.values() + for entry in section + ] + mutated_time_slots = [ + entry["time_slot"] + for day in mutated_schedule.values() + for section in day.values() + for entry in section + ] + self.assertNotEqual(original_time_slots, mutated_time_slots, "Mutation did not occur.") + + def test_print_weekly_schedule(self): + # This is primarily for manual verification; ensure no exceptions occur + self.mutator.print_weekly_schedule(self.weekly_schedule) + + +if __name__ == "__main__": + unittest.main() + + +#3. def print_weekly_schedule(self, weekly_schedule): + +import unittest +from unittest.mock import patch +import random +import copy +from Samples.Mutation_Files.mutation import Mutation + +class TestMutation(unittest.TestCase): + + def setUp(self): + """Setup a basic schedule for testing.""" + self.schedule = { + "Monday": { + "A": [ + {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:55 - 10:50"}, + {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:00 - 9:55"} + ] + }, + "Tuesday": { + "A": [{"teacher_id": "AK22", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55"}], + "B": [{"teacher_id": "BJ16", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50"}] + } + } + + def test_mutate_schedule_for_week(self): + """ + Test mutation of the entire week's schedule. + """ + mutation_rate = 0.5 # For testing, we can use a fixed mutation rate (50%) + mutator = Mutation(mutation_rate=mutation_rate) + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test if the mutated schedule is different from the original schedule + self.assertNotEqual(self.schedule, mutated_schedule, "The mutated schedule should be different from the original schedule.") + + # Test that at least one section was mutated + for day in mutated_schedule: + for section in mutated_schedule[day]: + # Check if time slots were shuffled (i.e., they're different from the original time slots) + for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): + self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should be mutated.") + + def test_mutate_schedule_with_no_mutation(self): + """ + Test if mutation does not occur when the mutation rate is 0. + """ + mutation_rate = 0 # No mutation expected + mutator = Mutation(mutation_rate=mutation_rate) + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test that the mutated schedule is the same as the original schedule + self.assertEqual(self.schedule, mutated_schedule, "The schedule should remain the same if mutation rate is 0.") + + def test_mutate_schedule_with_max_mutation(self): + """ + Test if mutation affects all sections when mutation rate is 1. + """ + mutation_rate = 1 # Full mutation expected + mutator = Mutation(mutation_rate=mutation_rate) + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test that the mutated schedule is different from the original schedule + self.assertNotEqual(self.schedule, mutated_schedule, "The mutated schedule should be different from the original schedule.") + + # Check that all time slots were mutated + for day in mutated_schedule: + for section in mutated_schedule[day]: + for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): + self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should be mutated.") + + @patch("random.sample") # Mock random.sample to control which sections get mutated + def test_mutate_schedule_with_controlled_mutation(self, mock_sample): + """ + Test mutation when we control which sections are selected for mutation. + """ + mutation_rate = 0.5 + mutator = Mutation(mutation_rate=mutation_rate) + + # Mock random.sample to return a controlled selection of sections to mutate + mock_sample.return_value = ["A"] # Only mutate section A + + # Make a deep copy of the original schedule to compare later + original_schedule = copy.deepcopy(self.schedule) + + # Perform mutation + mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) + + # Test that only section A was mutated, and others remain the same + for day in mutated_schedule: + for section in mutated_schedule[day]: + for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): + if section == "A": + self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should be mutated.") + else: + self.assertEqual(original_entry['time_slot'], mutated_entry['time_slot'], + f"Time slot for {section} on {day} should not be mutated.") + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/test_suite/ReadMe.md b/test_suite/ReadMe.md new file mode 100644 index 0000000..4759136 --- /dev/null +++ b/test_suite/ReadMe.md @@ -0,0 +1,7 @@ +This folder will contain the test for all the +different flows we have. + +Along with, + +1. unit test -> these will test individual components, like functionalities of Fitness, Crossover, Mutation, etc. +2. functional test -> collectively working of these modules. \ No newline at end of file diff --git a/test_suite/Selection_Tests.py b/test_suite/Selection_Tests.py new file mode 100644 index 0000000..f16f42f --- /dev/null +++ b/test_suite/Selection_Tests.py @@ -0,0 +1,298 @@ +# SELECTION TESTS + +#1.def get_all_time_slots(): + +import unittest +from Constants.time_intervals import TimeIntervalConstant +class TestTimeIntervalConstant(unittest.TestCase): + + def test_get_all_time_slots(self): + expected_time_slots = ["9:00 - 9:55", "9:55 - 10:50", "11:10 - 12:05", "12:05 - 1:00", "1:20 - 2:15", "2:15 - 3:10", "3:30 - 4:25"] + self.assertEqual(TimeIntervalConstant.get_all_time_slots(), expected_time_slots) + +if __name__ == "__main__": + unittest.main() + +import unittest +from Samples.Selection_Files.selection import Timetable # Correct import +from unittest import mock + +class TestTimetable(unittest.TestCase): + + def setUp(self): + # Initialize the object to be tested + self.timetable = Timetable() # Initialize the correct class + + def test_generate_day_schedule_structure(self): + # Call the method + day_schedule = self.timetable.generate_day_schedule() + + # Check if the returned day_schedule is a dictionary with sections + self.assertIsInstance(day_schedule, dict) + self.assertGreater(len(day_schedule), 0) + + for section, schedule in day_schedule.items(): + self.assertIn(section, self.timetable.sections) # Ensure sections are correct + self.assertIsInstance(schedule, list) + self.assertGreater(len(schedule), 0) + + def test_teacher_and_classroom_usage(self): + # Call the method + day_schedule = self.timetable.generate_day_schedule() + + # Check that no teacher is assigned to the same time slot more than once + time_slot_teacher_usage = {time_slot: set() for time_slot in self.timetable.time_slots} + time_slot_classroom_usage = {time_slot: set() for time_slot in self.timetable.time_slots} + + for section, schedule in day_schedule.items(): + for schedule_item in schedule: + if "Break" not in schedule_item["time_slot"]: + self.assertNotIn(schedule_item["teacher_id"], time_slot_teacher_usage[schedule_item["time_slot"]]) + self.assertNotIn(schedule_item["classroom_id"], time_slot_classroom_usage[schedule_item["time_slot"]]) + + # Track teacher and classroom usage + time_slot_teacher_usage[schedule_item["time_slot"]].add(schedule_item["teacher_id"]) + time_slot_classroom_usage[schedule_item["time_slot"]].add(schedule_item["classroom_id"]) + + def test_break_periods(self): + # Call the method + day_schedule = self.timetable.generate_day_schedule() + + # Check that "Break" is assigned correctly + break_found = False + for section, schedule in day_schedule.items(): + for schedule_item in schedule: + if "Break" in schedule_item["subject_id"]: + break_found = True + self.assertEqual(schedule_item["teacher_id"], "None") + self.assertEqual(schedule_item["classroom_id"], "N/A") + + self.assertTrue(break_found, "No break periods found in the schedule") + +if __name__ == "__main__": + unittest.main() + + +#2. def create_timetable(self): + +import unittest +from Samples.Selection_Files.selection import Timetable +from unittest import mock + +class TestTimetable(unittest.TestCase): + + def setUp(self): + # Initialize the Timetable object + self.timetable = Timetable() + + def test_create_timetable_structure(self): + # Call the method + timetable = self.timetable.create_timetable() + + # Check if the timetable is a dictionary with days as keys + self.assertIsInstance(timetable, dict) + self.assertGreater(len(timetable), 0) # Ensure timetable is not empty + + # Verify that all days are present + for day in self.timetable.days: + self.assertIn(day, timetable) + + # Verify that each day contains a schedule (which is a dictionary) + for day, day_schedule in timetable.items(): + self.assertIsInstance(day_schedule, dict) + self.assertGreater(len(day_schedule), 0) + + def test_generate_day_schedule_called(self): + # Mock the generate_day_schedule method to check if it's called for each day + with mock.patch.object(self.timetable, 'generate_day_schedule', return_value={}) as mock_method: + self.timetable.create_timetable() + + # Check if generate_day_schedule was called for each day + self.assertEqual(mock_method.call_count, len(self.timetable.days)) + + def test_timetable_content(self): + # Call the method + timetable = self.timetable.create_timetable() + + # Check that each day's schedule contains sections + for day, day_schedule in timetable.items(): + for section, schedule in day_schedule.items(): + self.assertIn(section, self.timetable.sections) # Ensure valid sections + self.assertIsInstance(schedule, list) + self.assertGreater(len(schedule), 0) + +if __name__ == "__main__": + unittest.main() + +#3. def create_multiple_timelines(self, num_chromosomes): + +import unittest +from Samples.Selection_Files.selection import Timetable # Adjust the import as necessary + +class TestTimetable(unittest.TestCase): + + def setUp(self): + # Initialize the object to be tested + self.timetable = Timetable() # Ensure this is the correct class that has create_multiple_timelines method + + def test_create_multiple_timelines(self): + num_chromosomes = 5 # You can change this number to test with different sizes + + # Call the method + timelines = self.timetable.create_multiple_timelines(num_chromosomes) + + # Check if the returned value is a list + self.assertIsInstance(timelines, list) + + # Check if the list has the correct number of timetables + self.assertEqual(len(timelines), num_chromosomes) + + # Optionally, check if each element in the list is a timetable (or has the correct structure) + for timetable in timelines: + self.assertIsInstance(timetable, dict) # Assuming the timetable is a dictionary as in your previous methods + # Check that the timetable contains valid data, like sections + for section, schedule in timetable.items(): + self.assertIn(section, self.timetable.sections) + self.assertIsInstance(schedule, list) + self.assertGreater(len(schedule), 0) + +if __name__ == "__main__": + unittest.main() + +#4. def calculate_fitness(self, chromosome): + +import unittest +from Samples.Selection_Files.selection import Timetable # Adjust the import path + +class TestTimetableFitness(unittest.TestCase): + + def setUp(self): + # Initialize the object to be tested + self.timetable = Timetable() # Ensure this is the class that has calculate_fitness method + + def test_fitness_calculation_valid_chromosome(self): + # Create a valid chromosome structure + chromosome = { + "Monday": { + "A": [ + {"teacher_id": "T1", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S1"}, + {"teacher_id": "T2", "classroom_id": "R2", "time_slot": "10:00-11:00", "subject_id": "S2"}, + {"teacher_id": "T3", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S3"}, + {"teacher_id": "None", "classroom_id": "N/A", "time_slot": "Break", "subject_id": "Break"}, + ], + "B": [ + {"teacher_id": "T4", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S4"}, + {"teacher_id": "T5", "classroom_id": "R2", "time_slot": "10:00-11:00", "subject_id": "S5"}, + {"teacher_id": "T1", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S6"}, + {"teacher_id": "None", "classroom_id": "N/A", "time_slot": "Break", "subject_id": "Break"}, + ], + } + } + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score is within expected range + self.assertIsInstance(fitness_score, int) + self.assertGreaterEqual(fitness_score, 0) # Fitness should not be negative + + def test_fitness_calculation_with_violations(self): + # Create a chromosome with violations (e.g., overlapping time slots) + chromosome = { + "Monday": { + "A": [ + {"teacher_id": "T1", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S1"}, + {"teacher_id": "T1", "classroom_id": "R2", "time_slot": "9:00-10:00", "subject_id": "S2"}, # Teacher overlap + {"teacher_id": "T3", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S3"}, + ], + "B": [ + {"teacher_id": "T4", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S4"}, + {"teacher_id": "T5", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S5"}, # Room overlap + ], + } + } + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score accounts for penalties + self.assertIsInstance(fitness_score, int) + self.assertLess(fitness_score, 100) # Expect reduced fitness score due to violations + + def test_fitness_calculation_with_over_capacity(self): + # Create a chromosome where room capacity is exceeded + chromosome = { + "Monday": { + "A": [ + {"teacher_id": "T1", "classroom_id": "R3", "time_slot": "9:00-10:00", "subject_id": "S1"}, # Over capacity + ] + } + } + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score is reduced due to capacity violation + self.assertIsInstance(fitness_score, int) + self.assertLess(fitness_score, 100) # Expect reduced fitness score due to capacity penalty + + def test_fitness_calculation_no_timetable(self): + # Test with an empty chromosome + chromosome = {} + + # Calculate fitness + fitness_score = self.timetable.calculate_fitness(chromosome) + + # Assert fitness score is zero + self.assertEqual(fitness_score, 0) + +if __name__ == "__main__": + unittest.main() + +#5. def select_top_chromosomes(self, population: list, percentage=0.30) -> list: + +import random +def select_top_chromosomes(self, population: list, percentage=0.30) -> list: + num_to_select = int(len(population) * percentage) + fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in population] + sorted_chromosomes = sorted(fitness_scores, key=lambda x: x[1], reverse=True) + + best_num = int(num_to_select * 0.20) + worst_num = int(num_to_select * 0.10) + middle_num = num_to_select - (best_num + worst_num) + + best_chromosomes = sorted_chromosomes[:best_num] + worst_chromosomes = sorted_chromosomes[-worst_num:] + middle_chromosomes = sorted_chromosomes[best_num:best_num + middle_num] + + roulette_num = int(middle_num * 0.70) + rank_num = middle_num - roulette_num + + # Handle empty middle_chromosomes for roulette selection + if middle_chromosomes: + total_fitness = sum(fitness for _, fitness in middle_chromosomes) + roulette_chromosomes = random.choices( + middle_chromosomes, + weights=[fitness / total_fitness for _, fitness in middle_chromosomes], + k=roulette_num + ) + else: + roulette_chromosomes = [] + + if middle_chromosomes: + total_rank = sum(range(1, len(middle_chromosomes) + 1)) + rank_probabilities = [i / total_rank for i in range(1, len(middle_chromosomes) + 1)] + rank_chromosomes = random.choices( + middle_chromosomes, + weights=rank_probabilities, + k=rank_num + ) + else: + rank_chromosomes = [] + + selected_chromosomes = [chromosome for chromosome, _ in best_chromosomes] + selected_chromosomes += [chromosome for chromosome, _ in worst_chromosomes] + selected_chromosomes += [chromosome for chromosome, _ in roulette_chromosomes] + selected_chromosomes += [chromosome for chromosome, _ in rank_chromosomes] + + return selected_chromosomes \ No newline at end of file diff --git a/test_suite/unit_test.py b/test_suite/unit_test.py new file mode 100644 index 0000000..e69de29 From 4595c2716d37dddfaa9277139dfed455ad778c88 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Tue, 11 Feb 2025 22:09:05 +0530 Subject: [PATCH 28/67] new branch refactor section strength and class and lab capacity --- Constants/constant.py | 17 ----- Constants/time_intervals.py | 4 +- GA/__init__.py | 27 ++++--- GA/chromosome.py | 142 ++++++++++++++++++++---------------- GA/fitness.py | 3 +- Samples/samples.py | 28 ++++--- 6 files changed, 109 insertions(+), 112 deletions(-) diff --git a/Constants/constant.py b/Constants/constant.py index 97c7c64..1ed2ddb 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -8,23 +8,6 @@ class Defaults: total_no_of_generations = 10 class_strength = 50 -class Sections: - def __init__(self, section_number): - self.sections = [chr(65 + i) for i in range(section_number)] - - -class Classrooms: - def __init__(self, room_count, lab_count): - self.classrooms = [f"R{i + 1}" for i in range(room_count)] - self.labs = [f"L{i + 1}" for i in range(lab_count)] - - -class RoomCapacity: - def __init__(self, classrooms, sections, default_capacity=Defaults.room_capacity): - self.room_capacity = {room: default_capacity for room in classrooms} - self.section_strength = {section: default_capacity for section in sections} - - class SubjectWeeklyQuota: def __init__(self, subject_quota): self.subject_quota = subject_quota diff --git a/Constants/time_intervals.py b/Constants/time_intervals.py index d56e96f..0881b96 100644 --- a/Constants/time_intervals.py +++ b/Constants/time_intervals.py @@ -110,5 +110,5 @@ def get_all_time_slots(): time_slots = TimeIntervalConstant.get_all_time_slots() -print("Slot Numbers:", slot_numbers) -print("Time Slots:", time_slots) \ No newline at end of file +# print("Slot Numbers:", slot_numbers) +# print("Time Slots:", time_slots) \ No newline at end of file diff --git a/GA/__init__.py b/GA/__init__.py index 8707e17..c5a3fa8 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -7,9 +7,10 @@ from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection +from Constants.time_intervals import TimeIntervalConstant from Samples.samples import (InterDepartment, SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload) + TeacherWorkload,RoomCapacity) def timetable_generation( @@ -40,19 +41,18 @@ def timetable_generation( teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, ) - timetable, teacher_availability_matrix = timetable_generator.create_timetable( Defaults.initial_no_of_chromosomes ) - + # print(timetable) fitness_calculator = TimetableFitnessEvaluator( timetable, - timetable_generator.sections_manager.sections, + timetable_generator.sections_manager.keys(), SubjectTeacherMap.subject_teacher_map, - timetable_generator.classrooms_manager.classrooms, - timetable_generator.classrooms_manager.labs, - timetable_generator.room_capacity_manager.room_capacity, - timetable_generator.room_capacity_manager.section_strength, + timetable_generator.classrooms_manager.keys(), + timetable_generator.lab_capacity_manager.keys(), + timetable_generator.classrooms_manager, + timetable_generator.sections_manager, timetable_generator.subject_quota_limits, timetable_generator.teacher_availability_preferences, timetable_generator.weekly_workload, @@ -142,9 +142,9 @@ def run_timetable_generation( if __name__ == "__main__": best, correct_teacher_availability_matrix = run_timetable_generation( teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=6, - total_classrooms=8, - total_labs=3, + total_sections=RoomCapacity.section_strength, + total_classrooms=RoomCapacity.room_capacity, + total_labs=RoomCapacity.lab_capacity, teacher_preferences=TeacherWorkload.teacher_preferences, teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, special_subjects=SpecialSubjects.special_subjects, @@ -154,7 +154,7 @@ def run_timetable_generation( teacher_availability_matrix=initialize_teacher_availability( TeacherWorkload.Weekly_workLoad.keys(), 5, - 8 + 7 ), total_generations=Defaults.total_no_of_generations ) @@ -180,7 +180,6 @@ def run_timetable_generation( "12:00 - 13:00": 5, "13:50 - 14:50": 6, "14:50 - 15:50": 7, - "16:50 - 17:50": 8 } ) - ic(best, correct_teacher_availability_matrix) + # ic(best, correct_teacher_availability_matrix) diff --git a/GA/chromosome.py b/GA/chromosome.py index 13ae8d8..45c325e 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -1,6 +1,6 @@ import random -from Constants.constant import Classrooms, Defaults, RoomCapacity, Sections +from Constants.constant import Defaults from Constants.time_intervals import TimeIntervalConstant @@ -8,22 +8,20 @@ class TimeTableGeneration: def __init__( self, teacher_subject_mapping: dict, - total_sections: int, - total_classrooms: int, - total_labs: int, + total_sections: dict, + total_classrooms: dict, + total_labs: dict, teacher_preferences: dict, teacher_weekly_workload: dict, special_subjects: dict, labs: dict, subject_quota_limits: dict, teacher_duty_days: dict, - teacher_availability_matrix=dict, + teacher_availability_matrix=dict ): - self.sections_manager = Sections(total_sections) - self.classrooms_manager = Classrooms(total_classrooms, total_labs) - self.room_capacity_manager = RoomCapacity( - self.classrooms_manager.classrooms, self.sections_manager.sections - ) + self.sections_manager = total_sections + self.classrooms_manager =total_classrooms + self.lab_capacity_manager =total_labs self.weekdays = Defaults.working_days self.subject_teacher_mapping = teacher_subject_mapping self.subject_quota_limits = subject_quota_limits @@ -37,40 +35,38 @@ def __init__( self.teacher_availability_matrix = teacher_availability_matrix self._map_sections_to_classrooms() self._assign_teachers_to_sections() - - + def _map_sections_to_classrooms(self): sorted_classrooms = sorted( - self.classrooms_manager.classrooms, - key=lambda classroom: self.room_capacity_manager.room_capacity[classroom], - reverse=True, + self.classrooms_manager.items(), key=lambda x: x[1], reverse=True ) sorted_sections = sorted( - self.sections_manager.sections, - key=lambda section: self.room_capacity_manager.section_strength[section], - reverse=True, + self.sections_manager.items(), key=lambda x: x[1], reverse=True ) self.section_to_classroom_map = {} - for section in sorted_sections: - for classroom in sorted_classrooms: - if self.room_capacity_manager.room_capacity[classroom] >= self.room_capacity_manager.section_strength[section]: + for section, strength in sorted_sections: + for i, (classroom, capacity) in enumerate(sorted_classrooms): + if capacity >= strength: self.section_to_classroom_map[section] = classroom - sorted_classrooms.remove(classroom) + sorted_classrooms.pop(i) break - + return self.section_to_classroom_map def _assign_teachers_to_sections(self): self.teacher_section_map = { section: {subject: None for subject in self.subject_teacher_mapping} - for section in self.sections_manager.sections + for section in self.sections_manager.keys() } - - for section in self.sections_manager.sections: + for section in self.sections_manager.keys(): for subject, teacher_list in self.subject_teacher_mapping.items(): - sorted_teachers_by_load = sorted(teacher_list, key=lambda teacher: self.teacher_assignment_tracker[teacher]) - selected_teacher = sorted_teachers_by_load[0] - self.teacher_section_map[section][subject] = selected_teacher - self.teacher_assignment_tracker[selected_teacher] += 1 + sorted_teachers_by_load = sorted( + teacher_list, key=lambda teacher: self.teacher_assignment_tracker[teacher] + ) + selected_teacher = sorted_teachers_by_load[0] + self.teacher_section_map[section][subject] = selected_teacher + self.teacher_assignment_tracker[selected_teacher] += 1 + return(self.teacher_section_map) + def _initialize_teacher_workload_tracker(self): @@ -98,7 +94,6 @@ def _assign_subject_and_teacher( ): available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) random.shuffle(available_subjects) - assigned_teacher = None selected_subject = None assigned_room = None @@ -119,7 +114,6 @@ def _assign_subject_and_teacher( ) ] sorted_teachers_by_load = sorted(preferred_teachers, key=lambda teacher: teacher_workload_tracker[teacher]) - for teacher in sorted_teachers_by_load: if ( teacher in teacher_availability_matrix @@ -127,26 +121,25 @@ def _assign_subject_and_teacher( and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and teacher_availability_matrix[teacher][day_index][slot_index - 1] ): - # teacher_availability_matrix[teacher][day_index][slot_index - 1] = False + teacher_availability_matrix[teacher][day_index][slot_index - 1] = False assigned_teacher = teacher teacher_workload_tracker[assigned_teacher] += 1 selected_subject = subject subjects_scheduled_today.add(subject) - - assigned_room = ( - self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] - if subject in self.lab_subject_list - else assigned_classroom - ) + lab_keys = list(self.lab_capacity_manager.keys()) + assigned_lab = lab_keys[slot_index % len(lab_keys)] + if selected_subject in self.lab_subject_list: + assigned_room = assigned_lab # Assign a lab if subject requires it + else: + assigned_room = assigned_classroom # Otherwise, keep the regular classroom break - - if assigned_teacher: - break - + if assigned_teacher: + break + # print(assigned_teacher, selected_subject, assigned_room) if not assigned_teacher: - selected_subject = "Library" - assigned_teacher = "None" - assigned_room = assigned_classroom + selected_subject = "Library" + assigned_teacher = "None" + assigned_room = assigned_classroom return assigned_teacher, selected_subject, assigned_room @@ -168,73 +161,98 @@ def _generate_section_schedule( while slot_index <= total_slots_for_section: time_slot = self.available_time_slots[slot_index] - assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( + assigned_teacher, assigned_subject, assigned_room= self._assign_subject_and_teacher( section, slot_index, subjects_scheduled_today, assigned_classroom, section_subject_usage_tracker, teacher_workload_tracker, teacher_availability_matrix, day_index ) - + section_schedule.append({ "teacher_id": assigned_teacher, "subject_id": assigned_subject, "classroom_id": assigned_room, "time_slot": time_slot }) - if assigned_subject != "Library": section_subject_usage_tracker[section][assigned_subject] += 1 + # **Handling Lab Subject Case** if assigned_subject in self.lab_subject_list: if slot_index + 1 <= total_slots_for_section: next_time_slot = self.available_time_slots[slot_index + 1] + + # **Check if Section Strength Exceeds Lab Capacity** + section_strength =self.sections_manager[section] + lab_capacity = self.lab_capacity_manager[assigned_room] + + if section_strength > lab_capacity: + # **Find an Alternative Lab with Enough Capacity** + available_labs = [ + lab for lab, capacity in self.lab_capacity_manager.items() + if capacity >= section_strength + ] + + if available_labs: + assigned_room = available_labs[0] # Assign first available lab + section_schedule.append({ "teacher_id": assigned_teacher, "subject_id": assigned_subject, "classroom_id": assigned_room, "time_slot": next_time_slot }) + section_subject_usage_tracker[section][assigned_subject] += 1 - slot_index += 1 # Skip the next slot as it's taken by the lab subject + slot_index += 1 # **Skip the next slot as it's taken by the lab subject** slot_index += 1 return section_schedule, teacher_availability_matrix - def generate_daily_schedule(self, half_day_sections, section_subject_usage_tracker, day_index): + + + def generate_daily_schedule(self, section_list,half_day_sections,section_subject_usage_tracker, day_index): daily_schedule = {} teacher_workload_tracker = self._initialize_teacher_workload_tracker() - for section in self.sections_manager.sections: + for section in section_list: # Iterate over half-day sections only section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( - section, half_day_sections, section_subject_usage_tracker, teacher_workload_tracker, self.teacher_availability_matrix, day_index + section, + half_day_sections, + section_subject_usage_tracker, + teacher_workload_tracker, + self.teacher_availability_matrix, + day_index ) daily_schedule[section] = section_schedule - return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix + def _generate_weekly_schedule(self): weekly_schedule = {} section_subject_usage_tracker = { - section: {subject: 0 for subject in self.subject_teacher_mapping} for section in self.sections_manager.sections + section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} + for section in self.sections_manager.keys() } + section_list = list(self.sections_manager.keys()) + for day_index, weekday in enumerate(self.weekdays): - half_day_sections = self.sections_manager.sections[: len(self.sections_manager.sections)//2] - daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( - half_day_sections, section_subject_usage_tracker, day_index + random.shuffle(section_list) + half_day_sections = section_list[: len(section_list) // 2] + daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix= self.generate_daily_schedule( + section_list,half_day_sections, section_subject_usage_tracker, day_index ) - weekly_schedule[weekday] = daily_schedule + weekly_schedule[weekday] = daily_schedule return weekly_schedule, section_subject_usage_tracker, self.teacher_availability_matrix - def create_timetable(self, num_weeks): timetable = {} for week_number in range(1, num_weeks + 1): - weekly_schedule, _, self.teacher_availability_matrix = self._generate_weekly_schedule() + weekly_schedule, _, self.teacher_availability_matrix= self._generate_weekly_schedule() timetable[f"Week {week_number}"] = weekly_schedule - return timetable, self.teacher_availability_matrix \ No newline at end of file diff --git a/GA/fitness.py b/GA/fitness.py index 2e01db2..620ee1f 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -3,7 +3,7 @@ from Constants.constant import Defaults, PenaltyConstants from Constants.time_intervals import TimeIntervalConstant from GA.chromosome import TimeTableGeneration -from Samples.samples import (Classrooms, SpecialSubjects, SubjectTeacherMap, +from Samples.samples import (SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload) @@ -107,7 +107,6 @@ def evaluate_timetable_fitness(self): weekly_fitness += day_fitness weekly_fitness_scores[week] = weekly_fitness - return daily_section_fitness_scores, weekly_fitness_scores diff --git a/Samples/samples.py b/Samples/samples.py index 8cf67f5..099f50f 100644 --- a/Samples/samples.py +++ b/Samples/samples.py @@ -22,22 +22,10 @@ class SubjectTeacherMap: class WorkingDays: days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] - -class Sections: - sections = [] - - def __init__(self, section_number): - self.sections = [chr(65 + i) for i in range(section_number)] - - -class Classrooms: - classrooms = ["R1", "R2", "R3", "R4", "R5"] - labs = ["L1", "L2", "L3", "L4", "L5"] - - class RoomCapacity: room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} - section_strength = {"A": 200, "B": 200, "C": 200, "D": 100} + section_strength = {"A": 70, "B": 100, "C": 75, "D": 100} + lab_capacity={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50} class SubjectWeeklyQuota: @@ -186,7 +174,17 @@ class InterDepartment: "VD25": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], "AK26": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], } - + +class Lab_availability: + lab_availability_matrix = { + "L1": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "L2": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "L3": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "L4": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "L5": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + "L6": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + } + class SampleChromosome: schedule1={ "Monday": { From 256796c645a4c70e6115f281d06a2b83c37a43eb Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Fri, 14 Feb 2025 08:58:21 +0530 Subject: [PATCH 29/67] fixed 2 slots for special classes and continous labs allocation for labs. --- GA/__init__.py | 24 +- GA/chromosome.py | 199 ++++-- visualizer.py | 1518 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1673 insertions(+), 68 deletions(-) create mode 100644 visualizer.py diff --git a/GA/__init__.py b/GA/__init__.py index 8707e17..d245f52 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,4 +1,5 @@ # This is the Orchestrator file, which will govern the flow. +import json from Constants.constant import Defaults from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best, \ @@ -154,13 +155,11 @@ def run_timetable_generation( teacher_availability_matrix=initialize_teacher_availability( TeacherWorkload.Weekly_workLoad.keys(), 5, - 8 + 7 ), total_generations=Defaults.total_no_of_generations ) - from icecream import ic - ic(best) correct_teacher_availability_matrix = update_matrix_for_best( best, correct_teacher_availability_matrix, @@ -169,18 +168,17 @@ def run_timetable_generation( "Tuesday": 1, "Wednesday": 2, "Thursday": 3, - "Friday": 4, - "Saturday": 5, - "Sunday": 6 + "Friday": 4 },{ "08:00 - 09:00": 1, "09:00 - 10:00": 2, - "10:00 - 11:00": 3, - "11:00 - 12:00": 4, - "12:00 - 13:00": 5, - "13:50 - 14:50": 6, - "14:50 - 15:50": 7, - "16:50 - 17:50": 8 + "11:00 - 12:00": 3, + "12:00 - 13:00": 4, + "13:50 - 14:50": 5, + "14:50 - 15:50": 6, + "16:50 - 17:50": 7 } ) - ic(best, correct_teacher_availability_matrix) + + json_data = json.dumps(best, indent=4) + print(json_data) diff --git a/GA/chromosome.py b/GA/chromosome.py index 4c7fc3c..0de3e3d 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -36,7 +36,7 @@ def __init__( self.teacher_assignment_tracker = {teacher: 0 for teacher in teacher_weekly_workload} self.teacher_availability_matrix = teacher_availability_matrix self._map_sections_to_classrooms() - self._assign_teachers_to_sections() + self.teacher_subject_mapping = teacher_subject_mapping def _map_sections_to_classrooms(self): @@ -58,19 +58,62 @@ def _map_sections_to_classrooms(self): sorted_classrooms.remove(classroom) break + def _assign_subject_and_teacher( + self, + section, + slot_index, + subjects_scheduled_today, + assigned_classroom, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index + ): + available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) + random.shuffle(available_subjects) - def _assign_teachers_to_sections(self): - self.teacher_section_map = { - section: {subject: None for subject in self.subject_teacher_mapping} - for section in self.sections_manager.sections - } + assigned_teacher = None + selected_subject = None + assigned_room = None - for section in self.sections_manager.sections: - for subject, teacher_list in self.subject_teacher_mapping.items(): - sorted_teachers_by_load = sorted(teacher_list, key=lambda teacher: self.teacher_assignment_tracker[teacher]) - selected_teacher = sorted_teachers_by_load[0] - self.teacher_section_map[section][subject] = selected_teacher - self.teacher_assignment_tracker[selected_teacher] += 1 + for subject in available_subjects: + # If subject is a lab subject or "Placement_Class", force assignment only at specific slots. + if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: + continue + + if subject not in subjects_scheduled_today: + teachers_for_subject = self.teacher_subject_mapping[subject] + preferred_teachers = [ + teacher for teacher in teachers_for_subject + if self.teacher_availability_preferences.get(teacher, []) + ] + sorted_teachers_by_load = sorted(preferred_teachers, + key=lambda teacher: teacher_workload_tracker[teacher]) + + for teacher in sorted_teachers_by_load: + if (teacher in teacher_availability_matrix and + len(teacher_availability_matrix[teacher]) > day_index and + len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[teacher][day_index][slot_index - 1]): + assigned_teacher = teacher + teacher_workload_tracker[assigned_teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + assigned_room = ( + self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] + if subject in self.lab_subject_list or subject == "Placement_Class" + else assigned_classroom + ) + break + if assigned_teacher: + break + + if not assigned_teacher: + selected_subject = "Library" + assigned_teacher = "None" + assigned_room = assigned_classroom + + return assigned_teacher, selected_subject, assigned_room def _initialize_teacher_workload_tracker(self): @@ -164,10 +207,10 @@ def _generate_section_schedule( section_schedule = [] subjects_scheduled_today = set() assigned_classroom = self.section_to_classroom_map[section] - total_slots_for_section = 4 if section in half_day_sections else 7 + total_slots = 4 if section in half_day_sections else 7 slot_index = 1 - while slot_index <= total_slots_for_section: + while slot_index <= total_slots: time_slot = self.available_time_slots[slot_index] assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( section, slot_index, subjects_scheduled_today, assigned_classroom, @@ -175,57 +218,97 @@ def _generate_section_schedule( teacher_availability_matrix, day_index ) - # Non-lab subjects (or labs when no special handling is needed) - if assigned_subject not in self.lab_subject_list: - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": "all" - }) - if assigned_subject != "Library": - section_subject_usage_tracker[section][assigned_subject] += 1 - slot_index += 1 - else: - # split section, out section is too large. + # Check if this subject must get 2 continuous hours. + if (assigned_subject in self.lab_subject_list or assigned_subject == "Placement_Class"): + # Check if splitting is needed (i.e. section strength exceeds the lab room capacity). if (section_strength is not None and labs_capacity is not None and assigned_room in labs_capacity and section_strength > labs_capacity[assigned_room]): - - # Look for an alternative lab room for group 2. + # Try to find an alternate lab room for group 2. lab2 = None for lab in self.classrooms_manager.labs: if lab != assigned_room and lab in labs_capacity: - # Check if lab2 can accommodate the remaining students. if labs_capacity[lab] >= section_strength - labs_capacity[assigned_room]: lab2 = lab break - if lab2 is None: raise ValueError("Insufficient lab capacity to split section for lab subject.") - # Use two consecutive slots (if available) for the two groups. - if slot_index + 1 <= total_slots_for_section: - next_time_slot = self.available_time_slots[slot_index + 1] + # For splitting, ensure there are 4 consecutive slots available. + if slot_index + 3 <= total_slots: + ts1 = self.available_time_slots[slot_index] + ts2 = self.available_time_slots[slot_index + 1] + ts3 = self.available_time_slots[slot_index + 2] + ts4 = self.available_time_slots[slot_index + 3] + + # Group 1 gets two slots in assigned_room. section_schedule.append({ "teacher_id": assigned_teacher, "subject_id": assigned_subject, "classroom_id": assigned_room, - "time_slot": time_slot, + "time_slot": ts1, "group": 1 }) + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": ts2, + "group": 1 + }) + + # Group 2 gets two slots in lab2. section_schedule.append({ "teacher_id": assigned_teacher, "subject_id": assigned_subject, "classroom_id": lab2, - "time_slot": next_time_slot, + "time_slot": ts3, "group": 2 }) - section_subject_usage_tracker[section][assigned_subject] += 2 - slot_index += 2 - + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": lab2, + "time_slot": ts4, + "group": 2 + }) + section_subject_usage_tracker[section][assigned_subject] += 4 + slot_index += 4 else: - # Not enough slots to assign both groups; fall back to a single session. + # Not enough slots for full split; fall back to non-split 2-hour allocation. + if slot_index + 1 <= total_slots: + next_time_slot = self.available_time_slots[slot_index + 1] + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + "group": 1 + }) + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + "group": 1 + }) + section_subject_usage_tracker[section][assigned_subject] += 2 + slot_index += 2 + + else: + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + "group": 1 + }) + section_subject_usage_tracker[section][assigned_subject] += 1 + slot_index += 1 + + else: + # No split needed; assign 2 consecutive slots in the same room. + if slot_index + 1 <= total_slots: + next_time_slot = self.available_time_slots[slot_index + 1] section_schedule.append({ "teacher_id": assigned_teacher, "subject_id": assigned_subject, @@ -233,19 +316,6 @@ def _generate_section_schedule( "time_slot": time_slot, "group": 1 }) - section_subject_usage_tracker[section][assigned_subject] += 1 - slot_index += 1 - else: - # No split needed; assign lab in double slot if possible. - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - if slot_index + 1 <= total_slots_for_section: - next_time_slot = self.available_time_slots[slot_index + 1] section_schedule.append({ "teacher_id": assigned_teacher, "subject_id": assigned_subject, @@ -255,11 +325,30 @@ def _generate_section_schedule( }) section_subject_usage_tracker[section][assigned_subject] += 2 slot_index += 2 - else: + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + "group": 1 + }) section_subject_usage_tracker[section][assigned_subject] += 1 slot_index += 1 + else: + # For non-lab subjects, allocate a single slot. + section_schedule.append({ + "teacher_id": assigned_teacher, + "subject_id": assigned_subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + "group": "all" + }) + if assigned_subject != "Library": + section_subject_usage_tracker[section][assigned_subject] += 1 + slot_index += 1 + return section_schedule, teacher_availability_matrix diff --git a/visualizer.py b/visualizer.py new file mode 100644 index 0000000..5e707aa --- /dev/null +++ b/visualizer.py @@ -0,0 +1,1518 @@ +import pandas as pd + +# Suppose your JSON-like data is stored in a variable called 'timetable' +timetable = { + "Monday": { + "A": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Tuesday": { + "A": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Wednesday": { + "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Thursday": { + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AA15", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Friday": { + "A": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Saturday": { + "A": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + } +} + +days_order = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] +time_order = [ + "08:00 - 09:00", + "09:00 - 10:00", + "11:00 - 12:00", + "12:00 - 13:00", + "13:50 - 14:50", + "14:50 - 15:50", + "16:50 - 17:50" +] + + +def get_section_table(timetable, section): + rows = [] + for day, day_data in timetable.items(): + if section in day_data: + for slot in day_data[section]: + rows.append({ + "Day": day, + "Time": slot["time_slot"], + "Subject": slot["subject_id"], + }) + df = pd.DataFrame(rows) + df["Day"] = pd.Categorical(df["Day"], categories=days_order, ordered=True) + df["Time"] = pd.Categorical(df["Time"], categories=time_order, ordered=True) + pivoted = df.pivot(index="Day", columns="Time", values="Subject").fillna("") + return pivoted + +# List of sections to generate tables for. +sections = ["A", "B", "C", "D", "E", "F"] + +# Create a single HTML string with all section timetables. +html_content = "All Sections Timetable" +for section in sections: + table = get_section_table(timetable, section) + html_content += f"

Section {section}

" + html_content += table.to_html() +html_content += "" + +# Write the combined HTML to a file. +with open("all_sections_timetable.html", "w", encoding="utf-8") as f: + f.write(html_content) From 9b041b33ee23bea682952ef44b70e97b705abe05 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Fri, 14 Feb 2025 15:36:02 +0530 Subject: [PATCH 30/67] refactorrrrrrrrrrrrrr --- GA/__init__.py | 128 ++++++++++++------------- GA/chromosome.py | 15 ++- GA/fitness.py | 9 +- Samples/samples.py | 10 ++ __init__.py | 229 +++++++++++++++++++++++++++++++-------------- 5 files changed, 240 insertions(+), 151 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index c5a3fa8..5fd6977 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,5 +1,3 @@ -# This is the Orchestrator file, which will govern the flow. - from Constants.constant import Defaults from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best, \ initialize_teacher_availability @@ -7,11 +5,7 @@ from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection -from Constants.time_intervals import TimeIntervalConstant -from Samples.samples import (InterDepartment, SpecialSubjects, - SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload,RoomCapacity) - +# from Samples.samples import (SpecialSubjects,SubjectTeacherMap, SubjectWeeklyQuota,TeacherWorkload, RoomCapacity, TimeSlots) def timetable_generation( teacher_subject_mapping, @@ -25,11 +19,13 @@ def timetable_generation( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, + time_slots, + total_generations, prev_selected_chromosomes=None, prev_mutated_chromosomes=None ): timetable_generator = TimeTableGeneration( - teacher_subject_mapping=teacher_subject_mapping, + teacher_subject_mapping=teacher_subject_mapping, # you are sending this extra, this is not in the class. total_sections=total_sections, total_classrooms=total_classrooms, total_labs=total_labs, @@ -40,23 +36,25 @@ def timetable_generation( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + time_slots=time_slots ) timetable, teacher_availability_matrix = timetable_generator.create_timetable( - Defaults.initial_no_of_chromosomes + total_generations ) - # print(timetable) + fitness_calculator = TimetableFitnessEvaluator( - timetable, - timetable_generator.sections_manager.keys(), - SubjectTeacherMap.subject_teacher_map, - timetable_generator.classrooms_manager.keys(), - timetable_generator.lab_capacity_manager.keys(), - timetable_generator.classrooms_manager, - timetable_generator.sections_manager, - timetable_generator.subject_quota_limits, - timetable_generator.teacher_availability_preferences, - timetable_generator.weekly_workload, - ) + timetable=timetable, + all_sections=list(timetable_generator.sections_manager.keys()), + subject_teacher_mapping=timetable_generator.subject_teacher_mapping, + available_classrooms=list(timetable_generator.classrooms_manager.keys()), + available_labs=list(timetable_generator.lab_capacity_manager.keys()), + classroom_capacity=timetable_generator.classrooms_manager, + section_student_strength=timetable_generator.sections_manager, + subject_quota_data=timetable_generator.subject_quota_limits, + teacher_time_preferences=timetable_generator.teacher_availability_preferences, + teacher_daily_workload=timetable_generator.weekly_workload, + time_slots=time_slots +) fitness_scores = fitness_calculator.evaluate_timetable_fitness() selection_object = TimeTableSelection() @@ -111,7 +109,8 @@ def run_timetable_generation( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, - total_generations + total_generations, + time_slots ): prev_selected = None prev_mutated = None @@ -130,56 +129,49 @@ def run_timetable_generation( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + time_slots=time_slots, prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated + prev_mutated_chromosomes=prev_mutated, + total_generations=total_generations ) prev_selected = selected prev_mutated = mutated return best_chromosome, teacher_availability_matrix - -if __name__ == "__main__": - best, correct_teacher_availability_matrix = run_timetable_generation( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=RoomCapacity.section_strength, - total_classrooms=RoomCapacity.room_capacity, - total_labs=RoomCapacity.lab_capacity, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - labs=SpecialSubjects.Labs, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - teacher_availability_matrix=initialize_teacher_availability( - TeacherWorkload.Weekly_workLoad.keys(), - 5, - 7 - ), - total_generations=Defaults.total_no_of_generations - ) - - from icecream import ic - ic(best) - correct_teacher_availability_matrix = update_matrix_for_best( - best, - correct_teacher_availability_matrix, - { - "Monday": 0, - "Tuesday": 1, - "Wednesday": 2, - "Thursday": 3, - "Friday": 4, - "Saturday": 5, - "Sunday": 6 - },{ - "08:00 - 09:00": 1, - "09:00 - 10:00": 2, - "10:00 - 11:00": 3, - "11:00 - 12:00": 4, - "12:00 - 13:00": 5, - "13:50 - 14:50": 6, - "14:50 - 15:50": 7, - } - ) - # ic(best, correct_teacher_availability_matrix) +# if __name__ == "__main__": +# best, correct_teacher_availability_matrix = run_timetable_generation( +# teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, +# total_sections=RoomCapacity.section_strength, +# total_classrooms=RoomCapacity.room_capacity, +# total_labs=RoomCapacity.lab_capacity, +# teacher_preferences=TeacherWorkload.teacher_preferences, +# teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, +# special_subjects=SpecialSubjects.special_subjects, +# labs=SpecialSubjects.Labs, +# subject_quota_limits=SubjectWeeklyQuota.subject_quota, +# teacher_duty_days=TeacherWorkload.teacher_duty_days, +# teacher_availability_matrix=initialize_teacher_availability( +# TeacherWorkload.Weekly_workLoad.keys(), +# 5, +# 7 +# ), +# total_generations=Defaults.total_no_of_generations, +# time_slots=TimeSlots.time_slots +# ) +# # from icecream import ic +# # ic(best) +# correct_teacher_availability_matrix = update_matrix_for_best( +# best, +# correct_teacher_availability_matrix, +# { +# "Monday": 0, +# "Tuesday": 1, +# "Wednesday": 2, +# "Thursday": 3, +# "Friday": 4, +# "Saturday": 5, +# "Sunday": 6 +# }, +# TimeSlots.time_slots +# ) diff --git a/GA/chromosome.py b/GA/chromosome.py index 45c325e..89e2a7c 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -1,9 +1,6 @@ import random from Constants.constant import Defaults -from Constants.time_intervals import TimeIntervalConstant - - class TimeTableGeneration: def __init__( self, @@ -17,7 +14,8 @@ def __init__( labs: dict, subject_quota_limits: dict, teacher_duty_days: dict, - teacher_availability_matrix=dict + teacher_availability_matrix:dict, + time_slots:dict, ): self.sections_manager = total_sections self.classrooms_manager =total_classrooms @@ -28,7 +26,7 @@ def __init__( self.lab_subject_list = labs self.special_subject_list = special_subjects self.teacher_availability_preferences = teacher_preferences - self.available_time_slots = TimeIntervalConstant.time_slots + self.available_time_slots =time_slots self.teacher_duty_days = teacher_duty_days self.weekly_workload = teacher_weekly_workload self.teacher_assignment_tracker = {teacher: 0 for teacher in teacher_weekly_workload} @@ -77,6 +75,7 @@ def _get_available_subjects(self, section, subject_usage_tracker): return [ subject for subject in self.subject_teacher_mapping + # print(subject_usage_tracker[section][subject], self.subject_quota_limits.get(subject, 0)) if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] @@ -121,7 +120,7 @@ def _assign_subject_and_teacher( and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and teacher_availability_matrix[teacher][day_index][slot_index - 1] ): - teacher_availability_matrix[teacher][day_index][slot_index - 1] = False + # teacher_availability_matrix[teacher][day_index][slot_index - 1] = False assigned_teacher = teacher teacher_workload_tracker[assigned_teacher] += 1 selected_subject = subject @@ -159,8 +158,8 @@ def _generate_section_schedule( total_slots_for_section = 4 if section in half_day_sections else 7 slot_index = 1 - while slot_index <= total_slots_for_section: - time_slot = self.available_time_slots[slot_index] + while slot_index+1 <= total_slots_for_section: + time_slot = self.available_time_slots[slot_index+1] assigned_teacher, assigned_subject, assigned_room= self._assign_subject_and_teacher( section, slot_index, subjects_scheduled_today, assigned_classroom, section_subject_usage_tracker, teacher_workload_tracker, diff --git a/GA/fitness.py b/GA/fitness.py index 620ee1f..4f40936 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -20,9 +20,10 @@ def __init__( subject_quota_data, teacher_time_preferences, teacher_daily_workload, + time_slots, ): self.timetable = timetable - self.available_days = Defaults.working_days # Removed trailing comma + self.available_days = Defaults.working_days self.all_sections = all_sections self.subject_teacher_mapping = subject_teacher_mapping self.available_classrooms = available_classrooms @@ -32,7 +33,8 @@ def __init__( self.subject_quota_data = subject_quota_data self.teacher_time_preferences = teacher_time_preferences self.teacher_daily_workload = teacher_daily_workload - + self.time_slots = time_slots + def evaluate_timetable_fitness(self): daily_section_fitness_scores = {} weekly_fitness_scores = {} @@ -55,7 +57,7 @@ def evaluate_timetable_fitness(self): for schedule_item in section_schedule: assigned_teacher = schedule_item["teacher_id"] assigned_classroom = schedule_item["classroom_id"] - assigned_time_slot = TimeIntervalConstant.time_mapping.get( + assigned_time_slot = self.time_slots.get( schedule_item["time_slot"] ) section_strength = self.section_student_strength.get(section, 0) @@ -107,6 +109,7 @@ def evaluate_timetable_fitness(self): weekly_fitness += day_fitness weekly_fitness_scores[week] = weekly_fitness + return daily_section_fitness_scores, weekly_fitness_scores diff --git a/Samples/samples.py b/Samples/samples.py index 099f50f..1453949 100644 --- a/Samples/samples.py +++ b/Samples/samples.py @@ -1,3 +1,13 @@ +class TimeSlots: + time_slots = { + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + } class SubjectTeacherMap: subject_teacher_map = { "TCS-531": ["AB01", "PK02"], diff --git a/__init__.py b/__init__.py index b1c2c58..c00230d 100644 --- a/__init__.py +++ b/__init__.py @@ -1,100 +1,185 @@ -# This init is for preloaded values and to test the flow the actual init is inside GA/__init__.py - -import json - from Constants.constant import Defaults +from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best, \ + initialize_teacher_availability from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection from Samples.samples import (InterDepartment, SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload) - - -def timetable_generation(): - # Create Chromosomes + TeacherWorkload, RoomCapacity, TimeSlots) + +def timetable_generation( + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + time_slots, + prev_selected_chromosomes=None, + prev_mutated_chromosomes=None +): timetable_generator = TimeTableGeneration( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=6, - total_classrooms=8, - total_labs=3, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - labs=SpecialSubjects.Labs, - teacher_availability_matrix=InterDepartment.teacher_availability_matrix, + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + time_slots=time_slots ) - - timetable, teacher_avail_matrix = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) - - - # Fitness of each Chromosome + timetable, teacher_availability_matrix = timetable_generator.create_timetable( + Defaults.initial_no_of_chromosomes + ) + fitness_calculator = TimetableFitnessEvaluator( timetable, - timetable_generator.sections_manager.sections, + timetable_generator.sections_manager.keys(), SubjectTeacherMap.subject_teacher_map, - timetable_generator.classrooms_manager.classrooms, - timetable_generator.classrooms_manager.labs, - timetable_generator.room_capacity_manager.room_capacity, - timetable_generator.room_capacity_manager.section_strength, + timetable_generator.classrooms_manager.keys(), + timetable_generator.lab_capacity_manager.keys(), + timetable_generator.classrooms_manager, + timetable_generator.sections_manager, timetable_generator.subject_quota_limits, timetable_generator.teacher_availability_preferences, timetable_generator.weekly_workload, + time_slots ) - fitness_scores = fitness_calculator.evaluate_timetable_fitness() - - # Selection of all Chromosomes selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - # Crossover for all selected Chromosomes + if prev_selected_chromosomes: + selected_chromosomes.update(prev_selected_chromosomes) + crossover_object = TimeTableCrossOver() crossover_chromosomes = [] - selected_chromosome_keys = list(selected_chromosomes.keys()) + selected_keys = list(selected_chromosomes.keys()) - for i in range(0, len(selected_chromosome_keys), 2): - if i + 1 < len(selected_chromosome_keys): - parent1 = selected_chromosome_keys[i] - parent2 = selected_chromosome_keys[i + 1] - child1, child2 = crossover_object.perform_crossover( - timetable[parent1], - timetable[parent2] - ) + for i in range(0, len(selected_keys), 2): + if i + 1 < len(selected_keys): + parent1 = selected_keys[i] + parent2 = selected_keys[i + 1] + c1, c2 = crossover_object.perform_crossover(timetable[parent1], timetable[parent2]) + crossover_chromosomes.append(c1) + crossover_chromosomes.append(c2) - crossover_chromosomes.append(child1) - crossover_chromosomes.append(child2) - - - # Mutate all crossover Chromosomes mutation_object = TimeTableMutation() - mutated_chromosomes = [ - mutation_object.mutate_schedule_for_week(chromosome) - for chromosome in crossover_chromosomes - ] + mutated_chromosomes = [mutation_object.mutate_schedule_for_week(ch) for ch in crossover_chromosomes] + if prev_mutated_chromosomes: + mutated_chromosomes.extend(prev_mutated_chromosomes) - # Store best of Chromosomes best_chromosome_score = -1 - best_chromosome = dict() - - for week_no, week_score in selected_chromosomes.items(): - if int(week_score) > best_chromosome_score: - best_chromosome_score = int(week_score) - best_chromosome = timetable[week_no] - - return best_chromosome - - -def run_timetable_generation(): - best_chromosome = dict() - for generation in range(Defaults.total_no_of_generations): - best_chromosome = timetable_generation() - return best_chromosome - - -json_data = json.dumps(run_timetable_generation(), indent=4) -print(json_data) + best_chromosome = None + + for w_no, w_score in selected_chromosomes.items(): + score = int(w_score) + if score > best_chromosome_score and w_no in timetable: + best_chromosome_score = score + best_chromosome = timetable[w_no] + + if best_chromosome: + teacher_availability_matrix = update_teacher_availability_matrix( + teacher_availability_matrix, + best_chromosome + ) + + return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes + +def run_timetable_generation( + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + total_generations, + time_slots +): + prev_selected = None + prev_mutated = None + best_chromosome = None + + for _ in range(total_generations): + best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + time_slots=time_slots, + prev_selected_chromosomes=prev_selected, + prev_mutated_chromosomes=prev_mutated + ) + prev_selected = selected + prev_mutated = mutated + + return best_chromosome, teacher_availability_matrix + +if __name__ == "__main__": + best, correct_teacher_availability_matrix = run_timetable_generation( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=RoomCapacity.section_strength, + total_classrooms=RoomCapacity.room_capacity, + total_labs=RoomCapacity.lab_capacity, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + labs=SpecialSubjects.Labs, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_availability_matrix=initialize_teacher_availability( + TeacherWorkload.Weekly_workLoad.keys(), + 5, + 7 + ), + total_generations=Defaults.total_no_of_generations, + time_slots=TimeSlots.time_slots + ) + from icecream import ic + ic(best) + correct_teacher_availability_matrix = update_matrix_for_best( + best, + correct_teacher_availability_matrix, + { + "Monday": 0, + "Tuesday": 1, + "Wednesday": 2, + "Thursday": 3, + "Friday": 4, + "Saturday": 5, + "Sunday": 6 + }, + { + "08:00 - 09:00": 1, + "09:00 - 10:00": 2, + "10:00 - 11:00": 3, + "11:00 - 12:00": 4, + "12:00 - 13:00": 5, + "13:50 - 14:50": 6, + "14:50 - 15:50": 7, + } + ) From 0d686d8447461fde48cce836049f1d213e34faf1 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Fri, 14 Feb 2025 15:39:05 +0530 Subject: [PATCH 31/67] fixup! fixed 2 slots for special classes and continous labs allocation for labs. --- GA/__init__.py | 53 +++++++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index d245f52..3988fe5 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -100,7 +100,7 @@ def timetable_generation( return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes -def run_timetable_generation( +def run_timetable_generations( teacher_subject_mapping, total_sections, total_classrooms, @@ -140,24 +140,37 @@ def run_timetable_generation( return best_chromosome, teacher_availability_matrix -if __name__ == "__main__": - best, correct_teacher_availability_matrix = run_timetable_generation( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=6, - total_classrooms=8, - total_labs=3, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - labs=SpecialSubjects.Labs, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - teacher_availability_matrix=initialize_teacher_availability( - TeacherWorkload.Weekly_workLoad.keys(), - 5, - 7 - ), - total_generations=Defaults.total_no_of_generations +def run_timetable_generation( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=6, + total_classrooms=8, + total_labs=3, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + labs=SpecialSubjects.Labs, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_availability_matrix=initialize_teacher_availability( + TeacherWorkload.Weekly_workLoad.keys(), + 5, + 7 + ), + total_generations=Defaults.total_no_of_generations, +): + best, correct_teacher_availability_matrix = run_timetable_generations( + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + total_generations ) correct_teacher_availability_matrix = update_matrix_for_best( @@ -181,4 +194,4 @@ def run_timetable_generation( ) json_data = json.dumps(best, indent=4) - print(json_data) + return json_data, correct_teacher_availability_matrix From 6f93d0a20a39e1356369ba5704cc80e89e334193 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Sat, 15 Feb 2025 15:34:02 +0530 Subject: [PATCH 32/67] code back --- Samples/samples.py | 4362 +++++++++++++++++++++++++++++--------------- 1 file changed, 2940 insertions(+), 1422 deletions(-) diff --git a/Samples/samples.py b/Samples/samples.py index 8cf67f5..6550090 100644 --- a/Samples/samples.py +++ b/Samples/samples.py @@ -189,1428 +189,2946 @@ class InterDepartment: class SampleChromosome: schedule1={ - "Monday": { - "A": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L4", - "time_slot": "11:10 - 12:05" - } - ], - "C": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - } - ], - "D": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "3:30 - 4:25" - } - ] - }, - "Tuesday": { - "A": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - } - ], - "B": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Wednesday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "L2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Thursday": { - "A": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Friday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - } - } + "Monday": { + "A": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + } + ], + "D": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": 2 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": 2 + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Tuesday": { + "A": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + } + ], + "B": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Wednesday": { + "A": [ + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + } + ], + "B": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Thursday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + } + ], + "B": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + } + ], + "C": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Friday": { + "A": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + } + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Saturday": { + "A": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + } +} schedule2={ - "Monday": { - "A": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "11:10 - 12:05" - } - ], - "D": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Tuesday": { - "A": [ - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Wednesday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - } - ], - "B": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "3:30 - 4:25" - } - ] - }, - "Thursday": { - "A": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "NJ13", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Friday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] + "Monday": { + "A": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" } - - + ], + "B": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + } + ], + "D": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50", + "group": 2 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50", + "group": 2 + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Tuesday": { + "A": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + } + ], + "B": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Wednesday": { + "A": [ + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + } + ], + "B": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Thursday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 1 + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 1 + } + ], + "B": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + } + ], + "C": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50", + "group": 1 + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50", + "group": 1 + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Friday": { + "A": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + } + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00", + "group": 1 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00", + "group": 2 + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00", + "group": 2 + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] + }, + "Saturday": { + "A": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "B": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "C": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00", + "group": "all" + } + ], + "D": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "E": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ], + "F": [ + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50", + "group": "all" + }, + { + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50", + "group": "all" + } + ] } +} \ No newline at end of file From e65e48df66193526ecedca459de5b8569315369d Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 15 Feb 2025 22:10:48 +0530 Subject: [PATCH 33/67] fixup! Merge branch 'refactor_main_code2' into refactor_main_code --- GA/chromosome.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/GA/chromosome.py b/GA/chromosome.py index 3f0da45..9dcea0d 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -18,7 +18,7 @@ def __init__( subject_quota_limits: dict, teacher_duty_days: dict, teacher_availability_matrix: dict, - time_slots:dict, + time_slots: dict, ): self.sections_manager = total_sections self.classrooms_manager = total_classrooms @@ -113,7 +113,6 @@ def _assign_subject_and_teacher( def _initialize_teacher_workload_tracker(self): return {teacher: 0 for teacher in self.weekly_workload} - def _get_available_subjects(self, section, subject_usage_tracker): return [ subject @@ -154,7 +153,10 @@ def _assign_subject_and_teacher( teacher, [] ) ] - sorted_teachers_by_load = sorted(preferred_teachers, key=lambda teacher: teacher_workload_tracker[teacher]) + sorted_teachers_by_load = sorted( + preferred_teachers, + key=lambda teacher: teacher_workload_tracker[teacher] + ) for teacher in sorted_teachers_by_load: if ( @@ -186,7 +188,6 @@ def _assign_subject_and_teacher( return assigned_teacher, selected_subject, assigned_room - def _generate_section_schedule( self, section, @@ -196,7 +197,10 @@ def _generate_section_schedule( teacher_availability_matrix, day_index, section_strength=100, - labs_capacity: dict = {"L1": 50, "L2": 50} + labs_capacity: dict = { + "L1": 50, + "L2": 50 + } ): section_schedule = [] subjects_scheduled_today = set() From f9f3a857176c3e18f0fae7a6f69d4115f1d94d3e Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 15 Feb 2025 23:18:16 +0530 Subject: [PATCH 34/67] fixup! fixup! Merge branch 'refactor_main_code2' into refactor_main_code --- GA/__init__.py | 33 ++++++++++++++++++++------------- GA/chromosome.py | 23 ++++++----------------- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index c1075cb..367974c 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -190,9 +190,9 @@ def run_timetable_generation( if __name__ == "__main__": best, correct_teacher_availability_matrix = run_timetable_generation( teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=6, - total_classrooms=8, - total_labs=3, + total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50}, teacher_preferences=TeacherWorkload.teacher_preferences, teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, special_subjects=SpecialSubjects.special_subjects, @@ -204,11 +204,19 @@ def run_timetable_generation( 5, 7 ), - total_generations=Defaults.total_no_of_generations + total_generations = Defaults.total_no_of_generations, + time_slots = { + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + } ) from icecream import ic - ic(best) correct_teacher_availability_matrix = update_matrix_for_best( best, correct_teacher_availability_matrix, @@ -221,14 +229,13 @@ def run_timetable_generation( "Saturday": 5, "Sunday": 6 },{ - "08:00 - 09:00": 1, - "09:00 - 10:00": 2, - "10:00 - 11:00": 3, - "11:00 - 12:00": 4, - "12:00 - 13:00": 5, - "13:50 - 14:50": 6, - "14:50 - 15:50": 7, - "16:50 - 17:50": 8 + "9:00 - 9:55": 1, + "9:55 - 10:50": 2, + "11:10 - 12:05": 3, + "12:05 - 1:00": 4, + "1:20 - 2:15": 5, + "2:15 - 3:10": 6, + "3:30 - 4:25": 7 } ) ic(best, correct_teacher_availability_matrix) diff --git a/GA/chromosome.py b/GA/chromosome.py index 9dcea0d..176b04a 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -1,7 +1,6 @@ import random -from Constants.constant import Classrooms, Defaults, RoomCapacity, Sections -from Constants.time_intervals import TimeIntervalConstant +from Constants.constant import Defaults class TimeTableGeneration: @@ -35,7 +34,6 @@ def __init__( self.teacher_assignment_tracker = teacher_subject_mapping self.teacher_availability_matrix = teacher_availability_matrix self._map_sections_to_classrooms() - self._assign_teachers_to_sections() def _map_sections_to_classrooms(self): sorted_classrooms = sorted( @@ -95,9 +93,7 @@ def _assign_subject_and_teacher( selected_subject = subject subjects_scheduled_today.add(subject) assigned_room = ( - self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] - if subject in self.lab_subject_list or subject == "Placement_Class" - else assigned_classroom + list(self.lab_capacity_manager.keys())[slot_index % len(self.lab_capacity_manager)] ) break if assigned_teacher: @@ -171,11 +167,7 @@ def _assign_subject_and_teacher( selected_subject = subject subjects_scheduled_today.add(subject) - assigned_room = ( - self.classrooms_manager.labs[slot_index % len(self.classrooms_manager.labs)] - if subject in self.lab_subject_list - else assigned_classroom - ) + assigned_room = list(self.lab_capacity_manager.keys())[slot_index % len(self.lab_capacity_manager)] break if assigned_teacher: @@ -197,17 +189,14 @@ def _generate_section_schedule( teacher_availability_matrix, day_index, section_strength=100, - labs_capacity: dict = { - "L1": 50, - "L2": 50 - } + labs_capacity: dict = {"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50} ): section_schedule = [] subjects_scheduled_today = set() assigned_classroom = self.section_to_classroom_map[section] total_slots = 4 if section in half_day_sections else 7 slot_index = 1 - + print(self.available_time_slots) while slot_index <= total_slots: time_slot = self.available_time_slots[slot_index] assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( @@ -223,7 +212,7 @@ def _generate_section_schedule( assigned_room in labs_capacity and section_strength > labs_capacity[assigned_room]): # Try to find an alternate lab room for group 2. lab2 = None - for lab in self.classrooms_manager.labs: + for lab in self.lab_capacity_manager: if lab != assigned_room and lab in labs_capacity: if labs_capacity[lab] >= section_strength - labs_capacity[assigned_room]: lab2 = lab From d5ef10c64ed9bb4705427c7053fe89329f2cd685 Mon Sep 17 00:00:00 2001 From: gunjan Date: Sat, 15 Feb 2025 23:39:00 +0530 Subject: [PATCH 35/67] adding converter --- Constants/classroom_timetable_converter.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Constants/classroom_timetable_converter.py diff --git a/Constants/classroom_timetable_converter.py b/Constants/classroom_timetable_converter.py new file mode 100644 index 0000000..e69de29 From 719812da72f0c50a7d6203920715cc97ad1bc087 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 15 Feb 2025 23:59:48 +0530 Subject: [PATCH 36/67] fixup! fixup! Merge branch 'refactor_main_code2' into refactor_main_code --- GA/__init__.py | 137 +++++++++++++++++++++++++---------------------- GA/chromosome.py | 112 +++++++++++--------------------------- GA/fitness.py | 2 - 3 files changed, 103 insertions(+), 148 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index 367974c..063bbef 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,16 +1,10 @@ # This is the Orchestrator file, which will govern the flow. -import json -from Constants.constant import Defaults -from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best, \ - initialize_teacher_availability +from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection -from Samples.samples import (InterDepartment, SpecialSubjects, - SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload) def timetable_generation( @@ -50,18 +44,18 @@ def timetable_generation( ) fitness_calculator = TimetableFitnessEvaluator( - timetable=timetable, - all_sections=list(timetable_generator.sections_manager.keys()), - subject_teacher_mapping=timetable_generator.subject_teacher_mapping, - available_classrooms=list(timetable_generator.classrooms_manager.keys()), - available_labs=list(timetable_generator.lab_capacity_manager.keys()), - classroom_capacity=timetable_generator.classrooms_manager, - section_student_strength=timetable_generator.sections_manager, - subject_quota_data=timetable_generator.subject_quota_limits, - teacher_time_preferences=timetable_generator.teacher_availability_preferences, - teacher_daily_workload=timetable_generator.weekly_workload, - time_slots=time_slots -) + timetable=timetable, + all_sections=list(timetable_generator.sections_manager.keys()), + subject_teacher_mapping=timetable_generator.subject_teacher_mapping, + available_classrooms=list(timetable_generator.classrooms_manager.keys()), + available_labs=list(timetable_generator.lab_capacity_manager.keys()), + classroom_capacity=timetable_generator.classrooms_manager, + section_student_strength=timetable_generator.sections_manager, + subject_quota_data=timetable_generator.subject_quota_limits, + teacher_time_preferences=timetable_generator.teacher_availability_preferences, + teacher_daily_workload=timetable_generator.weekly_workload, + time_slots=time_slots + ) fitness_scores = fitness_calculator.evaluate_timetable_fitness() selection_object = TimeTableSelection() @@ -104,6 +98,7 @@ def timetable_generation( return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes + def run_timetable_generations( teacher_subject_mapping, total_sections, @@ -184,42 +179,9 @@ def run_timetable_generation( prev_selected = selected prev_mutated = mutated - return best_chromosome, teacher_availability_matrix - - -if __name__ == "__main__": - best, correct_teacher_availability_matrix = run_timetable_generation( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, - total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, - total_labs={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50}, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - labs=SpecialSubjects.Labs, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - teacher_availability_matrix=initialize_teacher_availability( - TeacherWorkload.Weekly_workLoad.keys(), - 5, - 7 - ), - total_generations = Defaults.total_no_of_generations, - time_slots = { - 1: "9:00 - 9:55", - 2: "9:55 - 10:50", - 3: "11:10 - 12:05", - 4: "12:05 - 1:00", - 5: "1:20 - 2:15", - 6: "2:15 - 3:10", - 7: "3:30 - 4:25", - } - ) - - from icecream import ic correct_teacher_availability_matrix = update_matrix_for_best( - best, - correct_teacher_availability_matrix, + best_chromosome, + teacher_availability_matrix, { "Monday": 0, "Tuesday": 1, @@ -228,14 +190,61 @@ def run_timetable_generation( "Friday": 4, "Saturday": 5, "Sunday": 6 - },{ - "9:00 - 9:55": 1, - "9:55 - 10:50": 2, - "11:10 - 12:05": 3, - "12:05 - 1:00": 4, - "1:20 - 2:15": 5, - "2:15 - 3:10": 6, - "3:30 - 4:25": 7 - } + }, time_slots ) - ic(best, correct_teacher_availability_matrix) + + return best_chromosome, correct_teacher_availability_matrix + + +# if __name__ == "__main__": +# best, correct_teacher_availability_matrix = run_timetable_generation( +# teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, +# total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, +# total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, +# total_labs={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50}, +# teacher_preferences=TeacherWorkload.teacher_preferences, +# teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, +# special_subjects=SpecialSubjects.special_subjects, +# labs=SpecialSubjects.Labs, +# subject_quota_limits=SubjectWeeklyQuota.subject_quota, +# teacher_duty_days=TeacherWorkload.teacher_duty_days, +# teacher_availability_matrix=initialize_teacher_availability( +# TeacherWorkload.Weekly_workLoad.keys(), +# 5, +# 7 +# ), +# total_generations = Defaults.total_no_of_generations, +# time_slots = { +# 1: "9:00 - 9:55", +# 2: "9:55 - 10:50", +# 3: "11:10 - 12:05", +# 4: "12:05 - 1:00", +# 5: "1:20 - 2:15", +# 6: "2:15 - 3:10", +# 7: "3:30 - 4:25", +# } +# ) +# +# from icecream import ic +# correct_teacher_availability_matrix = update_matrix_for_best( +# best, +# correct_teacher_availability_matrix, +# { +# "Monday": 0, +# "Tuesday": 1, +# "Wednesday": 2, +# "Thursday": 3, +# "Friday": 4, +# "Saturday": 5, +# "Sunday": 6 +# },{ +# "9:00 - 9:55": 1, +# "9:55 - 10:50": 2, +# "11:10 - 12:05": 3, +# "12:05 - 1:00": 4, +# "1:20 - 2:15": 5, +# "2:15 - 3:10": 6, +# "3:30 - 4:25": 7 +# } +# ) +# ic(best, correct_teacher_availability_matrix) diff --git a/GA/chromosome.py b/GA/chromosome.py index 176b04a..fbeaf5e 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -52,15 +52,15 @@ def _map_sections_to_classrooms(self): return self.section_to_classroom_map def _assign_subject_and_teacher( - self, - section, - slot_index, - subjects_scheduled_today, - assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, - day_index + self, + section, + slot_index, + subjects_scheduled_today, + assigned_classroom, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index ): available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) random.shuffle(available_subjects) @@ -107,7 +107,10 @@ def _assign_subject_and_teacher( return assigned_teacher, selected_subject, assigned_room def _initialize_teacher_workload_tracker(self): - return {teacher: 0 for teacher in self.weekly_workload} + return { + teacher: 0 + for teacher in self.weekly_workload + } def _get_available_subjects(self, section, subject_usage_tracker): return [ @@ -116,87 +119,23 @@ def _get_available_subjects(self, section, subject_usage_tracker): if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] - - def _assign_subject_and_teacher( + def _generate_section_schedule( self, section, - slot_index, - subjects_scheduled_today, - assigned_classroom, + half_day_sections, section_subject_usage_tracker, teacher_workload_tracker, teacher_availability_matrix, - day_index - ): - available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) - random.shuffle(available_subjects) - assigned_teacher = None - selected_subject = None - assigned_room = None - - for subject in available_subjects: - if subject in self.lab_subject_list and slot_index not in [1, 3, 5]: - continue - - if subject in self.special_subject_list and slot_index not in [5]: - continue - - if subject not in subjects_scheduled_today: - teachers_for_subject = self.subject_teacher_mapping[subject] - preferred_teachers = [ - teacher for teacher in teachers_for_subject - if self.teacher_availability_preferences.get( - teacher, [] - ) - ] - sorted_teachers_by_load = sorted( - preferred_teachers, - key=lambda teacher: teacher_workload_tracker[teacher] - ) - - for teacher in sorted_teachers_by_load: - if ( - teacher in teacher_availability_matrix - and len(teacher_availability_matrix[teacher]) > day_index - and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) - and teacher_availability_matrix[teacher][day_index][slot_index - 1] - ): - # teacher_availability_matrix[teacher][day_index][slot_index - 1] = False - assigned_teacher = teacher - teacher_workload_tracker[assigned_teacher] += 1 - selected_subject = subject - subjects_scheduled_today.add(subject) - - assigned_room = list(self.lab_capacity_manager.keys())[slot_index % len(self.lab_capacity_manager)] - break - - if assigned_teacher: - break - - if not assigned_teacher: - selected_subject = "Library" - assigned_teacher = "None" - assigned_room = assigned_classroom - - return assigned_teacher, selected_subject, assigned_room - - def _generate_section_schedule( - self, - section, - half_day_sections, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, - day_index, - section_strength=100, - labs_capacity: dict = {"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50} + day_index: int, + section_strength: int, + labs_capacity: dict ): section_schedule = [] subjects_scheduled_today = set() assigned_classroom = self.section_to_classroom_map[section] total_slots = 4 if section in half_day_sections else 7 slot_index = 1 - print(self.available_time_slots) + while slot_index <= total_slots: time_slot = self.available_time_slots[slot_index] assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( @@ -210,6 +149,7 @@ def _generate_section_schedule( # Check if splitting is needed (i.e. section strength exceeds the lab room capacity). if (section_strength is not None and labs_capacity is not None and assigned_room in labs_capacity and section_strength > labs_capacity[assigned_room]): + # Try to find an alternate lab room for group 2. lab2 = None for lab in self.lab_capacity_manager: @@ -217,6 +157,7 @@ def _generate_section_schedule( if labs_capacity[lab] >= section_strength - labs_capacity[assigned_room]: lab2 = lab break + if lab2 is None: raise ValueError("Insufficient lab capacity to split section for lab subject.") @@ -260,6 +201,7 @@ def _generate_section_schedule( }) section_subject_usage_tracker[section][assigned_subject] += 4 slot_index += 4 + else: # Not enough slots for full split; fall back to non-split 2-hour allocation. if slot_index + 1 <= total_slots: @@ -312,6 +254,7 @@ def _generate_section_schedule( }) section_subject_usage_tracker[section][assigned_subject] += 2 slot_index += 2 + else: section_schedule.append({ "teacher_id": assigned_teacher, @@ -339,18 +282,23 @@ def _generate_section_schedule( return section_schedule, teacher_availability_matrix - def generate_daily_schedule(self, section_list,half_day_sections,section_subject_usage_tracker, day_index): + def generate_daily_schedule(self, section_list, half_day_sections, section_subject_usage_tracker, day_index): daily_schedule = {} teacher_workload_tracker = self._initialize_teacher_workload_tracker() for section in section_list: # Iterate over half-day sections only + section_strength = self.sections_manager[section] + labs_capacity = self.lab_capacity_manager + section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( section, half_day_sections, section_subject_usage_tracker, teacher_workload_tracker, self.teacher_availability_matrix, - day_index + day_index, + section_strength, + labs_capacity ) daily_schedule[section] = section_schedule diff --git a/GA/fitness.py b/GA/fitness.py index 4f40936..53054b2 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -39,9 +39,7 @@ def evaluate_timetable_fitness(self): daily_section_fitness_scores = {} weekly_fitness_scores = {} teacher_workload_tracking = {} - from icecream import ic - # ic(self.timetable) for week, week_schedule in self.timetable.items(): weekly_fitness = 0 daily_section_fitness_scores[week] = {} From aec94a625d693c01adcc372eb9d0760d8e5aec35 Mon Sep 17 00:00:00 2001 From: gunjan Date: Sun, 16 Feb 2025 00:07:30 +0530 Subject: [PATCH 37/67] Prachi's Mistake --- Constants/classroom_timetable_converter.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Constants/classroom_timetable_converter.py diff --git a/Constants/classroom_timetable_converter.py b/Constants/classroom_timetable_converter.py deleted file mode 100644 index e69de29..0000000 From df75ffbd85174ffa8e41c22d6e63ac7907621ef2 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Sun, 16 Feb 2025 01:39:35 +0530 Subject: [PATCH 38/67] Teacher_tt completed and converted to csv also classroom_tt completed and converted to csv --- Constants/classroom_timetable.json | 2255 +++++++++++++++++ Constants/classroom_tt.py | 48 + Constants/classroom_tt_csv.py | 83 + Constants/teacher_timetable.json | 3710 ++++++++++++++++++++-------- Constants/teacher_tt_csv.py | 81 + Constants/teachers_tt.py | 81 +- Constants/timetable_csv.py | 124 + Samples/samples.py | 900 +++---- output_csvs/L1.csv | 7 + output_csvs/L2.csv | 7 + output_csvs/L3.csv | 7 + output_csvs/R1.csv | 7 + output_csvs/R2.csv | 7 + output_csvs/R3.csv | 7 + output_csvs/R4.csv | 7 + output_csvs/R5.csv | 7 + output_csvs/R6.csv | 7 + tt_csvs/AA04.csv | 7 + tt_csvs/AA15.csv | 7 + tt_csvs/AB01.csv | 7 + tt_csvs/AB17.csv | 7 + tt_csvs/AC05.csv | 7 + tt_csvs/AD08.csv | 7 + tt_csvs/AK23.csv | 7 + tt_csvs/AK26.csv | 7 + tt_csvs/AP24.csv | 7 + tt_csvs/BJ10.csv | 7 + tt_csvs/DP07.csv | 7 + tt_csvs/DT20.csv | 7 + tt_csvs/HP18.csv | 7 + tt_csvs/JM12.csv | 7 + tt_csvs/NB22.csv | 7 + tt_csvs/NJ13.csv | 7 + tt_csvs/None.csv | 7 + tt_csvs/PA21.csv | 7 + tt_csvs/PK02.csv | 7 + tt_csvs/PM14.csv | 7 + tt_csvs/RD09.csv | 7 + tt_csvs/RS11.csv | 7 + tt_csvs/SG19.csv | 7 + tt_csvs/SJ16.csv | 7 + tt_csvs/SP06.csv | 7 + tt_csvs/SS03.csv | 7 + tt_csvs/VD25.csv | 7 + 44 files changed, 6003 insertions(+), 1531 deletions(-) create mode 100644 Constants/classroom_timetable.json create mode 100644 Constants/classroom_tt.py create mode 100644 Constants/classroom_tt_csv.py create mode 100644 Constants/teacher_tt_csv.py create mode 100644 Constants/timetable_csv.py create mode 100644 output_csvs/L1.csv create mode 100644 output_csvs/L2.csv create mode 100644 output_csvs/L3.csv create mode 100644 output_csvs/R1.csv create mode 100644 output_csvs/R2.csv create mode 100644 output_csvs/R3.csv create mode 100644 output_csvs/R4.csv create mode 100644 output_csvs/R5.csv create mode 100644 output_csvs/R6.csv create mode 100644 tt_csvs/AA04.csv create mode 100644 tt_csvs/AA15.csv create mode 100644 tt_csvs/AB01.csv create mode 100644 tt_csvs/AB17.csv create mode 100644 tt_csvs/AC05.csv create mode 100644 tt_csvs/AD08.csv create mode 100644 tt_csvs/AK23.csv create mode 100644 tt_csvs/AK26.csv create mode 100644 tt_csvs/AP24.csv create mode 100644 tt_csvs/BJ10.csv create mode 100644 tt_csvs/DP07.csv create mode 100644 tt_csvs/DT20.csv create mode 100644 tt_csvs/HP18.csv create mode 100644 tt_csvs/JM12.csv create mode 100644 tt_csvs/NB22.csv create mode 100644 tt_csvs/NJ13.csv create mode 100644 tt_csvs/None.csv create mode 100644 tt_csvs/PA21.csv create mode 100644 tt_csvs/PK02.csv create mode 100644 tt_csvs/PM14.csv create mode 100644 tt_csvs/RD09.csv create mode 100644 tt_csvs/RS11.csv create mode 100644 tt_csvs/SG19.csv create mode 100644 tt_csvs/SJ16.csv create mode 100644 tt_csvs/SP06.csv create mode 100644 tt_csvs/SS03.csv create mode 100644 tt_csvs/VD25.csv diff --git a/Constants/classroom_timetable.json b/Constants/classroom_timetable.json new file mode 100644 index 0000000..983356b --- /dev/null +++ b/Constants/classroom_timetable.json @@ -0,0 +1,2255 @@ +{ + "L2": { + "Monday": { + "A": [ + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "14:50 - 15:50" + } + ], + "F": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Tuesday": { + "A": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "09:00 - 10:00" + } + ], + "F": [ + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Wednesday": { + "D": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "14:50 - 15:50" + } + ], + "E": [ + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Thursday": { + "C": [ + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "09:00 - 10:00" + } + ], + "E": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "14:50 - 15:50" + } + ], + "F": [ + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "09:00 - 10:00" + } + ], + "B": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Friday": { + "B": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "09:00 - 10:00" + } + ], + "C": [ + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Saturday": {} + }, + "L1": { + "Monday": { + "A": [ + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "C": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "F": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Tuesday": { + "A": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "C": [ + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "F": [ + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": { + "C": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "12:00 - 13:00" + } + ], + "E": [ + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "A": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "C": [ + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "E": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "F": [ + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "12:00 - 13:00" + } + ], + "A": [ + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "RS11", + "time_slot": "12:00 - 13:00" + } + ], + "B": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": { + "B": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ], + "C": [ + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "teacher_id": "AD08", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": {} + }, + "R2": { + "Monday": { + "B": [ + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Tuesday": { + "B": [ + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": { + "B": [ + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "B": [ + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": { + "B": [ + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": { + "B": [ + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + } + ] + } + }, + "R3": { + "Monday": { + "C": [ + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "PA21", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Tuesday": { + "C": [ + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": { + "C": [ + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "C": [ + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": { + "C": [ + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": { + "C": [ + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + } + ] + } + }, + "R4": { + "Monday": { + "D": [ + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "NB22", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-503", + "teacher_id": "AC05", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Tuesday": { + "D": [ + { + "subject_id": "XCS-501", + "teacher_id": "PA21", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "AC05", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "XCS-501", + "teacher_id": "PA21", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AC05", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Wednesday": { + "D": [ + { + "subject_id": "TCS-509", + "teacher_id": "HP18", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "AC05", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "PA21", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "HP18", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "AC05", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Thursday": { + "D": [ + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "HP18", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Friday": { + "D": [ + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Saturday": { + "D": [ + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + } + }, + "R5": { + "Monday": { + "E": [ + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-509", + "teacher_id": "HP18", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Tuesday": { + "E": [ + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "NB22", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "NB22", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Wednesday": { + "E": [ + { + "subject_id": "TMA-502", + "teacher_id": "RS11", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SG19", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SG19", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "TCS-503", + "teacher_id": "AC05", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AC05", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "HP18", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "NJ13", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Friday": { + "E": [ + { + "subject_id": "TCS-503", + "teacher_id": "AC05", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Saturday": { + "E": [ + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + } + }, + "R6": { + "Monday": { + "F": [ + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "PA21", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "AC05", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "PA21", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Tuesday": { + "F": [ + { + "subject_id": "TCS-502", + "teacher_id": "AC05", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "AA04", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Wednesday": { + "F": [ + { + "subject_id": "XCS-501", + "teacher_id": "PA21", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "JM12", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-503", + "teacher_id": "DP07", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "NJ13", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Thursday": { + "F": [ + { + "subject_id": "TCS-509", + "teacher_id": "SG19", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-531", + "teacher_id": "PK02", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SG19", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Friday": { + "F": [ + { + "subject_id": "TMA-502", + "teacher_id": "NJ13", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "teacher_id": "AK26", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "AB17", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Saturday": { + "F": [ + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "16:50 - 17:50" + } + ] + } + }, + "L3": { + "Monday": { + "F": [ + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "teacher_id": "PM14", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Tuesday": { + "E": [ + { + "subject_id": "PMA-502", + "teacher_id": "AA15", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "teacher_id": "AA15", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "14:50 - 15:50" + } + ], + "F": [ + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Wednesday": { + "D": [ + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "teacher_id": "VD25", + "time_slot": "14:50 - 15:50" + } + ], + "F": [ + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "teacher_id": "RD09", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "teacher_id": "DP07", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Friday": {}, + "Saturday": {} + }, + "R1": { + "Monday": { + "A": [ + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Tuesday": {}, + "Wednesday": { + "A": [ + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Thursday": { + "A": [ + { + "subject_id": "SCS-501", + "teacher_id": "AP24", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "XCS-501", + "teacher_id": "DT20", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Friday": { + "A": [ + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-503", + "teacher_id": "SP06", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "CSP-501", + "teacher_id": "AK23", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-502", + "teacher_id": "SS03", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "teacher_id": "SJ16", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TMA-502", + "teacher_id": "BJ10", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-531", + "teacher_id": "AB01", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": { + "A": [ + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "teacher_id": "None", + "time_slot": "12:00 - 13:00" + } + ] + } + } +} \ No newline at end of file diff --git a/Constants/classroom_tt.py b/Constants/classroom_tt.py new file mode 100644 index 0000000..262c3fe --- /dev/null +++ b/Constants/classroom_tt.py @@ -0,0 +1,48 @@ +import json +from Samples.samples import (WorkingDays, SampleChromosome) + +class ClassroomTimetable: + def __init__(self): + # Dictionary to hold timetables for each classroom + self.classroom_timetable = {} + + def generate_classroom_timetable(self, chromosome): + for week, days in chromosome.items(): + for day, sections in days.items(): + for section, classes in sections.items(): + for entry in classes: + classroom_id = entry["classroom_id"] + + if classroom_id not in self.classroom_timetable: + self.classroom_timetable[classroom_id] = {day: {} for day in WorkingDays.days} + + if section not in self.classroom_timetable[classroom_id][day]: + self.classroom_timetable[classroom_id][day][section] = [] + + self.classroom_timetable[classroom_id][day][section].append({ + "subject_id": entry["subject_id"], + "teacher_id": entry["teacher_id"], + "time_slot": entry["time_slot"], + }) + + return self.classroom_timetable + + def save_timetable_to_json(self, file_path="Constants/classroom_timetable.json"): + try: + with open(file_path, "w") as json_file: + json.dump(self.classroom_timetable, json_file, indent=4) + # print(f"Timetable successfully saved to '{file_path}'.") + except Exception as e: + print(f"Error saving timetable to '{file_path}': {e}") + +if __name__ == "__main__": + # Generate classroom-wise timetable + classroom_timetable = ClassroomTimetable() + w = { + "Week 2": SampleChromosome.schedule2, + "Week 1": SampleChromosome.schedule1 + } + classroom_tt = classroom_timetable.generate_classroom_timetable(w) + print(classroom_tt) + # Save as JSON + classroom_timetable.save_timetable_to_json() diff --git a/Constants/classroom_tt_csv.py b/Constants/classroom_tt_csv.py new file mode 100644 index 0000000..6b59a1f --- /dev/null +++ b/Constants/classroom_tt_csv.py @@ -0,0 +1,83 @@ +import os +import csv +from Samples.samples import (SampleChromosome,WorkingDays) +from Constants.classroom_tt import ClassroomTimetable # Ensure correct import + +# Predefined time slots mapping +time_slots = { + 1: "08:00 - 09:00", + 2: "09:00 - 10:00", + 3: "11:00 - 12:00", + 4: "12:00 - 13:00", + 5: "16:50 - 17:50", +} + +# Reverse lookup to get slot number from time string +time_slot_order = {v: k for k, v in time_slots.items()} + +# List of days in the correct order +days_of_week_order =WorkingDays.days + +def extract_time_slots(timetable): + """Extract and sort time slots from timetable.""" + unique_slots = set() + + # Collect all unique time slots + for day_data in timetable.values(): + for slots in day_data.values(): + for entry in slots: + if isinstance(entry, dict) and "time_slot" in entry: # ✅ Ensure correct structure + unique_slots.add(entry["time_slot"]) + else: + print(f"⚠️ ERROR: Unexpected entry format -> {entry}") + + # Sort slots based on predefined order + sorted_slots = sorted(unique_slots, key=lambda slot: time_slot_order.get(slot, float('inf'))) + + return [("CLASS", slot) for slot in sorted_slots] # Only include class slots + +def classroom_json_to_csv(classroom_timetable, output_folder): + """Convert classroom timetable JSON to CSV.""" + os.makedirs(output_folder, exist_ok=True) + + for classroom_id, schedule in classroom_timetable.items(): + final_slots = extract_time_slots(schedule) + csv_file = os.path.join(output_folder, f"{classroom_id}.csv") + header = ["DAY"] + [slot[1] for slot in final_slots] + rows = [] + + # Sort days correctly + sorted_days = sorted(schedule.items(), key=lambda x: days_of_week_order.index(x[0])) + + for day, day_data in sorted_days: + row = [day] + ["" for _ in final_slots] # Empty slots initially + + for section, classes in day_data.items(): + for entry in classes: + for i, slot in enumerate(final_slots): + if entry["time_slot"] == slot[1]: + row[i + 1] = f"{entry['subject_id']} ({section}, {entry['teacher_id']})" + + rows.append(row) + + # Write to CSV + with open(csv_file, mode="w", newline="", encoding="utf-8") as file: + writer = csv.writer(file) + writer.writerow(header) + writer.writerows(rows) + +if __name__ == "__main__": + # Generate classroom-wise timetable + classroom_timetable = ClassroomTimetable() + weekly_schedule = { + "Week 2": SampleChromosome.schedule2, + "Week 1": SampleChromosome.schedule1 + } + + classroom_tt = classroom_timetable.generate_classroom_timetable(weekly_schedule) + + # Output folder for CSV files + output_folder = "output_csvs" + + # Convert the generated timetable to CSV + classroom_json_to_csv(classroom_tt, output_folder) diff --git a/Constants/teacher_timetable.json b/Constants/teacher_timetable.json index 42c705c..e94b208 100644 --- a/Constants/teacher_timetable.json +++ b/Constants/teacher_timetable.json @@ -1,1050 +1,2720 @@ { - "AB01": { - "Monday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TCS-531", - "time_slot": "2:15 - 3:10", - "classroom_id": "R2" - }, - { - "course": "Week 1", - "section": "D", - "subject_id": "TCS-531", - "time_slot": "1:20 - 2:15", - "classroom_id": "R4" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-531", - "time_slot": "9:00 - 9:55", - "classroom_id": "R1" - }, - { - "course": "Week 1", - "section": "B", - "subject_id": "TCS-531", - "time_slot": "9:55 - 10:50", - "classroom_id": "R2" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-531", - "time_slot": "11:10 - 12:05", - "classroom_id": "R3" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-531", - "time_slot": "3:30 - 4:25", - "classroom_id": "R3" - } - ], - "Friday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-531", - "time_slot": "12:05 - 1:00", - "classroom_id": "R3" - } - ], - "Saturday": [] - }, - "PK02": { - "Monday": [], - "Tuesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-531", - "time_slot": "12:05 - 1:00", - "classroom_id": "R3" - }, - { - "course": "Week 1", - "section": "C", - "subject_id": "TCS-531", - "time_slot": "1:20 - 2:15", - "classroom_id": "R3" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "TCS-531", - "time_slot": "2:15 - 3:10", - "classroom_id": "R4" - } - ], - "Thursday": [ - { - "course": "Week 1", - "section": "D", - "subject_id": "TCS-531", - "time_slot": "9:55 - 10:50", - "classroom_id": "R4" - } - ], - "Friday": [], - "Saturday": [] + "RS11": { + "Monday": { + "A": [ + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Tuesday": { + "E": [ + { + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Wednesday": { + "E": [ + { + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ], + "C": [ + { + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Thursday": { + "B": [ + { + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + } + ], + "F": [ + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ], + "A": [ + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": { + "C": [ + { + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00" + } + ], + "B": [ + { + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Saturday": {} }, - "SS03": { - "Monday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-502", - "time_slot": "3:30 - 4:25", - "classroom_id": "R1" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-502", - "time_slot": "12:05 - 1:00", - "classroom_id": "R1" - }, - { - "course": "Week 1", - "section": "B", - "subject_id": "TCS-502", - "time_slot": "9:00 - 9:55", - "classroom_id": "R2" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TCS-502", - "time_slot": "9:55 - 10:50", - "classroom_id": "R2" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-502", - "time_slot": "2:15 - 3:10", - "classroom_id": "R1" - } - ], - "Friday": [], - "Saturday": [] + "DT20": { + "Monday": { + "B": [ + { + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + } + ], + "E": [ + { + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Tuesday": { + "B": [ + { + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + } + ], + "F": [ + { + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Wednesday": { + "A": [ + { + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Thursday": { + "A": [ + { + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Friday": { + "B": [ + { + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Saturday": {} }, - "AA04": { - "Monday": [], - "Tuesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-502", - "time_slot": "3:30 - 4:25", - "classroom_id": "R3" - } - ], - "Wednesday": [], - "Thursday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TCS-502", - "time_slot": "9:00 - 9:55", - "classroom_id": "R2" - } - ], - "Friday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "TCS-502", - "time_slot": "12:05 - 1:00", - "classroom_id": "R4" - } - ], - "Saturday": [] + "AB01": { + "Monday": { + "B": [ + { + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Tuesday": { + "B": [ + { + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + } + ], + "E": [ + { + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Wednesday": { + "A": [ + { + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + } + ], + "E": [ + { + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ], + "B": [ + { + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Thursday": { + "B": [ + { + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + } + ], + "F": [ + { + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ], + "E": [ + { + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Friday": { + "A": [ + { + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + } + ], + "F": [ + { + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Saturday": {} }, - "AC05": { - "Monday": [], - "Tuesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-503", - "time_slot": "9:55 - 10:50", - "classroom_id": "R3" - }, - { - "course": "Week 2", - "section": "D", - "subject_id": "TCS-502", - "time_slot": "12:05 - 1:00", - "classroom_id": "R4" - } - ], - "Wednesday": [ - { - "course": "Week 1", - "section": "D", - "subject_id": "TCS-503", - "time_slot": "11:10 - 12:05", - "classroom_id": "R4" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-503", - "time_slot": "1:20 - 2:15", - "classroom_id": "R3" - } - ], - "Friday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TCS-503", - "time_slot": "9:00 - 9:55", - "classroom_id": "R3" - } - ], - "Saturday": [] + "AP24": { + "Monday": { + "B": [ + { + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + } + ], + "C": [ + { + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00" + } + ], + "E": [ + { + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "SCS-501", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + } + ], + "F": [ + { + "subject_id": "SCS-501", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "SCS-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ], + "A": [ + { + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00" + } + ], + "D": [ + { + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Tuesday": { + "D": [ + { + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00" + } + ], + "C": [ + { + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": {}, + "Thursday": { + "A": [ + { + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Friday": {}, + "Saturday": {} }, - "SP06": { - "Monday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TCS-503", - "time_slot": "1:20 - 2:15", - "classroom_id": "R2" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-503", - "time_slot": "11:10 - 12:05", - "classroom_id": "R1" - }, - { - "course": "Week 1", - "section": "C", - "subject_id": "TCS-503", - "time_slot": "2:15 - 3:10", - "classroom_id": "R3" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "PCS-503", - "time_slot": "9:55 - 10:50", - "classroom_id": "L4" - }, - { - "course": "Week 2", - "section": "D", - "subject_id": "PCS-503", - "time_slot": "9:00 - 9:55", - "classroom_id": "L4" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-503", - "time_slot": "3:30 - 4:25", - "classroom_id": "R1" - } - ], - "Friday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-503", - "time_slot": "12:05 - 1:00", - "classroom_id": "R1" - } - ], - "Saturday": [] + "BJ10": { + "Monday": { + "B": [ + { + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Tuesday": { + "D": [ + { + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + } + ], + "C": [ + { + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Wednesday": { + "D": [ + { + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ], + "A": [ + { + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Thursday": { + "A": [ + { + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + } + ], + "F": [ + { + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Friday": { + "A": [ + { + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Saturday": {} }, - "DP07": { - "Monday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-503", - "time_slot": "12:05 - 1:00", - "classroom_id": "L4" - }, - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-503", - "time_slot": "11:10 - 12:05", - "classroom_id": "L4" - }, - { - "course": "Week 1", - "section": "C", - "subject_id": "TCS-503", - "time_slot": "9:00 - 9:55", - "classroom_id": "R3" - } - ], - "Tuesday": [], - "Wednesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-503", - "time_slot": "2:15 - 3:10", - "classroom_id": "L1" - }, - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-503", - "time_slot": "1:20 - 2:15", - "classroom_id": "L1" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TCS-503", - "time_slot": "9:55 - 10:50", - "classroom_id": "R2" - } - ], - "Friday": [], - "Saturday": [] + "AK23": { + "Monday": { + "C": [ + { + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00" + } + ], + "E": [ + { + "subject_id": "CSP-501", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + } + ], + "F": [ + { + "subject_id": "CSP-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ], + "A": [ + { + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00" + } + ], + "B": [ + { + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Tuesday": { + "E": [ + { + "subject_id": "CSP-501", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ], + "F": [ + { + "subject_id": "CSP-501", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": { + "B": [ + { + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Thursday": {}, + "Friday": { + "A": [ + { + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": {} }, - "AD08": { - "Monday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "PCS-506", - "time_slot": "12:05 - 1:00", - "classroom_id": "L5" - }, - { - "course": "Week 2", - "section": "A", - "subject_id": "PCS-506", - "time_slot": "11:10 - 12:05", - "classroom_id": "L5" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "PCS-506", - "time_slot": "9:55 - 10:50", - "classroom_id": "L3" - }, - { - "course": "Week 2", - "section": "D", - "subject_id": "PCS-506", - "time_slot": "9:00 - 9:55", - "classroom_id": "L3" - } - ], - "Wednesday": [], - "Thursday": [], - "Friday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-506", - "time_slot": "2:15 - 3:10", - "classroom_id": "L5" - }, - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-506", - "time_slot": "1:20 - 2:15", - "classroom_id": "L5" - } - ], - "Saturday": [] + "SS03": { + "Monday": { + "C": [ + { + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Tuesday": { + "B": [ + { + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + } + ], + "E": [ + { + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Wednesday": { + "B": [ + { + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + } + ], + "F": [ + { + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Thursday": { + "D": [ + { + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + } + ], + "F": [ + { + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + } + ], + "C": [ + { + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Friday": { + "D": [ + { + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + } + ], + "A": [ + { + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Saturday": {} }, - "RD09": { - "Monday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-506", - "time_slot": "9:55 - 10:50", - "classroom_id": "L5" - }, - { - "course": "Week 2", - "section": "C", - "subject_id": "PCS-506", - "time_slot": "9:00 - 9:55", - "classroom_id": "L5" - } - ], - "Tuesday": [], - "Wednesday": [], - "Thursday": [], - "Friday": [], - "Saturday": [] + "PA21": { + "Monday": { + "C": [ + { + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00" + } + ], + "F": [ + { + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Tuesday": { + "D": [ + { + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Wednesday": { + "F": [ + { + "subject_id": "XCS-501", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ], + "D": [ + { + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Thursday": {}, + "Friday": {}, + "Saturday": {} }, - "BJ10": { - "Monday": [ - { - "course": "Week 1", - "section": "A", - "subject_id": "TMA-502", - "time_slot": "1:20 - 2:15", - "classroom_id": "R1" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TMA-502", - "time_slot": "2:15 - 3:10", - "classroom_id": "R3" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TMA-502", - "time_slot": "12:05 - 1:00", - "classroom_id": "R2" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TMA-502", - "time_slot": "11:10 - 12:05", - "classroom_id": "R1" - } - ], - "Friday": [ - { - "course": "Week 1", - "section": "B", - "subject_id": "TMA-502", - "time_slot": "9:00 - 9:55", - "classroom_id": "R2" - } - ], - "Saturday": [] + "SP06": { + "Monday": { + "D": [ + { + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + } + ], + "A": [ + { + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + } + ], + "E": [ + { + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Tuesday": { + "B": [ + { + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + } + ], + "F": [ + { + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ], + "E": [ + { + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Wednesday": { + "A": [ + { + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00" + } + ], + "F": [ + { + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ], + "B": [ + { + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + } + ], + "E": [ + { + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Thursday": { + "B": [ + { + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + } + ], + "C": [ + { + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Friday": { + "A": [ + { + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00" + } + ], + "B": [ + { + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Saturday": {} }, - "RS11": { - "Monday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "PCS-503", - "time_slot": "9:55 - 10:50", - "classroom_id": "L3" - }, - { - "course": "Week 2", - "section": "B", - "subject_id": "PCS-503", - "time_slot": "9:00 - 9:55", - "classroom_id": "L3" - } - ], - "Tuesday": [], - "Wednesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "PCS-503", - "time_slot": "12:05 - 1:00", - "classroom_id": "L3" - }, - { - "course": "Week 2", - "section": "A", - "subject_id": "PCS-503", - "time_slot": "11:10 - 12:05", - "classroom_id": "L3" - } - ], - "Thursday": [ - { - "course": "Week 1", - "section": "B", - "subject_id": "TMA-502", - "time_slot": "1:20 - 2:15", - "classroom_id": "R2" - } - ], - "Friday": [ - { - "course": "Week 1", - "section": "B", - "subject_id": "PCS-503", - "time_slot": "2:15 - 3:10", - "classroom_id": "L3" - } - ], - "Saturday": [] + "AD08": { + "Monday": { + "D": [ + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50" + } + ], + "C": [ + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Tuesday": { + "C": [ + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ], + "A": [ + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": { + "C": [ + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ], + "E": [ + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50" + } + ], + "D": [ + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": { + "B": [ + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": {} }, - "JM12": { - "Monday": [], - "Tuesday": [], - "Wednesday": [ - { - "course": "Week 1", - "section": "D", - "subject_id": "TMA-502", - "time_slot": "12:05 - 1:00", - "classroom_id": "R4" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "TMA-502", - "time_slot": "9:55 - 10:50", - "classroom_id": "R3" - }, - { - "course": "Week 1", - "section": "D", - "subject_id": "TMA-502", - "time_slot": "11:10 - 12:05", - "classroom_id": "R4" - } - ], - "Friday": [], - "Saturday": [] + "NB22": { + "Monday": { + "D": [ + { + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Tuesday": { + "E": [ + { + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "XCS-501", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": {}, + "Thursday": {}, + "Friday": {}, + "Saturday": {} }, - "NJ13": { - "Monday": [], - "Tuesday": [], - "Wednesday": [], - "Thursday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "TMA-502", - "time_slot": "9:00 - 9:55", - "classroom_id": "R4" - } - ], - "Friday": [], - "Saturday": [] + "PK02": { + "Monday": { + "E": [ + { + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ], + "D": [ + { + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + } + ] + }, + "Tuesday": { + "D": [ + { + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + } + ], + "F": [ + { + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Wednesday": { + "C": [ + { + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00" + } + ], + "F": [ + { + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "D": [ + { + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + } + ], + "F": [ + { + "subject_id": "TCS-531", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Friday": { + "C": [ + { + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00" + } + ], + "E": [ + { + "subject_id": "TCS-531", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Saturday": {} }, - "PM14": { - "Monday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "PMA-502", - "time_slot": "9:55 - 10:50", - "classroom_id": "L1" - }, - { - "course": "Week 2", - "section": "D", - "subject_id": "PMA-502", - "time_slot": "9:00 - 9:55", - "classroom_id": "L1" - }, - { - "course": "Week 1", - "section": "B", - "subject_id": "PMA-502", - "time_slot": "12:05 - 1:00", - "classroom_id": "L4" - }, - { - "course": "Week 1", - "section": "B", - "subject_id": "PMA-502", - "time_slot": "11:10 - 12:05", - "classroom_id": "L4" - } - ], - "Tuesday": [], - "Wednesday": [], - "Thursday": [], - "Friday": [ - { - "course": "Week 1", - "section": "C", - "subject_id": "PMA-502", - "time_slot": "2:15 - 3:10", - "classroom_id": "L5" - }, - { - "course": "Week 1", - "section": "C", - "subject_id": "PMA-502", - "time_slot": "1:20 - 2:15", - "classroom_id": "L5" - } - ], - "Saturday": [] + "AA04": { + "Monday": { + "E": [ + { + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Tuesday": { + "C": [ + { + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + } + ], + "E": [ + { + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ], + "F": [ + { + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Wednesday": { + "C": [ + { + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + } + ], + "E": [ + { + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Friday": { + "B": [ + { + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": {} }, - "AA15": { - "Monday": [], - "Tuesday": [], - "Wednesday": [], - "Thursday": [], - "Friday": [], - "Saturday": [] + "DP07": { + "Monday": { + "E": [ + { + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50" + } + ], + "C": [ + { + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + } + ], + "F": [ + { + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Tuesday": { + "C": [ + { + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + } + ], + "F": [ + { + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Wednesday": { + "B": [ + { + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + } + ], + "C": [ + { + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + } + ], + "F": [ + { + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Thursday": { + "C": [ + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ], + "E": [ + { + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Friday": { + "C": [ + { + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Saturday": {} }, "SJ16": { - "Monday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-509", - "time_slot": "9:55 - 10:50", - "classroom_id": "R1" - }, - { - "course": "Week 1", - "section": "A", - "subject_id": "TCS-509", - "time_slot": "2:15 - 3:10", - "classroom_id": "R1" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-509", - "time_slot": "3:30 - 4:25", - "classroom_id": "R1" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-509", - "time_slot": "9:00 - 9:55", - "classroom_id": "R1" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "TCS-509", - "time_slot": "12:05 - 1:00", - "classroom_id": "R1" - } - ], - "Friday": [], - "Saturday": [] + "Monday": { + "E": [ + { + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50" + } + ], + "A": [ + { + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Tuesday": { + "D": [ + { + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + } + ], + "C": [ + { + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Wednesday": { + "A": [ + { + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00" + } + ], + "F": [ + { + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + } + ], + "B": [ + { + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "A": [ + { + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Friday": { + "C": [ + { + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + } + ], + "A": [ + { + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Saturday": {} }, "AB17": { - "Monday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TCS-509", - "time_slot": "12:05 - 1:00", - "classroom_id": "R2" - }, - { - "course": "Week 1", - "section": "B", - "subject_id": "TCS-509", - "time_slot": "9:55 - 10:50", - "classroom_id": "R2" - } - ], - "Tuesday": [], - "Wednesday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "TCS-509", - "time_slot": "11:10 - 12:05", - "classroom_id": "R2" - }, - { - "course": "Week 1", - "section": "B", - "subject_id": "TCS-509", - "time_slot": "9:00 - 9:55", - "classroom_id": "R2" - } - ], - "Thursday": [], - "Friday": [ - { - "course": "Week 1", - "section": "C", - "subject_id": "TCS-509", - "time_slot": "3:30 - 4:25", - "classroom_id": "R3" - } - ], - "Saturday": [] + "Monday": { + "F": [ + { + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ], + "D": [ + { + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Tuesday": { + "E": [ + { + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ], + "D": [ + { + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": { + "B": [ + { + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + } + ], + "C": [ + { + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "B": [ + { + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + } + ], + "C": [ + { + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Friday": { + "F": [ + { + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Saturday": {} }, - "HP18": { - "Monday": [ - { - "course": "Week 1", - "section": "C", - "subject_id": "TCS-509", - "time_slot": "9:55 - 10:50", - "classroom_id": "R3" - } - ], - "Tuesday": [], - "Wednesday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "TCS-509", - "time_slot": "3:30 - 4:25", - "classroom_id": "R4" - } - ], - "Thursday": [], - "Friday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "TCS-509", - "time_slot": "11:10 - 12:05", - "classroom_id": "R4" - }, - { - "course": "Week 1", - "section": "D", - "subject_id": "TCS-509", - "time_slot": "12:05 - 1:00", - "classroom_id": "R4" - } - ], - "Saturday": [] + "PM14": { + "Monday": { + "F": [ + { + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Tuesday": { + "A": [ + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Wednesday": { + "D": [ + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50" + } + ], + "A": [ + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "B": [ + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": {}, + "Saturday": {} }, - "SG19": { - "Monday": [ - { - "course": "Week 1", - "section": "D", - "subject_id": "TCS-509", - "time_slot": "2:15 - 3:10", - "classroom_id": "R4" - } - ], - "Tuesday": [ - { - "course": "Week 1", - "section": "D", - "subject_id": "TCS-509", - "time_slot": "9:00 - 9:55", - "classroom_id": "R4" - } - ], - "Wednesday": [], - "Thursday": [], - "Friday": [], - "Saturday": [] + "AC05": { + "Monday": { + "F": [ + { + "subject_id": "TCS-503", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ], + "D": [ + { + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Tuesday": { + "D": [ + { + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + } + ], + "F": [ + { + "subject_id": "TCS-502", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Wednesday": { + "D": [ + { + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Friday": { + "E": [ + { + "subject_id": "TCS-503", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Saturday": {} }, - "DT20": { - "Monday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "XCS-501", - "time_slot": "1:20 - 2:15", - "classroom_id": "R1" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "XCS-501", - "time_slot": "11:10 - 12:05", - "classroom_id": "R4" - }, - { - "course": "Week 1", - "section": "D", - "subject_id": "XCS-501", - "time_slot": "12:05 - 1:00", - "classroom_id": "R4" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "XCS-501", - "time_slot": "9:55 - 10:50", - "classroom_id": "R1" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "XCS-501", - "time_slot": "9:00 - 9:55", - "classroom_id": "R3" - } - ], - "Friday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "XCS-501", - "time_slot": "3:30 - 4:25", - "classroom_id": "R3" - } - ], - "Saturday": [] + "AA15": { + "Monday": {}, + "Tuesday": { + "E": [ + { + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Wednesday": {}, + "Thursday": {}, + "Friday": {}, + "Saturday": {} }, - "PA21": { - "Monday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "XCS-501", - "time_slot": "3:30 - 4:25", - "classroom_id": "R2" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "XCS-501", - "time_slot": "9:55 - 10:50", - "classroom_id": "R2" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "XCS-501", - "time_slot": "12:05 - 1:00", - "classroom_id": "R3" - } - ], - "Thursday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "XCS-501", - "time_slot": "11:10 - 12:05", - "classroom_id": "R4" - } - ], - "Friday": [], - "Saturday": [] + "RD09": { + "Monday": {}, + "Tuesday": { + "F": [ + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50" + } + ], + "E": [ + { + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Wednesday": { + "F": [ + { + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Thursday": {}, + "Friday": {}, + "Saturday": {} }, - "NB22": { - "Monday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "XCS-501", - "time_slot": "11:10 - 12:05", - "classroom_id": "R4" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "XCS-501", - "time_slot": "9:00 - 9:55", - "classroom_id": "R3" - }, - { - "course": "Week 1", - "section": "C", - "subject_id": "XCS-501", - "time_slot": "9:55 - 10:50", - "classroom_id": "R3" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "D", - "subject_id": "XCS-501", - "time_slot": "12:05 - 1:00", - "classroom_id": "R4" - } - ], - "Thursday": [], - "Friday": [], - "Saturday": [] + "HP18": { + "Monday": { + "E": [ + { + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Tuesday": {}, + "Wednesday": { + "D": [ + { + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Thursday": { + "D": [ + { + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ], + "E": [ + { + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Friday": {}, + "Saturday": {} }, - "AK23": { - "Monday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "CSP-501", - "time_slot": "9:00 - 9:55", - "classroom_id": "R1" - }, - { - "course": "Week 1", - "section": "D", - "subject_id": "CSP-501", - "time_slot": "3:30 - 4:25", - "classroom_id": "R4" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "C", - "subject_id": "CSP-501", - "time_slot": "11:10 - 12:05", - "classroom_id": "R3" - } - ], - "Wednesday": [], - "Thursday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "CSP-501", - "time_slot": "1:20 - 2:15", - "classroom_id": "R1" - }, - { - "course": "Week 2", - "section": "C", - "subject_id": "CSP-501", - "time_slot": "2:15 - 3:10", - "classroom_id": "R3" - }, - { - "course": "Week 2", - "section": "D", - "subject_id": "CSP-501", - "time_slot": "12:05 - 1:00", - "classroom_id": "R4" - } - ], - "Friday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "CSP-501", - "time_slot": "9:55 - 10:50", - "classroom_id": "R1" - } - ], - "Saturday": [] + "VD25": { + "Monday": {}, + "Tuesday": { + "F": [ + { + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Wednesday": { + "E": [ + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50" + } + ], + "D": [ + { + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Thursday": { + "D": [ + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Friday": {}, + "Saturday": {} }, - "AP24": { - "Monday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "SCS-501", - "time_slot": "2:15 - 3:10", - "classroom_id": "R1" - }, - { - "course": "Week 2", - "section": "B", - "subject_id": "SCS-501", - "time_slot": "11:10 - 12:05", - "classroom_id": "R2" - } - ], - "Tuesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "SCS-501", - "time_slot": "9:55 - 10:50", - "classroom_id": "R1" - }, - { - "course": "Week 2", - "section": "C", - "subject_id": "SCS-501", - "time_slot": "1:20 - 2:15", - "classroom_id": "R3" - } - ], - "Wednesday": [ - { - "course": "Week 2", - "section": "B", - "subject_id": "SCS-501", - "time_slot": "9:00 - 9:55", - "classroom_id": "R2" - } - ], - "Thursday": [], - "Friday": [], - "Saturday": [] + "SG19": { + "Monday": {}, + "Tuesday": {}, + "Wednesday": { + "E": [ + { + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "TCS-509", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50" + } + ] + }, + "Thursday": { + "F": [ + { + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "TCS-509", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": {}, + "Saturday": {} }, - "VD25": { - "Monday": [], - "Tuesday": [], - "Wednesday": [], - "Thursday": [], - "Friday": [], - "Saturday": [] + "JM12": { + "Monday": { + "E": [ + { + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Tuesday": { + "F": [ + { + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + } + ] + }, + "Wednesday": { + "F": [ + { + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ], + "C": [ + { + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": { + "D": [ + { + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00" + } + ], + "E": [ + { + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + } + ] + }, + "Saturday": {} + }, + "None": { + "Monday": {}, + "Tuesday": { + "D": [ + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Wednesday": { + "F": [ + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ], + "F": [ + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Friday": { + "D": [ + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ], + "E": [ + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ], + "F": [ + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Saturday": { + "A": [ + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R1", + "time_slot": "12:00 - 13:00" + } + ], + "B": [ + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R2", + "time_slot": "12:00 - 13:00" + } + ], + "C": [ + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R3", + "time_slot": "12:00 - 13:00" + } + ], + "D": [ + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R4", + "time_slot": "16:50 - 17:50" + } + ], + "E": [ + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R5", + "time_slot": "16:50 - 17:50" + } + ], + "F": [ + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "09:00 - 10:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "11:00 - 12:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "12:00 - 13:00" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50" + }, + { + "subject_id": "Library", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ] + } }, "AK26": { - "Monday": [], - "Tuesday": [ - { - "course": "Week 2", - "section": "A", - "subject_id": "Placement_Class", - "time_slot": "2:15 - 3:10", - "classroom_id": "R1" - } - ], - "Wednesday": [], - "Thursday": [], - "Friday": [], - "Saturday": [] + "Monday": { + "E": [ + { + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Tuesday": {}, + "Wednesday": {}, + "Thursday": { + "D": [ + { + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + } + ], + "F": [ + { + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Friday": { + "D": [ + { + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "classroom_id": "R4", + "time_slot": "14:50 - 15:50" + } + ], + "E": [ + { + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "classroom_id": "R5", + "time_slot": "14:50 - 15:50" + } + ], + "F": [ + { + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "13:50 - 14:50" + }, + { + "subject_id": "Placement_Class", + "classroom_id": "R6", + "time_slot": "14:50 - 15:50" + } + ] + }, + "Saturday": {} + }, + "NJ13": { + "Monday": {}, + "Tuesday": {}, + "Wednesday": { + "F": [ + { + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "16:50 - 17:50" + } + ] + }, + "Thursday": { + "E": [ + { + "subject_id": "TMA-502", + "classroom_id": "R5", + "time_slot": "12:00 - 13:00" + } + ] + }, + "Friday": { + "F": [ + { + "subject_id": "TMA-502", + "classroom_id": "R6", + "time_slot": "08:00 - 09:00" + } + ] + }, + "Saturday": {} } } \ No newline at end of file diff --git a/Constants/teacher_tt_csv.py b/Constants/teacher_tt_csv.py new file mode 100644 index 0000000..9f5418f --- /dev/null +++ b/Constants/teacher_tt_csv.py @@ -0,0 +1,81 @@ +import os +import json +import csv +from Samples.samples import (WorkingDays, SampleChromosome) +from Constants.teachers_tt import TeacherTimetable + +# Predefined time slots mapping +time_slots = { + 1: "08:00 - 09:00", + 2: "09:00 - 10:00", + 3: "11:00 - 12:00", + 4: "12:00 - 13:00", + 5: "16:50 - 17:50", +} + +# Reverse lookup to get slot number from time string +time_slot_order = {v: k for k, v in time_slots.items()} + +# List of days in the correct order +days_of_week_order = WorkingDays.days + +def extract_time_slots(timetable): + """Extract and sort time slots without inserting breaks or lunch.""" + unique_slots = set() + + # Collect all unique time slots from timetable + for day_data in timetable.values(): + for slots in day_data.values(): + for entry in slots: + unique_slots.add(entry["time_slot"]) + + # Sort slots based on predefined order + sorted_slots = sorted(unique_slots, key=lambda slot: time_slot_order.get(slot, float('inf'))) + + # Only include class slots + final_slots = [("CLASS", slot) for slot in sorted_slots] + + return final_slots + +def teacher_json_to_csv(teacher_timetable, output_folder): + """Convert teacher timetable dictionary to CSV.""" + os.makedirs(output_folder, exist_ok=True) + + for teacher_id, schedule in teacher_timetable.items(): + final_slots = extract_time_slots(schedule) + csv_file = os.path.join(output_folder, f"{teacher_id}.csv") + header = ["DAY"] + [slot[1] for slot in final_slots] + rows = [] + + # Sort days correctly + sorted_days = sorted(schedule.items(), key=lambda x: days_of_week_order.index(x[0])) + + for day, day_data in sorted_days: + row = [day] + ["" for _ in final_slots] # Empty slots initially + + for section, classes in day_data.items(): + for entry in classes: + for i, slot in enumerate(final_slots): + if entry["time_slot"] == slot[1]: + row[i + 1] = f"{entry['subject_id']} ({section}, {entry['classroom_id']})" + + rows.append(row) + + with open(csv_file, mode="w", newline="", encoding="utf-8") as file: + writer = csv.writer(file) + writer.writerow(header) + writer.writerows(rows) + +if __name__ == "__main__": + # Generate teacher-wise timetable + teacher_timetable = TeacherTimetable() + w = { + "Week 2": SampleChromosome.schedule2, + "Week 1": SampleChromosome.schedule1 + } + teacher_tt = teacher_timetable.generate_teacher_timetable(w) + + # Convert generated timetable to CSVs + output_folder = "tt_csvs" # Folder to save CSVs + teacher_json_to_csv(teacher_tt, output_folder) +w \ No newline at end of file diff --git a/Constants/teachers_tt.py b/Constants/teachers_tt.py index 30c4d7b..ee8196b 100644 --- a/Constants/teachers_tt.py +++ b/Constants/teachers_tt.py @@ -1,87 +1,46 @@ import json -from Samples.samples import (SubjectTeacherMap, WorkingDays, SampleChromosome) +from Samples.samples import ( WorkingDays, SampleChromosome) class TeacherTimetable: def __init__(self): - # Create timetable for each teacher - self.teacher_timetable = { - teacher: {day: [] for day in WorkingDays.days} - for teachers in SubjectTeacherMap.subject_teacher_map.values() - for teacher in teachers - } - self.teacher_assignments = {teacher: {} for teachers in SubjectTeacherMap.subject_teacher_map.values() for teacher in teachers} - + # Dictionary to hold timetables for each teacher + self.teacher_timetable = {} + def generate_teacher_timetable(self, chromosome): - """ - Populate the teacher's timetable based on the provided chromosome schedule. - Now includes the course (Week 1, Week 2, etc.) information. - """ for week, days in chromosome.items(): for day, sections in days.items(): for section, classes in sections.items(): for entry in classes: teacher_id = entry["teacher_id"] - subject_id = entry["subject_id"] - time_slot = entry["time_slot"] - classroom_id = entry["classroom_id"] - - # Conflict check: Ensure the teacher is not already assigned at this time slot - if teacher_id in self.teacher_assignments and time_slot in self.teacher_assignments[teacher_id]: - continue # Skip this assignment if there's a conflict - - # Add the class to the teacher's timetable - self.teacher_timetable[teacher_id][day].append({ - "course": week, # Include course information (Week 1, Week 2) - "section": section, - "subject_id": subject_id, - "time_slot": time_slot, - "classroom_id": classroom_id, - }) - # Update the teacher's assignments to reflect the added class - if teacher_id not in self.teacher_assignments: - self.teacher_assignments[teacher_id] = {} - self.teacher_assignments[teacher_id][time_slot] = { - "course": week, - "section": section, - "subject_id": subject_id, - "classroom_id": classroom_id, - "day": day - } - + if teacher_id not in self.teacher_timetable: + self.teacher_timetable[teacher_id] = {day: {} for day in WorkingDays.days} + + if section not in self.teacher_timetable[teacher_id][day]: + self.teacher_timetable[teacher_id][day][section] = [] + + self.teacher_timetable[teacher_id][day][section].append({ + "subject_id": entry["subject_id"], + "classroom_id": entry["classroom_id"], + "time_slot": entry["time_slot"], + }) + return self.teacher_timetable - + def save_timetable_to_json(self, file_path="Constants/teacher_timetable.json"): - """ - Create a dictionary and save the teacher's timetable to a JSON file. - """ try: - # Create a dictionary explicitly from the teacher timetable - timetable_dict = { - teacher: { - day: classes - for day, classes in days.items() - } - for teacher, days in self.teacher_timetable.items() - } - - # Save the dictionary to a JSON file with open(file_path, "w") as json_file: - json.dump(timetable_dict, json_file, indent=4) - + json.dump(self.teacher_timetable, json_file, indent=4) print(f"Timetable successfully saved to '{file_path}'.") except Exception as e: print(f"Error saving timetable to '{file_path}': {e}") if __name__ == "__main__": teacher_timetable = TeacherTimetable() - # Generate timetable from the sample chromosome (Week 1 and Week 2) w = { "Week 2": SampleChromosome.schedule2, "Week 1": SampleChromosome.schedule1 } - - teacher_tt=teacher_timetable.generate_teacher_timetable(w) - print(teacher_tt) - # Save timetable to a JSON file + teacher_tt = teacher_timetable.generate_teacher_timetable(w) + # print(json.dumps(teacher_tt, indent=4)) # Print formatted JSON output teacher_timetable.save_timetable_to_json() diff --git a/Constants/timetable_csv.py b/Constants/timetable_csv.py new file mode 100644 index 0000000..1b59b94 --- /dev/null +++ b/Constants/timetable_csv.py @@ -0,0 +1,124 @@ +import os +import json +import csv +from datetime import datetime + +# Predefined time slots mapping +time_slots = { + 1: "8:00 - 9:00", + 2: "9:00 - 10:00", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", +} + +# Reverse lookup to get slot number from time string +time_slot_order = {v: k for k, v in time_slots.items()} + +# List of days in the order we want them to appear +days_of_week_order = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + +def parse_time(time_slot): + """Extract start and end times from a time slot string.""" + start_time_str, end_time_str = time_slot.split(" - ") + start_time = datetime.strptime(start_time_str.strip(), "%I:%M").time() + end_time = datetime.strptime(end_time_str.strip(), "%I:%M").time() + return start_time, end_time + +def extract_time_slots(timetable): + """Extract, sort time slots, and insert BREAK/LUNCH where needed.""" + unique_slots = set() + + # Collect all unique time slots from timetable + for day_data in timetable.values(): + for slots in day_data.values(): + for entry in slots: + unique_slots.add(entry["time_slot"]) + + # Sort slots based on predefined order + sorted_slots = sorted(unique_slots, key=lambda slot: time_slot_order[slot]) + + # Insert BREAK and LUNCH dynamically based on gaps + final_slots = [] + last_end_time = None + break_lunch_counter = 0 + + for slot in sorted_slots: + start_time, end_time = parse_time(slot) + + if last_end_time: + gap = (datetime.combine(datetime.today(), start_time) - datetime.combine(datetime.today(), last_end_time)).seconds / 60 + + if gap > 5: # If there's a gap greater than 5 minutes + break_time = f"{last_end_time.strftime('%I:%M')} - {start_time.strftime('%I:%M')}" + if break_lunch_counter == 0: + final_slots.append(("BREAK", break_time)) + elif break_lunch_counter == 1: + final_slots.append(("LUNCH", break_time)) + else: + final_slots.append(("BREAK", break_time)) + + break_lunch_counter += 1 # Increment counter + + final_slots.append(("CLASS", slot)) + last_end_time = end_time # Update last_end_time + + return final_slots + +def json_to_csv(input_folder, json_filename, output_folder): + """Convert JSON timetable to CSV with breaks and lunches inserted.""" + json_file = os.path.join(input_folder, json_filename) + + with open(json_file, "r", encoding="utf-8") as file: + timetable = json.load(file) + + sections = set() + final_slots = extract_time_slots(timetable) + + os.makedirs(output_folder, exist_ok=True) + + # Identify all sections + for day_data in timetable.values(): + for section in day_data.keys(): + sections.add(section) + + # Sort days in the correct order + sorted_days = sorted(timetable.items(), key=lambda x: days_of_week_order.index(x[0])) + + for section in sections: + csv_file = os.path.join(output_folder, f"{section}.csv") + header = ["DAY"] + [slot[1] for slot in final_slots] # Extract only time for header + rows = [] + + # Iterate over sorted days in the correct order + for day, day_data in sorted_days: # Sorted days based on days_of_week_order + # Initialize row with blank spaces + row = [day] + [""] * len(final_slots) # Initially empty for each time slot + + if section in day_data: + for entry in day_data[section]: + for i, slot in enumerate(final_slots): + # Compare and add the class schedule, BREAK, or LUNCH + if entry["time_slot"] == slot[1] and slot[0] == "CLASS": + row[i + 1] = f"{entry['subject_id']} ({entry['teacher_id']}, {entry['classroom_id']})" + elif slot[0] == "BREAK" or slot[0] == "LUNCH": + # Add BREAK and LUNCH to appropriate slots + row[i + 1] = slot[0] + + rows.append(row) + + # Write the row into CSV + with open(csv_file, mode="w", newline="", encoding="utf-8") as file: + writer = csv.writer(file) + writer.writerow(header) + writer.writerows(rows) + + print(f"CSV file '{csv_file}' has been created successfully!") + +if __name__ == "_main_": + input_folder = "." # Your input folder where the JSON file is located + json_filename = "new.json" # Replace with your actual JSON filename + output_folder = "output_csvs" # Output folder where CSV files will be saved + json_to_csv(input_folder, json_filename, output_folder) \ No newline at end of file diff --git a/Samples/samples.py b/Samples/samples.py index 6550090..c8181d1 100644 --- a/Samples/samples.py +++ b/Samples/samples.py @@ -1664,52 +1664,52 @@ class SampleChromosome: "Monday": { "A": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": 1 }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": 1 }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 2 }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 2 } ], "B": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R2", "time_slot": "11:00 - 12:00", "group": "all" @@ -1724,80 +1724,80 @@ class SampleChromosome: ], "C": [ { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R3", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", "time_slot": "11:00 - 12:00", - "group": 1 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": 1 + "group": "all" } ], "D": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R4", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R4", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 1 }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 1 }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": 2 }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": 2 }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "NB22", + "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "16:50 - 17:50", "group": "all" @@ -1805,50 +1805,50 @@ class SampleChromosome: ], "E": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R5", "time_slot": "11:00 - 12:00", "group": "all" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R5", "time_slot": "12:00 - 13:00", "group": "all" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "13:50 - 14:50", - "group": 1 + "group": "all" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "14:50 - 15:50", - "group": 1 + "group": "all" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R5", "time_slot": "16:50 - 17:50", "group": "all" @@ -1856,50 +1856,50 @@ class SampleChromosome: ], "F": [ { - "teacher_id": "AP24", - "subject_id": "SCS-501", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R6", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R6", "time_slot": "11:00 - 12:00", - "group": 1 + "group": "all" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R6", "time_slot": "12:00 - 13:00", - "group": 1 + "group": "all" }, { "teacher_id": "PM14", "subject_id": "PMA-502", - "classroom_id": "L2", + "classroom_id": "L3", "time_slot": "13:50 - 14:50", - "group": 2 + "group": 1 }, { "teacher_id": "PM14", "subject_id": "PMA-502", - "classroom_id": "L2", + "classroom_id": "L3", "time_slot": "14:50 - 15:50", - "group": 2 + "group": 1 }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "16:50 - 17:50", "group": "all" @@ -1909,29 +1909,29 @@ class SampleChromosome: "Tuesday": { "A": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", + "teacher_id": "PM14", + "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "08:00 - 09:00", "group": 1 }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", + "teacher_id": "PM14", + "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "09:00 - 10:00", "group": 1 }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", + "teacher_id": "PM14", + "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "11:00 - 12:00", "group": 2 }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", + "teacher_id": "PM14", + "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "12:00 - 13:00", "group": 2 @@ -1939,22 +1939,22 @@ class SampleChromosome: ], "B": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "11:00 - 12:00", "group": "all" @@ -1976,25 +1976,25 @@ class SampleChromosome: "group": "all" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 1 }, { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 1 } ], "D": [ @@ -2006,43 +2006,43 @@ class SampleChromosome: "group": "all" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "SJ16", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R4", "time_slot": "11:00 - 12:00", "group": "all" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "12:00 - 13:00", "group": "all" }, { - "teacher_id": "AC05", - "subject_id": "TCS-502", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "13:50 - 14:50", "group": "all" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "14:50 - 15:50", "group": "all" }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "16:50 - 17:50", "group": "all" @@ -2050,50 +2050,50 @@ class SampleChromosome: ], "E": [ { - "teacher_id": "AK23", - "subject_id": "CSP-501", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "RS11", + "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "NB22", + "subject_id": "XCS-501", "classroom_id": "R5", "time_slot": "11:00 - 12:00", "group": "all" }, { - "teacher_id": "NB22", - "subject_id": "XCS-501", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "12:00 - 13:00", "group": "all" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", + "teacher_id": "AA15", + "subject_id": "PMA-502", "classroom_id": "L3", "time_slot": "13:50 - 14:50", "group": 1 }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", + "teacher_id": "AA15", + "subject_id": "PMA-502", "classroom_id": "L3", "time_slot": "14:50 - 15:50", "group": 1 }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "16:50 - 17:50", "group": "all" @@ -2101,50 +2101,50 @@ class SampleChromosome: ], "F": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", + "teacher_id": "AC05", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R6", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 1 }, { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R6", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 1 }, { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": 1 + "group": 2 }, { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": 1 + "group": 2 }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "16:50 - 17:50", "group": "all" @@ -2154,8 +2154,8 @@ class SampleChromosome: "Wednesday": { "A": [ { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "08:00 - 09:00", "group": "all" @@ -2168,45 +2168,45 @@ class SampleChromosome: "group": "all" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", "time_slot": "11:00 - 12:00", - "group": 1 + "group": "all" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": 1 + "group": "all" } ], "B": [ { - "teacher_id": "SP06", - "subject_id": "TCS-503", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R2", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "DP07", + "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "AB17", + "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "11:00 - 12:00", "group": "all" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R2", "time_slot": "12:00 - 13:00", "group": "all" @@ -2214,80 +2214,80 @@ class SampleChromosome: ], "C": [ { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "PK02", + "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", + "teacher_id": "AA04", + "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 1 }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 1 } ], "D": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "PA21", - "subject_id": "XCS-501", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 1 }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R4", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 1 }, { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": 1 + "group": 2 }, { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": 1 + "group": 2 }, { - "teacher_id": "AC05", - "subject_id": "TCS-503", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "16:50 - 17:50", "group": "all" @@ -2295,50 +2295,50 @@ class SampleChromosome: ], "E": [ { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R5", "time_slot": "08:00 - 09:00", - "group": 1 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R5", "time_slot": "09:00 - 10:00", - "group": 1 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", + "teacher_id": "VD25", + "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": 2 + "group": 1 }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", + "teacher_id": "VD25", + "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": 2 + "group": 1 }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R5", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": 2 }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R5", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": 2 }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "16:50 - 17:50", "group": "all" @@ -2346,50 +2346,50 @@ class SampleChromosome: ], "F": [ { - "teacher_id": "DP07", - "subject_id": "TCS-503", + "teacher_id": "PA21", + "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "11:00 - 12:00", "group": "all" }, { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "12:00 - 13:00", "group": "all" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R6", "time_slot": "13:50 - 14:50", - "group": 1 + "group": "all" }, { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L3", + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R6", "time_slot": "14:50 - 15:50", - "group": 1 + "group": "all" }, { - "teacher_id": "NJ13", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "16:50 - 17:50", "group": "all" @@ -2399,140 +2399,140 @@ class SampleChromosome: "Thursday": { "A": [ { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "AP24", + "subject_id": "SCS-501", "classroom_id": "R1", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "DT20", + "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", "time_slot": "11:00 - 12:00", - "group": 1 + "group": "all" }, { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": 1 + "group": "all" } ], "B": [ { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", "time_slot": "08:00 - 09:00", - "group": 1 + "group": "all" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", "time_slot": "09:00 - 10:00", - "group": 1 + "group": "all" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", "time_slot": "11:00 - 12:00", - "group": 2 + "group": "all" }, { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", "time_slot": "12:00 - 13:00", - "group": 2 + "group": "all" } ], "C": [ { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R3", + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": 1 }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R3", + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": 1 }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 2 }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R3", + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 2 } ], "D": [ { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": 1 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": 1 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", + "teacher_id": "VD25", + "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": 2 + "group": 1 }, { - "teacher_id": "AD08", - "subject_id": "PMA-502", + "teacher_id": "VD25", + "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": 2 + "group": 1 }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R4", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": 1 + "group": 2 }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R4", + "teacher_id": "VD25", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": 1 + "group": 2 }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", + "teacher_id": "HP18", + "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "16:50 - 17:50", "group": "all" @@ -2540,50 +2540,50 @@ class SampleChromosome: ], "E": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "AC05", + "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R5", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 1 }, { - "teacher_id": "NJ13", - "subject_id": "TMA-502", - "classroom_id": "R5", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 1 }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": 1 + "group": 2 }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L3", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": 1 + "group": 2 }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "JM12", + "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "16:50 - 17:50", "group": "all" @@ -2591,50 +2591,50 @@ class SampleChromosome: ], "F": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R6", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": 1 }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R6", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": 1 }, { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R6", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 2 }, { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R6", + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 2 }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "SG19", + "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "13:50 - 14:50", - "group": 1 + "group": "all" }, { - "teacher_id": "AK26", - "subject_id": "Placement_Class", + "teacher_id": "SS03", + "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "14:50 - 15:50", - "group": 1 + "group": "all" }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "16:50 - 17:50", "group": "all" @@ -2644,29 +2644,29 @@ class SampleChromosome: "Friday": { "A": [ { - "teacher_id": "SS03", - "subject_id": "TCS-502", + "teacher_id": "BJ10", + "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "SJ16", - "subject_id": "TCS-509", + "teacher_id": "AB01", + "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "09:00 - 10:00", "group": "all" }, { - "teacher_id": "BJ10", - "subject_id": "TMA-502", + "teacher_id": "SP06", + "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "11:00 - 12:00", "group": "all" }, { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "AK23", + "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "12:00 - 13:00", "group": "all" @@ -2674,106 +2674,106 @@ class SampleChromosome: ], "B": [ { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R2", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": 1 }, { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": 1 }, { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": 2 }, { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": 2 } ], "C": [ { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", "time_slot": "08:00 - 09:00", - "group": 1 + "group": "all" }, { "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", + "subject_id": "TCS-503", + "classroom_id": "R3", "time_slot": "09:00 - 10:00", - "group": 1 + "group": "all" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", "time_slot": "11:00 - 12:00", - "group": 2 + "group": "all" }, { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": 2 + "group": "all" } ], "D": [ { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": 1 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": 1 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", "time_slot": "11:00 - 12:00", - "group": 2 + "group": "all" }, { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", + "teacher_id": "None", + "subject_id": "Library", + "classroom_id": "R4", "time_slot": "12:00 - 13:00", - "group": 2 + "group": "all" }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R4", "time_slot": "13:50 - 14:50", - "group": "all" + "group": 1 }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R4", "time_slot": "14:50 - 15:50", - "group": "all" + "group": 1 }, { "teacher_id": "None", @@ -2785,15 +2785,15 @@ class SampleChromosome: ], "E": [ { - "teacher_id": "PK02", - "subject_id": "TCS-531", + "teacher_id": "AC05", + "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "JM12", - "subject_id": "TMA-502", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R5", "time_slot": "09:00 - 10:00", "group": "all" @@ -2813,18 +2813,18 @@ class SampleChromosome: "group": "all" }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R5", "time_slot": "13:50 - 14:50", - "group": "all" + "group": 1 }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R5", "time_slot": "14:50 - 15:50", - "group": "all" + "group": 1 }, { "teacher_id": "None", @@ -2836,15 +2836,15 @@ class SampleChromosome: ], "F": [ { - "teacher_id": "AB01", - "subject_id": "TCS-531", + "teacher_id": "NJ13", + "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "08:00 - 09:00", "group": "all" }, { - "teacher_id": "AB17", - "subject_id": "TCS-509", + "teacher_id": "None", + "subject_id": "Library", "classroom_id": "R6", "time_slot": "09:00 - 10:00", "group": "all" @@ -2864,18 +2864,18 @@ class SampleChromosome: "group": "all" }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R6", "time_slot": "13:50 - 14:50", - "group": "all" + "group": 1 }, { - "teacher_id": "None", - "subject_id": "Library", + "teacher_id": "AK26", + "subject_id": "Placement_Class", "classroom_id": "R6", "time_slot": "14:50 - 15:50", - "group": "all" + "group": 1 }, { "teacher_id": "None", diff --git a/output_csvs/L1.csv b/output_csvs/L1.csv new file mode 100644 index 0000000..ad5fa34 --- /dev/null +++ b/output_csvs/L1.csv @@ -0,0 +1,7 @@ +DAY,11:00 - 12:00,12:00 - 13:00 +Monday,"PMA-502 (F, PM14)","PMA-502 (F, PM14)" +Tuesday,"PCS-506 (F, RD09)","PCS-506 (F, RD09)" +Wednesday,"PMA-502 (A, PM14)","PMA-502 (A, PM14)" +Thursday,"PMA-502 (B, PM14)","PMA-502 (B, PM14)" +Friday,"PCS-506 (D, AD08)","PCS-506 (D, AD08)" +Saturday,, diff --git a/output_csvs/L2.csv b/output_csvs/L2.csv new file mode 100644 index 0000000..e213010 --- /dev/null +++ b/output_csvs/L2.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,14:50 - 15:50,13:50 - 14:50 +Monday,"PCS-503 (A, RS11)","PCS-503 (A, RS11)","PMA-502 (F, PM14)","PMA-502 (F, PM14)" +Tuesday,"PCS-506 (A, AD08)","PCS-506 (A, AD08)","PCS-506 (F, RD09)","PCS-506 (F, RD09)" +Wednesday,"PMA-502 (E, AD08)","PMA-502 (E, AD08)","PCS-503 (E, VD25)","PCS-503 (E, VD25)" +Thursday,"PMA-502 (B, PM14)","PMA-502 (B, PM14)","PCS-506 (E, AD08)","PCS-506 (E, AD08)" +Friday,"PCS-506 (D, AD08)","PCS-506 (D, AD08)",, +Saturday,,,, diff --git a/output_csvs/L3.csv b/output_csvs/L3.csv new file mode 100644 index 0000000..7f96718 --- /dev/null +++ b/output_csvs/L3.csv @@ -0,0 +1,7 @@ +DAY,13:50 - 14:50,14:50 - 15:50 +Monday,"PMA-502 (F, PM14)","PMA-502 (F, PM14)" +Tuesday,"PCS-503 (F, VD25)","PCS-503 (F, VD25)" +Wednesday,"PCS-506 (F, RD09)","PCS-506 (F, RD09)" +Thursday,"PCS-503 (E, DP07)","PCS-503 (E, DP07)" +Friday,, +Saturday,, diff --git a/output_csvs/R1.csv b/output_csvs/R1.csv new file mode 100644 index 0000000..7b4b801 --- /dev/null +++ b/output_csvs/R1.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 +Monday,"TCS-503 (A, SP06)","TCS-509 (A, SJ16)","SCS-501 (A, AP24)","CSP-501 (A, AK23)" +Tuesday,,,, +Wednesday,"TMA-502 (A, BJ10)","XCS-501 (A, DT20)","TCS-503 (A, SP06)","TCS-509 (A, SJ16)" +Thursday,"TCS-509 (A, SJ16)","TMA-502 (A, BJ10)","TMA-502 (A, BJ10)","TCS-509 (A, SJ16)" +Friday,"TCS-502 (A, SS03)","TCS-509 (A, SJ16)","TMA-502 (A, BJ10)","TCS-531 (A, AB01)" +Saturday,"Library (A, None)","Library (A, None)","Library (A, None)","Library (A, None)" diff --git a/output_csvs/R2.csv b/output_csvs/R2.csv new file mode 100644 index 0000000..b9a14cc --- /dev/null +++ b/output_csvs/R2.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 +Monday,"TCS-531 (B, AB01)","SCS-501 (B, AP24)","CSP-501 (B, AK23)","TMA-502 (B, BJ10)" +Tuesday,"TCS-531 (B, AB01)","XCS-501 (B, DT20)","TCS-503 (B, SP06)","TCS-502 (B, SS03)" +Wednesday,"TCS-503 (B, SP06)","TCS-531 (B, AB01)","TCS-502 (B, SS03)","TCS-509 (B, SJ16)" +Thursday,"TMA-502 (B, RS11)","TCS-509 (B, AB17)","TCS-503 (B, SP06)","TCS-531 (B, AB01)" +Friday,"XCS-501 (B, DT20)","TCS-503 (B, SP06)","TMA-502 (B, RS11)","TCS-502 (B, AA04)" +Saturday,"Library (B, None)","Library (B, None)","Library (B, None)","Library (B, None)" diff --git a/output_csvs/R3.csv b/output_csvs/R3.csv new file mode 100644 index 0000000..d5bb25d --- /dev/null +++ b/output_csvs/R3.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 +Monday,"TCS-503 (C, DP07)","CSP-501 (C, AK23)","SCS-501 (C, AP24)","XCS-501 (C, PA21)" +Tuesday,"TCS-502 (C, AA04)","TCS-509 (C, SJ16)","TMA-502 (C, BJ10)","SCS-501 (C, AP24)" +Wednesday,"TCS-503 (C, DP07)","TMA-502 (C, RS11)","TCS-531 (C, PK02)","TCS-509 (C, AB17)" +Thursday,"TCS-502 (C, SS03)","TCS-503 (C, SP06)","TCS-509 (C, AB17)","TMA-502 (C, JM12)" +Friday,"TCS-509 (C, SJ16)","TCS-503 (C, DP07)","TMA-502 (C, RS11)","TCS-531 (C, PK02)" +Saturday,"Library (C, None)","Library (C, None)","Library (C, None)","Library (C, None)" diff --git a/output_csvs/R4.csv b/output_csvs/R4.csv new file mode 100644 index 0000000..9f2e032 --- /dev/null +++ b/output_csvs/R4.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 +Monday,"SCS-501 (D, AP24)","TMA-502 (D, RS11)","TCS-509 (D, AB17)","CSP-501 (D, AK23)","TCS-502 (D, SS03)","TCS-503 (D, AC05)","TCS-531 (D, PK02)" +Tuesday,"XCS-501 (D, PA21)","TCS-531 (D, PK02)","TMA-502 (D, RS11)","TCS-509 (D, AB17)","Library (D, None)","TCS-503 (D, DP07)","TCS-502 (D, AC05)" +Wednesday,"TCS-531 (D, AB01)","XCS-501 (D, PA21)","TCS-509 (D, HP18)","TMA-502 (D, JM12)","TCS-503 (D, AC05)",, +Thursday,"TCS-502 (D, SS03)","TCS-531 (D, PK02)",,,"TCS-502 (D, AA04)","Placement_Class (D, AK26)","Placement_Class (D, AK26)" +Friday,"TCS-502 (D, SS03)","TCS-531 (D, AB01)","TMA-502 (D, JM12)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)" +Saturday,"Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)" diff --git a/output_csvs/R5.csv b/output_csvs/R5.csv new file mode 100644 index 0000000..7032bf2 --- /dev/null +++ b/output_csvs/R5.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 +Monday,"XCS-501 (E, DT20)","TCS-503 (E, SP06)","SCS-501 (E, AP24)","TMA-502 (E, JM12)","TCS-509 (E, HP18)","Placement_Class (E, AK26)","Placement_Class (E, AK26)" +Tuesday,"CSP-501 (E, AK23)","TCS-503 (E, SP06)","TCS-502 (E, SS03)","XCS-501 (E, NB22)","TCS-531 (E, AB01)",, +Wednesday,"TMA-502 (E, RS11)","TCS-531 (E, AB01)",,,"TCS-502 (E, AA04)","TCS-503 (E, SP06)","TCS-509 (E, SG19)" +Thursday,"TCS-531 (E, AB01)","TCS-502 (E, AC05)","TCS-509 (E, HP18)","TMA-502 (E, NJ13)","Library (E, None)",, +Friday,"TCS-531 (E, PK02)","TMA-502 (E, JM12)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)" +Saturday,"Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)" diff --git a/output_csvs/R6.csv b/output_csvs/R6.csv new file mode 100644 index 0000000..a48819a --- /dev/null +++ b/output_csvs/R6.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 +Monday,"SCS-501 (F, AP24)","TCS-503 (F, DP07)","SCS-501 (F, AP24)","XCS-501 (F, PA21)","XCS-501 (F, PA21)",, +Tuesday,"XCS-501 (F, DT20)","TCS-503 (F, DP07)","TMA-502 (F, JM12)","CSP-501 (F, AK23)","TCS-502 (F, AA04)",, +Wednesday,"TCS-503 (F, DP07)","TCS-502 (F, SS03)","TCS-509 (F, SJ16)","TCS-531 (F, PK02)","TMA-502 (F, NJ13)","TCS-509 (F, SJ16)","TCS-531 (F, PK02)" +Thursday,"TCS-531 (F, PK02)","TMA-502 (F, BJ10)","TCS-502 (F, SS03)","TCS-509 (F, SG19)","Library (F, None)","Placement_Class (F, AK26)","Placement_Class (F, AK26)" +Friday,"TCS-531 (F, AB01)","TCS-509 (F, AB17)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)" +Saturday,"Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)" diff --git a/tt_csvs/AA04.csv b/tt_csvs/AA04.csv new file mode 100644 index 0000000..e35e050 --- /dev/null +++ b/tt_csvs/AA04.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50 +Monday,,"TCS-502 (E, R5)",, +Tuesday,"TCS-502 (E, R5)",,,"TCS-502 (F, R6)" +Wednesday,,"TCS-502 (C, R3)",,"TCS-502 (E, R5)" +Thursday,,"TCS-502 (E, R5)",,"TCS-502 (D, R4)" +Friday,,,"TCS-502 (B, R2)", +Saturday,,,, diff --git a/tt_csvs/AA15.csv b/tt_csvs/AA15.csv new file mode 100644 index 0000000..5802670 --- /dev/null +++ b/tt_csvs/AA15.csv @@ -0,0 +1,7 @@ +DAY,14:50 - 15:50,13:50 - 14:50 +Monday,, +Tuesday,"PMA-502 (E, L3)","PMA-502 (E, L3)" +Wednesday,, +Thursday,, +Friday,, +Saturday,, diff --git a/tt_csvs/AB01.csv b/tt_csvs/AB01.csv new file mode 100644 index 0000000..7236cf1 --- /dev/null +++ b/tt_csvs/AB01.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50 +Monday,"TCS-531 (B, R2)","TCS-531 (B, R2)",, +Tuesday,"TCS-531 (B, R2)","TCS-531 (B, R2)","TCS-531 (E, R5)","TCS-531 (E, R5)" +Wednesday,"TCS-531 (D, R4)","TCS-531 (B, R2)",, +Thursday,"TCS-531 (E, R5)",,"TCS-531 (B, R2)","TCS-531 (F, R6)" +Friday,"TCS-531 (F, R6)","TCS-531 (D, R4)","TCS-531 (A, R1)", +Saturday,,,, diff --git a/tt_csvs/AB17.csv b/tt_csvs/AB17.csv new file mode 100644 index 0000000..4dc1a8d --- /dev/null +++ b/tt_csvs/AB17.csv @@ -0,0 +1,7 @@ +DAY,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 +Monday,"TCS-509 (F, R6)","TCS-509 (D, R4)",, +Tuesday,,,"TCS-509 (D, R4)","TCS-509 (E, R5)" +Wednesday,,"TCS-509 (B, R2)","TCS-509 (C, R3)", +Thursday,"TCS-509 (B, R2)","TCS-509 (C, R3)",, +Friday,"TCS-509 (F, R6)",,, +Saturday,,,, diff --git a/tt_csvs/AC05.csv b/tt_csvs/AC05.csv new file mode 100644 index 0000000..964648a --- /dev/null +++ b/tt_csvs/AC05.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 +Monday,,,,"TCS-503 (F, R6)","TCS-503 (D, R4)", +Tuesday,"TCS-502 (F, R6)",,"TCS-503 (D, R4)",,,"TCS-502 (D, R4)" +Wednesday,,"TCS-503 (D, R4)",,"TCS-503 (D, R4)",, +Thursday,"TCS-503 (E, R5)","TCS-502 (E, R5)",,,, +Friday,"TCS-503 (E, R5)",,,,, +Saturday,,,,,, diff --git a/tt_csvs/AD08.csv b/tt_csvs/AD08.csv new file mode 100644 index 0000000..d9e06e6 --- /dev/null +++ b/tt_csvs/AD08.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 +Monday,,,"PCS-506 (C, L1)","PCS-506 (C, L1)","PCS-506 (D, L2)","PCS-506 (D, L2)" +Tuesday,"PCS-506 (A, L2)","PCS-506 (A, L2)","PCS-506 (A, L1)","PCS-506 (A, L1)",, +Wednesday,"PMA-502 (E, L2)","PMA-502 (E, L2)","PMA-502 (E, L1)","PMA-502 (E, L1)",, +Thursday,"PMA-502 (D, L2)","PMA-502 (D, L2)","PMA-502 (D, L1)","PMA-502 (D, L1)","PCS-506 (E, L2)","PCS-506 (E, L2)" +Friday,"PCS-506 (D, L2)","PCS-506 (D, L2)","PCS-506 (D, L1)","PCS-506 (D, L1)",, +Saturday,,,,,, diff --git a/tt_csvs/AK23.csv b/tt_csvs/AK23.csv new file mode 100644 index 0000000..4b257f6 --- /dev/null +++ b/tt_csvs/AK23.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 +Monday,"CSP-501 (F, R6)","CSP-501 (C, R3)","CSP-501 (B, R2)","CSP-501 (A, R1)" +Tuesday,"CSP-501 (E, R5)",,,"CSP-501 (F, R6)" +Wednesday,"CSP-501 (B, R2)",,, +Thursday,,,, +Friday,,,,"CSP-501 (A, R1)" +Saturday,,,, diff --git a/tt_csvs/AK26.csv b/tt_csvs/AK26.csv new file mode 100644 index 0000000..db4c587 --- /dev/null +++ b/tt_csvs/AK26.csv @@ -0,0 +1,7 @@ +DAY,14:50 - 15:50,13:50 - 14:50 +Monday,"Placement_Class (E, R5)","Placement_Class (E, R5)" +Tuesday,, +Wednesday,, +Thursday,"Placement_Class (F, R6)","Placement_Class (F, R6)" +Friday,"Placement_Class (F, R6)","Placement_Class (F, R6)" +Saturday,, diff --git a/tt_csvs/AP24.csv b/tt_csvs/AP24.csv new file mode 100644 index 0000000..1ced302 --- /dev/null +++ b/tt_csvs/AP24.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 +Monday,"SCS-501 (D, R4)","SCS-501 (B, R2)","SCS-501 (A, R1)",,"SCS-501 (E, R5)" +Tuesday,,,"SCS-501 (D, R4)","SCS-501 (C, R3)", +Wednesday,,,,, +Thursday,"SCS-501 (A, R1)",,,, +Friday,,,,, +Saturday,,,,, diff --git a/tt_csvs/BJ10.csv b/tt_csvs/BJ10.csv new file mode 100644 index 0000000..500a17b --- /dev/null +++ b/tt_csvs/BJ10.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,13:50 - 14:50 +Monday,,,,"TMA-502 (B, R2)",, +Tuesday,,,"TMA-502 (C, R3)",,,"TMA-502 (D, R4)" +Wednesday,"TMA-502 (A, R1)",,,,"TMA-502 (D, R4)", +Thursday,,"TMA-502 (F, R6)","TMA-502 (A, R1)",,, +Friday,"TMA-502 (A, R1)",,"TMA-502 (A, R1)",,, +Saturday,,,,,, diff --git a/tt_csvs/DP07.csv b/tt_csvs/DP07.csv new file mode 100644 index 0000000..9063385 --- /dev/null +++ b/tt_csvs/DP07.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 +Monday,"TCS-503 (C, R3)","TCS-503 (F, R6)",,,,"TCS-503 (E, R5)" +Tuesday,,"TCS-503 (F, R6)",,,"TCS-503 (D, R4)", +Wednesday,"TCS-503 (F, R6)","TCS-503 (B, R2)",,,, +Thursday,"PCS-503 (C, L2)","PCS-503 (C, L2)","PCS-503 (C, L1)","PCS-503 (C, L1)","PCS-503 (E, L3)","PCS-503 (E, L3)" +Friday,"PCS-503 (C, L2)","PCS-503 (C, L2)","PCS-503 (C, L1)","PCS-503 (C, L1)",, +Saturday,,,,,, diff --git a/tt_csvs/DT20.csv b/tt_csvs/DT20.csv new file mode 100644 index 0000000..4fe139e --- /dev/null +++ b/tt_csvs/DT20.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 +Monday,"XCS-501 (E, R5)",,,"XCS-501 (E, R5)" +Tuesday,"XCS-501 (F, R6)","XCS-501 (B, R2)","XCS-501 (B, R2)", +Wednesday,,"XCS-501 (A, R1)",, +Thursday,,"XCS-501 (A, R1)",, +Friday,"XCS-501 (B, R2)",,, +Saturday,,,, diff --git a/tt_csvs/HP18.csv b/tt_csvs/HP18.csv new file mode 100644 index 0000000..f47f6e3 --- /dev/null +++ b/tt_csvs/HP18.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,11:00 - 12:00,16:50 - 17:50 +Monday,,,"TCS-509 (E, R5)" +Tuesday,,, +Wednesday,"TCS-509 (D, R4)","TCS-509 (D, R4)", +Thursday,,"TCS-509 (E, R5)","TCS-509 (D, R4)" +Friday,,, +Saturday,,, diff --git a/tt_csvs/JM12.csv b/tt_csvs/JM12.csv new file mode 100644 index 0000000..4351a31 --- /dev/null +++ b/tt_csvs/JM12.csv @@ -0,0 +1,7 @@ +DAY,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 +Monday,,,"TMA-502 (E, R5)", +Tuesday,,"TMA-502 (F, R6)",, +Wednesday,,,"TMA-502 (D, R4)", +Thursday,,,"TMA-502 (C, R3)","TMA-502 (E, R5)" +Friday,"TMA-502 (E, R5)","TMA-502 (D, R4)",, +Saturday,,,, diff --git a/tt_csvs/NB22.csv b/tt_csvs/NB22.csv new file mode 100644 index 0000000..b20eaa4 --- /dev/null +++ b/tt_csvs/NB22.csv @@ -0,0 +1,7 @@ +DAY,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 +Monday,,,"XCS-501 (D, R4)" +Tuesday,"XCS-501 (E, R5)","XCS-501 (E, R5)", +Wednesday,,, +Thursday,,, +Friday,,, +Saturday,,, diff --git a/tt_csvs/NJ13.csv b/tt_csvs/NJ13.csv new file mode 100644 index 0000000..85646cf --- /dev/null +++ b/tt_csvs/NJ13.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,12:00 - 13:00,16:50 - 17:50 +Monday,,, +Tuesday,,, +Wednesday,,,"TMA-502 (F, R6)" +Thursday,,"TMA-502 (E, R5)", +Friday,"TMA-502 (F, R6)",, +Saturday,,, diff --git a/tt_csvs/None.csv b/tt_csvs/None.csv new file mode 100644 index 0000000..29ff246 --- /dev/null +++ b/tt_csvs/None.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 +Monday,,,,,,, +Tuesday,,,,,"Library (D, R4)",, +Wednesday,,,,,"Library (F, R6)",, +Thursday,,,,,"Library (F, R6)",, +Friday,,"Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)" +Saturday,"Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)" diff --git a/tt_csvs/PA21.csv b/tt_csvs/PA21.csv new file mode 100644 index 0000000..5994e5e --- /dev/null +++ b/tt_csvs/PA21.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50 +Monday,,,"XCS-501 (F, R6)","XCS-501 (F, R6)" +Tuesday,"XCS-501 (D, R4)",,, +Wednesday,"XCS-501 (F, R6)","XCS-501 (D, R4)",, +Thursday,,,, +Friday,,,, +Saturday,,,, diff --git a/tt_csvs/PK02.csv b/tt_csvs/PK02.csv new file mode 100644 index 0000000..f13390f --- /dev/null +++ b/tt_csvs/PK02.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,13:50 - 14:50 +Monday,"TCS-531 (E, R5)",,,,,"TCS-531 (D, R4)" +Tuesday,,"TCS-531 (F, R6)",,,"TCS-531 (D, R4)", +Wednesday,"TCS-531 (C, R3)",,"TCS-531 (C, R3)","TCS-531 (F, R6)",,"TCS-531 (F, R6)" +Thursday,"TCS-531 (F, R6)","TCS-531 (D, R4)",,,, +Friday,"TCS-531 (E, R5)",,,"TCS-531 (C, R3)",, +Saturday,,,,,, diff --git a/tt_csvs/PM14.csv b/tt_csvs/PM14.csv new file mode 100644 index 0000000..b39adfa --- /dev/null +++ b/tt_csvs/PM14.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 +Monday,,,"PMA-502 (F, L1)","PMA-502 (F, L1)","PMA-502 (F, L2)","PMA-502 (F, L2)" +Tuesday,"PMA-502 (A, L2)","PMA-502 (A, L2)","PMA-502 (A, L1)","PMA-502 (A, L1)",, +Wednesday,,,"PMA-502 (A, L1)","PMA-502 (A, L1)","PMA-502 (D, L2)","PMA-502 (D, L2)" +Thursday,"PMA-502 (B, L2)","PMA-502 (B, L2)","PMA-502 (B, L1)","PMA-502 (B, L1)",, +Friday,,,,,, +Saturday,,,,,, diff --git a/tt_csvs/RD09.csv b/tt_csvs/RD09.csv new file mode 100644 index 0000000..7b7c89c --- /dev/null +++ b/tt_csvs/RD09.csv @@ -0,0 +1,7 @@ +DAY,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 +Monday,,,, +Tuesday,"PCS-506 (F, L1)","PCS-506 (F, L1)","PCS-506 (E, L3)","PCS-506 (E, L3)" +Wednesday,,,"PCS-506 (F, L3)","PCS-506 (F, L3)" +Thursday,,,, +Friday,,,, +Saturday,,,, diff --git a/tt_csvs/RS11.csv b/tt_csvs/RS11.csv new file mode 100644 index 0000000..b37c0ba --- /dev/null +++ b/tt_csvs/RS11.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 +Monday,"PCS-503 (A, L2)","TMA-502 (D, R4)","PCS-503 (A, L1)","PCS-503 (A, L1)" +Tuesday,,"TMA-502 (E, R5)","TMA-502 (D, R4)", +Wednesday,"TMA-502 (E, R5)","TMA-502 (C, R3)",, +Thursday,"PCS-503 (F, L2)","PCS-503 (F, L2)","PCS-503 (A, L1)","PCS-503 (A, L1)" +Friday,,,"TMA-502 (B, R2)", +Saturday,,,, diff --git a/tt_csvs/SG19.csv b/tt_csvs/SG19.csv new file mode 100644 index 0000000..e1b3bfc --- /dev/null +++ b/tt_csvs/SG19.csv @@ -0,0 +1,7 @@ +DAY,12:00 - 13:00,16:50 - 17:50,13:50 - 14:50 +Monday,,, +Tuesday,,, +Wednesday,,"TCS-509 (E, R5)","TCS-509 (E, R5)" +Thursday,"TCS-509 (F, R6)",,"TCS-509 (F, R6)" +Friday,,, +Saturday,,, diff --git a/tt_csvs/SJ16.csv b/tt_csvs/SJ16.csv new file mode 100644 index 0000000..9896b9d --- /dev/null +++ b/tt_csvs/SJ16.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50 +Monday,,"TCS-509 (A, R1)",,,"TCS-509 (E, R5)" +Tuesday,,"TCS-509 (C, R3)",,, +Wednesday,,,"TCS-509 (F, R6)","TCS-509 (B, R2)","TCS-509 (F, R6)" +Thursday,"TCS-509 (A, R1)",,,"TCS-509 (A, R1)", +Friday,"TCS-509 (C, R3)","TCS-509 (A, R1)",,, +Saturday,,,,, diff --git a/tt_csvs/SP06.csv b/tt_csvs/SP06.csv new file mode 100644 index 0000000..eec3de0 --- /dev/null +++ b/tt_csvs/SP06.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,16:50 - 17:50,14:50 - 15:50 +Monday,"TCS-503 (A, R1)","TCS-503 (E, R5)",,, +Tuesday,"TCS-503 (B, R2)","TCS-503 (E, R5)","TCS-503 (B, R2)","TCS-503 (F, R6)", +Wednesday,"TCS-503 (B, R2)","TCS-503 (F, R6)","TCS-503 (A, R1)",,"TCS-503 (E, R5)" +Thursday,,"TCS-503 (C, R3)","TCS-503 (B, R2)",, +Friday,,"TCS-503 (B, R2)","TCS-503 (A, R1)",, +Saturday,,,,, diff --git a/tt_csvs/SS03.csv b/tt_csvs/SS03.csv new file mode 100644 index 0000000..d29d670 --- /dev/null +++ b/tt_csvs/SS03.csv @@ -0,0 +1,7 @@ +DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50 +Monday,,"TCS-502 (C, R3)",,,"TCS-502 (D, R4)", +Tuesday,,,"TCS-502 (E, R5)","TCS-502 (B, R2)",,"TCS-502 (D, R4)" +Wednesday,,"TCS-502 (F, R6)","TCS-502 (F, R6)","TCS-502 (B, R2)",, +Thursday,"TCS-502 (C, R3)",,"TCS-502 (F, R6)",,,"TCS-502 (F, R6)" +Friday,"TCS-502 (A, R1)",,,,, +Saturday,,,,,, diff --git a/tt_csvs/VD25.csv b/tt_csvs/VD25.csv new file mode 100644 index 0000000..e6c2de6 --- /dev/null +++ b/tt_csvs/VD25.csv @@ -0,0 +1,7 @@ +DAY,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 +Monday,,,, +Tuesday,,,"PCS-503 (F, L3)","PCS-503 (F, L3)" +Wednesday,"PCS-503 (E, L1)","PCS-503 (E, L1)","PCS-503 (D, L3)","PCS-503 (D, L3)" +Thursday,"PCS-503 (D, L1)","PCS-503 (D, L1)","PCS-503 (D, L2)","PCS-503 (D, L2)" +Friday,,,, +Saturday,,,, From ba82a7126ec8e5b73d895305ed1aaaf58607d5d6 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sun, 16 Feb 2025 09:03:11 +0530 Subject: [PATCH 39/67] refactor code for init and chromosome --- GA/__init__.py | 109 ++++++++++++++++++++++----------------------- GA/chromosome.py | 112 +++++++++++++---------------------------------- GA/fitness.py | 3 -- 3 files changed, 86 insertions(+), 138 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index 367974c..27ddc31 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -8,9 +8,6 @@ from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection -from Samples.samples import (InterDepartment, SpecialSubjects, - SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload) def timetable_generation( @@ -50,17 +47,17 @@ def timetable_generation( ) fitness_calculator = TimetableFitnessEvaluator( - timetable=timetable, - all_sections=list(timetable_generator.sections_manager.keys()), - subject_teacher_mapping=timetable_generator.subject_teacher_mapping, - available_classrooms=list(timetable_generator.classrooms_manager.keys()), - available_labs=list(timetable_generator.lab_capacity_manager.keys()), - classroom_capacity=timetable_generator.classrooms_manager, - section_student_strength=timetable_generator.sections_manager, - subject_quota_data=timetable_generator.subject_quota_limits, - teacher_time_preferences=timetable_generator.teacher_availability_preferences, - teacher_daily_workload=timetable_generator.weekly_workload, - time_slots=time_slots + timetable=timetable, + all_sections=list(timetable_generator.sections_manager.keys()), + subject_teacher_mapping=timetable_generator.subject_teacher_mapping, + available_classrooms=list(timetable_generator.classrooms_manager.keys()), + available_labs=list(timetable_generator.lab_capacity_manager.keys()), + classroom_capacity=timetable_generator.classrooms_manager, + section_student_strength=timetable_generator.sections_manager, + subject_quota_data=timetable_generator.subject_quota_limits, + teacher_time_preferences=timetable_generator.teacher_availability_preferences, + teacher_daily_workload=timetable_generator.weekly_workload, + time_slots=time_slots ) fitness_scores = fitness_calculator.evaluate_timetable_fitness() @@ -104,6 +101,7 @@ def timetable_generation( return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes + def run_timetable_generations( teacher_subject_mapping, total_sections, @@ -116,7 +114,8 @@ def run_timetable_generations( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, - total_generations + total_generations, + time_slots ): prev_selected = None prev_mutated = None @@ -135,8 +134,10 @@ def run_timetable_generations( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + time_slots=time_slots, prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated + prev_mutated_chromosomes=prev_mutated, + total_generations=total_generations ) prev_selected = selected prev_mutated = mutated @@ -157,42 +158,46 @@ def run_timetable_generation( teacher_duty_days, teacher_availability_matrix, total_generations, - time_slots + time_slots, + day_map, + time_slot_map ): - prev_selected = None - prev_mutated = None - best_chromosome = None + best_tt, teacher_availability_matrix = run_timetable_generations( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + total_generations=total_generations, + time_slots=time_slots + ) + teacher_availability_matrix = update_matrix_for_best( + best_tt, + teacher_availability_matrix, + day_map, + time_slot_map + ) - for _ in range(total_generations): - best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( - teacher_subject_mapping=teacher_subject_mapping, - total_sections=total_sections, - total_classrooms=total_classrooms, - total_labs=total_labs, - teacher_preferences=teacher_preferences, - teacher_weekly_workload=teacher_weekly_workload, - special_subjects=special_subjects, - labs=labs, - subject_quota_limits=subject_quota_limits, - teacher_duty_days=teacher_duty_days, - teacher_availability_matrix=teacher_availability_matrix, - time_slots=time_slots, - prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated, - total_generations=total_generations - ) - prev_selected = selected - prev_mutated = mutated + return best_tt, teacher_availability_matrix - return best_chromosome, teacher_availability_matrix +if __name__ == '__main__': + from Constants.constant import Defaults + from Constants.helper_routines import initialize_teacher_availability, update_matrix_for_best + from GA.__init__ import run_timetable_generation + from Samples.samples import SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload, SpecialSubjects -if __name__ == "__main__": best, correct_teacher_availability_matrix = run_timetable_generation( teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, - total_labs={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50}, + total_labs={"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, teacher_preferences=TeacherWorkload.teacher_preferences, teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, special_subjects=SpecialSubjects.special_subjects, @@ -204,8 +209,8 @@ def run_timetable_generation( 5, 7 ), - total_generations = Defaults.total_no_of_generations, - time_slots = { + total_generations=Defaults.total_no_of_generations, + time_slots={ 1: "9:00 - 9:55", 2: "9:55 - 10:50", 3: "11:10 - 12:05", @@ -213,14 +218,8 @@ def run_timetable_generation( 5: "1:20 - 2:15", 6: "2:15 - 3:10", 7: "3:30 - 4:25", - } - ) - - from icecream import ic - correct_teacher_availability_matrix = update_matrix_for_best( - best, - correct_teacher_availability_matrix, - { + }, + day_map={ "Monday": 0, "Tuesday": 1, "Wednesday": 2, @@ -228,7 +227,8 @@ def run_timetable_generation( "Friday": 4, "Saturday": 5, "Sunday": 6 - },{ + }, + time_slot_map={ "9:00 - 9:55": 1, "9:55 - 10:50": 2, "11:10 - 12:05": 3, @@ -238,4 +238,5 @@ def run_timetable_generation( "3:30 - 4:25": 7 } ) + from icecream import ic ic(best, correct_teacher_availability_matrix) diff --git a/GA/chromosome.py b/GA/chromosome.py index 176b04a..22f82f3 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -52,15 +52,15 @@ def _map_sections_to_classrooms(self): return self.section_to_classroom_map def _assign_subject_and_teacher( - self, - section, - slot_index, - subjects_scheduled_today, - assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, - day_index + self, + section, + slot_index, + subjects_scheduled_today, + assigned_classroom, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index ): available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) random.shuffle(available_subjects) @@ -75,7 +75,7 @@ def _assign_subject_and_teacher( continue if subject not in subjects_scheduled_today: - teachers_for_subject = self.teacher_subject_mapping[subject] + teachers_for_subject = self.subject_teacher_mapping[subject] preferred_teachers = [ teacher for teacher in teachers_for_subject if self.teacher_availability_preferences.get(teacher, []) @@ -107,7 +107,10 @@ def _assign_subject_and_teacher( return assigned_teacher, selected_subject, assigned_room def _initialize_teacher_workload_tracker(self): - return {teacher: 0 for teacher in self.weekly_workload} + return { + teacher: 0 + for teacher in self.weekly_workload + } def _get_available_subjects(self, section, subject_usage_tracker): return [ @@ -116,70 +119,6 @@ def _get_available_subjects(self, section, subject_usage_tracker): if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] - - def _assign_subject_and_teacher( - self, - section, - slot_index, - subjects_scheduled_today, - assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, - day_index - ): - available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) - random.shuffle(available_subjects) - assigned_teacher = None - selected_subject = None - assigned_room = None - - for subject in available_subjects: - if subject in self.lab_subject_list and slot_index not in [1, 3, 5]: - continue - - if subject in self.special_subject_list and slot_index not in [5]: - continue - - if subject not in subjects_scheduled_today: - teachers_for_subject = self.subject_teacher_mapping[subject] - preferred_teachers = [ - teacher for teacher in teachers_for_subject - if self.teacher_availability_preferences.get( - teacher, [] - ) - ] - sorted_teachers_by_load = sorted( - preferred_teachers, - key=lambda teacher: teacher_workload_tracker[teacher] - ) - - for teacher in sorted_teachers_by_load: - if ( - teacher in teacher_availability_matrix - and len(teacher_availability_matrix[teacher]) > day_index - and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) - and teacher_availability_matrix[teacher][day_index][slot_index - 1] - ): - # teacher_availability_matrix[teacher][day_index][slot_index - 1] = False - assigned_teacher = teacher - teacher_workload_tracker[assigned_teacher] += 1 - selected_subject = subject - subjects_scheduled_today.add(subject) - - assigned_room = list(self.lab_capacity_manager.keys())[slot_index % len(self.lab_capacity_manager)] - break - - if assigned_teacher: - break - - if not assigned_teacher: - selected_subject = "Library" - assigned_teacher = "None" - assigned_room = assigned_classroom - - return assigned_teacher, selected_subject, assigned_room - def _generate_section_schedule( self, section, @@ -187,16 +126,16 @@ def _generate_section_schedule( section_subject_usage_tracker, teacher_workload_tracker, teacher_availability_matrix, - day_index, - section_strength=100, - labs_capacity: dict = {"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50} + day_index: int, + section_strength: int, + labs_capacity: dict ): section_schedule = [] subjects_scheduled_today = set() assigned_classroom = self.section_to_classroom_map[section] total_slots = 4 if section in half_day_sections else 7 slot_index = 1 - print(self.available_time_slots) + while slot_index <= total_slots: time_slot = self.available_time_slots[slot_index] assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( @@ -339,18 +278,29 @@ def _generate_section_schedule( return section_schedule, teacher_availability_matrix - def generate_daily_schedule(self, section_list,half_day_sections,section_subject_usage_tracker, day_index): + def generate_daily_schedule( + self, + section_list, + half_day_sections, + section_subject_usage_tracker, + day_index + ): daily_schedule = {} teacher_workload_tracker = self._initialize_teacher_workload_tracker() for section in section_list: # Iterate over half-day sections only + section_strength = self.sections_manager[section] + labs_capacity = self.lab_capacity_manager + section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( section, half_day_sections, section_subject_usage_tracker, teacher_workload_tracker, self.teacher_availability_matrix, - day_index + day_index, + section_strength, + labs_capacity ) daily_schedule[section] = section_schedule diff --git a/GA/fitness.py b/GA/fitness.py index 4f40936..eab2f77 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -1,7 +1,6 @@ import json from Constants.constant import Defaults, PenaltyConstants -from Constants.time_intervals import TimeIntervalConstant from GA.chromosome import TimeTableGeneration from Samples.samples import (SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload) @@ -39,9 +38,7 @@ def evaluate_timetable_fitness(self): daily_section_fitness_scores = {} weekly_fitness_scores = {} teacher_workload_tracking = {} - from icecream import ic - # ic(self.timetable) for week, week_schedule in self.timetable.items(): weekly_fitness = 0 daily_section_fitness_scores[week] = {} From e0e93ff63e6db26da3514e14d1bb34e3492ba04a Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sun, 16 Feb 2025 09:06:39 +0530 Subject: [PATCH 40/67] fixup! refactor code for init and chromosome --- Constants/teachers_tt.py | 4 +++- Constants/time_intervals.py | 2 +- GA/__init__.py | 11 +++++----- Samples/Fitness_Files/LabConstraints.py | 3 ++- __init__.py | 10 +++++---- test_suite/Crossover_Test.py | 9 +++++++-- test_suite/Fitness_Test.py | 9 +++++++-- test_suite/Mutation_Test.py | 15 ++++++++------ test_suite/Selection_Tests.py | 27 +++++++++++++++++++------ 9 files changed, 61 insertions(+), 29 deletions(-) diff --git a/Constants/teachers_tt.py b/Constants/teachers_tt.py index 30c4d7b..d61b180 100644 --- a/Constants/teachers_tt.py +++ b/Constants/teachers_tt.py @@ -1,5 +1,7 @@ import json -from Samples.samples import (SubjectTeacherMap, WorkingDays, SampleChromosome) + +from Samples.samples import SampleChromosome, SubjectTeacherMap, WorkingDays + class TeacherTimetable: def __init__(self): diff --git a/Constants/time_intervals.py b/Constants/time_intervals.py index 0881b96..f5c8f3e 100644 --- a/Constants/time_intervals.py +++ b/Constants/time_intervals.py @@ -1,4 +1,4 @@ -from datetime import datetime,timedelta +from datetime import datetime, timedelta class TimeIntervalConstant: diff --git a/GA/__init__.py b/GA/__init__.py index 27ddc31..f3373fa 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,9 +1,8 @@ # This is the Orchestrator file, which will govern the flow. -import json -from Constants.constant import Defaults -from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best, \ - initialize_teacher_availability +from Constants.helper_routines import (initialize_teacher_availability, + update_matrix_for_best, + update_teacher_availability_matrix) from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation @@ -189,9 +188,9 @@ def run_timetable_generation( if __name__ == '__main__': from Constants.constant import Defaults - from Constants.helper_routines import initialize_teacher_availability, update_matrix_for_best from GA.__init__ import run_timetable_generation - from Samples.samples import SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload, SpecialSubjects + from Samples.samples import (SpecialSubjects, SubjectTeacherMap, + SubjectWeeklyQuota, TeacherWorkload) best, correct_teacher_availability_matrix = run_timetable_generation( teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, diff --git a/Samples/Fitness_Files/LabConstraints.py b/Samples/Fitness_Files/LabConstraints.py index 32896c1..27a6318 100644 --- a/Samples/Fitness_Files/LabConstraints.py +++ b/Samples/Fitness_Files/LabConstraints.py @@ -1,5 +1,6 @@ -import random import json +import random + from constants.time_intervals import TimeIntervalConstant # Constants diff --git a/__init__.py b/__init__.py index c00230d..6cc02f3 100644 --- a/__init__.py +++ b/__init__.py @@ -1,13 +1,15 @@ from Constants.constant import Defaults -from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best, \ - initialize_teacher_availability +from Constants.helper_routines import (initialize_teacher_availability, + update_matrix_for_best, + update_teacher_availability_matrix) from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection -from Samples.samples import (InterDepartment, SpecialSubjects, +from Samples.samples import (InterDepartment, RoomCapacity, SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload, RoomCapacity, TimeSlots) + TeacherWorkload, TimeSlots) + def timetable_generation( teacher_subject_mapping, diff --git a/test_suite/Crossover_Test.py b/test_suite/Crossover_Test.py index bce6513..48ae78d 100644 --- a/test_suite/Crossover_Test.py +++ b/test_suite/Crossover_Test.py @@ -5,6 +5,7 @@ import random import unittest + # TimetableScheduler Class class TimetableScheduler: def __init__(self): @@ -137,8 +138,9 @@ def test_time_slots_coverage(self): #2. def create_multiple_chromosomes(self, num_chromosomes): import random -import unittest import time +import unittest + class TimetableScheduler: def __init__(self, subjects, rooms, days, sections, max_attempts=10): @@ -293,6 +295,7 @@ def test_room_capacity_in_multiple_chromosomes(self): import random import unittest + class TimetableScheduler: def __init__(self, subjects, rooms, days, sections): self.subjects = subjects # List of subject codes @@ -396,6 +399,7 @@ def test_crossover_empty_parent(self): import random import unittest + class TimetableScheduler: def __init__(self, classrooms, sections, time_slots): self.classrooms = classrooms # List of classrooms available for assignment @@ -515,8 +519,9 @@ def test_mutate_empty_chromosome(self): #5.def print_chromosomes(self, chromosomes): import unittest -from unittest.mock import patch from io import StringIO +from unittest.mock import patch + class TimetableScheduler: def __init__(self, classrooms, sections, teachers, subjects, time_slots): diff --git a/test_suite/Fitness_Test.py b/test_suite/Fitness_Test.py index 43b709b..81e7922 100644 --- a/test_suite/Fitness_Test.py +++ b/test_suite/Fitness_Test.py @@ -4,6 +4,7 @@ import unittest + class Sections: def __init__(self, num_sections): # Generate sections as sectionA, sectionB, sectionC, etc. @@ -97,6 +98,7 @@ def test_assigned_teachers_structure(self): import random from collections import defaultdict + class TimetableGenerator: def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab): self.sections = sections @@ -199,6 +201,7 @@ def generate_day_schedule(self, day, half_day_sections, week_number): return day_schedule import unittest + class TestGenerateDaySchedule(unittest.TestCase): def setUp(self): self.sections = ["A", "B", "C"] @@ -282,9 +285,10 @@ def test_teacher_and_room_assignments(self): #3. def create_timetable(self, num_weeks=1): +import random import unittest from collections import defaultdict -import random + class TimetableGenerator: def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab): @@ -457,9 +461,10 @@ def test_create_timetable(self): #4. def calculate_fitness(self, chromosome): +import random import unittest from collections import defaultdict -import random + class TimetableGenerator: def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab, section_strength, room_capacity, teacher_preferences, teacher_work_load): diff --git a/test_suite/Mutation_Test.py b/test_suite/Mutation_Test.py index 8e0e1aa..2a04cbd 100644 --- a/test_suite/Mutation_Test.py +++ b/test_suite/Mutation_Test.py @@ -2,8 +2,9 @@ #1. def mutate_time_slots_in_section(self, schedule, section): -import unittest import random +import unittest + class TestMutateTimeSlots(unittest.TestCase): def setUp(self): @@ -79,9 +80,9 @@ def test_non_existent_section(self): #2. def mutate_schedule_for_week(self, weekly_schedule): -import unittest -import random import copy +import random +import unittest from unittest.mock import patch @@ -248,11 +249,13 @@ def test_print_weekly_schedule(self): #3. def print_weekly_schedule(self, weekly_schedule): +import copy +import random import unittest from unittest.mock import patch -import random -import copy -from Samples.Mutation_Files.mutation import Mutation + +from Samples.Mutation_Files.mutation import Mutation + class TestMutation(unittest.TestCase): diff --git a/test_suite/Selection_Tests.py b/test_suite/Selection_Tests.py index f16f42f..6227adc 100644 --- a/test_suite/Selection_Tests.py +++ b/test_suite/Selection_Tests.py @@ -3,7 +3,10 @@ #1.def get_all_time_slots(): import unittest + from Constants.time_intervals import TimeIntervalConstant + + class TestTimeIntervalConstant(unittest.TestCase): def test_get_all_time_slots(self): @@ -14,9 +17,11 @@ def test_get_all_time_slots(self): unittest.main() import unittest -from Samples.Selection_Files.selection import Timetable # Correct import from unittest import mock +from Samples.Selection_Files.selection import Timetable # Correct import + + class TestTimetable(unittest.TestCase): def setUp(self): @@ -76,8 +81,10 @@ def test_break_periods(self): #2. def create_timetable(self): import unittest -from Samples.Selection_Files.selection import Timetable -from unittest import mock +from unittest import mock + +from Samples.Selection_Files.selection import Timetable + class TestTimetable(unittest.TestCase): @@ -127,7 +134,10 @@ def test_timetable_content(self): #3. def create_multiple_timelines(self, num_chromosomes): import unittest -from Samples.Selection_Files.selection import Timetable # Adjust the import as necessary + +from Samples.Selection_Files.selection import \ + Timetable # Adjust the import as necessary + class TestTimetable(unittest.TestCase): @@ -162,7 +172,10 @@ def test_create_multiple_timelines(self): #4. def calculate_fitness(self, chromosome): import unittest -from Samples.Selection_Files.selection import Timetable # Adjust the import path + +from Samples.Selection_Files.selection import \ + Timetable # Adjust the import path + class TestTimetableFitness(unittest.TestCase): @@ -251,7 +264,9 @@ def test_fitness_calculation_no_timetable(self): #5. def select_top_chromosomes(self, population: list, percentage=0.30) -> list: -import random +import random + + def select_top_chromosomes(self, population: list, percentage=0.30) -> list: num_to_select = int(len(population) * percentage) fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in population] From 355b26284a41e65168c26a0f112b3349d929b61a Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Mon, 17 Feb 2025 20:11:31 +0530 Subject: [PATCH 41/67] commit for 2 parallel time slots for labs. --- GA/chromosome.py | 210 ++++++++++++++++++++--------------------------- 1 file changed, 88 insertions(+), 122 deletions(-) diff --git a/GA/chromosome.py b/GA/chromosome.py index 22f82f3..1f0ad90 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -128,9 +128,9 @@ def _generate_section_schedule( teacher_availability_matrix, day_index: int, section_strength: int, - labs_capacity: dict + labs_capacity: dict, ): - section_schedule = [] + schedule = [] subjects_scheduled_today = set() assigned_classroom = self.section_to_classroom_map[section] total_slots = 4 if section in half_day_sections else 7 @@ -138,145 +138,111 @@ def _generate_section_schedule( while slot_index <= total_slots: time_slot = self.available_time_slots[slot_index] - assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( - section, slot_index, subjects_scheduled_today, assigned_classroom, - section_subject_usage_tracker, teacher_workload_tracker, - teacher_availability_matrix, day_index + teacher, subject, room = self._assign_subject_and_teacher( + section, + slot_index, + subjects_scheduled_today, + assigned_classroom, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index, ) - # Check if this subject must get 2 continuous hours. - if (assigned_subject in self.lab_subject_list or assigned_subject == "Placement_Class"): - # Check if splitting is needed (i.e. section strength exceeds the lab room capacity). - if (section_strength is not None and labs_capacity is not None and - assigned_room in labs_capacity and section_strength > labs_capacity[assigned_room]): - # Try to find an alternate lab room for group 2. - lab2 = None - for lab in self.lab_capacity_manager: - if lab != assigned_room and lab in labs_capacity: - if labs_capacity[lab] >= section_strength - labs_capacity[assigned_room]: - lab2 = lab - break + if subject in self.lab_subject_list or subject == "Placement_Class": + # If section strength exceeds room capacity, split into two parallel groups. + if ( + section_strength is not None + and labs_capacity is not None + and room in labs_capacity + and section_strength > labs_capacity[room] + ): + lab2 = next( + ( + lab + for lab in self.lab_capacity_manager + if lab != room + and lab in labs_capacity + and labs_capacity[lab] >= (section_strength - labs_capacity[room]) + ), + None, + ) if lab2 is None: raise ValueError("Insufficient lab capacity to split section for lab subject.") - # For splitting, ensure there are 4 consecutive slots available. - if slot_index + 3 <= total_slots: + if slot_index + 1 <= total_slots: ts1 = self.available_time_slots[slot_index] ts2 = self.available_time_slots[slot_index + 1] - ts3 = self.available_time_slots[slot_index + 2] - ts4 = self.available_time_slots[slot_index + 3] - - # Group 1 gets two slots in assigned_room. - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": ts1, - "group": 1 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": ts2, - "group": 1 - }) - - # Group 2 gets two slots in lab2. - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": lab2, - "time_slot": ts3, - "group": 2 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": lab2, - "time_slot": ts4, - "group": 2 - }) - section_subject_usage_tracker[section][assigned_subject] += 4 - slot_index += 4 + schedule.extend( + [ + {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts1, + "group": 1}, + {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts2, + "group": 1}, + {"teacher_id": teacher, "subject_id": subject, "classroom_id": lab2, "time_slot": ts1, + "group": 2}, + {"teacher_id": teacher, "subject_id": subject, "classroom_id": lab2, "time_slot": ts2, + "group": 2}, + ] + ) + section_subject_usage_tracker[section][subject] += 4 + slot_index += 2 else: - # Not enough slots for full split; fall back to non-split 2-hour allocation. - if slot_index + 1 <= total_slots: - next_time_slot = self.available_time_slots[slot_index + 1] - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": next_time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 2 - slot_index += 2 - - else: - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, "time_slot": time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 1 - slot_index += 1 + "group": 1, + } + ) + section_subject_usage_tracker[section][subject] += 1 + slot_index += 1 else: - # No split needed; assign 2 consecutive slots in the same room. + # No split needed; assign two continuous slots. if slot_index + 1 <= total_slots: - next_time_slot = self.available_time_slots[slot_index + 1] - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": next_time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 2 + ts1 = self.available_time_slots[slot_index] + ts2 = self.available_time_slots[slot_index + 1] + schedule.extend( + [ + {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts1, + "group": 1}, + {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts2, + "group": 1}, + ] + ) + section_subject_usage_tracker[section][subject] += 2 slot_index += 2 else: - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 1 + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, + "time_slot": time_slot, + "group": 1, + } + ) + section_subject_usage_tracker[section][subject] += 1 slot_index += 1 else: - # For non-lab subjects, allocate a single slot. - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": "all" - }) - if assigned_subject != "Library": - section_subject_usage_tracker[section][assigned_subject] += 1 + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, + "time_slot": time_slot, + "group": "all", + } + ) + if subject != "Library": + section_subject_usage_tracker[section][subject] += 1 slot_index += 1 - return section_schedule, teacher_availability_matrix - + return schedule, teacher_availability_matrix def generate_daily_schedule( self, From 33c0b60061bb4d41dbd4fc8fec65c6bab63d45e2 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Mon, 17 Feb 2025 23:06:02 +0530 Subject: [PATCH 42/67] Introduced a lab matrix, so that we can have a count of what labs we can allocate for the next lab. --- GA/__init__.py | 98 ++++++++++++------- GA/chromosome.py | 241 ++++++++++++++++++++++++----------------------- 2 files changed, 187 insertions(+), 152 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index f3373fa..c316378 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,13 +1,38 @@ -# This is the Orchestrator file, which will govern the flow. - -from Constants.helper_routines import (initialize_teacher_availability, - update_matrix_for_best, - update_teacher_availability_matrix) +import copy +from Constants.helper_routines import ( + initialize_teacher_availability, + update_matrix_for_best, + update_teacher_availability_matrix +) from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection +def update_lab_availability_matrix(initial_lab_matrix, best_timetable, day_map, time_slot_map): + """ + Iterate over the best chromosome (weekly timetable) and for each lab allocation, + mark the corresponding slot as False in a deep copy of the initial lab matrix. + """ + updated_lab_matrix = copy.deepcopy(initial_lab_matrix) + # best_timetable is a dict keyed by weekday (e.g., 'Monday', 'Tuesday', etc.) + for weekday, daily_schedule in best_timetable.items(): + # Convert weekday to day index using day_map + day_index = day_map.get(weekday) + if day_index is None: + continue + # daily_schedule is a dict: keys = section names, values = list of allocations + for section, allocations in daily_schedule.items(): + for alloc in allocations: + lab = alloc.get("classroom_id") + # Only update if the classroom_id is one of the labs + if lab in updated_lab_matrix: + time_slot_str = alloc.get("time_slot") + ts_index = time_slot_map.get(time_slot_str) + if ts_index is not None: + # Adjust index (if lab matrix lists are 0-indexed) + updated_lab_matrix[lab][day_index][ts_index - 1] = False + return updated_lab_matrix def timetable_generation( teacher_subject_mapping, @@ -21,11 +46,13 @@ def timetable_generation( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, + lab_availability_matrix, # Initial lab matrix passed in time_slots, total_generations, prev_selected_chromosomes=None, prev_mutated_chromosomes=None ): + # Create an instance of TimeTableGeneration. timetable_generator = TimeTableGeneration( teacher_subject_mapping=teacher_subject_mapping, total_sections=total_sections, @@ -38,12 +65,11 @@ def timetable_generation( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, time_slots=time_slots ) - timetable, teacher_availability_matrix = timetable_generator.create_timetable( - total_generations - ) + timetable, teacher_availability_matrix, _ = timetable_generator.create_timetable(total_generations) fitness_calculator = TimetableFitnessEvaluator( timetable=timetable, @@ -57,26 +83,23 @@ def timetable_generation( teacher_time_preferences=timetable_generator.teacher_availability_preferences, teacher_daily_workload=timetable_generator.weekly_workload, time_slots=time_slots -) + ) fitness_scores = fitness_calculator.evaluate_timetable_fitness() selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - if prev_selected_chromosomes: selected_chromosomes.update(prev_selected_chromosomes) crossover_object = TimeTableCrossOver() crossover_chromosomes = [] selected_keys = list(selected_chromosomes.keys()) - for i in range(0, len(selected_keys), 2): if i + 1 < len(selected_keys): parent1 = selected_keys[i] parent2 = selected_keys[i + 1] c1, c2 = crossover_object.perform_crossover(timetable[parent1], timetable[parent2]) - crossover_chromosomes.append(c1) - crossover_chromosomes.append(c2) + crossover_chromosomes.extend([c1, c2]) mutation_object = TimeTableMutation() mutated_chromosomes = [mutation_object.mutate_schedule_for_week(ch) for ch in crossover_chromosomes] @@ -85,7 +108,6 @@ def timetable_generation( best_chromosome_score = -1 best_chromosome = None - for w_no, w_score in selected_chromosomes.items(): score = int(w_score) if score > best_chromosome_score and w_no in timetable: @@ -98,9 +120,10 @@ def timetable_generation( best_chromosome ) + # Return the best chromosome and the teacher matrix. + # We do NOT return the working lab matrix because we want to update the initial matrix. return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes - def run_timetable_generations( teacher_subject_mapping, total_sections, @@ -113,13 +136,13 @@ def run_timetable_generations( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, + lab_availability_matrix, total_generations, time_slots ): prev_selected = None prev_mutated = None best_chromosome = None - for _ in range(total_generations): best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( teacher_subject_mapping=teacher_subject_mapping, @@ -133,6 +156,7 @@ def run_timetable_generations( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, time_slots=time_slots, prev_selected_chromosomes=prev_selected, prev_mutated_chromosomes=prev_mutated, @@ -140,9 +164,7 @@ def run_timetable_generations( ) prev_selected = selected prev_mutated = mutated - - return best_chromosome, teacher_availability_matrix - + return best_chromosome, teacher_availability_matrix, lab_availability_matrix def run_timetable_generation( teacher_subject_mapping, @@ -156,12 +178,13 @@ def run_timetable_generation( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, + lab_availability_matrix, total_generations, time_slots, day_map, time_slot_map ): - best_tt, teacher_availability_matrix = run_timetable_generations( + best_tt, teacher_availability_matrix, lab_availability_matrix = run_timetable_generations( teacher_subject_mapping=teacher_subject_mapping, total_sections=total_sections, total_classrooms=total_classrooms, @@ -173,26 +196,34 @@ def run_timetable_generation( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, total_generations=total_generations, time_slots=time_slots ) - teacher_availability_matrix = update_matrix_for_best( - best_tt, - teacher_availability_matrix, - day_map, - time_slot_map + teacher_availability_matrix = update_matrix_for_best( + best_tt, + teacher_availability_matrix, + day_map, + time_slot_map ) - - return best_tt, teacher_availability_matrix - + # Update the INITIAL lab matrix based solely on the best chromosome's lab allocations. + updated_lab_matrix = update_lab_availability_matrix(lab_availability_matrix, best_tt, day_map, time_slot_map) + return best_tt, teacher_availability_matrix, updated_lab_matrix if __name__ == '__main__': from Constants.constant import Defaults from GA.__init__ import run_timetable_generation from Samples.samples import (SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload) - - best, correct_teacher_availability_matrix = run_timetable_generation( + lab_availability_matrix = { + "L1": [[True] * 7 for _ in range(5)], + "L2": [[True] * 7 for _ in range(5)], + "L3": [[True] * 7 for _ in range(5)], + "L4": [[True] * 7 for _ in range(5)], + "L5": [[True] * 7 for _ in range(5)], + "L6": [[True] * 7 for _ in range(5)], + } + best, correct_teacher_availability_matrix, correct_lab_availability_matrix = run_timetable_generation( teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, @@ -204,10 +235,9 @@ def run_timetable_generation( subject_quota_limits=SubjectWeeklyQuota.subject_quota, teacher_duty_days=TeacherWorkload.teacher_duty_days, teacher_availability_matrix=initialize_teacher_availability( - TeacherWorkload.Weekly_workLoad.keys(), - 5, - 7 + TeacherWorkload.Weekly_workLoad.keys(), 5, 7 ), + lab_availability_matrix=lab_availability_matrix, total_generations=Defaults.total_no_of_generations, time_slots={ 1: "9:00 - 9:55", @@ -238,4 +268,4 @@ def run_timetable_generation( } ) from icecream import ic - ic(best, correct_teacher_availability_matrix) + ic(best, correct_teacher_availability_matrix, correct_lab_availability_matrix) diff --git a/GA/chromosome.py b/GA/chromosome.py index 1f0ad90..8015c1e 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -1,8 +1,8 @@ import random - +import copy +from math import ceil from Constants.constant import Defaults - class TimeTableGeneration: def __init__( self, @@ -17,6 +17,7 @@ def __init__( subject_quota_limits: dict, teacher_duty_days: dict, teacher_availability_matrix: dict, + lab_availability_matrix: dict, # New parameter time_slots: dict, ): self.sections_manager = total_sections @@ -33,6 +34,11 @@ def __init__( self.weekly_workload = teacher_weekly_workload self.teacher_assignment_tracker = teacher_subject_mapping self.teacher_availability_matrix = teacher_availability_matrix + + # Save the original lab matrix so that each generation starts fresh. + self.initial_lab_availability_matrix = copy.deepcopy(lab_availability_matrix) + self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) + self._map_sections_to_classrooms() def _map_sections_to_classrooms(self): @@ -64,16 +70,13 @@ def _assign_subject_and_teacher( ): available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) random.shuffle(available_subjects) - assigned_teacher = None selected_subject = None - assigned_room = None + assigned_room = assigned_classroom # For non-lab subjects for subject in available_subjects: - # If subject is a lab subject or "Placement_Class", force assignment only at specific slots. if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: continue - if subject not in subjects_scheduled_today: teachers_for_subject = self.subject_teacher_mapping[subject] preferred_teachers = [ @@ -81,20 +84,16 @@ def _assign_subject_and_teacher( if self.teacher_availability_preferences.get(teacher, []) ] sorted_teachers_by_load = sorted(preferred_teachers, - key=lambda teacher: teacher_workload_tracker[teacher]) - + key=lambda t: teacher_workload_tracker[t]) for teacher in sorted_teachers_by_load: if (teacher in teacher_availability_matrix and - len(teacher_availability_matrix[teacher]) > day_index and - len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and - teacher_availability_matrix[teacher][day_index][slot_index - 1]): + len(teacher_availability_matrix[teacher]) > day_index and + len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[teacher][day_index][slot_index - 1]): assigned_teacher = teacher - teacher_workload_tracker[assigned_teacher] += 1 + teacher_workload_tracker[teacher] += 1 selected_subject = subject subjects_scheduled_today.add(subject) - assigned_room = ( - list(self.lab_capacity_manager.keys())[slot_index % len(self.lab_capacity_manager)] - ) break if assigned_teacher: break @@ -119,16 +118,87 @@ def _get_available_subjects(self, section, subject_usage_tracker): if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] + def _allocate_lab(self, teacher, subject, day_index, slot_index, section_strength): + """ + Always split the section into two groups: + Group sizes: group1 = ceil(section_strength/2), group2 = section_strength - group1. + Try to find two distinct labs with two consecutive free slots. + """ + + group1_size = ceil(section_strength / 2) + group2_size = section_strength - group1_size + labs_list = list(self.lab_availability_matrix.keys()) + for i in range(len(labs_list)): + lab1 = labs_list[i] + if (self.lab_availability_matrix[lab1][day_index][slot_index - 1] and + self.lab_availability_matrix[lab1][day_index][slot_index] and + self.lab_capacity_manager.get(lab1, 0) >= group1_size): + for j in range(i + 1, len(labs_list)): + lab2 = labs_list[j] + if (self.lab_availability_matrix[lab2][day_index][slot_index - 1] and + self.lab_availability_matrix[lab2][day_index][slot_index] and + self.lab_capacity_manager.get(lab2, 0) >= group2_size): + # Mark slots as occupied in the working copy + self.lab_availability_matrix[lab1][day_index][slot_index - 1] = False + self.lab_availability_matrix[lab1][day_index][slot_index] = False + self.lab_availability_matrix[lab2][day_index][slot_index - 1] = False + self.lab_availability_matrix[lab2][day_index][slot_index] = False + entries = [ + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index], + "group": 1 + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index+1], + "group": 1 + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index], + "group": 2 + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index+1], + "group": 2 + }, + ] + + return entries, slot_index + 2 + + # Fallback: if no pair found, return a merged allocation. + merged_entry = { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": "merged_lab", + "time_slot": self.available_time_slots[slot_index], + "group": "merged", + "flagged": False + } + + return [merged_entry], slot_index + 1 + + def _generate_section_schedule( - self, - section, - half_day_sections, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, - day_index: int, - section_strength: int, - labs_capacity: dict, + self, + section, + half_day_sections, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index: int, + section_strength: int, + labs_capacity: dict, ): schedule = [] subjects_scheduled_today = set() @@ -148,96 +218,35 @@ def _generate_section_schedule( teacher_availability_matrix, day_index, ) - if subject in self.lab_subject_list or subject == "Placement_Class": - # If section strength exceeds room capacity, split into two parallel groups. - if ( - section_strength is not None - and labs_capacity is not None - and room in labs_capacity - and section_strength > labs_capacity[room] - ): - lab2 = next( - ( - lab - for lab in self.lab_capacity_manager - if lab != room - and lab in labs_capacity - and labs_capacity[lab] >= (section_strength - labs_capacity[room]) - ), - None, + # For lab subjects, require two consecutive slots. + if slot_index <= total_slots - 1: + lab_entries, new_slot_index = self._allocate_lab( + teacher, subject, day_index, slot_index, section_strength ) - if lab2 is None: - raise ValueError("Insufficient lab capacity to split section for lab subject.") - - if slot_index + 1 <= total_slots: - ts1 = self.available_time_slots[slot_index] - ts2 = self.available_time_slots[slot_index + 1] - schedule.extend( - [ - {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts1, - "group": 1}, - {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts2, - "group": 1}, - {"teacher_id": teacher, "subject_id": subject, "classroom_id": lab2, "time_slot": ts1, - "group": 2}, - {"teacher_id": teacher, "subject_id": subject, "classroom_id": lab2, "time_slot": ts2, - "group": 2}, - ] - ) - section_subject_usage_tracker[section][subject] += 4 - slot_index += 2 - else: - schedule.append( - { - "teacher_id": teacher, - "subject_id": subject, - "classroom_id": room, - "time_slot": time_slot, - "group": 1, - } - ) - section_subject_usage_tracker[section][subject] += 1 - slot_index += 1 + schedule.extend(lab_entries) + section_subject_usage_tracker[section][subject] += len(lab_entries) + slot_index = new_slot_index else: - # No split needed; assign two continuous slots. - if slot_index + 1 <= total_slots: - ts1 = self.available_time_slots[slot_index] - ts2 = self.available_time_slots[slot_index + 1] - schedule.extend( - [ - {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts1, - "group": 1}, - {"teacher_id": teacher, "subject_id": subject, "classroom_id": room, "time_slot": ts2, - "group": 1}, - ] - ) - section_subject_usage_tracker[section][subject] += 2 - slot_index += 2 - else: - schedule.append( - { - "teacher_id": teacher, - "subject_id": subject, - "classroom_id": room, - "time_slot": time_slot, - "group": 1, - } - ) - section_subject_usage_tracker[section][subject] += 1 - slot_index += 1 - - else: - schedule.append( - { + schedule.append({ "teacher_id": teacher, "subject_id": subject, - "classroom_id": room, + "classroom_id": assigned_classroom, "time_slot": time_slot, - "group": "all", - } - ) + "group": "fallback" + }) + section_subject_usage_tracker[section][subject] += 1 + slot_index += 1 + + else: + schedule.append({ + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, + "time_slot": time_slot, + "group": "all", + }) if subject != "Library": section_subject_usage_tracker[section][subject] += 1 slot_index += 1 @@ -253,11 +262,9 @@ def generate_daily_schedule( ): daily_schedule = {} teacher_workload_tracker = self._initialize_teacher_workload_tracker() - - for section in section_list: # Iterate over half-day sections only + for section in section_list: section_strength = self.sections_manager[section] labs_capacity = self.lab_capacity_manager - section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( section, half_day_sections, @@ -272,7 +279,6 @@ def generate_daily_schedule( return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix - def _generate_weekly_schedule(self): weekly_schedule = {} section_subject_usage_tracker = { @@ -281,23 +287,22 @@ def _generate_weekly_schedule(self): } section_list = list(self.sections_manager.keys()) - for day_index, weekday in enumerate(self.weekdays): random.shuffle(section_list) half_day_sections = section_list[: len(section_list) // 2] - daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix= self.generate_daily_schedule( - section_list,half_day_sections, section_subject_usage_tracker, day_index + daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( + section_list, half_day_sections, section_subject_usage_tracker, day_index ) - weekly_schedule[weekday] = daily_schedule - return weekly_schedule, section_subject_usage_tracker, self.teacher_availability_matrix + return weekly_schedule, section_subject_usage_tracker, self.teacher_availability_matrix def create_timetable(self, num_weeks): timetable = {} - + # Reset lab matrix to initial state for each timetable generation. for week_number in range(1, num_weeks + 1): + self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) weekly_schedule, _, self.teacher_availability_matrix = self._generate_weekly_schedule() timetable[f"Week {week_number}"] = weekly_schedule - return timetable, self.teacher_availability_matrix + return timetable, self.teacher_availability_matrix, self.lab_availability_matrix From 89e907051dd54e4748a9dd197f4b4cd9d0da4c30 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Mon, 17 Feb 2025 23:16:25 +0530 Subject: [PATCH 43/67] refactored test-suite --- test-suite/ReadMe.md | 7 ------- test-suite/__init__.py | 0 test-suite/ulits_test.py | 3 --- test_suite/{Crossover_Test.py => test_crossover.py} | 0 test_suite/{Fitness_Test.py => test_fitness.py} | 0 test_suite/{Mutation_Test.py => test_mutation.py} | 0 test_suite/{Selection_Tests.py => test_selection.py} | 0 7 files changed, 10 deletions(-) delete mode 100644 test-suite/ReadMe.md delete mode 100644 test-suite/__init__.py delete mode 100644 test-suite/ulits_test.py rename test_suite/{Crossover_Test.py => test_crossover.py} (100%) rename test_suite/{Fitness_Test.py => test_fitness.py} (100%) rename test_suite/{Mutation_Test.py => test_mutation.py} (100%) rename test_suite/{Selection_Tests.py => test_selection.py} (100%) diff --git a/test-suite/ReadMe.md b/test-suite/ReadMe.md deleted file mode 100644 index 4759136..0000000 --- a/test-suite/ReadMe.md +++ /dev/null @@ -1,7 +0,0 @@ -This folder will contain the test for all the -different flows we have. - -Along with, - -1. unit test -> these will test individual components, like functionalities of Fitness, Crossover, Mutation, etc. -2. functional test -> collectively working of these modules. \ No newline at end of file diff --git a/test-suite/__init__.py b/test-suite/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/test-suite/ulits_test.py b/test-suite/ulits_test.py deleted file mode 100644 index 27de49a..0000000 --- a/test-suite/ulits_test.py +++ /dev/null @@ -1,3 +0,0 @@ -from Constants.TimeIntervals import TimeIntervalConstant as ti - -print(ti.get_slot_number("09:00", "09:55")) # Output: 1 diff --git a/test_suite/Crossover_Test.py b/test_suite/test_crossover.py similarity index 100% rename from test_suite/Crossover_Test.py rename to test_suite/test_crossover.py diff --git a/test_suite/Fitness_Test.py b/test_suite/test_fitness.py similarity index 100% rename from test_suite/Fitness_Test.py rename to test_suite/test_fitness.py diff --git a/test_suite/Mutation_Test.py b/test_suite/test_mutation.py similarity index 100% rename from test_suite/Mutation_Test.py rename to test_suite/test_mutation.py diff --git a/test_suite/Selection_Tests.py b/test_suite/test_selection.py similarity index 100% rename from test_suite/Selection_Tests.py rename to test_suite/test_selection.py From bf55e39877cfeac26e94383e6ddb131eb36384cd Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Mon, 17 Feb 2025 23:26:31 +0530 Subject: [PATCH 44/67] Refactorr --- GA/chromosome.py | 35 +++++++------ Samples/samples.py | 52 +++++++++--------- __init__.py | 128 ++++++++++++++++++++++++++++++++++----------- 3 files changed, 142 insertions(+), 73 deletions(-) diff --git a/GA/chromosome.py b/GA/chromosome.py index fbeaf5e..2fc6d70 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -31,7 +31,6 @@ def __init__( self.available_time_slots = time_slots self.teacher_duty_days = teacher_duty_days self.weekly_workload = teacher_weekly_workload - self.teacher_assignment_tracker = teacher_subject_mapping self.teacher_availability_matrix = teacher_availability_matrix self._map_sections_to_classrooms() @@ -70,42 +69,47 @@ def _assign_subject_and_teacher( assigned_room = None for subject in available_subjects: - # If subject is a lab subject or "Placement_Class", force assignment only at specific slots. - if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: + # Ensure lab subjects are only scheduled in specific slots (if required) + if (subject in self.lab_subject_list or subject in self.special_subject_list) and slot_index not in [1, 3, 5]: continue if subject not in subjects_scheduled_today: - teachers_for_subject = self.teacher_subject_mapping[subject] + teachers_for_subject = self.subject_teacher_mapping[subject] preferred_teachers = [ teacher for teacher in teachers_for_subject if self.teacher_availability_preferences.get(teacher, []) ] sorted_teachers_by_load = sorted(preferred_teachers, - key=lambda teacher: teacher_workload_tracker[teacher]) + key=lambda teacher: teacher_workload_tracker[teacher]) for teacher in sorted_teachers_by_load: if (teacher in teacher_availability_matrix and len(teacher_availability_matrix[teacher]) > day_index and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and teacher_availability_matrix[teacher][day_index][slot_index - 1]): + assigned_teacher = teacher teacher_workload_tracker[assigned_teacher] += 1 selected_subject = subject subjects_scheduled_today.add(subject) - assigned_room = ( - list(self.lab_capacity_manager.keys())[slot_index % len(self.lab_capacity_manager)] - ) + if subject in self.lab_subject_list: + assigned_room = random.choice(list(self.lab_capacity_manager.keys())) # Pick a lab classroom + else: + assigned_room = assigned_classroom # Regular classroom + break + if assigned_teacher: break if not assigned_teacher: selected_subject = "Library" assigned_teacher = "None" - assigned_room = assigned_classroom + assigned_room = assigned_classroom # Default to regular classroom return assigned_teacher, selected_subject, assigned_room + def _initialize_teacher_workload_tracker(self): return { teacher: 0 @@ -145,7 +149,7 @@ def _generate_section_schedule( ) # Check if this subject must get 2 continuous hours. - if (assigned_subject in self.lab_subject_list or assigned_subject == "Placement_Class"): + if (assigned_subject in self.lab_subject_list or assigned_subject in self.special_subject_list): # Check if splitting is needed (i.e. section strength exceeds the lab room capacity). if (section_strength is not None and labs_capacity is not None and assigned_room in labs_capacity and section_strength > labs_capacity[assigned_room]): @@ -282,10 +286,8 @@ def _generate_section_schedule( return section_schedule, teacher_availability_matrix - def generate_daily_schedule(self, section_list, half_day_sections, section_subject_usage_tracker, day_index): + def generate_daily_schedule(self, section_list, half_day_sections, section_subject_usage_tracker, day_index,teacher_workload_tracker): daily_schedule = {} - teacher_workload_tracker = self._initialize_teacher_workload_tracker() - for section in section_list: # Iterate over half-day sections only section_strength = self.sections_manager[section] labs_capacity = self.lab_capacity_manager @@ -302,11 +304,12 @@ def generate_daily_schedule(self, section_list, half_day_sections, section_subje ) daily_schedule[section] = section_schedule - return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix + return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix,teacher_workload_tracker def _generate_weekly_schedule(self): weekly_schedule = {} + teacher_workload_tracker = self._initialize_teacher_workload_tracker() section_subject_usage_tracker = { section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} for section in self.sections_manager.keys() @@ -317,8 +320,8 @@ def _generate_weekly_schedule(self): for day_index, weekday in enumerate(self.weekdays): random.shuffle(section_list) half_day_sections = section_list[: len(section_list) // 2] - daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix= self.generate_daily_schedule( - section_list,half_day_sections, section_subject_usage_tracker, day_index + daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix,teacher_workload_tracker= self.generate_daily_schedule( + section_list,half_day_sections, section_subject_usage_tracker, day_index,teacher_workload_tracker ) weekly_schedule[weekday] = daily_schedule diff --git a/Samples/samples.py b/Samples/samples.py index 3c69c38..52fbf9d 100644 --- a/Samples/samples.py +++ b/Samples/samples.py @@ -70,32 +70,32 @@ class PenaltyConstants: class TeacherWorkload: Weekly_workLoad = { - "AB01": 5, - "PK02": 5, - "SS03": 5, - "AA04": 5, - "AC05": 5, - "SP06": 5, - "DP07": 5, - "AD08": 5, - "RD09": 5, - "BJ10": 5, - "RS11": 5, - "JM12": 5, - "NJ13": 5, - "PM14": 5, - "AA15": 5, - "SJ16": 5, - "AB17": 5, - "HP18": 5, - "SG19": 5, - "DT20": 5, - "PA21": 5, - "NB22": 5, - "AK23": 5, - "AP24": 5, - "VD25": 5, - "AK26": 5 + "AB01": 20, + "PK02": 20, + "SS03": 20, + "AA04": 20, + "AC05": 20, + "SP06": 20, + "DP07": 20, + "AD08": 20, + "RD09": 20, + "BJ10": 20, + "RS11": 20, + "JM12": 20, + "NJ13": 20, + "PM14": 20, + "AA15": 20, + "SJ16": 20, + "AB17": 20, + "HP18": 20, + "SG19": 20, + "DT20": 20, + "PA21": 20, + "NB22": 20, + "AK23": 20, + "AP24": 20, + "VD25": 20, + "AK26": 8 } teacher_preferences = { diff --git a/__init__.py b/__init__.py index c00230d..a0c605d 100644 --- a/__init__.py +++ b/__init__.py @@ -8,7 +8,6 @@ from Samples.samples import (InterDepartment, SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload, RoomCapacity, TimeSlots) - def timetable_generation( teacher_subject_mapping, total_sections, @@ -22,6 +21,7 @@ def timetable_generation( teacher_duty_days, teacher_availability_matrix, time_slots, + total_generations, prev_selected_chromosomes=None, prev_mutated_chromosomes=None ): @@ -39,22 +39,23 @@ def timetable_generation( teacher_availability_matrix=teacher_availability_matrix, time_slots=time_slots ) + timetable, teacher_availability_matrix = timetable_generator.create_timetable( - Defaults.initial_no_of_chromosomes + total_generations ) - + fitness_calculator = TimetableFitnessEvaluator( - timetable, - timetable_generator.sections_manager.keys(), - SubjectTeacherMap.subject_teacher_map, - timetable_generator.classrooms_manager.keys(), - timetable_generator.lab_capacity_manager.keys(), - timetable_generator.classrooms_manager, - timetable_generator.sections_manager, - timetable_generator.subject_quota_limits, - timetable_generator.teacher_availability_preferences, - timetable_generator.weekly_workload, - time_slots + timetable=timetable, + all_sections=list(timetable_generator.sections_manager.keys()), + subject_teacher_mapping=timetable_generator.subject_teacher_mapping, + available_classrooms=list(timetable_generator.classrooms_manager.keys()), + available_labs=list(timetable_generator.lab_capacity_manager.keys()), + classroom_capacity=timetable_generator.classrooms_manager, + section_student_strength=timetable_generator.sections_manager, + subject_quota_data=timetable_generator.subject_quota_limits, + teacher_time_preferences=timetable_generator.teacher_availability_preferences, + teacher_daily_workload=timetable_generator.weekly_workload, + time_slots=time_slots ) fitness_scores = fitness_calculator.evaluate_timetable_fitness() @@ -98,6 +99,47 @@ def timetable_generation( return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes + +def run_timetable_generations( + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + total_generations +): + prev_selected = None + prev_mutated = None + best_chromosome = None + + for _ in range(total_generations): + best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + prev_selected_chromosomes=prev_selected, + prev_mutated_chromosomes=prev_mutated + ) + prev_selected = selected + prev_mutated = mutated + + return best_chromosome, teacher_availability_matrix + + def run_timetable_generation( teacher_subject_mapping, total_sections, @@ -132,19 +174,35 @@ def run_timetable_generation( teacher_availability_matrix=teacher_availability_matrix, time_slots=time_slots, prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated + prev_mutated_chromosomes=prev_mutated, + total_generations=total_generations ) prev_selected = selected prev_mutated = mutated - return best_chromosome, teacher_availability_matrix + correct_teacher_availability_matrix = update_matrix_for_best( + best_chromosome, + teacher_availability_matrix, + { + "Monday": 0, + "Tuesday": 1, + "Wednesday": 2, + "Thursday": 3, + "Friday": 4, + "Saturday": 5, + "Sunday": 6 + }, time_slots + ) + + return best_chromosome, correct_teacher_availability_matrix + if __name__ == "__main__": best, correct_teacher_availability_matrix = run_timetable_generation( teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections=RoomCapacity.section_strength, - total_classrooms=RoomCapacity.room_capacity, - total_labs=RoomCapacity.lab_capacity, + total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50}, teacher_preferences=TeacherWorkload.teacher_preferences, teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, special_subjects=SpecialSubjects.special_subjects, @@ -156,11 +214,19 @@ def run_timetable_generation( 5, 7 ), - total_generations=Defaults.total_no_of_generations, - time_slots=TimeSlots.time_slots + total_generations = Defaults.total_no_of_generations, + time_slots = { + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + } ) + from icecream import ic - ic(best) correct_teacher_availability_matrix = update_matrix_for_best( best, correct_teacher_availability_matrix, @@ -172,14 +238,14 @@ def run_timetable_generation( "Friday": 4, "Saturday": 5, "Sunday": 6 - }, - { - "08:00 - 09:00": 1, - "09:00 - 10:00": 2, - "10:00 - 11:00": 3, - "11:00 - 12:00": 4, - "12:00 - 13:00": 5, - "13:50 - 14:50": 6, - "14:50 - 15:50": 7, + },{ + "9:00 - 9:55": 1, + "9:55 - 10:50": 2, + "11:10 - 12:05": 3, + "12:05 - 1:00": 4, + "1:20 - 2:15": 5, + "2:15 - 3:10": 6, + "3:30 - 4:25": 7 } ) + ic(best, correct_teacher_availability_matrix) From 2e322a5c64c7589e23b6cf9b67afc74159456702 Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Tue, 18 Feb 2025 01:09:36 +0530 Subject: [PATCH 45/67] Minor changes --- GA/chromosome.py | 57 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/GA/chromosome.py b/GA/chromosome.py index 8015c1e..7050239 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -75,7 +75,7 @@ def _assign_subject_and_teacher( assigned_room = assigned_classroom # For non-lab subjects for subject in available_subjects: - if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: + if (subject in self.lab_subject_list or subject in self.special_subject_list) and slot_index not in [1, 3, 5]: continue if subject not in subjects_scheduled_today: teachers_for_subject = self.subject_teacher_mapping[subject] @@ -218,17 +218,40 @@ def _generate_section_schedule( teacher_availability_matrix, day_index, ) - if subject in self.lab_subject_list or subject == "Placement_Class": - # For lab subjects, require two consecutive slots. + + if subject in self.lab_subject_list or subject in self.special_subject_list: + # Lab & Special subjects both require two consecutive slots if slot_index <= total_slots - 1: - lab_entries, new_slot_index = self._allocate_lab( - teacher, subject, day_index, slot_index, section_strength - ) - schedule.extend(lab_entries) - section_subject_usage_tracker[section][subject] += len(lab_entries) - slot_index = new_slot_index + if subject in self.lab_subject_list: + # Allocate lab for lab subjects + entries, new_slot_index = self._allocate_lab( + teacher, subject, day_index, slot_index, section_strength + ) + else: + # Allocate a normal classroom for special subjects + entries = [ + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_classroom, # Special subjects use normal classrooms + "time_slot": self.available_time_slots[slot_index], + "group": "special_subject", + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_classroom, + "time_slot": self.available_time_slots[slot_index + 1], + "group": "special_subject", + }, + ] + new_slot_index = slot_index + 2 # Move ahead by two slots + schedule.extend(entries) + section_subject_usage_tracker[section][subject] += len(entries) + slot_index = new_slot_index else: + # If at the end of the day and no space for 2 slots, fallback to single-slot assignment schedule.append({ "teacher_id": teacher, "subject_id": subject, @@ -240,6 +263,7 @@ def _generate_section_schedule( slot_index += 1 else: + # General subjects get a single slot in a normal classroom schedule.append({ "teacher_id": teacher, "subject_id": subject, @@ -253,19 +277,21 @@ def _generate_section_schedule( return schedule, teacher_availability_matrix + + def generate_daily_schedule( self, section_list, half_day_sections, section_subject_usage_tracker, - day_index + day_index, + teacher_workload_tracker ): daily_schedule = {} - teacher_workload_tracker = self._initialize_teacher_workload_tracker() for section in section_list: section_strength = self.sections_manager[section] labs_capacity = self.lab_capacity_manager - section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( + section_schedule, self.teacher_availability_matrix ,= self._generate_section_schedule( section, half_day_sections, section_subject_usage_tracker, @@ -277,10 +303,11 @@ def generate_daily_schedule( ) daily_schedule[section] = section_schedule - return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix + return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix,teacher_workload_tracker def _generate_weekly_schedule(self): weekly_schedule = {} + teacher_workload_tracker = self._initialize_teacher_workload_tracker() section_subject_usage_tracker = { section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} for section in self.sections_manager.keys() @@ -290,8 +317,8 @@ def _generate_weekly_schedule(self): for day_index, weekday in enumerate(self.weekdays): random.shuffle(section_list) half_day_sections = section_list[: len(section_list) // 2] - daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( - section_list, half_day_sections, section_subject_usage_tracker, day_index + daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix,teacher_workload_tracker = self.generate_daily_schedule( + section_list, half_day_sections, section_subject_usage_tracker, day_index,teacher_workload_tracker ) weekly_schedule[weekday] = daily_schedule From e376e65d3bab2634a32c99898d83801939e0e36e Mon Sep 17 00:00:00 2001 From: Prachi Sah Date: Tue, 18 Feb 2025 16:34:05 +0530 Subject: [PATCH 46/67] Minor changes --- Constants/constant.py | 11 ++ GA/__init__.py | 232 +++++++++++++++++-------------- GA/chromosome.py | 313 +++++++++++++++++++----------------------- 3 files changed, 279 insertions(+), 277 deletions(-) diff --git a/Constants/constant.py b/Constants/constant.py index 1ed2ddb..bd7fa7c 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -8,6 +8,17 @@ class Defaults: total_no_of_generations = 10 class_strength = 50 + +class TeacherPreferences: + def __init__(self, teacher_weekly_workload: dict): + self.teacher_preferences = {} + for teacher, workload in teacher_weekly_workload.items(): + self.teacher_preferences[teacher] = list(range(1, 8)) + + def get_preferences(self): + return self.teacher_preferences + + class SubjectWeeklyQuota: def __init__(self, subject_quota): self.subject_quota = subject_quota diff --git a/GA/__init__.py b/GA/__init__.py index 063bbef..cf6d33f 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,11 +1,39 @@ -# This is the Orchestrator file, which will govern the flow. - -from Constants.helper_routines import update_teacher_availability_matrix, update_matrix_for_best +import copy +from Constants.helper_routines import ( + initialize_teacher_availability, + update_matrix_for_best, + update_teacher_availability_matrix +) +from Constants.constant import (Defaults,TeacherPreferences) from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection +def update_lab_availability_matrix(initial_lab_matrix, best_timetable, day_map, time_slot_map): + """ + Iterate over the best chromosome (weekly timetable) and for each lab allocation, + mark the corresponding slot as False in a deep copy of the initial lab matrix. + """ + updated_lab_matrix = copy.deepcopy(initial_lab_matrix) + # best_timetable is a dict keyed by weekday (e.g., 'Monday', 'Tuesday', etc.) + for weekday, daily_schedule in best_timetable.items(): + # Convert weekday to day index using day_map + day_index = day_map.get(weekday) + if day_index is None: + continue + # daily_schedule is a dict: keys = section names, values = list of allocations + for section, allocations in daily_schedule.items(): + for alloc in allocations: + lab = alloc.get("classroom_id") + # Only update if the classroom_id is one of the labs + if lab in updated_lab_matrix: + time_slot_str = alloc.get("time_slot") + ts_index = time_slot_map.get(time_slot_str) + if ts_index is not None: + # Adjust index (if lab matrix lists are 0-indexed) + updated_lab_matrix[lab][day_index][ts_index - 1] = False + return updated_lab_matrix def timetable_generation( teacher_subject_mapping, @@ -19,29 +47,30 @@ def timetable_generation( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, + lab_availability_matrix, # Initial lab matrix passed in time_slots, total_generations, prev_selected_chromosomes=None, prev_mutated_chromosomes=None ): + # Create an instance of TimeTableGeneration. timetable_generator = TimeTableGeneration( teacher_subject_mapping=teacher_subject_mapping, total_sections=total_sections, total_classrooms=total_classrooms, total_labs=total_labs, - teacher_preferences=teacher_preferences, + teacher_preferences=TeacherPreferences(teacher_weekly_workload).get_preferences(), teacher_weekly_workload=teacher_weekly_workload, special_subjects=special_subjects, labs=labs, subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, time_slots=time_slots ) - timetable, teacher_availability_matrix = timetable_generator.create_timetable( - total_generations - ) + timetable, teacher_availability_matrix, _ = timetable_generator.create_timetable(total_generations) fitness_calculator = TimetableFitnessEvaluator( timetable=timetable, @@ -60,21 +89,18 @@ def timetable_generation( selection_object = TimeTableSelection() selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - if prev_selected_chromosomes: selected_chromosomes.update(prev_selected_chromosomes) crossover_object = TimeTableCrossOver() crossover_chromosomes = [] selected_keys = list(selected_chromosomes.keys()) - for i in range(0, len(selected_keys), 2): if i + 1 < len(selected_keys): parent1 = selected_keys[i] parent2 = selected_keys[i + 1] c1, c2 = crossover_object.perform_crossover(timetable[parent1], timetable[parent2]) - crossover_chromosomes.append(c1) - crossover_chromosomes.append(c2) + crossover_chromosomes.extend([c1, c2]) mutation_object = TimeTableMutation() mutated_chromosomes = [mutation_object.mutate_schedule_for_week(ch) for ch in crossover_chromosomes] @@ -83,7 +109,6 @@ def timetable_generation( best_chromosome_score = -1 best_chromosome = None - for w_no, w_score in selected_chromosomes.items(): score = int(w_score) if score > best_chromosome_score and w_no in timetable: @@ -96,9 +121,10 @@ def timetable_generation( best_chromosome ) + # Return the best chromosome and the teacher matrix. + # We do NOT return the working lab matrix because we want to update the initial matrix. return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes - def run_timetable_generations( teacher_subject_mapping, total_sections, @@ -111,12 +137,13 @@ def run_timetable_generations( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, - total_generations + lab_availability_matrix, + total_generations, + time_slots ): prev_selected = None prev_mutated = None best_chromosome = None - for _ in range(total_generations): best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( teacher_subject_mapping=teacher_subject_mapping, @@ -130,14 +157,15 @@ def run_timetable_generations( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, + time_slots=time_slots, prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated + prev_mutated_chromosomes=prev_mutated, + total_generations=total_generations ) prev_selected = selected prev_mutated = mutated - - return best_chromosome, teacher_availability_matrix - + return best_chromosome, teacher_availability_matrix, lab_availability_matrix def run_timetable_generation( teacher_subject_mapping, @@ -151,38 +179,77 @@ def run_timetable_generation( subject_quota_limits, teacher_duty_days, teacher_availability_matrix, + lab_availability_matrix, total_generations, - time_slots + time_slots, + day_map, + time_slot_map ): - prev_selected = None - prev_mutated = None - best_chromosome = None - - for _ in range(total_generations): - best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( - teacher_subject_mapping=teacher_subject_mapping, - total_sections=total_sections, - total_classrooms=total_classrooms, - total_labs=total_labs, - teacher_preferences=teacher_preferences, - teacher_weekly_workload=teacher_weekly_workload, - special_subjects=special_subjects, - labs=labs, - subject_quota_limits=subject_quota_limits, - teacher_duty_days=teacher_duty_days, - teacher_availability_matrix=teacher_availability_matrix, - time_slots=time_slots, - prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated, - total_generations=total_generations - ) - prev_selected = selected - prev_mutated = mutated - - correct_teacher_availability_matrix = update_matrix_for_best( - best_chromosome, + best_tt, teacher_availability_matrix, lab_availability_matrix = run_timetable_generations( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, + total_generations=Defaults.total_no_of_generations, + time_slots=time_slots + ) + teacher_availability_matrix = update_matrix_for_best( + best_tt, teacher_availability_matrix, - { + day_map, + time_slot_map + ) + # Update the INITIAL lab matrix based solely on the best chromosome's lab allocations. + updated_lab_matrix = update_lab_availability_matrix(lab_availability_matrix, best_tt, day_map, time_slot_map) + return best_tt, teacher_availability_matrix, updated_lab_matrix + +if __name__ == '__main__': + from Constants.constant import Defaults + from GA.__init__ import run_timetable_generation + from Samples.samples import (SpecialSubjects, SubjectTeacherMap, + SubjectWeeklyQuota, TeacherWorkload) + lab_availability_matrix = { + "L1": [[True] * 7 for _ in range(5)], + "L2": [[True] * 7 for _ in range(5)], + "L3": [[True] * 7 for _ in range(5)], + "L4": [[True] * 7 for _ in range(5)], + "L5": [[True] * 7 for _ in range(5)], + "L6": [[True] * 7 for _ in range(5)], + } + best, correct_teacher_availability_matrix, correct_lab_availability_matrix = run_timetable_generation( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs={"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, + teacher_preferences={}, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + labs=SpecialSubjects.Labs, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_availability_matrix=initialize_teacher_availability( + TeacherWorkload.Weekly_workLoad.keys(), 5, 7 + ), + lab_availability_matrix=lab_availability_matrix, + total_generations=Defaults.total_no_of_generations, + time_slots={ + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + }, + day_map={ "Monday": 0, "Tuesday": 1, "Wednesday": 2, @@ -190,61 +257,16 @@ def run_timetable_generation( "Friday": 4, "Saturday": 5, "Sunday": 6 - }, time_slots + }, + time_slot_map={ + "9:00 - 9:55": 1, + "9:55 - 10:50": 2, + "11:10 - 12:05": 3, + "12:05 - 1:00": 4, + "1:20 - 2:15": 5, + "2:15 - 3:10": 6, + "3:30 - 4:25": 7 + } ) - - return best_chromosome, correct_teacher_availability_matrix - - -# if __name__ == "__main__": -# best, correct_teacher_availability_matrix = run_timetable_generation( -# teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, -# total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, -# total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, -# total_labs={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50}, -# teacher_preferences=TeacherWorkload.teacher_preferences, -# teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, -# special_subjects=SpecialSubjects.special_subjects, -# labs=SpecialSubjects.Labs, -# subject_quota_limits=SubjectWeeklyQuota.subject_quota, -# teacher_duty_days=TeacherWorkload.teacher_duty_days, -# teacher_availability_matrix=initialize_teacher_availability( -# TeacherWorkload.Weekly_workLoad.keys(), -# 5, -# 7 -# ), -# total_generations = Defaults.total_no_of_generations, -# time_slots = { -# 1: "9:00 - 9:55", -# 2: "9:55 - 10:50", -# 3: "11:10 - 12:05", -# 4: "12:05 - 1:00", -# 5: "1:20 - 2:15", -# 6: "2:15 - 3:10", -# 7: "3:30 - 4:25", -# } -# ) -# -# from icecream import ic -# correct_teacher_availability_matrix = update_matrix_for_best( -# best, -# correct_teacher_availability_matrix, -# { -# "Monday": 0, -# "Tuesday": 1, -# "Wednesday": 2, -# "Thursday": 3, -# "Friday": 4, -# "Saturday": 5, -# "Sunday": 6 -# },{ -# "9:00 - 9:55": 1, -# "9:55 - 10:50": 2, -# "11:10 - 12:05": 3, -# "12:05 - 1:00": 4, -# "1:20 - 2:15": 5, -# "2:15 - 3:10": 6, -# "3:30 - 4:25": 7 -# } -# ) -# ic(best, correct_teacher_availability_matrix) + from icecream import ic + ic(best, correct_teacher_availability_matrix, correct_lab_availability_matrix) \ No newline at end of file diff --git a/GA/chromosome.py b/GA/chromosome.py index 2fc6d70..7f4706b 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -1,8 +1,8 @@ import random - +import copy +from math import ceil from Constants.constant import Defaults - - +from Constants.constant import TeacherPreferences class TimeTableGeneration: def __init__( self, @@ -17,6 +17,7 @@ def __init__( subject_quota_limits: dict, teacher_duty_days: dict, teacher_availability_matrix: dict, + lab_availability_matrix: dict, # New parameter time_slots: dict, ): self.sections_manager = total_sections @@ -31,7 +32,12 @@ def __init__( self.available_time_slots = time_slots self.teacher_duty_days = teacher_duty_days self.weekly_workload = teacher_weekly_workload + self.teacher_assignment_tracker = teacher_subject_mapping self.teacher_availability_matrix = teacher_availability_matrix + # Save the original lab matrix so that each generation starts fresh. + self.initial_lab_availability_matrix = copy.deepcopy(lab_availability_matrix) + self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) + self._map_sections_to_classrooms() def _map_sections_to_classrooms(self): @@ -63,16 +69,13 @@ def _assign_subject_and_teacher( ): available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) random.shuffle(available_subjects) - assigned_teacher = None selected_subject = None - assigned_room = None + assigned_room = assigned_classroom # For non-lab subjects for subject in available_subjects: - # Ensure lab subjects are only scheduled in specific slots (if required) - if (subject in self.lab_subject_list or subject in self.special_subject_list) and slot_index not in [1, 3, 5]: + if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: continue - if subject not in subjects_scheduled_today: teachers_for_subject = self.subject_teacher_mapping[subject] preferred_teachers = [ @@ -80,36 +83,27 @@ def _assign_subject_and_teacher( if self.teacher_availability_preferences.get(teacher, []) ] sorted_teachers_by_load = sorted(preferred_teachers, - key=lambda teacher: teacher_workload_tracker[teacher]) - + key=lambda t: teacher_workload_tracker[t]) for teacher in sorted_teachers_by_load: if (teacher in teacher_availability_matrix and - len(teacher_availability_matrix[teacher]) > day_index and - len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and - teacher_availability_matrix[teacher][day_index][slot_index - 1]): - + len(teacher_availability_matrix[teacher]) > day_index and + len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[teacher][day_index][slot_index - 1]): assigned_teacher = teacher - teacher_workload_tracker[assigned_teacher] += 1 + teacher_workload_tracker[teacher] += 1 selected_subject = subject subjects_scheduled_today.add(subject) - if subject in self.lab_subject_list: - assigned_room = random.choice(list(self.lab_capacity_manager.keys())) # Pick a lab classroom - else: - assigned_room = assigned_classroom # Regular classroom - break - if assigned_teacher: break if not assigned_teacher: selected_subject = "Library" assigned_teacher = "None" - assigned_room = assigned_classroom # Default to regular classroom + assigned_room = assigned_classroom return assigned_teacher, selected_subject, assigned_room - def _initialize_teacher_workload_tracker(self): return { teacher: 0 @@ -123,6 +117,77 @@ def _get_available_subjects(self, section, subject_usage_tracker): if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] + def _allocate_lab(self, teacher, subject, day_index, slot_index, section_strength): + """ + Always split the section into two groups: + Group sizes: group1 = ceil(section_strength/2), group2 = section_strength - group1. + Try to find two distinct labs with two consecutive free slots. + """ + + group1_size = ceil(section_strength / 2) + group2_size = section_strength - group1_size + labs_list = list(self.lab_availability_matrix.keys()) + for i in range(len(labs_list)): + lab1 = labs_list[i] + if (self.lab_availability_matrix[lab1][day_index][slot_index - 1] and + self.lab_availability_matrix[lab1][day_index][slot_index] and + self.lab_capacity_manager.get(lab1, 0) >= group1_size): + for j in range(i + 1, len(labs_list)): + lab2 = labs_list[j] + if (self.lab_availability_matrix[lab2][day_index][slot_index - 1] and + self.lab_availability_matrix[lab2][day_index][slot_index] and + self.lab_capacity_manager.get(lab2, 0) >= group2_size): + # Mark slots as occupied in the working copy + self.lab_availability_matrix[lab1][day_index][slot_index - 1] = False + self.lab_availability_matrix[lab1][day_index][slot_index] = False + self.lab_availability_matrix[lab2][day_index][slot_index - 1] = False + self.lab_availability_matrix[lab2][day_index][slot_index] = False + entries = [ + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index], + "group": 1 + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index+1], + "group": 1 + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index], + "group": 2 + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index+1], + "group": 2 + }, + ] + + return entries, slot_index + 2 + + # Fallback: if no pair found, return a merged allocation. + merged_entry = { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": "merged_lab", + "time_slot": self.available_time_slots[slot_index], + "group": "merged", + "flagged": False + } + + return [merged_entry], slot_index + 1 + + def _generate_section_schedule( self, section, @@ -132,9 +197,9 @@ def _generate_section_schedule( teacher_availability_matrix, day_index: int, section_strength: int, - labs_capacity: dict + labs_capacity: dict, ): - section_schedule = [] + schedule = [] subjects_scheduled_today = set() assigned_classroom = self.section_to_classroom_map[section] total_slots = 4 if section in half_day_sections else 7 @@ -142,156 +207,63 @@ def _generate_section_schedule( while slot_index <= total_slots: time_slot = self.available_time_slots[slot_index] - assigned_teacher, assigned_subject, assigned_room = self._assign_subject_and_teacher( - section, slot_index, subjects_scheduled_today, assigned_classroom, - section_subject_usage_tracker, teacher_workload_tracker, - teacher_availability_matrix, day_index + teacher, subject, room = self._assign_subject_and_teacher( + section, + slot_index, + subjects_scheduled_today, + assigned_classroom, + section_subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index, ) - - # Check if this subject must get 2 continuous hours. - if (assigned_subject in self.lab_subject_list or assigned_subject in self.special_subject_list): - # Check if splitting is needed (i.e. section strength exceeds the lab room capacity). - if (section_strength is not None and labs_capacity is not None and - assigned_room in labs_capacity and section_strength > labs_capacity[assigned_room]): - - # Try to find an alternate lab room for group 2. - lab2 = None - for lab in self.lab_capacity_manager: - if lab != assigned_room and lab in labs_capacity: - if labs_capacity[lab] >= section_strength - labs_capacity[assigned_room]: - lab2 = lab - break - - if lab2 is None: - raise ValueError("Insufficient lab capacity to split section for lab subject.") - - # For splitting, ensure there are 4 consecutive slots available. - if slot_index + 3 <= total_slots: - ts1 = self.available_time_slots[slot_index] - ts2 = self.available_time_slots[slot_index + 1] - ts3 = self.available_time_slots[slot_index + 2] - ts4 = self.available_time_slots[slot_index + 3] - - # Group 1 gets two slots in assigned_room. - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": ts1, - "group": 1 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": ts2, - "group": 1 - }) - - # Group 2 gets two slots in lab2. - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": lab2, - "time_slot": ts3, - "group": 2 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": lab2, - "time_slot": ts4, - "group": 2 - }) - section_subject_usage_tracker[section][assigned_subject] += 4 - slot_index += 4 - - else: - # Not enough slots for full split; fall back to non-split 2-hour allocation. - if slot_index + 1 <= total_slots: - next_time_slot = self.available_time_slots[slot_index + 1] - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": next_time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 2 - slot_index += 2 - - else: - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 1 - slot_index += 1 + if subject in self.lab_subject_list or subject == "Placement_Class": + # For lab subjects, require two consecutive slots. + if slot_index <= total_slots - 1: + lab_entries, new_slot_index = self._allocate_lab( + teacher, subject, day_index, slot_index, section_strength + ) + schedule.extend(lab_entries) + section_subject_usage_tracker[section][subject] += len(lab_entries) + slot_index = new_slot_index else: - # No split needed; assign 2 consecutive slots in the same room. - if slot_index + 1 <= total_slots: - next_time_slot = self.available_time_slots[slot_index + 1] - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": next_time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 2 - slot_index += 2 - - else: - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, - "time_slot": time_slot, - "group": 1 - }) - section_subject_usage_tracker[section][assigned_subject] += 1 - slot_index += 1 + schedule.append({ + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_classroom, + "time_slot": time_slot, + "group": "fallback" + }) + section_subject_usage_tracker[section][subject] += 1 + slot_index += 1 else: - # For non-lab subjects, allocate a single slot. - section_schedule.append({ - "teacher_id": assigned_teacher, - "subject_id": assigned_subject, - "classroom_id": assigned_room, + schedule.append({ + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, "time_slot": time_slot, - "group": "all" + "group": "all", }) - if assigned_subject != "Library": - section_subject_usage_tracker[section][assigned_subject] += 1 + if subject != "Library": + section_subject_usage_tracker[section][subject] += 1 slot_index += 1 - return section_schedule, teacher_availability_matrix - + return schedule, teacher_availability_matrix - def generate_daily_schedule(self, section_list, half_day_sections, section_subject_usage_tracker, day_index,teacher_workload_tracker): + def generate_daily_schedule( + self, + section_list, + half_day_sections, + section_subject_usage_tracker, + day_index + ): daily_schedule = {} - for section in section_list: # Iterate over half-day sections only + teacher_workload_tracker = self._initialize_teacher_workload_tracker() + for section in section_list: section_strength = self.sections_manager[section] labs_capacity = self.lab_capacity_manager - section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( section, half_day_sections, @@ -304,35 +276,32 @@ def generate_daily_schedule(self, section_list, half_day_sections, section_subje ) daily_schedule[section] = section_schedule - return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix,teacher_workload_tracker - + return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix def _generate_weekly_schedule(self): weekly_schedule = {} - teacher_workload_tracker = self._initialize_teacher_workload_tracker() section_subject_usage_tracker = { section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} for section in self.sections_manager.keys() } section_list = list(self.sections_manager.keys()) - for day_index, weekday in enumerate(self.weekdays): random.shuffle(section_list) half_day_sections = section_list[: len(section_list) // 2] - daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix,teacher_workload_tracker= self.generate_daily_schedule( - section_list,half_day_sections, section_subject_usage_tracker, day_index,teacher_workload_tracker + daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( + section_list, half_day_sections, section_subject_usage_tracker, day_index ) - weekly_schedule[weekday] = daily_schedule - return weekly_schedule, section_subject_usage_tracker, self.teacher_availability_matrix + return weekly_schedule, section_subject_usage_tracker, self.teacher_availability_matrix def create_timetable(self, num_weeks): timetable = {} - + # Reset lab matrix to initial state for each timetable generation. for week_number in range(1, num_weeks + 1): + self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) weekly_schedule, _, self.teacher_availability_matrix = self._generate_weekly_schedule() timetable[f"Week {week_number}"] = weekly_schedule - return timetable, self.teacher_availability_matrix + return timetable, self.teacher_availability_matrix, self.lab_availability_matrix \ No newline at end of file From 65feec1afd475f41f267c9a786e405d3dd160ba0 Mon Sep 17 00:00:00 2001 From: gunjan Date: Mon, 24 Feb 2025 13:30:40 +0530 Subject: [PATCH 47/67] Correcting section alloacation logic --- Constants/constant.py | 2 +- Constants/section_allocation.py | 136 ++++++-------------------------- 2 files changed, 26 insertions(+), 112 deletions(-) diff --git a/Constants/constant.py b/Constants/constant.py index 97c7c64..992525b 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -65,5 +65,5 @@ class SectionsConstants: } ATTRIBUTE_CONDITIONS = { - 'hostler': lambda student: student.get('Hostler', False), + 'hostler': lambda student: student.get('is_hosteller', False), } diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index 529341f..29ced92 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -1,101 +1,66 @@ import random from collections import defaultdict from typing import Dict, List - -from Constants.constant import Defaults, SectionsConstants +from Constants.constant import SectionsConstants class StudentScorer: def __init__(self, attribute_weights: Dict[str, int] = None): """ - Initialize the scorer with attribute weights. - - Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. + Initialize the scorer with attribute weights. + Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. """ - self.attribute_weights = attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS - def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: int = 30) -> float: """ Calculate the CGPA threshold for the top X% of students. - - Args: - students (List[Dict]): List of student dictionaries with 'CGPA'. - top_percentage (int): Percentage of students considered top. - - Returns: - float: The CGPA threshold. - """ - - sorted_cgpas = sorted( - (student['cgpa'] for student in students), - reverse=True - ) - + valid_cgpas = [student.get("cgpa", 0) for student in students if isinstance(student.get("cgpa"), (int, float))] + if not valid_cgpas: + return 0 # Default if no valid CGPAs + sorted_cgpas = sorted(valid_cgpas, reverse=True) threshold_index = max(1, int(len(sorted_cgpas) * top_percentage / 100)) - 1 return sorted_cgpas[threshold_index] - def assign_dynamic_conditions(self, cgpa_threshold: float): """ Assign a dynamic condition for CGPA based on the threshold. - - Args: - cgpa_threshold (float): The CGPA threshold for "good_cgpa". """ - SectionsConstants.ATTRIBUTE_CONDITIONS['good_cgpa'] = lambda student: student['cgpa'] >= cgpa_threshold - + SectionsConstants.ATTRIBUTE_CONDITIONS["good_cgpa"] = lambda student: student.get("cgpa", 0) >= cgpa_threshold def calculate_student_score(self, student: Dict) -> int: """ Calculate the score for a student based on attribute weights. - - Args: - student (Dict): A dictionary representing a student. - - Returns: - int: The student's score. """ + total_score = 0 + for attribute, weight in self.attribute_weights.items(): + condition_func = SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False) + if condition_func(student): + total_score += weight + return total_score - return sum( - weight - for attribute, weight in self.attribute_weights.items() - if SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False)(student) - ) - + def assign_scores_to_students(self, students): + # Step 1: Calculate CGPA threshold + cgpa_threshold = self.calculate_dynamic_cgpa_threshold(students) + self.assign_dynamic_conditions(cgpa_threshold) # Ensure the condition is updated - def assign_scores_to_students(self, students: List[Dict]) -> List[Dict]: - """ - Assign scores to all students. - - Args: - students (List[Dict]): List of student dictionaries. - - Returns: - List[Dict]: The updated list of students with scores. - """ + print(f"CGPA threshold set at: {cgpa_threshold}") + # Step 2: Assign scores for student in students: - student['score'] = self.calculate_student_score(student) - return students + student["score"] = self.calculate_student_score(student) + print(f"Assigned Score: {student['student_name']} - {student['score']}") + return students - def divide_students_into_sections(self, students: List[Dict], class_strength: int) -> List[List[Dict]]: + def divide_students_into_sections(self, students: List[Dict], class_strength: int = 50) -> List[List[Dict]]: """ Divide students into sections based on their scores and class strength. - - Args: - students (List[Dict]): List of student dictionaries with scores. - class_strength (int): Maximum number of students per section. - - Returns: - List[List[Dict]]: List of sections containing students. """ grouped_by_score = defaultdict(list) for student in students: - grouped_by_score[student['score']].append(student) + grouped_by_score[student["score"]].append(student) sections = [] current_section = [] @@ -111,54 +76,3 @@ def divide_students_into_sections(self, students: List[Dict], class_strength: in sections.append(current_section) return sections - - - - - - -def generate_students(num_students: int = 500) -> List[Dict]: - """ - Generate a list of random students with CGPA and hostler status. - - Args: - num_students (int): Number of students to generate. - - Returns: - List[Dict]: List of student dictionaries. - """ - - return [ - { - 'ID': i, - 'CGPA': round(random.uniform(6.0, 9.8), 2), - 'Hostler': random.choice([True, False]) - } - for i in range(1, num_students + 1) - ] - - -if __name__ == "__main__": - # Initialize constants and scorer - scorer = StudentScorer() - students = generate_students(num_students=500) - - # Calculate the dynamic CGPA threshold - cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold(students, top_percentage=30) - print(f"Dynamic CGPA Threshold (Top 30%): {cgpa_threshold}") - - # Assign conditions and scores - scorer.assign_dynamic_conditions(cgpa_threshold) - students_with_scores = scorer.assign_scores_to_students(students) - - # Divide students into sections - sections = scorer.divide_students_into_sections(students_with_scores, Defaults.class_strength) - - # Display the sections - for i, section in enumerate(sections, 1): - print(f"Section {i} (Total Students: {len(section)}):") - for student in section: - print( - f" Student ID: {student['ID']}, CGPA: {student['CGPA']}, " - f"Hostler: {student['Hostler']}, score: {student['score']}" - ) From 687fa7d4afff94a24ccff8a98620c9e04de48a0b Mon Sep 17 00:00:00 2001 From: gunjan Date: Mon, 24 Feb 2025 13:38:06 +0530 Subject: [PATCH 48/67] debugging --- Constants/constant.py | 17 ----------- Constants/section_allocation.py | 50 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/Constants/constant.py b/Constants/constant.py index 992525b..43e2fd9 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -8,23 +8,6 @@ class Defaults: total_no_of_generations = 10 class_strength = 50 -class Sections: - def __init__(self, section_number): - self.sections = [chr(65 + i) for i in range(section_number)] - - -class Classrooms: - def __init__(self, room_count, lab_count): - self.classrooms = [f"R{i + 1}" for i in range(room_count)] - self.labs = [f"L{i + 1}" for i in range(lab_count)] - - -class RoomCapacity: - def __init__(self, classrooms, sections, default_capacity=Defaults.room_capacity): - self.room_capacity = {room: default_capacity for room in classrooms} - self.section_strength = {section: default_capacity for section in sections} - - class SubjectWeeklyQuota: def __init__(self, subject_quota): self.subject_quota = subject_quota diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index 29ced92..6937974 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -76,3 +76,53 @@ def divide_students_into_sections(self, students: List[Dict], class_strength: in sections.append(current_section) return sections +<<<<<<< HEAD +======= + + +def generate_students(num_students: int = 500) -> List[Dict]: + """ + Generate a list of random students with CGPA and hostler status. + + Args: + num_students (int): Number of students to generate. + + Returns: + List[Dict]: List of student dictionaries. + """ + + return [ + { + 'ID': i, + 'CGPA': round(random.uniform(6.0, 9.8), 2), + 'Hostler': random.choice([True, False]) + } + for i in range(1, num_students + 1) + ] + + +if __name__ == "__main__": + # Initialize constants and scorer + scorer = StudentScorer() + students = generate_students(num_students=500) + + # Calculate the dynamic CGPA threshold + cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold(students, top_percentage=30) + print(f"Dynamic CGPA Threshold (Top 30%): {cgpa_threshold}") + + # Assign conditions and scores + scorer.assign_dynamic_conditions(cgpa_threshold) + students_with_scores = scorer.assign_scores_to_students(students) + + # Divide students into sections + sections = scorer.divide_students_into_sections(students_with_scores, Defaults.class_strength) + + # Display the sections + for i, section in enumerate(sections, 1): + print(f"Section {i} (Total Students: {len(section)}):") + for student in section: + print( + f" Student ID: {student['ID']}, CGPA: {student['CGPA']}, " + f"Hostler: {student['Hostler']}, score: {student['score']}" + ) +>>>>>>> 89e907051dd54e4748a9dd197f4b4cd9d0da4c30 From c7870224728be955b65d0983e2dbfbe5c583d282 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Tue, 25 Feb 2025 18:53:29 +0530 Subject: [PATCH 49/67] v1 stable --- GA/__init__.py | 100 ++++++++++++---------- a.html | 226 +++++++++++++++++++++++++++++++++++++++++++++++++ or-tool.py | 101 ++++++++++++++++++++++ 3 files changed, 381 insertions(+), 46 deletions(-) create mode 100644 a.html create mode 100644 or-tool.py diff --git a/GA/__init__.py b/GA/__init__.py index c316378..758fabb 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -9,6 +9,7 @@ from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection + def update_lab_availability_matrix(initial_lab_matrix, best_timetable, day_map, time_slot_map): """ Iterate over the best chromosome (weekly timetable) and for each lab allocation, @@ -32,25 +33,27 @@ def update_lab_availability_matrix(initial_lab_matrix, best_timetable, day_map, if ts_index is not None: # Adjust index (if lab matrix lists are 0-indexed) updated_lab_matrix[lab][day_index][ts_index - 1] = False + return updated_lab_matrix + def timetable_generation( - teacher_subject_mapping, - total_sections, - total_classrooms, - total_labs, - teacher_preferences, - teacher_weekly_workload, - special_subjects, - labs, - subject_quota_limits, - teacher_duty_days, - teacher_availability_matrix, - lab_availability_matrix, # Initial lab matrix passed in - time_slots, - total_generations, - prev_selected_chromosomes=None, - prev_mutated_chromosomes=None + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + lab_availability_matrix, # Initial lab matrix passed in + time_slots, + total_generations, + prev_selected_chromosomes=None, + prev_mutated_chromosomes=None ): # Create an instance of TimeTableGeneration. timetable_generator = TimeTableGeneration( @@ -124,21 +127,22 @@ def timetable_generation( # We do NOT return the working lab matrix because we want to update the initial matrix. return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes + def run_timetable_generations( - teacher_subject_mapping, - total_sections, - total_classrooms, - total_labs, - teacher_preferences, - teacher_weekly_workload, - special_subjects, - labs, - subject_quota_limits, - teacher_duty_days, - teacher_availability_matrix, - lab_availability_matrix, - total_generations, - time_slots + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + lab_availability_matrix, + total_generations, + time_slots ): prev_selected = None prev_mutated = None @@ -166,23 +170,24 @@ def run_timetable_generations( prev_mutated = mutated return best_chromosome, teacher_availability_matrix, lab_availability_matrix + def run_timetable_generation( - teacher_subject_mapping, - total_sections, - total_classrooms, - total_labs, - teacher_preferences, - teacher_weekly_workload, - special_subjects, - labs, - subject_quota_limits, - teacher_duty_days, - teacher_availability_matrix, - lab_availability_matrix, - total_generations, - time_slots, - day_map, - time_slot_map + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + lab_availability_matrix, + total_generations, + time_slots, + day_map, + time_slot_map ): best_tt, teacher_availability_matrix, lab_availability_matrix = run_timetable_generations( teacher_subject_mapping=teacher_subject_mapping, @@ -210,11 +215,13 @@ def run_timetable_generation( updated_lab_matrix = update_lab_availability_matrix(lab_availability_matrix, best_tt, day_map, time_slot_map) return best_tt, teacher_availability_matrix, updated_lab_matrix + if __name__ == '__main__': from Constants.constant import Defaults from GA.__init__ import run_timetable_generation from Samples.samples import (SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload) + lab_availability_matrix = { "L1": [[True] * 7 for _ in range(5)], "L2": [[True] * 7 for _ in range(5)], @@ -268,4 +275,5 @@ def run_timetable_generation( } ) from icecream import ic + ic(best, correct_teacher_availability_matrix, correct_lab_availability_matrix) diff --git a/a.html b/a.html new file mode 100644 index 0000000..c58b358 --- /dev/null +++ b/a.html @@ -0,0 +1,226 @@ + + + + + + Placement Resources, GEHU + + + + +
+

Placement Resources, GEHU

+ +
+ +
+

Data Structures and Algorithms

+

Hello! I am a placement teacher, and this website is designed to help you prepare for placements. Explore the resources, check placement dates, and feel free to reach out if you have any questions.

+
+ +
+

Study Resources

+ +
+ +
+

Upcoming Placement Dates

+ + + + + + + + + + + + + + + + + + + + + +
CompanyDate
Company AOctober 15, 2023
Company BNovember 1, 2023
Company CNovember 15, 2023
+
+ +
+

Contact Me

+

If you have any questions, feel free to reach out:

+ +
+
+

Data Structures and Algorithms

+

Hello! I am a placement teacher, and this website is designed to help you prepare for placements. Explore the resources, check placement dates, and feel free to reach out if you have any questions.

+
+
+

Data Structures and Algorithms

+

Hello! I am a placement teacher, and this website is designed to help you prepare for placements. Explore the resources, check placement dates, and feel free to reach out if you have any questions.

+
+
+

Data Structures and Algorithms

+

Hello! I am a placement teacher, and this website is designed to help you prepare for placements. Explore the resources, check placement dates, and feel free to reach out if you have any questions.

+
+
+

Data Structures and Algorithms

+

Hello! I am a placement teacher, and this website is designed to help you prepare for placements. Explore the resources, check placement dates, and feel free to reach out if you have any questions.

+
+
+

Data Structures and Algorithms

+

Hello! I am a placement teacher, and this website is designed to help you prepare for placements. Explore the resources, check placement dates, and feel free to reach out if you have any questions.

+
+
+

Data Structures and Algorithms

+

Hello! I am a placement teacher, and this website is designed to help you prepare for placements. Explore the resources, check placement dates, and feel free to reach out if you have any questions.

+
+
+

© 2025 All rights reserved. GEHU, Bhimtal

+
+ + \ No newline at end of file diff --git a/or-tool.py b/or-tool.py new file mode 100644 index 0000000..2612c4c --- /dev/null +++ b/or-tool.py @@ -0,0 +1,101 @@ +from ortools.sat.python import cp_model +import random + +days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] +periods = ["9:00 - 9:55", "9:55 - 10:50", "11:10 - 12:05", "12:05 - 1:00", "1:20 - 2:15", "2:15 - 3:10", "3:30 - 4:25"] +sections = ['A','B','C','D'] +rooms = [ + ('R2', 100, 'regular'), + ('R3', 100, 'regular'), + ('R4', 100, 'regular'), + ('R5', 100, 'regular'), + ('L1', 30, 'lab'), + ('L2', 30, 'lab'), + ('L3', 30, 'lab'), + ('L4', 30, 'lab'), + ('L5', 30, 'lab'), + ('L6', 30, 'lab') +] +# Sample subjects and teachers. +subjects = ['TCS-509','TCS-503','TCS-502','TCS-531','TMA-502','PCS-503','PCS-506','CSP-501','XCS-501','SCS-501','PMA-502','Placement_Class','Library'] +teachers = ['HP18','AC05','JM12','RS11','DT20','AB17','DP07','AA04','AB01','SS03','SP06','NJ13','PA21','AK23','RD09','PM14','AK26','AA15','None'] + +# For demonstration we create a list of events. +# Each event has a fixed day, section, period, subject, teacher and group. +# Group 'all' (≈60 students) requires a regular room (capacity ≥60) +# Numeric group (e.g. 1 or 2, ≈30 students) requires a lab (capacity ≥30) +events = [] +for d in days: + for s in sections: + for p in range(len(periods)): + subj = random.choice(subjects) + teach = random.choice(teachers) + group = random.choice(['all', 1, 2]) + events.append({ + 'day': d, + 'section': s, + 'period': p, + 'subject': subj, + 'teacher': teach, + 'group': group + }) + +model = cp_model.CpModel() +vars_rooms = [] +for i, ev in enumerate(events): + allowed = [] + for r_idx, (rname, cap, rtype) in enumerate(rooms): + if ev['group'] == 'all': + if rtype == 'regular' and cap >= 60: + allowed.append(r_idx) + else: + if rtype == 'lab' and cap >= 30: + allowed.append(r_idx) + if not allowed: + allowed = list(range(len(rooms))) + v = model.NewIntVarFromDomain(cp_model.Domain.FromValues(allowed), f'room_{i}') + vars_rooms.append(v) + +# No two events in the same day and period can share a room. +for d in days: + for p in range(len(periods)): + idxs = [i for i, ev in enumerate(events) if ev['day'] == d and ev['period'] == p] + if len(idxs) > 1: + model.AddAllDifferent([vars_rooms[i] for i in idxs]) + +# For teacher conflicts (ignoring 'None'). +for d in days: + for p in range(len(periods)): + teach_to_ids = {} + for i, ev in enumerate(events): + if ev['day'] == d and ev['period'] == p and ev['teacher'] != 'None': + teach_to_ids.setdefault(ev['teacher'], []).append(i) + for ids in teach_to_ids.values(): + if len(ids) > 1: + # If a teacher is scheduled twice at the same time, the model becomes infeasible. + # In practice, input data should avoid such conflicts. + model.AddAllDifferent([vars_rooms[i] for i in ids]) + +solver = cp_model.CpSolver() +status = solver.Solve(model) + +schedule = {} +if status in (cp_model.FEASIBLE, cp_model.OPTIMAL): + for ev, var in zip(events, vars_rooms): + room_id = rooms[solver.Value(var)][0] + d, s, p = ev['day'], ev['section'], ev['period'] + schedule.setdefault(d, {}).setdefault(s, []).append({ + 'classroom_id': room_id, + 'group': ev['group'], + 'subject_id': ev['subject'], + 'teacher_id': ev['teacher'], + 'time_slot': periods[p] + }) + for d in schedule: + for s in schedule[d]: + schedule[d][s].sort(key=lambda x: periods.index(x['time_slot'])) + from icecream import ic + ic(schedule) + +else: + print("No solution found.") From 978adcf422282411f3f8ff0f50e9fc87d979cc9c Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 1 Mar 2025 06:54:36 +0530 Subject: [PATCH 50/67] refactor with system design --- Constants/constant.py | 5 +- Constants/helper_routines.py | 12 -- Constants/utils.py | 1 - GA/__init__.py | 380 ++++++++++++++--------------------- GA/chromosome.py | 217 ++++++++++---------- GA/fitness.py | 8 +- GA/mutation.py | 88 ++------ GA/selection.py | 21 +- __init__.py | 2 +- a.html => resources.html | 0 10 files changed, 288 insertions(+), 446 deletions(-) delete mode 100644 Constants/utils.py rename a.html => resources.html (100%) diff --git a/Constants/constant.py b/Constants/constant.py index 1ed2ddb..bbb35a5 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -4,10 +4,11 @@ class Defaults: working_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] starting_section_fitness = 1000 max_class_capacity = 250 - initial_no_of_chromosomes = 10 - total_no_of_generations = 10 + initial_no_of_chromosomes = 1000 + total_no_of_generations = 100 class_strength = 50 + class SubjectWeeklyQuota: def __init__(self, subject_quota): self.subject_quota = subject_quota diff --git a/Constants/helper_routines.py b/Constants/helper_routines.py index 6613313..384639a 100644 --- a/Constants/helper_routines.py +++ b/Constants/helper_routines.py @@ -7,10 +7,6 @@ def update_teacher_availability_matrix(teacher_availability_matrix, best_chromos def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map, time_slot_map): - """ - Set teacher_availability_matrix[teacher_id][day_index][slot_index] = False - for every (day, slot) where teacher_id != 'None' in the best chromosome. - """ for day_name, section_dict in best_chromosome.items(): if day_name not in day_map: @@ -35,14 +31,6 @@ def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map def initialize_teacher_availability(teacher_list, num_days=5, num_slots=7): - """ - Creates a dynamic teacher availability matrix. - - :param teacher_list: List of teacher IDs. - :param num_days: Number of working days (default: 5 for Mon-Fri). - :param num_slots: Number of slots per day (default: 7 per day). - :return: Dictionary mapping teacher IDs to a 2D availability matrix. - """ return { teacher: [[True] * num_slots for _ in range(num_days)] diff --git a/Constants/utils.py b/Constants/utils.py deleted file mode 100644 index 8b13789..0000000 --- a/Constants/utils.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/GA/__init__.py b/GA/__init__.py index 758fabb..c45a62e 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,4 +1,5 @@ import copy +from dataclasses import dataclass from Constants.helper_routines import ( initialize_teacher_availability, update_matrix_for_best, @@ -10,252 +11,170 @@ from GA.selection import TimeTableSelection -def update_lab_availability_matrix(initial_lab_matrix, best_timetable, day_map, time_slot_map): - """ - Iterate over the best chromosome (weekly timetable) and for each lab allocation, - mark the corresponding slot as False in a deep copy of the initial lab matrix. - """ - updated_lab_matrix = copy.deepcopy(initial_lab_matrix) - # best_timetable is a dict keyed by weekday (e.g., 'Monday', 'Tuesday', etc.) - for weekday, daily_schedule in best_timetable.items(): - # Convert weekday to day index using day_map - day_index = day_map.get(weekday) - if day_index is None: - continue - # daily_schedule is a dict: keys = section names, values = list of allocations - for section, allocations in daily_schedule.items(): - for alloc in allocations: - lab = alloc.get("classroom_id") - # Only update if the classroom_id is one of the labs - if lab in updated_lab_matrix: - time_slot_str = alloc.get("time_slot") - ts_index = time_slot_map.get(time_slot_str) - if ts_index is not None: - # Adjust index (if lab matrix lists are 0-indexed) - updated_lab_matrix[lab][day_index][ts_index - 1] = False - - return updated_lab_matrix - - -def timetable_generation( - teacher_subject_mapping, - total_sections, - total_classrooms, - total_labs, - teacher_preferences, - teacher_weekly_workload, - special_subjects, - labs, - subject_quota_limits, - teacher_duty_days, - teacher_availability_matrix, - lab_availability_matrix, # Initial lab matrix passed in - time_slots, - total_generations, - prev_selected_chromosomes=None, - prev_mutated_chromosomes=None -): - # Create an instance of TimeTableGeneration. - timetable_generator = TimeTableGeneration( - teacher_subject_mapping=teacher_subject_mapping, - total_sections=total_sections, - total_classrooms=total_classrooms, - total_labs=total_labs, - teacher_preferences=teacher_preferences, - teacher_weekly_workload=teacher_weekly_workload, - special_subjects=special_subjects, - labs=labs, - subject_quota_limits=subject_quota_limits, - teacher_duty_days=teacher_duty_days, - teacher_availability_matrix=teacher_availability_matrix, - lab_availability_matrix=lab_availability_matrix, - time_slots=time_slots - ) - - timetable, teacher_availability_matrix, _ = timetable_generator.create_timetable(total_generations) - - fitness_calculator = TimetableFitnessEvaluator( - timetable=timetable, - all_sections=list(timetable_generator.sections_manager.keys()), - subject_teacher_mapping=timetable_generator.subject_teacher_mapping, - available_classrooms=list(timetable_generator.classrooms_manager.keys()), - available_labs=list(timetable_generator.lab_capacity_manager.keys()), - classroom_capacity=timetable_generator.classrooms_manager, - section_student_strength=timetable_generator.sections_manager, - subject_quota_data=timetable_generator.subject_quota_limits, - teacher_time_preferences=timetable_generator.teacher_availability_preferences, - teacher_daily_workload=timetable_generator.weekly_workload, - time_slots=time_slots - ) - fitness_scores = fitness_calculator.evaluate_timetable_fitness() - - selection_object = TimeTableSelection() - selected_chromosomes = selection_object.select_chromosomes(fitness_scores[1]) - if prev_selected_chromosomes: - selected_chromosomes.update(prev_selected_chromosomes) - - crossover_object = TimeTableCrossOver() - crossover_chromosomes = [] - selected_keys = list(selected_chromosomes.keys()) - for i in range(0, len(selected_keys), 2): - if i + 1 < len(selected_keys): - parent1 = selected_keys[i] - parent2 = selected_keys[i + 1] - c1, c2 = crossover_object.perform_crossover(timetable[parent1], timetable[parent2]) - crossover_chromosomes.extend([c1, c2]) - - mutation_object = TimeTableMutation() - mutated_chromosomes = [mutation_object.mutate_schedule_for_week(ch) for ch in crossover_chromosomes] - if prev_mutated_chromosomes: - mutated_chromosomes.extend(prev_mutated_chromosomes) - - best_chromosome_score = -1 - best_chromosome = None - for w_no, w_score in selected_chromosomes.items(): - score = int(w_score) - if score > best_chromosome_score and w_no in timetable: - best_chromosome_score = score - best_chromosome = timetable[w_no] - - if best_chromosome: - teacher_availability_matrix = update_teacher_availability_matrix( - teacher_availability_matrix, - best_chromosome +@dataclass +class TimetableConfig: + teacher_subject_mapping: dict + total_sections: dict + total_classrooms: dict + total_labs: dict + teacher_preferences: dict + teacher_weekly_workload: dict + special_subjects: dict + labs: dict + subject_quota_limits: dict + teacher_duty_days: dict + teacher_availability_matrix: dict + lab_availability_matrix: dict + total_generations: int + time_slots: dict + day_map: dict + time_slot_map: dict + prev_selected: dict = None + prev_mutated: list = None + + +class TimetableEngine: + def __init__(self, config: TimetableConfig): + self.config = config + self.teacher_availability = copy.deepcopy(config.teacher_availability_matrix) + self.lab_availability = copy.deepcopy(config.lab_availability_matrix) + + def _update_lab_availability(self, best_timetable): + updated_lab = copy.deepcopy(self.config.lab_availability_matrix) + for weekday, daily_schedule in best_timetable.items(): + day_index = self.config.day_map.get(weekday) + if day_index is None: + continue + for allocations in daily_schedule.values(): + for alloc in allocations: + lab = alloc.get("classroom_id") + ts_index = self.config.time_slot_map.get(alloc.get("time_slot")) + if lab in updated_lab and ts_index is not None: + updated_lab[lab][day_index][ts_index - 1] = False + return updated_lab + + def _generate_timetable(self, teacher_matrix): + tg = TimeTableGeneration( + teacher_subject_mapping=self.config.teacher_subject_mapping, + total_sections=self.config.total_sections, + total_classrooms=self.config.total_classrooms, + total_labs=self.config.total_labs, + teacher_preferences=self.config.teacher_preferences, + teacher_weekly_workload=self.config.teacher_weekly_workload, + special_subjects=self.config.special_subjects, + labs=self.config.labs, + subject_quota_limits=self.config.subject_quota_limits, + teacher_duty_days=self.config.teacher_duty_days, + teacher_availability_matrix=teacher_matrix, + lab_availability_matrix=self.lab_availability, + time_slots=self.config.time_slots ) - - # Return the best chromosome and the teacher matrix. - # We do NOT return the working lab matrix because we want to update the initial matrix. - return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes - - -def run_timetable_generations( - teacher_subject_mapping, - total_sections, - total_classrooms, - total_labs, - teacher_preferences, - teacher_weekly_workload, - special_subjects, - labs, - subject_quota_limits, - teacher_duty_days, - teacher_availability_matrix, - lab_availability_matrix, - total_generations, - time_slots -): - prev_selected = None - prev_mutated = None - best_chromosome = None - for _ in range(total_generations): - best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( - teacher_subject_mapping=teacher_subject_mapping, - total_sections=total_sections, - total_classrooms=total_classrooms, - total_labs=total_labs, - teacher_preferences=teacher_preferences, - teacher_weekly_workload=teacher_weekly_workload, - special_subjects=special_subjects, - labs=labs, - subject_quota_limits=subject_quota_limits, - teacher_duty_days=teacher_duty_days, - teacher_availability_matrix=teacher_availability_matrix, - lab_availability_matrix=lab_availability_matrix, - time_slots=time_slots, - prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated, - total_generations=total_generations + timetable, updated_teacher = tg.create_timetable(self.config.total_generations)[:2] + fitness = TimetableFitnessEvaluator( + timetable=timetable, + all_sections=list(tg.sections_manager.keys()), + subject_teacher_mapping=tg.subject_teacher_mapping, + available_classrooms=list(tg.classrooms_manager.keys()), + available_labs=list(tg.lab_capacity_manager.keys()), + classroom_capacity=tg.classrooms_manager, + section_student_strength=tg.sections_manager, + subject_quota_data=tg.subject_quota_limits, + teacher_time_preferences=tg.teacher_availability_preferences, + teacher_daily_workload=tg.weekly_workload, + time_slots=self.config.time_slots + ).evaluate_timetable_fitness() + + selected = TimeTableSelection().select_chromosomes(fitness[1]) + if self.config.prev_selected: + selected.update(self.config.prev_selected) + + crossover = TimeTableCrossOver() + crossover_chromosomes = [] + selected_keys = list(selected.keys()) + for i in range(0, len(selected_keys), 2): + if i + 1 < len(selected_keys): + c1, c2 = crossover.perform_crossover(timetable[selected_keys[i]], timetable[selected_keys[i + 1]]) + crossover_chromosomes.extend([c1, c2]) + + mutated = [TimeTableMutation().mutate_schedule_for_week(ch) for ch in crossover_chromosomes] + if self.config.prev_mutated: + mutated.extend(self.config.prev_mutated) + + best_chromosome, best_score = None, -1 + for key, score in selected.items(): + score = int(score) + if score > best_score and key in timetable: + best_score = score + best_chromosome = timetable[key] + + if best_chromosome: + updated_teacher = update_teacher_availability_matrix(teacher_matrix, best_chromosome) + return best_chromosome, updated_teacher, selected, mutated + + def run(self): + initial_teacher = copy.deepcopy(self.teacher_availability) + updated_teacher = copy.deepcopy(initial_teacher) + best_chromosome = None + self.config.prev_selected = None + self.config.prev_mutated = None + + for _ in range(self.config.total_generations): + teacher_copy = copy.deepcopy(initial_teacher) + best, updated_teacher, selected, mutated = self._generate_timetable(teacher_copy) + best_chromosome = best + self.config.prev_selected = selected + self.config.prev_mutated = mutated + + updated_teacher = update_matrix_for_best( + best_chromosome, updated_teacher, self.config.day_map, self.config.time_slot_map ) - prev_selected = selected - prev_mutated = mutated - return best_chromosome, teacher_availability_matrix, lab_availability_matrix - - -def run_timetable_generation( - teacher_subject_mapping, - total_sections, - total_classrooms, - total_labs, - teacher_preferences, - teacher_weekly_workload, - special_subjects, - labs, - subject_quota_limits, - teacher_duty_days, - teacher_availability_matrix, - lab_availability_matrix, - total_generations, - time_slots, - day_map, - time_slot_map -): - best_tt, teacher_availability_matrix, lab_availability_matrix = run_timetable_generations( - teacher_subject_mapping=teacher_subject_mapping, - total_sections=total_sections, - total_classrooms=total_classrooms, - total_labs=total_labs, - teacher_preferences=teacher_preferences, - teacher_weekly_workload=teacher_weekly_workload, - special_subjects=special_subjects, - labs=labs, - subject_quota_limits=subject_quota_limits, - teacher_duty_days=teacher_duty_days, - teacher_availability_matrix=teacher_availability_matrix, - lab_availability_matrix=lab_availability_matrix, - total_generations=total_generations, - time_slots=time_slots - ) - teacher_availability_matrix = update_matrix_for_best( - best_tt, - teacher_availability_matrix, - day_map, - time_slot_map - ) - # Update the INITIAL lab matrix based solely on the best chromosome's lab allocations. - updated_lab_matrix = update_lab_availability_matrix(lab_availability_matrix, best_tt, day_map, time_slot_map) - return best_tt, teacher_availability_matrix, updated_lab_matrix + updated_lab = self._update_lab_availability(best_chromosome) + return best_chromosome, updated_teacher, updated_lab if __name__ == '__main__': from Constants.constant import Defaults - from GA.__init__ import run_timetable_generation - from Samples.samples import (SpecialSubjects, SubjectTeacherMap, - SubjectWeeklyQuota, TeacherWorkload) + from Samples.samples import SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload - lab_availability_matrix = { + lab_matrix = { "L1": [[True] * 7 for _ in range(5)], "L2": [[True] * 7 for _ in range(5)], "L3": [[True] * 7 for _ in range(5)], "L4": [[True] * 7 for _ in range(5)], "L5": [[True] * 7 for _ in range(5)], - "L6": [[True] * 7 for _ in range(5)], + "L6": [[True] * 7 for _ in range(5)] } - best, correct_teacher_availability_matrix, correct_lab_availability_matrix = run_timetable_generation( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, - total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, - total_labs={"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - labs=SpecialSubjects.Labs, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - teacher_availability_matrix=initialize_teacher_availability( - TeacherWorkload.Weekly_workLoad.keys(), 5, 7 - ), - lab_availability_matrix=lab_availability_matrix, - total_generations=Defaults.total_no_of_generations, - time_slots={ + + teacher_availability = initialize_teacher_availability( + TeacherWorkload.Weekly_workLoad.keys(), + 5, + 7 + ) + + config = TimetableConfig( + teacher_subject_mapping = SubjectTeacherMap.subject_teacher_map, + total_sections = {"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs = {"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, + teacher_preferences = TeacherWorkload.teacher_preferences, + teacher_weekly_workload = TeacherWorkload.Weekly_workLoad, + special_subjects = SpecialSubjects.special_subjects, + labs = SpecialSubjects.Labs, + subject_quota_limits = SubjectWeeklyQuota.subject_quota, + teacher_duty_days = TeacherWorkload.teacher_duty_days, + teacher_availability_matrix = teacher_availability, + lab_availability_matrix = lab_matrix, + total_generations = Defaults.total_no_of_generations, + time_slots = { 1: "9:00 - 9:55", 2: "9:55 - 10:50", 3: "11:10 - 12:05", 4: "12:05 - 1:00", 5: "1:20 - 2:15", 6: "2:15 - 3:10", - 7: "3:30 - 4:25", + 7: "3:30 - 4:25" }, - day_map={ + day_map = { "Monday": 0, "Tuesday": 1, "Wednesday": 2, @@ -264,7 +183,7 @@ def run_timetable_generation( "Saturday": 5, "Sunday": 6 }, - time_slot_map={ + time_slot_map = { "9:00 - 9:55": 1, "9:55 - 10:50": 2, "11:10 - 12:05": 3, @@ -274,6 +193,9 @@ def run_timetable_generation( "3:30 - 4:25": 7 } ) - from icecream import ic - ic(best, correct_teacher_availability_matrix, correct_lab_availability_matrix) + engine = TimetableEngine(config) + best_tt, final_teacher, final_lab = engine.run() + + from icecream import ic + ic(best_tt, final_teacher, final_lab) diff --git a/GA/chromosome.py b/GA/chromosome.py index 8015c1e..7c54bf6 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -3,6 +3,7 @@ from math import ceil from Constants.constant import Defaults + class TimeTableGeneration: def __init__( self, @@ -17,7 +18,7 @@ def __init__( subject_quota_limits: dict, teacher_duty_days: dict, teacher_availability_matrix: dict, - lab_availability_matrix: dict, # New parameter + lab_availability_matrix: dict, time_slots: dict, ): self.sections_manager = total_sections @@ -32,16 +33,13 @@ def __init__( self.available_time_slots = time_slots self.teacher_duty_days = teacher_duty_days self.weekly_workload = teacher_weekly_workload - self.teacher_assignment_tracker = teacher_subject_mapping self.teacher_availability_matrix = teacher_availability_matrix - - # Save the original lab matrix so that each generation starts fresh. self.initial_lab_availability_matrix = copy.deepcopy(lab_availability_matrix) self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) - self._map_sections_to_classrooms() - def _map_sections_to_classrooms(self): + + def _map_sections_to_classrooms(self) -> dict: sorted_classrooms = sorted( self.classrooms_manager.items(), key=lambda x: x[1], reverse=True ) @@ -57,39 +55,51 @@ def _map_sections_to_classrooms(self): break return self.section_to_classroom_map + + def _initialize_teacher_workload_tracker(self) -> dict: + return {teacher: 0 for teacher in self.weekly_workload} + + + def _get_available_subjects(self, section: str, subject_usage_tracker: dict) -> list: + return [ + subject + for subject in self.subject_teacher_mapping + if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) + ] + + def _assign_subject_and_teacher( self, - section, - slot_index, - subjects_scheduled_today, - assigned_classroom, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, - day_index - ): - available_subjects = self._get_available_subjects(section, section_subject_usage_tracker) + section: str, + slot_index: int, + subjects_scheduled_today: set, + assigned_classroom: str, + subject_usage_tracker: dict, + teacher_workload_tracker: dict, + teacher_availability_matrix: dict, + day_index: int, + ) -> tuple: + available_subjects = self._get_available_subjects(section, subject_usage_tracker) random.shuffle(available_subjects) assigned_teacher = None selected_subject = None - assigned_room = assigned_classroom # For non-lab subjects + assigned_room = assigned_classroom for subject in available_subjects: if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: continue if subject not in subjects_scheduled_today: - teachers_for_subject = self.subject_teacher_mapping[subject] + teachers = self.subject_teacher_mapping[subject] preferred_teachers = [ - teacher for teacher in teachers_for_subject - if self.teacher_availability_preferences.get(teacher, []) + t for t in teachers if self.teacher_availability_preferences.get(t, []) ] - sorted_teachers_by_load = sorted(preferred_teachers, - key=lambda t: teacher_workload_tracker[t]) - for teacher in sorted_teachers_by_load: - if (teacher in teacher_availability_matrix and - len(teacher_availability_matrix[teacher]) > day_index and - len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and - teacher_availability_matrix[teacher][day_index][slot_index - 1]): + for teacher in sorted(preferred_teachers, key=lambda t: teacher_workload_tracker[t]): + if ( + teacher in teacher_availability_matrix + and len(teacher_availability_matrix[teacher]) > day_index + and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) + and teacher_availability_matrix[teacher][day_index][slot_index - 1] + ): assigned_teacher = teacher teacher_workload_tracker[teacher] += 1 selected_subject = subject @@ -101,44 +111,35 @@ def _assign_subject_and_teacher( if not assigned_teacher: selected_subject = "Library" assigned_teacher = "None" - assigned_room = assigned_classroom - return assigned_teacher, selected_subject, assigned_room - def _initialize_teacher_workload_tracker(self): - return { - teacher: 0 - for teacher in self.weekly_workload - } - - def _get_available_subjects(self, section, subject_usage_tracker): - return [ - subject - for subject in self.subject_teacher_mapping - if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) - ] - - def _allocate_lab(self, teacher, subject, day_index, slot_index, section_strength): - """ - Always split the section into two groups: - Group sizes: group1 = ceil(section_strength/2), group2 = section_strength - group1. - Try to find two distinct labs with two consecutive free slots. - """ + def _allocate_lab( + self, + teacher: str, + subject: str, + day_index: int, + slot_index: int, + section_strength: int, + ) -> tuple: group1_size = ceil(section_strength / 2) group2_size = section_strength - group1_size labs_list = list(self.lab_availability_matrix.keys()) + for i in range(len(labs_list)): lab1 = labs_list[i] - if (self.lab_availability_matrix[lab1][day_index][slot_index - 1] and - self.lab_availability_matrix[lab1][day_index][slot_index] and - self.lab_capacity_manager.get(lab1, 0) >= group1_size): + if ( + self.lab_availability_matrix[lab1][day_index][slot_index - 1] + and self.lab_availability_matrix[lab1][day_index][slot_index] + and self.lab_capacity_manager.get(lab1, 0) >= group1_size + ): for j in range(i + 1, len(labs_list)): lab2 = labs_list[j] - if (self.lab_availability_matrix[lab2][day_index][slot_index - 1] and - self.lab_availability_matrix[lab2][day_index][slot_index] and - self.lab_capacity_manager.get(lab2, 0) >= group2_size): - # Mark slots as occupied in the working copy + if ( + self.lab_availability_matrix[lab2][day_index][slot_index - 1] + and self.lab_availability_matrix[lab2][day_index][slot_index] + and self.lab_capacity_manager.get(lab2, 0) >= group2_size + ): self.lab_availability_matrix[lab1][day_index][slot_index - 1] = False self.lab_availability_matrix[lab1][day_index][slot_index] = False self.lab_availability_matrix[lab2][day_index][slot_index - 1] = False @@ -149,96 +150,88 @@ def _allocate_lab(self, teacher, subject, day_index, slot_index, section_strengt "subject_id": subject, "classroom_id": lab1, "time_slot": self.available_time_slots[slot_index], - "group": 1 + "group": 1, }, { "teacher_id": teacher, "subject_id": subject, "classroom_id": lab1, - "time_slot": self.available_time_slots[slot_index+1], - "group": 1 + "time_slot": self.available_time_slots[slot_index + 1], + "group": 1, }, { "teacher_id": teacher, "subject_id": subject, "classroom_id": lab2, "time_slot": self.available_time_slots[slot_index], - "group": 2 + "group": 2, }, { "teacher_id": teacher, "subject_id": subject, "classroom_id": lab2, - "time_slot": self.available_time_slots[slot_index+1], - "group": 2 + "time_slot": self.available_time_slots[slot_index + 1], + "group": 2, }, ] - return entries, slot_index + 2 - # Fallback: if no pair found, return a merged allocation. merged_entry = { "teacher_id": teacher, "subject_id": subject, "classroom_id": "merged_lab", "time_slot": self.available_time_slots[slot_index], "group": "merged", - "flagged": False + "flagged": False, } - return [merged_entry], slot_index + 1 def _generate_section_schedule( self, - section, - half_day_sections, - section_subject_usage_tracker, - teacher_workload_tracker, - teacher_availability_matrix, + section: str, + half_day_sections: list, + subject_usage_tracker: dict, + teacher_workload_tracker: dict, + teacher_availability_matrix: dict, day_index: int, section_strength: int, - labs_capacity: dict, - ): + ) -> tuple: schedule = [] - subjects_scheduled_today = set() + subjects_scheduled = set() assigned_classroom = self.section_to_classroom_map[section] total_slots = 4 if section in half_day_sections else 7 slot_index = 1 while slot_index <= total_slots: - time_slot = self.available_time_slots[slot_index] teacher, subject, room = self._assign_subject_and_teacher( section, slot_index, - subjects_scheduled_today, + subjects_scheduled, assigned_classroom, - section_subject_usage_tracker, + subject_usage_tracker, teacher_workload_tracker, teacher_availability_matrix, day_index, ) + time_slot = self.available_time_slots[slot_index] if subject in self.lab_subject_list or subject == "Placement_Class": - # For lab subjects, require two consecutive slots. if slot_index <= total_slots - 1: - lab_entries, new_slot_index = self._allocate_lab( + lab_entries, slot_index = self._allocate_lab( teacher, subject, day_index, slot_index, section_strength ) schedule.extend(lab_entries) - section_subject_usage_tracker[section][subject] += len(lab_entries) - slot_index = new_slot_index - + subject_usage_tracker[section][subject] += len(lab_entries) else: schedule.append({ "teacher_id": teacher, "subject_id": subject, "classroom_id": assigned_classroom, "time_slot": time_slot, - "group": "fallback" + "group": "fallback", }) - section_subject_usage_tracker[section][subject] += 1 + subject_usage_tracker[section][subject] += 1 slot_index += 1 - else: schedule.append({ "teacher_id": teacher, @@ -248,61 +241,57 @@ def _generate_section_schedule( "group": "all", }) if subject != "Library": - section_subject_usage_tracker[section][subject] += 1 + subject_usage_tracker[section][subject] += 1 slot_index += 1 return schedule, teacher_availability_matrix + def generate_daily_schedule( self, - section_list, - half_day_sections, - section_subject_usage_tracker, - day_index - ): + sections: list, + half_day_sections: list, + subject_usage_tracker: dict, + day_index: int, + ) -> tuple: daily_schedule = {} - teacher_workload_tracker = self._initialize_teacher_workload_tracker() - for section in section_list: + teacher_workload = self._initialize_teacher_workload_tracker() + for section in sections: section_strength = self.sections_manager[section] - labs_capacity = self.lab_capacity_manager - section_schedule, self.teacher_availability_matrix = self._generate_section_schedule( + schedule, self.teacher_availability_matrix = self._generate_section_schedule( section, half_day_sections, - section_subject_usage_tracker, - teacher_workload_tracker, + subject_usage_tracker, + teacher_workload, self.teacher_availability_matrix, day_index, section_strength, - labs_capacity ) - daily_schedule[section] = section_schedule + daily_schedule[section] = schedule + return daily_schedule, subject_usage_tracker, self.teacher_availability_matrix - return daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix - def _generate_weekly_schedule(self): + def _generate_weekly_schedule(self) -> tuple: weekly_schedule = {} - section_subject_usage_tracker = { + subject_usage = { section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} for section in self.sections_manager.keys() } - - section_list = list(self.sections_manager.keys()) + sections = list(self.sections_manager.keys()) for day_index, weekday in enumerate(self.weekdays): - random.shuffle(section_list) - half_day_sections = section_list[: len(section_list) // 2] - daily_schedule, section_subject_usage_tracker, self.teacher_availability_matrix = self.generate_daily_schedule( - section_list, half_day_sections, section_subject_usage_tracker, day_index + random.shuffle(sections) + half_day = sections[: len(sections) // 2] + daily_sched, subject_usage, self.teacher_availability_matrix = self.generate_daily_schedule( + sections, half_day, subject_usage, day_index ) - weekly_schedule[weekday] = daily_schedule + weekly_schedule[weekday] = daily_sched + return weekly_schedule, subject_usage, self.teacher_availability_matrix - return weekly_schedule, section_subject_usage_tracker, self.teacher_availability_matrix - def create_timetable(self, num_weeks): + def create_timetable(self, num_weeks: int) -> tuple: timetable = {} - # Reset lab matrix to initial state for each timetable generation. - for week_number in range(1, num_weeks + 1): + for week in range(1, num_weeks + 1): self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) weekly_schedule, _, self.teacher_availability_matrix = self._generate_weekly_schedule() - timetable[f"Week {week_number}"] = weekly_schedule - + timetable[f"Week {week}"] = weekly_schedule return timetable, self.teacher_availability_matrix, self.lab_availability_matrix diff --git a/GA/fitness.py b/GA/fitness.py index eab2f77..ab3aa1e 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -2,8 +2,12 @@ from Constants.constant import Defaults, PenaltyConstants from GA.chromosome import TimeTableGeneration -from Samples.samples import (SpecialSubjects, SubjectTeacherMap, - SubjectWeeklyQuota, TeacherWorkload) +from Samples.samples import ( + SpecialSubjects, + SubjectTeacherMap, + SubjectWeeklyQuota, + TeacherWorkload +) class TimetableFitnessEvaluator: diff --git a/GA/mutation.py b/GA/mutation.py index 8b3ac15..9810bb5 100644 --- a/GA/mutation.py +++ b/GA/mutation.py @@ -1,88 +1,40 @@ import copy import random - from Constants.constant import Defaults class TimeTableMutation: - def __init__(self, mutation_rate = 0.7): - """ - Initializes the Mutation class with a specified mutation rate. - - Args: - mutation_rate (float): Fraction (0 to 1) of sections to mutate. - """ - + def __init__(self, mutation_rate=0.7): self.mutation_rate = mutation_rate + def mutate_time_slots_in_section(self, schedule: dict, section: str) -> bool: - def mutate_time_slots_in_section(self, schedule, section): - """ - Mutates the time slots within a particular section by shuffling them. - - Args: - schedule (dict): The schedule containing sections and their data. - section (str): The section in which mutation should occur. - - Returns: - bool: True if mutation was performed, False otherwise. - """ - - if section in schedule: - section_list = schedule[section] - - if len(section_list) < 2: # Not enough time slots to shuffle - return False - - time_slots = [entry["time_slot"] for entry in section_list] - random.shuffle(time_slots) - - for i, entry in enumerate(section_list): - entry["time_slot"] = time_slots[i] + if section not in schedule or len(schedule[section]) < 2: + return False - return True - return False + section_slots = schedule[section] + time_slots = [entry["time_slot"] for entry in section_slots] + random.shuffle(time_slots) + for i, entry in enumerate(section_slots): + entry["time_slot"] = time_slots[i] + return True + def mutate_schedule_for_week(self, weekly_schedule: dict) -> dict: - def mutate_schedule_for_week(self, weekly_schedule): - """ - Mutates the time slots for all weekdays in the weekly schedule. - - Args: - weekly_schedule (dict): The weekly schedule containing days, sections, and data. - - Returns: - dict: The mutated weekly schedule. - """ - - # Create a deep copy to keep the original intact - mutated_weekly_schedule = copy.deepcopy(weekly_schedule) - - for day, day_schedule in mutated_weekly_schedule.items(): - # Calculate the number of sections to mutate - total_sections = list(day_schedule.keys()) - num_to_mutate = max(1, int(self.mutation_rate * len(total_sections))) - - # Randomly select sections to mutate - sections_to_mutate = random.sample(total_sections, num_to_mutate) + mutated_schedule = copy.deepcopy(weekly_schedule) + for day, day_schedule in mutated_schedule.items(): + sections = list(day_schedule.keys()) + num_to_mutate = max(1, int(self.mutation_rate * len(sections))) + sections_to_mutate = random.sample(sections, num_to_mutate) for section in sections_to_mutate: self.mutate_time_slots_in_section(day_schedule, section) - - return mutated_weekly_schedule + return mutated_schedule class TimeTableCrossOver: - def perform_crossover(self, timetable1: dict, timetable2: dict): - """ - Crossovers two timetables. - Rule1: Swap the entire day TT. - """ + def perform_crossover(self, timetable1: dict, timetable2: dict) -> tuple: - crossover_days = Defaults.working_days - - # Perform the crossover between week1 and week2 - for day in crossover_days: - if day in (timetable1, timetable2): + for day in Defaults.working_days: + if day in timetable1 and day in timetable2: timetable1[day], timetable2[day] = timetable2[day], timetable1[day] - return timetable1, timetable2 diff --git a/GA/selection.py b/GA/selection.py index ac254ea..7431ce3 100644 --- a/GA/selection.py +++ b/GA/selection.py @@ -14,7 +14,7 @@ def select_chromosomes( ): """ Entry point for selecting chromosomes. - Select chromosomes based on top scores and roulette wheel selection. + Select chromosomes based on top scores and roulette-wheel selection. """ if not weekly_fitness_scores: @@ -54,7 +54,7 @@ def calculate_cumulative_probabilities(scores): @staticmethod def perform_roulette_selection(cumulative_probabilities, total_fitness, num_select): """ - Perform roulette wheel selection to choose items. + Perform roulette-wheel selection to choose items. """ selected_items = [] @@ -70,7 +70,7 @@ def perform_roulette_selection(cumulative_probabilities, total_fitness, num_sele def roulette_wheel_selection(self, scores, num_select): """ - Select items using roulette wheel selection. + Select items using roulette-wheel selection. """ if not scores: @@ -87,21 +87,8 @@ def roulette_wheel_selection(self, scores, num_select): @staticmethod def get_top_and_remaining_items(scores, percentage): - """ - Select the top percentage of items based on scores and return the remaining items. - - Args: - scores (dict): A dictionary of items with their scores. - percentage (float): The percentage of top items to select. - - Returns: - tuple: A tuple of two dictionaries: - - Top-selected items and their scores. - - Remaining items and their scores. - """ - # at least 1 chromosome to select. - num_select = max(1, int(len(scores) * percentage)) + num_select = max(1, int(len(scores) * percentage)) # at least 1 chromosome to select. sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) top_selected = dict(sorted_scores[:num_select]) remaining_items = dict(sorted_scores[num_select:]) diff --git a/__init__.py b/__init__.py index 6cc02f3..af49d62 100644 --- a/__init__.py +++ b/__init__.py @@ -44,7 +44,7 @@ def timetable_generation( timetable, teacher_availability_matrix = timetable_generator.create_timetable( Defaults.initial_no_of_chromosomes ) - + fitness_calculator = TimetableFitnessEvaluator( timetable, timetable_generator.sections_manager.keys(), diff --git a/a.html b/resources.html similarity index 100% rename from a.html rename to resources.html From 97a89e76f5df2279207855ddda769eadb9ff7130 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 1 Mar 2025 06:56:32 +0530 Subject: [PATCH 51/67] fixup black and isort --- Constants/classroom_allocate.py | 16 +- Constants/constant.py | 13 +- Constants/helper_routines.py | 11 +- Constants/is_conflict_new.py | 2 +- Constants/section_allocation.py | 52 +- Constants/teachers_tt.py | 54 +- Constants/time_intervals.py | 1 - GA/__init__.py | 89 +- GA/chromosome.py | 115 +- GA/fitness.py | 57 +- GA/mutation.py | 4 +- GA/selection.py | 45 +- Samples/Adhocs/common.py | 16 +- Samples/Fitness_Files/LabConstraints.py | 34 +- Samples/Fitness_Files/fitness.py | 60 +- Samples/Mutation_Files/crossover.py | 156 +- Samples/Mutation_Files/mutation.py | 236 +- Samples/Mutation_Files/mutation2.py | 170 +- Samples/Selection_Files/algo.py | 68 +- Samples/Selection_Files/selection.py | 80 +- Samples/samples.py | 3151 ++++++++++++----------- __init__.py | 68 +- or-tool.py | 132 +- setup.py | 2 +- test_suite/test_crossover.py | 314 ++- test_suite/test_fitness.py | 240 +- test_suite/test_mutation.py | 168 +- test_suite/test_selection.py | 258 +- visualizer.py | 497 ++-- 29 files changed, 3664 insertions(+), 2445 deletions(-) diff --git a/Constants/classroom_allocate.py b/Constants/classroom_allocate.py index dce45df..5030f56 100644 --- a/Constants/classroom_allocate.py +++ b/Constants/classroom_allocate.py @@ -7,10 +7,10 @@ def assign_section_to_classes(x_section, y_classrooms, z_time_slots): # Decision variables classrooms = [ - model.NewIntVar(0, y_classrooms - 1, f'classroom_{i}') for i in range(x_section) + model.NewIntVar(0, y_classrooms - 1, f"classroom_{i}") for i in range(x_section) ] timeslots = [ - model.NewIntVar(0, z_time_slots - 1, f'timeslot_{i}') for i in range(x_section) + model.NewIntVar(0, z_time_slots - 1, f"timeslot_{i}") for i in range(x_section) ] # Constraints @@ -18,14 +18,13 @@ def assign_section_to_classes(x_section, y_classrooms, z_time_slots): for i in range(x_section): for j in range(i + 1, x_section): # Define a Boolean variable for the condition (timeslots[i] == timeslots[j]) - same_timeslot = model.NewBoolVar(f'same_timeslot_{i}_{j}') + same_timeslot = model.NewBoolVar(f"same_timeslot_{i}_{j}") model.Add(timeslots[i] == timeslots[j]).OnlyEnforceIf(same_timeslot) model.Add(timeslots[i] != timeslots[j]).OnlyEnforceIf(same_timeslot.Not()) # Enforce classroom difference if the timeslot is the same model.Add(classrooms[i] != classrooms[j]).OnlyEnforceIf(same_timeslot) - # Solver solver = cp_model.CpSolver() status = solver.Solve(model) @@ -35,20 +34,23 @@ def assign_section_to_classes(x_section, y_classrooms, z_time_slots): for i in range(x_section): assigned_classroom = solver.Value(classrooms[i]) assigned_timeslot = solver.Value(timeslots[i]) - print(f"Subject {i + 1} -> Classroom {assigned_classroom}, Timeslot {assigned_timeslot}") + print( + f"Subject {i + 1} -> Classroom {assigned_classroom}, Timeslot {assigned_timeslot}" + ) else: print("No feasible solution found.") + from datetime import datetime start_time = datetime.now() X = 80 # Number of section Y = 50 # Number of classrooms -Z = 7 # Number of time slots +Z = 7 # Number of time slots assign_section_to_classes(X, Y, Z) end_time = datetime.now() -print(end_time - start_time) \ No newline at end of file +print(end_time - start_time) diff --git a/Constants/constant.py b/Constants/constant.py index bbb35a5..568bc68 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -1,5 +1,4 @@ class Defaults: - # All the defaults values over GA folder. room_capacity = 60 working_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] starting_section_fitness = 1000 @@ -26,7 +25,9 @@ def __init__(self, teacher_duty_days: dict): class SpecialSubjects: - def __init__(self, special_subjects: list, labs: list, specialization_subjects: list): + def __init__( + self, special_subjects: list, labs: list, specialization_subjects: list + ): self.special_subjects = special_subjects self.labs = labs self.specialization_subjects = specialization_subjects @@ -38,16 +39,16 @@ class PenaltyConstants: PENALTY_OVER_CAPACITY = 25 PENALTY_UN_PREFERRED_SLOT = 5 PENALTY_OVERLOAD_TEACHER = 10 - PENALTY_NON_DUTY_DAY=40 + PENALTY_NON_DUTY_DAY = 40 class SectionsConstants: # Define attribute weights and conditions ATTRIBUTE_WEIGHTS = { - 'good_cgpa': 1, # 2^0 - 'hostler': 2, # 2^1 + "good_cgpa": 1, # 2^0 + "hostler": 2, # 2^1 } ATTRIBUTE_CONDITIONS = { - 'hostler': lambda student: student.get('Hostler', False), + "hostler": lambda student: student.get("Hostler", False), } diff --git a/Constants/helper_routines.py b/Constants/helper_routines.py index 384639a..7b8a685 100644 --- a/Constants/helper_routines.py +++ b/Constants/helper_routines.py @@ -1,13 +1,13 @@ def update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome): - for teacher_id, schedule_data in best_chromosome.items(): if teacher_id in teacher_availability_matrix: teacher_availability_matrix[teacher_id] = schedule_data return teacher_availability_matrix -def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map, time_slot_map): - +def update_matrix_for_best( + best_chromosome, teacher_availability_matrix, day_map, time_slot_map +): for day_name, section_dict in best_chromosome.items(): if day_name not in day_map: continue # or raise an error @@ -25,13 +25,14 @@ def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map slot_index = time_slot_map[time_slot_str] # Now set availability to False - teacher_availability_matrix[teacher_id][day_index][slot_index - 1] = False + teacher_availability_matrix[teacher_id][day_index][ + slot_index - 1 + ] = False return teacher_availability_matrix def initialize_teacher_availability(teacher_list, num_days=5, num_slots=7): - return { teacher: [[True] * num_slots for _ in range(num_days)] for teacher in teacher_list diff --git a/Constants/is_conflict_new.py b/Constants/is_conflict_new.py index c964f12..0433014 100644 --- a/Constants/is_conflict_new.py +++ b/Constants/is_conflict_new.py @@ -1,4 +1,5 @@ import psycopg2 + from Samples.samples import SampleChromosome @@ -39,7 +40,6 @@ def insert_schedule(self, timetable, chromosome_name): for day, sections in timetable.items(): for section, classes in sections.items(): for cls in classes: - print( f"Inserting data: {chromosome_name}, {day}, {section}, {cls['teacher_id']}, {cls['subject_id']}, {cls['classroom_id']}, {cls['time_slot']}" ) diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index 4a454d4..f793f77 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -8,15 +8,18 @@ class StudentScorer: def __init__(self, attribute_weights: Dict[str, int] = None): """ - Initialize the scorer with attribute weights. + Initialize the scorer with attribute weights. - Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. + Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. """ - self.attribute_weights = attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS - + self.attribute_weights = ( + attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS + ) - def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: int = 30) -> float: + def calculate_dynamic_cgpa_threshold( + self, students: List[Dict], top_percentage: int = 30 + ) -> float: """ Calculate the CGPA threshold for the top X% of students. @@ -29,15 +32,11 @@ def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: """ - sorted_cgpas = sorted( - (student['cgpa'] for student in students), - reverse=True - ) + sorted_cgpas = sorted((student["cgpa"] for student in students), reverse=True) threshold_index = max(1, int(len(sorted_cgpas) * top_percentage / 100)) - 1 return sorted_cgpas[threshold_index] - def assign_dynamic_conditions(self, cgpa_threshold: float): """ Assign a dynamic condition for CGPA based on the threshold. @@ -45,8 +44,9 @@ def assign_dynamic_conditions(self, cgpa_threshold: float): Args: cgpa_threshold (float): The CGPA threshold for "good_cgpa". """ - SectionsConstants.ATTRIBUTE_CONDITIONS['good_cgpa'] = lambda student: student['cgpa'] >= cgpa_threshold - + SectionsConstants.ATTRIBUTE_CONDITIONS["good_cgpa"] = ( + lambda student: student["cgpa"] >= cgpa_threshold + ) def calculate_student_score(self, student: Dict) -> int: """ @@ -62,10 +62,11 @@ def calculate_student_score(self, student: Dict) -> int: return sum( weight for attribute, weight in self.attribute_weights.items() - if SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False)(student) + if SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False)( + student + ) ) - def assign_scores_to_students(self, students: List[Dict]) -> List[Dict]: """ Assign scores to all students. @@ -78,11 +79,12 @@ def assign_scores_to_students(self, students: List[Dict]) -> List[Dict]: """ for student in students: - student['score'] = self.calculate_student_score(student) + student["score"] = self.calculate_student_score(student) return students - - def divide_students_into_sections(self, students: List[Dict], class_strength: int) -> List[List[Dict]]: + def divide_students_into_sections( + self, students: List[Dict], class_strength: int + ) -> List[List[Dict]]: """ Divide students into sections based on their scores and class strength. @@ -95,7 +97,7 @@ def divide_students_into_sections(self, students: List[Dict], class_strength: in """ grouped_by_score = defaultdict(list) for student in students: - grouped_by_score[student['score']].append(student) + grouped_by_score[student["score"]].append(student) sections = [] current_section = [] @@ -126,9 +128,9 @@ def generate_students(num_students: int = 500) -> List[Dict]: return [ { - 'ID': i, - 'CGPA': round(random.uniform(6.0, 9.8), 2), - 'Hostler': random.choice([True, False]) + "ID": i, + "CGPA": round(random.uniform(6.0, 9.8), 2), + "Hostler": random.choice([True, False]), } for i in range(1, num_students + 1) ] @@ -140,7 +142,9 @@ def generate_students(num_students: int = 500) -> List[Dict]: students = generate_students(num_students=500) # Calculate the dynamic CGPA threshold - cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold(students, top_percentage=30) + cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold( + students, top_percentage=30 + ) print(f"Dynamic CGPA Threshold (Top 30%): {cgpa_threshold}") # Assign conditions and scores @@ -148,7 +152,9 @@ def generate_students(num_students: int = 500) -> List[Dict]: students_with_scores = scorer.assign_scores_to_students(students) # Divide students into sections - sections = scorer.divide_students_into_sections(students_with_scores, Defaults.class_strength) + sections = scorer.divide_students_into_sections( + students_with_scores, Defaults.class_strength + ) # Display the sections for i, section in enumerate(sections, 1): diff --git a/Constants/teachers_tt.py b/Constants/teachers_tt.py index d61b180..68b7377 100644 --- a/Constants/teachers_tt.py +++ b/Constants/teachers_tt.py @@ -7,11 +7,15 @@ class TeacherTimetable: def __init__(self): # Create timetable for each teacher self.teacher_timetable = { - teacher: {day: [] for day in WorkingDays.days} - for teachers in SubjectTeacherMap.subject_teacher_map.values() + teacher: {day: [] for day in WorkingDays.days} + for teachers in SubjectTeacherMap.subject_teacher_map.values() + for teacher in teachers + } + self.teacher_assignments = { + teacher: {} + for teachers in SubjectTeacherMap.subject_teacher_map.values() for teacher in teachers } - self.teacher_assignments = {teacher: {} for teachers in SubjectTeacherMap.subject_teacher_map.values() for teacher in teachers} def generate_teacher_timetable(self, chromosome): """ @@ -28,18 +32,23 @@ def generate_teacher_timetable(self, chromosome): classroom_id = entry["classroom_id"] # Conflict check: Ensure the teacher is not already assigned at this time slot - if teacher_id in self.teacher_assignments and time_slot in self.teacher_assignments[teacher_id]: + if ( + teacher_id in self.teacher_assignments + and time_slot in self.teacher_assignments[teacher_id] + ): continue # Skip this assignment if there's a conflict # Add the class to the teacher's timetable - self.teacher_timetable[teacher_id][day].append({ - "course": week, # Include course information (Week 1, Week 2) - "section": section, - "subject_id": subject_id, - "time_slot": time_slot, - "classroom_id": classroom_id, - }) - + self.teacher_timetable[teacher_id][day].append( + { + "course": week, # Include course information (Week 1, Week 2) + "section": section, + "subject_id": subject_id, + "time_slot": time_slot, + "classroom_id": classroom_id, + } + ) + # Update the teacher's assignments to reflect the added class if teacher_id not in self.teacher_assignments: self.teacher_assignments[teacher_id] = {} @@ -48,7 +57,7 @@ def generate_teacher_timetable(self, chromosome): "section": section, "subject_id": subject_id, "classroom_id": classroom_id, - "day": day + "day": day, } return self.teacher_timetable @@ -60,30 +69,25 @@ def save_timetable_to_json(self, file_path="Constants/teacher_timetable.json"): try: # Create a dictionary explicitly from the teacher timetable timetable_dict = { - teacher: { - day: classes - for day, classes in days.items() - } + teacher: {day: classes for day, classes in days.items()} for teacher, days in self.teacher_timetable.items() } - + # Save the dictionary to a JSON file with open(file_path, "w") as json_file: json.dump(timetable_dict, json_file, indent=4) - + print(f"Timetable successfully saved to '{file_path}'.") except Exception as e: print(f"Error saving timetable to '{file_path}': {e}") + if __name__ == "__main__": teacher_timetable = TeacherTimetable() # Generate timetable from the sample chromosome (Week 1 and Week 2) - w = { - "Week 2": SampleChromosome.schedule2, - "Week 1": SampleChromosome.schedule1 - } - - teacher_tt=teacher_timetable.generate_teacher_timetable(w) + w = {"Week 2": SampleChromosome.schedule2, "Week 1": SampleChromosome.schedule1} + + teacher_tt = teacher_timetable.generate_teacher_timetable(w) print(teacher_tt) # Save timetable to a JSON file teacher_timetable.save_timetable_to_json() diff --git a/Constants/time_intervals.py b/Constants/time_intervals.py index ffe9dad..39444a3 100644 --- a/Constants/time_intervals.py +++ b/Constants/time_intervals.py @@ -2,7 +2,6 @@ class TimeIntervalConstant: - time_slots = {} time_mapping = {} diff --git a/GA/__init__.py b/GA/__init__.py index c45a62e..ff20334 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -1,9 +1,10 @@ import copy from dataclasses import dataclass + from Constants.helper_routines import ( initialize_teacher_availability, update_matrix_for_best, - update_teacher_availability_matrix + update_teacher_availability_matrix, ) from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator @@ -67,9 +68,11 @@ def _generate_timetable(self, teacher_matrix): teacher_duty_days=self.config.teacher_duty_days, teacher_availability_matrix=teacher_matrix, lab_availability_matrix=self.lab_availability, - time_slots=self.config.time_slots + time_slots=self.config.time_slots, ) - timetable, updated_teacher = tg.create_timetable(self.config.total_generations)[:2] + timetable, updated_teacher = tg.create_timetable(self.config.total_generations)[ + :2 + ] fitness = TimetableFitnessEvaluator( timetable=timetable, all_sections=list(tg.sections_manager.keys()), @@ -81,7 +84,7 @@ def _generate_timetable(self, teacher_matrix): subject_quota_data=tg.subject_quota_limits, teacher_time_preferences=tg.teacher_availability_preferences, teacher_daily_workload=tg.weekly_workload, - time_slots=self.config.time_slots + time_slots=self.config.time_slots, ).evaluate_timetable_fitness() selected = TimeTableSelection().select_chromosomes(fitness[1]) @@ -93,10 +96,15 @@ def _generate_timetable(self, teacher_matrix): selected_keys = list(selected.keys()) for i in range(0, len(selected_keys), 2): if i + 1 < len(selected_keys): - c1, c2 = crossover.perform_crossover(timetable[selected_keys[i]], timetable[selected_keys[i + 1]]) + c1, c2 = crossover.perform_crossover( + timetable[selected_keys[i]], timetable[selected_keys[i + 1]] + ) crossover_chromosomes.extend([c1, c2]) - mutated = [TimeTableMutation().mutate_schedule_for_week(ch) for ch in crossover_chromosomes] + mutated = [ + TimeTableMutation().mutate_schedule_for_week(ch) + for ch in crossover_chromosomes + ] if self.config.prev_mutated: mutated.extend(self.config.prev_mutated) @@ -108,7 +116,9 @@ def _generate_timetable(self, teacher_matrix): best_chromosome = timetable[key] if best_chromosome: - updated_teacher = update_teacher_availability_matrix(teacher_matrix, best_chromosome) + updated_teacher = update_teacher_availability_matrix( + teacher_matrix, best_chromosome + ) return best_chromosome, updated_teacher, selected, mutated def run(self): @@ -120,21 +130,31 @@ def run(self): for _ in range(self.config.total_generations): teacher_copy = copy.deepcopy(initial_teacher) - best, updated_teacher, selected, mutated = self._generate_timetable(teacher_copy) + best, updated_teacher, selected, mutated = self._generate_timetable( + teacher_copy + ) best_chromosome = best self.config.prev_selected = selected self.config.prev_mutated = mutated updated_teacher = update_matrix_for_best( - best_chromosome, updated_teacher, self.config.day_map, self.config.time_slot_map + best_chromosome, + updated_teacher, + self.config.day_map, + self.config.time_slot_map, ) updated_lab = self._update_lab_availability(best_chromosome) return best_chromosome, updated_teacher, updated_lab -if __name__ == '__main__': +if __name__ == "__main__": from Constants.constant import Defaults - from Samples.samples import SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, TeacherWorkload + from Samples.samples import ( + SpecialSubjects, + SubjectTeacherMap, + SubjectWeeklyQuota, + TeacherWorkload, + ) lab_matrix = { "L1": [[True] * 7 for _ in range(5)], @@ -142,60 +162,59 @@ def run(self): "L3": [[True] * 7 for _ in range(5)], "L4": [[True] * 7 for _ in range(5)], "L5": [[True] * 7 for _ in range(5)], - "L6": [[True] * 7 for _ in range(5)] + "L6": [[True] * 7 for _ in range(5)], } teacher_availability = initialize_teacher_availability( - TeacherWorkload.Weekly_workLoad.keys(), - 5, - 7 + TeacherWorkload.Weekly_workLoad.keys(), 5, 7 ) config = TimetableConfig( - teacher_subject_mapping = SubjectTeacherMap.subject_teacher_map, - total_sections = {"A": 70, "B": 100, "C": 75, "D": 100}, - total_classrooms = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, - total_labs = {"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, - teacher_preferences = TeacherWorkload.teacher_preferences, - teacher_weekly_workload = TeacherWorkload.Weekly_workLoad, - special_subjects = SpecialSubjects.special_subjects, - labs = SpecialSubjects.Labs, - subject_quota_limits = SubjectWeeklyQuota.subject_quota, - teacher_duty_days = TeacherWorkload.teacher_duty_days, - teacher_availability_matrix = teacher_availability, - lab_availability_matrix = lab_matrix, - total_generations = Defaults.total_no_of_generations, - time_slots = { + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs={"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + labs=SpecialSubjects.Labs, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_availability_matrix=teacher_availability, + lab_availability_matrix=lab_matrix, + total_generations=Defaults.total_no_of_generations, + time_slots={ 1: "9:00 - 9:55", 2: "9:55 - 10:50", 3: "11:10 - 12:05", 4: "12:05 - 1:00", 5: "1:20 - 2:15", 6: "2:15 - 3:10", - 7: "3:30 - 4:25" + 7: "3:30 - 4:25", }, - day_map = { + day_map={ "Monday": 0, "Tuesday": 1, "Wednesday": 2, "Thursday": 3, "Friday": 4, "Saturday": 5, - "Sunday": 6 + "Sunday": 6, }, - time_slot_map = { + time_slot_map={ "9:00 - 9:55": 1, "9:55 - 10:50": 2, "11:10 - 12:05": 3, "12:05 - 1:00": 4, "1:20 - 2:15": 5, "2:15 - 3:10": 6, - "3:30 - 4:25": 7 - } + "3:30 - 4:25": 7, + }, ) engine = TimetableEngine(config) best_tt, final_teacher, final_lab = engine.run() from icecream import ic + ic(best_tt, final_teacher, final_lab) diff --git a/GA/chromosome.py b/GA/chromosome.py index 7c54bf6..5b40d89 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -1,6 +1,7 @@ -import random import copy +import random from math import ceil + from Constants.constant import Defaults @@ -35,10 +36,11 @@ def __init__( self.weekly_workload = teacher_weekly_workload self.teacher_availability_matrix = teacher_availability_matrix self.initial_lab_availability_matrix = copy.deepcopy(lab_availability_matrix) - self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) + self.lab_availability_matrix = copy.deepcopy( + self.initial_lab_availability_matrix + ) self._map_sections_to_classrooms() - def _map_sections_to_classrooms(self) -> dict: sorted_classrooms = sorted( self.classrooms_manager.items(), key=lambda x: x[1], reverse=True @@ -55,19 +57,19 @@ def _map_sections_to_classrooms(self) -> dict: break return self.section_to_classroom_map - def _initialize_teacher_workload_tracker(self) -> dict: return {teacher: 0 for teacher in self.weekly_workload} - - def _get_available_subjects(self, section: str, subject_usage_tracker: dict) -> list: + def _get_available_subjects( + self, section: str, subject_usage_tracker: dict + ) -> list: return [ subject for subject in self.subject_teacher_mapping - if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) + if subject_usage_tracker[section][subject] + < self.subject_quota_limits.get(subject, 0) ] - def _assign_subject_and_teacher( self, section: str, @@ -79,26 +81,37 @@ def _assign_subject_and_teacher( teacher_availability_matrix: dict, day_index: int, ) -> tuple: - available_subjects = self._get_available_subjects(section, subject_usage_tracker) + available_subjects = self._get_available_subjects( + section, subject_usage_tracker + ) random.shuffle(available_subjects) assigned_teacher = None selected_subject = None assigned_room = assigned_classroom for subject in available_subjects: - if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: + if ( + subject in self.lab_subject_list or subject == "Placement_Class" + ) and slot_index not in [1, 3, 5]: continue if subject not in subjects_scheduled_today: teachers = self.subject_teacher_mapping[subject] preferred_teachers = [ - t for t in teachers if self.teacher_availability_preferences.get(t, []) + t + for t in teachers + if self.teacher_availability_preferences.get(t, []) ] - for teacher in sorted(preferred_teachers, key=lambda t: teacher_workload_tracker[t]): + for teacher in sorted( + preferred_teachers, key=lambda t: teacher_workload_tracker[t] + ): if ( teacher in teacher_availability_matrix and len(teacher_availability_matrix[teacher]) > day_index - and len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) - and teacher_availability_matrix[teacher][day_index][slot_index - 1] + and len(teacher_availability_matrix[teacher][day_index]) + > (slot_index - 1) + and teacher_availability_matrix[teacher][day_index][ + slot_index - 1 + ] ): assigned_teacher = teacher teacher_workload_tracker[teacher] += 1 @@ -113,7 +126,6 @@ def _assign_subject_and_teacher( assigned_teacher = "None" return assigned_teacher, selected_subject, assigned_room - def _allocate_lab( self, teacher: str, @@ -140,10 +152,18 @@ def _allocate_lab( and self.lab_availability_matrix[lab2][day_index][slot_index] and self.lab_capacity_manager.get(lab2, 0) >= group2_size ): - self.lab_availability_matrix[lab1][day_index][slot_index - 1] = False - self.lab_availability_matrix[lab1][day_index][slot_index] = False - self.lab_availability_matrix[lab2][day_index][slot_index - 1] = False - self.lab_availability_matrix[lab2][day_index][slot_index] = False + self.lab_availability_matrix[lab1][day_index][ + slot_index - 1 + ] = False + self.lab_availability_matrix[lab1][day_index][ + slot_index + ] = False + self.lab_availability_matrix[lab2][day_index][ + slot_index - 1 + ] = False + self.lab_availability_matrix[lab2][day_index][ + slot_index + ] = False entries = [ { "teacher_id": teacher, @@ -186,7 +206,6 @@ def _allocate_lab( } return [merged_entry], slot_index + 1 - def _generate_section_schedule( self, section: str, @@ -223,30 +242,33 @@ def _generate_section_schedule( schedule.extend(lab_entries) subject_usage_tracker[section][subject] += len(lab_entries) else: - schedule.append({ - "teacher_id": teacher, - "subject_id": subject, - "classroom_id": assigned_classroom, - "time_slot": time_slot, - "group": "fallback", - }) + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_classroom, + "time_slot": time_slot, + "group": "fallback", + } + ) subject_usage_tracker[section][subject] += 1 slot_index += 1 else: - schedule.append({ - "teacher_id": teacher, - "subject_id": subject, - "classroom_id": room, - "time_slot": time_slot, - "group": "all", - }) + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, + "time_slot": time_slot, + "group": "all", + } + ) if subject != "Library": subject_usage_tracker[section][subject] += 1 slot_index += 1 return schedule, teacher_availability_matrix - def generate_daily_schedule( self, sections: list, @@ -258,7 +280,10 @@ def generate_daily_schedule( teacher_workload = self._initialize_teacher_workload_tracker() for section in sections: section_strength = self.sections_manager[section] - schedule, self.teacher_availability_matrix = self._generate_section_schedule( + ( + schedule, + self.teacher_availability_matrix, + ) = self._generate_section_schedule( section, half_day_sections, subject_usage_tracker, @@ -270,7 +295,6 @@ def generate_daily_schedule( daily_schedule[section] = schedule return daily_schedule, subject_usage_tracker, self.teacher_availability_matrix - def _generate_weekly_schedule(self) -> tuple: weekly_schedule = {} subject_usage = { @@ -281,17 +305,26 @@ def _generate_weekly_schedule(self) -> tuple: for day_index, weekday in enumerate(self.weekdays): random.shuffle(sections) half_day = sections[: len(sections) // 2] - daily_sched, subject_usage, self.teacher_availability_matrix = self.generate_daily_schedule( + ( + daily_sched, + subject_usage, + self.teacher_availability_matrix, + ) = self.generate_daily_schedule( sections, half_day, subject_usage, day_index ) weekly_schedule[weekday] = daily_sched return weekly_schedule, subject_usage, self.teacher_availability_matrix - def create_timetable(self, num_weeks: int) -> tuple: timetable = {} for week in range(1, num_weeks + 1): - self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) - weekly_schedule, _, self.teacher_availability_matrix = self._generate_weekly_schedule() + self.lab_availability_matrix = copy.deepcopy( + self.initial_lab_availability_matrix + ) + ( + weekly_schedule, + _, + self.teacher_availability_matrix, + ) = self._generate_weekly_schedule() timetable[f"Week {week}"] = weekly_schedule return timetable, self.teacher_availability_matrix, self.lab_availability_matrix diff --git a/GA/fitness.py b/GA/fitness.py index ab3aa1e..d88237e 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -6,7 +6,7 @@ SpecialSubjects, SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload + TeacherWorkload, ) @@ -26,7 +26,7 @@ def __init__( time_slots, ): self.timetable = timetable - self.available_days = Defaults.working_days + self.available_days = Defaults.working_days self.all_sections = all_sections self.subject_teacher_mapping = subject_teacher_mapping self.available_classrooms = available_classrooms @@ -37,7 +37,7 @@ def __init__( self.teacher_time_preferences = teacher_time_preferences self.teacher_daily_workload = teacher_daily_workload self.time_slots = time_slots - + def evaluate_timetable_fitness(self): daily_section_fitness_scores = {} weekly_fitness_scores = {} @@ -64,16 +64,30 @@ def evaluate_timetable_fitness(self): section_strength = self.section_student_strength.get(section, 0) # Penalty 1: Double booking a teacher in the same time slot - if (assigned_teacher, assigned_time_slot) in teacher_time_slot_tracking.keys(): - section_fitness -= PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED + if ( + assigned_teacher, + assigned_time_slot, + ) in teacher_time_slot_tracking.keys(): + section_fitness -= ( + PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED + ) else: - teacher_time_slot_tracking[(assigned_teacher, assigned_time_slot)] = section + teacher_time_slot_tracking[ + (assigned_teacher, assigned_time_slot) + ] = section # Penalty 2: Double booking a classroom in the same time slot - if (assigned_classroom, assigned_time_slot) in classroom_time_slot_tracking: - section_fitness -= PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED + if ( + assigned_classroom, + assigned_time_slot, + ) in classroom_time_slot_tracking: + section_fitness -= ( + PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED + ) else: - classroom_time_slot_tracking[(assigned_classroom, assigned_time_slot)] = section + classroom_time_slot_tracking[ + (assigned_classroom, assigned_time_slot) + ] = section # Penalty 3: Over-capacity classrooms if section_strength > self.classroom_capacity.get( @@ -86,23 +100,33 @@ def evaluate_timetable_fitness(self): assigned_teacher, [] ) if assigned_time_slot not in preferred_time_slots: - section_fitness -= PenaltyConstants.PENALTY_UN_PREFERRED_SLOT + section_fitness -= ( + PenaltyConstants.PENALTY_UN_PREFERRED_SLOT + ) # Penalty 5: Scheduling teacher on a non-duty day assigned_day = day - if assigned_day not in TeacherWorkload.teacher_duty_days.get(assigned_teacher, []): + if assigned_day not in TeacherWorkload.teacher_duty_days.get( + assigned_teacher, [] + ): section_fitness -= PenaltyConstants.PENALTY_NON_DUTY_DAY # Tracking teacher workload if assigned_teacher not in teacher_workload_tracking: teacher_workload_tracking[assigned_teacher] = [] - teacher_workload_tracking[assigned_teacher].append(assigned_time_slot) + teacher_workload_tracking[assigned_teacher].append( + assigned_time_slot + ) # Penalty 6: Exceeding teacher daily workload for teacher, times_assigned in teacher_workload_tracking.items(): if teacher is not None: - if len(times_assigned) > self.teacher_daily_workload.get(teacher, 0): - section_fitness -= PenaltyConstants.PENALTY_OVERLOAD_TEACHER + if len(times_assigned) > self.teacher_daily_workload.get( + teacher, 0 + ): + section_fitness -= ( + PenaltyConstants.PENALTY_OVERLOAD_TEACHER + ) daily_section_fitness_scores[week][day][section] = section_fitness day_fitness += section_fitness @@ -147,7 +171,10 @@ def evaluate_timetable_fitness(self): timetable_generator.weekly_workload, ) - section_fitness_data, weekly_fitness_data = fitness_evaluator.evaluate_timetable_fitness() + ( + section_fitness_data, + weekly_fitness_data, + ) = fitness_evaluator.evaluate_timetable_fitness() # Save results with open("GA/chromosome.json", "w") as timetable_file: diff --git a/GA/mutation.py b/GA/mutation.py index 9810bb5..9416ff4 100644 --- a/GA/mutation.py +++ b/GA/mutation.py @@ -1,5 +1,6 @@ import copy import random + from Constants.constant import Defaults @@ -8,7 +9,6 @@ def __init__(self, mutation_rate=0.7): self.mutation_rate = mutation_rate def mutate_time_slots_in_section(self, schedule: dict, section: str) -> bool: - if section not in schedule or len(schedule[section]) < 2: return False @@ -20,7 +20,6 @@ def mutate_time_slots_in_section(self, schedule: dict, section: str) -> bool: return True def mutate_schedule_for_week(self, weekly_schedule: dict) -> dict: - mutated_schedule = copy.deepcopy(weekly_schedule) for day, day_schedule in mutated_schedule.items(): sections = list(day_schedule.keys()) @@ -33,7 +32,6 @@ def mutate_schedule_for_week(self, weekly_schedule: dict) -> dict: class TimeTableCrossOver: def perform_crossover(self, timetable1: dict, timetable2: dict) -> tuple: - for day in Defaults.working_days: if day in timetable1 and day in timetable2: timetable1[day], timetable2[day] = timetable2[day], timetable1[day] diff --git a/GA/selection.py b/GA/selection.py index 7431ce3..b761136 100644 --- a/GA/selection.py +++ b/GA/selection.py @@ -5,40 +5,34 @@ class TimeTableSelection: def __init__(self): pass - def select_chromosomes( - self, - weekly_fitness_scores, - top_percentage=0.20, - roulette_percentage=0.10 + self, weekly_fitness_scores, top_percentage=0.20, roulette_percentage=0.10 ): """ - Entry point for selecting chromosomes. - Select chromosomes based on top scores and roulette-wheel selection. + Entry point for selecting chromosomes. + Select chromosomes based on top scores and roulette-wheel selection. """ if not weekly_fitness_scores: print("Weekly fitness scores are empty. Ensure data is loaded correctly!") return {} - top_selected, remaining_scores = self.get_top_and_remaining_items(weekly_fitness_scores, top_percentage) + top_selected, remaining_scores = self.get_top_and_remaining_items( + weekly_fitness_scores, top_percentage + ) roulette_selected = self.roulette_wheel_selection( - remaining_scores, - int( - len(weekly_fitness_scores) * roulette_percentage - ) + remaining_scores, int(len(weekly_fitness_scores) * roulette_percentage) ) selected_fitness = {**top_selected, **roulette_selected} # self.display_selected_chromosomes(selected_fitness) return selected_fitness - @staticmethod def calculate_cumulative_probabilities(scores): """ - Calculate cumulative probabilities for roulette wheel selection. + Calculate cumulative probabilities for roulette wheel selection. """ cumulative_probabilities = [] @@ -50,11 +44,10 @@ def calculate_cumulative_probabilities(scores): return cumulative_probabilities - @staticmethod def perform_roulette_selection(cumulative_probabilities, total_fitness, num_select): """ - Perform roulette-wheel selection to choose items. + Perform roulette-wheel selection to choose items. """ selected_items = [] @@ -67,10 +60,9 @@ def perform_roulette_selection(cumulative_probabilities, total_fitness, num_sele return selected_items - def roulette_wheel_selection(self, scores, num_select): """ - Select items using roulette-wheel selection. + Select items using roulette-wheel selection. """ if not scores: @@ -79,26 +71,25 @@ def roulette_wheel_selection(self, scores, num_select): total_fitness = sum(scores.values()) cumulative_probabilities = self.calculate_cumulative_probabilities(scores) - selected_items = self.perform_roulette_selection(cumulative_probabilities, total_fitness, num_select) - return { - week: scores[week] for week in selected_items - } - + selected_items = self.perform_roulette_selection( + cumulative_probabilities, total_fitness, num_select + ) + return {week: scores[week] for week in selected_items} @staticmethod def get_top_and_remaining_items(scores, percentage): - - num_select = max(1, int(len(scores) * percentage)) # at least 1 chromosome to select. + num_select = max( + 1, int(len(scores) * percentage) + ) # at least 1 chromosome to select. sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) top_selected = dict(sorted_scores[:num_select]) remaining_items = dict(sorted_scores[num_select:]) return top_selected, remaining_items - @staticmethod def display_selected_chromosomes(selected_fitness): """ - Display the selected chromosomes and their fitness scores. + Display the selected chromosomes and their fitness scores. """ print("\n--- Selected Weeks and Fitness Scores ---") diff --git a/Samples/Adhocs/common.py b/Samples/Adhocs/common.py index dd72e78..c6e755b 100644 --- a/Samples/Adhocs/common.py +++ b/Samples/Adhocs/common.py @@ -3,20 +3,20 @@ def generate_students(num_students: int = 500) -> list: """ - Generate a list of random students with CGPA and hostler status. + Generate a list of random students with CGPA and hostler status. - Args: - num_students (int): Number of students to generate. + Args: + num_students (int): Number of students to generate. - Returns: - List[Dict]: List of student dictionaries. + Returns: + List[Dict]: List of student dictionaries. """ return [ { - 'ID': i, - 'CGPA': round(random.uniform(6.0, 9.8), 2), - 'Hostler': random.choice([True, False]) + "ID": i, + "CGPA": round(random.uniform(6.0, 9.8), 2), + "Hostler": random.choice([True, False]), } for i in range(1, num_students + 1) ] diff --git a/Samples/Fitness_Files/LabConstraints.py b/Samples/Fitness_Files/LabConstraints.py index 27a6318..52b2ef9 100644 --- a/Samples/Fitness_Files/LabConstraints.py +++ b/Samples/Fitness_Files/LabConstraints.py @@ -27,7 +27,7 @@ "XCS-501": 2, "CSP-501": 1, "SCS-501": 1, - "Placement_Class": 1 + "Placement_Class": 1, } # Teacher availability and subjects they teach @@ -43,11 +43,13 @@ "CSP-501": ["AK23"], "SCS-501": ["AP24"], "PCS-503": ["RS11", "DP07", "SP06", "VD25"], - "Placement_Class": ["AK26"] + "Placement_Class": ["AK26"], } # Initialize available time slots -TimeSlots = TimeIntervalConstant.time_slots # Assuming TimeIntervalConstant has a list of time intervals +TimeSlots = ( + TimeIntervalConstant.time_slots +) # Assuming TimeIntervalConstant has a list of time intervals class TimetableFitness: @@ -65,9 +67,15 @@ def assign_classes_and_labs(self): Assign classes and labs to teachers based on constraints and time slots. """ for teacher in self.teachers: - subjects = [subject for subject, teachers in TEACHER_SUBJECTS.items() if teacher in teachers] + subjects = [ + subject + for subject, teachers in TEACHER_SUBJECTS.items() + if teacher in teachers + ] for subject in subjects: - time_slot = random.choice(TimeSlots) # Randomly select an available time slot + time_slot = random.choice( + TimeSlots + ) # Randomly select an available time slot if time_slot not in self.teacher_schedule[teacher]: self.teacher_schedule[teacher][time_slot] = subject @@ -86,7 +94,9 @@ def ClassNo(self): Check if the number of classes assigned is within the constraints. """ for teacher, schedule in self.teacher_schedule.items(): - class_count = sum(1 for subject in schedule.values() if subject in self.classes) + class_count = sum( + 1 for subject in schedule.values() if subject in self.classes + ) if class_count > MAX_CLASS_COUNT: return False return True @@ -96,7 +106,9 @@ def TeacherWorkload(self): Ensure total workload per teacher is within the limit. """ for teacher, schedule in self.teacher_schedule.items(): - total_hours = sum(SUBJECT_WORKLOAD.get(subject, 0) for subject in schedule.values()) + total_hours = sum( + SUBJECT_WORKLOAD.get(subject, 0) for subject in schedule.values() + ) if total_hours > MAX_TEACHER_WORKLOAD: return False return True @@ -109,7 +121,11 @@ def ContinuousClasses(self): sorted_slots = sorted(schedule.keys()) continuous_count = 0 for i in range(len(sorted_slots) - 1): - if TimeSlots.index(sorted_slots[i + 1]) - TimeSlots.index(sorted_slots[i]) == 1: + if ( + TimeSlots.index(sorted_slots[i + 1]) + - TimeSlots.index(sorted_slots[i]) + == 1 + ): continuous_count += 1 if continuous_count > MAX_CONTINUOUS_CLASSES: return False @@ -162,7 +178,7 @@ def fitnessFunc(self): output = { "teacher_schedule": timetable_fitness.teacher_schedule, "fitness_score": fitness_score, - "section_strength": timetable_fitness.section_strength + "section_strength": timetable_fitness.section_strength, } with open("Timetable_Fitness_Result.json", "w") as f: json.dump(output, f, indent=4) diff --git a/Samples/Fitness_Files/fitness.py b/Samples/Fitness_Files/fitness.py index c0dc251..347557a 100644 --- a/Samples/Fitness_Files/fitness.py +++ b/Samples/Fitness_Files/fitness.py @@ -3,8 +3,13 @@ from Constants.constant import Defaults, PenaltyConstants from Constants.time_intervals import TimeIntervalConstant from GA.chromosome import TimeTableGeneration -from Samples.samples import (Classrooms, SpecialSubjects, SubjectTeacherMap, - SubjectWeeklyQuota, TeacherWorkload) +from Samples.samples import ( + Classrooms, + SpecialSubjects, + SubjectTeacherMap, + SubjectWeeklyQuota, + TeacherWorkload, +) class TimetableFitnessEvaluator: @@ -58,16 +63,30 @@ def evaluate_timetable_fitness(self): section_strength = self.section_student_strength.get(section, 0) # Penalty 1: Double booking a teacher in the same time slot - if (assigned_teacher, assigned_time_slot) in teacher_time_slot_tracking.keys(): - section_fitness -= PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED + if ( + assigned_teacher, + assigned_time_slot, + ) in teacher_time_slot_tracking.keys(): + section_fitness -= ( + PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED + ) else: - teacher_time_slot_tracking[(assigned_teacher, assigned_time_slot)] = section + teacher_time_slot_tracking[ + (assigned_teacher, assigned_time_slot) + ] = section # Penalty 2: Double booking a classroom in the same time slot - if (assigned_classroom, assigned_time_slot) in classroom_time_slot_tracking: - section_fitness -= PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED + if ( + assigned_classroom, + assigned_time_slot, + ) in classroom_time_slot_tracking: + section_fitness -= ( + PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED + ) else: - classroom_time_slot_tracking[(assigned_classroom, assigned_time_slot)] = section + classroom_time_slot_tracking[ + (assigned_classroom, assigned_time_slot) + ] = section # Penalty 3: Over-capacity classrooms if section_strength > self.classroom_capacity.get( @@ -80,23 +99,33 @@ def evaluate_timetable_fitness(self): assigned_teacher, [] ) if assigned_time_slot not in preferred_time_slots: - section_fitness -= PenaltyConstants.PENALTY_UN_PREFERRED_SLOT + section_fitness -= ( + PenaltyConstants.PENALTY_UN_PREFERRED_SLOT + ) # Penalty 5: Scheduling teacher on a non-duty day assigned_day = day - if assigned_day not in TeacherWorkload.teacher_duty_days.get(assigned_teacher, []): + if assigned_day not in TeacherWorkload.teacher_duty_days.get( + assigned_teacher, [] + ): section_fitness -= PenaltyConstants.PENALTY_NON_DUTY_DAY # Tracking teacher workload if assigned_teacher not in teacher_workload_tracking: teacher_workload_tracking[assigned_teacher] = [] - teacher_workload_tracking[assigned_teacher].append(assigned_time_slot) + teacher_workload_tracking[assigned_teacher].append( + assigned_time_slot + ) # Penalty 6: Exceeding teacher daily workload for teacher, times_assigned in teacher_workload_tracking.items(): if teacher is not None: - if len(times_assigned) > self.teacher_daily_workload.get(teacher, 0): - section_fitness -= PenaltyConstants.PENALTY_OVERLOAD_TEACHER + if len(times_assigned) > self.teacher_daily_workload.get( + teacher, 0 + ): + section_fitness -= ( + PenaltyConstants.PENALTY_OVERLOAD_TEACHER + ) daily_section_fitness_scores[week][day][section] = section_fitness day_fitness += section_fitness @@ -142,7 +171,10 @@ def evaluate_timetable_fitness(self): timetable_generator.weekly_workload, ) - section_fitness_data, weekly_fitness_data = fitness_evaluator.evaluate_timetable_fitness() + ( + section_fitness_data, + weekly_fitness_data, + ) = fitness_evaluator.evaluate_timetable_fitness() # Save results with open("GA/chromosome.json", "w") as timetable_file: diff --git a/Samples/Mutation_Files/crossover.py b/Samples/Mutation_Files/crossover.py index 42841af..f505b68 100644 --- a/Samples/Mutation_Files/crossover.py +++ b/Samples/Mutation_Files/crossover.py @@ -3,48 +3,160 @@ def __init__(self): # schedules for week1 and week2 self.week1 = { "Monday": { - "A": [{"teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:55 - 10:50"}], - "B": [{"teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "9:00 - 9:55"}] + "A": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + } + ], + "B": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55", + } + ], }, "Tuesday": { - "A": [{"teacher_id": "AK24", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55"}], - "B": [{"teacher_id": "BJ11", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50"}] + "A": [ + { + "teacher_id": "AK24", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + } + ], + "B": [ + { + "teacher_id": "BJ11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + } + ], }, "Wednesday": { - "A": [{"teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "11:10 - 12:05"}] + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + } + ] }, "Thursday": { - "A": [{"teacher_id": "SJ11", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "12:05 - 1:00"}] + "A": [ + { + "teacher_id": "SJ11", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + } + ] }, "Friday": { - "A": [{"teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "1:20 - 2:15"}] + "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + } + ] }, "Saturday": { - "A": [{"teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "2:15 - 3:10"}] - } + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + } + ] + }, } self.week2 = { "Monday": { - "A": [{"teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "9:55 - 10:50"}], - "B": [{"teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "9:00 - 9:55"}] + "A": [ + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + } + ], + "B": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55", + } + ], }, "Tuesday": { - "A": [{"teacher_id": "AK22", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55"}], - "B": [{"teacher_id": "BJ16", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50"}] + "A": [ + { + "teacher_id": "AK22", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + } + ], + "B": [ + { + "teacher_id": "BJ16", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + } + ], }, "Wednesday": { - "A": [{"teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "11:10 - 12:05"}] + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + } + ] }, "Thursday": { - "A": [{"teacher_id": "SJ12", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "12:05 - 1:00"}] + "A": [ + { + "teacher_id": "SJ12", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + } + ] }, "Friday": { - "A": [{"teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "1:20 - 2:15"}] + "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + } + ] }, "Saturday": { - "A": [{"teacher_id": "SJ14", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "2:15 - 3:10"}] - } + "A": [ + { + "teacher_id": "SJ14", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + } + ] + }, } self.new_offspring = None # Will hold the result after crossover @@ -58,11 +170,7 @@ def perform_crossover(self): self.week1[day], self.week2[day] = self.week2[day], self.week1[day] # Create a new chromosome structure with the updated schedules - self.new_offspring = { - "week1": self.week1, - "week2": self.week2 - - } + self.new_offspring = {"week1": self.week1, "week2": self.week2} def print_schedule(self): # Print the new chromosome after crossover @@ -76,4 +184,4 @@ def print_schedule(self): # Instantiate the class and run the crossover schedule_crossover = ScheduleCrossover() schedule_crossover.perform_crossover() -schedule_crossover.print_schedule() \ No newline at end of file +schedule_crossover.print_schedule() diff --git a/Samples/Mutation_Files/mutation.py b/Samples/Mutation_Files/mutation.py index 324c0e2..48392ed 100644 --- a/Samples/Mutation_Files/mutation.py +++ b/Samples/Mutation_Files/mutation.py @@ -3,7 +3,7 @@ class Mutation: - def __init__(self, mutation_rate= random.random()): + def __init__(self, mutation_rate=random.random()): """ Initializes the Mutation class with a specified mutation rate. @@ -79,8 +79,10 @@ def print_weekly_schedule(self, weekly_schedule): for section, entries in day_schedule.items(): print(f" Section {section}:") for entry in entries: - print(f" Teacher: {entry['teacher_id']}, Subject: {entry['subject_id']}, " - f"Classroom: {entry['classroom_id']}, Time Slot: {entry['time_slot']}") + print( + f" Teacher: {entry['teacher_id']}, Subject: {entry['subject_id']}, " + f"Classroom: {entry['classroom_id']}, Time Slot: {entry['time_slot']}" + ) print("-" * 30) print("=" * 50) @@ -88,53 +90,205 @@ def print_weekly_schedule(self, weekly_schedule): # Example weekly schedule weekly_schedule = { "Monday": { - "A": [ - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R1", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "12:05 - 1:00"}, - {"teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "1:20 - 2:15"}, - {"teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "2:15 - 3:10"}, - {"teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "3:30 - 4:25"}, - ], - "B": [ - {"teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "PA21", "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "12:05 - 1:00"}, - ], - "C": [ - {"teacher_id": "RS11", "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L3", "time_slot": "12:05 - 1:00"}, - {"teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L3", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "DP07", "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "1:20 - 2:15"}, - {"teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "2:15 - 3:10"}, - {"teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "3:30 - 4:25"}, - ], - "D": [ - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "AC05", "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "12:05 - 1:00"}, - ] + "A": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], }, "Tuesday": { - "A": [{"teacher_id": "AK22", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55"}], - "B": [{"teacher_id": "BJ16", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50"}] + "A": [ + { + "teacher_id": "AK22", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + } + ], + "B": [ + { + "teacher_id": "BJ16", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + } + ], }, "Wednesday": { - "A": [{"teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "11:10 - 12:05"}] + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + } + ] }, "Thursday": { - "A": [{"teacher_id": "SJ12", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "12:05 - 1:00"}] + "A": [ + { + "teacher_id": "SJ12", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + } + ] }, "Friday": { - "A": [{"teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "1:20 - 2:15"}] + "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + } + ] }, "Saturday": { - "A": [{"teacher_id": "SJ14", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "2:15 - 3:10"}] - } + "A": [ + { + "teacher_id": "SJ14", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + } + ] + }, } # Create an instance of the Mutation class with a mutation rate randomly chosen @@ -149,4 +303,4 @@ def print_weekly_schedule(self, weekly_schedule): mutator.print_weekly_schedule(weekly_schedule) print("\nMutated Weekly Schedule:") -mutator.print_weekly_schedule(mutated_weekly_schedule) \ No newline at end of file +mutator.print_weekly_schedule(mutated_weekly_schedule) diff --git a/Samples/Mutation_Files/mutation2.py b/Samples/Mutation_Files/mutation2.py index 23f4ebd..d209396 100644 --- a/Samples/Mutation_Files/mutation2.py +++ b/Samples/Mutation_Files/mutation2.py @@ -57,36 +57,146 @@ def mutate_all_sections(schedule): # Example schedule (reuse the previously defined schedule) schedule = { - "A": [ - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R1", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "12:05 - 1:00"}, - {"teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "1:20 - 2:15"}, - {"teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "2:15 - 3:10"}, - {"teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "3:30 - 4:25"}, - ], - "B": [ - {"teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "PA21", "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "12:05 - 1:00"}, - ], - "C": [ - {"teacher_id": "RS11", "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L3", "time_slot": "12:05 - 1:00"}, - {"teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L3", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "DP07", "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "1:20 - 2:15"}, - {"teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "2:15 - 3:10"}, - {"teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "3:30 - 4:25"}, - ], - "D": [ - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "AC05", "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "12:05 - 1:00"}, - ], + "A": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], } # Perform mutations on all sections diff --git a/Samples/Selection_Files/algo.py b/Samples/Selection_Files/algo.py index 5557e31..df320f8 100644 --- a/Samples/Selection_Files/algo.py +++ b/Samples/Selection_Files/algo.py @@ -1,24 +1,29 @@ -#ROULETTE WHEEL SELECTION +# ROULETTE WHEEL SELECTION """WORKING: Roulette Wheel Selection assigns sections of a "wheel" to each individual proportionally to their fitness. A spin of this wheel randomly selects an individual,giving higher fitness a larger slice of the wheel and, thus, a higher selection chance.""" def roulette_wheel_selection(self, chromosomes, selection_ratio=0.2): - fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes] + fitness_scores = [ + (chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes + ] fitness_scores.sort(key=lambda x: x[1], reverse=True) selection_count = max(1, int(len(chromosomes) * selection_ratio)) top_chromosomes = [fitness_scores[i][0] for i in range(selection_count)] return top_chromosomes +# TOURNAMENT SELECTION +"""WORKINK: Tournament Selection randomly picks a small group from the population and selects the fittest from that group to pass + to the next generation. The "tournament size" controls how many individuals compete, balancing diversity and selection pressure.""" -#TOURNAMENT SELECTION -'''WORKINK: Tournament Selection randomly picks a small group from the population and selects the fittest from that group to pass - to the next generation. The "tournament size" controls how many individuals compete, balancing diversity and selection pressure.''' - -def select_top_20_percent_tournament(self, chromosomes, tournament_size=3, selection_ratio=0.2): - fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes] +def select_top_20_percent_tournament( + self, chromosomes, tournament_size=3, selection_ratio=0.2 +): + fitness_scores = [ + (chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes + ] fitness_scores.sort(key=lambda x: x[1], reverse=True) selected_chromosomes = [] num_selected = int(len(chromosomes) * selection_ratio) @@ -30,14 +35,15 @@ def select_top_20_percent_tournament(self, chromosomes, tournament_size=3, selec return selected_chromosomes - -#STOCHASTIC UNIVERSAL SAMPLING (SUS) -'''WORKING: In SUS, multiple equally spaced pointers are placed on a roulette-style wheel, selecting individuals at each pointer - position.This method achieves a more balanced selection by ensuring broader population representation each generation.''' +# STOCHASTIC UNIVERSAL SAMPLING (SUS) +"""WORKING: In SUS, multiple equally spaced pointers are placed on a roulette-style wheel, selecting individuals at each pointer + position.This method achieves a more balanced selection by ensuring broader population representation each generation.""" def select_top_20_percent_sus(self, chromosomes, selection_ratio=0.2): - fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes] + fitness_scores = [ + (chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes + ] fitness_scores.sort(key=lambda x: x[1], reverse=True) total_fitness = sum(score for _, score in fitness_scores) @@ -55,20 +61,21 @@ def select_top_20_percent_sus(self, chromosomes, selection_ratio=0.2): return selected_chromosomes - -#RANK SELECTION -'''WORKING: Rank Selection orders individuals by fitness, assigning higher ranks (not raw scores) better selection chances. This controls selection pressure, +# RANK SELECTION +"""WORKING: Rank Selection orders individuals by fitness, assigning higher ranks (not raw scores) better selection chances. This controls selection pressure, reducing the likelihood of overly fit individuals dominating too early.Rank Selection orders individuals by fitness, assigning higher ranks - (not raw scores) better selection chances. This controls selection pressure, reducing the likelihood of overly fit individuals dominating too early.''' + (not raw scores) better selection chances. This controls selection pressure, reducing the likelihood of overly fit individuals dominating too early.""" def select_top_20_percent_rank(self, chromosomes, selection_ratio=0.2): - fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes] + fitness_scores = [ + (chromosome, self.calculate_fitness(chromosome)) for chromosome in chromosomes + ] fitness_scores.sort(key=lambda x: x[1], reverse=True) ranked_chromosomes = [chromosome for chromosome, _ in fitness_scores] total_chromosomes = len(ranked_chromosomes) num_selected = int(total_chromosomes * selection_ratio) - + selected_chromosomes = [] for i in range(num_selected): selected_chromosomes.append(ranked_chromosomes[i]) @@ -76,31 +83,30 @@ def select_top_20_percent_rank(self, chromosomes, selection_ratio=0.2): return selected_chromosomes - -#RANDOM SELECTION -'''WORKING: Random Selection picks individuals purely at random, disregarding fitness. This maximizes diversity but lacks directional -pressure, often used in early generations or in combination with other methods.''' +# RANDOM SELECTION +"""WORKING: Random Selection picks individuals purely at random, disregarding fitness. This maximizes diversity but lacks directional +pressure, often used in early generations or in combination with other methods.""" def select_random(self, chromosomes, selection_ratio=0.2): num_chromosomes = len(chromosomes) num_selected = int(num_chromosomes * selection_ratio) - + selected_chromosomes = random.sample(chromosomes, num_selected) return selected_chromosomes - -#ELITISM SELECTION -'''WORKING: Elitism Selection ensures the top few individuals automatically pass to the next generation. This protects the best solutions -and accelerates convergence, as the most fit solutions are retained directly.''' +# ELITISM SELECTION +"""WORKING: Elitism Selection ensures the top few individuals automatically pass to the next generation. This protects the best solutions +and accelerates convergence, as the most fit solutions are retained directly.""" def select_elitism(self, chromosomes, fitness_scores, elitism_ratio=0.2): num_chromosomes = len(chromosomes) num_selected = int(num_chromosomes * elitism_ratio) - - sorted_indices = sorted(range(num_chromosomes), key=lambda i: fitness_scores[i], reverse=True) + + sorted_indices = sorted( + range(num_chromosomes), key=lambda i: fitness_scores[i], reverse=True + ) elite_chromosomes = [chromosomes[i] for i in sorted_indices[:num_selected]] return elite_chromosomes - diff --git a/Samples/Selection_Files/selection.py b/Samples/Selection_Files/selection.py index 301e157..94a9a5b 100644 --- a/Samples/Selection_Files/selection.py +++ b/Samples/Selection_Files/selection.py @@ -4,7 +4,17 @@ class TimeIntervalConstant: @staticmethod def get_all_time_slots(): - return ["9:00-10:00", "10:00-11:00", "11:00-12:00", "12:00-1:00", "1:00-2:00", "2:00-3:00", "3:00-4:00", "4:00-5:00"] + return [ + "9:00-10:00", + "10:00-11:00", + "11:00-12:00", + "12:00-1:00", + "1:00-2:00", + "2:00-3:00", + "3:00-4:00", + "4:00-5:00", + ] + class Timetable: def __init__(self): @@ -19,7 +29,7 @@ def __init__(self): "T2": ["S2", "S4", "S6"], "T3": ["S2", "S5"], "T4": ["S7", "S6"], - "T5": ["S5", "S1"] + "T5": ["S5", "S1"], } self.teacher_max_hours = {"T1": 4, "T2": 5, "T3": 4, "T4": 3, "T5": 4} self.room_capacity = {"R1": 30, "R2": 25, "R3": 20} @@ -29,7 +39,7 @@ def generate_day_schedule(self): day_schedule = {} time_slot_classroom_usage = {time_slot: set() for time_slot in self.time_slots} time_slot_teacher_usage = {time_slot: set() for time_slot in self.time_slots} - + for section in self.sections: section_schedule = [] for time_slot in self.time_slots: @@ -38,7 +48,7 @@ def generate_day_schedule(self): "teacher_id": "None", "subject_id": "Break", "classroom_id": "N/A", - "time_slot": time_slot + "time_slot": time_slot, } else: teacher, subject, classroom = None, None, None @@ -47,8 +57,10 @@ def generate_day_schedule(self): teacher = random.choice(self.teachers) subject = random.choice(self.teacher_subject_map[teacher]) classroom = random.choice(self.classrooms) - if teacher not in time_slot_teacher_usage[time_slot] and \ - classroom not in time_slot_classroom_usage[time_slot]: + if ( + teacher not in time_slot_teacher_usage[time_slot] + and classroom not in time_slot_classroom_usage[time_slot] + ): break attempts += 1 @@ -59,7 +71,7 @@ def generate_day_schedule(self): "teacher_id": teacher, "subject_id": subject, "classroom_id": classroom, - "time_slot": time_slot + "time_slot": time_slot, } section_schedule.append(schedule_item) day_schedule[section] = section_schedule @@ -84,9 +96,9 @@ def calculate_fitness(self, chromosome): teacher_load = {} for item in section_schedule: - teacher = item['teacher_id'] - classroom = item['classroom_id'] - time_slot = item['time_slot'] + teacher = item["teacher_id"] + classroom = item["classroom_id"] + time_slot = item["time_slot"] strength = self.section_strength[section] if "Break" in time_slot: @@ -124,38 +136,49 @@ def calculate_fitness(self, chromosome): def select_top_chromosomes(self, population: list, percentage=0.30) -> list: """ Selects the top chromosomes based on their fitness scores from the population. - + :param population: List of chromosomes (each chromosome is a dictionary representing a timetable). :param percentage: The proportion of chromosomes to select (default is 30%). :return: A list of selected chromosomes. """ num_to_select = int(len(population) * percentage) - fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in population] + fitness_scores = [ + (chromosome, self.calculate_fitness(chromosome)) + for chromosome in population + ] sorted_chromosomes = sorted(fitness_scores, key=lambda x: x[1], reverse=True) - + best_num = int(num_to_select * 0.20) worst_num = int(num_to_select * 0.10) middle_num = num_to_select - (best_num + worst_num) - + best_chromosomes = sorted_chromosomes[:best_num] worst_chromosomes = sorted_chromosomes[-worst_num:] - middle_chromosomes = sorted_chromosomes[best_num:best_num + middle_num] - + middle_chromosomes = sorted_chromosomes[best_num : best_num + middle_num] + roulette_num = int(middle_num * 0.70) rank_num = middle_num - roulette_num - + total_fitness = sum(fitness for _, fitness in middle_chromosomes) - roulette_chromosomes = random.choices(middle_chromosomes, weights=[fitness / total_fitness for _, fitness in middle_chromosomes], k=roulette_num) - + roulette_chromosomes = random.choices( + middle_chromosomes, + weights=[fitness / total_fitness for _, fitness in middle_chromosomes], + k=roulette_num, + ) + total_rank = sum(range(1, len(middle_chromosomes) + 1)) - rank_probabilities = [i / total_rank for i in range(1, len(middle_chromosomes) + 1)] - rank_chromosomes = random.choices(middle_chromosomes, weights=rank_probabilities, k=rank_num) - + rank_probabilities = [ + i / total_rank for i in range(1, len(middle_chromosomes) + 1) + ] + rank_chromosomes = random.choices( + middle_chromosomes, weights=rank_probabilities, k=rank_num + ) + selected_chromosomes = [chromosome for chromosome, _ in best_chromosomes] selected_chromosomes += [chromosome for chromosome, _ in worst_chromosomes] selected_chromosomes += [chromosome for chromosome, _ in roulette_chromosomes] selected_chromosomes += [chromosome for chromosome, _ in rank_chromosomes] - + # Output the breakdown print(f"Total Number of Chromosomes: {len(population)}") print(f"30% of Total Chromosomes: {num_to_select}") @@ -163,15 +186,20 @@ def select_top_chromosomes(self, population: list, percentage=0.30) -> list: print(f"Number of Worst Chromosomes: {worst_num}") print(f"Number of Chromosomes for Roulette: {roulette_num}") print(f"Number of Chromosomes for Rank: {rank_num}") - + return selected_chromosomes + # Example usage timetable_obj = Timetable() num_chromosomes = 1000 chromosomes = timetable_obj.create_multiple_timelines(num_chromosomes) -selected_chromosomes = timetable_obj.select_top_chromosomes(chromosomes, percentage=0.30) +selected_chromosomes = timetable_obj.select_top_chromosomes( + chromosomes, percentage=0.30 +) # Output selected chromosomes -for chromosome in selected_chromosomes[:5]: # Displaying the first 5 selected chromosomes +for chromosome in selected_chromosomes[ + :5 +]: # Displaying the first 5 selected chromosomes print(chromosome) diff --git a/Samples/samples.py b/Samples/samples.py index 1453949..ae5227a 100644 --- a/Samples/samples.py +++ b/Samples/samples.py @@ -8,6 +8,8 @@ class TimeSlots: 6: "2:15 - 3:10", 7: "3:30 - 4:25", } + + class SubjectTeacherMap: subject_teacher_map = { "TCS-531": ["AB01", "PK02"], @@ -22,20 +24,22 @@ class SubjectTeacherMap: "SCS-501": ["AP24"], "PCS-503": ["RS11", "DP07", "SP06", "VD25"], "Placement_Class": ["AK26"], - "TCS-511":["PK02"], - "TCS-592":["AB01"], - "TCS-512":["HP18"], - "TCS-519":["DP07"], - "PCS-512":["VD25"] - + "TCS-511": ["PK02"], + "TCS-592": ["AB01"], + "TCS-512": ["HP18"], + "TCS-519": ["DP07"], + "PCS-512": ["VD25"], } + + class WorkingDays: days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + class RoomCapacity: room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} section_strength = {"A": 70, "B": 100, "C": 75, "D": 100} - lab_capacity={"L1":70,"L2":50,"L3":70,"L4":50,"L5":70,"L6":50} + lab_capacity = {"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50} class SubjectWeeklyQuota: @@ -57,7 +61,7 @@ class SubjectWeeklyQuota: class SpecialSubjects: special_subjects = ["Placement_Class"] - Labs=["PCS-506", "PCS-503", "PMA-502"] + Labs = ["PCS-506", "PCS-503", "PMA-502"] class PenaltyConstants: @@ -95,7 +99,7 @@ class TeacherWorkload: "AK23": 5, "AP24": 5, "VD25": 5, - "AK26": 5 + "AK26": 5, } teacher_preferences = { @@ -128,10 +132,10 @@ class TeacherWorkload: } teacher_duty_days = { "AB01": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "PK02": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "PK02": ["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "SS03": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "AA04": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AC05": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "AC05": ["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "SP06": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "DP07": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "AD08": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], @@ -145,1480 +149,1673 @@ class TeacherWorkload: "SJ16": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "AB17": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "HP18": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "SG19": ["Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "SG19": ["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "DT20": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "PA21": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "NB22": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "NB22": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "AK23": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - "AP24": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "VD25": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], - "AK26": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"], + "AP24": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "VD25": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "AK26": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], } + class InterDepartment: - teacher_availability_matrix = { - "AB01": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "PK02": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "SS03": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AA04": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AC05": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "SP06": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "DP07": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AD08": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "RD09": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "BJ10": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "RS11": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "JM12": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "NJ13": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "PM14": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AA15": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "SJ16": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AB17": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "HP18": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "SG19": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "DT20": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "PA21": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "NB22": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AK23": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AP24": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "VD25": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "AK26": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + teacher_availability_matrix = { + "AB01": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "PK02": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SS03": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AA04": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AC05": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SP06": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "DP07": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AD08": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "RD09": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "BJ10": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "RS11": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "JM12": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "NJ13": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "PM14": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AA15": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SJ16": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AB17": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "HP18": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SG19": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "DT20": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "PA21": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "NB22": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AK23": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AP24": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "VD25": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AK26": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], } - + + class Lab_availability: - lab_availability_matrix = { - "L1": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "L2": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "L3": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "L4": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "L5": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], - "L6": [[True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True]], + lab_availability_matrix = { + "L1": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L2": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L3": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L4": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L5": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L6": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], } - + + class SampleChromosome: - schedule1={ - "Monday": { - "A": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L4", - "time_slot": "11:10 - 12:05" - } - ], - "C": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - } - ], - "D": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "3:30 - 4:25" - } - ] - }, - "Tuesday": { - "A": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - } - ], - "B": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Wednesday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "L2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "L2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Thursday": { - "A": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Friday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - } - } - schedule2={ - "Monday": { - "A": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "11:10 - 12:05" - } - ], - "D": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Tuesday": { - "A": [ - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK26", - "subject_id": "Placement_Class", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Wednesday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "11:10 - 12:05" - } - ], - "B": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "3:30 - 4:25" - } - ] - }, - "Thursday": { - "A": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "3:30 - 4:25" - } - ], - "B": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - } - ], - "C": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "NJ13", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - }, - "Friday": { - "A": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "12:05 - 1:00" - } - ], - "B": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "3:30 - 4:25" - } - ], - "C": [ - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:05 - 1:00" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "2:15 - 3:10" - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L5", - "time_slot": "1:20 - 2:15" - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "3:30 - 4:25" - } - ], - "D": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:55 - 10:50" - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L3", - "time_slot": "9:00 - 9:55" - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "11:10 - 12:05" - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "12:05 - 1:00" - } - ] - } - - + schedule1 = { + "Monday": { + "A": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L4", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L4", + "time_slot": "11:10 - 12:05", + }, + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + ], + "D": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25", + }, + ], + }, + "Tuesday": { + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05", + }, + ], + "B": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Wednesday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "L2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "L2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Thursday": { + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + ], + "B": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Friday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + ], + "B": [ + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + } + schedule2 = { + "Monday": { + "A": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "11:10 - 12:05", + }, + ], + "D": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Tuesday": { + "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Wednesday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05", + }, + ], + "B": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25", + }, + ], + }, + "Thursday": { + "A": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Friday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, } diff --git a/__init__.py b/__init__.py index af49d62..4ce37f4 100644 --- a/__init__.py +++ b/__init__.py @@ -1,14 +1,22 @@ from Constants.constant import Defaults -from Constants.helper_routines import (initialize_teacher_availability, - update_matrix_for_best, - update_teacher_availability_matrix) +from Constants.helper_routines import ( + initialize_teacher_availability, + update_matrix_for_best, + update_teacher_availability_matrix, +) from GA.chromosome import TimeTableGeneration from GA.fitness import TimetableFitnessEvaluator from GA.mutation import TimeTableCrossOver, TimeTableMutation from GA.selection import TimeTableSelection -from Samples.samples import (InterDepartment, RoomCapacity, SpecialSubjects, - SubjectTeacherMap, SubjectWeeklyQuota, - TeacherWorkload, TimeSlots) +from Samples.samples import ( + InterDepartment, + RoomCapacity, + SpecialSubjects, + SubjectTeacherMap, + SubjectWeeklyQuota, + TeacherWorkload, + TimeSlots, +) def timetable_generation( @@ -25,7 +33,7 @@ def timetable_generation( teacher_availability_matrix, time_slots, prev_selected_chromosomes=None, - prev_mutated_chromosomes=None + prev_mutated_chromosomes=None, ): timetable_generator = TimeTableGeneration( teacher_subject_mapping=teacher_subject_mapping, @@ -39,7 +47,7 @@ def timetable_generation( subject_quota_limits=subject_quota_limits, teacher_duty_days=teacher_duty_days, teacher_availability_matrix=teacher_availability_matrix, - time_slots=time_slots + time_slots=time_slots, ) timetable, teacher_availability_matrix = timetable_generator.create_timetable( Defaults.initial_no_of_chromosomes @@ -56,7 +64,7 @@ def timetable_generation( timetable_generator.subject_quota_limits, timetable_generator.teacher_availability_preferences, timetable_generator.weekly_workload, - time_slots + time_slots, ) fitness_scores = fitness_calculator.evaluate_timetable_fitness() @@ -74,12 +82,16 @@ def timetable_generation( if i + 1 < len(selected_keys): parent1 = selected_keys[i] parent2 = selected_keys[i + 1] - c1, c2 = crossover_object.perform_crossover(timetable[parent1], timetable[parent2]) + c1, c2 = crossover_object.perform_crossover( + timetable[parent1], timetable[parent2] + ) crossover_chromosomes.append(c1) crossover_chromosomes.append(c2) mutation_object = TimeTableMutation() - mutated_chromosomes = [mutation_object.mutate_schedule_for_week(ch) for ch in crossover_chromosomes] + mutated_chromosomes = [ + mutation_object.mutate_schedule_for_week(ch) for ch in crossover_chromosomes + ] if prev_mutated_chromosomes: mutated_chromosomes.extend(prev_mutated_chromosomes) @@ -94,11 +106,16 @@ def timetable_generation( if best_chromosome: teacher_availability_matrix = update_teacher_availability_matrix( - teacher_availability_matrix, - best_chromosome + teacher_availability_matrix, best_chromosome ) - return best_chromosome, teacher_availability_matrix, selected_chromosomes, mutated_chromosomes + return ( + best_chromosome, + teacher_availability_matrix, + selected_chromosomes, + mutated_chromosomes, + ) + def run_timetable_generation( teacher_subject_mapping, @@ -113,14 +130,19 @@ def run_timetable_generation( teacher_duty_days, teacher_availability_matrix, total_generations, - time_slots + time_slots, ): prev_selected = None prev_mutated = None best_chromosome = None for _ in range(total_generations): - best_chromosome, teacher_availability_matrix, selected, mutated = timetable_generation( + ( + best_chromosome, + teacher_availability_matrix, + selected, + mutated, + ) = timetable_generation( teacher_subject_mapping=teacher_subject_mapping, total_sections=total_sections, total_classrooms=total_classrooms, @@ -134,13 +156,14 @@ def run_timetable_generation( teacher_availability_matrix=teacher_availability_matrix, time_slots=time_slots, prev_selected_chromosomes=prev_selected, - prev_mutated_chromosomes=prev_mutated + prev_mutated_chromosomes=prev_mutated, ) prev_selected = selected prev_mutated = mutated return best_chromosome, teacher_availability_matrix + if __name__ == "__main__": best, correct_teacher_availability_matrix = run_timetable_generation( teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, @@ -154,14 +177,13 @@ def run_timetable_generation( subject_quota_limits=SubjectWeeklyQuota.subject_quota, teacher_duty_days=TeacherWorkload.teacher_duty_days, teacher_availability_matrix=initialize_teacher_availability( - TeacherWorkload.Weekly_workLoad.keys(), - 5, - 7 + TeacherWorkload.Weekly_workLoad.keys(), 5, 7 ), total_generations=Defaults.total_no_of_generations, - time_slots=TimeSlots.time_slots + time_slots=TimeSlots.time_slots, ) from icecream import ic + ic(best) correct_teacher_availability_matrix = update_matrix_for_best( best, @@ -173,7 +195,7 @@ def run_timetable_generation( "Thursday": 3, "Friday": 4, "Saturday": 5, - "Sunday": 6 + "Sunday": 6, }, { "08:00 - 09:00": 1, @@ -183,5 +205,5 @@ def run_timetable_generation( "12:00 - 13:00": 5, "13:50 - 14:50": 6, "14:50 - 15:50": 7, - } + }, ) diff --git a/or-tool.py b/or-tool.py index 2612c4c..7b07413 100644 --- a/or-tool.py +++ b/or-tool.py @@ -1,24 +1,67 @@ -from ortools.sat.python import cp_model import random -days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] -periods = ["9:00 - 9:55", "9:55 - 10:50", "11:10 - 12:05", "12:05 - 1:00", "1:20 - 2:15", "2:15 - 3:10", "3:30 - 4:25"] -sections = ['A','B','C','D'] +from ortools.sat.python import cp_model + +days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] +periods = [ + "9:00 - 9:55", + "9:55 - 10:50", + "11:10 - 12:05", + "12:05 - 1:00", + "1:20 - 2:15", + "2:15 - 3:10", + "3:30 - 4:25", +] +sections = ["A", "B", "C", "D"] rooms = [ - ('R2', 100, 'regular'), - ('R3', 100, 'regular'), - ('R4', 100, 'regular'), - ('R5', 100, 'regular'), - ('L1', 30, 'lab'), - ('L2', 30, 'lab'), - ('L3', 30, 'lab'), - ('L4', 30, 'lab'), - ('L5', 30, 'lab'), - ('L6', 30, 'lab') + ("R2", 100, "regular"), + ("R3", 100, "regular"), + ("R4", 100, "regular"), + ("R5", 100, "regular"), + ("L1", 30, "lab"), + ("L2", 30, "lab"), + ("L3", 30, "lab"), + ("L4", 30, "lab"), + ("L5", 30, "lab"), + ("L6", 30, "lab"), ] # Sample subjects and teachers. -subjects = ['TCS-509','TCS-503','TCS-502','TCS-531','TMA-502','PCS-503','PCS-506','CSP-501','XCS-501','SCS-501','PMA-502','Placement_Class','Library'] -teachers = ['HP18','AC05','JM12','RS11','DT20','AB17','DP07','AA04','AB01','SS03','SP06','NJ13','PA21','AK23','RD09','PM14','AK26','AA15','None'] +subjects = [ + "TCS-509", + "TCS-503", + "TCS-502", + "TCS-531", + "TMA-502", + "PCS-503", + "PCS-506", + "CSP-501", + "XCS-501", + "SCS-501", + "PMA-502", + "Placement_Class", + "Library", +] +teachers = [ + "HP18", + "AC05", + "JM12", + "RS11", + "DT20", + "AB17", + "DP07", + "AA04", + "AB01", + "SS03", + "SP06", + "NJ13", + "PA21", + "AK23", + "RD09", + "PM14", + "AK26", + "AA15", + "None", +] # For demonstration we create a list of events. # Each event has a fixed day, section, period, subject, teacher and group. @@ -30,36 +73,40 @@ for p in range(len(periods)): subj = random.choice(subjects) teach = random.choice(teachers) - group = random.choice(['all', 1, 2]) - events.append({ - 'day': d, - 'section': s, - 'period': p, - 'subject': subj, - 'teacher': teach, - 'group': group - }) + group = random.choice(["all", 1, 2]) + events.append( + { + "day": d, + "section": s, + "period": p, + "subject": subj, + "teacher": teach, + "group": group, + } + ) model = cp_model.CpModel() vars_rooms = [] for i, ev in enumerate(events): allowed = [] for r_idx, (rname, cap, rtype) in enumerate(rooms): - if ev['group'] == 'all': - if rtype == 'regular' and cap >= 60: + if ev["group"] == "all": + if rtype == "regular" and cap >= 60: allowed.append(r_idx) else: - if rtype == 'lab' and cap >= 30: + if rtype == "lab" and cap >= 30: allowed.append(r_idx) if not allowed: allowed = list(range(len(rooms))) - v = model.NewIntVarFromDomain(cp_model.Domain.FromValues(allowed), f'room_{i}') + v = model.NewIntVarFromDomain(cp_model.Domain.FromValues(allowed), f"room_{i}") vars_rooms.append(v) # No two events in the same day and period can share a room. for d in days: for p in range(len(periods)): - idxs = [i for i, ev in enumerate(events) if ev['day'] == d and ev['period'] == p] + idxs = [ + i for i, ev in enumerate(events) if ev["day"] == d and ev["period"] == p + ] if len(idxs) > 1: model.AddAllDifferent([vars_rooms[i] for i in idxs]) @@ -68,8 +115,8 @@ for p in range(len(periods)): teach_to_ids = {} for i, ev in enumerate(events): - if ev['day'] == d and ev['period'] == p and ev['teacher'] != 'None': - teach_to_ids.setdefault(ev['teacher'], []).append(i) + if ev["day"] == d and ev["period"] == p and ev["teacher"] != "None": + teach_to_ids.setdefault(ev["teacher"], []).append(i) for ids in teach_to_ids.values(): if len(ids) > 1: # If a teacher is scheduled twice at the same time, the model becomes infeasible. @@ -83,18 +130,21 @@ if status in (cp_model.FEASIBLE, cp_model.OPTIMAL): for ev, var in zip(events, vars_rooms): room_id = rooms[solver.Value(var)][0] - d, s, p = ev['day'], ev['section'], ev['period'] - schedule.setdefault(d, {}).setdefault(s, []).append({ - 'classroom_id': room_id, - 'group': ev['group'], - 'subject_id': ev['subject'], - 'teacher_id': ev['teacher'], - 'time_slot': periods[p] - }) + d, s, p = ev["day"], ev["section"], ev["period"] + schedule.setdefault(d, {}).setdefault(s, []).append( + { + "classroom_id": room_id, + "group": ev["group"], + "subject_id": ev["subject"], + "teacher_id": ev["teacher"], + "time_slot": periods[p], + } + ) for d in schedule: for s in schedule[d]: - schedule[d][s].sort(key=lambda x: periods.index(x['time_slot'])) + schedule[d][s].sort(key=lambda x: periods.index(x["time_slot"])) from icecream import ic + ic(schedule) else: diff --git a/setup.py b/setup.py index 072643f..c5c0b99 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ "psycopg2-binary==2.9.9", "pytest==7.4.2", "ortools==9.11.4210", - "icecream==2.1.3" + "icecream==2.1.3", ], # noqa: E501 setup_requires=["pytest-runner"], tests_require=["pytest==7.4.2"], diff --git a/test_suite/test_crossover.py b/test_suite/test_crossover.py index 48ae78d..2bfc568 100644 --- a/test_suite/test_crossover.py +++ b/test_suite/test_crossover.py @@ -1,6 +1,6 @@ -#CROSSOVER +# CROSSOVER -#1. def create_chromosome(self): +# 1. def create_chromosome(self): import random import unittest @@ -22,7 +22,7 @@ def __init__(self): "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], "XCS-501": ["DT20", "PA21", "NB22"], "CSP-501": ["AK23"], - "SCS-501": ["AP24"] + "SCS-501": ["AP24"], } self.classrooms = ["R1", "R2", "R3", "R4", "R5"] self.room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} @@ -54,14 +54,14 @@ def create_chromosome(self): time_slot = random.choice(available_slots) # Check for conflicts - if (teacher not in teacher_schedule[time_slot] and - section not in room_schedule[time_slot].get(classroom, [])): - + if teacher not in teacher_schedule[ + time_slot + ] and section not in room_schedule[time_slot].get(classroom, []): entry = { "teacher_id": teacher, "subject_id": subject, "classroom_id": classroom, - "time_slot": time_slot + "time_slot": time_slot, } schedule[day][section].append(entry) used_time_slots.add(time_slot) @@ -119,7 +119,7 @@ def test_room_capacity(self): classroom = entry["classroom_id"] self.assertGreaterEqual( self.scheduler.room_capacity[classroom], - self.scheduler.section_strength[section] + self.scheduler.section_strength[section], ) def test_time_slots_coverage(self): @@ -135,7 +135,7 @@ def test_time_slots_coverage(self): if __name__ == "__main__": unittest.main() -#2. def create_multiple_chromosomes(self, num_chromosomes): +# 2. def create_multiple_chromosomes(self, num_chromosomes): import random import time @@ -153,7 +153,7 @@ def __init__(self, subjects, rooms, days, sections, max_attempts=10): self.schedule = {} # Schedule dictionary to store the timetable def generate_random_schedule(self): - """ Generate a random schedule for each subject and section. """ + """Generate a random schedule for each subject and section.""" timetable = {} for subject in self.subjects: for section in self.sections: @@ -177,7 +177,7 @@ def generate_random_schedule(self): return timetable def is_slot_available(self, subject, section, time_slot): - """ Check if a slot is available by ensuring no conflicts. """ + """Check if a slot is available by ensuring no conflicts.""" # Check if any other subject has been scheduled in the same time slot for key, value in self.schedule.items(): if value[3] == time_slot: # Slot conflict @@ -185,25 +185,29 @@ def is_slot_available(self, subject, section, time_slot): return True def create_chromosome(self): - """ Create a chromosome that represents a valid timetable. """ + """Create a chromosome that represents a valid timetable.""" attempts = 0 while attempts < self.max_attempts: try: timetable = self.generate_random_schedule() - self.schedule = timetable # Assign the generated schedule to the global timetable + self.schedule = ( + timetable # Assign the generated schedule to the global timetable + ) return timetable except RuntimeError as e: print(f"Error: {e}") attempts += 1 if attempts == self.max_attempts: - raise RuntimeError("Failed to generate a valid timetable after multiple attempts.") + raise RuntimeError( + "Failed to generate a valid timetable after multiple attempts." + ) # Reset and retry self.schedule = {} return None def create_multiple_chromosomes(self, num_chromosomes): - """ Create multiple chromosomes (timetables). """ + """Create multiple chromosomes (timetables).""" chromosomes = [] for _ in range(num_chromosomes): chromosome = self.create_chromosome() @@ -215,18 +219,19 @@ def create_multiple_chromosomes(self, num_chromosomes): class TestTimetableScheduler(unittest.TestCase): - def setUp(self): - """ Setup the test case environment. """ - self.subjects = ['PCS-506', 'XCS-501', 'TCS-502', 'CSP-501', 'TCS-531'] - self.rooms = ['Room 101', 'Room 102', 'Room 103'] - self.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] - self.sections = ['A', 'B', 'C'] + """Setup the test case environment.""" + self.subjects = ["PCS-506", "XCS-501", "TCS-502", "CSP-501", "TCS-531"] + self.rooms = ["Room 101", "Room 102", "Room 103"] + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.sections = ["A", "B", "C"] - self.scheduler = TimetableScheduler(self.subjects, self.rooms, self.days, self.sections) + self.scheduler = TimetableScheduler( + self.subjects, self.rooms, self.days, self.sections + ) def test_chromosome_structure(self): - """ Test the structure of each chromosome. """ + """Test the structure of each chromosome.""" num_chromosomes = 3 start_time = time.time() chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) @@ -242,7 +247,7 @@ def test_chromosome_structure(self): print() def test_conflict_free_chromosomes(self): - """ Test that chromosomes are conflict-free. """ + """Test that chromosomes are conflict-free.""" num_chromosomes = 3 start_time = time.time() chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) @@ -256,10 +261,12 @@ def test_conflict_free_chromosomes(self): # Check for conflicts (same time slot for different subjects) for other_subject, other_values in chromosome.items(): if subject != other_subject and time_slot == other_values[3]: - self.fail(f"Conflict detected: {subject} and {other_subject} in the same time slot: {time_slot}") + self.fail( + f"Conflict detected: {subject} and {other_subject} in the same time slot: {time_slot}" + ) def test_create_multiple_chromosomes_count(self): - """ Test if the correct number of chromosomes is generated. """ + """Test if the correct number of chromosomes is generated.""" num_chromosomes = 5 start_time = time.time() chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) @@ -269,7 +276,7 @@ def test_create_multiple_chromosomes_count(self): print(f"Ran {num_chromosomes} tests in {end_time - start_time:.4f} seconds") def test_room_capacity_in_multiple_chromosomes(self): - """ Test room capacity constraint across multiple chromosomes. """ + """Test room capacity constraint across multiple chromosomes.""" num_chromosomes = 3 start_time = time.time() chromosomes = self.scheduler.create_multiple_chromosomes(num_chromosomes) @@ -290,7 +297,7 @@ def test_room_capacity_in_multiple_chromosomes(self): if __name__ == "__main__": unittest.main() -#3. def crossover(self, parent1, parent2): +# 3. def crossover(self, parent1, parent2): import random import unittest @@ -321,34 +328,36 @@ def crossover(self, parent1, parent2): return offspring1, offspring2 + # Unit test for the crossover function class TestCrossoverMethod(unittest.TestCase): - def setUp(self): # Example data to simulate chromosomes for testing - self.subjects = ['PCS-506', 'XCS-501', 'TCS-502', 'CSP-501', 'TCS-531'] - self.rooms = ['Room 101', 'Room 102', 'Room 103'] - self.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] - self.sections = ['A', 'B', 'C'] + self.subjects = ["PCS-506", "XCS-501", "TCS-502", "CSP-501", "TCS-531"] + self.rooms = ["Room 101", "Room 102", "Room 103"] + self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] + self.sections = ["A", "B", "C"] # Example chromosomes (parents) self.parent1 = { - 'Monday': 'PCS-506', - 'Tuesday': 'XCS-501', - 'Wednesday': 'TCS-502', - 'Thursday': 'CSP-501', - 'Friday': 'TCS-531' + "Monday": "PCS-506", + "Tuesday": "XCS-501", + "Wednesday": "TCS-502", + "Thursday": "CSP-501", + "Friday": "TCS-531", } self.parent2 = { - 'Monday': 'TCS-502', - 'Tuesday': 'PCS-506', - 'Wednesday': 'CSP-501', - 'Thursday': 'TCS-531', - 'Friday': 'XCS-501' + "Monday": "TCS-502", + "Tuesday": "PCS-506", + "Wednesday": "CSP-501", + "Thursday": "TCS-531", + "Friday": "XCS-501", } - + # Create an instance of the TimetableScheduler - self.scheduler = TimetableScheduler(self.subjects, self.rooms, self.days, self.sections) + self.scheduler = TimetableScheduler( + self.subjects, self.rooms, self.days, self.sections + ) def test_crossover_correct_number_of_offspring(self): """Test if crossover produces exactly two offspring.""" @@ -359,23 +368,31 @@ def test_crossover_correct_number_of_offspring(self): def test_crossover_correct_assignment(self): """Test if crossover correctly assigns the parts from parents.""" offspring1, offspring2 = self.scheduler.crossover(self.parent1, self.parent2) - + # Get the crossover point from the offspring's first day in the timetable - crossover_point = next(i for i, day in enumerate(self.days) if offspring1[self.days[i]] != self.parent1[self.days[i]]) - + crossover_point = next( + i + for i, day in enumerate(self.days) + if offspring1[self.days[i]] != self.parent1[self.days[i]] + ) + # Check the assignment from parent1 and parent2 in the offspring for i in range(crossover_point): self.assertEqual(offspring1[self.days[i]], self.parent1[self.days[i]]) self.assertEqual(offspring2[self.days[i]], self.parent2[self.days[i]]) - + for i in range(crossover_point, len(self.days)): self.assertEqual(offspring1[self.days[i]], self.parent2[self.days[i]]) self.assertEqual(offspring2[self.days[i]], self.parent1[self.days[i]]) def test_crossover_randomness(self): """Test if the crossover point is truly random by checking different results.""" - offspring1_a, offspring2_a = self.scheduler.crossover(self.parent1, self.parent2) - offspring1_b, offspring2_b = self.scheduler.crossover(self.parent1, self.parent2) + offspring1_a, offspring2_a = self.scheduler.crossover( + self.parent1, self.parent2 + ) + offspring1_b, offspring2_b = self.scheduler.crossover( + self.parent1, self.parent2 + ) # Check that the offspring are not the same (i.e., crossover point was different) self.assertNotEqual(offspring1_a, offspring1_b) @@ -386,15 +403,15 @@ def test_crossover_empty_parent(self): empty_parent = {} with self.assertRaises(KeyError): self.scheduler.crossover(empty_parent, self.parent2) - + with self.assertRaises(KeyError): self.scheduler.crossover(self.parent1, empty_parent) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() -#4. def mutate_timetable(self, chromosome, mutation_rate=0.7): +# 4. def mutate_timetable(self, chromosome, mutation_rate=0.7): import random import unittest @@ -424,29 +441,58 @@ def mutate_timetable(self, chromosome, mutation_rate=0.7): class TestMutateTimetable(unittest.TestCase): - def setUp(self): # Example data to simulate a timetable chromosome - self.classrooms = ['Room 101', 'Room 102', 'Room 103'] - self.sections = ['A', 'B', 'C'] - self.time_slots = ['9:00 AM', '10:00 AM', '11:00 AM', '1:00 PM', '2:00 PM'] + self.classrooms = ["Room 101", "Room 102", "Room 103"] + self.sections = ["A", "B", "C"] + self.time_slots = ["9:00 AM", "10:00 AM", "11:00 AM", "1:00 PM", "2:00 PM"] # Example timetable (chromosome) self.chromosome = { - 'Monday': { - 'A': [{'time_slot': '9:00 AM', 'classroom_id': 'Room 101', 'section': 'A'}], - 'B': [{'time_slot': '10:00 AM', 'classroom_id': 'Room 102', 'section': 'B'}], - 'C': [{'time_slot': '11:00 AM', 'classroom_id': 'Room 103', 'section': 'C'}], + "Monday": { + "A": [ + {"time_slot": "9:00 AM", "classroom_id": "Room 101", "section": "A"} + ], + "B": [ + { + "time_slot": "10:00 AM", + "classroom_id": "Room 102", + "section": "B", + } + ], + "C": [ + { + "time_slot": "11:00 AM", + "classroom_id": "Room 103", + "section": "C", + } + ], + }, + "Tuesday": { + "A": [ + {"time_slot": "9:00 AM", "classroom_id": "Room 101", "section": "A"} + ], + "B": [ + { + "time_slot": "10:00 AM", + "classroom_id": "Room 102", + "section": "B", + } + ], + "C": [ + { + "time_slot": "11:00 AM", + "classroom_id": "Room 103", + "section": "C", + } + ], }, - 'Tuesday': { - 'A': [{'time_slot': '9:00 AM', 'classroom_id': 'Room 101', 'section': 'A'}], - 'B': [{'time_slot': '10:00 AM', 'classroom_id': 'Room 102', 'section': 'B'}], - 'C': [{'time_slot': '11:00 AM', 'classroom_id': 'Room 103', 'section': 'C'}], - } } # Create an instance of the TimetableScheduler - self.scheduler = TimetableScheduler(self.classrooms, self.sections, self.time_slots) + self.scheduler = TimetableScheduler( + self.classrooms, self.sections, self.time_slots + ) def test_mutation_occurrence(self): """Test if the mutation occurs with the expected frequency.""" @@ -455,10 +501,16 @@ def test_mutation_occurrence(self): # Run multiple mutations to get more stable results num_runs = 10 # You can try more runs for higher accuracy mutation_count = 0 - total_entries = sum(len(entries) for day in self.chromosome.values() for section, entries in day.items()) - + total_entries = sum( + len(entries) + for day in self.chromosome.values() + for section, entries in day.items() + ) + for _ in range(num_runs): - mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate) + mutated_chromosome = self.scheduler.mutate_timetable( + self.chromosome, mutation_rate + ) # Count how many entries were mutated mutated_count = 0 @@ -466,7 +518,11 @@ def test_mutation_occurrence(self): for section, entries in section_schedule.items(): for entry in entries: # Check if the mutation applied (i.e., values changed) - if entry["time_slot"] != '9:00 AM' or entry["classroom_id"] != 'Room 101' or entry["section"] != 'A': + if ( + entry["time_slot"] != "9:00 AM" + or entry["classroom_id"] != "Room 101" + or entry["section"] != "A" + ): mutated_count += 1 mutation_percentage = mutated_count / total_entries @@ -474,15 +530,23 @@ def test_mutation_occurrence(self): # Calculate average mutation rate across runs average_mutation_percentage = mutation_count / num_runs - print(f"Average Mutation Rate: {average_mutation_percentage}") # To check the mutation rate in the output + print( + f"Average Mutation Rate: {average_mutation_percentage}" + ) # To check the mutation rate in the output # Assert that mutation occurs in the expected range - self.assertGreaterEqual(average_mutation_percentage, 0.5) # At least 50% mutation - self.assertLessEqual(average_mutation_percentage, 1.0) # No more than 100% mutation + self.assertGreaterEqual( + average_mutation_percentage, 0.5 + ) # At least 50% mutation + self.assertLessEqual( + average_mutation_percentage, 1.0 + ) # No more than 100% mutation def test_mutate_timetable(self): """Test if mutation correctly applies changes to the timetable.""" - mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate=1.0) + mutated_chromosome = self.scheduler.mutate_timetable( + self.chromosome, mutation_rate=1.0 + ) # Check if mutation has applied changes for day, section_schedule in mutated_chromosome.items(): @@ -495,7 +559,9 @@ def test_mutate_timetable(self): def test_mutation_validity(self): """Test if the mutated timetable remains valid.""" - mutated_chromosome = self.scheduler.mutate_timetable(self.chromosome, mutation_rate=1.0) + mutated_chromosome = self.scheduler.mutate_timetable( + self.chromosome, mutation_rate=1.0 + ) # Validate that the mutation results in valid values (time_slot, classroom_id, section) for day, section_schedule in mutated_chromosome.items(): @@ -509,14 +575,16 @@ def test_mutation_validity(self): def test_mutate_empty_chromosome(self): """Test mutation with an empty chromosome.""" empty_chromosome = {} - mutated_chromosome = self.scheduler.mutate_timetable(empty_chromosome, mutation_rate=1.0) + mutated_chromosome = self.scheduler.mutate_timetable( + empty_chromosome, mutation_rate=1.0 + ) self.assertEqual(mutated_chromosome, empty_chromosome) # Should remain empty -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() -#5.def print_chromosomes(self, chromosomes): +# 5.def print_chromosomes(self, chromosomes): import unittest from io import StringIO @@ -547,35 +615,82 @@ def print_chromosomes(self, chromosomes): class TestTimetableScheduler(unittest.TestCase): - def setUp(self): # Example data to simulate a timetable chromosome - self.classrooms = ['Room 101', 'Room 102', 'Room 103'] - self.sections = ['A', 'B', 'C'] - self.teachers = ['T1', 'T2', 'T3'] - self.subjects = ['S1', 'S2', 'S3'] - self.time_slots = ['9:00 AM', '10:00 AM', '11:00 AM', '1:00 PM', '2:00 PM'] + self.classrooms = ["Room 101", "Room 102", "Room 103"] + self.sections = ["A", "B", "C"] + self.teachers = ["T1", "T2", "T3"] + self.subjects = ["S1", "S2", "S3"] + self.time_slots = ["9:00 AM", "10:00 AM", "11:00 AM", "1:00 PM", "2:00 PM"] # Example timetable chromosomes self.chromosomes = [ { - 'Monday': { - 'A': [{'time_slot': '9:00 AM', 'teacher_id': 'T1', 'subject_id': 'S1', 'classroom_id': 'Room 101'}], - 'B': [{'time_slot': '10:00 AM', 'teacher_id': 'T2', 'subject_id': 'S2', 'classroom_id': 'Room 102'}], - 'C': [{'time_slot': '11:00 AM', 'teacher_id': 'T3', 'subject_id': 'S3', 'classroom_id': 'Room 103'}], + "Monday": { + "A": [ + { + "time_slot": "9:00 AM", + "teacher_id": "T1", + "subject_id": "S1", + "classroom_id": "Room 101", + } + ], + "B": [ + { + "time_slot": "10:00 AM", + "teacher_id": "T2", + "subject_id": "S2", + "classroom_id": "Room 102", + } + ], + "C": [ + { + "time_slot": "11:00 AM", + "teacher_id": "T3", + "subject_id": "S3", + "classroom_id": "Room 103", + } + ], + }, + "Tuesday": { + "A": [ + { + "time_slot": "9:00 AM", + "teacher_id": "T1", + "subject_id": "S1", + "classroom_id": "Room 101", + } + ], + "B": [ + { + "time_slot": "10:00 AM", + "teacher_id": "T2", + "subject_id": "S2", + "classroom_id": "Room 102", + } + ], + "C": [ + { + "time_slot": "11:00 AM", + "teacher_id": "T3", + "subject_id": "S3", + "classroom_id": "Room 103", + } + ], }, - 'Tuesday': { - 'A': [{'time_slot': '9:00 AM', 'teacher_id': 'T1', 'subject_id': 'S1', 'classroom_id': 'Room 101'}], - 'B': [{'time_slot': '10:00 AM', 'teacher_id': 'T2', 'subject_id': 'S2', 'classroom_id': 'Room 102'}], - 'C': [{'time_slot': '11:00 AM', 'teacher_id': 'T3', 'subject_id': 'S3', 'classroom_id': 'Room 103'}], - } } ] # Create an instance of the TimetableScheduler - self.scheduler = TimetableScheduler(self.classrooms, self.sections, self.teachers, self.subjects, self.time_slots) - - @patch('sys.stdout', new_callable=StringIO) + self.scheduler = TimetableScheduler( + self.classrooms, + self.sections, + self.teachers, + self.subjects, + self.time_slots, + ) + + @patch("sys.stdout", new_callable=StringIO) def test_print_chromosomes(self, mock_stdout): """Test if print_chromosomes correctly prints the chromosome information.""" self.scheduler.print_chromosomes(self.chromosomes) @@ -630,5 +745,6 @@ def test_print_chromosomes(self, mock_stdout): # Assert if the output matches the expected output self.assertEqual(output, expected_output.strip()) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/test_suite/test_fitness.py b/test_suite/test_fitness.py index 81e7922..75264f7 100644 --- a/test_suite/test_fitness.py +++ b/test_suite/test_fitness.py @@ -1,6 +1,6 @@ # FITNESS -#1. def __init__(self, sections): +# 1. def __init__(self, sections): import unittest @@ -28,7 +28,9 @@ class TimetableFitness: def __init__(self, sections): # Ensure `self.sections` is iterable (convert Sections object to a list if needed) if isinstance(sections, Sections): - self.sections = list(sections) # Convert to list if it is a custom iterable object + self.sections = list( + sections + ) # Convert to list if it is a custom iterable object else: self.sections = sections # Assume it is already a list or other iterable @@ -37,7 +39,10 @@ def __init__(self, sections): self.time_slots = ["9-10 AM", "10-11 AM", "11-12 PM", "1-2 PM", "2-3 PM"] # Teacher-subject mapping - self.subject_teacher_map = {"TCS-531": ["Teacher1", "Teacher2"], "TCS-502": ["Teacher3", "Teacher4"]} + self.subject_teacher_map = { + "TCS-531": ["Teacher1", "Teacher2"], + "TCS-502": ["Teacher3", "Teacher4"], + } # Classroom and capacity details self.classrooms = ["Room1", "Room2", "Room3"] @@ -47,19 +52,24 @@ def __init__(self, sections): self.teacher_schedule = {slot: {} for slot in self.time_slots} self.room_schedule = {slot: {} for slot in self.time_slots} self.assigned_teachers = {section: {} for section in self.sections} - self.section_rooms = {section: self.classrooms[i % len(self.classrooms)] for i, section in enumerate(self.sections)} + self.section_rooms = { + section: self.classrooms[i % len(self.classrooms)] + for i, section in enumerate(self.sections) + } # Subject-specific constraints - self.subject_weekly_quota = { - "TCS-531": 3, - "TCS-502": 3, - "Placement_Class": 1 - } + self.subject_weekly_quota = {"TCS-531": 3, "TCS-502": 3, "Placement_Class": 1} - self.weekly_assignments = {section: {subject: 0 for subject in self.subject_weekly_quota} for section in self.sections} + self.weekly_assignments = { + section: {subject: 0 for subject in self.subject_weekly_quota} + for section in self.sections + } # Teacher constraints - self.teacher_preferences = {teacher_id: [1, 2, 3, 4, 5, 6, 7] for teacher_id in ["Teacher1", "Teacher2", "Teacher3", "Teacher4"]} + self.teacher_preferences = { + teacher_id: [1, 2, 3, 4, 5, 6, 7] + for teacher_id in ["Teacher1", "Teacher2", "Teacher3", "Teacher4"] + } self.teacher_work_load = {teacher: 5 for teacher in self.teacher_preferences} self.teacher_assignments = {} @@ -93,7 +103,7 @@ def test_assigned_teachers_structure(self): if __name__ == "__main__": unittest.main() -#2. def generate_day_schedule(self, day, half_day_sections, week_number): +# 2. def generate_day_schedule(self, day, half_day_sections, week_number): import random from collections import defaultdict @@ -113,7 +123,10 @@ def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab def generate_day_schedule(self, day, half_day_sections, week_number): day_schedule = {} - subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + subject_teacher_usage = { + subject: iter(teachers) + for subject, teachers in self.subject_teacher_map.items() + } for section in self.sections: section_schedule = [] @@ -126,7 +139,7 @@ def generate_day_schedule(self, day, half_day_sections, week_number): time_slot = self.time_slots[index] # Skip if time_slot is already used - if any(item['time_slot'] == time_slot for item in section_schedule): + if any(item["time_slot"] == time_slot for item in section_schedule): index += 1 continue @@ -178,27 +191,33 @@ def generate_day_schedule(self, day, half_day_sections, week_number): next_slot_index = index + 1 if next_slot_index <= num_slots: next_time_slot = self.time_slots[next_slot_index] - section_schedule.append({ - "teacher_id": teacher, - "subject_id": subject, - "classroom_id": assigned_room, - "time_slot": next_time_slot - }) + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": next_time_slot, + } + ) self.room_schedule[next_time_slot][assigned_room] = section self.teacher_schedule[next_time_slot][teacher] = section index += 1 # Skip the next slot for lab - section_schedule.append({ - "teacher_id": teacher, - "subject_id": subject, - "classroom_id": assigned_room, - "time_slot": time_slot - }) + section_schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_room, + "time_slot": time_slot, + } + ) index += 1 day_schedule[section] = section_schedule return day_schedule + + import unittest @@ -212,7 +231,7 @@ def setUp(self): 4: "12:00-1:00", 5: "2:00-3:00", 6: "3:00-4:00", - 7: "4:00-5:00" + 7: "4:00-5:00", } self.subject_teacher_map = { "Math": ["T1", "T2"], @@ -223,7 +242,11 @@ def setUp(self): self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} self.lab = ["Lab1", "Lab2"] self.tt = TimetableGenerator( - self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, self.lab + self.sections, + self.time_slots, + self.subject_teacher_map, + self.section_rooms, + self.lab, ) def test_schedule_structure(self): @@ -255,27 +278,29 @@ def test_lab_double_slots(self): schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) for section, section_schedule in schedule.items(): for i, entry in enumerate(section_schedule): - if "Lab" in entry['subject_id']: - current_slot = entry['time_slot'] - current_index = list(self.tt.time_slots.values()).index(current_slot) + if "Lab" in entry["subject_id"]: + current_slot = entry["time_slot"] + current_index = list(self.tt.time_slots.values()).index( + current_slot + ) # Check if the lab occupies the next time slot if current_index + 1 < len(self.tt.time_slots): - next_slot = section_schedule[i + 1]['time_slot'] + next_slot = section_schedule[i + 1]["time_slot"] expected_next_slot = self.tt.time_slots[current_index + 1] self.assertEqual( - next_slot, + next_slot, expected_next_slot, - f"Lab for section {section} did not occupy consecutive slots as expected." + f"Lab for section {section} did not occupy consecutive slots as expected.", ) def test_teacher_and_room_assignments(self): schedule = self.tt.generate_day_schedule("Monday", ["A"], 1) for section, section_schedule in schedule.items(): for entry in section_schedule: - teacher = entry['teacher_id'] - room = entry['classroom_id'] - time_slot = entry['time_slot'] + teacher = entry["teacher_id"] + room = entry["classroom_id"] + time_slot = entry["time_slot"] self.assertIn(teacher, self.tt.teacher_schedule[time_slot]) self.assertIn(room, self.tt.room_schedule[time_slot]) @@ -283,7 +308,7 @@ def test_teacher_and_room_assignments(self): if __name__ == "__main__": unittest.main() -#3. def create_timetable(self, num_weeks=1): +# 3. def create_timetable(self, num_weeks=1): import random import unittest @@ -297,7 +322,13 @@ def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab self.subject_teacher_map = subject_teacher_map self.section_rooms = section_rooms self.lab = lab - self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] # Ensure days are initialized + self.days = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + ] # Ensure days are initialized self.weekly_assignments = defaultdict(lambda: defaultdict(int)) self.teacher_schedule = defaultdict(dict) self.room_schedule = defaultdict(dict) @@ -305,7 +336,10 @@ def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab def generate_day_schedule(self, day, half_day_sections, week_number): day_schedule = {} - subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + subject_teacher_usage = { + subject: iter(teachers) + for subject, teachers in self.subject_teacher_map.items() + } for section in self.sections: section_schedule = [] @@ -328,7 +362,9 @@ def generate_day_schedule(self, day, half_day_sections, week_number): subject = random.choice(available_subjects) # Handle special rules for Placement_Class and labs - if subject == "Placement_Class" and index <= 4: # Placement classes are after lunch + if ( + subject == "Placement_Class" and index <= 4 + ): # Placement classes are after lunch available_subjects.remove(subject) continue @@ -342,12 +378,16 @@ def generate_day_schedule(self, day, half_day_sections, week_number): teacher_iter = subject_teacher_usage[subject] try: teacher = next(teacher_iter) - self.teacher_assignments.setdefault(section, {})[subject] = teacher + self.teacher_assignments.setdefault(section, {})[ + subject + ] = teacher except StopIteration: teacher_iter = iter(self.subject_teacher_map[subject]) teacher = next(teacher_iter) subject_teacher_usage[subject] = teacher_iter - self.teacher_assignments.setdefault(section, {})[subject] = teacher + self.teacher_assignments.setdefault(section, {})[ + subject + ] = teacher break @@ -406,8 +446,12 @@ def create_timetable(self, num_weeks=1): for week in range(1, num_weeks + 1): week_schedule = {} for week_day in self.days: - half_day_sections = random.sample(self.sections, len(self.sections) // 2) - week_schedule[week_day] = self.generate_day_schedule(week_day, half_day_sections, week) + half_day_sections = random.sample( + self.sections, len(self.sections) // 2 + ) + week_schedule[week_day] = self.generate_day_schedule( + week_day, half_day_sections, week + ) timetable[f"Week {week}"] = week_schedule return timetable @@ -422,7 +466,7 @@ def setUp(self): 4: "12:00-1:00", 5: "2:00-3:00", 6: "3:00-4:00", - 7: "4:00-5:00" + 7: "4:00-5:00", } self.subject_teacher_map = { "Math": ["T1", "T2"], @@ -433,7 +477,11 @@ def setUp(self): self.section_rooms = {"A": "R1", "B": "R2", "C": "R3"} self.lab = ["Lab1", "Lab2"] self.tt = TimetableGenerator( - self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, self.lab + self.sections, + self.time_slots, + self.subject_teacher_map, + self.section_rooms, + self.lab, ) def test_create_timetable(self): @@ -442,7 +490,7 @@ def test_create_timetable(self): self.assertGreater(len(timetable), 0) self.assertIn("Week 1", timetable) self.assertIn("Week 2", timetable) - + # Verify timetable structure for week, week_schedule in timetable.items(): self.assertIsInstance(week_schedule, dict) @@ -456,10 +504,11 @@ def test_create_timetable(self): self.assertIn("classroom_id", entry) self.assertIn("time_slot", entry) + if __name__ == "__main__": unittest.main() -#4. def calculate_fitness(self, chromosome): +# 4. def calculate_fitness(self, chromosome): import random import unittest @@ -467,7 +516,18 @@ def test_create_timetable(self): class TimetableGenerator: - def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab, section_strength, room_capacity, teacher_preferences, teacher_work_load): + def __init__( + self, + sections, + time_slots, + subject_teacher_map, + section_rooms, + lab, + section_strength, + room_capacity, + teacher_preferences, + teacher_work_load, + ): self.sections = sections self.time_slots = time_slots self.subject_teacher_map = subject_teacher_map @@ -485,7 +545,10 @@ def __init__(self, sections, time_slots, subject_teacher_map, section_rooms, lab def generate_day_schedule(self, day, half_day_sections, week_number): day_schedule = {} - subject_teacher_usage = {subject: iter(teachers) for subject, teachers in self.subject_teacher_map.items()} + subject_teacher_usage = { + subject: iter(teachers) + for subject, teachers in self.subject_teacher_map.items() + } for section in self.sections: section_schedule = [] @@ -520,12 +583,16 @@ def generate_day_schedule(self, day, half_day_sections, week_number): teacher_iter = subject_teacher_usage[subject] try: teacher = next(teacher_iter) - self.teacher_assignments.setdefault(section, {})[subject] = teacher + self.teacher_assignments.setdefault(section, {})[ + subject + ] = teacher except StopIteration: teacher_iter = iter(self.subject_teacher_map[subject]) teacher = next(teacher_iter) subject_teacher_usage[subject] = teacher_iter - self.teacher_assignments.setdefault(section, {})[subject] = teacher + self.teacher_assignments.setdefault(section, {})[ + subject + ] = teacher break @@ -592,9 +659,9 @@ def calculate_fitness(self, chromosome): teacher_load = {} for item in section_schedule: - teacher = item['teacher_id'] - classroom = item['classroom_id'] - time_slot = item['time_slot'] + teacher = item["teacher_id"] + classroom = item["classroom_id"] + time_slot = item["time_slot"] strength = self.section_strength.get(section, 0) if "Break" in time_slot: @@ -628,10 +695,9 @@ def calculate_fitness(self, chromosome): section_fitness_scores[day][section] = section_score overall_fitness_score += section_score - week_fitness_scores.append({ - "week": f"Week {week_num}", - "score": overall_fitness_score - }) + week_fitness_scores.append( + {"week": f"Week {week_num}", "score": overall_fitness_score} + ) return week_fitness_scores, section_fitness_scores @@ -646,7 +712,7 @@ def setUp(self): 4: "12:00-1:00", 5: "2:00-3:00", 6: "3:00-4:00", - 7: "4:00-5:00" + 7: "4:00-5:00", } self.subject_teacher_map = { "Math": ["T1", "T2"], @@ -658,12 +724,22 @@ def setUp(self): self.lab = ["Lab1", "Lab2"] self.section_strength = {"A": 40, "B": 35, "C": 50} self.room_capacity = {"R1": 40, "R2": 35, "R3": 50} - self.teacher_preferences = {"T1": ["9:00-10:00", "3:00-4:00"], "T2": ["10:00-11:00"]} + self.teacher_preferences = { + "T1": ["9:00-10:00", "3:00-4:00"], + "T2": ["10:00-11:00"], + } self.teacher_work_load = {"T1": 10, "T2": 15, "T3": 8, "T4": 12, "T5": 6} self.tt = TimetableGenerator( - self.sections, self.time_slots, self.subject_teacher_map, self.section_rooms, - self.lab, self.section_strength, self.room_capacity, self.teacher_preferences, self.teacher_work_load + self.sections, + self.time_slots, + self.subject_teacher_map, + self.section_rooms, + self.lab, + self.section_strength, + self.room_capacity, + self.teacher_preferences, + self.teacher_work_load, ) def test_calculate_fitness(self): @@ -671,16 +747,39 @@ def test_calculate_fitness(self): chromosome = { "Week 1": { "Monday": { - "A": [{"teacher_id": "T1", "subject_id": "Math", "classroom_id": "R1", "time_slot": "9:00-10:00"}], - "B": [{"teacher_id": "T3", "subject_id": "Physics", "classroom_id": "R2", "time_slot": "10:00-11:00"}], + "A": [ + { + "teacher_id": "T1", + "subject_id": "Math", + "classroom_id": "R1", + "time_slot": "9:00-10:00", + } + ], + "B": [ + { + "teacher_id": "T3", + "subject_id": "Physics", + "classroom_id": "R2", + "time_slot": "10:00-11:00", + } + ], }, "Tuesday": { - "C": [{"teacher_id": "T4", "subject_id": "Chemistry Lab", "classroom_id": "Lab1", "time_slot": "11:00-12:00"}], - } + "C": [ + { + "teacher_id": "T4", + "subject_id": "Chemistry Lab", + "classroom_id": "Lab1", + "time_slot": "11:00-12:00", + } + ], + }, } } - week_fitness_scores, section_fitness_scores = self.tt.calculate_fitness(chromosome) + week_fitness_scores, section_fitness_scores = self.tt.calculate_fitness( + chromosome + ) # Test the overall fitness score for Week 1 self.assertIsInstance(week_fitness_scores, list) @@ -693,5 +792,6 @@ def test_calculate_fitness(self): self.assertIn("A", section_fitness_scores["Monday"]) self.assertIsInstance(section_fitness_scores["Monday"]["A"], int) + if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() diff --git a/test_suite/test_mutation.py b/test_suite/test_mutation.py index 2a04cbd..c0fc280 100644 --- a/test_suite/test_mutation.py +++ b/test_suite/test_mutation.py @@ -1,6 +1,6 @@ -#MUTATION TESTS +# MUTATION TESTS -#1. def mutate_time_slots_in_section(self, schedule, section): +# 1. def mutate_time_slots_in_section(self, schedule, section): import random import unittest @@ -13,12 +13,12 @@ def setUp(self): "SectionA": [ {"subject": "Math", "time_slot": "9:00-10:00"}, {"subject": "English", "time_slot": "10:00-11:00"}, - {"subject": "Science", "time_slot": "11:00-12:00"} + {"subject": "Science", "time_slot": "11:00-12:00"}, ], "SectionB": [ {"subject": "History", "time_slot": "9:00-10:00"}, ], - "SectionC": [] # Empty section + "SectionC": [], # Empty section } def mutate_time_slots_in_section(self, schedule, section): @@ -35,7 +35,7 @@ def mutate_time_slots_in_section(self, schedule, section): if section in schedule: section_list = schedule[section] - if len(section_list) < 2: + if len(section_list) < 2: return False time_slots = [entry["time_slot"] for entry in section_list] @@ -55,13 +55,23 @@ def test_valid_mutation(self): mutated_schedule = [entry["time_slot"] for entry in self.schedule["SectionA"]] # Check if time slots were shuffled - self.assertNotEqual(original_schedule, mutated_schedule, "Schedules should differ after mutation") - self.assertCountEqual(original_schedule, mutated_schedule, "Schedules should have the same elements after mutation") + self.assertNotEqual( + original_schedule, + mutated_schedule, + "Schedules should differ after mutation", + ) + self.assertCountEqual( + original_schedule, + mutated_schedule, + "Schedules should have the same elements after mutation", + ) def test_not_enough_time_slots(self): # Test mutation for SectionB (not enough time slots to shuffle) result = self.mutate_time_slots_in_section(self.schedule, "SectionB") - self.assertFalse(result, "Mutation should not occur for single-element sections") + self.assertFalse( + result, "Mutation should not occur for single-element sections" + ) def test_empty_section(self): # Test mutation for SectionC (empty section) @@ -73,12 +83,12 @@ def test_non_existent_section(self): result = self.mutate_time_slots_in_section(self.schedule, "SectionD") self.assertFalse(result, "Mutation should not occur for non-existent sections") + if __name__ == "__main__": unittest.main(verbosity=2) - -#2. def mutate_schedule_for_week(self, weekly_schedule): +# 2. def mutate_schedule_for_week(self, weekly_schedule): import copy import random @@ -110,7 +120,9 @@ def mutate_time_slots_in_section(self, schedule, section): mutated_slots = original_slots[:] attempt_count = 0 - while mutated_slots == original_slots and attempt_count < 5: # Ensure mutation occurs + while ( + mutated_slots == original_slots and attempt_count < 5 + ): # Ensure mutation occurs random.shuffle(mutated_slots) attempt_count += 1 @@ -178,17 +190,37 @@ def setUp(self): self.weekly_schedule = { "Monday": { "A": [ - {"teacher_id": "T1", "subject_id": "Math", "time_slot": "9:00 - 9:55"}, - {"teacher_id": "T2", "subject_id": "Physics", "time_slot": "9:55 - 10:50"}, + { + "teacher_id": "T1", + "subject_id": "Math", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "T2", + "subject_id": "Physics", + "time_slot": "9:55 - 10:50", + }, ], "B": [ - {"teacher_id": "T3", "subject_id": "Chemistry", "time_slot": "11:10 - 12:05"}, - {"teacher_id": "T4", "subject_id": "Biology", "time_slot": "12:05 - 1:00"}, + { + "teacher_id": "T3", + "subject_id": "Chemistry", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "T4", + "subject_id": "Biology", + "time_slot": "12:05 - 1:00", + }, ], }, "Tuesday": { "A": [ - {"teacher_id": "T5", "subject_id": "History", "time_slot": "1:20 - 2:15"}, + { + "teacher_id": "T5", + "subject_id": "History", + "time_slot": "1:20 - 2:15", + }, ] }, } @@ -236,7 +268,9 @@ def mock_shuffle_fn(lst): for section in day.values() for entry in section ] - self.assertNotEqual(original_time_slots, mutated_time_slots, "Mutation did not occur.") + self.assertNotEqual( + original_time_slots, mutated_time_slots, "Mutation did not occur." + ) def test_print_weekly_schedule(self): # This is primarily for manual verification; ensure no exceptions occur @@ -247,7 +281,7 @@ def test_print_weekly_schedule(self): unittest.main() -#3. def print_weekly_schedule(self, weekly_schedule): +# 3. def print_weekly_schedule(self, weekly_schedule): import copy import random @@ -258,20 +292,43 @@ def test_print_weekly_schedule(self): class TestMutation(unittest.TestCase): - def setUp(self): """Setup a basic schedule for testing.""" self.schedule = { "Monday": { "A": [ - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:55 - 10:50"}, - {"teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L5", "time_slot": "9:00 - 9:55"} + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55", + }, ] }, "Tuesday": { - "A": [{"teacher_id": "AK22", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "9:00 - 9:55"}], - "B": [{"teacher_id": "BJ16", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "9:55 - 10:50"}] - } + "A": [ + { + "teacher_id": "AK22", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + } + ], + "B": [ + { + "teacher_id": "BJ16", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + } + ], + }, } def test_mutate_schedule_for_week(self): @@ -288,15 +345,24 @@ def test_mutate_schedule_for_week(self): mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) # Test if the mutated schedule is different from the original schedule - self.assertNotEqual(self.schedule, mutated_schedule, "The mutated schedule should be different from the original schedule.") + self.assertNotEqual( + self.schedule, + mutated_schedule, + "The mutated schedule should be different from the original schedule.", + ) # Test that at least one section was mutated for day in mutated_schedule: for section in mutated_schedule[day]: # Check if time slots were shuffled (i.e., they're different from the original time slots) - for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): - self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], - f"Time slot for {section} on {day} should be mutated.") + for original_entry, mutated_entry in zip( + original_schedule[day][section], mutated_schedule[day][section] + ): + self.assertNotEqual( + original_entry["time_slot"], + mutated_entry["time_slot"], + f"Time slot for {section} on {day} should be mutated.", + ) def test_mutate_schedule_with_no_mutation(self): """ @@ -312,7 +378,11 @@ def test_mutate_schedule_with_no_mutation(self): mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) # Test that the mutated schedule is the same as the original schedule - self.assertEqual(self.schedule, mutated_schedule, "The schedule should remain the same if mutation rate is 0.") + self.assertEqual( + self.schedule, + mutated_schedule, + "The schedule should remain the same if mutation rate is 0.", + ) def test_mutate_schedule_with_max_mutation(self): """ @@ -328,14 +398,23 @@ def test_mutate_schedule_with_max_mutation(self): mutated_schedule = mutator.mutate_schedule_for_week(self.schedule) # Test that the mutated schedule is different from the original schedule - self.assertNotEqual(self.schedule, mutated_schedule, "The mutated schedule should be different from the original schedule.") - + self.assertNotEqual( + self.schedule, + mutated_schedule, + "The mutated schedule should be different from the original schedule.", + ) + # Check that all time slots were mutated for day in mutated_schedule: for section in mutated_schedule[day]: - for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): - self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], - f"Time slot for {section} on {day} should be mutated.") + for original_entry, mutated_entry in zip( + original_schedule[day][section], mutated_schedule[day][section] + ): + self.assertNotEqual( + original_entry["time_slot"], + mutated_entry["time_slot"], + f"Time slot for {section} on {day} should be mutated.", + ) @patch("random.sample") # Mock random.sample to control which sections get mutated def test_mutate_schedule_with_controlled_mutation(self, mock_sample): @@ -357,13 +436,22 @@ def test_mutate_schedule_with_controlled_mutation(self, mock_sample): # Test that only section A was mutated, and others remain the same for day in mutated_schedule: for section in mutated_schedule[day]: - for original_entry, mutated_entry in zip(original_schedule[day][section], mutated_schedule[day][section]): + for original_entry, mutated_entry in zip( + original_schedule[day][section], mutated_schedule[day][section] + ): if section == "A": - self.assertNotEqual(original_entry['time_slot'], mutated_entry['time_slot'], - f"Time slot for {section} on {day} should be mutated.") + self.assertNotEqual( + original_entry["time_slot"], + mutated_entry["time_slot"], + f"Time slot for {section} on {day} should be mutated.", + ) else: - self.assertEqual(original_entry['time_slot'], mutated_entry['time_slot'], - f"Time slot for {section} on {day} should not be mutated.") + self.assertEqual( + original_entry["time_slot"], + mutated_entry["time_slot"], + f"Time slot for {section} on {day} should not be mutated.", + ) + if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() diff --git a/test_suite/test_selection.py b/test_suite/test_selection.py index 6227adc..99e5861 100644 --- a/test_suite/test_selection.py +++ b/test_suite/test_selection.py @@ -1,6 +1,6 @@ # SELECTION TESTS -#1.def get_all_time_slots(): +# 1.def get_all_time_slots(): import unittest @@ -8,11 +8,19 @@ class TestTimeIntervalConstant(unittest.TestCase): - def test_get_all_time_slots(self): - expected_time_slots = ["9:00 - 9:55", "9:55 - 10:50", "11:10 - 12:05", "12:05 - 1:00", "1:20 - 2:15", "2:15 - 3:10", "3:30 - 4:25"] + expected_time_slots = [ + "9:00 - 9:55", + "9:55 - 10:50", + "11:10 - 12:05", + "12:05 - 1:00", + "1:20 - 2:15", + "2:15 - 3:10", + "3:30 - 4:25", + ] self.assertEqual(TimeIntervalConstant.get_all_time_slots(), expected_time_slots) - + + if __name__ == "__main__": unittest.main() @@ -23,41 +31,56 @@ def test_get_all_time_slots(self): class TestTimetable(unittest.TestCase): - def setUp(self): # Initialize the object to be tested self.timetable = Timetable() # Initialize the correct class - + def test_generate_day_schedule_structure(self): # Call the method day_schedule = self.timetable.generate_day_schedule() - + # Check if the returned day_schedule is a dictionary with sections self.assertIsInstance(day_schedule, dict) self.assertGreater(len(day_schedule), 0) - + for section, schedule in day_schedule.items(): - self.assertIn(section, self.timetable.sections) # Ensure sections are correct + self.assertIn( + section, self.timetable.sections + ) # Ensure sections are correct self.assertIsInstance(schedule, list) self.assertGreater(len(schedule), 0) - + def test_teacher_and_classroom_usage(self): # Call the method day_schedule = self.timetable.generate_day_schedule() # Check that no teacher is assigned to the same time slot more than once - time_slot_teacher_usage = {time_slot: set() for time_slot in self.timetable.time_slots} - time_slot_classroom_usage = {time_slot: set() for time_slot in self.timetable.time_slots} + time_slot_teacher_usage = { + time_slot: set() for time_slot in self.timetable.time_slots + } + time_slot_classroom_usage = { + time_slot: set() for time_slot in self.timetable.time_slots + } for section, schedule in day_schedule.items(): for schedule_item in schedule: if "Break" not in schedule_item["time_slot"]: - self.assertNotIn(schedule_item["teacher_id"], time_slot_teacher_usage[schedule_item["time_slot"]]) - self.assertNotIn(schedule_item["classroom_id"], time_slot_classroom_usage[schedule_item["time_slot"]]) + self.assertNotIn( + schedule_item["teacher_id"], + time_slot_teacher_usage[schedule_item["time_slot"]], + ) + self.assertNotIn( + schedule_item["classroom_id"], + time_slot_classroom_usage[schedule_item["time_slot"]], + ) # Track teacher and classroom usage - time_slot_teacher_usage[schedule_item["time_slot"]].add(schedule_item["teacher_id"]) - time_slot_classroom_usage[schedule_item["time_slot"]].add(schedule_item["classroom_id"]) + time_slot_teacher_usage[schedule_item["time_slot"]].add( + schedule_item["teacher_id"] + ) + time_slot_classroom_usage[schedule_item["time_slot"]].add( + schedule_item["classroom_id"] + ) def test_break_periods(self): # Call the method @@ -71,14 +94,15 @@ def test_break_periods(self): break_found = True self.assertEqual(schedule_item["teacher_id"], "None") self.assertEqual(schedule_item["classroom_id"], "N/A") - + self.assertTrue(break_found, "No break periods found in the schedule") + if __name__ == "__main__": unittest.main() -#2. def create_timetable(self): +# 2. def create_timetable(self): import unittest from unittest import mock @@ -87,11 +111,10 @@ def test_break_periods(self): class TestTimetable(unittest.TestCase): - def setUp(self): # Initialize the Timetable object - self.timetable = Timetable() - + self.timetable = Timetable() + def test_create_timetable_structure(self): # Call the method timetable = self.timetable.create_timetable() @@ -99,24 +122,26 @@ def test_create_timetable_structure(self): # Check if the timetable is a dictionary with days as keys self.assertIsInstance(timetable, dict) self.assertGreater(len(timetable), 0) # Ensure timetable is not empty - + # Verify that all days are present for day in self.timetable.days: self.assertIn(day, timetable) - + # Verify that each day contains a schedule (which is a dictionary) for day, day_schedule in timetable.items(): self.assertIsInstance(day_schedule, dict) self.assertGreater(len(day_schedule), 0) - + def test_generate_day_schedule_called(self): # Mock the generate_day_schedule method to check if it's called for each day - with mock.patch.object(self.timetable, 'generate_day_schedule', return_value={}) as mock_method: + with mock.patch.object( + self.timetable, "generate_day_schedule", return_value={} + ) as mock_method: self.timetable.create_timetable() - + # Check if generate_day_schedule was called for each day self.assertEqual(mock_method.call_count, len(self.timetable.days)) - + def test_timetable_content(self): # Call the method timetable = self.timetable.create_timetable() @@ -128,83 +153,129 @@ def test_timetable_content(self): self.assertIsInstance(schedule, list) self.assertGreater(len(schedule), 0) + if __name__ == "__main__": unittest.main() -#3. def create_multiple_timelines(self, num_chromosomes): +# 3. def create_multiple_timelines(self, num_chromosomes): import unittest -from Samples.Selection_Files.selection import \ - Timetable # Adjust the import as necessary +from Samples.Selection_Files.selection import ( + Timetable, +) # Adjust the import as necessary class TestTimetable(unittest.TestCase): - def setUp(self): # Initialize the object to be tested - self.timetable = Timetable() # Ensure this is the correct class that has create_multiple_timelines method - + self.timetable = ( + Timetable() + ) # Ensure this is the correct class that has create_multiple_timelines method + def test_create_multiple_timelines(self): num_chromosomes = 5 # You can change this number to test with different sizes - + # Call the method timelines = self.timetable.create_multiple_timelines(num_chromosomes) - + # Check if the returned value is a list self.assertIsInstance(timelines, list) - + # Check if the list has the correct number of timetables self.assertEqual(len(timelines), num_chromosomes) - + # Optionally, check if each element in the list is a timetable (or has the correct structure) for timetable in timelines: - self.assertIsInstance(timetable, dict) # Assuming the timetable is a dictionary as in your previous methods + self.assertIsInstance( + timetable, dict + ) # Assuming the timetable is a dictionary as in your previous methods # Check that the timetable contains valid data, like sections for section, schedule in timetable.items(): self.assertIn(section, self.timetable.sections) self.assertIsInstance(schedule, list) self.assertGreater(len(schedule), 0) - + + if __name__ == "__main__": unittest.main() -#4. def calculate_fitness(self, chromosome): +# 4. def calculate_fitness(self, chromosome): import unittest -from Samples.Selection_Files.selection import \ - Timetable # Adjust the import path +from Samples.Selection_Files.selection import Timetable # Adjust the import path class TestTimetableFitness(unittest.TestCase): - def setUp(self): # Initialize the object to be tested - self.timetable = Timetable() # Ensure this is the class that has calculate_fitness method - + self.timetable = ( + Timetable() + ) # Ensure this is the class that has calculate_fitness method + def test_fitness_calculation_valid_chromosome(self): # Create a valid chromosome structure chromosome = { "Monday": { "A": [ - {"teacher_id": "T1", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S1"}, - {"teacher_id": "T2", "classroom_id": "R2", "time_slot": "10:00-11:00", "subject_id": "S2"}, - {"teacher_id": "T3", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S3"}, - {"teacher_id": "None", "classroom_id": "N/A", "time_slot": "Break", "subject_id": "Break"}, + { + "teacher_id": "T1", + "classroom_id": "R1", + "time_slot": "9:00-10:00", + "subject_id": "S1", + }, + { + "teacher_id": "T2", + "classroom_id": "R2", + "time_slot": "10:00-11:00", + "subject_id": "S2", + }, + { + "teacher_id": "T3", + "classroom_id": "R3", + "time_slot": "11:00-12:00", + "subject_id": "S3", + }, + { + "teacher_id": "None", + "classroom_id": "N/A", + "time_slot": "Break", + "subject_id": "Break", + }, ], "B": [ - {"teacher_id": "T4", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S4"}, - {"teacher_id": "T5", "classroom_id": "R2", "time_slot": "10:00-11:00", "subject_id": "S5"}, - {"teacher_id": "T1", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S6"}, - {"teacher_id": "None", "classroom_id": "N/A", "time_slot": "Break", "subject_id": "Break"}, + { + "teacher_id": "T4", + "classroom_id": "R1", + "time_slot": "9:00-10:00", + "subject_id": "S4", + }, + { + "teacher_id": "T5", + "classroom_id": "R2", + "time_slot": "10:00-11:00", + "subject_id": "S5", + }, + { + "teacher_id": "T1", + "classroom_id": "R3", + "time_slot": "11:00-12:00", + "subject_id": "S6", + }, + { + "teacher_id": "None", + "classroom_id": "N/A", + "time_slot": "Break", + "subject_id": "Break", + }, ], } } # Calculate fitness fitness_score = self.timetable.calculate_fitness(chromosome) - + # Assert fitness score is within expected range self.assertIsInstance(fitness_score, int) self.assertGreaterEqual(fitness_score, 0) # Fitness should not be negative @@ -214,62 +285,99 @@ def test_fitness_calculation_with_violations(self): chromosome = { "Monday": { "A": [ - {"teacher_id": "T1", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S1"}, - {"teacher_id": "T1", "classroom_id": "R2", "time_slot": "9:00-10:00", "subject_id": "S2"}, # Teacher overlap - {"teacher_id": "T3", "classroom_id": "R3", "time_slot": "11:00-12:00", "subject_id": "S3"}, + { + "teacher_id": "T1", + "classroom_id": "R1", + "time_slot": "9:00-10:00", + "subject_id": "S1", + }, + { + "teacher_id": "T1", + "classroom_id": "R2", + "time_slot": "9:00-10:00", + "subject_id": "S2", + }, # Teacher overlap + { + "teacher_id": "T3", + "classroom_id": "R3", + "time_slot": "11:00-12:00", + "subject_id": "S3", + }, ], "B": [ - {"teacher_id": "T4", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S4"}, - {"teacher_id": "T5", "classroom_id": "R1", "time_slot": "9:00-10:00", "subject_id": "S5"}, # Room overlap + { + "teacher_id": "T4", + "classroom_id": "R1", + "time_slot": "9:00-10:00", + "subject_id": "S4", + }, + { + "teacher_id": "T5", + "classroom_id": "R1", + "time_slot": "9:00-10:00", + "subject_id": "S5", + }, # Room overlap ], } } # Calculate fitness fitness_score = self.timetable.calculate_fitness(chromosome) - + # Assert fitness score accounts for penalties self.assertIsInstance(fitness_score, int) - self.assertLess(fitness_score, 100) # Expect reduced fitness score due to violations + self.assertLess( + fitness_score, 100 + ) # Expect reduced fitness score due to violations def test_fitness_calculation_with_over_capacity(self): # Create a chromosome where room capacity is exceeded chromosome = { "Monday": { "A": [ - {"teacher_id": "T1", "classroom_id": "R3", "time_slot": "9:00-10:00", "subject_id": "S1"}, # Over capacity + { + "teacher_id": "T1", + "classroom_id": "R3", + "time_slot": "9:00-10:00", + "subject_id": "S1", + }, # Over capacity ] } } # Calculate fitness fitness_score = self.timetable.calculate_fitness(chromosome) - + # Assert fitness score is reduced due to capacity violation self.assertIsInstance(fitness_score, int) - self.assertLess(fitness_score, 100) # Expect reduced fitness score due to capacity penalty - + self.assertLess( + fitness_score, 100 + ) # Expect reduced fitness score due to capacity penalty + def test_fitness_calculation_no_timetable(self): # Test with an empty chromosome chromosome = {} # Calculate fitness fitness_score = self.timetable.calculate_fitness(chromosome) - + # Assert fitness score is zero self.assertEqual(fitness_score, 0) + if __name__ == "__main__": unittest.main() -#5. def select_top_chromosomes(self, population: list, percentage=0.30) -> list: +# 5. def select_top_chromosomes(self, population: list, percentage=0.30) -> list: import random def select_top_chromosomes(self, population: list, percentage=0.30) -> list: num_to_select = int(len(population) * percentage) - fitness_scores = [(chromosome, self.calculate_fitness(chromosome)) for chromosome in population] + fitness_scores = [ + (chromosome, self.calculate_fitness(chromosome)) for chromosome in population + ] sorted_chromosomes = sorted(fitness_scores, key=lambda x: x[1], reverse=True) best_num = int(num_to_select * 0.20) @@ -278,7 +386,7 @@ def select_top_chromosomes(self, population: list, percentage=0.30) -> list: best_chromosomes = sorted_chromosomes[:best_num] worst_chromosomes = sorted_chromosomes[-worst_num:] - middle_chromosomes = sorted_chromosomes[best_num:best_num + middle_num] + middle_chromosomes = sorted_chromosomes[best_num : best_num + middle_num] roulette_num = int(middle_num * 0.70) rank_num = middle_num - roulette_num @@ -289,18 +397,18 @@ def select_top_chromosomes(self, population: list, percentage=0.30) -> list: roulette_chromosomes = random.choices( middle_chromosomes, weights=[fitness / total_fitness for _, fitness in middle_chromosomes], - k=roulette_num + k=roulette_num, ) else: roulette_chromosomes = [] if middle_chromosomes: total_rank = sum(range(1, len(middle_chromosomes) + 1)) - rank_probabilities = [i / total_rank for i in range(1, len(middle_chromosomes) + 1)] + rank_probabilities = [ + i / total_rank for i in range(1, len(middle_chromosomes) + 1) + ] rank_chromosomes = random.choices( - middle_chromosomes, - weights=rank_probabilities, - k=rank_num + middle_chromosomes, weights=rank_probabilities, k=rank_num ) else: rank_chromosomes = [] @@ -310,4 +418,4 @@ def select_top_chromosomes(self, population: list, percentage=0.30) -> list: selected_chromosomes += [chromosome for chromosome, _ in roulette_chromosomes] selected_chromosomes += [chromosome for chromosome, _ in rank_chromosomes] - return selected_chromosomes \ No newline at end of file + return selected_chromosomes diff --git a/visualizer.py b/visualizer.py index 5e707aa..57354fc 100644 --- a/visualizer.py +++ b/visualizer.py @@ -9,29 +9,29 @@ "subject_id": "SCS-501", "classroom_id": "R1", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "B": [ { @@ -39,29 +39,29 @@ "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "C": [ { @@ -69,29 +69,29 @@ "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "HP18", "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "VD25", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "D": [ { @@ -99,50 +99,50 @@ "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "SG19", "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R4", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "E": [ { @@ -150,50 +150,50 @@ "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "PA21", "subject_id": "XCS-501", "classroom_id": "R5", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "F": [ { @@ -201,51 +201,51 @@ "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R6", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "16:50 - 17:50", - "group": "all" - } - ] + "group": "all", + }, + ], }, "Tuesday": { "A": [ @@ -254,29 +254,29 @@ "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "B": [ { @@ -284,29 +284,29 @@ "subject_id": "CSP-501", "classroom_id": "R2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "C": [ { @@ -314,29 +314,29 @@ "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "HP18", "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "PA21", "subject_id": "XCS-501", "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "D": [ { @@ -344,50 +344,50 @@ "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "NB22", "subject_id": "XCS-501", "classroom_id": "R4", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "E": [ { @@ -395,50 +395,50 @@ "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AC05", "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R5", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "F": [ { @@ -446,51 +446,51 @@ "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R6", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "VD25", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "VD25", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "16:50 - 17:50", - "group": "all" - } - ] + "group": "all", + }, + ], }, "Wednesday": { "A": [ @@ -499,29 +499,29 @@ "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R1", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "B": [ { @@ -529,29 +529,29 @@ "subject_id": "PCS-506", "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "PA21", "subject_id": "XCS-501", "classroom_id": "R2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "C": [ { @@ -559,29 +559,29 @@ "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R3", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AK23", "subject_id": "CSP-501", "classroom_id": "R3", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "NB22", "subject_id": "XCS-501", "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "D": [ { @@ -589,50 +589,50 @@ "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "E": [ { @@ -640,50 +640,50 @@ "subject_id": "XCS-501", "classroom_id": "R5", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R5", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "F": [ { @@ -691,51 +691,51 @@ "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "VD25", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "VD25", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R6", "time_slot": "16:50 - 17:50", - "group": "all" - } - ] + "group": "all", + }, + ], }, "Thursday": { "A": [ @@ -744,29 +744,29 @@ "subject_id": "XCS-501", "classroom_id": "R1", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "TCS-503", "classroom_id": "R1", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "B": [ { @@ -774,29 +774,29 @@ "subject_id": "TCS-503", "classroom_id": "R2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AP24", "subject_id": "SCS-501", "classroom_id": "R2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R2", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "C": [ { @@ -804,29 +804,29 @@ "subject_id": "SCS-501", "classroom_id": "R3", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AC05", "subject_id": "TCS-503", "classroom_id": "R3", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "D": [ { @@ -834,50 +834,50 @@ "subject_id": "TCS-503", "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "E": [ { @@ -885,50 +885,50 @@ "subject_id": "TCS-503", "classroom_id": "R5", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "TMA-502", "classroom_id": "R5", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "AA15", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "AA15", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "F": [ { @@ -936,51 +936,51 @@ "subject_id": "TCS-503", "classroom_id": "R6", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AA15", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AA15", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "JM12", "subject_id": "TMA-502", "classroom_id": "R6", "time_slot": "16:50 - 17:50", - "group": "all" - } - ] + "group": "all", + }, + ], }, "Friday": { "A": [ @@ -989,29 +989,29 @@ "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "SJ16", "subject_id": "TCS-509", "classroom_id": "R1", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "BJ10", "subject_id": "TMA-502", "classroom_id": "R1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "B": [ { @@ -1019,29 +1019,29 @@ "subject_id": "TCS-502", "classroom_id": "R2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "JM12", "subject_id": "TMA-502", "classroom_id": "R2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB17", "subject_id": "TCS-509", "classroom_id": "R2", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "C": [ { @@ -1049,29 +1049,29 @@ "subject_id": "TMA-502", "classroom_id": "R3", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AC05", "subject_id": "TCS-502", "classroom_id": "R3", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "PK02", "subject_id": "TCS-531", "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "D": [ { @@ -1079,50 +1079,50 @@ "subject_id": "TCS-509", "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "DP07", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "SS03", "subject_id": "TCS-502", "classroom_id": "R4", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "E": [ { @@ -1130,50 +1130,50 @@ "subject_id": "TCS-531", "classroom_id": "R5", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AA04", "subject_id": "TCS-502", "classroom_id": "R5", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "VD25", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "VD25", "subject_id": "PCS-503", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "RD09", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "SG19", "subject_id": "TCS-509", "classroom_id": "R5", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "F": [ { @@ -1181,51 +1181,51 @@ "subject_id": "TCS-509", "classroom_id": "R6", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "AB01", "subject_id": "TCS-531", "classroom_id": "R6", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "SP06", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "DT20", "subject_id": "XCS-501", "classroom_id": "R6", "time_slot": "16:50 - 17:50", - "group": "all" - } - ] + "group": "all", + }, + ], }, "Saturday": { "A": [ @@ -1234,29 +1234,29 @@ "subject_id": "Library", "classroom_id": "R1", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R1", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R1", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "B": [ { @@ -1264,29 +1264,29 @@ "subject_id": "Library", "classroom_id": "R2", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R2", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R2", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "C": [ { @@ -1294,29 +1294,29 @@ "subject_id": "Library", "classroom_id": "R3", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R3", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R3", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R3", "time_slot": "12:00 - 13:00", - "group": "all" - } + "group": "all", + }, ], "D": [ { @@ -1324,50 +1324,50 @@ "subject_id": "Library", "classroom_id": "R4", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R4", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "RS11", "subject_id": "PCS-503", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L1", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R4", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "E": [ { @@ -1375,50 +1375,50 @@ "subject_id": "Library", "classroom_id": "R5", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R5", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L1", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PCS-506", "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R5", "time_slot": "16:50 - 17:50", - "group": "all" - } + "group": "all", + }, ], "F": [ { @@ -1426,52 +1426,52 @@ "subject_id": "Library", "classroom_id": "R6", "time_slot": "08:00 - 09:00", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R6", "time_slot": "09:00 - 10:00", - "group": "all" + "group": "all", }, { "teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "11:00 - 12:00", - "group": "all" + "group": "all", }, { "teacher_id": "PM14", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "12:00 - 13:00", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "13:50 - 14:50", - "group": "all" + "group": "all", }, { "teacher_id": "AD08", "subject_id": "PMA-502", "classroom_id": "L2", "time_slot": "14:50 - 15:50", - "group": "all" + "group": "all", }, { "teacher_id": "None", "subject_id": "Library", "classroom_id": "R6", "time_slot": "16:50 - 17:50", - "group": "all" - } - ] - } + "group": "all", + }, + ], + }, } days_order = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] @@ -1482,7 +1482,7 @@ "12:00 - 13:00", "13:50 - 14:50", "14:50 - 15:50", - "16:50 - 17:50" + "16:50 - 17:50", ] @@ -1491,17 +1491,20 @@ def get_section_table(timetable, section): for day, day_data in timetable.items(): if section in day_data: for slot in day_data[section]: - rows.append({ - "Day": day, - "Time": slot["time_slot"], - "Subject": slot["subject_id"], - }) + rows.append( + { + "Day": day, + "Time": slot["time_slot"], + "Subject": slot["subject_id"], + } + ) df = pd.DataFrame(rows) df["Day"] = pd.Categorical(df["Day"], categories=days_order, ordered=True) df["Time"] = pd.Categorical(df["Time"], categories=time_order, ordered=True) pivoted = df.pivot(index="Day", columns="Time", values="Subject").fillna("") return pivoted + # List of sections to generate tables for. sections = ["A", "B", "C", "D", "E", "F"] From efcfd5e6284c622ab3373992e9d5a3872e2a713c Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 1 Mar 2025 07:17:50 +0530 Subject: [PATCH 52/67] HOD request section <-> teacher. --- GA/__init__.py | 59 ++++++++++++++++++++++---------------------- GA/chromosome.py | 64 +++++++++++++++++++++++++++--------------------- 2 files changed, 65 insertions(+), 58 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index ff20334..ae2705b 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -32,6 +32,7 @@ class TimetableConfig: time_slot_map: dict prev_selected: dict = None prev_mutated: list = None + fixed_teacher_assignment: dict = None class TimetableEngine: @@ -69,10 +70,9 @@ def _generate_timetable(self, teacher_matrix): teacher_availability_matrix=teacher_matrix, lab_availability_matrix=self.lab_availability, time_slots=self.config.time_slots, + fixed_teacher_assignment=self.config.fixed_teacher_assignment or {} ) - timetable, updated_teacher = tg.create_timetable(self.config.total_generations)[ - :2 - ] + timetable, updated_teacher = tg.create_timetable(self.config.total_generations)[:2] fitness = TimetableFitnessEvaluator( timetable=timetable, all_sections=list(tg.sections_manager.keys()), @@ -101,10 +101,7 @@ def _generate_timetable(self, teacher_matrix): ) crossover_chromosomes.extend([c1, c2]) - mutated = [ - TimeTableMutation().mutate_schedule_for_week(ch) - for ch in crossover_chromosomes - ] + mutated = [TimeTableMutation().mutate_schedule_for_week(ch) for ch in crossover_chromosomes] if self.config.prev_mutated: mutated.extend(self.config.prev_mutated) @@ -116,24 +113,22 @@ def _generate_timetable(self, teacher_matrix): best_chromosome = timetable[key] if best_chromosome: - updated_teacher = update_teacher_availability_matrix( - teacher_matrix, best_chromosome - ) + updated_teacher = update_teacher_availability_matrix(teacher_matrix, best_chromosome) return best_chromosome, updated_teacher, selected, mutated def run(self): initial_teacher = copy.deepcopy(self.teacher_availability) updated_teacher = copy.deepcopy(initial_teacher) best_chromosome = None + self.config.prev_selected = None self.config.prev_mutated = None for _ in range(self.config.total_generations): teacher_copy = copy.deepcopy(initial_teacher) - best, updated_teacher, selected, mutated = self._generate_timetable( - teacher_copy - ) + best, updated_teacher, selected, mutated = self._generate_timetable(teacher_copy) best_chromosome = best + self.config.prev_selected = selected self.config.prev_mutated = mutated @@ -143,6 +138,7 @@ def run(self): self.config.day_map, self.config.time_slot_map, ) + updated_lab = self._update_lab_availability(best_chromosome) return best_chromosome, updated_teacher, updated_lab @@ -170,20 +166,20 @@ def run(self): ) config = TimetableConfig( - teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, - total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, - total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, - total_labs={"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, - teacher_preferences=TeacherWorkload.teacher_preferences, - teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, - special_subjects=SpecialSubjects.special_subjects, - labs=SpecialSubjects.Labs, - subject_quota_limits=SubjectWeeklyQuota.subject_quota, - teacher_duty_days=TeacherWorkload.teacher_duty_days, - teacher_availability_matrix=teacher_availability, - lab_availability_matrix=lab_matrix, - total_generations=Defaults.total_no_of_generations, - time_slots={ + teacher_subject_mapping = SubjectTeacherMap.subject_teacher_map, + total_sections = {"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs = {"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, + teacher_preferences = TeacherWorkload.teacher_preferences, + teacher_weekly_workload = TeacherWorkload.Weekly_workLoad, + special_subjects = SpecialSubjects.special_subjects, + labs = SpecialSubjects.Labs, + subject_quota_limits = SubjectWeeklyQuota.subject_quota, + teacher_duty_days = TeacherWorkload.teacher_duty_days, + teacher_availability_matrix = teacher_availability, + lab_availability_matrix = lab_matrix, + total_generations = Defaults.total_no_of_generations, + time_slots = { 1: "9:00 - 9:55", 2: "9:55 - 10:50", 3: "11:10 - 12:05", @@ -192,7 +188,7 @@ def run(self): 6: "2:15 - 3:10", 7: "3:30 - 4:25", }, - day_map={ + day_map = { "Monday": 0, "Tuesday": 1, "Wednesday": 2, @@ -201,7 +197,7 @@ def run(self): "Saturday": 5, "Sunday": 6, }, - time_slot_map={ + time_slot_map = { "9:00 - 9:55": 1, "9:55 - 10:50": 2, "11:10 - 12:05": 3, @@ -210,11 +206,14 @@ def run(self): "2:15 - 3:10": 6, "3:30 - 4:25": 7, }, + fixed_teacher_assignment = { + "A": {"TCS-531": "AB01", "TMA-502": "HP18"}, # section: {"subject": teacher} + "B": {"TCS-503": "BJ10"} + } ) engine = TimetableEngine(config) best_tt, final_teacher, final_lab = engine.run() from icecream import ic - ic(best_tt, final_teacher, final_lab) diff --git a/GA/chromosome.py b/GA/chromosome.py index 5b40d89..f67660d 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -21,6 +21,7 @@ def __init__( teacher_availability_matrix: dict, lab_availability_matrix: dict, time_slots: dict, + fixed_teacher_assignment: dict = None, ): self.sections_manager = total_sections self.classrooms_manager = total_classrooms @@ -36,9 +37,8 @@ def __init__( self.weekly_workload = teacher_weekly_workload self.teacher_availability_matrix = teacher_availability_matrix self.initial_lab_availability_matrix = copy.deepcopy(lab_availability_matrix) - self.lab_availability_matrix = copy.deepcopy( - self.initial_lab_availability_matrix - ) + self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) + self.fixed_teacher_assignment = fixed_teacher_assignment or {} self._map_sections_to_classrooms() def _map_sections_to_classrooms(self) -> dict: @@ -49,25 +49,27 @@ def _map_sections_to_classrooms(self) -> dict: self.sections_manager.items(), key=lambda x: x[1], reverse=True ) self.section_to_classroom_map = {} + for section, strength in sorted_sections: for i, (classroom, capacity) in enumerate(sorted_classrooms): if capacity >= strength: self.section_to_classroom_map[section] = classroom sorted_classrooms.pop(i) break + return self.section_to_classroom_map def _initialize_teacher_workload_tracker(self) -> dict: - return {teacher: 0 for teacher in self.weekly_workload} + return { + teacher: 0 + for teacher in self.weekly_workload + } - def _get_available_subjects( - self, section: str, subject_usage_tracker: dict - ) -> list: + def _get_available_subjects(self, section: str, subject_usage_tracker: dict) -> list: return [ subject for subject in self.subject_teacher_mapping - if subject_usage_tracker[section][subject] - < self.subject_quota_limits.get(subject, 0) + if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] def _assign_subject_and_teacher( @@ -81,43 +83,49 @@ def _assign_subject_and_teacher( teacher_availability_matrix: dict, day_index: int, ) -> tuple: - available_subjects = self._get_available_subjects( - section, subject_usage_tracker - ) + available_subjects = self._get_available_subjects(section, subject_usage_tracker) random.shuffle(available_subjects) assigned_teacher = None selected_subject = None assigned_room = assigned_classroom for subject in available_subjects: - if ( - subject in self.lab_subject_list or subject == "Placement_Class" - ) and slot_index not in [1, 3, 5]: + if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: continue if subject not in subjects_scheduled_today: + # First, check for a fixed teacher assignment for (section, subject) + fixed_teacher = self.fixed_teacher_assignment.get(section, {}).get(subject) + if fixed_teacher: + if ( + fixed_teacher in teacher_availability_matrix and + len(teacher_availability_matrix[fixed_teacher]) > day_index and + len(teacher_availability_matrix[fixed_teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[fixed_teacher][day_index][slot_index - 1] + ): + assigned_teacher = fixed_teacher + teacher_workload_tracker[fixed_teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + break + + # Otherwise, assign normally from the available pool teachers = self.subject_teacher_mapping[subject] preferred_teachers = [ - t - for t in teachers - if self.teacher_availability_preferences.get(t, []) + t for t in teachers if self.teacher_availability_preferences.get(t, []) ] - for teacher in sorted( - preferred_teachers, key=lambda t: teacher_workload_tracker[t] - ): + for teacher in sorted(preferred_teachers, key=lambda t: teacher_workload_tracker[t]): if ( - teacher in teacher_availability_matrix - and len(teacher_availability_matrix[teacher]) > day_index - and len(teacher_availability_matrix[teacher][day_index]) - > (slot_index - 1) - and teacher_availability_matrix[teacher][day_index][ - slot_index - 1 - ] + teacher in teacher_availability_matrix and + len(teacher_availability_matrix[teacher]) > day_index and + len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[teacher][day_index][slot_index - 1] ): assigned_teacher = teacher teacher_workload_tracker[teacher] += 1 selected_subject = subject subjects_scheduled_today.add(subject) break + if assigned_teacher: break From 1be71b2e2c6e42b9b3162a22b3227375bda0d5d3 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 1 Mar 2025 08:46:46 +0530 Subject: [PATCH 53/67] HOD request section <-> teacher. --- GA/__init__.py | 81 +++++++++++++++++++++++++++++++++++------------- GA/chromosome.py | 31 ++++++++++++------ 2 files changed, 82 insertions(+), 30 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index ae2705b..fd7f346 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -143,6 +143,48 @@ def run(self): return best_chromosome, updated_teacher, updated_lab +def run_timetable_generation( + teacher_subject_mapping: dict, + total_sections: dict, + total_classrooms: dict, + total_labs: dict, + teacher_preferences: dict, + teacher_weekly_workload: dict, + special_subjects: dict, + labs: dict, + subject_quota_limits: dict, + teacher_duty_days: dict, + teacher_availability_matrix: dict, + lab_availability_matrix: dict, + total_generations: int, + time_slots: dict, + day_map: dict, + time_slot_map: dict, + fixed_teacher_assignment: dict = None +): + config = TimetableConfig( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, + total_generations=total_generations, + time_slots=time_slots, + day_map=day_map, + time_slot_map=time_slot_map, + fixed_teacher_assignment=fixed_teacher_assignment or {} + ) + engine = TimetableEngine(config) + return engine.run() + + if __name__ == "__main__": from Constants.constant import Defaults from Samples.samples import ( @@ -165,21 +207,21 @@ def run(self): TeacherWorkload.Weekly_workLoad.keys(), 5, 7 ) - config = TimetableConfig( - teacher_subject_mapping = SubjectTeacherMap.subject_teacher_map, - total_sections = {"A": 70, "B": 100, "C": 75, "D": 100}, - total_classrooms = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, - total_labs = {"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, - teacher_preferences = TeacherWorkload.teacher_preferences, - teacher_weekly_workload = TeacherWorkload.Weekly_workLoad, - special_subjects = SpecialSubjects.special_subjects, - labs = SpecialSubjects.Labs, - subject_quota_limits = SubjectWeeklyQuota.subject_quota, - teacher_duty_days = TeacherWorkload.teacher_duty_days, - teacher_availability_matrix = teacher_availability, - lab_availability_matrix = lab_matrix, - total_generations = Defaults.total_no_of_generations, - time_slots = { + best_tt, final_teacher, final_lab = run_timetable_generation( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs={"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + labs=SpecialSubjects.Labs, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_availability_matrix=teacher_availability, + lab_availability_matrix=lab_matrix, + total_generations=Defaults.total_no_of_generations, + time_slots={ 1: "9:00 - 9:55", 2: "9:55 - 10:50", 3: "11:10 - 12:05", @@ -188,7 +230,7 @@ def run(self): 6: "2:15 - 3:10", 7: "3:30 - 4:25", }, - day_map = { + day_map={ "Monday": 0, "Tuesday": 1, "Wednesday": 2, @@ -197,7 +239,7 @@ def run(self): "Saturday": 5, "Sunday": 6, }, - time_slot_map = { + time_slot_map={ "9:00 - 9:55": 1, "9:55 - 10:50": 2, "11:10 - 12:05": 3, @@ -206,14 +248,11 @@ def run(self): "2:15 - 3:10": 6, "3:30 - 4:25": 7, }, - fixed_teacher_assignment = { + fixed_teacher_assignment={ "A": {"TCS-531": "AB01", "TMA-502": "HP18"}, # section: {"subject": teacher} "B": {"TCS-503": "BJ10"} } ) - engine = TimetableEngine(config) - best_tt, final_teacher, final_lab = engine.run() - from icecream import ic ic(best_tt, final_teacher, final_lab) diff --git a/GA/chromosome.py b/GA/chromosome.py index f67660d..69c7daf 100644 --- a/GA/chromosome.py +++ b/GA/chromosome.py @@ -43,21 +43,27 @@ def __init__( def _map_sections_to_classrooms(self) -> dict: sorted_classrooms = sorted( - self.classrooms_manager.items(), key=lambda x: x[1], reverse=True + self.classrooms_manager.items(), + key = lambda item: item[1], + reverse=True ) sorted_sections = sorted( - self.sections_manager.items(), key=lambda x: x[1], reverse=True + self.sections_manager.items(), + key = lambda item: item[1], + reverse = True ) - self.section_to_classroom_map = {} + section_classroom_map = {} - for section, strength in sorted_sections: - for i, (classroom, capacity) in enumerate(sorted_classrooms): - if capacity >= strength: - self.section_to_classroom_map[section] = classroom - sorted_classrooms.pop(i) + for section, student_count in sorted_sections: + for index, (classroom, capacity) in enumerate(sorted_classrooms): + if capacity >= student_count: + section_classroom_map[section] = classroom + sorted_classrooms.pop(index) break - return self.section_to_classroom_map + self.section_to_classroom_map = section_classroom_map + return section_classroom_map + def _initialize_teacher_workload_tracker(self) -> dict: return { @@ -65,6 +71,7 @@ def _initialize_teacher_workload_tracker(self) -> dict: for teacher in self.weekly_workload } + def _get_available_subjects(self, section: str, subject_usage_tracker: dict) -> list: return [ subject @@ -72,6 +79,7 @@ def _get_available_subjects(self, section: str, subject_usage_tracker: dict) -> if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) ] + def _assign_subject_and_teacher( self, section: str, @@ -134,6 +142,7 @@ def _assign_subject_and_teacher( assigned_teacher = "None" return assigned_teacher, selected_subject, assigned_room + def _allocate_lab( self, teacher: str, @@ -214,6 +223,7 @@ def _allocate_lab( } return [merged_entry], slot_index + 1 + def _generate_section_schedule( self, section: str, @@ -277,6 +287,7 @@ def _generate_section_schedule( return schedule, teacher_availability_matrix + def generate_daily_schedule( self, sections: list, @@ -303,6 +314,7 @@ def generate_daily_schedule( daily_schedule[section] = schedule return daily_schedule, subject_usage_tracker, self.teacher_availability_matrix + def _generate_weekly_schedule(self) -> tuple: weekly_schedule = {} subject_usage = { @@ -323,6 +335,7 @@ def _generate_weekly_schedule(self) -> tuple: weekly_schedule[weekday] = daily_sched return weekly_schedule, subject_usage, self.teacher_availability_matrix + def create_timetable(self, num_weeks: int) -> tuple: timetable = {} for week in range(1, num_weeks + 1): From d8c5be3378528069e36c08e26bb752f23cf90108 Mon Sep 17 00:00:00 2001 From: Ayush Kapri Date: Sat, 1 Mar 2025 08:50:42 +0530 Subject: [PATCH 54/67] removed cached + random csvs --- output_csvs/L1.csv | 7 ------- output_csvs/L2.csv | 7 ------- output_csvs/L3.csv | 7 ------- output_csvs/R1.csv | 7 ------- output_csvs/R2.csv | 7 ------- output_csvs/R3.csv | 7 ------- output_csvs/R4.csv | 7 ------- output_csvs/R5.csv | 7 ------- output_csvs/R6.csv | 7 ------- test-suite/ReadMe.md | 7 ------- test-suite/__init__.py | 0 test-suite/ulits_test.py | 3 --- tt_csvs/AA04.csv | 7 ------- tt_csvs/AA15.csv | 7 ------- tt_csvs/AB01.csv | 7 ------- tt_csvs/AB17.csv | 7 ------- tt_csvs/AC05.csv | 7 ------- tt_csvs/AD08.csv | 7 ------- tt_csvs/AK23.csv | 7 ------- tt_csvs/AK26.csv | 7 ------- tt_csvs/AP24.csv | 7 ------- tt_csvs/BJ10.csv | 7 ------- tt_csvs/DP07.csv | 7 ------- tt_csvs/DT20.csv | 7 ------- tt_csvs/HP18.csv | 7 ------- tt_csvs/JM12.csv | 7 ------- tt_csvs/NB22.csv | 7 ------- tt_csvs/NJ13.csv | 7 ------- tt_csvs/None.csv | 7 ------- tt_csvs/PA21.csv | 7 ------- tt_csvs/PK02.csv | 7 ------- tt_csvs/PM14.csv | 7 ------- tt_csvs/RD09.csv | 7 ------- tt_csvs/RS11.csv | 7 ------- tt_csvs/SG19.csv | 7 ------- tt_csvs/SJ16.csv | 7 ------- tt_csvs/SP06.csv | 7 ------- tt_csvs/SS03.csv | 7 ------- tt_csvs/VD25.csv | 7 ------- 39 files changed, 262 deletions(-) delete mode 100644 output_csvs/L1.csv delete mode 100644 output_csvs/L2.csv delete mode 100644 output_csvs/L3.csv delete mode 100644 output_csvs/R1.csv delete mode 100644 output_csvs/R2.csv delete mode 100644 output_csvs/R3.csv delete mode 100644 output_csvs/R4.csv delete mode 100644 output_csvs/R5.csv delete mode 100644 output_csvs/R6.csv delete mode 100644 test-suite/ReadMe.md delete mode 100644 test-suite/__init__.py delete mode 100644 test-suite/ulits_test.py delete mode 100644 tt_csvs/AA04.csv delete mode 100644 tt_csvs/AA15.csv delete mode 100644 tt_csvs/AB01.csv delete mode 100644 tt_csvs/AB17.csv delete mode 100644 tt_csvs/AC05.csv delete mode 100644 tt_csvs/AD08.csv delete mode 100644 tt_csvs/AK23.csv delete mode 100644 tt_csvs/AK26.csv delete mode 100644 tt_csvs/AP24.csv delete mode 100644 tt_csvs/BJ10.csv delete mode 100644 tt_csvs/DP07.csv delete mode 100644 tt_csvs/DT20.csv delete mode 100644 tt_csvs/HP18.csv delete mode 100644 tt_csvs/JM12.csv delete mode 100644 tt_csvs/NB22.csv delete mode 100644 tt_csvs/NJ13.csv delete mode 100644 tt_csvs/None.csv delete mode 100644 tt_csvs/PA21.csv delete mode 100644 tt_csvs/PK02.csv delete mode 100644 tt_csvs/PM14.csv delete mode 100644 tt_csvs/RD09.csv delete mode 100644 tt_csvs/RS11.csv delete mode 100644 tt_csvs/SG19.csv delete mode 100644 tt_csvs/SJ16.csv delete mode 100644 tt_csvs/SP06.csv delete mode 100644 tt_csvs/SS03.csv delete mode 100644 tt_csvs/VD25.csv diff --git a/output_csvs/L1.csv b/output_csvs/L1.csv deleted file mode 100644 index ad5fa34..0000000 --- a/output_csvs/L1.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,11:00 - 12:00,12:00 - 13:00 -Monday,"PMA-502 (F, PM14)","PMA-502 (F, PM14)" -Tuesday,"PCS-506 (F, RD09)","PCS-506 (F, RD09)" -Wednesday,"PMA-502 (A, PM14)","PMA-502 (A, PM14)" -Thursday,"PMA-502 (B, PM14)","PMA-502 (B, PM14)" -Friday,"PCS-506 (D, AD08)","PCS-506 (D, AD08)" -Saturday,, diff --git a/output_csvs/L2.csv b/output_csvs/L2.csv deleted file mode 100644 index e213010..0000000 --- a/output_csvs/L2.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,14:50 - 15:50,13:50 - 14:50 -Monday,"PCS-503 (A, RS11)","PCS-503 (A, RS11)","PMA-502 (F, PM14)","PMA-502 (F, PM14)" -Tuesday,"PCS-506 (A, AD08)","PCS-506 (A, AD08)","PCS-506 (F, RD09)","PCS-506 (F, RD09)" -Wednesday,"PMA-502 (E, AD08)","PMA-502 (E, AD08)","PCS-503 (E, VD25)","PCS-503 (E, VD25)" -Thursday,"PMA-502 (B, PM14)","PMA-502 (B, PM14)","PCS-506 (E, AD08)","PCS-506 (E, AD08)" -Friday,"PCS-506 (D, AD08)","PCS-506 (D, AD08)",, -Saturday,,,, diff --git a/output_csvs/L3.csv b/output_csvs/L3.csv deleted file mode 100644 index 7f96718..0000000 --- a/output_csvs/L3.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,13:50 - 14:50,14:50 - 15:50 -Monday,"PMA-502 (F, PM14)","PMA-502 (F, PM14)" -Tuesday,"PCS-503 (F, VD25)","PCS-503 (F, VD25)" -Wednesday,"PCS-506 (F, RD09)","PCS-506 (F, RD09)" -Thursday,"PCS-503 (E, DP07)","PCS-503 (E, DP07)" -Friday,, -Saturday,, diff --git a/output_csvs/R1.csv b/output_csvs/R1.csv deleted file mode 100644 index 7b4b801..0000000 --- a/output_csvs/R1.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 -Monday,"TCS-503 (A, SP06)","TCS-509 (A, SJ16)","SCS-501 (A, AP24)","CSP-501 (A, AK23)" -Tuesday,,,, -Wednesday,"TMA-502 (A, BJ10)","XCS-501 (A, DT20)","TCS-503 (A, SP06)","TCS-509 (A, SJ16)" -Thursday,"TCS-509 (A, SJ16)","TMA-502 (A, BJ10)","TMA-502 (A, BJ10)","TCS-509 (A, SJ16)" -Friday,"TCS-502 (A, SS03)","TCS-509 (A, SJ16)","TMA-502 (A, BJ10)","TCS-531 (A, AB01)" -Saturday,"Library (A, None)","Library (A, None)","Library (A, None)","Library (A, None)" diff --git a/output_csvs/R2.csv b/output_csvs/R2.csv deleted file mode 100644 index b9a14cc..0000000 --- a/output_csvs/R2.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 -Monday,"TCS-531 (B, AB01)","SCS-501 (B, AP24)","CSP-501 (B, AK23)","TMA-502 (B, BJ10)" -Tuesday,"TCS-531 (B, AB01)","XCS-501 (B, DT20)","TCS-503 (B, SP06)","TCS-502 (B, SS03)" -Wednesday,"TCS-503 (B, SP06)","TCS-531 (B, AB01)","TCS-502 (B, SS03)","TCS-509 (B, SJ16)" -Thursday,"TMA-502 (B, RS11)","TCS-509 (B, AB17)","TCS-503 (B, SP06)","TCS-531 (B, AB01)" -Friday,"XCS-501 (B, DT20)","TCS-503 (B, SP06)","TMA-502 (B, RS11)","TCS-502 (B, AA04)" -Saturday,"Library (B, None)","Library (B, None)","Library (B, None)","Library (B, None)" diff --git a/output_csvs/R3.csv b/output_csvs/R3.csv deleted file mode 100644 index d5bb25d..0000000 --- a/output_csvs/R3.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 -Monday,"TCS-503 (C, DP07)","CSP-501 (C, AK23)","SCS-501 (C, AP24)","XCS-501 (C, PA21)" -Tuesday,"TCS-502 (C, AA04)","TCS-509 (C, SJ16)","TMA-502 (C, BJ10)","SCS-501 (C, AP24)" -Wednesday,"TCS-503 (C, DP07)","TMA-502 (C, RS11)","TCS-531 (C, PK02)","TCS-509 (C, AB17)" -Thursday,"TCS-502 (C, SS03)","TCS-503 (C, SP06)","TCS-509 (C, AB17)","TMA-502 (C, JM12)" -Friday,"TCS-509 (C, SJ16)","TCS-503 (C, DP07)","TMA-502 (C, RS11)","TCS-531 (C, PK02)" -Saturday,"Library (C, None)","Library (C, None)","Library (C, None)","Library (C, None)" diff --git a/output_csvs/R4.csv b/output_csvs/R4.csv deleted file mode 100644 index 9f2e032..0000000 --- a/output_csvs/R4.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 -Monday,"SCS-501 (D, AP24)","TMA-502 (D, RS11)","TCS-509 (D, AB17)","CSP-501 (D, AK23)","TCS-502 (D, SS03)","TCS-503 (D, AC05)","TCS-531 (D, PK02)" -Tuesday,"XCS-501 (D, PA21)","TCS-531 (D, PK02)","TMA-502 (D, RS11)","TCS-509 (D, AB17)","Library (D, None)","TCS-503 (D, DP07)","TCS-502 (D, AC05)" -Wednesday,"TCS-531 (D, AB01)","XCS-501 (D, PA21)","TCS-509 (D, HP18)","TMA-502 (D, JM12)","TCS-503 (D, AC05)",, -Thursday,"TCS-502 (D, SS03)","TCS-531 (D, PK02)",,,"TCS-502 (D, AA04)","Placement_Class (D, AK26)","Placement_Class (D, AK26)" -Friday,"TCS-502 (D, SS03)","TCS-531 (D, AB01)","TMA-502 (D, JM12)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)" -Saturday,"Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)","Library (D, None)" diff --git a/output_csvs/R5.csv b/output_csvs/R5.csv deleted file mode 100644 index 7032bf2..0000000 --- a/output_csvs/R5.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 -Monday,"XCS-501 (E, DT20)","TCS-503 (E, SP06)","SCS-501 (E, AP24)","TMA-502 (E, JM12)","TCS-509 (E, HP18)","Placement_Class (E, AK26)","Placement_Class (E, AK26)" -Tuesday,"CSP-501 (E, AK23)","TCS-503 (E, SP06)","TCS-502 (E, SS03)","XCS-501 (E, NB22)","TCS-531 (E, AB01)",, -Wednesday,"TMA-502 (E, RS11)","TCS-531 (E, AB01)",,,"TCS-502 (E, AA04)","TCS-503 (E, SP06)","TCS-509 (E, SG19)" -Thursday,"TCS-531 (E, AB01)","TCS-502 (E, AC05)","TCS-509 (E, HP18)","TMA-502 (E, NJ13)","Library (E, None)",, -Friday,"TCS-531 (E, PK02)","TMA-502 (E, JM12)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)" -Saturday,"Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)","Library (E, None)" diff --git a/output_csvs/R6.csv b/output_csvs/R6.csv deleted file mode 100644 index a48819a..0000000 --- a/output_csvs/R6.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 -Monday,"SCS-501 (F, AP24)","TCS-503 (F, DP07)","SCS-501 (F, AP24)","XCS-501 (F, PA21)","XCS-501 (F, PA21)",, -Tuesday,"XCS-501 (F, DT20)","TCS-503 (F, DP07)","TMA-502 (F, JM12)","CSP-501 (F, AK23)","TCS-502 (F, AA04)",, -Wednesday,"TCS-503 (F, DP07)","TCS-502 (F, SS03)","TCS-509 (F, SJ16)","TCS-531 (F, PK02)","TMA-502 (F, NJ13)","TCS-509 (F, SJ16)","TCS-531 (F, PK02)" -Thursday,"TCS-531 (F, PK02)","TMA-502 (F, BJ10)","TCS-502 (F, SS03)","TCS-509 (F, SG19)","Library (F, None)","Placement_Class (F, AK26)","Placement_Class (F, AK26)" -Friday,"TCS-531 (F, AB01)","TCS-509 (F, AB17)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)" -Saturday,"Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)","Library (F, None)" diff --git a/test-suite/ReadMe.md b/test-suite/ReadMe.md deleted file mode 100644 index 4759136..0000000 --- a/test-suite/ReadMe.md +++ /dev/null @@ -1,7 +0,0 @@ -This folder will contain the test for all the -different flows we have. - -Along with, - -1. unit test -> these will test individual components, like functionalities of Fitness, Crossover, Mutation, etc. -2. functional test -> collectively working of these modules. \ No newline at end of file diff --git a/test-suite/__init__.py b/test-suite/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/test-suite/ulits_test.py b/test-suite/ulits_test.py deleted file mode 100644 index 27de49a..0000000 --- a/test-suite/ulits_test.py +++ /dev/null @@ -1,3 +0,0 @@ -from Constants.TimeIntervals import TimeIntervalConstant as ti - -print(ti.get_slot_number("09:00", "09:55")) # Output: 1 diff --git a/tt_csvs/AA04.csv b/tt_csvs/AA04.csv deleted file mode 100644 index e35e050..0000000 --- a/tt_csvs/AA04.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50 -Monday,,"TCS-502 (E, R5)",, -Tuesday,"TCS-502 (E, R5)",,,"TCS-502 (F, R6)" -Wednesday,,"TCS-502 (C, R3)",,"TCS-502 (E, R5)" -Thursday,,"TCS-502 (E, R5)",,"TCS-502 (D, R4)" -Friday,,,"TCS-502 (B, R2)", -Saturday,,,, diff --git a/tt_csvs/AA15.csv b/tt_csvs/AA15.csv deleted file mode 100644 index 5802670..0000000 --- a/tt_csvs/AA15.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,14:50 - 15:50,13:50 - 14:50 -Monday,, -Tuesday,"PMA-502 (E, L3)","PMA-502 (E, L3)" -Wednesday,, -Thursday,, -Friday,, -Saturday,, diff --git a/tt_csvs/AB01.csv b/tt_csvs/AB01.csv deleted file mode 100644 index 7236cf1..0000000 --- a/tt_csvs/AB01.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50 -Monday,"TCS-531 (B, R2)","TCS-531 (B, R2)",, -Tuesday,"TCS-531 (B, R2)","TCS-531 (B, R2)","TCS-531 (E, R5)","TCS-531 (E, R5)" -Wednesday,"TCS-531 (D, R4)","TCS-531 (B, R2)",, -Thursday,"TCS-531 (E, R5)",,"TCS-531 (B, R2)","TCS-531 (F, R6)" -Friday,"TCS-531 (F, R6)","TCS-531 (D, R4)","TCS-531 (A, R1)", -Saturday,,,, diff --git a/tt_csvs/AB17.csv b/tt_csvs/AB17.csv deleted file mode 100644 index 4dc1a8d..0000000 --- a/tt_csvs/AB17.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 -Monday,"TCS-509 (F, R6)","TCS-509 (D, R4)",, -Tuesday,,,"TCS-509 (D, R4)","TCS-509 (E, R5)" -Wednesday,,"TCS-509 (B, R2)","TCS-509 (C, R3)", -Thursday,"TCS-509 (B, R2)","TCS-509 (C, R3)",, -Friday,"TCS-509 (F, R6)",,, -Saturday,,,, diff --git a/tt_csvs/AC05.csv b/tt_csvs/AC05.csv deleted file mode 100644 index 964648a..0000000 --- a/tt_csvs/AC05.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 -Monday,,,,"TCS-503 (F, R6)","TCS-503 (D, R4)", -Tuesday,"TCS-502 (F, R6)",,"TCS-503 (D, R4)",,,"TCS-502 (D, R4)" -Wednesday,,"TCS-503 (D, R4)",,"TCS-503 (D, R4)",, -Thursday,"TCS-503 (E, R5)","TCS-502 (E, R5)",,,, -Friday,"TCS-503 (E, R5)",,,,, -Saturday,,,,,, diff --git a/tt_csvs/AD08.csv b/tt_csvs/AD08.csv deleted file mode 100644 index d9e06e6..0000000 --- a/tt_csvs/AD08.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 -Monday,,,"PCS-506 (C, L1)","PCS-506 (C, L1)","PCS-506 (D, L2)","PCS-506 (D, L2)" -Tuesday,"PCS-506 (A, L2)","PCS-506 (A, L2)","PCS-506 (A, L1)","PCS-506 (A, L1)",, -Wednesday,"PMA-502 (E, L2)","PMA-502 (E, L2)","PMA-502 (E, L1)","PMA-502 (E, L1)",, -Thursday,"PMA-502 (D, L2)","PMA-502 (D, L2)","PMA-502 (D, L1)","PMA-502 (D, L1)","PCS-506 (E, L2)","PCS-506 (E, L2)" -Friday,"PCS-506 (D, L2)","PCS-506 (D, L2)","PCS-506 (D, L1)","PCS-506 (D, L1)",, -Saturday,,,,,, diff --git a/tt_csvs/AK23.csv b/tt_csvs/AK23.csv deleted file mode 100644 index 4b257f6..0000000 --- a/tt_csvs/AK23.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 -Monday,"CSP-501 (F, R6)","CSP-501 (C, R3)","CSP-501 (B, R2)","CSP-501 (A, R1)" -Tuesday,"CSP-501 (E, R5)",,,"CSP-501 (F, R6)" -Wednesday,"CSP-501 (B, R2)",,, -Thursday,,,, -Friday,,,,"CSP-501 (A, R1)" -Saturday,,,, diff --git a/tt_csvs/AK26.csv b/tt_csvs/AK26.csv deleted file mode 100644 index db4c587..0000000 --- a/tt_csvs/AK26.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,14:50 - 15:50,13:50 - 14:50 -Monday,"Placement_Class (E, R5)","Placement_Class (E, R5)" -Tuesday,, -Wednesday,, -Thursday,"Placement_Class (F, R6)","Placement_Class (F, R6)" -Friday,"Placement_Class (F, R6)","Placement_Class (F, R6)" -Saturday,, diff --git a/tt_csvs/AP24.csv b/tt_csvs/AP24.csv deleted file mode 100644 index 1ced302..0000000 --- a/tt_csvs/AP24.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 -Monday,"SCS-501 (D, R4)","SCS-501 (B, R2)","SCS-501 (A, R1)",,"SCS-501 (E, R5)" -Tuesday,,,"SCS-501 (D, R4)","SCS-501 (C, R3)", -Wednesday,,,,, -Thursday,"SCS-501 (A, R1)",,,, -Friday,,,,, -Saturday,,,,, diff --git a/tt_csvs/BJ10.csv b/tt_csvs/BJ10.csv deleted file mode 100644 index 500a17b..0000000 --- a/tt_csvs/BJ10.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,13:50 - 14:50 -Monday,,,,"TMA-502 (B, R2)",, -Tuesday,,,"TMA-502 (C, R3)",,,"TMA-502 (D, R4)" -Wednesday,"TMA-502 (A, R1)",,,,"TMA-502 (D, R4)", -Thursday,,"TMA-502 (F, R6)","TMA-502 (A, R1)",,, -Friday,"TMA-502 (A, R1)",,"TMA-502 (A, R1)",,, -Saturday,,,,,, diff --git a/tt_csvs/DP07.csv b/tt_csvs/DP07.csv deleted file mode 100644 index 9063385..0000000 --- a/tt_csvs/DP07.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 -Monday,"TCS-503 (C, R3)","TCS-503 (F, R6)",,,,"TCS-503 (E, R5)" -Tuesday,,"TCS-503 (F, R6)",,,"TCS-503 (D, R4)", -Wednesday,"TCS-503 (F, R6)","TCS-503 (B, R2)",,,, -Thursday,"PCS-503 (C, L2)","PCS-503 (C, L2)","PCS-503 (C, L1)","PCS-503 (C, L1)","PCS-503 (E, L3)","PCS-503 (E, L3)" -Friday,"PCS-503 (C, L2)","PCS-503 (C, L2)","PCS-503 (C, L1)","PCS-503 (C, L1)",, -Saturday,,,,,, diff --git a/tt_csvs/DT20.csv b/tt_csvs/DT20.csv deleted file mode 100644 index 4fe139e..0000000 --- a/tt_csvs/DT20.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 -Monday,"XCS-501 (E, R5)",,,"XCS-501 (E, R5)" -Tuesday,"XCS-501 (F, R6)","XCS-501 (B, R2)","XCS-501 (B, R2)", -Wednesday,,"XCS-501 (A, R1)",, -Thursday,,"XCS-501 (A, R1)",, -Friday,"XCS-501 (B, R2)",,, -Saturday,,,, diff --git a/tt_csvs/HP18.csv b/tt_csvs/HP18.csv deleted file mode 100644 index f47f6e3..0000000 --- a/tt_csvs/HP18.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,11:00 - 12:00,16:50 - 17:50 -Monday,,,"TCS-509 (E, R5)" -Tuesday,,, -Wednesday,"TCS-509 (D, R4)","TCS-509 (D, R4)", -Thursday,,"TCS-509 (E, R5)","TCS-509 (D, R4)" -Friday,,, -Saturday,,, diff --git a/tt_csvs/JM12.csv b/tt_csvs/JM12.csv deleted file mode 100644 index 4351a31..0000000 --- a/tt_csvs/JM12.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 -Monday,,,"TMA-502 (E, R5)", -Tuesday,,"TMA-502 (F, R6)",, -Wednesday,,,"TMA-502 (D, R4)", -Thursday,,,"TMA-502 (C, R3)","TMA-502 (E, R5)" -Friday,"TMA-502 (E, R5)","TMA-502 (D, R4)",, -Saturday,,,, diff --git a/tt_csvs/NB22.csv b/tt_csvs/NB22.csv deleted file mode 100644 index b20eaa4..0000000 --- a/tt_csvs/NB22.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50 -Monday,,,"XCS-501 (D, R4)" -Tuesday,"XCS-501 (E, R5)","XCS-501 (E, R5)", -Wednesday,,, -Thursday,,, -Friday,,, -Saturday,,, diff --git a/tt_csvs/NJ13.csv b/tt_csvs/NJ13.csv deleted file mode 100644 index 85646cf..0000000 --- a/tt_csvs/NJ13.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,12:00 - 13:00,16:50 - 17:50 -Monday,,, -Tuesday,,, -Wednesday,,,"TMA-502 (F, R6)" -Thursday,,"TMA-502 (E, R5)", -Friday,"TMA-502 (F, R6)",, -Saturday,,, diff --git a/tt_csvs/None.csv b/tt_csvs/None.csv deleted file mode 100644 index 29ff246..0000000 --- a/tt_csvs/None.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50,13:50 - 14:50 -Monday,,,,,,, -Tuesday,,,,,"Library (D, R4)",, -Wednesday,,,,,"Library (F, R6)",, -Thursday,,,,,"Library (F, R6)",, -Friday,,"Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)" -Saturday,"Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)","Library (F, R6)" diff --git a/tt_csvs/PA21.csv b/tt_csvs/PA21.csv deleted file mode 100644 index 5994e5e..0000000 --- a/tt_csvs/PA21.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,12:00 - 13:00,16:50 - 17:50 -Monday,,,"XCS-501 (F, R6)","XCS-501 (F, R6)" -Tuesday,"XCS-501 (D, R4)",,, -Wednesday,"XCS-501 (F, R6)","XCS-501 (D, R4)",, -Thursday,,,, -Friday,,,, -Saturday,,,, diff --git a/tt_csvs/PK02.csv b/tt_csvs/PK02.csv deleted file mode 100644 index f13390f..0000000 --- a/tt_csvs/PK02.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,13:50 - 14:50 -Monday,"TCS-531 (E, R5)",,,,,"TCS-531 (D, R4)" -Tuesday,,"TCS-531 (F, R6)",,,"TCS-531 (D, R4)", -Wednesday,"TCS-531 (C, R3)",,"TCS-531 (C, R3)","TCS-531 (F, R6)",,"TCS-531 (F, R6)" -Thursday,"TCS-531 (F, R6)","TCS-531 (D, R4)",,,, -Friday,"TCS-531 (E, R5)",,,"TCS-531 (C, R3)",, -Saturday,,,,,, diff --git a/tt_csvs/PM14.csv b/tt_csvs/PM14.csv deleted file mode 100644 index b39adfa..0000000 --- a/tt_csvs/PM14.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 -Monday,,,"PMA-502 (F, L1)","PMA-502 (F, L1)","PMA-502 (F, L2)","PMA-502 (F, L2)" -Tuesday,"PMA-502 (A, L2)","PMA-502 (A, L2)","PMA-502 (A, L1)","PMA-502 (A, L1)",, -Wednesday,,,"PMA-502 (A, L1)","PMA-502 (A, L1)","PMA-502 (D, L2)","PMA-502 (D, L2)" -Thursday,"PMA-502 (B, L2)","PMA-502 (B, L2)","PMA-502 (B, L1)","PMA-502 (B, L1)",, -Friday,,,,,, -Saturday,,,,,, diff --git a/tt_csvs/RD09.csv b/tt_csvs/RD09.csv deleted file mode 100644 index 7b7c89c..0000000 --- a/tt_csvs/RD09.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 -Monday,,,, -Tuesday,"PCS-506 (F, L1)","PCS-506 (F, L1)","PCS-506 (E, L3)","PCS-506 (E, L3)" -Wednesday,,,"PCS-506 (F, L3)","PCS-506 (F, L3)" -Thursday,,,, -Friday,,,, -Saturday,,,, diff --git a/tt_csvs/RS11.csv b/tt_csvs/RS11.csv deleted file mode 100644 index b37c0ba..0000000 --- a/tt_csvs/RS11.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00 -Monday,"PCS-503 (A, L2)","TMA-502 (D, R4)","PCS-503 (A, L1)","PCS-503 (A, L1)" -Tuesday,,"TMA-502 (E, R5)","TMA-502 (D, R4)", -Wednesday,"TMA-502 (E, R5)","TMA-502 (C, R3)",, -Thursday,"PCS-503 (F, L2)","PCS-503 (F, L2)","PCS-503 (A, L1)","PCS-503 (A, L1)" -Friday,,,"TMA-502 (B, R2)", -Saturday,,,, diff --git a/tt_csvs/SG19.csv b/tt_csvs/SG19.csv deleted file mode 100644 index e1b3bfc..0000000 --- a/tt_csvs/SG19.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,12:00 - 13:00,16:50 - 17:50,13:50 - 14:50 -Monday,,, -Tuesday,,, -Wednesday,,"TCS-509 (E, R5)","TCS-509 (E, R5)" -Thursday,"TCS-509 (F, R6)",,"TCS-509 (F, R6)" -Friday,,, -Saturday,,, diff --git a/tt_csvs/SJ16.csv b/tt_csvs/SJ16.csv deleted file mode 100644 index 9896b9d..0000000 --- a/tt_csvs/SJ16.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50 -Monday,,"TCS-509 (A, R1)",,,"TCS-509 (E, R5)" -Tuesday,,"TCS-509 (C, R3)",,, -Wednesday,,,"TCS-509 (F, R6)","TCS-509 (B, R2)","TCS-509 (F, R6)" -Thursday,"TCS-509 (A, R1)",,,"TCS-509 (A, R1)", -Friday,"TCS-509 (C, R3)","TCS-509 (A, R1)",,, -Saturday,,,,, diff --git a/tt_csvs/SP06.csv b/tt_csvs/SP06.csv deleted file mode 100644 index eec3de0..0000000 --- a/tt_csvs/SP06.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,16:50 - 17:50,14:50 - 15:50 -Monday,"TCS-503 (A, R1)","TCS-503 (E, R5)",,, -Tuesday,"TCS-503 (B, R2)","TCS-503 (E, R5)","TCS-503 (B, R2)","TCS-503 (F, R6)", -Wednesday,"TCS-503 (B, R2)","TCS-503 (F, R6)","TCS-503 (A, R1)",,"TCS-503 (E, R5)" -Thursday,,"TCS-503 (C, R3)","TCS-503 (B, R2)",, -Friday,,"TCS-503 (B, R2)","TCS-503 (A, R1)",, -Saturday,,,,, diff --git a/tt_csvs/SS03.csv b/tt_csvs/SS03.csv deleted file mode 100644 index d29d670..0000000 --- a/tt_csvs/SS03.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,08:00 - 09:00,09:00 - 10:00,11:00 - 12:00,12:00 - 13:00,16:50 - 17:50,14:50 - 15:50 -Monday,,"TCS-502 (C, R3)",,,"TCS-502 (D, R4)", -Tuesday,,,"TCS-502 (E, R5)","TCS-502 (B, R2)",,"TCS-502 (D, R4)" -Wednesday,,"TCS-502 (F, R6)","TCS-502 (F, R6)","TCS-502 (B, R2)",, -Thursday,"TCS-502 (C, R3)",,"TCS-502 (F, R6)",,,"TCS-502 (F, R6)" -Friday,"TCS-502 (A, R1)",,,,, -Saturday,,,,,, diff --git a/tt_csvs/VD25.csv b/tt_csvs/VD25.csv deleted file mode 100644 index e6c2de6..0000000 --- a/tt_csvs/VD25.csv +++ /dev/null @@ -1,7 +0,0 @@ -DAY,11:00 - 12:00,12:00 - 13:00,14:50 - 15:50,13:50 - 14:50 -Monday,,,, -Tuesday,,,"PCS-503 (F, L3)","PCS-503 (F, L3)" -Wednesday,"PCS-503 (E, L1)","PCS-503 (E, L1)","PCS-503 (D, L3)","PCS-503 (D, L3)" -Thursday,"PCS-503 (D, L1)","PCS-503 (D, L1)","PCS-503 (D, L2)","PCS-503 (D, L2)" -Friday,,,, -Saturday,,,, From 63e9a241dbdca3aa64a748bcd91f7b8a02ef1b39 Mon Sep 17 00:00:00 2001 From: gunjan Date: Sat, 29 Mar 2025 17:20:39 +0530 Subject: [PATCH 55/67] adding section code --- Constants/constant.py | 2 +- Constants/section_allocation.py | 54 --------------------------------- 2 files changed, 1 insertion(+), 55 deletions(-) diff --git a/Constants/constant.py b/Constants/constant.py index 2e611fa..bedf556 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -61,5 +61,5 @@ class SectionsConstants: } ATTRIBUTE_CONDITIONS = { - "hostler": lambda student: student.get("Hostler", False), + "hostler": lambda student: student.get("hostler", False), } diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index bb1cde4..bbcbca9 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -77,57 +77,3 @@ def divide_students_into_sections(self, students: List[Dict], class_strength: in sections.append(current_section) return sections -<<<<<<< HEAD -======= - - -def generate_students(num_students: int = 500) -> List[Dict]: - """ - Generate a list of random students with CGPA and hostler status. - - Args: - num_students (int): Number of students to generate. - - Returns: - List[Dict]: List of student dictionaries. - """ - - return [ - { - "ID": i, - "CGPA": round(random.uniform(6.0, 9.8), 2), - "Hostler": random.choice([True, False]), - } - for i in range(1, num_students + 1) - ] - - -if __name__ == "__main__": - # Initialize constants and scorer - scorer = StudentScorer() - students = generate_students(num_students=500) - - # Calculate the dynamic CGPA threshold - cgpa_threshold = scorer.calculate_dynamic_cgpa_threshold( - students, top_percentage=30 - ) - print(f"Dynamic CGPA Threshold (Top 30%): {cgpa_threshold}") - - # Assign conditions and scores - scorer.assign_dynamic_conditions(cgpa_threshold) - students_with_scores = scorer.assign_scores_to_students(students) - - # Divide students into sections - sections = scorer.divide_students_into_sections( - students_with_scores, Defaults.class_strength - ) - - # Display the sections - for i, section in enumerate(sections, 1): - print(f"Section {i} (Total Students: {len(section)}):") - for student in section: - print( - f" Student ID: {student['ID']}, CGPA: {student['CGPA']}, " - f"Hostler: {student['Hostler']}, score: {student['score']}" - ) ->>>>>>> 89e907051dd54e4748a9dd197f4b4cd9d0da4c30 From d8717e75e19270093775ce26c5ad03312130c41d Mon Sep 17 00:00:00 2001 From: gunjan Date: Tue, 1 Apr 2025 17:58:46 +0530 Subject: [PATCH 56/67] adding section allocation code --- Constants/constant.py | 2 +- Constants/section_allocation.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Constants/constant.py b/Constants/constant.py index bedf556..6960403 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -61,5 +61,5 @@ class SectionsConstants: } ATTRIBUTE_CONDITIONS = { - "hostler": lambda student: student.get("hostler", False), + "hostler": lambda student: student.get("is_hosteller", False), } diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index bbcbca9..687928d 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -43,14 +43,13 @@ def calculate_student_score(self, student: Dict) -> int: def assign_scores_to_students(self, students): # Step 1: Calculate CGPA threshold cgpa_threshold = self.calculate_dynamic_cgpa_threshold(students) - self.assign_dynamic_conditions(cgpa_threshold) # Ensure the condition is updated - - print(f"CGPA threshold set at: {cgpa_threshold}") + self.assign_dynamic_conditions(cgpa_threshold) + # Step 2: Assign scores for student in students: student["score"] = self.calculate_student_score(student) - print(f"Assigned Score: {student['student_name']} - {student['score']}") + return students From e3b79323c3b4618e760f1152c180c58aad544e4a Mon Sep 17 00:00:00 2001 From: TechLead-War Date: Sat, 14 Jun 2025 10:28:40 +0530 Subject: [PATCH 57/67] fixup --- .DS_Store | Bin 6148 -> 6148 bytes .eggs/README.txt | 6 + .../EGG-INFO/LICENSE | 19 + .../EGG-INFO/PKG-INFO | 185 ++ .../EGG-INFO/RECORD | 7 + .../EGG-INFO/WHEEL | 5 + .../EGG-INFO/entry_points.txt | 3 + .../EGG-INFO/requires.txt | 17 + .../EGG-INFO/top_level.txt | 1 + .../ptr/__init__.py | 216 ++ .../EGG-INFO/LICENSE | 19 + .../EGG-INFO/PKG-INFO | 185 ++ .../EGG-INFO/RECORD | 7 + .../EGG-INFO/WHEEL | 5 + .../EGG-INFO/entry_points.txt | 3 + .../EGG-INFO/requires.txt | 17 + .../EGG-INFO/top_level.txt | 1 + .../ptr/__init__.py | 216 ++ .idea/.gitignore | 8 + .idea/Time-Table.iml | 14 + .idea/inspectionProfiles/Project_Default.xml | 24 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + Constants/constant.py | 50 +- Constants/section_allocation.py | 9 +- GA/fitness.py | 21 +- Samples/Fitness_Files/LabConstraints.py | 147 +- TimeTableLib.egg-info/PKG-INFO | 125 ++ TimeTableLib.egg-info/SOURCES.txt | 27 + TimeTableLib.egg-info/dependency_links.txt | 1 + TimeTableLib.egg-info/requires.txt | 4 + TimeTableLib.egg-info/top_level.txt | 3 + build/lib/Constants/__init__.py | 0 build/lib/Constants/classroom_allocate.py | 56 + build/lib/Constants/classroom_tt.py | 48 + build/lib/Constants/classroom_tt_csv.py | 83 + build/lib/Constants/constant.py | 65 + build/lib/Constants/helper_routines.py | 39 + build/lib/Constants/is_conflict.py | 138 ++ build/lib/Constants/is_conflict_new.py | 154 ++ build/lib/Constants/section_allocation.py | 78 + build/lib/Constants/teacher_tt_csv.py | 81 + build/lib/Constants/teachers_tt.py | 93 + build/lib/Constants/time_intervals.py | 127 ++ build/lib/Constants/timetable_csv.py | 124 ++ build/lib/GA/__init__.py | 258 +++ build/lib/GA/chromosome.py | 351 ++++ build/lib/GA/fitness.py | 191 ++ build/lib/GA/mutation.py | 38 + build/lib/GA/selection.py | 97 + build/lib/Samples/__init__.py | 0 build/lib/Samples/samples.py | 1821 +++++++++++++++++ 54 files changed, 5082 insertions(+), 129 deletions(-) create mode 100644 .eggs/README.txt create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/LICENSE create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/PKG-INFO create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/RECORD create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/WHEEL create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/entry_points.txt create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/requires.txt create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/top_level.txt create mode 100644 .eggs/pytest_runner-6.0.1-py3.10.egg/ptr/__init__.py create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/LICENSE create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/PKG-INFO create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/RECORD create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/WHEEL create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/entry_points.txt create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/requires.txt create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/top_level.txt create mode 100644 .eggs/pytest_runner-6.0.1-py3.9.egg/ptr/__init__.py create mode 100644 .idea/.gitignore create mode 100644 .idea/Time-Table.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 TimeTableLib.egg-info/PKG-INFO create mode 100644 TimeTableLib.egg-info/SOURCES.txt create mode 100644 TimeTableLib.egg-info/dependency_links.txt create mode 100644 TimeTableLib.egg-info/requires.txt create mode 100644 TimeTableLib.egg-info/top_level.txt create mode 100644 build/lib/Constants/__init__.py create mode 100644 build/lib/Constants/classroom_allocate.py create mode 100644 build/lib/Constants/classroom_tt.py create mode 100644 build/lib/Constants/classroom_tt_csv.py create mode 100644 build/lib/Constants/constant.py create mode 100644 build/lib/Constants/helper_routines.py create mode 100644 build/lib/Constants/is_conflict.py create mode 100644 build/lib/Constants/is_conflict_new.py create mode 100644 build/lib/Constants/section_allocation.py create mode 100644 build/lib/Constants/teacher_tt_csv.py create mode 100644 build/lib/Constants/teachers_tt.py create mode 100644 build/lib/Constants/time_intervals.py create mode 100644 build/lib/Constants/timetable_csv.py create mode 100644 build/lib/GA/__init__.py create mode 100644 build/lib/GA/chromosome.py create mode 100644 build/lib/GA/fitness.py create mode 100644 build/lib/GA/mutation.py create mode 100644 build/lib/GA/selection.py create mode 100644 build/lib/Samples/__init__.py create mode 100644 build/lib/Samples/samples.py diff --git a/.DS_Store b/.DS_Store index 92b131da0862f63e70bc127513bcd3ea7bfa08a3..98b24d0feb73edaa5518a30fc2b4b1e6355e32fb 100644 GIT binary patch delta 28 kcmZoMXfc@J&nU1lU^g?Pz-As6VWy3#FBmtobNuB80Di^@&Hw-a delta 194 zcmZoMXfc@J&nU7nU^g?P$YvfEVWxU6h7yKUhGHP83nWV!GC};Dbi?4}{M-TtFkq|& yQdrgH=DWBg<>V&;=3.7 +License-File: LICENSE +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: jaraco.packaging >=9 ; extra == 'docs' +Requires-Dist: rst.linker >=1.9 ; extra == 'docs' +Requires-Dist: jaraco.tidelift >=1.4 ; extra == 'docs' +Provides-Extra: testing +Requires-Dist: pytest >=6 ; extra == 'testing' +Requires-Dist: pytest-checkdocs >=2.4 ; extra == 'testing' +Requires-Dist: pytest-flake8 ; extra == 'testing' +Requires-Dist: pytest-cov ; extra == 'testing' +Requires-Dist: pytest-enabler >=1.0.1 ; extra == 'testing' +Requires-Dist: pytest-virtualenv ; extra == 'testing' +Requires-Dist: types-setuptools ; extra == 'testing' +Requires-Dist: pytest-black >=0.3.7 ; (platform_python_implementation != "PyPy") and extra == 'testing' +Requires-Dist: pytest-mypy >=0.9.1 ; (platform_python_implementation != "PyPy") and extra == 'testing' + +.. image:: https://img.shields.io/pypi/v/pytest-runner.svg + :target: `PyPI link`_ + +.. image:: https://img.shields.io/pypi/pyversions/pytest-runner.svg + :target: `PyPI link`_ + +.. _PyPI link: https://pypi.org/project/pytest-runner + +.. image:: https://github.com/pytest-dev/pytest-runner/workflows/tests/badge.svg + :target: https://github.com/pytest-dev/pytest-runner/actions?query=workflow%3A%22tests%22 + :alt: tests + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + +.. .. image:: https://readthedocs.org/projects/skeleton/badge/?version=latest +.. :target: https://skeleton.readthedocs.io/en/latest/?badge=latest + +.. image:: https://img.shields.io/badge/skeleton-2022-informational + :target: https://blog.jaraco.com/skeleton + +.. image:: https://tidelift.com/badges/package/pypi/pytest-runner + :target: https://tidelift.com/subscription/pkg/pypi-pytest-runner?utm_source=pypi-pytest-runner&utm_medium=readme + +Setup scripts can use pytest-runner to add setup.py test support for pytest +runner. + +Deprecation Notice +================== + +pytest-runner depends on deprecated features of setuptools and relies on features that break security +mechanisms in pip. For example 'setup_requires' and 'tests_require' bypass ``pip --require-hashes``. +See also `pypa/setuptools#1684 `_. + +It is recommended that you: + +- Remove ``'pytest-runner'`` from your ``setup_requires``, preferably removing the ``setup_requires`` option. +- Remove ``'pytest'`` and any other testing requirements from ``tests_require``, preferably removing the ``tests_requires`` option. +- Select a tool to bootstrap and then run tests such as tox. + +Usage +===== + +- Add 'pytest-runner' to your 'setup_requires'. Pin to '>=2.0,<3dev' (or + similar) to avoid pulling in incompatible versions. +- Include 'pytest' and any other testing requirements to 'tests_require'. +- Invoke tests with ``setup.py pytest``. +- Pass ``--index-url`` to have test requirements downloaded from an alternate + index URL (unnecessary if specified for easy_install in setup.cfg). +- Pass additional py.test command-line options using ``--addopts``. +- Set permanent options for the ``python setup.py pytest`` command (like ``index-url``) + in the ``[pytest]`` section of ``setup.cfg``. +- Set permanent options for the ``py.test`` run (like ``addopts`` or ``pep8ignore``) in the ``[pytest]`` + section of ``pytest.ini`` or ``tox.ini`` or put them in the ``[tool:pytest]`` + section of ``setup.cfg``. See `pytest issue 567 + `_. +- Optionally, set ``test=pytest`` in the ``[aliases]`` section of ``setup.cfg`` + to cause ``python setup.py test`` to invoke pytest. + +Example +======= + +The most simple usage looks like this in setup.py:: + + setup( + setup_requires=[ + 'pytest-runner', + ], + tests_require=[ + 'pytest', + ], + ) + +Additional dependencies require to run the tests (e.g. mock or pytest +plugins) may be added to tests_require and will be downloaded and +required by the session before invoking pytest. + +Follow `this search on github +`_ +for examples of real-world usage. + +Standalone Example +================== + +This technique is deprecated - if you have standalone scripts +you wish to invoke with dependencies, `use pip-run +`_. + +Although ``pytest-runner`` is typically used to add pytest test +runner support to maintained packages, ``pytest-runner`` may +also be used to create standalone tests. Consider `this example +failure `_, +reported in `jsonpickle #117 +`_ +or `this MongoDB test +`_ +demonstrating a technique that works even when dependencies +are required in the test. + +Either example file may be cloned or downloaded and simply run on +any system with Python and Setuptools. It will download the +specified dependencies and run the tests. Afterward, the the +cloned directory can be removed and with it all trace of +invoking the test. No other dependencies are needed and no +system configuration is altered. + +Then, anyone trying to replicate the failure can do so easily +and with all the power of pytest (rewritten assertions, +rich comparisons, interactive debugging, extensibility through +plugins, etc). + +As a result, the communication barrier for describing and +replicating failures is made almost trivially low. + +Considerations +============== + +Conditional Requirement +----------------------- + +Because it uses Setuptools setup_requires, pytest-runner will install itself +on every invocation of setup.py. In some cases, this causes delays for +invocations of setup.py that will never invoke pytest-runner. To help avoid +this contingency, consider requiring pytest-runner only when pytest +is invoked:: + + needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv) + pytest_runner = ['pytest-runner'] if needs_pytest else [] + + # ... + + setup( + #... + setup_requires=[ + #... (other setup requirements) + ] + pytest_runner, + ) + +For Enterprise +============== + +Available as part of the Tidelift Subscription. + +This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use. + +`Learn more `_. + +Security Contact +================ + +To report a security vulnerability, please use the +`Tidelift security contact `_. +Tidelift will coordinate the fix and disclosure. diff --git a/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/RECORD b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/RECORD new file mode 100644 index 0000000..d7ff24d --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/RECORD @@ -0,0 +1,7 @@ +ptr/__init__.py,sha256=0UfzhCooVgCNTBwVEOPOVGEPck4pnl_6PTfsC-QzNGM,6730 +pytest_runner-6.0.1.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 +pytest_runner-6.0.1.dist-info/METADATA,sha256=Ho3FvAFjFHeY5OQ64WFzkLigFaIpuNr4G3uSmOk3nho,7319 +pytest_runner-6.0.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 +pytest_runner-6.0.1.dist-info/entry_points.txt,sha256=BqezBqeO63XyzSYmHYE58gKEFIjJUd-XdsRQkXHy2ig,58 +pytest_runner-6.0.1.dist-info/top_level.txt,sha256=DPzHbWlKG8yq8EOD5UgEvVNDWeJRPyimrwfShwV6Iuw,4 +pytest_runner-6.0.1.dist-info/RECORD,, diff --git a/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/WHEEL b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/WHEEL new file mode 100644 index 0000000..98c0d20 --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.42.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/entry_points.txt b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/entry_points.txt new file mode 100644 index 0000000..0860670 --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/entry_points.txt @@ -0,0 +1,3 @@ +[distutils.commands] +ptr = ptr:PyTest +pytest = ptr:PyTest diff --git a/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/requires.txt b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/requires.txt new file mode 100644 index 0000000..1535188 --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/requires.txt @@ -0,0 +1,17 @@ + +[docs] +sphinx +jaraco.packaging>=9 +rst.linker>=1.9 +jaraco.tidelift>=1.4 + +[testing] +pytest>=6 +pytest-checkdocs>=2.4 +pytest-flake8 +pytest-cov +pytest-enabler>=1.0.1 +pytest-virtualenv +types-setuptools +pytest-black>=0.3.7 +pytest-mypy>=0.9.1 diff --git a/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/top_level.txt b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/top_level.txt new file mode 100644 index 0000000..e9148ae --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.10.egg/EGG-INFO/top_level.txt @@ -0,0 +1 @@ +ptr diff --git a/.eggs/pytest_runner-6.0.1-py3.10.egg/ptr/__init__.py b/.eggs/pytest_runner-6.0.1-py3.10.egg/ptr/__init__.py new file mode 100644 index 0000000..41192fa --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.10.egg/ptr/__init__.py @@ -0,0 +1,216 @@ +""" +Implementation +""" + +import os as _os +import shlex as _shlex +import contextlib as _contextlib +import sys as _sys +import operator as _operator +import itertools as _itertools +import warnings as _warnings + +import pkg_resources +import setuptools.command.test as orig +from setuptools import Distribution + + +@_contextlib.contextmanager +def _save_argv(repl=None): + saved = _sys.argv[:] + if repl is not None: + _sys.argv[:] = repl + try: + yield saved + finally: + _sys.argv[:] = saved + + +class CustomizedDist(Distribution): + + allow_hosts = None + index_url = None + + def fetch_build_egg(self, req): + """Specialized version of Distribution.fetch_build_egg + that respects respects allow_hosts and index_url.""" + from setuptools.command.easy_install import easy_install + + dist = Distribution({'script_args': ['easy_install']}) + dist.parse_config_files() + opts = dist.get_option_dict('easy_install') + keep = ( + 'find_links', + 'site_dirs', + 'index_url', + 'optimize', + 'site_dirs', + 'allow_hosts', + ) + for key in list(opts): + if key not in keep: + del opts[key] # don't use any other settings + if self.dependency_links: + links = self.dependency_links[:] + if 'find_links' in opts: + links = opts['find_links'][1].split() + links + opts['find_links'] = ('setup', links) + if self.allow_hosts: + opts['allow_hosts'] = ('test', self.allow_hosts) + if self.index_url: + opts['index_url'] = ('test', self.index_url) + install_dir_func = getattr(self, 'get_egg_cache_dir', _os.getcwd) + install_dir = install_dir_func() + cmd = easy_install( + dist, + args=["x"], + install_dir=install_dir, + exclude_scripts=True, + always_copy=False, + build_directory=None, + editable=False, + upgrade=False, + multi_version=True, + no_report=True, + user=False, + ) + cmd.ensure_finalized() + return cmd.easy_install(req) + + +class PyTest(orig.test): + """ + >>> import setuptools + >>> dist = setuptools.Distribution() + >>> cmd = PyTest(dist) + """ + + user_options = [ + ('extras', None, "Install (all) setuptools extras when running tests"), + ( + 'index-url=', + None, + "Specify an index url from which to retrieve dependencies", + ), + ( + 'allow-hosts=', + None, + "Whitelist of comma-separated hosts to allow " + "when retrieving dependencies", + ), + ( + 'addopts=', + None, + "Additional options to be passed verbatim to the pytest runner", + ), + ] + + def initialize_options(self): + self.extras = False + self.index_url = None + self.allow_hosts = None + self.addopts = [] + self.ensure_setuptools_version() + + @staticmethod + def ensure_setuptools_version(): + """ + Due to the fact that pytest-runner is often required (via + setup-requires directive) by toolchains that never invoke + it (i.e. they're only installing the package, not testing it), + instead of declaring the dependency in the package + metadata, assert the requirement at run time. + """ + pkg_resources.require('setuptools>=27.3') + + def finalize_options(self): + if self.addopts: + self.addopts = _shlex.split(self.addopts) + + @staticmethod + def marker_passes(marker): + """ + Given an environment marker, return True if the marker is valid + and matches this environment. + """ + return ( + not marker + or not pkg_resources.invalid_marker(marker) + and pkg_resources.evaluate_marker(marker) + ) + + def install_dists(self, dist): + """ + Extend install_dists to include extras support + """ + return _itertools.chain( + orig.test.install_dists(dist), self.install_extra_dists(dist) + ) + + def install_extra_dists(self, dist): + """ + Install extras that are indicated by markers or + install all extras if '--extras' is indicated. + """ + extras_require = dist.extras_require or {} + + spec_extras = ( + (spec.partition(':'), reqs) for spec, reqs in extras_require.items() + ) + matching_extras = ( + reqs + for (name, sep, marker), reqs in spec_extras + # include unnamed extras or all if self.extras indicated + if (not name or self.extras) + # never include extras that fail to pass marker eval + and self.marker_passes(marker) + ) + results = list(map(dist.fetch_build_eggs, matching_extras)) + return _itertools.chain.from_iterable(results) + + @staticmethod + def _warn_old_setuptools(): + msg = ( + "pytest-runner will stop working on this version of setuptools; " + "please upgrade to setuptools 30.4 or later or pin to " + "pytest-runner < 5." + ) + ver_str = pkg_resources.get_distribution('setuptools').version + ver = pkg_resources.parse_version(ver_str) + if ver < pkg_resources.parse_version('30.4'): + _warnings.warn(msg) + + def run(self): + """ + Override run to ensure requirements are available in this session (but + don't install them anywhere). + """ + self._warn_old_setuptools() + dist = CustomizedDist() + for attr in 'allow_hosts index_url'.split(): + setattr(dist, attr, getattr(self, attr)) + for attr in ( + 'dependency_links install_requires tests_require extras_require ' + ).split(): + setattr(dist, attr, getattr(self.distribution, attr)) + installed_dists = self.install_dists(dist) + if self.dry_run: + self.announce('skipping tests (dry run)') + return + paths = map(_operator.attrgetter('location'), installed_dists) + with self.paths_on_pythonpath(paths): + with self.project_on_sys_path(): + return self.run_tests() + + @property + def _argv(self): + return ['pytest'] + self.addopts + + def run_tests(self): + """ + Invoke pytest, replacing argv. Return result code. + """ + with _save_argv(_sys.argv[:1] + self.addopts): + result_code = __import__('pytest').main() + if result_code: + raise SystemExit(result_code) diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/LICENSE b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/LICENSE new file mode 100644 index 0000000..353924b --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/LICENSE @@ -0,0 +1,19 @@ +Copyright Jason R. Coombs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/PKG-INFO b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/PKG-INFO new file mode 100644 index 0000000..75c36d6 --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/PKG-INFO @@ -0,0 +1,185 @@ +Metadata-Version: 2.1 +Name: pytest-runner +Version: 6.0.1 +Summary: Invoke py.test as distutils command with dependency resolution +Home-page: https://github.com/pytest-dev/pytest-runner/ +Author: Jason R. Coombs +Author-email: jaraco@jaraco.com +Classifier: Development Status :: 7 - Inactive +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Framework :: Pytest +Requires-Python: >=3.7 +License-File: LICENSE +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: jaraco.packaging >=9 ; extra == 'docs' +Requires-Dist: rst.linker >=1.9 ; extra == 'docs' +Requires-Dist: jaraco.tidelift >=1.4 ; extra == 'docs' +Provides-Extra: testing +Requires-Dist: pytest >=6 ; extra == 'testing' +Requires-Dist: pytest-checkdocs >=2.4 ; extra == 'testing' +Requires-Dist: pytest-flake8 ; extra == 'testing' +Requires-Dist: pytest-cov ; extra == 'testing' +Requires-Dist: pytest-enabler >=1.0.1 ; extra == 'testing' +Requires-Dist: pytest-virtualenv ; extra == 'testing' +Requires-Dist: types-setuptools ; extra == 'testing' +Requires-Dist: pytest-black >=0.3.7 ; (platform_python_implementation != "PyPy") and extra == 'testing' +Requires-Dist: pytest-mypy >=0.9.1 ; (platform_python_implementation != "PyPy") and extra == 'testing' + +.. image:: https://img.shields.io/pypi/v/pytest-runner.svg + :target: `PyPI link`_ + +.. image:: https://img.shields.io/pypi/pyversions/pytest-runner.svg + :target: `PyPI link`_ + +.. _PyPI link: https://pypi.org/project/pytest-runner + +.. image:: https://github.com/pytest-dev/pytest-runner/workflows/tests/badge.svg + :target: https://github.com/pytest-dev/pytest-runner/actions?query=workflow%3A%22tests%22 + :alt: tests + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + +.. .. image:: https://readthedocs.org/projects/skeleton/badge/?version=latest +.. :target: https://skeleton.readthedocs.io/en/latest/?badge=latest + +.. image:: https://img.shields.io/badge/skeleton-2022-informational + :target: https://blog.jaraco.com/skeleton + +.. image:: https://tidelift.com/badges/package/pypi/pytest-runner + :target: https://tidelift.com/subscription/pkg/pypi-pytest-runner?utm_source=pypi-pytest-runner&utm_medium=readme + +Setup scripts can use pytest-runner to add setup.py test support for pytest +runner. + +Deprecation Notice +================== + +pytest-runner depends on deprecated features of setuptools and relies on features that break security +mechanisms in pip. For example 'setup_requires' and 'tests_require' bypass ``pip --require-hashes``. +See also `pypa/setuptools#1684 `_. + +It is recommended that you: + +- Remove ``'pytest-runner'`` from your ``setup_requires``, preferably removing the ``setup_requires`` option. +- Remove ``'pytest'`` and any other testing requirements from ``tests_require``, preferably removing the ``tests_requires`` option. +- Select a tool to bootstrap and then run tests such as tox. + +Usage +===== + +- Add 'pytest-runner' to your 'setup_requires'. Pin to '>=2.0,<3dev' (or + similar) to avoid pulling in incompatible versions. +- Include 'pytest' and any other testing requirements to 'tests_require'. +- Invoke tests with ``setup.py pytest``. +- Pass ``--index-url`` to have test requirements downloaded from an alternate + index URL (unnecessary if specified for easy_install in setup.cfg). +- Pass additional py.test command-line options using ``--addopts``. +- Set permanent options for the ``python setup.py pytest`` command (like ``index-url``) + in the ``[pytest]`` section of ``setup.cfg``. +- Set permanent options for the ``py.test`` run (like ``addopts`` or ``pep8ignore``) in the ``[pytest]`` + section of ``pytest.ini`` or ``tox.ini`` or put them in the ``[tool:pytest]`` + section of ``setup.cfg``. See `pytest issue 567 + `_. +- Optionally, set ``test=pytest`` in the ``[aliases]`` section of ``setup.cfg`` + to cause ``python setup.py test`` to invoke pytest. + +Example +======= + +The most simple usage looks like this in setup.py:: + + setup( + setup_requires=[ + 'pytest-runner', + ], + tests_require=[ + 'pytest', + ], + ) + +Additional dependencies require to run the tests (e.g. mock or pytest +plugins) may be added to tests_require and will be downloaded and +required by the session before invoking pytest. + +Follow `this search on github +`_ +for examples of real-world usage. + +Standalone Example +================== + +This technique is deprecated - if you have standalone scripts +you wish to invoke with dependencies, `use pip-run +`_. + +Although ``pytest-runner`` is typically used to add pytest test +runner support to maintained packages, ``pytest-runner`` may +also be used to create standalone tests. Consider `this example +failure `_, +reported in `jsonpickle #117 +`_ +or `this MongoDB test +`_ +demonstrating a technique that works even when dependencies +are required in the test. + +Either example file may be cloned or downloaded and simply run on +any system with Python and Setuptools. It will download the +specified dependencies and run the tests. Afterward, the the +cloned directory can be removed and with it all trace of +invoking the test. No other dependencies are needed and no +system configuration is altered. + +Then, anyone trying to replicate the failure can do so easily +and with all the power of pytest (rewritten assertions, +rich comparisons, interactive debugging, extensibility through +plugins, etc). + +As a result, the communication barrier for describing and +replicating failures is made almost trivially low. + +Considerations +============== + +Conditional Requirement +----------------------- + +Because it uses Setuptools setup_requires, pytest-runner will install itself +on every invocation of setup.py. In some cases, this causes delays for +invocations of setup.py that will never invoke pytest-runner. To help avoid +this contingency, consider requiring pytest-runner only when pytest +is invoked:: + + needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv) + pytest_runner = ['pytest-runner'] if needs_pytest else [] + + # ... + + setup( + #... + setup_requires=[ + #... (other setup requirements) + ] + pytest_runner, + ) + +For Enterprise +============== + +Available as part of the Tidelift Subscription. + +This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use. + +`Learn more `_. + +Security Contact +================ + +To report a security vulnerability, please use the +`Tidelift security contact `_. +Tidelift will coordinate the fix and disclosure. diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/RECORD b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/RECORD new file mode 100644 index 0000000..d7ff24d --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/RECORD @@ -0,0 +1,7 @@ +ptr/__init__.py,sha256=0UfzhCooVgCNTBwVEOPOVGEPck4pnl_6PTfsC-QzNGM,6730 +pytest_runner-6.0.1.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 +pytest_runner-6.0.1.dist-info/METADATA,sha256=Ho3FvAFjFHeY5OQ64WFzkLigFaIpuNr4G3uSmOk3nho,7319 +pytest_runner-6.0.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 +pytest_runner-6.0.1.dist-info/entry_points.txt,sha256=BqezBqeO63XyzSYmHYE58gKEFIjJUd-XdsRQkXHy2ig,58 +pytest_runner-6.0.1.dist-info/top_level.txt,sha256=DPzHbWlKG8yq8EOD5UgEvVNDWeJRPyimrwfShwV6Iuw,4 +pytest_runner-6.0.1.dist-info/RECORD,, diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/WHEEL b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/WHEEL new file mode 100644 index 0000000..98c0d20 --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.42.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/entry_points.txt b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/entry_points.txt new file mode 100644 index 0000000..0860670 --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/entry_points.txt @@ -0,0 +1,3 @@ +[distutils.commands] +ptr = ptr:PyTest +pytest = ptr:PyTest diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/requires.txt b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/requires.txt new file mode 100644 index 0000000..1535188 --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/requires.txt @@ -0,0 +1,17 @@ + +[docs] +sphinx +jaraco.packaging>=9 +rst.linker>=1.9 +jaraco.tidelift>=1.4 + +[testing] +pytest>=6 +pytest-checkdocs>=2.4 +pytest-flake8 +pytest-cov +pytest-enabler>=1.0.1 +pytest-virtualenv +types-setuptools +pytest-black>=0.3.7 +pytest-mypy>=0.9.1 diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/top_level.txt b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/top_level.txt new file mode 100644 index 0000000..e9148ae --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/EGG-INFO/top_level.txt @@ -0,0 +1 @@ +ptr diff --git a/.eggs/pytest_runner-6.0.1-py3.9.egg/ptr/__init__.py b/.eggs/pytest_runner-6.0.1-py3.9.egg/ptr/__init__.py new file mode 100644 index 0000000..41192fa --- /dev/null +++ b/.eggs/pytest_runner-6.0.1-py3.9.egg/ptr/__init__.py @@ -0,0 +1,216 @@ +""" +Implementation +""" + +import os as _os +import shlex as _shlex +import contextlib as _contextlib +import sys as _sys +import operator as _operator +import itertools as _itertools +import warnings as _warnings + +import pkg_resources +import setuptools.command.test as orig +from setuptools import Distribution + + +@_contextlib.contextmanager +def _save_argv(repl=None): + saved = _sys.argv[:] + if repl is not None: + _sys.argv[:] = repl + try: + yield saved + finally: + _sys.argv[:] = saved + + +class CustomizedDist(Distribution): + + allow_hosts = None + index_url = None + + def fetch_build_egg(self, req): + """Specialized version of Distribution.fetch_build_egg + that respects respects allow_hosts and index_url.""" + from setuptools.command.easy_install import easy_install + + dist = Distribution({'script_args': ['easy_install']}) + dist.parse_config_files() + opts = dist.get_option_dict('easy_install') + keep = ( + 'find_links', + 'site_dirs', + 'index_url', + 'optimize', + 'site_dirs', + 'allow_hosts', + ) + for key in list(opts): + if key not in keep: + del opts[key] # don't use any other settings + if self.dependency_links: + links = self.dependency_links[:] + if 'find_links' in opts: + links = opts['find_links'][1].split() + links + opts['find_links'] = ('setup', links) + if self.allow_hosts: + opts['allow_hosts'] = ('test', self.allow_hosts) + if self.index_url: + opts['index_url'] = ('test', self.index_url) + install_dir_func = getattr(self, 'get_egg_cache_dir', _os.getcwd) + install_dir = install_dir_func() + cmd = easy_install( + dist, + args=["x"], + install_dir=install_dir, + exclude_scripts=True, + always_copy=False, + build_directory=None, + editable=False, + upgrade=False, + multi_version=True, + no_report=True, + user=False, + ) + cmd.ensure_finalized() + return cmd.easy_install(req) + + +class PyTest(orig.test): + """ + >>> import setuptools + >>> dist = setuptools.Distribution() + >>> cmd = PyTest(dist) + """ + + user_options = [ + ('extras', None, "Install (all) setuptools extras when running tests"), + ( + 'index-url=', + None, + "Specify an index url from which to retrieve dependencies", + ), + ( + 'allow-hosts=', + None, + "Whitelist of comma-separated hosts to allow " + "when retrieving dependencies", + ), + ( + 'addopts=', + None, + "Additional options to be passed verbatim to the pytest runner", + ), + ] + + def initialize_options(self): + self.extras = False + self.index_url = None + self.allow_hosts = None + self.addopts = [] + self.ensure_setuptools_version() + + @staticmethod + def ensure_setuptools_version(): + """ + Due to the fact that pytest-runner is often required (via + setup-requires directive) by toolchains that never invoke + it (i.e. they're only installing the package, not testing it), + instead of declaring the dependency in the package + metadata, assert the requirement at run time. + """ + pkg_resources.require('setuptools>=27.3') + + def finalize_options(self): + if self.addopts: + self.addopts = _shlex.split(self.addopts) + + @staticmethod + def marker_passes(marker): + """ + Given an environment marker, return True if the marker is valid + and matches this environment. + """ + return ( + not marker + or not pkg_resources.invalid_marker(marker) + and pkg_resources.evaluate_marker(marker) + ) + + def install_dists(self, dist): + """ + Extend install_dists to include extras support + """ + return _itertools.chain( + orig.test.install_dists(dist), self.install_extra_dists(dist) + ) + + def install_extra_dists(self, dist): + """ + Install extras that are indicated by markers or + install all extras if '--extras' is indicated. + """ + extras_require = dist.extras_require or {} + + spec_extras = ( + (spec.partition(':'), reqs) for spec, reqs in extras_require.items() + ) + matching_extras = ( + reqs + for (name, sep, marker), reqs in spec_extras + # include unnamed extras or all if self.extras indicated + if (not name or self.extras) + # never include extras that fail to pass marker eval + and self.marker_passes(marker) + ) + results = list(map(dist.fetch_build_eggs, matching_extras)) + return _itertools.chain.from_iterable(results) + + @staticmethod + def _warn_old_setuptools(): + msg = ( + "pytest-runner will stop working on this version of setuptools; " + "please upgrade to setuptools 30.4 or later or pin to " + "pytest-runner < 5." + ) + ver_str = pkg_resources.get_distribution('setuptools').version + ver = pkg_resources.parse_version(ver_str) + if ver < pkg_resources.parse_version('30.4'): + _warnings.warn(msg) + + def run(self): + """ + Override run to ensure requirements are available in this session (but + don't install them anywhere). + """ + self._warn_old_setuptools() + dist = CustomizedDist() + for attr in 'allow_hosts index_url'.split(): + setattr(dist, attr, getattr(self, attr)) + for attr in ( + 'dependency_links install_requires tests_require extras_require ' + ).split(): + setattr(dist, attr, getattr(self.distribution, attr)) + installed_dists = self.install_dists(dist) + if self.dry_run: + self.announce('skipping tests (dry run)') + return + paths = map(_operator.attrgetter('location'), installed_dists) + with self.paths_on_pythonpath(paths): + with self.project_on_sys_path(): + return self.run_tests() + + @property + def _argv(self): + return ['pytest'] + self.addopts + + def run_tests(self): + """ + Invoke pytest, replacing argv. Return result code. + """ + with _save_argv(_sys.argv[:1] + self.addopts): + result_code = __import__('pytest').main() + if result_code: + raise SystemExit(result_code) diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/Time-Table.iml b/.idea/Time-Table.iml new file mode 100644 index 0000000..269e1a8 --- /dev/null +++ b/.idea/Time-Table.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..a136806 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,24 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8ae58c5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..84e9391 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Constants/constant.py b/Constants/constant.py index 6960403..51f853f 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -1,11 +1,13 @@ class Defaults: - room_capacity = 60 - working_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] - starting_section_fitness = 1000 - max_class_capacity = 250 - initial_no_of_chromosomes = 1000 - total_no_of_generations = 100 - class_strength = 50 + def __init__(self, config=None): + config = config or {} + self.room_capacity = config.get('room_capacity', 60) + self.working_days = config.get('working_days', ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]) + self.starting_section_fitness = config.get('starting_section_fitness', 1000) + self.max_class_capacity = config.get('max_class_capacity', 250) + self.initial_no_of_chromosomes = config.get('initial_no_of_chromosomes', 1000) + self.total_no_of_generations = config.get('total_no_of_generations', 100) + self.class_strength = config.get('class_strength', 50) @@ -45,21 +47,25 @@ def __init__( class PenaltyConstants: - PENALTY_TEACHER_DOUBLE_BOOKED = 30 - PENALTY_CLASSROOM_DOUBLE_BOOKED = 20 - PENALTY_OVER_CAPACITY = 25 - PENALTY_UN_PREFERRED_SLOT = 5 - PENALTY_OVERLOAD_TEACHER = 10 - PENALTY_NON_DUTY_DAY = 40 + def __init__(self, config=None): + config = config or {} + self.PENALTY_TEACHER_DOUBLE_BOOKED = config.get('teacher_double_booked', 30) + self.PENALTY_CLASSROOM_DOUBLE_BOOKED = config.get('classroom_double_booked', 20) + self.PENALTY_OVER_CAPACITY = config.get('over_capacity', 25) + self.PENALTY_UN_PREFERRED_SLOT = config.get('un_preferred_slot', 5) + self.PENALTY_OVERLOAD_TEACHER = config.get('overload_teacher', 10) + self.PENALTY_NON_DUTY_DAY = config.get('non_duty_day', 40) class SectionsConstants: - # Define attribute weights and conditions - ATTRIBUTE_WEIGHTS = { - "good_cgpa": 1, # 2^0 - "hostler": 2, # 2^1 - } - - ATTRIBUTE_CONDITIONS = { - "hostler": lambda student: student.get("is_hosteller", False), - } + def __init__(self, config=None): + config = config or {} + # Define attribute weights and conditions + self.ATTRIBUTE_WEIGHTS = config.get('attribute_weights', { + "good_cgpa": 1, # 2^0 + "hostler": 2, # 2^1 + }) + + self.ATTRIBUTE_CONDITIONS = config.get('attribute_conditions', { + "hostler": lambda student: student.get("is_hosteller", False), + }) diff --git a/Constants/section_allocation.py b/Constants/section_allocation.py index 687928d..8edf9c5 100644 --- a/Constants/section_allocation.py +++ b/Constants/section_allocation.py @@ -5,12 +5,13 @@ class StudentScorer: - def __init__(self, attribute_weights: Dict[str, int] = None): + def __init__(self, attribute_weights: Dict[str, int] = None, config=None): """ Initialize the scorer with attribute weights. Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. """ - self.attribute_weights = attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS + self.sections_constants = SectionsConstants(config) + self.attribute_weights = attribute_weights or self.sections_constants.ATTRIBUTE_WEIGHTS def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: int = 30) -> float: """ @@ -27,7 +28,7 @@ def assign_dynamic_conditions(self, cgpa_threshold: float): """ Assign a dynamic condition for CGPA based on the threshold. """ - SectionsConstants.ATTRIBUTE_CONDITIONS["good_cgpa"] = lambda student: student.get("cgpa", 0) >= cgpa_threshold + self.sections_constants.ATTRIBUTE_CONDITIONS["good_cgpa"] = lambda student: student.get("cgpa", 0) >= cgpa_threshold def calculate_student_score(self, student: Dict) -> int: """ @@ -35,7 +36,7 @@ def calculate_student_score(self, student: Dict) -> int: """ total_score = 0 for attribute, weight in self.attribute_weights.items(): - condition_func = SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False) + condition_func = self.sections_constants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False) if condition_func(student): total_score += weight return total_score diff --git a/GA/fitness.py b/GA/fitness.py index d88237e..0153f8a 100644 --- a/GA/fitness.py +++ b/GA/fitness.py @@ -24,9 +24,12 @@ def __init__( teacher_time_preferences, teacher_daily_workload, time_slots, + config=None, ): self.timetable = timetable - self.available_days = Defaults.working_days + self.defaults = Defaults(config) + self.penalty_constants = PenaltyConstants(config) + self.available_days = self.defaults.working_days self.all_sections = all_sections self.subject_teacher_mapping = subject_teacher_mapping self.available_classrooms = available_classrooms @@ -51,7 +54,7 @@ def evaluate_timetable_fitness(self): daily_section_fitness_scores[week][day] = {} day_fitness = 0 for section, section_schedule in day_schedule.items(): - section_fitness = Defaults.starting_section_fitness + section_fitness = self.defaults.starting_section_fitness classroom_time_slot_tracking = {} @@ -69,7 +72,7 @@ def evaluate_timetable_fitness(self): assigned_time_slot, ) in teacher_time_slot_tracking.keys(): section_fitness -= ( - PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED + self.penalty_constants.PENALTY_TEACHER_DOUBLE_BOOKED ) else: teacher_time_slot_tracking[ @@ -82,7 +85,7 @@ def evaluate_timetable_fitness(self): assigned_time_slot, ) in classroom_time_slot_tracking: section_fitness -= ( - PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED + self.penalty_constants.PENALTY_CLASSROOM_DOUBLE_BOOKED ) else: classroom_time_slot_tracking[ @@ -91,9 +94,9 @@ def evaluate_timetable_fitness(self): # Penalty 3: Over-capacity classrooms if section_strength > self.classroom_capacity.get( - assigned_classroom, Defaults.max_class_capacity + assigned_classroom, self.defaults.max_class_capacity ): - section_fitness -= PenaltyConstants.PENALTY_OVER_CAPACITY + section_fitness -= self.penalty_constants.PENALTY_OVER_CAPACITY # Penalty 4: Assigning teachers during unpreferred time slots preferred_time_slots = self.teacher_time_preferences.get( @@ -101,7 +104,7 @@ def evaluate_timetable_fitness(self): ) if assigned_time_slot not in preferred_time_slots: section_fitness -= ( - PenaltyConstants.PENALTY_UN_PREFERRED_SLOT + self.penalty_constants.PENALTY_UN_PREFERRED_SLOT ) # Penalty 5: Scheduling teacher on a non-duty day @@ -109,7 +112,7 @@ def evaluate_timetable_fitness(self): if assigned_day not in TeacherWorkload.teacher_duty_days.get( assigned_teacher, [] ): - section_fitness -= PenaltyConstants.PENALTY_NON_DUTY_DAY + section_fitness -= self.penalty_constants.PENALTY_NON_DUTY_DAY # Tracking teacher workload if assigned_teacher not in teacher_workload_tracking: @@ -125,7 +128,7 @@ def evaluate_timetable_fitness(self): teacher, 0 ): section_fitness -= ( - PenaltyConstants.PENALTY_OVERLOAD_TEACHER + self.penalty_constants.PENALTY_OVERLOAD_TEACHER ) daily_section_fitness_scores[week][day][section] = section_fitness diff --git a/Samples/Fitness_Files/LabConstraints.py b/Samples/Fitness_Files/LabConstraints.py index 52b2ef9..7f25148 100644 --- a/Samples/Fitness_Files/LabConstraints.py +++ b/Samples/Fitness_Files/LabConstraints.py @@ -3,103 +3,62 @@ from constants.time_intervals import TimeIntervalConstant -# Constants -LABS = ["Lab1", "Lab2", "Lab3", "Lab4"] -CLASSES = ["Class1", "Class2", "Class3", "Class4"] -TEACHERS = ["Teacher1", "Teacher2", "Teacher3", "Teacher4"] - -# Constraints -MAX_LAB_COUNT = 2 # Max labs per week for a teacher -MAX_CLASS_COUNT = 3 # Max classes per week for a teacher -MAX_TEACHER_WORKLOAD = 5 # Max hours a teacher can work in a week -MAX_CONTINUOUS_CLASSES = 2 # Max consecutive hours for a teacher - -# Workload for subjects -SUBJECT_WORKLOAD = { - "TCS-531": 3, - "TCS-502": 3, - "TCS-503": 3, - "PCS-506": 1, - "PCS-503": 1, - "TMA-502": 3, - "PMA-502": 1, - "TCS-509": 3, - "XCS-501": 2, - "CSP-501": 1, - "SCS-501": 1, - "Placement_Class": 1, -} -# Teacher availability and subjects they teach -TEACHER_SUBJECTS = { - "TCS-531": ["AB01", "PK02"], - "TCS-502": ["SS03", "AA04", "AC05"], - "TCS-503": ["SP06", "DP07", "AC05"], - "PCS-506": ["AD08", "RD09"], - "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], - "PMA-502": ["PM14", "AD08", "AA15"], - "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], - "XCS-501": ["DT20", "PA21", "NB22"], - "CSP-501": ["AK23"], - "SCS-501": ["AP24"], - "PCS-503": ["RS11", "DP07", "SP06", "VD25"], - "Placement_Class": ["AK26"], -} +class LabConstraintsConfig: + def __init__(self, config=None): + config = config or {} + + # Labs and Classes + self.LABS = config.get('labs', ["Lab1", "Lab2", "Lab3", "Lab4"]) + self.CLASSES = config.get('classes', ["Class1", "Class2", "Class3", "Class4"]) + self.TEACHERS = config.get('teachers', ["Teacher1", "Teacher2", "Teacher3", "Teacher4"]) + + # Constraints + self.MAX_LAB_COUNT = config.get('max_lab_count', 2) # Max labs per week for a teacher + self.MAX_CLASS_COUNT = config.get('max_class_count', 3) # Max classes per week for a teacher + self.MAX_TEACHER_WORKLOAD = config.get('max_teacher_workload', 5) # Max hours a teacher can work in a week + self.MAX_CONTINUOUS_CLASSES = config.get('max_continuous_classes', 2) # Max consecutive hours for a teacher + + # Workload for subjects + self.SUBJECT_WORKLOAD = config.get('subject_workload', { + "TCS-531": 3, + "TCS-502": 3, + "TCS-503": 3, + "PCS-506": 1, + "PCS-503": 1, + "TMA-502": 3, + "PMA-502": 1, + "TCS-509": 3, + "XCS-501": 2, + "CSP-501": 1, + "SCS-501": 1, + "Placement_Class": 1, + }) + + # Teacher availability and subjects they teach + self.TEACHER_SUBJECTS = config.get('teacher_subjects', { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"], + "PCS-503": ["RS11", "DP07", "SP06", "VD25"], + "Placement_Class": ["AK26"], + }) # Initialize available time slots -TimeSlots = ( - TimeIntervalConstant.time_slots -) # Assuming TimeIntervalConstant has a list of time intervals +TimeSlots = TimeIntervalConstant.time_slots class TimetableFitness: - def __init__(self): - self.teachers = TEACHERS - self.labs = LABS - self.classes = CLASSES - self.subject_workload = SUBJECT_WORKLOAD - self.teacher_subjects = TEACHER_SUBJECTS - self.teacher_schedule = {teacher: {} for teacher in self.teachers} - self.section_strength = {cls: random.randint(40, 60) for cls in self.classes} - - def assign_classes_and_labs(self): - """ - Assign classes and labs to teachers based on constraints and time slots. - """ - for teacher in self.teachers: - subjects = [ - subject - for subject, teachers in TEACHER_SUBJECTS.items() - if teacher in teachers - ] - for subject in subjects: - time_slot = random.choice( - TimeSlots - ) # Randomly select an available time slot - if time_slot not in self.teacher_schedule[teacher]: - self.teacher_schedule[teacher][time_slot] = subject - - def LabNo(self): - """ - Check if the number of labs assigned is within the constraints. - """ - for teacher, schedule in self.teacher_schedule.items(): - lab_count = sum(1 for subject in schedule.values() if subject in self.labs) - if lab_count > MAX_LAB_COUNT: - return False - return True - - def ClassNo(self): - """ - Check if the number of classes assigned is within the constraints. - """ - for teacher, schedule in self.teacher_schedule.items(): - class_count = sum( - 1 for subject in schedule.values() if subject in self.classes - ) - if class_count > MAX_CLASS_COUNT: - return False - return True + def __init__(self, config=None): + self.config = LabConstraintsConfig(config) + self.teacher_schedule = {} def TeacherWorkload(self): """ @@ -107,9 +66,9 @@ def TeacherWorkload(self): """ for teacher, schedule in self.teacher_schedule.items(): total_hours = sum( - SUBJECT_WORKLOAD.get(subject, 0) for subject in schedule.values() + self.config.SUBJECT_WORKLOAD.get(subject, 0) for subject in schedule.values() ) - if total_hours > MAX_TEACHER_WORKLOAD: + if total_hours > self.config.MAX_TEACHER_WORKLOAD: return False return True @@ -127,7 +86,7 @@ def ContinuousClasses(self): == 1 ): continuous_count += 1 - if continuous_count > MAX_CONTINUOUS_CLASSES: + if continuous_count > self.config.MAX_CONTINUOUS_CLASSES: return False else: continuous_count = 0 diff --git a/TimeTableLib.egg-info/PKG-INFO b/TimeTableLib.egg-info/PKG-INFO new file mode 100644 index 0000000..22d830f --- /dev/null +++ b/TimeTableLib.egg-info/PKG-INFO @@ -0,0 +1,125 @@ +Metadata-Version: 2.1 +Name: TimeTableLib +Version: 0.1.0 +Summary: This Library generates timetable and is a plug and play solution for any python based backend service. +License: MIT +Project-URL: Documentation, https://github.com/TImeTable-GEHU/Time-Table/blob/main/README.md +Project-URL: Source, https://github.com/TImeTable-GEHU/Time-Table +Requires-Python: >=3.7 + +# Timetable Scheduling Project + +## 📚 Overview +Welcome to the **Timetable Scheduling Project**! This repository documents research, findings, discussions, and progress on creating an efficient timetable scheduling system that addresses real-world challenges in academic scheduling. Our goal is to develop a scheduling model that optimally assigns rooms, teachers, and time slots while accommodating various constraints. + +## 🔍 Project Goals +- **Optimal Assignment**: Effectively allocate rooms, teachers, and time slots. +- **Constraint Management**: Consider teacher preferences, student load, room capacities, and subject assignments. +- **Dynamic Adaptability**: Adjust to changes, such as adding new rooms or teachers, without complete model retraining. +- **Simplicity and Flexibility**: Simplify complex constraints while remaining adaptable to real-world needs. + +## 🧬 Genetic Algorithm +The project employs a Genetic Algorithm (GA) to solve the scheduling problem, inspired by the principles of natural selection. Key modules in our GA include: + +1. **Data Encoding and Decoding**: Converting solutions into chromosomes for efficiency. +2. **Initial Population**: Generating a diverse set of potential solutions under specified constraints. +3. **Evaluation of Population**: Using a fitness function to assess solution quality. +4. **Crossover Evolution**: Creating new solutions by combining existing ones. +5. **Mutation**: Introducing random changes to explore new potential solutions. + +### Advantages +- Flexibility compared to manual systems +- Reduced processing power requirements +- Quick generation of accurate timetables +- User-friendly data entry and revision +- Improved productivity and minimal paperwork + +### Disadvantages +- Requires initial raw content input +- High memory consumption +- Internet connectivity needed + +## 📋 Applications +The genetic algorithm can efficiently create various timetables, including: +- University Timetable +- Exam Timetable +- School Timetable +- College Timetable +- Teacher Timetable + +## 📊 Results +The system generates distinct timetables for each class, faculty member, and lab, preventing slot conflicts and allowing customization. The program meets both hard and soft scheduling constraints. + +## ⚙️ Fitness Function +The fitness function is a critical component of our Genetic Algorithm, as it evaluates the quality of each timetable solution. It incorporates both hard and soft constraints to ensure a balanced and effective scheduling outcome. + +### Hard Constraints +These are strict requirements that must be satisfied for a solution to be considered valid: + +1. **No Overlap**: + - Teachers cannot be assigned to multiple classes at the same time. + - Time slots must not overlap for the same section. + - The same classroom cannot be allocated to multiple sections during the same time slot. + +2. **Room Capacity**: + - Each classroom's capacity must accommodate the number of students assigned to that class. + +3. **Time Slot Allocation**: + - Classes must be scheduled within designated time slots. + +4. **Teacher Load Distribution**: + - The total hours assigned to a teacher should not exceed their maximum allowable teaching hours. + +### Soft Constraints +These are preferences that enhance the quality of the solution but are not mandatory: + +1. **Teacher Preferences**: + - Assignments should consider teacher preferences for certain time slots or days. + +2. **Gaps Between Classes**: + - Minimizing the number of gaps between classes for teachers is preferred. + +3. **Balanced Workload**: + - Aim for a balanced distribution of classes among teachers to prevent overloading any single teacher. + +4. **Half Days for Sections** + - Every section should be provided half days so that resources can be utilised properly and also labs and calsses should be balanced. + +### Fitness Score Calculation +The fitness score is calculated based on the following criteria: + +- Each hard constraint violation deducts a significant penalty from the score (e.g., -100 points for each violation). +- Soft constraint preferences add to the score (e.g., +10 points for each preference met). +- The final score is a reflection of both the number of constraints satisfied and the overall quality of the timetable. + +A higher fitness score indicates a better solution, leading to more optimal timetables. The Genetic Algorithm iteratively evolves the population of solutions to maximize this fitness score over generations. + +## 🚀 Future Scope +This project aims to simplify faculty management by automatically assigning courses, considering workload balance, and tracking expertise. Future enhancements may include a master schedule for departments, integration with university websites, and personalized time slot assignments. + +## 🛠️ Installation + +To run this project, clone the repository, set up a virtual environment, and install the required dependencies: + +```bash +git clone https://github.com/yourusername/timetable-scheduling-project.git +cd timetable-scheduling-project + +# Set up a virtual environment +python -m venv venv + +# Activate the virtual environment +# For Linux/macOS: +source venv/bin/activate +# For Windows: +.\venv\Scripts\activate + +# Install dependencies +pip install -r requirements.txt + +# Optionally, set up environment variables in a .env file (e.g., DATABASE_URL, SECRET_KEY) +# Create and edit .env file with necessary variables +touch .env + +echo "Setup complete. You can now run the application." + diff --git a/TimeTableLib.egg-info/SOURCES.txt b/TimeTableLib.egg-info/SOURCES.txt new file mode 100644 index 0000000..707ecfa --- /dev/null +++ b/TimeTableLib.egg-info/SOURCES.txt @@ -0,0 +1,27 @@ +README.md +setup.py +Constants/__init__.py +Constants/classroom_allocate.py +Constants/classroom_tt.py +Constants/classroom_tt_csv.py +Constants/constant.py +Constants/helper_routines.py +Constants/is_conflict.py +Constants/is_conflict_new.py +Constants/section_allocation.py +Constants/teacher_tt_csv.py +Constants/teachers_tt.py +Constants/time_intervals.py +Constants/timetable_csv.py +GA/__init__.py +GA/chromosome.py +GA/fitness.py +GA/mutation.py +GA/selection.py +Samples/__init__.py +Samples/samples.py +TimeTableLib.egg-info/PKG-INFO +TimeTableLib.egg-info/SOURCES.txt +TimeTableLib.egg-info/dependency_links.txt +TimeTableLib.egg-info/requires.txt +TimeTableLib.egg-info/top_level.txt \ No newline at end of file diff --git a/TimeTableLib.egg-info/dependency_links.txt b/TimeTableLib.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/TimeTableLib.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/TimeTableLib.egg-info/requires.txt b/TimeTableLib.egg-info/requires.txt new file mode 100644 index 0000000..6efb963 --- /dev/null +++ b/TimeTableLib.egg-info/requires.txt @@ -0,0 +1,4 @@ +psycopg2-binary==2.9.9 +pytest==7.4.2 +ortools==9.11.4210 +icecream==2.1.3 diff --git a/TimeTableLib.egg-info/top_level.txt b/TimeTableLib.egg-info/top_level.txt new file mode 100644 index 0000000..aaadae1 --- /dev/null +++ b/TimeTableLib.egg-info/top_level.txt @@ -0,0 +1,3 @@ +Constants +GA +Samples diff --git a/build/lib/Constants/__init__.py b/build/lib/Constants/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/Constants/classroom_allocate.py b/build/lib/Constants/classroom_allocate.py new file mode 100644 index 0000000..5030f56 --- /dev/null +++ b/build/lib/Constants/classroom_allocate.py @@ -0,0 +1,56 @@ +from ortools.sat.python import cp_model + + +def assign_section_to_classes(x_section, y_classrooms, z_time_slots): + # Create a CP-SAT model + model = cp_model.CpModel() + + # Decision variables + classrooms = [ + model.NewIntVar(0, y_classrooms - 1, f"classroom_{i}") for i in range(x_section) + ] + timeslots = [ + model.NewIntVar(0, z_time_slots - 1, f"timeslot_{i}") for i in range(x_section) + ] + + # Constraints + # 1. No two section can share the same classroom and time slot + for i in range(x_section): + for j in range(i + 1, x_section): + # Define a Boolean variable for the condition (timeslots[i] == timeslots[j]) + same_timeslot = model.NewBoolVar(f"same_timeslot_{i}_{j}") + model.Add(timeslots[i] == timeslots[j]).OnlyEnforceIf(same_timeslot) + model.Add(timeslots[i] != timeslots[j]).OnlyEnforceIf(same_timeslot.Not()) + + # Enforce classroom difference if the timeslot is the same + model.Add(classrooms[i] != classrooms[j]).OnlyEnforceIf(same_timeslot) + + # Solver + solver = cp_model.CpSolver() + status = solver.Solve(model) + + # Check results + if status == cp_model.OPTIMAL or status == cp_model.FEASIBLE: + for i in range(x_section): + assigned_classroom = solver.Value(classrooms[i]) + assigned_timeslot = solver.Value(timeslots[i]) + print( + f"Subject {i + 1} -> Classroom {assigned_classroom}, Timeslot {assigned_timeslot}" + ) + else: + print("No feasible solution found.") + + +from datetime import datetime + +start_time = datetime.now() + +X = 80 # Number of section +Y = 50 # Number of classrooms +Z = 7 # Number of time slots + +assign_section_to_classes(X, Y, Z) + +end_time = datetime.now() + +print(end_time - start_time) diff --git a/build/lib/Constants/classroom_tt.py b/build/lib/Constants/classroom_tt.py new file mode 100644 index 0000000..262c3fe --- /dev/null +++ b/build/lib/Constants/classroom_tt.py @@ -0,0 +1,48 @@ +import json +from Samples.samples import (WorkingDays, SampleChromosome) + +class ClassroomTimetable: + def __init__(self): + # Dictionary to hold timetables for each classroom + self.classroom_timetable = {} + + def generate_classroom_timetable(self, chromosome): + for week, days in chromosome.items(): + for day, sections in days.items(): + for section, classes in sections.items(): + for entry in classes: + classroom_id = entry["classroom_id"] + + if classroom_id not in self.classroom_timetable: + self.classroom_timetable[classroom_id] = {day: {} for day in WorkingDays.days} + + if section not in self.classroom_timetable[classroom_id][day]: + self.classroom_timetable[classroom_id][day][section] = [] + + self.classroom_timetable[classroom_id][day][section].append({ + "subject_id": entry["subject_id"], + "teacher_id": entry["teacher_id"], + "time_slot": entry["time_slot"], + }) + + return self.classroom_timetable + + def save_timetable_to_json(self, file_path="Constants/classroom_timetable.json"): + try: + with open(file_path, "w") as json_file: + json.dump(self.classroom_timetable, json_file, indent=4) + # print(f"Timetable successfully saved to '{file_path}'.") + except Exception as e: + print(f"Error saving timetable to '{file_path}': {e}") + +if __name__ == "__main__": + # Generate classroom-wise timetable + classroom_timetable = ClassroomTimetable() + w = { + "Week 2": SampleChromosome.schedule2, + "Week 1": SampleChromosome.schedule1 + } + classroom_tt = classroom_timetable.generate_classroom_timetable(w) + print(classroom_tt) + # Save as JSON + classroom_timetable.save_timetable_to_json() diff --git a/build/lib/Constants/classroom_tt_csv.py b/build/lib/Constants/classroom_tt_csv.py new file mode 100644 index 0000000..6b59a1f --- /dev/null +++ b/build/lib/Constants/classroom_tt_csv.py @@ -0,0 +1,83 @@ +import os +import csv +from Samples.samples import (SampleChromosome,WorkingDays) +from Constants.classroom_tt import ClassroomTimetable # Ensure correct import + +# Predefined time slots mapping +time_slots = { + 1: "08:00 - 09:00", + 2: "09:00 - 10:00", + 3: "11:00 - 12:00", + 4: "12:00 - 13:00", + 5: "16:50 - 17:50", +} + +# Reverse lookup to get slot number from time string +time_slot_order = {v: k for k, v in time_slots.items()} + +# List of days in the correct order +days_of_week_order =WorkingDays.days + +def extract_time_slots(timetable): + """Extract and sort time slots from timetable.""" + unique_slots = set() + + # Collect all unique time slots + for day_data in timetable.values(): + for slots in day_data.values(): + for entry in slots: + if isinstance(entry, dict) and "time_slot" in entry: # ✅ Ensure correct structure + unique_slots.add(entry["time_slot"]) + else: + print(f"⚠️ ERROR: Unexpected entry format -> {entry}") + + # Sort slots based on predefined order + sorted_slots = sorted(unique_slots, key=lambda slot: time_slot_order.get(slot, float('inf'))) + + return [("CLASS", slot) for slot in sorted_slots] # Only include class slots + +def classroom_json_to_csv(classroom_timetable, output_folder): + """Convert classroom timetable JSON to CSV.""" + os.makedirs(output_folder, exist_ok=True) + + for classroom_id, schedule in classroom_timetable.items(): + final_slots = extract_time_slots(schedule) + csv_file = os.path.join(output_folder, f"{classroom_id}.csv") + header = ["DAY"] + [slot[1] for slot in final_slots] + rows = [] + + # Sort days correctly + sorted_days = sorted(schedule.items(), key=lambda x: days_of_week_order.index(x[0])) + + for day, day_data in sorted_days: + row = [day] + ["" for _ in final_slots] # Empty slots initially + + for section, classes in day_data.items(): + for entry in classes: + for i, slot in enumerate(final_slots): + if entry["time_slot"] == slot[1]: + row[i + 1] = f"{entry['subject_id']} ({section}, {entry['teacher_id']})" + + rows.append(row) + + # Write to CSV + with open(csv_file, mode="w", newline="", encoding="utf-8") as file: + writer = csv.writer(file) + writer.writerow(header) + writer.writerows(rows) + +if __name__ == "__main__": + # Generate classroom-wise timetable + classroom_timetable = ClassroomTimetable() + weekly_schedule = { + "Week 2": SampleChromosome.schedule2, + "Week 1": SampleChromosome.schedule1 + } + + classroom_tt = classroom_timetable.generate_classroom_timetable(weekly_schedule) + + # Output folder for CSV files + output_folder = "output_csvs" + + # Convert the generated timetable to CSV + classroom_json_to_csv(classroom_tt, output_folder) diff --git a/build/lib/Constants/constant.py b/build/lib/Constants/constant.py new file mode 100644 index 0000000..6960403 --- /dev/null +++ b/build/lib/Constants/constant.py @@ -0,0 +1,65 @@ +class Defaults: + room_capacity = 60 + working_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + starting_section_fitness = 1000 + max_class_capacity = 250 + initial_no_of_chromosomes = 1000 + total_no_of_generations = 100 + class_strength = 50 + + + +class TeacherPreferences: + def __init__(self, teacher_weekly_workload: dict): + self.teacher_preferences = {} + for teacher, workload in teacher_weekly_workload.items(): + self.teacher_preferences[teacher] = list(range(1, 8)) + + def get_preferences(self): + return self.teacher_preferences + + +class SubjectWeeklyQuota: + def __init__(self, subject_quota): + self.subject_quota = subject_quota + + +class TeacherPreloads: + def __init__(self, teacher_preferences: dict, weekly_workload: dict): + self.teacher_preferences = teacher_preferences + self.weekly_workload = weekly_workload + + +class TeachersDutyDays: + def __init__(self, teacher_duty_days: dict): + self.teacher_duty_days = teacher_duty_days + + +class SpecialSubjects: + def __init__( + self, special_subjects: list, labs: list, specialization_subjects: list + ): + self.special_subjects = special_subjects + self.labs = labs + self.specialization_subjects = specialization_subjects + + +class PenaltyConstants: + PENALTY_TEACHER_DOUBLE_BOOKED = 30 + PENALTY_CLASSROOM_DOUBLE_BOOKED = 20 + PENALTY_OVER_CAPACITY = 25 + PENALTY_UN_PREFERRED_SLOT = 5 + PENALTY_OVERLOAD_TEACHER = 10 + PENALTY_NON_DUTY_DAY = 40 + + +class SectionsConstants: + # Define attribute weights and conditions + ATTRIBUTE_WEIGHTS = { + "good_cgpa": 1, # 2^0 + "hostler": 2, # 2^1 + } + + ATTRIBUTE_CONDITIONS = { + "hostler": lambda student: student.get("is_hosteller", False), + } diff --git a/build/lib/Constants/helper_routines.py b/build/lib/Constants/helper_routines.py new file mode 100644 index 0000000..7b8a685 --- /dev/null +++ b/build/lib/Constants/helper_routines.py @@ -0,0 +1,39 @@ +def update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome): + for teacher_id, schedule_data in best_chromosome.items(): + if teacher_id in teacher_availability_matrix: + teacher_availability_matrix[teacher_id] = schedule_data + return teacher_availability_matrix + + +def update_matrix_for_best( + best_chromosome, teacher_availability_matrix, day_map, time_slot_map +): + for day_name, section_dict in best_chromosome.items(): + if day_name not in day_map: + continue # or raise an error + day_index = day_map[day_name] + + for section_name, schedule_items in section_dict.items(): + for item in schedule_items: + teacher_id = item["teacher_id"] + if teacher_id == "None": + continue + + time_slot_str = item["time_slot"] + if time_slot_str not in time_slot_map: + continue # or raise an error + slot_index = time_slot_map[time_slot_str] + + # Now set availability to False + teacher_availability_matrix[teacher_id][day_index][ + slot_index - 1 + ] = False + + return teacher_availability_matrix + + +def initialize_teacher_availability(teacher_list, num_days=5, num_slots=7): + return { + teacher: [[True] * num_slots for _ in range(num_days)] + for teacher in teacher_list + } diff --git a/build/lib/Constants/is_conflict.py b/build/lib/Constants/is_conflict.py new file mode 100644 index 0000000..dfb98b3 --- /dev/null +++ b/build/lib/Constants/is_conflict.py @@ -0,0 +1,138 @@ +import psycopg2 + +from Samples.samples import SampleChromosome + + +class IsConflict: + def __init__( + self, + dbname="timetable_postgres_db", + user="postgres", + password="13989333", + host="localhost", + port="5432", + ): + self.dbname = dbname + self.user = user + self.password = password + self.host = host + self.port = port + self.conn = None + self.cursor = None + + def connect_to_database(self): + try: + self.conn = psycopg2.connect( + dbname=self.dbname, + user=self.user, + password=self.password, + host=self.host, + port=self.port, + ) + self.cursor = self.conn.cursor() + except Exception as e: + print(f"Error connecting to database: {e}") + raise + + def insert_schedule(self, timetable, chromosome_name): + try: + for day, classes in timetable.items(): + for cls in classes: + self.cursor.execute( + """ + INSERT INTO schedule (chromosome, day, teacher_id, subject_id, classroom_id, time_slot) + VALUES (%s, %s, %s, %s, %s, %s); + """, + ( + chromosome_name, + day, + cls["teacher_id"], + cls["subject_id"], + "N/A", + cls["time_slot"], + ), + ) + self.conn.commit() + except Exception as e: + print(f"Error inserting schedule: {e}") + self.conn.rollback() + + def detect_teacher_conflicts(self): + try: + self.cursor.execute( + """ + SELECT s1.teacher_id, s1.day, s1.time_slot + FROM schedule s1 + JOIN schedule s2 + ON s1.teacher_id = s2.teacher_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND ( + s1.chromosome != s2.chromosome -- Conflict across chromosomes + OR s1.chromosome = s2.chromosome -- Conflict within the same chromosome + ) + GROUP BY s1.teacher_id, s1.day, s1.time_slot + HAVING COUNT(s1.teacher_id) > 1; -- More than one class for the same teacher at the same time + """ + ) + return self.cursor.fetchall() + except Exception as e: + print(f"Error detecting teacher conflicts: {e}") + return [] + + def truncate_schedule(self): + try: + self.cursor.execute("TRUNCATE TABLE schedule;") + self.conn.commit() + except Exception as e: + print(f"Error truncating schedule: {e}") + self.conn.rollback() + + def close_connection(self): + try: + if self.cursor: + self.cursor.close() + if self.conn: + self.conn.close() + except Exception as e: + print(f"Error closing connection: {e}") + + def process_schedules(self, timetable1, timetable2): + try: + self.connect_to_database() + + self.insert_schedule(timetable1, "Week 1") + self.insert_schedule(timetable2, "Week 2") + + teacher_conflicts = self.detect_teacher_conflicts() + conflicts = [] + + for conflict in teacher_conflicts: + conflicts.append( + { + "type": "Teacher Conflict", + "teacher": conflict[0], + "day": conflict[1], + "time_slot": conflict[2], + } + ) + + return conflicts + finally: + self.truncate_schedule() + self.close_connection() + + +if __name__ == "__main__": + timetable_processor = IsConflict() + sample_chromosome_1 = SampleChromosome() + sample_chromosome_2 = SampleChromosome() + chromosome1 = sample_chromosome_1.schedule1 + chromosome2 = sample_chromosome_2.schedule2 + + # Process the timetables and check for conflicts + conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) + + # Print the detected conflicts (if any) + print("Conflicts detected:") + print(conflicts) diff --git a/build/lib/Constants/is_conflict_new.py b/build/lib/Constants/is_conflict_new.py new file mode 100644 index 0000000..0433014 --- /dev/null +++ b/build/lib/Constants/is_conflict_new.py @@ -0,0 +1,154 @@ +import psycopg2 + +from Samples.samples import SampleChromosome + + +class IsConflict: + def __init__( + self, + dbname="timetable", + user="postgres", + password="root", + host="localhost", + port="5432", + ): + self.dbname = dbname + self.user = user + self.password = password + self.host = host + self.port = port + self.conn = None + self.cursor = None + + def connect_to_database(self): + try: + self.conn = psycopg2.connect( + dbname=self.dbname, + user=self.user, + password=self.password, + host=self.host, + port=self.port, + ) + self.cursor = self.conn.cursor() + print("Connected to PostgreSQL database!") + except Exception as e: + print(f"Error connecting to the database: {e}") + raise + + def insert_schedule(self, timetable, chromosome_name): + try: + for day, sections in timetable.items(): + for section, classes in sections.items(): + for cls in classes: + print( + f"Inserting data: {chromosome_name}, {day}, {section}, {cls['teacher_id']}, {cls['subject_id']}, {cls['classroom_id']}, {cls['time_slot']}" + ) + self.cursor.execute( + """ + INSERT INTO schedule (chromosome, day, section, teacher_id, subject_id, classroom_id, time_slot) + VALUES (%s, %s, %s, %s, %s, %s, %s); + """, + ( + chromosome_name, + day, + section, + cls["teacher_id"], + cls["subject_id"], + cls["classroom_id"], + cls["time_slot"], + ), + ) + self.conn.commit() + print(f"Schedule data for {chromosome_name} inserted successfully.") + except Exception as e: + self.conn.rollback() + print(f"Error inserting schedule data: {e}") + + def detect_teacher_conflicts(self): + self.cursor.execute( + """ + SELECT s1.teacher_id, s1.day, s1.time_slot, COUNT(*) + FROM schedule s1 + JOIN schedule s2 + ON s1.teacher_id = s2.teacher_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.teacher_id, s1.day, s1.time_slot + HAVING COUNT(*) > 1; + """ + ) + return self.cursor.fetchall() + + def detect_classroom_conflicts(self): + self.cursor.execute( + """ + SELECT s1.classroom_id, s1.day, s1.time_slot, COUNT(*) + FROM schedule s1 + JOIN schedule s2 + ON s1.classroom_id = s2.classroom_id + AND s1.time_slot = s2.time_slot + AND s1.day = s2.day + AND s1.chromosome != s2.chromosome + GROUP BY s1.classroom_id, s1.day, s1.time_slot + HAVING COUNT(*) > 1; + """ + ) + return self.cursor.fetchall() + + def truncate_schedule(self): + self.cursor.execute("TRUNCATE TABLE schedule;") + self.conn.commit() + print("Schedule table truncated.") + + def close_connection(self): + if self.cursor: + self.cursor.close() + if self.conn: + self.conn.close() + print("\nDatabase connection closed.") + + def process_schedules(self, timetable1, timetable2): + try: + self.connect_to_database() + + # Insert Chromosome data for both timetables + self.insert_schedule(timetable1, "Week 1") + self.insert_schedule(timetable2, "Week 2") + + # Check for Teacher Conflicts + teacher_conflicts = self.detect_teacher_conflicts() + + # Check for Classroom Conflicts + classroom_conflicts = self.detect_classroom_conflicts() + + # Return both conflicts as a dictionary + return { + "teacher_conflicts": teacher_conflicts, + "classroom_conflicts": classroom_conflicts, + } + + finally: + # Cleanup and close database connection + self.truncate_schedule() + self.close_connection() + + +if __name__ == "__main__": + timetable_processor = IsConflict() + sample_chromosome_1 = SampleChromosome() + sample_chromosome_2 = SampleChromosome() + chromosome1 = sample_chromosome_1.schedule1 + chromosome2 = sample_chromosome_2.schedule2 + conflicts = timetable_processor.process_schedules(chromosome1, chromosome2) + print("\nTeacher Conflicts:") + for conflict in conflicts["teacher_conflicts"]: + print( + f"Teacher ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}" + ) + + print("\nClassroom Conflicts:") + for conflict in conflicts["classroom_conflicts"]: + print( + f"Classroom ID: {conflict[0]}, Day: {conflict[1]}, Time Slot: {conflict[2]}, Conflict Count: {conflict[3]}" + ) diff --git a/build/lib/Constants/section_allocation.py b/build/lib/Constants/section_allocation.py new file mode 100644 index 0000000..687928d --- /dev/null +++ b/build/lib/Constants/section_allocation.py @@ -0,0 +1,78 @@ +import random +from collections import defaultdict +from typing import Dict, List +from Constants.constant import SectionsConstants + + +class StudentScorer: + def __init__(self, attribute_weights: Dict[str, int] = None): + """ + Initialize the scorer with attribute weights. + Defaults to SectionsConstants.ATTRIBUTE_WEIGHTS if not provided. + """ + self.attribute_weights = attribute_weights or SectionsConstants.ATTRIBUTE_WEIGHTS + + def calculate_dynamic_cgpa_threshold(self, students: List[Dict], top_percentage: int = 30) -> float: + """ + Calculate the CGPA threshold for the top X% of students. + """ + valid_cgpas = [student.get("cgpa", 0) for student in students if isinstance(student.get("cgpa"), (int, float))] + if not valid_cgpas: + return 0 # Default if no valid CGPAs + sorted_cgpas = sorted(valid_cgpas, reverse=True) + threshold_index = max(1, int(len(sorted_cgpas) * top_percentage / 100)) - 1 + return sorted_cgpas[threshold_index] + + def assign_dynamic_conditions(self, cgpa_threshold: float): + """ + Assign a dynamic condition for CGPA based on the threshold. + """ + SectionsConstants.ATTRIBUTE_CONDITIONS["good_cgpa"] = lambda student: student.get("cgpa", 0) >= cgpa_threshold + + def calculate_student_score(self, student: Dict) -> int: + """ + Calculate the score for a student based on attribute weights. + """ + total_score = 0 + for attribute, weight in self.attribute_weights.items(): + condition_func = SectionsConstants.ATTRIBUTE_CONDITIONS.get(attribute, lambda x: False) + if condition_func(student): + total_score += weight + return total_score + + def assign_scores_to_students(self, students): + # Step 1: Calculate CGPA threshold + cgpa_threshold = self.calculate_dynamic_cgpa_threshold(students) + self.assign_dynamic_conditions(cgpa_threshold) + + + # Step 2: Assign scores + for student in students: + student["score"] = self.calculate_student_score(student) + + + return students + + def divide_students_into_sections(self, students: List[Dict], class_strength: int = 50) -> List[List[Dict]]: + """ + Divide students into sections based on their scores and class strength. + """ + grouped_by_score = defaultdict(list) + for student in students: + grouped_by_score[student["score"]].append(student) + grouped_by_score[student["score"]].append(student) + + sections = [] + current_section = [] + + for score_group in grouped_by_score.values(): + for student in score_group: + current_section.append(student) + if len(current_section) == class_strength: + sections.append(current_section) + current_section = [] + + if current_section: + sections.append(current_section) + + return sections diff --git a/build/lib/Constants/teacher_tt_csv.py b/build/lib/Constants/teacher_tt_csv.py new file mode 100644 index 0000000..9f5418f --- /dev/null +++ b/build/lib/Constants/teacher_tt_csv.py @@ -0,0 +1,81 @@ +import os +import json +import csv +from Samples.samples import (WorkingDays, SampleChromosome) +from Constants.teachers_tt import TeacherTimetable + +# Predefined time slots mapping +time_slots = { + 1: "08:00 - 09:00", + 2: "09:00 - 10:00", + 3: "11:00 - 12:00", + 4: "12:00 - 13:00", + 5: "16:50 - 17:50", +} + +# Reverse lookup to get slot number from time string +time_slot_order = {v: k for k, v in time_slots.items()} + +# List of days in the correct order +days_of_week_order = WorkingDays.days + +def extract_time_slots(timetable): + """Extract and sort time slots without inserting breaks or lunch.""" + unique_slots = set() + + # Collect all unique time slots from timetable + for day_data in timetable.values(): + for slots in day_data.values(): + for entry in slots: + unique_slots.add(entry["time_slot"]) + + # Sort slots based on predefined order + sorted_slots = sorted(unique_slots, key=lambda slot: time_slot_order.get(slot, float('inf'))) + + # Only include class slots + final_slots = [("CLASS", slot) for slot in sorted_slots] + + return final_slots + +def teacher_json_to_csv(teacher_timetable, output_folder): + """Convert teacher timetable dictionary to CSV.""" + os.makedirs(output_folder, exist_ok=True) + + for teacher_id, schedule in teacher_timetable.items(): + final_slots = extract_time_slots(schedule) + csv_file = os.path.join(output_folder, f"{teacher_id}.csv") + header = ["DAY"] + [slot[1] for slot in final_slots] + rows = [] + + # Sort days correctly + sorted_days = sorted(schedule.items(), key=lambda x: days_of_week_order.index(x[0])) + + for day, day_data in sorted_days: + row = [day] + ["" for _ in final_slots] # Empty slots initially + + for section, classes in day_data.items(): + for entry in classes: + for i, slot in enumerate(final_slots): + if entry["time_slot"] == slot[1]: + row[i + 1] = f"{entry['subject_id']} ({section}, {entry['classroom_id']})" + + rows.append(row) + + with open(csv_file, mode="w", newline="", encoding="utf-8") as file: + writer = csv.writer(file) + writer.writerow(header) + writer.writerows(rows) + +if __name__ == "__main__": + # Generate teacher-wise timetable + teacher_timetable = TeacherTimetable() + w = { + "Week 2": SampleChromosome.schedule2, + "Week 1": SampleChromosome.schedule1 + } + teacher_tt = teacher_timetable.generate_teacher_timetable(w) + + # Convert generated timetable to CSVs + output_folder = "tt_csvs" # Folder to save CSVs + teacher_json_to_csv(teacher_tt, output_folder) +w \ No newline at end of file diff --git a/build/lib/Constants/teachers_tt.py b/build/lib/Constants/teachers_tt.py new file mode 100644 index 0000000..68b7377 --- /dev/null +++ b/build/lib/Constants/teachers_tt.py @@ -0,0 +1,93 @@ +import json + +from Samples.samples import SampleChromosome, SubjectTeacherMap, WorkingDays + + +class TeacherTimetable: + def __init__(self): + # Create timetable for each teacher + self.teacher_timetable = { + teacher: {day: [] for day in WorkingDays.days} + for teachers in SubjectTeacherMap.subject_teacher_map.values() + for teacher in teachers + } + self.teacher_assignments = { + teacher: {} + for teachers in SubjectTeacherMap.subject_teacher_map.values() + for teacher in teachers + } + + def generate_teacher_timetable(self, chromosome): + """ + Populate the teacher's timetable based on the provided chromosome schedule. + Now includes the course (Week 1, Week 2, etc.) information. + """ + for week, days in chromosome.items(): + for day, sections in days.items(): + for section, classes in sections.items(): + for entry in classes: + teacher_id = entry["teacher_id"] + subject_id = entry["subject_id"] + time_slot = entry["time_slot"] + classroom_id = entry["classroom_id"] + + # Conflict check: Ensure the teacher is not already assigned at this time slot + if ( + teacher_id in self.teacher_assignments + and time_slot in self.teacher_assignments[teacher_id] + ): + continue # Skip this assignment if there's a conflict + + # Add the class to the teacher's timetable + self.teacher_timetable[teacher_id][day].append( + { + "course": week, # Include course information (Week 1, Week 2) + "section": section, + "subject_id": subject_id, + "time_slot": time_slot, + "classroom_id": classroom_id, + } + ) + + # Update the teacher's assignments to reflect the added class + if teacher_id not in self.teacher_assignments: + self.teacher_assignments[teacher_id] = {} + self.teacher_assignments[teacher_id][time_slot] = { + "course": week, + "section": section, + "subject_id": subject_id, + "classroom_id": classroom_id, + "day": day, + } + + return self.teacher_timetable + + def save_timetable_to_json(self, file_path="Constants/teacher_timetable.json"): + """ + Create a dictionary and save the teacher's timetable to a JSON file. + """ + try: + # Create a dictionary explicitly from the teacher timetable + timetable_dict = { + teacher: {day: classes for day, classes in days.items()} + for teacher, days in self.teacher_timetable.items() + } + + # Save the dictionary to a JSON file + with open(file_path, "w") as json_file: + json.dump(timetable_dict, json_file, indent=4) + + print(f"Timetable successfully saved to '{file_path}'.") + except Exception as e: + print(f"Error saving timetable to '{file_path}': {e}") + + +if __name__ == "__main__": + teacher_timetable = TeacherTimetable() + # Generate timetable from the sample chromosome (Week 1 and Week 2) + w = {"Week 2": SampleChromosome.schedule2, "Week 1": SampleChromosome.schedule1} + + teacher_tt = teacher_timetable.generate_teacher_timetable(w) + print(teacher_tt) + # Save timetable to a JSON file + teacher_timetable.save_timetable_to_json() diff --git a/build/lib/Constants/time_intervals.py b/build/lib/Constants/time_intervals.py new file mode 100644 index 0000000..39444a3 --- /dev/null +++ b/build/lib/Constants/time_intervals.py @@ -0,0 +1,127 @@ +from datetime import datetime, timedelta + + +class TimeIntervalConstant: + time_slots = {} + time_mapping = {} + + @staticmethod + def generate_dynamic_schedule( + start_time, + period_duration=55, + total_periods=7, + break_after_periods=None, + lunch_after_period=4, + break_duration=10, + lunch_duration=30, + ): + if break_after_periods is None: + break_after_periods = set() + TimeIntervalConstant.time_slots.clear() + TimeIntervalConstant.time_mapping.clear() + + start_time = datetime.strptime(start_time, "%H:%M") + + current_time = start_time + period_counter = 1 + + while period_counter <= total_periods: + end_time = current_time + timedelta(minutes=period_duration) + time_slot = ( + f"{current_time.strftime('%H:%M')} - {end_time.strftime('%H:%M')}" + ) + TimeIntervalConstant.time_slots[period_counter] = time_slot + TimeIntervalConstant.time_mapping[time_slot] = period_counter + current_time = end_time + if period_counter in break_after_periods: + current_time += timedelta(minutes=break_duration) + if period_counter == lunch_after_period: + current_time += timedelta(minutes=lunch_duration) + + period_counter += 1 + + @staticmethod + def get_slot(slot_number: int) -> str: + """Retrieve time slot based on slot number. + + Args: + slot_number (int): The slot number corresponding to a time interval. + + Returns: + str: The time interval for the given slot number. + + Raises: + ValueError: If the slot number is out of the valid range. + """ + + if slot_number in TimeIntervalConstant.time_slots: + return TimeIntervalConstant.time_slots[slot_number] + + else: + max_slot = len(TimeIntervalConstant.time_slots) + raise ValueError( + f"Invalid slot number. Please provide a slot number between 1 and {max_slot + 1}." + ) + + @classmethod + def get_slot_number(cls, start_time: str, end_time: str): + """Get the slot number for a given start and end time. + + Args: + start_time (str): The start time in "HH:MM" format. + end_time (str): The end time in "HH:MM" format. + + Returns: + int or str: The slot number if found; otherwise, returns an error message. + """ + + try: + # Format start and end times to ensure they only include hours and minutes + start_time = str(datetime.strptime(start_time, "%H:%M").time()).strip(" ") + end_time = str(datetime.strptime(end_time, "%H:%M").time()).strip(" ") + + for slot, interval in cls.time_slots.items(): + # Making string in this format: "3:30 - 4:25". + slot_start_time = datetime.strptime( + interval.split(" - ")[0], "%H:%M" + ).time() + slot_end_time = datetime.strptime( + interval.split(" - ")[1], "%H:%M" + ).time() + + if start_time == slot_start_time and end_time == slot_end_time: + return slot + raise LookupError("No Time slot for this time interval found!") + + except ValueError: + raise ValueError("Invalid time format!") + + @staticmethod + def get_all_slot_numbers(): + """Retrieve all slot numbers.""" + return list(TimeIntervalConstant.time_slots.keys()) + + @staticmethod + def get_all_time_slots(): + """Retrieve all time intervals.""" + return list(TimeIntervalConstant.time_slots.values()) + + +TimeIntervalConstant.generate_dynamic_schedule( + "8:00", # Start time (positional argument) + 60, # Period duration (positional argument) + 7, # Total periods (positional argument) + {2, 6}, # Break after periods (positional argument) + 4, # Lunch after period (positional argument) + 60, # Break duration (positional argument) + 50, # Lunch duration (positional argument) +) + +slot_numbers = TimeIntervalConstant.get_all_slot_numbers() + + +time_slots = TimeIntervalConstant.get_all_time_slots() + + +# print("Slot Numbers:", slot_numbers) +# print("Time Slots:", time_slots) diff --git a/build/lib/Constants/timetable_csv.py b/build/lib/Constants/timetable_csv.py new file mode 100644 index 0000000..1b59b94 --- /dev/null +++ b/build/lib/Constants/timetable_csv.py @@ -0,0 +1,124 @@ +import os +import json +import csv +from datetime import datetime + +# Predefined time slots mapping +time_slots = { + 1: "8:00 - 9:00", + 2: "9:00 - 10:00", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", +} + +# Reverse lookup to get slot number from time string +time_slot_order = {v: k for k, v in time_slots.items()} + +# List of days in the order we want them to appear +days_of_week_order = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + +def parse_time(time_slot): + """Extract start and end times from a time slot string.""" + start_time_str, end_time_str = time_slot.split(" - ") + start_time = datetime.strptime(start_time_str.strip(), "%I:%M").time() + end_time = datetime.strptime(end_time_str.strip(), "%I:%M").time() + return start_time, end_time + +def extract_time_slots(timetable): + """Extract, sort time slots, and insert BREAK/LUNCH where needed.""" + unique_slots = set() + + # Collect all unique time slots from timetable + for day_data in timetable.values(): + for slots in day_data.values(): + for entry in slots: + unique_slots.add(entry["time_slot"]) + + # Sort slots based on predefined order + sorted_slots = sorted(unique_slots, key=lambda slot: time_slot_order[slot]) + + # Insert BREAK and LUNCH dynamically based on gaps + final_slots = [] + last_end_time = None + break_lunch_counter = 0 + + for slot in sorted_slots: + start_time, end_time = parse_time(slot) + + if last_end_time: + gap = (datetime.combine(datetime.today(), start_time) - datetime.combine(datetime.today(), last_end_time)).seconds / 60 + + if gap > 5: # If there's a gap greater than 5 minutes + break_time = f"{last_end_time.strftime('%I:%M')} - {start_time.strftime('%I:%M')}" + if break_lunch_counter == 0: + final_slots.append(("BREAK", break_time)) + elif break_lunch_counter == 1: + final_slots.append(("LUNCH", break_time)) + else: + final_slots.append(("BREAK", break_time)) + + break_lunch_counter += 1 # Increment counter + + final_slots.append(("CLASS", slot)) + last_end_time = end_time # Update last_end_time + + return final_slots + +def json_to_csv(input_folder, json_filename, output_folder): + """Convert JSON timetable to CSV with breaks and lunches inserted.""" + json_file = os.path.join(input_folder, json_filename) + + with open(json_file, "r", encoding="utf-8") as file: + timetable = json.load(file) + + sections = set() + final_slots = extract_time_slots(timetable) + + os.makedirs(output_folder, exist_ok=True) + + # Identify all sections + for day_data in timetable.values(): + for section in day_data.keys(): + sections.add(section) + + # Sort days in the correct order + sorted_days = sorted(timetable.items(), key=lambda x: days_of_week_order.index(x[0])) + + for section in sections: + csv_file = os.path.join(output_folder, f"{section}.csv") + header = ["DAY"] + [slot[1] for slot in final_slots] # Extract only time for header + rows = [] + + # Iterate over sorted days in the correct order + for day, day_data in sorted_days: # Sorted days based on days_of_week_order + # Initialize row with blank spaces + row = [day] + [""] * len(final_slots) # Initially empty for each time slot + + if section in day_data: + for entry in day_data[section]: + for i, slot in enumerate(final_slots): + # Compare and add the class schedule, BREAK, or LUNCH + if entry["time_slot"] == slot[1] and slot[0] == "CLASS": + row[i + 1] = f"{entry['subject_id']} ({entry['teacher_id']}, {entry['classroom_id']})" + elif slot[0] == "BREAK" or slot[0] == "LUNCH": + # Add BREAK and LUNCH to appropriate slots + row[i + 1] = slot[0] + + rows.append(row) + + # Write the row into CSV + with open(csv_file, mode="w", newline="", encoding="utf-8") as file: + writer = csv.writer(file) + writer.writerow(header) + writer.writerows(rows) + + print(f"CSV file '{csv_file}' has been created successfully!") + +if __name__ == "_main_": + input_folder = "." # Your input folder where the JSON file is located + json_filename = "new.json" # Replace with your actual JSON filename + output_folder = "output_csvs" # Output folder where CSV files will be saved + json_to_csv(input_folder, json_filename, output_folder) \ No newline at end of file diff --git a/build/lib/GA/__init__.py b/build/lib/GA/__init__.py new file mode 100644 index 0000000..fd7f346 --- /dev/null +++ b/build/lib/GA/__init__.py @@ -0,0 +1,258 @@ +import copy +from dataclasses import dataclass + +from Constants.helper_routines import ( + initialize_teacher_availability, + update_matrix_for_best, + update_teacher_availability_matrix, +) +from GA.chromosome import TimeTableGeneration +from GA.fitness import TimetableFitnessEvaluator +from GA.mutation import TimeTableCrossOver, TimeTableMutation +from GA.selection import TimeTableSelection + + +@dataclass +class TimetableConfig: + teacher_subject_mapping: dict + total_sections: dict + total_classrooms: dict + total_labs: dict + teacher_preferences: dict + teacher_weekly_workload: dict + special_subjects: dict + labs: dict + subject_quota_limits: dict + teacher_duty_days: dict + teacher_availability_matrix: dict + lab_availability_matrix: dict + total_generations: int + time_slots: dict + day_map: dict + time_slot_map: dict + prev_selected: dict = None + prev_mutated: list = None + fixed_teacher_assignment: dict = None + + +class TimetableEngine: + def __init__(self, config: TimetableConfig): + self.config = config + self.teacher_availability = copy.deepcopy(config.teacher_availability_matrix) + self.lab_availability = copy.deepcopy(config.lab_availability_matrix) + + def _update_lab_availability(self, best_timetable): + updated_lab = copy.deepcopy(self.config.lab_availability_matrix) + for weekday, daily_schedule in best_timetable.items(): + day_index = self.config.day_map.get(weekday) + if day_index is None: + continue + for allocations in daily_schedule.values(): + for alloc in allocations: + lab = alloc.get("classroom_id") + ts_index = self.config.time_slot_map.get(alloc.get("time_slot")) + if lab in updated_lab and ts_index is not None: + updated_lab[lab][day_index][ts_index - 1] = False + return updated_lab + + def _generate_timetable(self, teacher_matrix): + tg = TimeTableGeneration( + teacher_subject_mapping=self.config.teacher_subject_mapping, + total_sections=self.config.total_sections, + total_classrooms=self.config.total_classrooms, + total_labs=self.config.total_labs, + teacher_preferences=self.config.teacher_preferences, + teacher_weekly_workload=self.config.teacher_weekly_workload, + special_subjects=self.config.special_subjects, + labs=self.config.labs, + subject_quota_limits=self.config.subject_quota_limits, + teacher_duty_days=self.config.teacher_duty_days, + teacher_availability_matrix=teacher_matrix, + lab_availability_matrix=self.lab_availability, + time_slots=self.config.time_slots, + fixed_teacher_assignment=self.config.fixed_teacher_assignment or {} + ) + timetable, updated_teacher = tg.create_timetable(self.config.total_generations)[:2] + fitness = TimetableFitnessEvaluator( + timetable=timetable, + all_sections=list(tg.sections_manager.keys()), + subject_teacher_mapping=tg.subject_teacher_mapping, + available_classrooms=list(tg.classrooms_manager.keys()), + available_labs=list(tg.lab_capacity_manager.keys()), + classroom_capacity=tg.classrooms_manager, + section_student_strength=tg.sections_manager, + subject_quota_data=tg.subject_quota_limits, + teacher_time_preferences=tg.teacher_availability_preferences, + teacher_daily_workload=tg.weekly_workload, + time_slots=self.config.time_slots, + ).evaluate_timetable_fitness() + + selected = TimeTableSelection().select_chromosomes(fitness[1]) + if self.config.prev_selected: + selected.update(self.config.prev_selected) + + crossover = TimeTableCrossOver() + crossover_chromosomes = [] + selected_keys = list(selected.keys()) + for i in range(0, len(selected_keys), 2): + if i + 1 < len(selected_keys): + c1, c2 = crossover.perform_crossover( + timetable[selected_keys[i]], timetable[selected_keys[i + 1]] + ) + crossover_chromosomes.extend([c1, c2]) + + mutated = [TimeTableMutation().mutate_schedule_for_week(ch) for ch in crossover_chromosomes] + if self.config.prev_mutated: + mutated.extend(self.config.prev_mutated) + + best_chromosome, best_score = None, -1 + for key, score in selected.items(): + score = int(score) + if score > best_score and key in timetable: + best_score = score + best_chromosome = timetable[key] + + if best_chromosome: + updated_teacher = update_teacher_availability_matrix(teacher_matrix, best_chromosome) + return best_chromosome, updated_teacher, selected, mutated + + def run(self): + initial_teacher = copy.deepcopy(self.teacher_availability) + updated_teacher = copy.deepcopy(initial_teacher) + best_chromosome = None + + self.config.prev_selected = None + self.config.prev_mutated = None + + for _ in range(self.config.total_generations): + teacher_copy = copy.deepcopy(initial_teacher) + best, updated_teacher, selected, mutated = self._generate_timetable(teacher_copy) + best_chromosome = best + + self.config.prev_selected = selected + self.config.prev_mutated = mutated + + updated_teacher = update_matrix_for_best( + best_chromosome, + updated_teacher, + self.config.day_map, + self.config.time_slot_map, + ) + + updated_lab = self._update_lab_availability(best_chromosome) + return best_chromosome, updated_teacher, updated_lab + + +def run_timetable_generation( + teacher_subject_mapping: dict, + total_sections: dict, + total_classrooms: dict, + total_labs: dict, + teacher_preferences: dict, + teacher_weekly_workload: dict, + special_subjects: dict, + labs: dict, + subject_quota_limits: dict, + teacher_duty_days: dict, + teacher_availability_matrix: dict, + lab_availability_matrix: dict, + total_generations: int, + time_slots: dict, + day_map: dict, + time_slot_map: dict, + fixed_teacher_assignment: dict = None +): + config = TimetableConfig( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, + total_generations=total_generations, + time_slots=time_slots, + day_map=day_map, + time_slot_map=time_slot_map, + fixed_teacher_assignment=fixed_teacher_assignment or {} + ) + engine = TimetableEngine(config) + return engine.run() + + +if __name__ == "__main__": + from Constants.constant import Defaults + from Samples.samples import ( + SpecialSubjects, + SubjectTeacherMap, + SubjectWeeklyQuota, + TeacherWorkload, + ) + + lab_matrix = { + "L1": [[True] * 7 for _ in range(5)], + "L2": [[True] * 7 for _ in range(5)], + "L3": [[True] * 7 for _ in range(5)], + "L4": [[True] * 7 for _ in range(5)], + "L5": [[True] * 7 for _ in range(5)], + "L6": [[True] * 7 for _ in range(5)], + } + + teacher_availability = initialize_teacher_availability( + TeacherWorkload.Weekly_workLoad.keys(), 5, 7 + ) + + best_tt, final_teacher, final_lab = run_timetable_generation( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections={"A": 70, "B": 100, "C": 75, "D": 100}, + total_classrooms={"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250}, + total_labs={"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50}, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + labs=SpecialSubjects.Labs, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + teacher_availability_matrix=teacher_availability, + lab_availability_matrix=lab_matrix, + total_generations=Defaults.total_no_of_generations, + time_slots={ + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + }, + day_map={ + "Monday": 0, + "Tuesday": 1, + "Wednesday": 2, + "Thursday": 3, + "Friday": 4, + "Saturday": 5, + "Sunday": 6, + }, + time_slot_map={ + "9:00 - 9:55": 1, + "9:55 - 10:50": 2, + "11:10 - 12:05": 3, + "12:05 - 1:00": 4, + "1:20 - 2:15": 5, + "2:15 - 3:10": 6, + "3:30 - 4:25": 7, + }, + fixed_teacher_assignment={ + "A": {"TCS-531": "AB01", "TMA-502": "HP18"}, # section: {"subject": teacher} + "B": {"TCS-503": "BJ10"} + } + ) + + from icecream import ic + ic(best_tt, final_teacher, final_lab) diff --git a/build/lib/GA/chromosome.py b/build/lib/GA/chromosome.py new file mode 100644 index 0000000..69c7daf --- /dev/null +++ b/build/lib/GA/chromosome.py @@ -0,0 +1,351 @@ +import copy +import random +from math import ceil + +from Constants.constant import Defaults + + +class TimeTableGeneration: + def __init__( + self, + teacher_subject_mapping: dict, + total_sections: dict, + total_classrooms: dict, + total_labs: dict, + teacher_preferences: dict, + teacher_weekly_workload: dict, + special_subjects: dict, + labs: dict, + subject_quota_limits: dict, + teacher_duty_days: dict, + teacher_availability_matrix: dict, + lab_availability_matrix: dict, + time_slots: dict, + fixed_teacher_assignment: dict = None, + ): + self.sections_manager = total_sections + self.classrooms_manager = total_classrooms + self.lab_capacity_manager = total_labs + self.weekdays = Defaults.working_days + self.subject_teacher_mapping = teacher_subject_mapping + self.subject_quota_limits = subject_quota_limits + self.lab_subject_list = labs + self.special_subject_list = special_subjects + self.teacher_availability_preferences = teacher_preferences + self.available_time_slots = time_slots + self.teacher_duty_days = teacher_duty_days + self.weekly_workload = teacher_weekly_workload + self.teacher_availability_matrix = teacher_availability_matrix + self.initial_lab_availability_matrix = copy.deepcopy(lab_availability_matrix) + self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) + self.fixed_teacher_assignment = fixed_teacher_assignment or {} + self._map_sections_to_classrooms() + + def _map_sections_to_classrooms(self) -> dict: + sorted_classrooms = sorted( + self.classrooms_manager.items(), + key = lambda item: item[1], + reverse=True + ) + sorted_sections = sorted( + self.sections_manager.items(), + key = lambda item: item[1], + reverse = True + ) + section_classroom_map = {} + + for section, student_count in sorted_sections: + for index, (classroom, capacity) in enumerate(sorted_classrooms): + if capacity >= student_count: + section_classroom_map[section] = classroom + sorted_classrooms.pop(index) + break + + self.section_to_classroom_map = section_classroom_map + return section_classroom_map + + + def _initialize_teacher_workload_tracker(self) -> dict: + return { + teacher: 0 + for teacher in self.weekly_workload + } + + + def _get_available_subjects(self, section: str, subject_usage_tracker: dict) -> list: + return [ + subject + for subject in self.subject_teacher_mapping + if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) + ] + + + def _assign_subject_and_teacher( + self, + section: str, + slot_index: int, + subjects_scheduled_today: set, + assigned_classroom: str, + subject_usage_tracker: dict, + teacher_workload_tracker: dict, + teacher_availability_matrix: dict, + day_index: int, + ) -> tuple: + available_subjects = self._get_available_subjects(section, subject_usage_tracker) + random.shuffle(available_subjects) + assigned_teacher = None + selected_subject = None + assigned_room = assigned_classroom + + for subject in available_subjects: + if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: + continue + if subject not in subjects_scheduled_today: + # First, check for a fixed teacher assignment for (section, subject) + fixed_teacher = self.fixed_teacher_assignment.get(section, {}).get(subject) + if fixed_teacher: + if ( + fixed_teacher in teacher_availability_matrix and + len(teacher_availability_matrix[fixed_teacher]) > day_index and + len(teacher_availability_matrix[fixed_teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[fixed_teacher][day_index][slot_index - 1] + ): + assigned_teacher = fixed_teacher + teacher_workload_tracker[fixed_teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + break + + # Otherwise, assign normally from the available pool + teachers = self.subject_teacher_mapping[subject] + preferred_teachers = [ + t for t in teachers if self.teacher_availability_preferences.get(t, []) + ] + for teacher in sorted(preferred_teachers, key=lambda t: teacher_workload_tracker[t]): + if ( + teacher in teacher_availability_matrix and + len(teacher_availability_matrix[teacher]) > day_index and + len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[teacher][day_index][slot_index - 1] + ): + assigned_teacher = teacher + teacher_workload_tracker[teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + break + + if assigned_teacher: + break + + if not assigned_teacher: + selected_subject = "Library" + assigned_teacher = "None" + return assigned_teacher, selected_subject, assigned_room + + + def _allocate_lab( + self, + teacher: str, + subject: str, + day_index: int, + slot_index: int, + section_strength: int, + ) -> tuple: + group1_size = ceil(section_strength / 2) + group2_size = section_strength - group1_size + labs_list = list(self.lab_availability_matrix.keys()) + + for i in range(len(labs_list)): + lab1 = labs_list[i] + if ( + self.lab_availability_matrix[lab1][day_index][slot_index - 1] + and self.lab_availability_matrix[lab1][day_index][slot_index] + and self.lab_capacity_manager.get(lab1, 0) >= group1_size + ): + for j in range(i + 1, len(labs_list)): + lab2 = labs_list[j] + if ( + self.lab_availability_matrix[lab2][day_index][slot_index - 1] + and self.lab_availability_matrix[lab2][day_index][slot_index] + and self.lab_capacity_manager.get(lab2, 0) >= group2_size + ): + self.lab_availability_matrix[lab1][day_index][ + slot_index - 1 + ] = False + self.lab_availability_matrix[lab1][day_index][ + slot_index + ] = False + self.lab_availability_matrix[lab2][day_index][ + slot_index - 1 + ] = False + self.lab_availability_matrix[lab2][day_index][ + slot_index + ] = False + entries = [ + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index], + "group": 1, + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index + 1], + "group": 1, + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index], + "group": 2, + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index + 1], + "group": 2, + }, + ] + return entries, slot_index + 2 + + merged_entry = { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": "merged_lab", + "time_slot": self.available_time_slots[slot_index], + "group": "merged", + "flagged": False, + } + return [merged_entry], slot_index + 1 + + + def _generate_section_schedule( + self, + section: str, + half_day_sections: list, + subject_usage_tracker: dict, + teacher_workload_tracker: dict, + teacher_availability_matrix: dict, + day_index: int, + section_strength: int, + ) -> tuple: + schedule = [] + subjects_scheduled = set() + assigned_classroom = self.section_to_classroom_map[section] + total_slots = 4 if section in half_day_sections else 7 + slot_index = 1 + + while slot_index <= total_slots: + teacher, subject, room = self._assign_subject_and_teacher( + section, + slot_index, + subjects_scheduled, + assigned_classroom, + subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index, + ) + time_slot = self.available_time_slots[slot_index] + if subject in self.lab_subject_list or subject == "Placement_Class": + if slot_index <= total_slots - 1: + lab_entries, slot_index = self._allocate_lab( + teacher, subject, day_index, slot_index, section_strength + ) + schedule.extend(lab_entries) + subject_usage_tracker[section][subject] += len(lab_entries) + else: + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_classroom, + "time_slot": time_slot, + "group": "fallback", + } + ) + subject_usage_tracker[section][subject] += 1 + slot_index += 1 + else: + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, + "time_slot": time_slot, + "group": "all", + } + ) + if subject != "Library": + subject_usage_tracker[section][subject] += 1 + slot_index += 1 + + return schedule, teacher_availability_matrix + + + def generate_daily_schedule( + self, + sections: list, + half_day_sections: list, + subject_usage_tracker: dict, + day_index: int, + ) -> tuple: + daily_schedule = {} + teacher_workload = self._initialize_teacher_workload_tracker() + for section in sections: + section_strength = self.sections_manager[section] + ( + schedule, + self.teacher_availability_matrix, + ) = self._generate_section_schedule( + section, + half_day_sections, + subject_usage_tracker, + teacher_workload, + self.teacher_availability_matrix, + day_index, + section_strength, + ) + daily_schedule[section] = schedule + return daily_schedule, subject_usage_tracker, self.teacher_availability_matrix + + + def _generate_weekly_schedule(self) -> tuple: + weekly_schedule = {} + subject_usage = { + section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} + for section in self.sections_manager.keys() + } + sections = list(self.sections_manager.keys()) + for day_index, weekday in enumerate(self.weekdays): + random.shuffle(sections) + half_day = sections[: len(sections) // 2] + ( + daily_sched, + subject_usage, + self.teacher_availability_matrix, + ) = self.generate_daily_schedule( + sections, half_day, subject_usage, day_index + ) + weekly_schedule[weekday] = daily_sched + return weekly_schedule, subject_usage, self.teacher_availability_matrix + + + def create_timetable(self, num_weeks: int) -> tuple: + timetable = {} + for week in range(1, num_weeks + 1): + self.lab_availability_matrix = copy.deepcopy( + self.initial_lab_availability_matrix + ) + ( + weekly_schedule, + _, + self.teacher_availability_matrix, + ) = self._generate_weekly_schedule() + timetable[f"Week {week}"] = weekly_schedule + return timetable, self.teacher_availability_matrix, self.lab_availability_matrix diff --git a/build/lib/GA/fitness.py b/build/lib/GA/fitness.py new file mode 100644 index 0000000..d88237e --- /dev/null +++ b/build/lib/GA/fitness.py @@ -0,0 +1,191 @@ +import json + +from Constants.constant import Defaults, PenaltyConstants +from GA.chromosome import TimeTableGeneration +from Samples.samples import ( + SpecialSubjects, + SubjectTeacherMap, + SubjectWeeklyQuota, + TeacherWorkload, +) + + +class TimetableFitnessEvaluator: + def __init__( + self, + timetable, + all_sections, + subject_teacher_mapping, + available_classrooms, + available_labs, + classroom_capacity, + section_student_strength, + subject_quota_data, + teacher_time_preferences, + teacher_daily_workload, + time_slots, + ): + self.timetable = timetable + self.available_days = Defaults.working_days + self.all_sections = all_sections + self.subject_teacher_mapping = subject_teacher_mapping + self.available_classrooms = available_classrooms + self.available_labs = available_labs + self.classroom_capacity = classroom_capacity + self.section_student_strength = section_student_strength + self.subject_quota_data = subject_quota_data + self.teacher_time_preferences = teacher_time_preferences + self.teacher_daily_workload = teacher_daily_workload + self.time_slots = time_slots + + def evaluate_timetable_fitness(self): + daily_section_fitness_scores = {} + weekly_fitness_scores = {} + teacher_workload_tracking = {} + + for week, week_schedule in self.timetable.items(): + weekly_fitness = 0 + daily_section_fitness_scores[week] = {} + teacher_time_slot_tracking = {} + for day, day_schedule in week_schedule.items(): + daily_section_fitness_scores[week][day] = {} + day_fitness = 0 + for section, section_schedule in day_schedule.items(): + section_fitness = Defaults.starting_section_fitness + + classroom_time_slot_tracking = {} + + for schedule_item in section_schedule: + assigned_teacher = schedule_item["teacher_id"] + assigned_classroom = schedule_item["classroom_id"] + assigned_time_slot = self.time_slots.get( + schedule_item["time_slot"] + ) + section_strength = self.section_student_strength.get(section, 0) + + # Penalty 1: Double booking a teacher in the same time slot + if ( + assigned_teacher, + assigned_time_slot, + ) in teacher_time_slot_tracking.keys(): + section_fitness -= ( + PenaltyConstants.PENALTY_TEACHER_DOUBLE_BOOKED + ) + else: + teacher_time_slot_tracking[ + (assigned_teacher, assigned_time_slot) + ] = section + + # Penalty 2: Double booking a classroom in the same time slot + if ( + assigned_classroom, + assigned_time_slot, + ) in classroom_time_slot_tracking: + section_fitness -= ( + PenaltyConstants.PENALTY_CLASSROOM_DOUBLE_BOOKED + ) + else: + classroom_time_slot_tracking[ + (assigned_classroom, assigned_time_slot) + ] = section + + # Penalty 3: Over-capacity classrooms + if section_strength > self.classroom_capacity.get( + assigned_classroom, Defaults.max_class_capacity + ): + section_fitness -= PenaltyConstants.PENALTY_OVER_CAPACITY + + # Penalty 4: Assigning teachers during unpreferred time slots + preferred_time_slots = self.teacher_time_preferences.get( + assigned_teacher, [] + ) + if assigned_time_slot not in preferred_time_slots: + section_fitness -= ( + PenaltyConstants.PENALTY_UN_PREFERRED_SLOT + ) + + # Penalty 5: Scheduling teacher on a non-duty day + assigned_day = day + if assigned_day not in TeacherWorkload.teacher_duty_days.get( + assigned_teacher, [] + ): + section_fitness -= PenaltyConstants.PENALTY_NON_DUTY_DAY + + # Tracking teacher workload + if assigned_teacher not in teacher_workload_tracking: + teacher_workload_tracking[assigned_teacher] = [] + teacher_workload_tracking[assigned_teacher].append( + assigned_time_slot + ) + + # Penalty 6: Exceeding teacher daily workload + for teacher, times_assigned in teacher_workload_tracking.items(): + if teacher is not None: + if len(times_assigned) > self.teacher_daily_workload.get( + teacher, 0 + ): + section_fitness -= ( + PenaltyConstants.PENALTY_OVERLOAD_TEACHER + ) + + daily_section_fitness_scores[week][day][section] = section_fitness + day_fitness += section_fitness + + weekly_fitness += day_fitness + + weekly_fitness_scores[week] = weekly_fitness + + return daily_section_fitness_scores, weekly_fitness_scores + + +if __name__ == "__main__": + total_sections = 6 + total_classrooms = 8 + total_labs = 3 + + # Generate timetable + timetable_generator = TimeTableGeneration( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + ) + generated_timetables = timetable_generator.create_timetable(5) + + # Evaluate fitness + fitness_evaluator = TimetableFitnessEvaluator( + generated_timetables, + timetable_generator.sections_manager.sections, + SubjectTeacherMap.subject_teacher_map, + timetable_generator.classrooms_manager.classrooms, + timetable_generator.classrooms_manager.labs, + timetable_generator.room_capacity_manager.room_capacity, + timetable_generator.room_capacity_manager.section_strength, + timetable_generator.subject_quota_limits, + timetable_generator.teacher_availability_preferences, + timetable_generator.weekly_workload, + ) + + ( + section_fitness_data, + weekly_fitness_data, + ) = fitness_evaluator.evaluate_timetable_fitness() + + # Save results + with open("GA/chromosome.json", "w") as timetable_file: + json.dump(generated_timetables, timetable_file, indent=4) + + fitness_output_data = { + "section_fitness_scores": section_fitness_data, + "weekly_fitness_scores": weekly_fitness_data, + } + + with open("GA/fitness.json", "w") as fitness_scores_file: + json.dump(fitness_output_data, fitness_scores_file, indent=4) + + print("Timetable and fitness scores have been saved.") diff --git a/build/lib/GA/mutation.py b/build/lib/GA/mutation.py new file mode 100644 index 0000000..9416ff4 --- /dev/null +++ b/build/lib/GA/mutation.py @@ -0,0 +1,38 @@ +import copy +import random + +from Constants.constant import Defaults + + +class TimeTableMutation: + def __init__(self, mutation_rate=0.7): + self.mutation_rate = mutation_rate + + def mutate_time_slots_in_section(self, schedule: dict, section: str) -> bool: + if section not in schedule or len(schedule[section]) < 2: + return False + + section_slots = schedule[section] + time_slots = [entry["time_slot"] for entry in section_slots] + random.shuffle(time_slots) + for i, entry in enumerate(section_slots): + entry["time_slot"] = time_slots[i] + return True + + def mutate_schedule_for_week(self, weekly_schedule: dict) -> dict: + mutated_schedule = copy.deepcopy(weekly_schedule) + for day, day_schedule in mutated_schedule.items(): + sections = list(day_schedule.keys()) + num_to_mutate = max(1, int(self.mutation_rate * len(sections))) + sections_to_mutate = random.sample(sections, num_to_mutate) + for section in sections_to_mutate: + self.mutate_time_slots_in_section(day_schedule, section) + return mutated_schedule + + +class TimeTableCrossOver: + def perform_crossover(self, timetable1: dict, timetable2: dict) -> tuple: + for day in Defaults.working_days: + if day in timetable1 and day in timetable2: + timetable1[day], timetable2[day] = timetable2[day], timetable1[day] + return timetable1, timetable2 diff --git a/build/lib/GA/selection.py b/build/lib/GA/selection.py new file mode 100644 index 0000000..b761136 --- /dev/null +++ b/build/lib/GA/selection.py @@ -0,0 +1,97 @@ +import random + + +class TimeTableSelection: + def __init__(self): + pass + + def select_chromosomes( + self, weekly_fitness_scores, top_percentage=0.20, roulette_percentage=0.10 + ): + """ + Entry point for selecting chromosomes. + Select chromosomes based on top scores and roulette-wheel selection. + """ + + if not weekly_fitness_scores: + print("Weekly fitness scores are empty. Ensure data is loaded correctly!") + return {} + + top_selected, remaining_scores = self.get_top_and_remaining_items( + weekly_fitness_scores, top_percentage + ) + + roulette_selected = self.roulette_wheel_selection( + remaining_scores, int(len(weekly_fitness_scores) * roulette_percentage) + ) + + selected_fitness = {**top_selected, **roulette_selected} + # self.display_selected_chromosomes(selected_fitness) + return selected_fitness + + @staticmethod + def calculate_cumulative_probabilities(scores): + """ + Calculate cumulative probabilities for roulette wheel selection. + """ + + cumulative_probabilities = [] + cumulative_sum = 0 + + for week, score in scores.items(): + cumulative_sum += score + cumulative_probabilities.append((cumulative_sum, week)) + + return cumulative_probabilities + + @staticmethod + def perform_roulette_selection(cumulative_probabilities, total_fitness, num_select): + """ + Perform roulette-wheel selection to choose items. + """ + + selected_items = [] + for _ in range(num_select): + rand_value = random.uniform(0, total_fitness) + for cumulative_sum, week in cumulative_probabilities: + if rand_value <= cumulative_sum: + selected_items.append(week) + break + + return selected_items + + def roulette_wheel_selection(self, scores, num_select): + """ + Select items using roulette-wheel selection. + """ + + if not scores: + print("Scores are empty. Cannot perform roulette selection.") + return {} + + total_fitness = sum(scores.values()) + cumulative_probabilities = self.calculate_cumulative_probabilities(scores) + selected_items = self.perform_roulette_selection( + cumulative_probabilities, total_fitness, num_select + ) + return {week: scores[week] for week in selected_items} + + @staticmethod + def get_top_and_remaining_items(scores, percentage): + num_select = max( + 1, int(len(scores) * percentage) + ) # at least 1 chromosome to select. + sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) + top_selected = dict(sorted_scores[:num_select]) + remaining_items = dict(sorted_scores[num_select:]) + return top_selected, remaining_items + + @staticmethod + def display_selected_chromosomes(selected_fitness): + """ + Display the selected chromosomes and their fitness scores. + """ + + print("\n--- Selected Weeks and Fitness Scores ---") + for week, score in selected_fitness.items(): + print(f"Week: {week}, Score: {score}") diff --git a/build/lib/Samples/__init__.py b/build/lib/Samples/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/Samples/samples.py b/build/lib/Samples/samples.py new file mode 100644 index 0000000..ae5227a --- /dev/null +++ b/build/lib/Samples/samples.py @@ -0,0 +1,1821 @@ +class TimeSlots: + time_slots = { + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + } + + +class SubjectTeacherMap: + subject_teacher_map = { + "TCS-531": ["AB01", "PK02"], + "TCS-502": ["SS03", "AA04", "AC05"], + "TCS-503": ["SP06", "DP07", "AC05"], + "PCS-506": ["AD08", "RD09"], + "TMA-502": ["BJ10", "RS11", "JM12", "NJ13"], + "PMA-502": ["PM14", "AD08", "AA15"], + "TCS-509": ["SJ16", "AB17", "HP18", "SG19"], + "XCS-501": ["DT20", "PA21", "NB22"], + "CSP-501": ["AK23"], + "SCS-501": ["AP24"], + "PCS-503": ["RS11", "DP07", "SP06", "VD25"], + "Placement_Class": ["AK26"], + "TCS-511": ["PK02"], + "TCS-592": ["AB01"], + "TCS-512": ["HP18"], + "TCS-519": ["DP07"], + "PCS-512": ["VD25"], + } + + +class WorkingDays: + days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + + +class RoomCapacity: + room_capacity = {"R1": 200, "R2": 230, "R3": 240, "R4": 250, "R5": 250} + section_strength = {"A": 70, "B": 100, "C": 75, "D": 100} + lab_capacity = {"L1": 70, "L2": 50, "L3": 70, "L4": 50, "L5": 70, "L6": 50} + + +class SubjectWeeklyQuota: + subject_quota = { + "TCS-531": 3, + "TCS-502": 3, + "TCS-503": 3, + "PCS-506": 1, + "TMA-502": 3, + "PMA-502": 1, + "TCS-509": 3, + "XCS-501": 2, + "CSP-501": 1, + "SCS-501": 1, + "PCS-503": 1, + "Placement_Class": 1, + } + + +class SpecialSubjects: + special_subjects = ["Placement_Class"] + Labs = ["PCS-506", "PCS-503", "PMA-502"] + + +class PenaltyConstants: + PENALTY_TEACHER_DOUBLE_BOOKED = 30 + PENALTY_CLASSROOM_DOUBLE_BOOKED = 20 + PENALTY_OVER_CAPACITY = 25 + PENALTY_UN_PREFERRED_SLOT = 5 + PENALTY_OVERLOAD_TEACHER = 10 + + +class TeacherWorkload: + Weekly_workLoad = { + "AB01": 5, + "PK02": 5, + "SS03": 5, + "AA04": 5, + "AC05": 5, + "SP06": 5, + "DP07": 5, + "AD08": 5, + "RD09": 5, + "BJ10": 5, + "RS11": 5, + "JM12": 5, + "NJ13": 5, + "PM14": 5, + "AA15": 5, + "SJ16": 5, + "AB17": 5, + "HP18": 5, + "SG19": 5, + "DT20": 5, + "PA21": 5, + "NB22": 5, + "AK23": 5, + "AP24": 5, + "VD25": 5, + "AK26": 5, + } + + teacher_preferences = { + "AB01": [1], + "PK02": [1, 2, 3, 4, 5, 6, 7], + "SS03": [1, 2, 3, 4, 5, 6, 7], + "AA04": [1, 2, 3, 4, 5, 6, 7], + "AC05": [1, 2, 3, 4, 5, 6, 7], + "SP06": [1, 2, 3, 4, 5, 6, 7], + "DP07": [1, 2, 3, 4, 5, 6, 7], + "AD08": [1, 2, 3, 4, 5, 6, 7], + "RD09": [1, 2, 3, 4, 5, 6, 7], + "BJ10": [1, 2, 3, 4, 5, 6, 7], + "RS11": [1, 2, 3, 4, 5, 6, 7], + "JM12": [1, 2, 3, 4, 5, 6, 7], + "NJ13": [1, 2, 3, 4, 5, 6, 7], + "PM14": [1, 2, 3, 4, 5, 6, 7], + "AA15": [1, 2, 3, 4, 5, 6, 7], + "SJ16": [1, 2, 3, 4, 5, 6, 7], + "AB17": [1, 2, 3, 4, 5, 6, 7], + "HP18": [1, 2, 3, 4, 5, 6, 7], + "SG19": [1, 2, 3, 4, 5, 6, 7], + "DT20": [1, 2, 3, 4, 5, 6, 7], + "PA21": [1, 2, 3, 4, 5, 6, 7], + "NB22": [1, 2, 3, 4, 5, 6, 7], + "AK23": [1, 2, 3, 4, 5, 6, 7], + "AP24": [1, 2, 3, 4, 5, 6, 7], + "VD25": [1, 2, 3, 4, 5, 6, 7], + "AK26": [5], + } + teacher_duty_days = { + "AB01": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "PK02": ["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "SS03": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AA04": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AC05": ["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "SP06": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "DP07": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AD08": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "RD09": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "BJ10": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "RS11": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "JM12": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "NJ13": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "PM14": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AA15": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "SJ16": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AB17": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "HP18": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "SG19": ["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "DT20": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "PA21": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "NB22": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "AK23": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], + "AP24": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "VD25": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + "AK26": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + } + + +class InterDepartment: + teacher_availability_matrix = { + "AB01": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "PK02": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SS03": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AA04": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AC05": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SP06": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "DP07": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AD08": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "RD09": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "BJ10": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "RS11": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "JM12": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "NJ13": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "PM14": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AA15": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SJ16": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AB17": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "HP18": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "SG19": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "DT20": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "PA21": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "NB22": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AK23": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AP24": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "VD25": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "AK26": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + } + + +class Lab_availability: + lab_availability_matrix = { + "L1": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L2": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L3": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L4": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L5": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + "L6": [ + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + [True, True, True, True, True, True, True], + ], + } + + +class SampleChromosome: + schedule1 = { + "Monday": { + "A": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L4", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L4", + "time_slot": "11:10 - 12:05", + }, + ], + "C": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + ], + "D": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25", + }, + ], + }, + "Tuesday": { + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05", + }, + ], + "B": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "SG19", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Wednesday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "L2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "L2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Thursday": { + "A": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + ], + "B": [ + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Friday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + ], + "B": [ + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + } + schedule2 = { + "Monday": { + "A": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RD09", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "11:10 - 12:05", + }, + ], + "D": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Tuesday": { + "A": [ + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AK26", + "subject_id": "Placement_Class", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Wednesday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "11:10 - 12:05", + }, + ], + "B": [ + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "DP07", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "SP06", + "subject_id": "PCS-503", + "classroom_id": "L4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "NB22", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R4", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R4", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "3:30 - 4:25", + }, + ], + }, + "Thursday": { + "A": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R1", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "3:30 - 4:25", + }, + ], + "B": [ + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "RS11", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + ], + "C": [ + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "JM12", + "subject_id": "TMA-502", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "NJ13", + "subject_id": "TMA-502", + "classroom_id": "R4", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AP24", + "subject_id": "SCS-501", + "classroom_id": "R4", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PA21", + "subject_id": "XCS-501", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + "Friday": { + "A": [ + { + "teacher_id": "SJ16", + "subject_id": "TCS-509", + "classroom_id": "R1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R1", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "SP06", + "subject_id": "TCS-503", + "classroom_id": "R1", + "time_slot": "12:05 - 1:00", + }, + ], + "B": [ + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "RS11", + "subject_id": "PCS-503", + "classroom_id": "L1", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "BJ10", + "subject_id": "TMA-502", + "classroom_id": "R2", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "PK02", + "subject_id": "TCS-531", + "classroom_id": "R2", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "DP07", + "subject_id": "TCS-503", + "classroom_id": "R2", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R2", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "SS03", + "subject_id": "TCS-502", + "classroom_id": "R2", + "time_slot": "3:30 - 4:25", + }, + ], + "C": [ + { + "teacher_id": "AC05", + "subject_id": "TCS-503", + "classroom_id": "R3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "AK23", + "subject_id": "CSP-501", + "classroom_id": "R3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "AB17", + "subject_id": "TCS-509", + "classroom_id": "R3", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AB01", + "subject_id": "TCS-531", + "classroom_id": "R3", + "time_slot": "12:05 - 1:00", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "2:15 - 3:10", + }, + { + "teacher_id": "AD08", + "subject_id": "PCS-506", + "classroom_id": "L5", + "time_slot": "1:20 - 2:15", + }, + { + "teacher_id": "DT20", + "subject_id": "XCS-501", + "classroom_id": "R3", + "time_slot": "3:30 - 4:25", + }, + ], + "D": [ + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "9:55 - 10:50", + }, + { + "teacher_id": "PM14", + "subject_id": "PMA-502", + "classroom_id": "L3", + "time_slot": "9:00 - 9:55", + }, + { + "teacher_id": "HP18", + "subject_id": "TCS-509", + "classroom_id": "R4", + "time_slot": "11:10 - 12:05", + }, + { + "teacher_id": "AA04", + "subject_id": "TCS-502", + "classroom_id": "R4", + "time_slot": "12:05 - 1:00", + }, + ], + }, + } From 429c42717f015e66787ec51d19c6b6f921ee6596 Mon Sep 17 00:00:00 2001 From: War Machine <53389091+TechLead-War@users.noreply.github.com> Date: Mon, 1 Sep 2025 03:55:49 -0700 Subject: [PATCH 58/67] Fix Defaults usage in GA/__init__.py --- GA/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GA/__init__.py b/GA/__init__.py index dcb9319..25b41d2 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -31,7 +31,7 @@ def timetable_generation(): teacher_duty_days=TeacherWorkload.teacher_duty_days, ) - timetable = timetable_generator.create_timetable(Defaults.initial_no_of_chromosomes) + timetable = timetable_generator.create_timetable(Defaults().initial_no_of_chromosomes) # Fitness of each Chromosome fitness_calculator = TimetableFitnessEvaluator( timetable, @@ -88,7 +88,7 @@ def timetable_generation(): def run_timetable_generation(): - for generation in range(Defaults.total_no_of_generations): + for generation in range(Defaults().total_no_of_generations): best_chromosome = timetable_generation() return best_chromosome From c5c3960d3f8dd5571449ef1937b6717023adb58a Mon Sep 17 00:00:00 2001 From: War Machine <53389091+TechLead-War@users.noreply.github.com> Date: Mon, 1 Sep 2025 04:07:54 -0700 Subject: [PATCH 59/67] Add class-level attributes to Defaults for backward compatibility --- Constants/constant.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Constants/constant.py b/Constants/constant.py index 0bf8d3f..b82867f 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -67,3 +67,10 @@ class SectionsConstants: ATTRIBUTE_CONDITIONS = { 'hostler': lambda student: student.get('Hostler', False), } + +# Add class-level attributes to Defaults for backward compatibility +Defaults.working_days = Defaults().working_daysD +Defaults.max_class_capacity = Defaults().max_class_capacity +Defaults.initial_no_of_chromosomes = Defaults().initial_no_of_chromosomes +Defaults.total_no_of_generations = Defaults().total_no_of_generations + From f73f65161919fd9f1c69824026bf0c0da585a8bb Mon Sep 17 00:00:00 2001 From: TechLead-War Date: Mon, 1 Sep 2025 23:44:30 +0530 Subject: [PATCH 60/67] fixup --- .idea/Time-Table.iml | 3 +- .idea/misc.xml | 3 + Constants/constant.py | 2 +- GA/__init__.py | 27 +- all_sections_timetable.html | 357 +++++++++ visualizer.py | 1506 +---------------------------------- 6 files changed, 392 insertions(+), 1506 deletions(-) create mode 100644 all_sections_timetable.html diff --git a/.idea/Time-Table.iml b/.idea/Time-Table.iml index 269e1a8..cbd7309 100644 --- a/.idea/Time-Table.iml +++ b/.idea/Time-Table.iml @@ -2,9 +2,10 @@ + - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 8ae58c5..f0779c8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ + + \ No newline at end of file diff --git a/Constants/constant.py b/Constants/constant.py index 7d5ddf1..4c4d0e2 100644 --- a/Constants/constant.py +++ b/Constants/constant.py @@ -69,7 +69,7 @@ class SectionsConstants: } # Add class-level attributes to Defaults for backward compatibility - Defaults.working_days = Defaults().working_daysD + Defaults.working_days = Defaults().working_days Defaults.max_class_capacity = Defaults().max_class_capacity Defaults.initial_no_of_chromosomes = Defaults().initial_no_of_chromosomes Defaults.total_no_of_generations = Defaults().total_no_of_generations diff --git a/GA/__init__.py b/GA/__init__.py index c70010d..affad66 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -35,21 +35,6 @@ class TimetableConfig: fixed_teacher_assignment: dict = None - timetable = timetable_generator.create_timetable(Defaults().initial_no_of_chromosomes) - # Fitness of each Chromosome - fitness_calculator = TimetableFitnessEvaluator( - timetable, - timetable_generator.sections_manager.sections, - SubjectTeacherMap.subject_teacher_map, - timetable_generator.classrooms_manager.classrooms, - timetable_generator.classrooms_manager.labs, - timetable_generator.room_capacity_manager.room_capacity, - timetable_generator.room_capacity_manager.section_strength, - timetable_generator.subject_quota_limits, - timetable_generator.teacher_availability_preferences, - timetable_generator.weekly_workload, - ) - class TimetableEngine: def __init__(self, config: TimetableConfig): self.config = config @@ -87,7 +72,9 @@ def _generate_timetable(self, teacher_matrix): time_slots=self.config.time_slots, fixed_teacher_assignment=self.config.fixed_teacher_assignment or {} ) + timetable, updated_teacher = tg.create_timetable(self.config.total_generations)[:2] + fitness = TimetableFitnessEvaluator( timetable=timetable, all_sections=list(tg.sections_manager.keys()), @@ -157,11 +144,6 @@ def run(self): updated_lab = self._update_lab_availability(best_chromosome) return best_chromosome, updated_teacher, updated_lab -def run_timetable_generation(): - for generation in range(Defaults().total_no_of_generations): - best_chromosome = timetable_generation() - return best_chromosome - def run_timetable_generation( teacher_subject_mapping: dict, @@ -269,10 +251,9 @@ def run_timetable_generation( "3:30 - 4:25": 7, }, fixed_teacher_assignment={ - "A": {"TCS-531": "AB01", "TMA-502": "HP18"}, # section: {"subject": teacher} + "A": {"TCS-531": "AB01", "TMA-502": "HP18"}, "B": {"TCS-503": "BJ10"} } ) - from icecream import ic - ic(best_tt, final_teacher, final_lab) + print(best_tt, final_teacher, final_lab) \ No newline at end of file diff --git a/all_sections_timetable.html b/all_sections_timetable.html new file mode 100644 index 0000000..c824068 --- /dev/null +++ b/all_sections_timetable.html @@ -0,0 +1,357 @@ +All Sections Timetable

Section A

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Time9:00 - 9:559:55 - 10:5011:10 - 12:0512:05 - 1:001:20 - 2:152:15 - 3:103:30 - 4:25
Day
MondayTCS-531 (AB01)TMA-502 (HP18)PCS-506 (AD08) / PCS-506 (AD08)PCS-506 (AD08) / PCS-506 (AD08)TCS-502 (AA04)TCS-503 (AC05)CSP-501 (AK23)
TuesdayPCS-503 (DP07) / PCS-503 (DP07)PCS-503 (DP07) / PCS-503 (DP07)TCS-502 (SS03)TCS-503 (SP06)TCS-531 (AB01)TMA-502 (HP18)SCS-501 (AP24)
WednesdayTCS-509 (AB17)TCS-503 (DP07)Placement_Class (AK26) / Placement_Class (AK26)Placement_Class (AK26) / Placement_Class (AK26)
ThursdayTCS-502 (SS03)TCS-509 (SJ16)TCS-531 (AB01)TMA-502 (HP18)
FridayPMA-502 (PM14) / PMA-502 (PM14)PMA-502 (PM14) / PMA-502 (PM14)XCS-501 (DT20)TCS-509 (AB17)Library (None)Library (None)Library (None)
SaturdayLibrary (None)Library (None)Library (None)Library (None)

Section B

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Time9:00 - 9:559:55 - 10:5011:10 - 12:0512:05 - 1:001:20 - 2:152:15 - 3:103:30 - 4:25
Day
MondayPMA-502 (PM14) / PMA-502 (PM14)PMA-502 (PM14) / PMA-502 (PM14)TMA-502 (BJ10)TCS-503 (BJ10)SCS-501 (AP24)TCS-531 (PK02)TCS-502 (SS03)
TuesdayTCS-503 (BJ10)TCS-531 (AB01)XCS-501 (DT20)TCS-502 (SS03)
WednesdayTCS-503 (BJ10)TCS-502 (SS03)PCS-503 (RS11) / PCS-503 (RS11)PCS-503 (RS11) / PCS-503 (RS11)TCS-509 (HP18)XCS-501 (DT20)TCS-531 (AB01)
ThursdayCSP-501 (AK23)TCS-509 (SG19)PCS-506 (AD08) / PCS-506 (AD08)PCS-506 (AD08) / PCS-506 (AD08)Placement_Class (AK26) / Placement_Class (AK26)Placement_Class (AK26) / Placement_Class (AK26)TMA-502 (RS11)
FridayTMA-502 (BJ10)TCS-509 (SJ16)Library (None)Library (None)
SaturdayLibrary (None)Library (None)Library (None)Library (None)Library (None)Library (None)Library (None)

Section C

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Time9:00 - 9:559:55 - 10:5011:10 - 12:0512:05 - 1:001:20 - 2:152:15 - 3:103:30 - 4:25
Day
MondayTCS-531 (AB01)TCS-503 (DP07)SCS-501 (AP24)TCS-502 (SS03)
TuesdayTMA-502 (JM12)TCS-509 (AB17)TCS-531 (PK02)CSP-501 (AK23)TCS-503 (SP06)XCS-501 (PA21)TCS-502 (AC05)
WednesdayPCS-506 (AD08) / PCS-506 (AD08)PCS-506 (AD08) / PCS-506 (AD08)TCS-509 (SJ16)TCS-503 (SP06)
ThursdayTCS-502 (AC05)TCS-509 (AB17)Placement_Class (AK26) / Placement_Class (AK26)Placement_Class (AK26) / Placement_Class (AK26)PMA-502 (PM14) / PMA-502 (PM14)PMA-502 (PM14) / PMA-502 (PM14)XCS-501 (DT20)
FridayTCS-531 (PK02)TMA-502 (RS11)PCS-503 (DP07) / PCS-503 (DP07)PCS-503 (DP07) / PCS-503 (DP07)Library (None)Library (None)Library (None)
SaturdayLibrary (None)Library (None)Library (None)Library (None)Library (None)Library (None)Library (None)

Section D

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Time9:00 - 9:559:55 - 10:5011:10 - 12:0512:05 - 1:001:20 - 2:152:15 - 3:103:30 - 4:25
Day
MondayCSP-501 (AK23)TCS-503 (SP06)TCS-509 (SJ16)XCS-501 (DT20)
TuesdayTCS-509 (SJ16)TCS-502 (AA04)PCS-503 (RS11) / PCS-503 (RS11)PCS-503 (RS11) / PCS-503 (RS11)
WednesdayPlacement_Class (AK26) / Placement_Class (AK26)Placement_Class (AK26) / Placement_Class (AK26)TCS-509 (SG19)TMA-502 (JM12)XCS-501 (PA21)SCS-501 (AP24)TCS-531 (PK02)
ThursdayTCS-502 (AA04)TCS-503 (SP06)TCS-531 (PK02)TMA-502 (BJ10)
FridayPCS-506 (AD08) / PCS-506 (AD08)PCS-506 (AD08) / PCS-506 (AD08)TCS-503 (SP06)TCS-531 (AB01)
SaturdayLibrary (None)Library (None)Library (None)Library (None)

Section E

+ + + + + + + +

Section F

+ + + + + + + +
\ No newline at end of file diff --git a/visualizer.py b/visualizer.py index 57354fc..870ef61 100644 --- a/visualizer.py +++ b/visualizer.py @@ -1,1488 +1,17 @@ import pandas as pd # Suppose your JSON-like data is stored in a variable called 'timetable' -timetable = { - "Monday": { - "A": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R1", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "B": [ - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "C": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "D": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R4", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "E": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R5", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R5", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R5", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "F": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R6", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R6", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - }, - "Tuesday": { - "A": [ - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "B": [ - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "C": [ - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "D": [ - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R4", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R4", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "E": [ - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R5", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R5", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "F": [ - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R6", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R6", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R6", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - }, - "Wednesday": { - "A": [ - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R1", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "B": [ - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "PA21", - "subject_id": "XCS-501", - "classroom_id": "R2", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "C": [ - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R3", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AK23", - "subject_id": "CSP-501", - "classroom_id": "R3", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "NB22", - "subject_id": "XCS-501", - "classroom_id": "R3", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "D": [ - { - "teacher_id": "NJ13", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "E": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R5", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R5", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R5", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "F": [ - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R6", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R6", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R6", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - }, - "Thursday": { - "A": [ - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R1", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R1", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "B": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R2", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "C": [ - { - "teacher_id": "AP24", - "subject_id": "SCS-501", - "classroom_id": "R3", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R3", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "D": [ - { - "teacher_id": "SP06", - "subject_id": "TCS-503", - "classroom_id": "R4", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R4", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "E": [ - { - "teacher_id": "DP07", - "subject_id": "TCS-503", - "classroom_id": "R5", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "TMA-502", - "classroom_id": "R5", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R5", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "F": [ - { - "teacher_id": "AC05", - "subject_id": "TCS-503", - "classroom_id": "R6", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R6", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AA15", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R6", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - }, - "Friday": { - "A": [ - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R1", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "BJ10", - "subject_id": "TMA-502", - "classroom_id": "R1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "B": [ - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R2", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "JM12", - "subject_id": "TMA-502", - "classroom_id": "R2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AB17", - "subject_id": "TCS-509", - "classroom_id": "R2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "C": [ - { - "teacher_id": "NJ13", - "subject_id": "TMA-502", - "classroom_id": "R3", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AC05", - "subject_id": "TCS-502", - "classroom_id": "R3", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R3", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "D": [ - { - "teacher_id": "HP18", - "subject_id": "TCS-509", - "classroom_id": "R4", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R4", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "DP07", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "SS03", - "subject_id": "TCS-502", - "classroom_id": "R4", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "E": [ - { - "teacher_id": "PK02", - "subject_id": "TCS-531", - "classroom_id": "R5", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AA04", - "subject_id": "TCS-502", - "classroom_id": "R5", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "VD25", - "subject_id": "PCS-503", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "RD09", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "SG19", - "subject_id": "TCS-509", - "classroom_id": "R5", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "F": [ - { - "teacher_id": "SJ16", - "subject_id": "TCS-509", - "classroom_id": "R6", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "AB01", - "subject_id": "TCS-531", - "classroom_id": "R6", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "SP06", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "DT20", - "subject_id": "XCS-501", - "classroom_id": "R6", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - }, - "Saturday": { - "A": [ - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R1", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R1", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "B": [ - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R2", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R2", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "C": [ - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R3", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R3", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R3", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R3", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - ], - "D": [ - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R4", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R4", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "RS11", - "subject_id": "PCS-503", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L1", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R4", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "E": [ - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R5", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R5", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L1", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PCS-506", - "classroom_id": "L2", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R5", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - "F": [ - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R6", - "time_slot": "08:00 - 09:00", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R6", - "time_slot": "09:00 - 10:00", - "group": "all", - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "11:00 - 12:00", - "group": "all", - }, - { - "teacher_id": "PM14", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "12:00 - 13:00", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "13:50 - 14:50", - "group": "all", - }, - { - "teacher_id": "AD08", - "subject_id": "PMA-502", - "classroom_id": "L2", - "time_slot": "14:50 - 15:50", - "group": "all", - }, - { - "teacher_id": "None", - "subject_id": "Library", - "classroom_id": "R6", - "time_slot": "16:50 - 17:50", - "group": "all", - }, - ], - }, -} +timetable = {'Monday': {'D': [{'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'C': [{'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'DP07', 'subject_id': 'TCS-503', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'HP18', 'subject_id': 'TMA-502', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'AA04', 'subject_id': 'TCS-502', 'classroom_id': 'R2', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'AC05', 'subject_id': 'TCS-503', 'classroom_id': 'R2', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R2', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'B': [{'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'BJ10', 'subject_id': 'TMA-502', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'BJ10', 'subject_id': 'TCS-503', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R4', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R4', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Tuesday': {'B': [{'teacher_id': 'BJ10', 'subject_id': 'TCS-503', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'D': [{'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AA04', 'subject_id': 'TCS-502', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}], 'C': [{'teacher_id': 'JM12', 'subject_id': 'TMA-502', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R3', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'PA21', 'subject_id': 'XCS-501', 'classroom_id': 'R3', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AC05', 'subject_id': 'TCS-502', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'A': [{'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R2', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'HP18', 'subject_id': 'TMA-502', 'classroom_id': 'R2', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R2', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Wednesday': {'C': [{'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'DP07', 'subject_id': 'TCS-503', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}], 'B': [{'teacher_id': 'BJ10', 'subject_id': 'TCS-503', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L3', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L3', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L4', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L4', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'HP18', 'subject_id': 'TCS-509', 'classroom_id': 'R4', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R4', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'D': [{'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SG19', 'subject_id': 'TCS-509', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'JM12', 'subject_id': 'TMA-502', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'PA21', 'subject_id': 'XCS-501', 'classroom_id': 'R5', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R5', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R5', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Thursday': {'A': [{'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'HP18', 'subject_id': 'TMA-502', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'D': [{'teacher_id': 'AA04', 'subject_id': 'TCS-502', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'BJ10', 'subject_id': 'TMA-502', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'C': [{'teacher_id': 'AC05', 'subject_id': 'TCS-502', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '1:20 - 2:15', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '2:15 - 3:10', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '1:20 - 2:15', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '2:15 - 3:10', 'group': 2}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'B': [{'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SG19', 'subject_id': 'TCS-509', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L3', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L3', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L4', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L4', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '1:20 - 2:15', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '2:15 - 3:10', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '1:20 - 2:15', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '2:15 - 3:10', 'group': 2}, {'teacher_id': 'RS11', 'subject_id': 'TMA-502', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Friday': {'B': [{'teacher_id': 'BJ10', 'subject_id': 'TMA-502', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'D': [{'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L3', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L3', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L4', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L4', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'C': [{'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'RS11', 'subject_id': 'TMA-502', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Saturday': {'D': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'C': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'B': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}} days_order = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] time_order = [ - "08:00 - 09:00", - "09:00 - 10:00", - "11:00 - 12:00", - "12:00 - 13:00", - "13:50 - 14:50", - "14:50 - 15:50", - "16:50 - 17:50", + "9:00 - 9:55", + "9:55 - 10:50", + "11:10 - 12:05", + "12:05 - 1:00", + "1:20 - 2:15", + "2:15 - 3:10", + "3:30 - 4:25", ] @@ -1491,17 +20,32 @@ def get_section_table(timetable, section): for day, day_data in timetable.items(): if section in day_data: for slot in day_data[section]: + subj = slot["subject_id"] + teacher = slot["teacher_id"] rows.append( { "Day": day, "Time": slot["time_slot"], - "Subject": slot["subject_id"], + "Subject": f"{subj} ({teacher})", } ) + df = pd.DataFrame(rows) + if df.empty: + return pd.DataFrame() + df["Day"] = pd.Categorical(df["Day"], categories=days_order, ordered=True) df["Time"] = pd.Categorical(df["Time"], categories=time_order, ordered=True) - pivoted = df.pivot(index="Day", columns="Time", values="Subject").fillna("") + + pivoted = ( + df.pivot_table( + index="Day", + columns="Time", + values="Subject", + aggfunc=lambda x: " / ".join(x) # handle duplicate slots + ) + .fillna("") + ) return pivoted From 94615b3995af32965d401a3de7d72d79b8ed8059 Mon Sep 17 00:00:00 2001 From: TechLead-War Date: Tue, 2 Sep 2025 00:43:21 +0530 Subject: [PATCH 61/67] fixup --- GA/__init__.py | 4 +- all_sections_timetable.html | 16 ------ app.py | 61 ++++++++++++++++++++++ index.html | 100 ++++++++++++++++++++++++++++++++++++ visualizer.py | 19 ++++--- 5 files changed, 172 insertions(+), 28 deletions(-) create mode 100644 app.py create mode 100644 index.html diff --git a/GA/__init__.py b/GA/__init__.py index affad66..b9fc587 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -255,5 +255,5 @@ def run_timetable_generation( "B": {"TCS-503": "BJ10"} } ) - - print(best_tt, final_teacher, final_lab) \ No newline at end of file + from icecream import ic + ic(best_tt, final_teacher, final_lab) \ No newline at end of file diff --git a/all_sections_timetable.html b/all_sections_timetable.html index c824068..993f7db 100644 --- a/all_sections_timetable.html +++ b/all_sections_timetable.html @@ -338,20 +338,4 @@ -

Section E

- - - - - - - -

Section F

- - - - - - -
\ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..115b3f7 --- /dev/null +++ b/app.py @@ -0,0 +1,61 @@ +from flask import Flask, request, jsonify + +from GA import run_timetable_generation +from flask_cors import CORS + +app = Flask(__name__) +CORS(app) + +@app.route("/generate", methods=["POST"]) +def generate_timetable(): + data = request.get_json() + + # required inputs + teacher_subject_mapping = data.get("teacher_subject_mapping", {}) + total_sections = data.get("total_sections", {}) + total_classrooms = data.get("total_classrooms", {}) + total_labs = data.get("total_labs", {}) + teacher_preferences = data.get("teacher_preferences", {}) + teacher_weekly_workload = data.get("teacher_weekly_workload", {}) + special_subjects = data.get("special_subjects", {}) + labs = data.get("labs", {}) + subject_quota_limits = data.get("subject_quota_limits", {}) + teacher_duty_days = data.get("teacher_duty_days", {}) + teacher_availability_matrix = data.get("teacher_availability_matrix", {}) + lab_availability_matrix = data.get("lab_availability_matrix", {}) + total_generations = data.get("total_generations", 50) + time_slots = {int(k): v for k, v in data.get("time_slots", {}).items()} + day_map = {str(k): int(v) for k, v in data.get("day_map", {}).items()} + time_slot_map = {str(k): int(v) for k, v in data.get("time_slot_map", {}).items()} + fixed_teacher_assignment = data.get("fixed_teacher_assignment", {}) + + # run engine + best_tt, final_teacher, final_lab = run_timetable_generation( + teacher_subject_mapping, + total_sections, + total_classrooms, + total_labs, + teacher_preferences, + teacher_weekly_workload, + special_subjects, + labs, + subject_quota_limits, + teacher_duty_days, + teacher_availability_matrix, + lab_availability_matrix, + total_generations, + time_slots, + day_map, + time_slot_map, + fixed_teacher_assignment, + ) + + return jsonify({ + "timetable": best_tt, + "teacher_availability": final_teacher, + "lab_availability": final_lab + }) + + +if __name__ == "__main__": + app.run(debug=True) \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..884ad9d --- /dev/null +++ b/index.html @@ -0,0 +1,100 @@ + + + + + Timetable Generator + + + + +
+

University Timetable Generator

+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+
+ + +
+

Result

+
Fill the form and click "Generate Timetable".
+
+
+ + + + \ No newline at end of file diff --git a/visualizer.py b/visualizer.py index 870ef61..04b3efe 100644 --- a/visualizer.py +++ b/visualizer.py @@ -2,7 +2,6 @@ # Suppose your JSON-like data is stored in a variable called 'timetable' timetable = {'Monday': {'D': [{'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'C': [{'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'DP07', 'subject_id': 'TCS-503', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'HP18', 'subject_id': 'TMA-502', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'AA04', 'subject_id': 'TCS-502', 'classroom_id': 'R2', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'AC05', 'subject_id': 'TCS-503', 'classroom_id': 'R2', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R2', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'B': [{'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'BJ10', 'subject_id': 'TMA-502', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'BJ10', 'subject_id': 'TCS-503', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R4', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R4', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Tuesday': {'B': [{'teacher_id': 'BJ10', 'subject_id': 'TCS-503', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'D': [{'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AA04', 'subject_id': 'TCS-502', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}], 'C': [{'teacher_id': 'JM12', 'subject_id': 'TMA-502', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R3', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'PA21', 'subject_id': 'XCS-501', 'classroom_id': 'R3', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AC05', 'subject_id': 'TCS-502', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'A': [{'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R2', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'HP18', 'subject_id': 'TMA-502', 'classroom_id': 'R2', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R2', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Wednesday': {'C': [{'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'DP07', 'subject_id': 'TCS-503', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}], 'B': [{'teacher_id': 'BJ10', 'subject_id': 'TCS-503', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L3', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L3', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L4', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'RS11', 'subject_id': 'PCS-503', 'classroom_id': 'L4', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'HP18', 'subject_id': 'TCS-509', 'classroom_id': 'R4', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R4', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'D': [{'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SG19', 'subject_id': 'TCS-509', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'JM12', 'subject_id': 'TMA-502', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'PA21', 'subject_id': 'XCS-501', 'classroom_id': 'R5', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'AP24', 'subject_id': 'SCS-501', 'classroom_id': 'R5', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R5', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Thursday': {'A': [{'teacher_id': 'SS03', 'subject_id': 'TCS-502', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'HP18', 'subject_id': 'TMA-502', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'D': [{'teacher_id': 'AA04', 'subject_id': 'TCS-502', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'BJ10', 'subject_id': 'TMA-502', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'C': [{'teacher_id': 'AC05', 'subject_id': 'TCS-502', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '1:20 - 2:15', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L1', 'time_slot': '2:15 - 3:10', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '1:20 - 2:15', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L2', 'time_slot': '2:15 - 3:10', 'group': 2}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'B': [{'teacher_id': 'AK23', 'subject_id': 'CSP-501', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SG19', 'subject_id': 'TCS-509', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L3', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L3', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L4', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L4', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '1:20 - 2:15', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L3', 'time_slot': '2:15 - 3:10', 'group': 1}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '1:20 - 2:15', 'group': 2}, {'teacher_id': 'AK26', 'subject_id': 'Placement_Class', 'classroom_id': 'L4', 'time_slot': '2:15 - 3:10', 'group': 2}, {'teacher_id': 'RS11', 'subject_id': 'TMA-502', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Friday': {'B': [{'teacher_id': 'BJ10', 'subject_id': 'TMA-502', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'SJ16', 'subject_id': 'TCS-509', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'D': [{'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L1', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'AD08', 'subject_id': 'PCS-506', 'classroom_id': 'L2', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'SP06', 'subject_id': 'TCS-503', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'AB01', 'subject_id': 'TCS-531', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L3', 'time_slot': '9:00 - 9:55', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L3', 'time_slot': '9:55 - 10:50', 'group': 1}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L4', 'time_slot': '9:00 - 9:55', 'group': 2}, {'teacher_id': 'PM14', 'subject_id': 'PMA-502', 'classroom_id': 'L4', 'time_slot': '9:55 - 10:50', 'group': 2}, {'teacher_id': 'DT20', 'subject_id': 'XCS-501', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'AB17', 'subject_id': 'TCS-509', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'C': [{'teacher_id': 'PK02', 'subject_id': 'TCS-531', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'RS11', 'subject_id': 'TMA-502', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '11:10 - 12:05', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L1', 'time_slot': '12:05 - 1:00', 'group': 1}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '11:10 - 12:05', 'group': 2}, {'teacher_id': 'DP07', 'subject_id': 'PCS-503', 'classroom_id': 'L2', 'time_slot': '12:05 - 1:00', 'group': 2}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}, 'Saturday': {'D': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R5', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'A': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R2', 'time_slot': '12:05 - 1:00', 'group': 'all'}], 'C': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R3', 'time_slot': '3:30 - 4:25', 'group': 'all'}], 'B': [{'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '9:00 - 9:55', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '9:55 - 10:50', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '11:10 - 12:05', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '12:05 - 1:00', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '1:20 - 2:15', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '2:15 - 3:10', 'group': 'all'}, {'teacher_id': 'None', 'subject_id': 'Library', 'classroom_id': 'R4', 'time_slot': '3:30 - 4:25', 'group': 'all'}]}} - days_order = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] time_order = [ "9:00 - 9:55", @@ -14,7 +13,6 @@ "3:30 - 4:25", ] - def get_section_table(timetable, section): rows = [] for day, day_data in timetable.items(): @@ -42,24 +40,25 @@ def get_section_table(timetable, section): index="Day", columns="Time", values="Subject", - aggfunc=lambda x: " / ".join(x) # handle duplicate slots + aggfunc=lambda x: " / ".join(x) # join duplicates if multiple groups ) .fillna("") ) return pivoted -# List of sections to generate tables for. -sections = ["A", "B", "C", "D", "E", "F"] +# 🔹 Collect all sections dynamically from all days +sections = sorted({sec for day in timetable.values() for sec in day.keys()}) -# Create a single HTML string with all section timetables. +# Create a single HTML string with all section timetables html_content = "All Sections Timetable" for section in sections: table = get_section_table(timetable, section) - html_content += f"

Section {section}

" - html_content += table.to_html() + if not table.empty: + html_content += f"

Section {section}

" + html_content += table.to_html() html_content += "" -# Write the combined HTML to a file. +# Write the combined HTML to a file with open("all_sections_timetable.html", "w", encoding="utf-8") as f: - f.write(html_content) + f.write(html_content) \ No newline at end of file From d19f0af59b3fefb734d6321603d44e617f142f01 Mon Sep 17 00:00:00 2001 From: TechLead-War Date: Sun, 16 Nov 2025 13:15:48 +0530 Subject: [PATCH 62/67] hackathon --- stages.X3qVuXFj_Nynac-2.avif | Bin 0 -> 143249 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 stages.X3qVuXFj_Nynac-2.avif diff --git a/stages.X3qVuXFj_Nynac-2.avif b/stages.X3qVuXFj_Nynac-2.avif new file mode 100644 index 0000000000000000000000000000000000000000..6fcb8da5090466d68bc849480efee27f07d9f113 GIT binary patch literal 143249 zcmYKFV~{9K(>08aZQHhO+t_2 z0N|K9d)OPeT9^X-8#WfEjQ?R93xj_;puLTWv%!D-zd>kjZ0-1e5CFj5!pQmm;r}P$ z>@A#a{-*%`TUjiu?Tr4@L<9hU0RCeD0F(bu0ssm`{Nw%+Lb(4w2H^U??KmtfZ2$Kf z|Ffe0Q%wGI`_IR~m4Wd;`2Q#WS^ghcXJPMX|IZj{VQ*yjPr?|uG71OK{4W;8!pYv` zzeoT8$fkd@V<1zZ}UI!FZ5sbzyUzO06-wY zK%k-j2rLUnlmAQe-{bxTTmP>>fB-;rpf<(^&PV`IP~3DU6BZl-!h*$2ul}G&0AQI^ zfC9U4eRJ;GGo7U2+E8#^g-bqxb8gO=lp!hCZyBUU=RSNa+|5x5-^J7|8-+d_9^X%r zSPxba5Qq(nSAAYd%U63@AUG`cs9)+ZbQ^t|Dy1xcil#`;*ey7f(x!e0rh7^9bxTP| zy-5ZXSH^V|Wn~n_pnTRk*#P&n&pe5vi-r_z$;l0Bh6%LH9kv1V-Z>7zAKaRW#L>~(Woy^Iu#nxw#d#w}y8}`3xgiXX|HQ*DdF6c9 z1Vzz)gHiQKeaT1Q%CR4WGtt+oJ0RRcco{@Q0K8oz5xr|=m@Q!D${R-YEV`#&1h`-w z$1TS18C z3d0g)rf8rX9POFha(fJBHP(%fM#j40jCW^rq3-3%OWi@E(z~ZEu)tf96kyO~ zNRJaYtT3|14B9Y3he=sn%pp4(=fx`lop*6eF&0jS{_(~2e2_OMwdNgPgFg)!;o=g( za)Ra6uCe`n^$fWV>Dk}t%}kxJ@AniO6A9|pSGBLVk&1$;qM7m@yM4>cC*ry(z%;^F zWBar3i^cmgQ|$p?Goj{ELcPMWCJQS#yn(g-=5bmaE!*64U6K#Qarmi*EEJ#6`04HB zjzGB7iyf%bCJwI3|Xkyrqau77c!yyrs$C#Orp_(m1 zU=<*As9Uz^Vicxc^l3qU9OXH1RV&=3yeAsH@=jX(jB4JK1p`&81h_BDW>Ct>EFcV0su;Pksd02@&G-C2+1bdG-zmHQJgX#+?wAymbP! z7Cs?|K=LG%hYsJ0Bz#RJw(#(@H@)KnI51gF

w#sKBT8!MX1_RE(%-4maDdJ1&+5 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

cV54Q^hm8JNI^@6owtK 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 literal 0 HcmV?d00001 From 370fa8528a2623ae15e051e64cad4f64b81befe5 Mon Sep 17 00:00:00 2001 From: TechLead-War Date: Sun, 16 Nov 2025 13:20:23 +0530 Subject: [PATCH 63/67] hackathon --- stages.X3qVuXFj_Nynac-2.avif | Bin 143249 -> 0 bytes stages.X3qVuXFj_Nynac.png | Bin 0 -> 1331150 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 stages.X3qVuXFj_Nynac-2.avif create mode 100644 stages.X3qVuXFj_Nynac.png diff --git a/stages.X3qVuXFj_Nynac-2.avif b/stages.X3qVuXFj_Nynac-2.avif deleted file mode 100644 index 6fcb8da5090466d68bc849480efee27f07d9f113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143249 zcmYKFV~{9K(>08aZQHhO+t_2 z0N|K9d)OPeT9^X-8#WfEjQ?R93xj_;puLTWv%!D-zd>kjZ0-1e5CFj5!pQmm;r}P$ z>@A#a{-*%`TUjiu?Tr4@L<9hU0RCeD0F(bu0ssm`{Nw%+Lb(4w2H^U??KmtfZ2$Kf z|Ffe0Q%wGI`_IR~m4Wd;`2Q#WS^ghcXJPMX|IZj{VQ*yjPr?|uG71OK{4W;8!pYv` zzeoT8$fkd@V<1zZ}UI!FZ5sbzyUzO06-wY zK%k-j2rLUnlmAQe-{bxTTmP>>fB-;rpf<(^&PV`IP~3DU6BZl-!h*$2ul}G&0AQI^ zfC9U4eRJ;GGo7U2+E8#^g-bqxb8gO=lp!hCZyBUU=RSNa+|5x5-^J7|8-+d_9^X%r zSPxba5Qq(nSAAYd%U63@AUG`cs9)+ZbQ^t|Dy1xcil#`;*ey7f(x!e0rh7^9bxTP| zy-5ZXSH^V|Wn~n_pnTRk*#P&n&pe5vi-r_z$;l0Bh6%LH9kv1V-Z>7zAKaRW#L>~(Woy^Iu#nxw#d#w}y8}`3xgiXX|HQ*DdF6c9 z1Vzz)gHiQKeaT1Q%CR4WGtt+oJ0RRcco{@Q0K8oz5xr|=m@Q!D${R-YEV`#&1h`-w z$1TS18C z3d0g)rf8rX9POFha(fJBHP(%fM#j40jCW^rq3-3%OWi@E(z~ZEu)tf96kyO~ zNRJaYtT3|14B9Y3he=sn%pp4(=fx`lop*6eF&0jS{_(~2e2_OMwdNgPgFg)!;o=g( za)Ra6uCe`n^$fWV>Dk}t%}kxJ@AniO6A9|pSGBLVk&1$;qM7m@yM4>cC*ry(z%;^F zWBar3i^cmgQ|$p?Goj{ELcPMWCJQS#yn(g-=5bmaE!*64U6K#Qarmi*EEJ#6`04HB zjzGB7iyf%bCJwI3|Xkyrqau77c!yyrs$C#Orp_(m1 zU=<*As9Uz^Vicxc^l3qU9OXH1RV&=3yeAsH@=jX(jB4JK1p`&81h_BDW>Ct>EFcV0su;Pksd02@&G-C2+1bdG-zmHQJgX#+?wAymbP! z7Cs?|K=LG%hYsJ0Bz#RJw(#(@H@)KnI51gF

w#sKBT8!MX1_RE(%-4maDdJ1&+5 zGobp2ID+kRgHs4}noX!jnh<}C?I{qagI6OD?}}(BG1!+IoRoXzYhqF6w9D$<3|Hb= z?sggyE|HWRUVo_bkn*NIS+hB_9GOW>%tSJ-`3c-P_o||$eHCo6rA_E+d|Fr{t{i)f z`LzD_@A{LS;_%oXz#cRvpLXu)Y}JWMw8$`IIbJKOq5FOPysUsm9_cI5@2_27Rv)fe z1O#Oq7$tds)W7q`sFji?$PqcmloJNk_nP@GiIoD`TY3n%o`}D0*)UGL3n{TCA&D^v?i^9 zgYFsR6py#mT$S&KOURUB%j>--l;c(c9ez7Tzz+t?+Srl%0xuKs`8bo8r-ObS$};@! z@lL@iv2bbP$A{}%yC-BtHWZF4NGpWf*8KXI$l8kvScgtqCra^$OCN1yGC}aNSd3%p z=H@?_8wq9ak_(7SB>~TSvH)VaCDO?))+xjn+(&54hP@!V#~*E7qkpTNI`6sO zdW#Eo_t(BeYtr}mg_k>p>TR(aT%&q9O4v~rCKsI0>(B+ zYX<4ec@nsUe(#iMGCwGK_+Z=VM4>R&SnF2u}~K>#an$L3E`zxE0|HB z)?k;oDM3KM2C61t)MBoTW~0P|D?S*i=9-Wi?`1A(xh;S#Tf1Lf_QkslIEVq7bioWC z+Sdx$1z_RomE-(=je-4@(HVUb<5O%xa(^m}E`u3mJbg_{B7ZFY)I9GU8SJW262EV5 zx$cSzPjPWvq=DZh%z^RI;7XOb??=t#NC(?LqJjwnvS-qC*pc9bxe8>h3AEWIxauZK zT*tK+FtVlxwS*Um4?eQO>{NI^m{sCfFY2JbF<%iKs-c7g4+aY_p^|_492f$WZUDAW zF0SI)CN=Dx?2}s@X7=qXt z>NI2NmNKq&Gon*%kr{b}R zl%m%N8AXgF8%!pyh%i}4Y9d!gO#vy*#5_@P3m%CLYPGwn__ozC zHX{ct%vSr6COb)!+-UY6F=`^7C1?jrhfkZOHaCEaicusHq`{C47~J>@Z8i?(6DtL2 zdMhJpK8&e0rRB&OSF zsfWswA{W?m;FxdMrlgG6tIr~%m|*ig*By71S|<{>^>1WPb3fcn_}M~23o@PAuEP2i zTFR?sNKPpQJTX{t>S1pqHyU9M=^$(FG#GgaaduxQdk+iEoshLT^f^CvztN=6t4p3h zK-#m(^!2(F9(8u#%598Cig`uU2Sn||eY*HT6&@IB`jEX4yRHf4AUY)} zjgzdl?<;zHwvt)aai(o#ax>Nwr3J>s@)y6CU`*?c@X+VOOXBD;rx8oE_ zlueKwA0Q*3E$x~IVt%?Dx&3x~ob(o^OPf4zia!zjt_y?ZlNd0t!eMy>hl0Zo&v0Jy zsnSYG;pMK}hS0Tdgn`gTJyu7}0WHtTQsl7z*YMb?UXJZI zppfD3GJeyGoZ!lP&1PzkkE<=y1S>J$ceO{1-wuENL078ZMDdK-$BTx8LtF}NlB8NIPc&VWHK5VcNHX7gk(XlAt%?CEX4pdYH$N?A&_ZB!Jb8DxIBkPmikps zo=CIW7`{=0*56NO(*vu$5#*kxoatJPZ|=<2JPzoso{19rVes0bgnu9RpyhZC0jJZEO6WxYdg@c z%A^wa1Xt+J?g5?f^-P0C z5hxaGt9Y=>vld`1;y4h0Z7I<1nfxuqH107$gUf0+yidO>++DkEx7T5u4o|z5G+QB- z{U+l}Ooj&*s%oa??eVqSkFnXg$XwMZdn$*u!@1Y(|;)* z|Ey5C&ZIn=H1{7Edw-|!w-U+e?`l-VCe`+i3bQEx0Rm*=+nGRA&*)CFVn*5@eZB_y zJ$z2c?>T&VRd#id&6=yHSY4P6i(YPD?Gy>Mb|V*TA8cou{sfKM6VJOE(1^j?)k8YujI?1(XkdyY->sBy9q)Bv#K0#N`NQ!2J7FPS3RS7k2C?MEg5|t!si`fgm-e)*A1q z<+B4LRPs?@c7J|}PU7vIG(G^F?PDS4%B9IO(G8_Er$rb=0zwt?)<~^Xf!XI2(AH;h z5o)?qf=k=ZkGeiq7#5_cQjoPk)`el9btiC< zRJKE~KwLlG@hB37<0#+lGg-9qD6s~k4{;*hu$x+}=B_LJ$CvuWl}*AQ9xobs@Tk_= z$%by_^*-JFGU{%zGqa#zh6RA{ker*@Szo@5T-So8X<+sC;64CFE>Q+=O z&BB}-VJu8d9TeYoYY2p@bSt&H@T>vUC3$B+uf(A`WAbP)+{L~0pQOwr=BOrUn7rkW zp{Tju@dzNQp_Ut1@i}Jgwg3R;G8QBwgiLo7x?lE>9X-40bm^2E_{P-oNIYg@Z{L_I zZ8O{?349GO9B(8jCA%HqHv*{+D78Z(+vyVpWs8gqk)1BoQ&vLmIPE9V$Ph=~E)Q8% zJl>{24@69Vx42cY=4$bhI>Hu$CKo58s*4fp9xN1+xoOGe=KFtj=5jUbOa$xUc|NxL z%MvFFQwoPHFjUt>Ht9*??ihGQ+smWTPSy88gF8WhD)tVMfER{AC%{(bn)h)J9Z%mR zD3@-}N7a|Y;B-XY7?LhkpmlH{pUkrj6ouETO;R>TB(#PC>meo4>PTft262m?YTkyI zY{>YH;Kd0#Or4U_*@W-#<1g_p&6CZCZBvB3W^eA5lkyk#s)~N~$q}s$wJCyN{Kak0 z76`MU0!%RZp<<_yYF-a{t%$?JB}@zS(pdyXLRyY#+l ztCv5Z90&~7o%OdfV>Yr^Ho;f@QJzOvEw{>B>(Ss%OS!*XX>y_AV5ds#_PA#?bC4x$ z(1AMR%X+Q>JEc(bxU~JLY@P&qB=mIVK6O-b2YBW!j%c|ojC0f<1K&8ACL8exuZH{Q zG}5(QtA&VcQNIsbFcU-(?U2kMaOth^fS}#AYI=>4)g&Lep;V%H7zMM0LdW}O#f}#c z5Msjh9mJOc=U`|KIuPA235y{C>=C5htUpEl=0S4#FYe-N_9o*j7PWe#I^`5GZ2*=C zZDl8FJxmOUBYOQ<+kkX=51{(qJ=@^)F?$h5@!vB{k!>H3=Qzk2xukO8b$mnX0g5w#;iv@$ARrVPPH3BkotYIwxohP zGGk^cLf`kv{>LwkDj^5UmGIFtz?l+acc6dDk^gKK-@C(COtHGh=}r9aKE0$nxHsvs5uiF+H^l&0-e=f#4VDfQ!CIQ3b+Y#Z^u38APTi;#z%%K0kVP705?J zRU^LQFrcpBdV*bYwC>;p_Q^MmNGCrxZ$R(5)Y&HX9PNxN2pl3p@X0dVTzq)dzV{k# zaM%o%wWHby&GJoAlolLFqqlQf;OR9YOXc2>@p9P!Z?waggRhW-df5dY} zl?6-s)djVe9)Q{=a>?)}|h1Hds}Lx_myAtRzc zZ4mi_0%yM_^9G+@iDKDWGm@5j`mt$S0(e`}uQnkuN=dOQD_ zIcQ28Z^cXIgxKYA_V;`%u~5l=w`$d1tLNYR#HI72PehEaQ3(&ggL;f)GK-$~pS$~U zltMTezOgu}4DJrS4`9;l7?d~lUs%{wd%wajlx}$GNmUMJGc4oNy)AWx$zbwsqonNH z@-O4Ua7OY9p75Qg*B2jSUUhfp#&ch+OnQ#+5I1IKd#MBm&&_#8%Dpieonkd~*qOr$ z@reDyJYzRb%$#t2S4Uw;oRs#dl>mMsX1K+4^gCH&$FsPE- z;rZ`imP*$ck2vds?p!!SbSI+=)p7iMAc2u* zCDXMFe<`B%g}MO7ZZ4#rP}eG&_gei_kDK)#%<^y4+Ey#E^}J8nO;8FBb)!tw5X+A0N{E`vv5VvEM$}J#J$v`S+zyV zU(^Qz!N=rBW|*P<20g$0nx8C4UfOujq*t~rRk(6YTmH)}=a`|ax@2)#gBO$EZv3nr z%MHoCbp#6~5} zyz5ypyf3vJ?C@0no}B|Tn`e!8@OgtPwLEA4 zV_sep>|LNM)?Es-R&pKc^xn?X?!Da`uY0}Vie9?w$zL-#3Ckcg!TyYjQZ?3p?VDrI ztVHK`E@xIvpz=ig01o&>jug}qP8n`bB#@rI?m6YR@ka^nB^i{BAFm}96I@{jQ*7%F zUvPXLR<3Gep{X2Z)dVizF772xdkXV2BhT6ZUGJ%q$^5p+`S|kG10fo#MT83EZzLNo zpp}*KV7+Jkn6B#8n^1&;D&B$vd<^S2L7cgi=`n(=Zcg(cJ`zrzZ74`jC?fFeh9G^A zC<~=_G2lcwu}!QyYiK?+>?7fRu7w|sD!9Twk$H)yb%!kyKNl6MBDGRrD(Y$%Bl1OY}k;O)Q9T5qvstCB_7sJp9 zcylHuDNp?cHk#(MWHUH;kBz8>Nx;6e=^ZeHRo{bI7-Nab$)@LTwR5N#f8>S1$6JZx z^Q%H+Bn4h>``$)pw`npCQ^55T{Jg<#&{Mg$4gEa?&$EPI9G zu)58_(!lStcf!{EeaO!tSCJ=sIj&it9qtA;kD0MTcbu{j19|!F8X{mS$6~QTa|vNmcnusES?@}N`4A~I_=zS{xe3XGaOLJ zY35i}8N-9Rc-d4?OUI8oD;r>}kn7}96qf&nlSzR&Tj z3>e?TnCybyo*y5G6M}J1`FtJ|j|wLF0FGPpvLGpKAWy&J5po7yfDqnDhT&$|nO{~B zeYy7~K%hvuR^_FnZ};}UP^!ytiOf0zd!B2V4^4U)#Pjns?xC3& zh>oJPX%k!`cZMPqDq8mloEl5IB0607R$oWjwOy}6T+&mxZG&h`je1XvMFo~-JJf(O zU2*f(5`GMh&snCA)dLFqxBbVppz=UScHk76m>iwxs)IlNSmyKl%l-?gXBLk)O+5T^ zZmt%*9OdA4a5J!^#OdxB2mK=7$z)ss@~(>yF+8O;tI*_bc0h6)fU2N)|C3PTdFn@pdi%^ck`|2_iSa?DGlXTR1~^YcIt{dyDN1<05B zFs;C}o|((SV#0bcS8w||%`;D$GFmLn`A9Fe?Yx(&z7MGtZmC$L-}eUw!n(9je?G(o z^%fX3Q0;EbVN>?#u0@9y*(f?2p!jmdYzyX<00Euu^DXkd$lGf878mS#&Y3R*w!B&qYT9e%~x z5P_>;n}UKzwmh#D1r3_uYMm|szld)s!v6xFHDobQU z{JyGRwz-z%ePN9koigc5GTGwJB)Mo?)eeEmb79O8cF8$uP+E7o)k+fmUbZQR87Y1W zb4f0aOV&J@o5p((^8=aJ?Nw9=T!mvKP;)+7@^i*`OQ-B-->RS^;SDOvPYB}4ZVb$Jtu@#ZwoL;L75gRb}0;1%|qvD1-O#mHa@F%eu z8^c8cs!a9C({bMQCF>agq_U8e+Jwr7B+DY=YUm{_Ken9Wi8g_5EnZjaGs*<+nZcJ^ z|C%HOZo@ezqd}j9*hlUb6l4Z?otp%yq}Xq;W-Ckmn5HwF=X6r#ZD3W|%i!A`utLmJ z)b0Q)pHsi^Dm?gra``%-hQ$1o4g54hs9>$+ECHLT=oJycBE@)tO*K&uc0FSkt&KHt z#X}KKqQFtQniRPO>B@P&fH<3xx`ty{U?v=(*`%gP7UQgMSaa>s1|YtLy)~?N>R!J@ z%mFn_L@tylaky8IUrgvb64kU?^X-+bEoESk=4FR1W9lE)Q`d~*$T9u_Ksz!0_Jtx~ zXDGZ*5k<~&SUkjuPW$#%GHx)ovQQyR2z`LL*VwQQo#fh&bwSwWgG|RssZ@+%YPUx- z{6auJ12x4yk(>1zF^VL62{3bjw*50jnr zwf{xHEdDCt7btg`+WuvFd(cb?aFwY@j*8%3A}3RmVJ|h0=wxEr*0)wPGzdU`V#9MQvVCB%|^R{Bg&Yq^g#V~H_Q4a^O-3`lIkr8 zZbQHlghN@J7Jmflcl96s_wtNAz7;Hbx^euqEhK=6v(NAXtQ`K!c&QR5ZlsR9GlaRT z!ix)wLYQhRxN#O+!C2zLT9k?JzYg^17qJbVwzPNZU8QdZ0<{^P5MplEKn!*>$*OH6 zRu@a4y#|1joAxO>JF-Wq0K?2z$Iv^Ak>UkxR<Z*uP9KD`eH@cBtUm-CiQOo2Y}{`jiP!Ts$P{?M|;Ma7J~+N2M0o_X(4((s{S#Y$ z5_VrsIzL89hhNGwJ^+%2X`CBf595lEw7y^;xCV#(d@ty*+!Ms%sH;hrw z<;`?ep)EwKZ&KMybIauyumy!?V!Xtu&g1{EQtAN&A-81NLs%GH#8*373ku`4COXF; zkHcP*Jq|CnSgIKkwX+qI@JO$v%d&~vN&#gWeF7?gz3;K@CMAOvrG*ehsx-7Kcdz%B zHRL^97k0LiLX!8&l_CO9QxtQ)$oz4w1;(jBa7*FL3R} zS5FN?e{~|ZjXgxkybDAt>?1>|h9-PNj)yY@_K%;tu%U8ipQEIV6`FzD^DR>JGJd0p zfrJC!t*BoR;{*DiN!s4fbLjN$)fI=n*j9shG-DG-1T2-8Q$RICIQ62Vz4*HfQ z97F-n%kM%sS-qkp4Tn(+wk1|p_UK80y!;$QtT}=*xNsVDWJX=nQB z1Nc&nOi$IBj+bOY5FqrAs_jTDtt4Yfcwi@U`68kHW&jUgAqm%VYs5C?a~2p0iI;!Q z-q96ql$9sveoZi<^O>JDhW?Tn@i>MzzDCzy>a=X!-;Tb{# zL5Wj+=zKWnG!1DIFUDpAYEFl$9mZkjSaRz3#*O*1Rjd_)Mqn@k9Oz(gzF`z-t31)D zdGHM^0)ofh^hni~hf-e108r_M&6tg&`drI+J>qi#nj+eic|6hRHTD%VVJd-B6b`3{ zI##LQ;t6n>WH;|Z1nLwpVQ$$CZ)@=^;L*Ux@bQqVf)!lR>$EZDf6gws2yi`o(*uDv z(}$t21yM8~s)A;y5JgHzJcGtk$sn!X{Ynm=;9F-E;p?!(*cg^?ALCjyY$yq9MxA1{|H!3xBKH3 zdcr|sYGP_8jL~E)hIjbxR|GSsYamhCVcQlE)v{1L;+W+z!XOUhXrD0! zN(^8~stOKVOdo$hwE-9`Zn%Sy1yOb}_;g&^RAx^g*nP!T4^K*gKola*W>^T}`Ewiky%1T@<>bQjncKP3tR5HIRI+G; zkQwuAj-H7UiKW-yxA#20^H2ey!wBI_@z0aBFFbMd; zebN`;5+=cBum54r55!?B3AoIsNyOn3s$X@LtyjR2SEjfS&-wPGEg}jLVCZ}#3-Iw> zRsN_G@}Fue!Zea&D=wBWm!1b?B^TSb00iyxA^!REjS#Qm7-{EkyD*8?lWbr_mj7v8 z%s~guUa3>mWwQs;X=I8!a))M|^HFcnnT^5l-sp088&^k+pn+`HDF1j7D z@`_3)_N-Omx=!MU3#ld;34CK9#r4xL zeGayKh_>PpOY+cBNI(Hx&Klb5t5l?3^FhubUB6YTTfwk)qOZx2&0#d!Zl)eRm;L@= z@7VCJKP}Y1hmzte8*u(A;?^p9WIhS^T*zJV6>w%8v4+bqRWVjvC4R|%E07~eY+sF5 zGwe{;=K|0pZ|ReYp`q&>xlLOZ=jox?9`0ANT~-o=ruLmZQhh#~@xn$@PL*mS$1Nhf zI0o*^^W0K*$>_^p{sA?lz<$~lcdP*U=-#X#KxRZ_atqDJGsUj32gd2xnSoPns~6Ea zIhKBL!H2U!MtSf%er%tVr}=~OsaFEpe@n-J=e|8!_{@4mu3#!z`PZ3%qesl>%SVEB z(%eQ92X`HtGgq_j`Y&WH{XNX&VgmHB674Wd$>2rzQgADErfyO0W2;`pA3HLAD4&`3 zae1#x=YB?^4}z@Jv=t6{@I!!TnHEu%I%3bRZdflMkHC!zK0W((0LJY!P z^)Z{qn=hw7)h$f37%wSigR9%d#@I}&)-R{3)_s%4=V2Y+Hki%mCBQB_>4#Z=-oD^Q zZR}*#8yQ!+A~L2Ek9>hXdz;#KRoCe@rSB7OH~M&;o%K=+B&Smfu1%;ll5p}>h3QNa zNH-#L7}(${e{oK6=>)J*d_%DGQdri~p;kB6SSSJTH*e

cV54Q^hm8JNI^@6owtK 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 diff --git a/stages.X3qVuXFj_Nynac.png b/stages.X3qVuXFj_Nynac.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8f5b3baf8c40e4cb0c0088bbb5964b76392cef GIT binary patch literal 1331150 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

  • 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

    Ziu7Ko1?8;r+Vw96gbQ_jO(tH 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

    U6D1F`69$Cd{Y#T7hhR81v!uN%+TB2#E zdcmwwYYZb>sl%RlCE7mew9PZL#<*VZ)9?gc7LSRpi*sTQ8MBsrts_WQ#|ygsjWH%S zVP*#U_te6JKRk*9*`OqJ;~M{1JbA1<$U(zz{c^oqYR*hjWl`)fb^WSSF-RP@^(p=_(fNonDO{ zhbzJpy)Abr1r(eoR1;SlOlHea^^M2v_Q;A{T# zf7bln9p|^TFSMFazaDJ_3xQ}L69b{miyQnv$vO14SX6`T$ zb)<{Fjpz_y#kTM{;amfV2kqN)N#AyXl$yFe2-|fVCx5Q7573P^A1cS6I=|fwm%lP9rE(`vuf*cS}md zvi86(c<6k%)kl8wl>S~+XsZu~l6N_WZYRCEGsYDSp$B%vWAv~HF!v;Wmv zM|KaHtQ!mC`@PA|_E5E=d>A(2!nB8>7Hc+8sm&Bm+Cs_^Z1ppfhl^2yTgwn1B=~1h z-O2D$K*fM~bZNM37Gs{^2@Ojl=b@@Zb)fhoZ|cJchHYDKAY+EYl7MIO$RKJ!Me$mF zYwL(h%btt3Y(uBw%xA6kcCx#6N}O+{bN`2}w+?DM?6!pi6sI`FEycAEiaV*{7ThJc zTX87G-Q9}?DehW|I}|6l6sKtMFFp6pz4yH5n+Y=ve~`?R=ePITd#}9~WMIRj&${Jj zh-^mVHb)!|DXl=h+2G41MN25Br?8YWlO6xID7~H1&_#-S=fo33U2Aisn^-5+8&rmw zu!NVjfj9l@)N`!$5qRWwpcEp$@J@<|Nv{wNx{$W`ES|poh@pk7($y^{jA*`s2Di@L zC8^xAXWwT{-|j zhEG!@qYac756t$h=%Z33D!3xQ1W8RQU zm`GntKQH!2{RyecQGsIh?_^(+g=1{|Y|$3iJB=IJLwoOT7U9cRmWR3-#h#vsH4EZ+ zHdDxQ@<8*3@0vf{Y{@Uk`oNr;l@H|6Ke@hK9FTuvFxvrqSU!D>y_I_!w|KZn9-no2 zY|ntrC9$<=UKm7@^6&`G`7kg1#lre#Om)nud&#i+V7iB*OYV)63hROfy8x=~hfdA^C@k-|ypit$6d@*;An37SRw$``1na zcIpY#<0fEx*oW7APF}fxDmNo43uL!Etw@n!C6mMVjma3wajnTmG?`_kRG($3IAyD- zZEucy%H=9@|LqsZju=cp((ciI{Za9AW;Lu7JB=<{()>ZFvNR)J_!U01T7O*FWOaAj=Q{+HVxx_J`zk$TJShpX`8 zjP=!wO_>A(%+LWkAy9X8QUwcw+3#c-CaB&`W?d-#((!Lknod<^DdIbn%>3?v3(Q^LM?TSJkD3!=G7wkS^SmYL(r!O;ywTuQE%K`C{)I zoN6bubF{~vFGwk%*tzWtC8FiJ@K)P7NVWAlW&ocE_cZ~hU6Nu!g{rK za{N#iGw&Z}h35Ca_*-iNsi|sR_VkYo462v*7wmPHq7_2Mf6KE*)0a)lXKV1LkfeTP zekZR*^4rT)1&3Sl)B6J{2)>6r4)X>R2YOn|7Y3Rw8T`kE`NC^OBnru;M);sm7hln3 zxX>OaB>2j^e+ol&T_W;)Co?nC0y0qP`7qhKcG3P4OPzFp>V~c5c9r(2X2kGJJNJoO z&iZ-5(q-zAvl6Lf>PJEnDIS6$GwNmZ z4(VlbI~!#qZ~lC1xf(`*8<`f>NdixreY~4&rP!?GY`RiOmV|#!?`%TlEzT)+s>gNp zW|p|`%jugHmkr)ju45ioM`xGB%4h{*Ev{=7wz^w0obL@U%Z4y81xoevRUNsL%!|^; ztOSzw!!Z+&F?E+YJ-Ds~7nVzKsV~#Z*vQhzRbP~K<`kVYKmHH<(J|X{6iDATkLfoZ|Gz8m1c$6t1lN>0m z*pjYT(lzM@M>t3BAfR_(nCKXs5=5!q5H|Q0vB6gkqb-K5mB79`-C#G&9i4n2&51@2 z!PzWu#fSxQnPOnD0cFkXBfI zl{_2+_OtvPq%;Y0N^DopsT9Q@7svXq=K04okxZ&AFK+B%+TiWu2;xv*(WZsUx2pqs9K%F6HkQstf`V#Mk`61!#vZUoN-|)qKAx zYX=ciFE5s2p;~k$-EnswOROYkovz|vn&;kycL@ur_#33KALHWUhRj-b%HBJF{wz4U z)Trljyq~Ka6uCD(!;Nd6khnbAhKCZ7=%jwekXKr&-Uufk$3ITz4?p6hNS_+(}QPgmFe7gT0Lkq zDgX5M-7t7y{af)X1{L(u1{rkf5AFP03W=2i0m9RQuyh~m@o?rGljn0TcuxdmKK6zY z<%{rNqcHN%XhaD@(27H{{4g~qRX3)}O`aA=h$fvgZcFdD`+ zZz`J`=kg>=a7*p+%>7@}fTh1_{46U1gNW?s6VJn;t4_vuAD6)WWZb(^mtnjoye2W> z_$OvXzd2|}%)z+X^_Ah#G*0jwXfu2jO9OT475n(Xw6>s=*u3cTWAko@#MhyHJ0G|B zr-w?8iO!hWmgTd)C&A5{!_pC&yND{UyIz?PbEP#1R*VwwG@IRW^(@~uaNFFNi4&bm z?;r{_Ty4TfSfJ}ZvE>QV#pjgcaVOFY1r)dX(WIXI4h_m6|B~AXVV(Zbd{mue?2^eg ztFx?Y-)iEnYB4-fo#5BY#DOFA-9lw;v^04pZp4p&6M|+Ki81iS3JT4JX?Q%N>(4)S z`-pP~U~K|5p*3s)TjOboqE9p~mwI>@wfdffyt3pdnyPYAby6hNn+r|Pd$~SAKQaTP z`ccRF_e_Nd{#GB_KZQ}+x31!)eHL2iu)qI#?NXe$%ib5YBMT^qR6R<7RO?iL$y%0QIWIf4PhF{ija+5zGm}{pj&AeCBvYdG=E9GOVMIl+)@YW!a6M|c81Cad1*u(K9vfW_sRb#_NxJ>pwo$lST^ZiE*Q)RBB0$-! zIZPh~suwY8c`aYCN`s;pjlJ1RO4S&77FTvL5i`$iv9%kNXIImE3Q3+CH~WJc3;2_^ zs;q!Q$;^aJ#;%O2Y`0*sb0y#gu;u`LF1A~al+=l(eoH{ z^ai7=KIE`>JCYzrp^821JoM9y1$XMmbC&AezuLR`P*_z~j=&0#QGENE!1H_O zsejen9XqrU@C$zEr9D2on}uMog|*Rbz9|kKH9xY>(0OKbk?^7E-BCM&&m>_t)wb`A zQRVnz_l}D#ILFQjXUURN)scwvA?WzbtveC<65lBFE|9o)L-71~fIrUXB=UyF9XG}} z*3QxYR%1gyO60){0430Uj(x3ox7o}BI_W$@9>mHygRrL&gLCNc^*^3~l7j3L-5x9)z%gjbR{RgDXwQTzOa)U*(%{mEtGGbcXtIGHW~pw))R0htxm3 zMPH$7pH#SEXd0(5hlET@;8?FCmZezoZ0g`}O1eu)X{cx8`)-EMVs1k~4beSRLh7te zI-k}#RGQWC#~};AG(8+MWoaXjmK^vU!@kX+MK0e_FLWE{^EW{o?$0w4>G+3VJKGyn ze$nLZzmI!)25b>|QNC&aTTq$MaQh2D)Z?I4li1EJaBi$^gB`m6h- zI*-lJR4Z#^w`S=8KC)E^LVF5>Ts2ZVcAUa>P?^Fy(4J@Vm5eSU#Jq;8xw>hhj9EN5 z_HI;3CdZYi_vde1N;Dt1H0m^i8PJlXm^B`aW${x`{Mdfvo42MyETq_49t9BE&0JUV_b-ovC!?;X0-y~)_sWw9s>JsCS-`E&xcpcLaHPs~76Ow| zX8}oEnB}Asf-v)%F*UN5<_iHL3H<|6v^a!zB8c+mZI%)#i^0Auu;Exx z_7`1pO?0Jf-z+(JQcsEy81gAn*wRh(p6tcjlC(OVinxRtoqZBnLRk^xXVt6OlR#?Q zZ~tn-%m3e+a3i0(AxH4$B@xx1t3d&tI_J%wn7N3B>x1>PGl^N%r{K0Oc?cy)M13~j zZdrT$){J!rgjfJ11KksV?omAiJRIgGh_*h+eCBX8p9F(GF_5&=95r?N42R5hso=Rk z9~?}>FZWh|oUaOadz|17KWUpa;K7l^E0hBlzZox$e`GR}J`btopmN6+&a8fnIuyJ; z!jt4z>T!;3^}t*c!$bG37L-g4p3`Ypw}w<;nM4!{qF4smy!-e$@F3U(Q@#JXiN@M# z+@Squ-Z1AxE9zpJWJtcD%02F|WF-lY%sZBYH)JPy7(yZm#5^TsKa3*yCSNA^V@C^y zM*4Q_op?J~=2Sbavy@hfv_It6+Qz26XN$kD*q!oXq$^57Obtc%9)wtnVuyri;UD0> z8z-1);e)whgH7`~U0qfg_SDWJ6}`WJ1&8JoH@=2m%zKZ-EB$+M_x2`2*L}uf`@ee1 zgQ}i^0WfU8dPW?{qu~%CuS8I&6-cA0!xQrP@faO2O6kLMCNyvVo4xY@#r|&&QQ~Ed z$MJl92mLC=XszlU$z$u=v5=f4yvuT$@;Eny%Bqg<@ACEVPa1@ntm{@4buMLQ0=$@- zQtI@95c*6y{urFA&8;+LZqvE37y0=$DPxs3V<}tcbGXd6&ByXtM55ZK_ z{bMlxxN)EoFgp5~85iKgPH?EG&UyCsHK|M`P`+FsaQW9P5=NoQ^9anj)fu42$ z5uNDU4OohNZZ|eIx=3cfBa7F}MT9lOii@ohUOp_g^&VA;C#!imY-n#k#fb$?WD70F6>i>p_;Oq# z9{+E2VVVWwh?^B(;x6;;!PY{hWaB5B1<($>l~sLFa>es2(Md13ks?~7xTV&A|0uQN zN$F{QB-iVFlychEBw&SG@FC2#sOC^B&F;}xe~ll!4FYeg1-xt)rf~Jm$t^!P?)C^D z^x#vd6Udz?fn|)1g11W>E=sd2o!^#RI;PBZj79r14!Eluu?=jgnf@H^b0Wp3Tt+n> z9f)qQV+hQTAt?e_Wsma49f$wA2zB3Rd;YySV(|H*A8(A(^I1Z$srh7x@?{Zmg*%^) z5GZ}UsP=a>HUf-xR?jvvxLLooX07V`dFGT=%KVeWl0IEji|UpCcZ%LrEc!SDrs@x#` zwuq11iuZfl6~8+dBxNq4Q7LuS%zg5zvFq_$BEOJ}@9TsUA~O-cH-eh%=Ko{1TaTFS zVw}DJ{_uLiD%h#Vg~WwmL}2Uc>gKvW{RqZGe~M3kOx9tC>9~Rs3-BjTJJ9Q)hPhn+ zIz!&N;PfIlWv+}R>CeQn7@yys;?2GyU99iJCg*ytd^(x0bs3YE^2nMsoH-acRIHVrOOpp`zSWQ z%(xqesz|mURd1&GOM!Y~4dXC11i$Qa4&9uxZi#Ni!rIziUQlLZqmgjnqy8YuG;Q}L z{vo>c-XwbwR)cVndeYC<7H6FEFo5Znj$%K9CR9Am&B*`eOZ%S&|Id#vCp>#H7015| zP%4!JW7kEOo4??->n}c@sjkmJ+?aso)bhFxJ`@mrs)~N9 z%eof-&&-0WbPT{W$}j4m#K=^xM&`yQf6o@ZCua#9 zT3nx+*}I-7PBFwz!#IMO3A?+6UaLT_O&jLcDjK*(E24`V@oB`sUz4WEY-I! z{!;RDI@v`8TeV!igfgklqU;KAEKu6`!^5LAl>K1%554hQ;|645w7nQr{>^60LshPy z`3mFh8XQ-86v8d81DTzdjyFflxt;s+Dwirw{X_)nBoGqF7?77BJ{H*k&9?GXZT_Yl zn6UB)JX;$(%FPk?y>mk}Oqc^0fas>WIZDkGdWlyzv6Gcf=Ewr3dB+Pnv~95?%@d~= z!0iLV7^>hJaDVmk2^JIiA=Y_$6Sd!FTQ2#-5>r=TMD*a`B21q^Ll& zTge@YYbac)PNCAyX5to=5)qa@txj)hNsvHR#Pl=2OgSPRjoG4SWOh9>ovv&%C;o-+ zTUGw+S18z!F7+s;@QHevULMd)QpJk=Lk@0E`-Oag)VH379@W=x_v)8? z4!%D;Jl~Hgi3{i{KS$3WcABD=e(~@|-|@>N*y$X)u{8f5s9ED5YR(>o6TEop@`LG^$@%>rGef8YBn0FgO zo|Vr$PeYP#M_m3T9oT4ZDK{QLf>sexQ%6R}$j`6n*sGR{R{KrFBmC)zvPRBAMSgwJ zS@7Tv_b5DczJ`vHl~Hq62{M}+@zJ|Wr4V!Q@cyZ->af#SIQwaT3ZVvxZiygCr2waS z{KQ>ortEAFkJksJBR@R+UE3Mv-tIYd?)!6F_JhotJ)~kF_Kwos>!kBn7mLsZp6{uR z{i^eAhHd*jyl?IBsB;F$JC*W&G}Y{zI&mR=JP*YHI{26I!T2xslen?cxyj7LNTWX1 zphN<+?+irsf_&1>AC^OU(B-q*u3z~LQMMJ9$ht4vQYvAA-e$KQ{(MLI!G&Zfq6sxu zAY5CdNwGG2HA~a1;C}WhBa!(~^-|OCSm{)oTHfKI(wlM2qZE5==uTBiGUF?0mHINZ z`Tk*z9jQv=f5eqD%U8yTsDO}+MgSEPD2Jw8LNP*crJPN|W>(vZBG)>YpJL@zFXW0@jsb;4IY2XDm1VlD2(bBwk= z@q|#z5H|(;ll{^zSfeNoUrCvGgp;3a?xia`rEX?Ibt!hmCq(QE86qBE`_$sY?f1vP zXAj8ucKcUBRWr*8Kf*&bP82QD3@2@4y{h@`FJx7u#6LIPPX&9^CrIe*g7gu|Irjdk zfg|5g0-01&lAR|JknZ4Hmhu?gdsQj?eygD^vR$3%!e)g6UZM|bJ9o$7dOBga_aZGl zKKQf)8c%&~8SP%n>foiM=?_Io1}Umb$`G)bAV07kl?$os#Y5)4>z%Itd`lPuz(Ybf z74LAMq2faXjl+Y_rFYzzSNpGHznF}blP-J@LHyF{hee6zvkmdG5SKfNR-QLY`S~@qXEnZ&MD_T@ijq6^eUl^!8_)@0! zNk29b8*pa0n%b<&m#8gUmy9Sfh0ob3xS-<>Px5|Gq$!8j2$D-N9 zIM7AS9M_pVM)@E8!5^=6{$(4ombO+Apow6b_VK-6y4w4JynzYLx@SzE`r=F3mG2%m zGam|f!QVcyiphaH1&c13i;{9-4Np#$kQM#FR)eRuyP^>Mlab2H%h3B7Q4VpoO5v8n zMuFjRxW{>t4HM2t(6?PllhXHpDJo<%7L#Q%~UFO?a~tBP8rmcjuO6VNit2(K&l&2OaEq+5G7Pn?_}H6W{! z-!a+^AzBF8&Ce(2D7*+uxU znjQ_kt)Nu&J-T8(zn51~ykYc3-W8bL#$i*eY-AOR2X=sI_3SS8n~17h3t^?D3zymDm4S;D{3b zTN$tFs66Z(7g3LX9T15jK7P{+=P55eP+^U3QgBhWz8$ikeLO9;lh6Yj(4S1`p)YC0 zR%9Y%fyxi=GZv2<=AKn-5D@mTvt{Tm_#t?L+L(E_|kLTkOl zSe=2~lwIu|!$z{3$nsy>xj!|V!~Jx&gi;iJkwKW{oyuqydqzVoy@g9}N=`|)eM9p% zIX{}7Ao>JSL?!{t$&S&P5pqG1Th^x6Oy)laT=FV=1r3A|_McK|z!K|93#$w#@V-pW z?5Y*3fsnh%0XAiMWqbJ?8l-KemPk{R)3oqYj?C!MT;6D^;~JMEh5_U*;Go@~o+2 z<^E_9UDOYLDIl)oHofr6-G0jHkAj6iSMS7FV60c}q5rXClV}~Tn^Un}=k6~)h14Jg zEG}k?L>-;qv+b!sP?`LS4{x*Uff;4ma1zIlpOV(Vkr$jVQ)+Q?&UX8AQ-~7%9~z$j zJa-gTU8IsEq>i(be+zw~Isp8c``87iMKMHECT9)?R!GnRaMn>=1+hNU2z>qPm2#Mj zVv19H`)5t;Z)dcv?tjchKl35>TQTr*3ypeFo*Wr}2C5whGTHKGXJt<8N_aVb{=3y( z5_v$1-A;Kj<5sPp?uIK0hv#b9JT@DX`4uLe!*mYq4&UdNgC3+YPF3efZ=M{j?@6^z z)=pae1NAgq-?6-tbhZ8Kj8CaM{i~-#6|3S-wu_@e16AN%#;`Mhle&Z2L}tX=KX$e! z;l$`2xnxF&sw*`Y5t!;b8Ws?(>To?dx-ia8R3bde&dRrv19!u5Crg*Y!y}HWijz}@ z;Gi}Ss`UwnNQ#JIdf^O;$`*zNBv1W1w16xi{sG8XedS_8(q4dq<39L`=)~{hP~uNY z$H=oSZwJjsJnA&xfkfdCa)VKOil)@UCvW=Q5JdR+26HCo+W?v%r41@;>H_APi^ZmmB@%)FpJm z_VG^Qxh>vk{LbT_AkY6gk)g(acT|TbS`odnQ?l=SwEE*Qj=C8Bf3~NK=#nigDg!KuR({Dl>n?7RSJl_@lg39PoCnjx{osz^aGXT3yc zZ|#eiCVwx@X`1uL0H69oErD2*a=;%J7055iwjPtYVNlj!K^A3?f35lBw(o1(J;{Ni zorP#GMMx)#a0OeLV3`#iHY=u%tNa#Hm8sGA)xrJ;h?9q^Y*-M`$n@FV+0=XboY`aL zsV7v#``O0}e&zgD_qtk0=dTKeAc`LOOR=Y?$ADNA@om4@O2lq0t2qRY>WBTe6=X5~ zkSmwUH5U6mwAC9~9;~$n23NhvpxvRVi7(^dUvLho7D#(+5;%RFY#mVCC4cN@wjJl+ zUG{f2V#j@jlByZ(8JfG0 zRN6QQjHzuit9l8d5fo6_{X(0{E@SBP415hhm86PBAY`yd*wcvr^o1i;j!Uoe!65TK zv`Cxl&rXDy;vZ<%Cri`U6#QtA1R(=sA;D1JBJN=r|K&RZij*S9<}dAEsytFghE24! z-J}~{2=^7e6WwCbU@Jhg5BpLURVYc`Z1_KE%RRYi~frrl{LbM>!OqL^~y8~*<7!Nxvou7w0%{o4Lh&a<8*KQbl$l7mK2IH9QLZuhpta`f~rg@ zjIKN*uWHcd>~{Y5(?*bt(*KQ9Uk`doFHX&4#bx@m*e(5AW?Bm#WJWdwv~vU12Av6E{J$dfe%qd%$8R-Tt8`oMi^GzxcxT$~+(OPizgb%-XbNeYIKF#17oi1x zHu@y8oEN6np^T0KA|{jnEo?C*62yorvS-9dh4Y0H5zIEZTsgDg$5sM5uh@%DiOY#H ziWxmonA8P+X0wGbD9>L_#Nks7v)%4_f`;dt0(rXmoo={_>KhPR$UF)&59S_Sijbzjp_&2myc0jtGs^Cp$ie5di9H~2 z^TZm;1oS()?q-fPntmM^I6T#@2>2P}oa_@1-^-ks^bI?Ig`wK|o4req;K z@DX7>dePB~d+E>ZB5rp&{7Ue%U=NRnNCms4QS}=Q^wDK`f+8HWqL@S>IJwtv;S%m~ zDb0mrEK&_QT#?^iT3l$jsnrKb%iP#?iDHk^rM|@kd2Hf>8tjUFzEqrSe+6Na11YSD zf4n`Al!%oo*p6N`do*k+kX|Fyqj$!Gdc^nZ46etxpMJ;Qoz4$Bo?CQY7(SlC92Tmy zDbcJl3KE3}&44<3XHh7)W0bi(@ zL<*BvGeiG`l)&iT1zzqLl$H(1yyA;x=Fz1@r~t+da9}NZFj{VO5Yp*)ZsF@!DF6b! z_!O@`ex0WoN-7^%$bICTniqL{cl{qnEd6;8AxDl8>!Z13LS->qd0@+b?*Kfv8JRus zT0g9ui}kokhrvoI=n66t1{Gj;BnWL+ijWQFwyOIpV={Zvc%1qu%|9b;cc>v}Xf;hIY(%wkf;&Mmrx9wcXN}Zkk0JFyOFhyy~M3Bdeod!;DE{yx0`D zWBVj*FTb}`PYl^88HFlR5Y{oMCzX-2p=|lveW;^52!kk-e_%#tWy~vL=R~Kjz<0Oa z*;HPXqdaQ(@u6dT>-i7+)1rhweAT)}G||~}jQu%ST!m06$96bek1C0b3J~DuU*#@xord?pW5r3S8TSd#DAtz)a}jF29@oATcQ?4d*fATgyufkCQ$JUS zZyfr(JYqf=Z1?<+?yul~Md`+^K5nnei#Ir*z#;o)&db-=*Cp8^{!d>see=T}#Ma*n z$f&aeKY?Wlg(_kG0(%eV2-xIA7GhZ1@Z?_UwhX6zgLdXOL2DI-|3nqhGODQWa&y^F z*>(BW;Q{W@sbMXIp#EBW45>3yWzp%ISy}{uE6|&l&!Ted`Gg{LA zSJ&_lqv83QhsOy`=Ps?!cvJS_y@h}bHRaSwTDpvTt>9<+qOaIt3?Ic}=uYwwPMTFP zZq3T;j715(1^raq$LlsyR(4+%i~=3zk-bt#ytJXwNHYAsit_3G++wE#Dx z@vQ!I!1v|tn9v_IM|y70_tm%=NS?laE(EMF9Rvp$b|>I6u7qe2GtbA44W#PZKnQN% zLLP4r+@Qa%!kh?kD{X=A>0yqdKVQ+<9d#lEm>hK4?gr6G`t1HQdp-#L3~t0<4cD zKF#FXB)!{jujxh7cEi5&LzP@s{B$8S%JdNW{1-N%_x48uV}eVA>~U+=B4Q+Jczg3a zC2-hh=zCJubJaQ)9c}m3>Nx$gQf5?zv^8%IZ)t#hHG^OTcBkV-Z=afvMCMETP*3qk zJBQ*f@6V36+oVqexpzH5BdJXq$fd4KDW!tw=&q?;-=5FSb8nvOZq}SK%rt!^o`m*R zV9c&cN-KF|3GSM0>~?W+%96&6g#fIRg227UPh(qW^&jPLMs3sfG4~$5X3KMwH#Az^ zdiVUsbNSebu*S@mtLW`0T_S=AMcJYwq`=yMUe)e*bcBJt$vrU$G&Dy==2 zM;hKoWVhX4G9Q!21mhij=s4v{LN#5!Ms>spgMR#}OwZD!Xcta4GE1C@(iSiM_rcY9 zefRV>Na8tK8Q1*n|rc5#Bwujr-JvO)4%1|;uqshUGmqb9iJ^G zsYQZbMi5NBVR?xTHC85+Ln7fV2H+wSp%L^BPjcwU3UHgc&Zq|3?TPJ=mx!J+uHAes z&mr^RhlYryH)NQLVNfG&-`=qFEqu~mjmIm|0IU0()#lTXskqti1WH5|YJy-0CJyg{qQ zI}>;kY*^ZL@*+{jgd#0ET|t-f4N6|NqnvRKM$~PO z{#WTb$LKsG78I=aCax#8WT|^y7v8IX_qzDAsV3i$%_VV^S|hnmG)hB0ak9xxNh-{m z94e#nO{=G!tTmmL-LxMbD0LnlbLZXPRJW{Az?;u$fy{s4~6%HEgB#6-+hDb zBFyZIfal0SuaI>8gn2{gE)qeofrSyuIt}oSmbGXNoBrsyiijXSERO{XIe_f7sx0Nf zI88*}SfA|xGAY8B3SqK1ghN1&C*18S{0;*Nh)mGqDy*+>|AuTG;f8ZMoU92*LwSSz z=Ea-A3xWWixq}Y#(;MR_u3L%4ZGUOq&Wa1ZV+FUT?*|A$!Y<^Gp6TX*NC3^?g*jlR zmLqf3*&2Fi3vCOesq2&Dwio_?pF?H}E~rZu=Qc~&q8B>>rH%z7pu&0&<*$WhupLT$ z^lnHak9eB3D&!NZ(+pqJ0GR}VsSjzuccipDyS%-u9DXxayEJ|WR*$UL0Z{^xPHDO9 z=0Is#Ov~JI2waVK7UM@LOIgd_$#K`?guzwuPMbYzqr)1_C?O>!P87KPpdSkU__Oqd z7G~7iV^EiWPm-N#O*DXod~h@^Ory{CeT$lWVIX)Y4(C(b*HSh-jQZNs&g`xW!>5bb zm9z9N|AT#7k?|bLFL|ZEjOfX}Fr)zUE%y}G&DtiOM*Ainu06!ITDTvM$SqE+GOW{6 zQ&aO{ED^{+UUuTb2Qj2P4k(C#6>Mez9>=6_mj!nQr{8CLo0Iw_g#niohbM@p98f-+ zV$er?{K%^P>U(;6I!x7l;czp~J-l1KfabEngJ-#>yU+IDfw~Y%L;2B-m;>Md_nlis z05*UoRKuu|x|;@2g0x@?U8aQ+DN+}p^bRmzJL?RY#ZV) zkPZhv3V0#xCKx}(DyRqa|9(?3F6~4#PfUnM6gQv4?C{4|3K0Cox?$-Or3O9Sw$6lm^0l04u79*d<(W@SRv*=n*ef%TIJ}vO3H}<|^~g@|r1!++VM#@}AE4je0VY_8|w##y9&n z$IX}LvAH5ST}rUz7Uc*G9;7fM>#s6F(iD!CADda5Ee)rA!TNpUHOnVud-v*+B zKu`@JGRT2};*jd#MP*ntc)I}qhnh47H-3EfsOa!svNxAKfh1i)8LX4M+X3*`1S20w z83!#$dEU(gYBhmUo1&lqnHSQ&oN+~V3;SQU-j>zZ13otREJ4#P1Q;Jzd%n;H>`u)I zctVBiKR*6sYpRS`fMQtodAC7h$~jXbT@Ni~!vT&nd^J^vjKEgf%HPND0UiWX)Bt6ii*&ZQE)sMzoyB!pCTp#R! zR0T~90}(3R8?!6fmw5r?ZuGLXd0VSV)1hjz{s>L(PY_ey=$0Ady35wQF(>|f?8FwK zRyMAYi&w}|lJCD3kZEBy3RX^5a3lw{+&Z7si(PRF_?qv`%=_G7Hm&*`5+xv~8v5N{ zY3e!kX*Sv|ha^Sig(Ok%&Nhtmnj#DTp#ZRSAJ)-EV?v=oLXu*kcgm_}^XRZcub*y^ z6!Y|N92CFXfH}(oZQ?g^e-rI(8{^YA8{u*Y(YTluu`T15RxdDBRGxvXsT%9zqwJ;e9}X_m+l}Baow1`QhHii zx=BP@m3#}w2x-voP=F|{9kbNv2vmS6D4h{hK6ZqlZsYN@`XL+zz11OO6{mB%g5$=5 zsyvj{OH%cBwyY=t(wG=njtXm7uv?U^UUnI82!XtZ$1{#h)X>woZ+!12iR(tzwuAI_2-&EwfP~&1L6nm zf3@Z5@1@?8DWIfF7}+W3Is(^EjM{_hbP>U3$>_~r3Z2v@N~9H81aB8#r4Y8y5(#e~ z>v6&jl3@5hv21)O;2&JW7Lw*!o?5L$s&4s1mBKs{rqB+C7?MhVrVe{=Nx6bu;YO#0 zP^u&jNt#AilRb^)F-TOM#x<&(x_g0rxG6aBHS{&q2EIsaw%91m$=X9`i65UpNE$$> ztI>h6P9Zi|EpSW?(^DR46SI$K-ovj>U0 zZW_e~)JrK!C(kGj2mgGha)i*41buaE2on|ZsAdHGh+AwgLUW`Jka%&%1YHf~Utvkt z9;J4s14=EkT0-Z7x!|>pex!BOoHUJT$8pVRWB;HO2|W-ewAX|;T@Ao@$L?(aOMto)701qM+lzL#B&lnAt zzHkTCPF9{MVShsC1Z?hoMJ4AkUNj=T{jZlx!3Gx5fY6iYx7?X=a?D?TCoA(wl2(FL zCg!ck5O$;fpm*(r{ z!i<6Ry}WTAXvayJT?!Kb{OwH$fi#ezaBe8jwh|@6dqQrndak96dZ_b0(yhv-#bqjO zaTKSFB(ySofqzY}%PxCVKCBdro{S(H@ir0Zxe(&MKA^LXJ5)C{L{V#Cv?*qm8rSE(n~P^&z1uYc{-3r%s>dtpex+ zSOlPlwys*wwYrzNNDk#k))*;qdsT_#`37lDI(T>UKxeTcl4I>L50>KZ05}q;^M$(8 z2HdM(831n57m*-hMo9+a@?YV$D0F9ATxSLL!R<_K=(pBA}Ck@?n_zqv>9!@tYz$ZSe z6R;i$5Jy`_0_rT%J(eGCtxuN1%_xu7oD=~uP}l9NTkW-BLQ7g=()$1F?#vA2>T}H6 z$_>59qN%NnzioW51v<^Mh{((fB}6d(3LA5BvlAHMtxur4v>_g(X4#iKY-aj{TbUo?!VkE$K=OsO`tdCflF|xdlPIG@lZ+>U0x-rGHXP7-nPSv>=Qlj zZ?`Dwq+7|Sei39RRCY4y$|J`?SHgwb8k525d#q6JPI>}6=7PGkTMnprY`W6Kj6HBk z0UXqOT?lqW-FB_$Ob@O@|o`&{@DF{F?*el?2Yraw?@WpACaTL-&i1+~S59kkm9HZ(Ta`!O8b z{wt%#79;Nc>v-0})6qvoxq+JDgEMKjgwRzKqjoNz-x(vz#FF^&zTiuN7hc!_u?Sr^ z&Z>%v7rZY3;b9!15jv#Kzu$~oA^y?754iWWNYg<0H#Z;<0q0A2-hWF{G~FFQY9{QC z96PE3jPusru6n%;Nb6Nku|!p@yU%pnt%6*QCr!U(EuvJD6-Zx91^m)3eHAZbSU|dO z&oq{e5q{zPxOP9#4EwBme@ia}_j+mnDD?XPo-HX4_=roH(aIY7k`XBDd4>tPNK0=5 zU67CZgam7TYd}x^PwseOhp64QP+t8;w|m%57A=Y*XlF- zu7#$;NwS0d=_2DioAIyekSH;igeUqJ1v`!%4!-- zCM;%|`aXXz>mBVLO`%>00XjQjY(PdIw4i>!M!h1g?6K$y5J&C-z9dD+Y1s&pQ2_v$ zQh;h$Eo1bfa(UVi-amwh$ZrU+ZhKpdJ+S&nW6A*X=F{0&ash~v*p*JALSA;b3D*!- zGrcG{vMmR7u?H+8t)!^7vbL4OGgMpOhT=f#P3n=$4I~fIm@C=$?C@)U@&EO0^tt{R z9^a1U@tGJM?~P3%sR_ijc(BS7@HKq^%tu!+I64BZmjuU}@4AHj<^j9XgAC(jve1AD zW5Wmfe|3S=M|7Io=C1<~AO8;wVSGl0BMw-n1YdSD4e%T;pi%ia2qO;JGHh{fZ6%6p zW^T5FMW@JFWJ&IE+~fb;aYdH)e^=a?<~`cvTP${fiOHL~KH_(?2!L(6tO&U1(2p(Bi3+hHw^vg}x2GkFoo&t1Xmr<4;NfV*;{96d=HnJ~*dm zREfDD+ftvVb*F8wg;Eq3y2{Q$t2xv4rp{w*V&b&2SPdscrquc)YYhy!awN1z13h;_ zSh%YHo3Q%1{{KGoKeB6MuuOFlXrtmK1d^ObQYA*xEf7BF@@`umL}{_NWd8^TV~TB1 zK-EcF?A^;@t5vY3jKwjSS7JK67^ViP9OKxLRyT$+^1u4N$YlTjQFYz%RR7=q?b_Q# zws4ab!Zk9=x@Hk_v&+2p%BHyXwJFK9DWhwotn7CqU;bdfA9Ky*U#fV9v=Nu zx7T@%=Xsvz^BkAC{L}M`>o2`QZ0Y#iXOwdC==@-1?mTgQGiIM-Oy1s&$XXP(65rc6 z^kV9M+4DG7@oQNeM@OU{dL2muc~4TWot*%9oAlbU%q^C1e2$IVVD9h3>k2~ z65@tTjJ^A=aenxtcd|lCVrCNE>!+jVUBK(j0QWGtf4H1~z>*-#eCo=zQVDuE@plDr zx@j6FPIzon)m8GL02kd?(lyj^Le;&@C}umFjHO9yy}{uE?q6Y**hjL(zIG$h2k+RP z)w(C4+>{Q}>C$?h$0SVUEahnJ(e?2~H@zBvQ3k-EuQ5?z-bKS_366S2AWR@^#MuEx zQa+3sr!K)sxHH4lZE;i+xqGO@8uR0$atOnui}s78qOyO`sdo-jM%C&dv@U za2v8M4Ld>s1JX6zrapJO$ZWWeZEMDe02B%rd?)c|lZRAI7DfbK{#rnn%JfyP>0CzT z5ZLl_I~9h$2o*=oC^Q`@OI*5_^Shk~Qh$G93*i)pNykv3#1ZzRaUcwPjqsI(=4v1m z2%jy&+QoAFV?>g|$>N2lBp~#>^>5qvRU`^SWHZ_DNtSEqL zw=XCcQdw}pNiplLI$IzA%SYq%BS)KmvCDgJeP7$enZfvpd-f=By=matTTcg=0nfYZ zKXPUXG&m~cqgY(1WY6IRr9CFr*>1{m#5rwrNqbT_R7# z+R@U|&qHty?bgXjidXWR9un%IM_h1(;zX`;nAKV&O!)Hb*110r)MwO93sg&OBaftN12!gIyA z{M*8hz&J)?xedk~;0di{Yi(s4Wf!Z!WAh{}k2vCMs`3RW5+QvX@r+^U0>ZZuWBHM= zOK9P^Q9DtJ9rPEu(5UVr8MUngcqT};xl6Fk4vI}i1JgpnK{v9mx_y6F-{Jl5gR_+6 z!FyZT%}$H5K(x$}KCaP#b7q=7S<_xH7;{Db zg5!=HknV2^+-2;YwOE)dL$8k#?R|O_EAGL4p=H+pq}uHFLpWbHAHAkxI^7$&z@7(> z_!)+{pt&6c*0|ni@I`|L(LhO2bibFAf{x1}auw06?v*pf+3CZM$Y0<*^!g#EJ#Uyf z3RULvopPyZX=(oG)N%iFyh!d7x_SO3djtf-y$c#&Ge^olhw<|z*kcCS(rn|eJk`s{AbUCfnoZMQX;^^Hb|l^JN&M3i@qIDz z8(ss$MXR>Ep>xfLLyB8Xj+;K84jygTJzRVwm*OWJUT{;-8LivV^0-!<4FiR!#K|VN z3>GdQH2*i5bn_ODS<30;TB1QyL^U?bo15Q*L3E5NiIj-(0YrzgfFqEpKHyy$TXdnf z_Q{m3?vMJWD&-mJK0y%QI5>u5>I|;U@%8ufK>s8o_Ci3PK6xj>4mQoM_Esq1#SJ37 zGeL>WAOSxxLDC{vu%2g3e@-y=^@6eL`H_2nvv zz2dNG*b71JP|oK0eR7DqajZh#_Jf(9N$xu{>TRXLoq8Yr(#OY>8u^QEBEA|y8>6s1 zT8K+94!hHWOb?eqsyW??>o*&S58V=fZb94;VgYHdArsgWji;89v z`XbcK=^4CW`<0jN@%HuG<)gLggR@5y zg`%D=G?A?Z3+JcbEY3qa*%G76aYMC_3zA~p zh69W&D3pio2nl5w&P5vm(rr_~J*q`vpy!&YC~<`hS3|BC$|-AECGqD7IFV4Gc+VL* zM{NxO8i^h2>`i!}9tlQ3B|ExwU7b!mir~tHCJwK zcXTU97vXye-A=w83WQlPcb}ee?{}qF34Gb^ccZ8L*PHCa#R$;!t#g4wr|nK9$|aRx(t)|F9a_tWnH+QJB&D!O)54t^c6p1>OH91;3W!py^Y6O((2!`qnmA&uVy zZ!f&;|6DcDCAPo`^x4Y7U=GU&1TpHO)NVK7p<$jf9bO;CQTT`jHa_@2e&S<&vc^{mn8OWJ$kewxWurC}@rwRx%k|;!FQJR)vP80i%9<~ILzxE8Axps7I6OXFrYo?fHwbns;|=f z%+aVfI@%otB&H7}v;TWCxjq}wyqAxjTBSj&*jKl)^`K=%!9likm5Lq8z;-3juQd|{ z=j?xB)lRFWi*pe!7Wu>Ogmw_Bz|w5y)D5^R;T9pWkEV5-51(~YHB5mY#E|*`M@95c zE7~9Ghzsy5@Gah=UF>f)RH)_VVbCpq1qqlgBHh?8H6JSy0J}gCg}pIBD!Ze$E)^XR zAMOMy<&FAXmj)YLwi`CxwfOC)*Eb$L3%MA+{_h>=CWDCj?1ce)=+G~EJ9WEWm8x<4 z#c~sHu}`CgI-II;QjHS!iQaY*ZqP5n{j3(Ir29^Vi%&uF&Pa49lnZQ9+RE8A*)&iTrE5$I3Q7ozAP1}Uz{9-qYyK$(-sNaKwD z)_r-_Ygg~>MwOx=9XOcRl@&vA^V7({{4RbtwoO)kJ6k#I(@NV#VqVGu%rIIT-30%i zs4D#vRe4n@fK0-mPS9F!a-SKPqgZQG9Cay8Dnaxn5m4j6+bKd@1#Tj1YNc--yn3XI zN6SR8X4o;Y@tG~Y+fV)i(Wtr=HH5uzl$VDgGb@Y6Pc~RE2O1vdBnYM5Re-uXx=6zX zii!l!L?4v)i6QprU`MX7BS!c_)&UZ*hOH{Z9ucTCOgKA{V_k`VD>FWC@PILb!LEe? zuZ)qr!HORvw2-5}!gN=p=3a|L7>->=w#w1>gDgU*4$_mTKySoU{9Tli-;7c1x3XA^ zD*5?O8t+4n^!<{tneKC%7OL4$Xuy|xC1=(Wx#ouJdD!+iOdA$EKq|2sEx9obk)Cj1 za~)s<9x~#OfrngpLCp6}+Q-9u+(KYzRZB6w*^A+H^E=2m@59F8eqNSsQ-?2 zq`|dTN04%sLF~!a_LJNfiZ8;OJEr`KvYXqT2)k%9M^~*Xm>kRQ_xJnQ+XMv#9S16f zc7y%lZlFR-FlcNNhNISjt|!ZN6Nm0IfA(YTj&A-d-0BhA(ldfv7~ORR=^CPOGU2^a zttKv?mS+jc2Yb1zZgF71=*HhUujS0_7_azGfHP)%$nNgkt6gAi%_5h$j(S?(oQ|a?$?PydywUe_{O?A&JY~6)@dtDcIWMEL z*{`wRx}Xgg_{OEu2|P<>kl;$uA-jZ*#;du+Xg3GwMz(|p?UKNZzxGHx3ZKcgSBnkIBZ6fTfi=JkMtbTNq`FS|KcR+gZrrZg8_7noStsq85MuSmS0Xde{atF?6^^MlgO2LG?MW)7%NW|QN3 z_mN``NGsWzx8bgwzuvhC9=-I{muQk`M36vLDTw$;X!(@P5mmO!TEu~5PM1( z5Lc`3txsJSWCG|5HVT3QMx?jIKkbB~$i`zK8*Kr4JGq?N2id>sn}z>PCS9}kS0SWz zB9VPh9e(S=k8NO0jCh918Fv%eEN(V+r%$MZlJu&Z!l$jcQ1C9lpXhCis=!@>KT&$S zXqtii&#fp1);Mar>UCAj-f3R<&W0Kis@#1LzG)bxNbFUI7$Z3PzcA%>4=G!+50y`mBXBFR z!&>Fa$OU2pM$D5{S>PFQAS0R;@|LQS2|2MnPU(NdtxLvRxFKQd+UiOzDmf=5$+^^f(-#`_eH^oa>djA>f%T_o5A5!1Vy88j9R zJnC5P$rYH3p$Fb_;vIp9B<|mHT;Bv%S|kS-1}MDFf(%ZDoELJf2`E`g&ZKQlaDL{ssOo40y@3P<@L2+t&TkqBRQXfAf` ze)gCoGals4Ehc{5rzMMQH?_2E@gK;$K147Yk*0Jdet2^6hVYarfeh^tcm%(l&(h7= zZ)!Sqhi19WM+qzK=T@5~>ufsF!u(X%Wo@d2e^KVt=is6>N?Wo(f(?iys$ftTDv%gf z`Y6>C^|aezrood(O}>CTM8E6A8e#qV4V#xm=;ITowCE9u?sx%2$bTO*93PH3G2|9M-KC$j&3fNkNVI zwTRZ(fm>IL9Xd>5FpafID8>naD1{C+0vFX0tc*jyVN$4N$pc zIDiE5pbwt=F}@8k$j}z{qg^gv^YqQ_qtQ&crA6qv(8V30u292WnfuR!*EvN0Z2l!h znGn_GA_~CI>QZs-4B?(C;uWy11Psex$6}#r{`xK`mItSwJ&>mn*hipc5L@ERqG)5W zqOYjvRd^isMEat8OXAm@#J#yP`m^1|!56(%?$*mtsFg0_Hfx$=LaztvA^^Y-$Ujte z5!%Xdp85Kvp7eYVL&2Z>ud2S~ykO{5ZNKg}le~Rw#gxUz&9 z`|VZD+s}v=n%@xYp1*qmI9JO&+pXJpjE-b@MjB{<{=`TDVTwrOg%GYy;-^{udda&8}g;x2*#8YA0tRRj*yTz3mWgjbP z^G*W zoxxZcF5nL%c$Abr4Dy1p*f~3t%rtZw*}x57i@iUa$W#TePkQbx06>QzK5n%h4#QN3C&^`jlyQ-u1 zyNg6Ob9C+msp_9BYisw)U3d?j93`5WsE*wJmSw&(bD54G7@gI6225*E|FO7F}zHl+-w>5x- z#YA{mu+xSu%_@hDxR3P6hNh%0`_uj}{rR5mpD;ckVdo;wyi+#^h?8ym0=J2`nE}PY z_;BX6ISvI5;KDQ?uDFh=++`xp55T+Qf_>=td=s#99;ko-IuBEy&}#5z*)%U#E6d|` z@xO5#^n6Qe<)kUI(oXE2Lz`vmf;9EGf_J7DXZsz%@)lwxt~ZGA@FG0_Ho{TTC#~Cg zJnn-6x5d2X3M^CQ9lmLN=M>nK9`nqcQY3o#kll={JgSa;51k#(wF~W8PpT;c~e%AOsg=9_Pd`BkWn>U=O%Fkgw%X3-o2h)ixyW z$)y_UCL|=>pL}iiK7_DdiP}GaK`J~Qzc=>=X{?brTvDBB#O%OJ^Fz8Dzis=m(rTJq zEm^h{;Mn+T&<`g~BSVilt*sD|H`YMC1qGPM$RQUlR|u&@LP#_rd_5HKHR@Vb#Kumi zZaDk56Wzz*yx|E^?G7DvyJ4pj?PS(GHj$dZ{|3$ieFX}N7o6ogX_ANPdua!$qKa^R zL~kkZ)PN=BA{CIL9HFOKYop2ZAh1yM!CEIR64&I0YQU|!1DhmXifD_S7BFcC43I|1 zk2d)7K*E#lP>rlhN#_v2zF`0eAkh;jTPd2K}@)+$0Ww-mD9|SNAO$8}D!wy_7 zs=<7xfr$XjQ%~K0-8ng8UP{t16Wt%yA^9>dJG~Ua zM?Epf{XX*Af8Y+ncI;8*R@O}f_-ukbFd>T}K#O$GVQ2bqy(o}rwD!1*UsKs z5&f)br3t-q3B4MGS)S2RT2urs0;>pJuY>K3H&vaZB-kE8U8|B#6&{%!_~=WZNZl{P zBqa_%UoXu)KjCi93%DyExSaQ<#ZCJm)Hw^Dq!Q0NMpfy$u%2M6M<^kyt~(emAfb;< zHNa~ZNci%(_e~D~c$xxh0|V;tv3N-{$pKB$cx`3D$W^EiSd`gV!Uk|6&@S|$BMX=NsH=K6sV9f zXYD<87|(X>uvpz-0!n~Ql`9@#0UfNJAAFT4Ie6(ZCf|-Vn~0zE>$&i|##-#fht=19 zwAk#NtXO`3MID9DvP%2<_;DZ2H3cy>mI^a}GYj6Lk(z58w@^3WVaiDumcjV3kF%5< z)h-qF!Ho1z6xK4ZkV)!A+1jGItH7ZWdItL=6rkT5U)^+YlfX4yZJFu)_Nu{kM%w$| zSeC@Dj%GY=>f;-bv=TQMcL)&u%osEZVwjB^(J>4#Cn=NUTTLfjp|7FZs z7HMB5FXhxK5ooG-=IvO-)m~TE*4k^B-MeOXugzD2%~Bj@g8t43s!%h#jtoa*WYUJx zE{jnQ5-Qf1XB<%nWvh>H!B^3q1sAT(Q7+y9a%Uomv{9(6B@Tzd=xd$R+A~vkWY$*q z4c_U#H=o-xIMDiS$+!2lo}So@mTb_K%huWgm=E}Yygk*im!gFj zD8Pm0WcHKG@M_Tl2K%yg%LFpKsKY12a2?(%u z%3lS^+UKT&1XFMJ%0s;&*~dL6K{78sxIFCBr;Poz`M}EDQQ<2aC&ia!Mk@sqWxLj0 zvz5maNm)EZroAIda8IT*kG5QFfPHCQ^g6CS5>(|WN;Nk0g-#CisWtB#1q}|I{_-T+ zzI>;3oN(h4Y=Y>m3`P`U4W|Zrt)+dGIO8TNxT;c z);>&Mt=|_8$a1hUXDt~8M4!_d2JsFwJGW!S9JStFsI_g>1$!*I8rPAf8rLzI^yvp< zYA+^N@wGD@`SB?vD6!UFnx}?wFb);S-OnAAB^e-^d|Da=I7~PX_F*S(t)k8q4_A$p z_f}B8f;X0>iSc@X2ZB>z?`F^uKb%`g?R6)?^?8Y2blm0Gm+_o0ihai6Zlcy92(S?P zmm3yT5WWoNpMbJHVnE9x^cxsHF>(}nwgvJR3-a_D`gZn|J0RL~O;;F;)$?hrxKe%* z@oILQhwIIeo!kxk@_~eKCBj0^iL zsDL`GpSZ^YZ&AC|y?bZBKxxTCcZJ-G>9KpALY}{V=67zFoHJXCUwa^3Ac+7dNTg|E zZ1!G%s(QQlW%8sJS|#vgw?rq7fDx7mkbipLRYThneR4sB-P0XJuWOUgo%R^4ThU1)WJ- zIrwQu@-DA=#1yx1@hfeL`_f~tvZuh%A;&^KsRq4!ZBzEk(&8DR@?TDbr5p-hI%!j; z<1RuT)nYynDDyyGp?Gv_R1S3)V1hSa?K#A8+!^SNIdSMOH)?iXO|hR@-SwjCgzw5wr~qlauRBCLY9Hw^z@qRH65AO* zSHsrr5<1SCW548GvuYG6an5wqzf{i*jl{l&hVxU8lbDSP433(GNi`i9v!bM%lOVJ4 zQ+N^wh&MngNeA&lYka?c{A^u((*34=`z~BA^jG_Af#EH->QNa0`|0(6Sb`k8?w?h^ zytv*6_2&G|MNI0rOMpiTu2skTsly3l^OAsyd*Fi98-^n&4(pAmj#>(GA;$1piw<e@J(0*Q&#dL~bVi^Wj=$c{$949FOCVCgs^v{_-v6-^wu14F_*huq=L0KBglH{ z9`f`K@^s|0*C8pq957vYTCN459d$m=s2Za4wSqCN%0y!k+^q{ad zNggY84Wf$Rg_W&RkwkQujx7(x49@13UJp{B#dkYd&DF0s6IH^yl`bYenbE<#6o7}| z37dcyJ^GliegimwynRpDl&)!x`+fu7{Kp@YQh&+j)E_ndK(TPTki=O_#9(GMnfzb( zuMdP*vgZ@x>n|Xbzu4Gbu5M7iI*uX}n;8^`H6g5D0!3i$IGih}DT|Y&Ge!=^FNtQK z>dv37tHgE{|54KWtnL_G^ird7gx2bKxZH-hBT%wLe@aYK(HsA zZN%B<`O#)c+qeGXXXp7mjlavo9>6(B7#ikF{soHvu6r`K;FIw#Z!Sk}K|8W%8g86t z^YVJP%7r7MkUwX96&z3{nXs4UDr;Y5V`VFTusdmZH4joP_`M4`}Ras>XB1dR< zmx&*zbcf=NJk2*Bow=Na@x0Nd{o_y~mtdzOgSs|+P&LeNGQepKFNT#R_rU*JN?%?o20(yN{6gW|DSl%xOd_^$!4)C!s$ea;)W3mycDWgFUb@WFBBlTanmBW62T5wt6J2 zyDcBr&hIAvOi3s@wDb(gc=m&)L+NVpJNXu{lwk0dE2^m#LqgOs=u&p|y-J(saaA_B z{G04AP!hM}ufx2vMDC5oBPj%E7)eQqe1JQEVKx~m2Fq7mD}uU%l-MnakfpuM!IF*s zBEM^Q&*Mw(#GLoJ+>N)M=U2}^hR-apt4K#H{)-;?>tkV|*I5B6D~L^YEjI^^q{cgD zBI{p1{#196q)eAE2v}Cpg^;lU}hOlIEB3os88kar&u*FzW+XEF{^L6O2>uTav9BJfS; zaX(#;QF)!wm>-iBufwi%q5ttY<$Pr@Z-B|vFjfk=lPu1Zc;BjY+9waQ%jgDLrCCB_KB{h*_orFxR2BN~}>c<($t4s39HKam-Y)ud0BbUGq zwPX)SL*>UXiWmQtO1H8piPoG}+qYyiG4k}MhxEQmQ z7oh*Im1AIo{_wi?&R&Y0IPf|;A2~+-@eShQwhD|9JqG0}!SNu+4v5|g^aPq%P2?Df z*p}Pc!8s-2aoTD#k_-90pW;Ezh%a7N*%du5rdTX(Fs76EGm>z^2MtQZD5)dv^%7D( zRy`J8u_8rZN9-{I3(lx>a{Rf`SOA8C;KqsWB|OExOqfo-F~@$dKxON2ej@t!PwP<0 zVxkO_z^&Gs{xjSM)@7&}a=x&w z0d;(@flys!J2j|-_|oq{R>@RdSm`*=WB0HD*Y+HT^L)paEec=9oY~d*`Vt0#=~k{%^1V8if``bWvq7iPb@=i5 z^78U(iSsfMKWp9fYZR4FA1S=)Ub%5{s_b>dbX%ENZ)9ChauX~hUK@n3l|9p8Gx-)? z3pWZX;iFqoH*~-9LR?sMRA6S)O?oro<`}o%9qp(bN#;ay8XYo5G=()=K};620dXcC z0aSvWm|e1tBkKD-^m-W*82}^XE$L{d41ZP!V_2l=TK3kz-7(;Qf`PRrw}4rL&(Eq| zpy#mlkJaY%Q<2bSN3i6K2+ zVrmo|cC%$xw+A(9l)B9-o3q_#Cv~YZdwEW~Omc#{*&PY_HST9B6gJFu51sj&MKGet zG)QUgo-z~K$2a;ox(jsJF012Qnzv`+lzq~PNf`-i7}~0ZXrpyax)pU-#ebADw@H&5 z&V+oFg>8+&4iIgFur#RFhR&se_9$C#M0i1B`I;b1@Pyhvq1ztxzH<-QzFCrY|7Y`> zMlmqhMPZ@nEy%VV%3mJ6F(=iyUWogMYqCfE(H9yZm9yL7Xn`J6$24+ueao19qoj{u z)Y6nR*H$DA_-=jsVJQ?|=U+FrkZFbu5`v{Lrg^gddAagVLL@JJy$r}@Pi5OBo`-<0 z1v7+DvGKQ-CxZ(2UGkEBy;g_%wHqoJbrIGKqs(?Jnd|~Uq`d@C*>e2*mBKNuCZ@TJ zW?=F2wh;&O4Bkc`qknVc$VG~cz);Sihm6c3lh%8CF#qVS=N6ILlj>?cCk84v!J;&& z{e=b|xmj8Ggl|`oB9j^Gm;*APWhA zM6#o|HZ>=)W|v^kvZv@^(+l_a%LIi|a_*a%g=4RG6K+J@eOphm$PHYK`~^`255f|J z)&3uok{jh3tPY$eQ-E7=L@DbaQs6bIUGrjCGa~EMPwvNeba@CPeZs}&$U+*6^YyXaIKIO7M6e&$SWv7}WwP|CBo)&j}MP z0_c&r?~d_Bhd7b?`#1rK0c@6&uHcGzO&XDrRIl zL zT1`!vyT#o)87K1RZOnLO<1tX$1r9*n_PSQ_#%}p8&$M?pTa;?<$NZ4lJ2AH>>(?v- zfRxbA&U(S*eZrO#?rB207v1AzX^qZW$?PirTzyr;54Ls+m1q~z3Q7&gau!)JyUHxp zXoc#n_;;j_FKhFXK&~+uling>bm>aajQgh>@kcw%p~)-816_P8q|VmG5Vt!d5mR((pHbl zp3neWsAc+bzteJH{x;&KhT)-rsC@ z)N1uz*ax_?itV*^T?R9)v(N%{Nws>!w**zJx@@C3R3CRf4i_pIC(B@#gnXnmdV-%a zqfH#UJ1YLr9}3uLLYakKJf4vnhfj{=U7+NZeRnT)P@FkH*V!+GhU{@TlPX0zi5h}l zVmG~`mHEFfX#eYuZa2Y;2t@wcBT3k*xo}?kiY#1NM8fA88N(19M8|Vn?&|OFXnYMu zjh8qZT@;&++h`g9Z}1d0k_a1_bmk6Dt6cJw!VRfF0rUdEup6?WnDOk{E8Zf`28HlH zH@y!8)N8fh3>zkdg3sgkv-QW^?hkj#9B~ zGGL)K8C13k>-C#ZqD#`%`fn;@jgB%gmN3{=rZh+Ru0Corr-{soyckp;_z>2KKYjYt zu5d9$xrabsP;;oDVNL`~@Xxrbuw4XbAn#!{fz25OYB3_0_Az-Ri?}I}4;b4pyhq$E}`qAg5arKGY?pwvB?a3Z_+Ys9MOhkkIyL-0OCqJ^y{y0za*wn(?BEpo5@ z`G@6I7jZa$@CXFMk9A-QVzCWt?^r0&FVb=8!@qDx{>W2P-IqpV1-NKjRVI63<*~WH ztsU&KQvO_NEHNk#AWGfU2ddXc@8VXU-O;_zkfzL%22#{3@ZBE-CH^AVRb{@SmBjZ; zE7yIqow-6vFMYe(p@U3#XJe{^BGo2j%d_EOyDn+0@Yr25%L)e4MfBg<( zJ~Ql`4gh_R&)~Z|FF9~{(6Gz`vAM=Iykoz!1cY8d+)e-XiujNeB2%7FXX@{{OVc|= zL*^ws{bm^0Xng{lTmqEa|7CSv!WIb`OvnHyoWMB;o(p=}I`=I^xEKViP+*H>+Z&#M z6G4@rN}RYSs9?ifchh$Qrd8hkG0Ab=qI(Pw557pJLgt!`ksIlT@xnZzY2YUefnb%a zfew{D`*4F3UjtfACL25#!e&AH>haEg1m>M=OYu`D^74{4?N$3PmK=8EyVzf6-yZSI zg-y)Xn!B**;s#7j8S<8lbZwK#BKf+>GWEkVg}za+d|-a5k4aL?CP8YrFdNc#&=iUq z(okVUU=*s94sY&CXhVBw;L(Q7*E3ZgU<}~I?0^&laS56v20zVEM9^k-{vq$1{~}8QXc(i6!P+=DkfQu~Q?#}26Jo}7dIn{Wh_!}( z69@&k^xQ@98S6CA)lGuN^qL7@W`chD@kksLVIF>}yip2X!(41&yQhWo6yOA8gp5ZZBP? zp6-w9gcBqx)QI9U55v$?t3yMSKB|Opk_gr+55SwBRm1S)u2}|;M;4ieA)ep@e}3<5 zZX-a3eqr^=wpU|=xx9paxAO7o7x#8Wim{E-Ew21FI}^zUcku$oXgw3~EO-Zz_SsXF zi&S$!yz>CP7-KEtBvsC6c02+z8b7MW(sn_|&^2U=3Zl&wv5GTgoLXTVrm zA6|_CL?GiXgeXV^uFx;pEw`YLkb0}bjM=0bEpP2aJ5;Oc42tzC+sOWc@jnkj|I6rv zDSZ_J!ASQ$$TrBaCEoz)X20|wCub(Pm}E8c>Xw!kCj8Rtws76J@9s{DyqTCh9QZQl zjK~4oBZ$3c^S>9b^%%WRX}!Y*(vEJ_+se1I`#4c+%CRw!HFPzIpGUM zxO}_ia>UmQpt}}J2^EIwurRiF68>bz0o`n2&Po@++Ll6#sOcT{gO;wRYHO&(wae}Kw{L;P>u=}Awk?*s5Vocu5T*w*R;Gm&J@imL1LH6sOhIR#%3V%*`v6_BR!bD zy$x~=f=oCTnd05u2~6EXPXyu^Gzh+zSEImBy#9GSgiQUjA0m-_B$)4D8xZ9Z9INE6 zM1sKGT(prcXmYH?g$fn>wt|mX(%?9>oXaTvh;KkD_pGy;MdVK_n4oR9%<%mkDRPgMO?fTdBWsfhIVd4(kkbtill!*+^zE^Qvue9FdHs>m ze_>N88yEt~*Pp!txu?_8=P2GMH_iuik|j$8k|=(TqquqV=7OxUa(*?-G&4}eSJc|N zbxQOw_xdS2%&5$z#;fiDVO;@lLllma<)23RrLCUSbHyJaFqx;jW@km$KPmJRSD#ri~v z$^fU89x^U2soJfk`Z2*y5bqlEHajswD_^9aMPQXL!=5GdHpKN_AXqXP>L4`y4}%SL ze{_Q!3KkpY4A$l+^aPmTaApm|(sXSk>tH>#_{yB`238O@#v{70JLbCD{Y)vu<9+#6 zp2YiJM~KZyz8@{5MOwL$Yo#@)9&J_6Au=snYqDPM(VA53*BNL^9@Gk5A_1N;8a`w7vniu- zH?>M|1+^v#jC$2fUVOs0s$aOdAxD zsMKD+ltH5nf_4=WiozHNzMv}tCZt*EsgDceUixW~8c6U_aHl^IAWN$ZY1r>df&lE# zjk;}-c9~sIl4+#%jF~_9vmoZ3*8Xz}xP1Pk#A<|xm(Z7i8OO71^%*d*h+yMF}RdZ>LHxE*{gXHubI zQ=Cf)B&HFk2bI|0&Ew$nzV?F*^Atw~pSg+fM2@wCST~{f3gW9J%q6q2x3f$b%_CdG zb4&PC1b%K#@mU-efiX>d?W)LM>-TXl^-e(I>pJ?4_vz%jQug zn47`yeo%Q=R%qaWrx6w@F@$E~XX7U#7!c+Y^(t=!ET79VJ1;cmsTjattgp-3c0h>h zgvKOrVn2S0$^W;Hq`oE?p$IiZ9d<71m#u7P7Mye7B$T1+GsBY)Bw)srnV;W)-3Z`j z%~&Zv@AF+(rpL=x$iEYYZV+$FSFny0W4ElHn?lw8G>}^PT9S1a0-D1DxzM?QgxS5b z^y(AU;n;;xZZ!Z+TJcTtw54QrbxE00NBDB)lttgV1t^laKEQL4F1B4cSO0b(-%MdI z9kE4j;?iT}Yo|^AA8py}M|@xPmyf|B+6sRs1{2fu*;)#lL%z5`6zIT`Jw~uBNl!J3 z7cRaGPFdS7#U0VXU4g_0p*$gxRCn(KINi-25GMP~4qvS<$2$8@x*6$$*!Uo>w;`by zR38nYN)XZnKX7-RKLF1bSb}e-SZvP^*=!u!Xjr(>w-w2#5?)_fJ-;#H4ZZIHngI(Tv^-b4j|@s_7VQwyxl;ijA&q{{@EVC+ z{ax#@nF{hHzJoxXkB>H?4@yGb`WAJFi3gaB;I~{bAK8h^MR2mQ=D>dG(qR*oVMKYM{BdPlX=Di6L+`S zfQ2mOlpUY_B~VT_fN^4X-OAC*dd~5t{u9%n}L&?$Wt4DT0ZPH@Q&~ptE2lP zhHWXI_)rm9NpMT7tB;A4I_7HXUmylwOhGa$ds0nK4~48LeRw(8-%k|AL(q3$5Qc#U zbTtGuA_~Ol?m#FvK4t#lZlAIVbN7AsnR+p>XS+a8nG>nIIzX$>`%D)2PC9Q4H|Y8< zx+wo%zwR}KoP>pr^wSqkD*HR%TJz_S+jR%oKd~3YPEy>P^Sx*IZ@9(|f1$fPPj*)L zSoA4M!*E1N3#00w0gB%(K>6O&@R!VLdqg!SAxa3E;VknbAdZ3`BYin~~smuMz=?^&`~#GnEfS9;9s=i76? zH-_hPODlD^)zJw>gKW>g`VN$wYHPTsOiJ=-5?*^Wg2Ewa`i)s%3HZ^(UV8UB8EX6? z?X(vcZsFk~K3uS7yOd{h8OsJNzs}&F2yJs5lqR;+H6aal&s2d1>&0K9FlS_7Lr znzD#nQ7-xda@@s_F5a2R=odr9^l!Y{e6%$mFxM3-I^6h_MRpD0Wi|g2SH88&w&V|- zGvL|qv6;VPiiAocJ3x;|fCENMi3H@l@35#HZ%#`v2^95rSO6_#_;z>=b@knbTUP9s zCuq-oz-$f|j3@ModuvZ(zmN!#gG70bh;LBSavYK9ip20P%0EQ+M*!mM z|1tI6@l=QJ|M=_JWgffiLn1OlX68YQtdo%yIjE4mIiegQkutK&=#ZT~Qxpdwdnb;4 zWbgC6dw+hP&->?b9uNPX@w%`3x}Mi_XbD7wiXeJf;)`DbkJuL}2caOI%N4CAiI9)F zZi14l5E!ERaejy@k7xKn>v@g`kuq>|*Gd}blnc6#)*g4-22KIBBs11; z&C$|SmGmaRsa95r$PoB7v>6Z*O<^q-whUEtwbU<9@#wKMvFm zC!g#7FzKN*%+umtCQGAGO?zSId>;~|d3rfUJX(RdU7gjcx z?a&|ZskPViOctn3|2e-+TD9z~VrAEfUdjhO*wB{{9jF)Du>JPf%5nLju5*)5c(+fp z>-_PAOaYJPWLLoBg}Z{>X}$%b((dXC2xcrM*;udp%aj z`%MWL{O?K~slwp&-H$C;DO2;{GOqzNPLQ~K`K05o-!Us%AL(LSA+98ank>P&>5HCN z-E>yWWyL?XM!mr@q%^x3*JGB;#B!Cgo3x>sF5vxPHU?G16b)p54!m#Vw<5zjgPERWP>K}-$V7LzNS6_VZ zVr=HJaP#2KL#>eA=cmjut#`RZF*KUb9$-X%PSA~XV@}vM#_OFi9nWijm(5R{BShBv z660I_JtM{p>>19~YbfZg`S<_yr9{bGk&*$ENVtaSbTt)!YFN&z1P#p+`bytBPAp+{ z&)<;8=xQatm!@hX>#EFAD6M(pIQ75dMTep`0IQ<9P5YEG*qpT4sAj%!+RG=nr(*=; zp32MAleJV6Hlz}bo?=)3xdK~SSRC@eYw0m46eT*ZVQmn;4QdhoHhOnVJm=mdBRn_* zyFS7HiN)65@#^-(TwSJP6ASNynmR%68AMLg_1~@h&~wpTG3YpiX0{)&-a*dD`b2X- z-ujF>FjOXSw-CQ^PRoOwW9>)y#{v{zIYo1SIp;lA;RPoG@3Z`Kl`v=U3k~&mcHZQq zqmqumNJJQ99Da#ub9*ejy?j3_&sl=DugGoj~{wJ|hc9>!0W`OmoZ(Nm4R)bxk8XV5h{H-I|$VVLEPX2%+5W||b%QmD2b1@_WTeO2|FR7uKSY`XJpe-UeV+&*j=u?S&2nM{ zWY^pb+rL@IgeRKvov@pA^LO*aL|!ByDf9+ZEVCyJ1>3I!Cl6lGvM^xyKHvQsG3&HV zCw$udAi%8elFWPOR9!i}EyO=**X$^y-+N!h)MQ6krhW+TipZ%Z-&d&a?D@p1DUDfk zN?&4KnXaBZ!b$F05E7IE8PH98B(+4DKj>`jxEk_imaZXh9_Y9zZNLnEv;1Po5Jr>g4u-tSN`KJJ5}55DGz6 z?rF;-77zFYvFM>bPtq*f%5hl<8qq(96KQ`(8Vo4^q^vO%yI#KYUM{f8^8u!)_*Glt zRjLUGwslwBf^qjr^_#45Dt=CEDw)Vl+tRd+<~z;X{t8mFf7N5CZnJY{2iKGTJZ7NA z4vn?qX;MAL4qYmc*JCw>5D{eL_gS+cLv`_FX2vRun~VQ@8O^0V{fE-G(^{6AMOI5d1V5Q~a=UU>j2t!DusIO7lq-=LHPh1Dd>q?3fJ6~Us)O*~e0$jl| zu=ldN47}zVSk#||zf-(>b*XYOZNBd3%XfVolHBer(J8TzC2U3!lIUFtVQaYv1<6G` zG4>Hq$nn%i0`d5Z{}@?BLdOLu=@$_#7Vmx)ov4!gv0+TvwEv2scV%!EZyn6vokO9t zA$|m_eH!(XbN^;nJpPN9QsYOF=w_h24<=-WHck3Y2d7d#xi?x`y$;5B4R5PV%9%3s zt{b;BF`BpBj#;gfyrQO0N&6hYM)#<_>)5si=v%kE9&13$09^@mDiAEMc zOXUav)Dps@N{J#vUpGnc7o+puGiq@O%6N~vfg;`(4Q6PGTp$qgua(W}RDaX>@+Hq1 zH2bkBHc23&UIxg45D`)<6TdiG8^rIBxLOz=g#8I+izmqGg@Y?`wK>>FwT)5*_n%Rry$Wcu|ukQ((b{ z@1+hclyQ}tp{(Hw?5ev^SMMs&dD=TT%qvH>-EWp|WWj(RSO=N(jWgcpu(s89LsaHy z7_oT@Dw%Z<>C@ZOaY#pU+~;K|wvx1{FlA zDqfj%Fqhb^29;U7eLvX2{Imw=aWhJ()z4>C42&?EG^Bdx)QjGB2bb%fgY%w$CE~7# zf%m)}iifF>B$>NyjH_$G$79LHG{`TE?X~8^j{o6Bb;U_0K)gCYulmEgmcFZt@ot09 zaqRHF%ZWj2nBlF-=c^S!#uLwHtdinV?UXO6#aQ|ys9Zca!OH$ALl|E7}iN%WA42@{qZ z*4iFZe#7kS(|)oWLS`Bw*IUeMh7^zXs5m~^6~YXMspxU%k|85QCVkP(KazvUu zr<;PCmF4C4Y7-MaJ|r(98km`xL2#>U154@9gbSK)TBw%m`MK_KGeW5`imkIeB4xIy zqUVd1?<8eqwwPl5BNtwqc$)tp9Dl@R0>g2qfYW!x;IRjd_|C=3TL;fRiBauf-jw&OFTx2kPjvT`3+hTL2tZhaoebJkRS%W1Cyw2IFY`&X2xrQtW6NZd?@ z=i@puC+mHQU79p|P$|>X-L__4t-3i`$jsba(M^H-UtWqDFvUV=JlGSzT9K4Rue`@5 zbL0v?FjB1w*RR4BiJFhil?U}OjGFzxr%P?AfsK{+4gV$Oa>f~&cK7o zTVx|3cx{dI`5*cyuqe9-@x~7Ixx8hAwvdUMH1XI39Fj?jT@-VeCr*d79>Z;Gft{nM{;@iH7;jJt0>P~N<*CWc* zL#hCy$l!CRoJg1CA4gj0YeMor-nUOoSU$AdYM;-Y--~UZ;~+0RA~vhh>9n1C_D2;8 zLchFEJRlNV%R$@h6S<&so1S3K=g`g;paA}F(EdPTKO3?VWp_1;ZOq&2Kou03Qt>YR zn4q$h;FOdSpba?a|MKO_&gdDh_ph>pX&^vN@K@nga|3YDI6#{`wI8S>Go@r+N?Yq8 z39&lw9b~xH$E%6*z&Pq?0Icv9oMbhvh6~B6BqDZh2Y@-o<`%NK2_W|7s~dLgX?kN=K08J3G=YQdw?H;_OHYX(2?&Cd)u&Q9bT1oZ9?PWv}T<%!H6mvtCE zaQ*%*`;TLrQT*ux#MJ$`4}bO__s;j`k`nwN60zxl=8eWK_`H9PExuAwy*}Mc0$zDP zN?fO#PL$wqv@j~STpU2xu2SPS&d9vy&q9!in7*%NtJH?}%)gLj@dYpYst}KP#*3BG z9hl$d?XM2IAyQ17a1OND{Nx%#2*FCt&*DxM6AL+`S6+$?S4X|dTJt48i(q}L{=q2* zep%C5EVl0-z2-l!G-Ecv;F(DtO^RBy^jhC>DflXua=@kdLF8w&XPr(a-&ByX4pJ6? zFOq=$q*5&s{fhEN;Zq8DYZy5-G!t0b!^3x`WeK@Gt5?-r(-(()pf}*vc3=a|%tIM~ z@J=ZZLA_ox_p%vSh&k%K?^A`tWCUMCTvf(;kWNn|DL1;1+ly(t60yO$Mc0s(godr2 zqwW6w{@3kue$O(sOhl!7INYG>M9WIp4SgE=yN@<)m!s0yOUV za&f-NGmH>sd@A(Mt3*vCNKHV4hbQ6LvuE>7`wN_!kU}QIl?np+{wExcR}6s!Du%*r z-gYY(QG}bcmoMBQ*Hi&W8j6_CkeRSOZdbwiwLIghwb?pbX=IV`334b{U6q(0>sWRF;CPCr1&nW%WL2YcsdnTVR_1R%I;S3Co#Z!Vy75@))A!}#p~AUd zKX0f!-@6m4OHVsZGxJE{Db*6|z%%J~;2cb{fheB2$RI6^aO&q)ZO&ziQfFUzHBtzdD?a<7Wcf-nn$p>m&^YwI0@C$|!|*tOo3WSp59b=vy<$xbz2 zFFJ=4bWRMIOv;Tz&iB#R_ii`;!u!ddH@6yY&cnHJ#&vX=<0p9XcPCIV+aCNbw0{fY z09x1H_rX*7XrJPgSlE*g8@#k9hs3ri{&B8IbTy>#Go93PP`QE!UD!8Z+^>ZQV8?)X zW9PmF-S6qQ;p+F%ds%X4Fjzou?{kv9E_!kmzP65Z!#_sY;cl8sF~X%~>`^Bi@>70u zL~(KP34iYAUBE*XMB0^4l#5HJ+%C2TT?ZqSF{t=q!5}*gsFo%j(WGJgsSb+I02M9$ z&_`??xg2cT=M9`GK*dP>0(PzsD_t|}D|4zYMZTYUgl^8qgJVlJ(um;G2&eAi%D z6PTy~4UPRho8BC`iXGKWB*pI`>6ap{3fcTw-|ebX$FBYu)bRZ;=;TTFuNlxEkhKx* z+B`6)`{|9ffz6P1l{$fxT;J<&xD!`019RUW9RWlRA$jys)MA`t8(czMd?q7see^zB zviE3ZJv#wAbpv^H^~N%~=W(J%-}h$n4auKZ{XU<0WVK+e%t@E=8H_ib;C!wS78Y)! z;PwyjSX&&93_~)1JOAhvajgkkpi4S32MFE;gc^O;&%41MuhtA{G?weuDQ<>OgjJlQ zo4E_glkY2Gl>46hHM~wK5siKd6c#2Za*TXCr;RbI_QfGc#+QLwN+!|4*-6`M3n>da z1Jc_Rl6QR!WSPdt%≫Gv1=Bxp)|esKB&ZG^3>!ruoRkT#fQ?``Zl>1 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%0DTNG3rxw*tl?Q_zP?kI~*auuOI$M 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⪚?u6JMpx_A?B5y0yaPlI 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
    oj+0CuwPlPMCpkO8WNz&D9oZ_Avs!3#xXY_xZE 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 Date: Thu, 20 Nov 2025 17:45:07 +0530 Subject: [PATCH 64/67] fixx --- Constants/helper_routines.py | 6 +++++- GA/__init__.py | 3 ++- stages.X3qVuXFj_Nynac.png | Bin 1331150 -> 0 bytes 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 stages.X3qVuXFj_Nynac.png diff --git a/Constants/helper_routines.py b/Constants/helper_routines.py index 7b8a685..e5ac838 100644 --- a/Constants/helper_routines.py +++ b/Constants/helper_routines.py @@ -32,7 +32,11 @@ def update_matrix_for_best( return teacher_availability_matrix -def initialize_teacher_availability(teacher_list, num_days=5, num_slots=7): +def initialize_teacher_availability( + teacher_list, + num_days=5, + num_slots=7 +): return { teacher: [[True] * num_slots for _ in range(num_days)] for teacher in teacher_list diff --git a/GA/__init__.py b/GA/__init__.py index b9fc587..d4633bd 100644 --- a/GA/__init__.py +++ b/GA/__init__.py @@ -255,5 +255,6 @@ def run_timetable_generation( "B": {"TCS-503": "BJ10"} } ) + from icecream import ic - ic(best_tt, final_teacher, final_lab) \ No newline at end of file + ic(best_tt, final_teacher, final_lab) diff --git a/stages.X3qVuXFj_Nynac.png b/stages.X3qVuXFj_Nynac.png deleted file mode 100644 index 8f8f5b3baf8c40e4cb0c0088bbb5964b76392cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1331150 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

  • 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

    Ziu7Ko1?8;r+Vw96gbQ_jO(tH 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

    U6D1F`69$Cd{Y#T7hhR81v!uN%+TB2#E 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≫Gv1=Bxp)|esKB&ZG^3>!ruoRkT#fQ?``Zl>1 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%0DTNG3rxw*tl?Q_zP?kI~*auuOI$M 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⪚?u6JMpx_A?B5y0yaPlI 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
    oj+0CuwPlPMCpkO8WNz&D9oZ_Avs!3#xXY_xZE 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 Date: Wed, 28 Jan 2026 14:27:13 +0530 Subject: [PATCH 65/67] fix --- backend/.env.example | 18 + backend/.gitignore | 47 +++ backend/algorithm/__init__.py | 6 + backend/algorithm/apps.py | 6 + backend/algorithm/chromosome.py | 354 ++++++++++++++++++ backend/algorithm/constants.py | 30 ++ backend/algorithm/engine.py | 229 +++++++++++ backend/algorithm/fitness.py | 186 +++++++++ backend/algorithm/helpers.py | 46 +++ backend/algorithm/mutation.py | 39 ++ backend/algorithm/selection.py | 97 +++++ backend/api/__init__.py | 0 backend/api/apps.py | 6 + backend/api/serializers.py | 49 +++ backend/api/urls.py | 12 + backend/api/views.py | 73 ++++ backend/core/__init__.py | 0 backend/core/admin.py | 103 +++++ backend/core/apps.py | 6 + backend/core/management/__init__.py | 0 backend/core/management/commands/__init__.py | 0 .../management/commands/load_sample_data.py | 229 +++++++++++ backend/core/middleware.py | 39 ++ backend/core/migrations/0001_initial.py | 208 ++++++++++ backend/core/migrations/__init__.py | 0 backend/core/models.py | 248 ++++++++++++ backend/core/permissions.py | 52 +++ backend/core/serializers.py | 143 +++++++ backend/core/urls.py | 22 ++ backend/core/views.py | 348 +++++++++++++++++ backend/manage.py | 22 ++ backend/requirements.txt | 11 + backend/timetable_backend/__init__.py | 5 + backend/timetable_backend/celery.py | 11 + backend/timetable_backend/settings.py | 168 +++++++++ backend/timetable_backend/urls.py | 20 + backend/timetable_backend/wsgi.py | 10 + 37 files changed, 2843 insertions(+) create mode 100644 backend/.env.example create mode 100644 backend/.gitignore create mode 100644 backend/algorithm/__init__.py create mode 100644 backend/algorithm/apps.py create mode 100644 backend/algorithm/chromosome.py create mode 100644 backend/algorithm/constants.py create mode 100644 backend/algorithm/engine.py create mode 100644 backend/algorithm/fitness.py create mode 100644 backend/algorithm/helpers.py create mode 100644 backend/algorithm/mutation.py create mode 100644 backend/algorithm/selection.py create mode 100644 backend/api/__init__.py create mode 100644 backend/api/apps.py create mode 100644 backend/api/serializers.py create mode 100644 backend/api/urls.py create mode 100644 backend/api/views.py create mode 100644 backend/core/__init__.py create mode 100644 backend/core/admin.py create mode 100644 backend/core/apps.py create mode 100644 backend/core/management/__init__.py create mode 100644 backend/core/management/commands/__init__.py create mode 100644 backend/core/management/commands/load_sample_data.py create mode 100644 backend/core/middleware.py create mode 100644 backend/core/migrations/0001_initial.py create mode 100644 backend/core/migrations/__init__.py create mode 100644 backend/core/models.py create mode 100644 backend/core/permissions.py create mode 100644 backend/core/serializers.py create mode 100644 backend/core/urls.py create mode 100644 backend/core/views.py create mode 100644 backend/manage.py create mode 100644 backend/requirements.txt create mode 100644 backend/timetable_backend/__init__.py create mode 100644 backend/timetable_backend/celery.py create mode 100644 backend/timetable_backend/settings.py create mode 100644 backend/timetable_backend/urls.py create mode 100644 backend/timetable_backend/wsgi.py diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..de8c11e --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,18 @@ +# Django Settings +SECRET_KEY=your-secret-key-here +DEBUG=True +ALLOWED_HOSTS=localhost,127.0.0.1 + +# Database +DB_NAME=timetable_db +DB_USER=postgres +DB_PASSWORD=postgres +DB_HOST=localhost +DB_PORT=5432 + +# CORS +CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173 + +# Celery +CELERY_BROKER_URL=redis://localhost:6379/0 +CELERY_RESULT_BACKEND=redis://localhost:6379/0 diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..d255404 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,47 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Django +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal +/media +/staticfiles + +# Environment +.env +.venv + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db diff --git a/backend/algorithm/__init__.py b/backend/algorithm/__init__.py new file mode 100644 index 0000000..f6397b7 --- /dev/null +++ b/backend/algorithm/__init__.py @@ -0,0 +1,6 @@ +""" +Algorithm module for timetable generation using Genetic Algorithm. +""" +from algorithm.engine import TimetableEngine, run_timetable_generation + +__all__ = ['TimetableEngine', 'run_timetable_generation'] diff --git a/backend/algorithm/apps.py b/backend/algorithm/apps.py new file mode 100644 index 0000000..b5388c0 --- /dev/null +++ b/backend/algorithm/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AlgorithmConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'algorithm' diff --git a/backend/algorithm/chromosome.py b/backend/algorithm/chromosome.py new file mode 100644 index 0000000..8af691e --- /dev/null +++ b/backend/algorithm/chromosome.py @@ -0,0 +1,354 @@ +import copy +import random +from math import ceil + +from algorithm.constants import Defaults + + +class TimeTableGeneration: + def __init__( + self, + teacher_subject_mapping: dict, + total_sections: dict, + total_classrooms: dict, + total_labs: dict, + teacher_preferences: dict, + teacher_weekly_workload: dict, + special_subjects: dict, + labs: dict, + subject_quota_limits: dict, + teacher_duty_days: dict, + teacher_availability_matrix: dict, + lab_availability_matrix: dict, + time_slots: dict, + fixed_teacher_assignment: dict = None, + ): + self.sections_manager = total_sections + self.classrooms_manager = total_classrooms + self.lab_capacity_manager = total_labs + defaults = Defaults() + self.subject_teacher_mapping = teacher_subject_mapping + self.subject_quota_limits = subject_quota_limits + self.lab_subject_list = labs + self.special_subject_list = special_subjects + self.teacher_availability_preferences = teacher_preferences + self.available_time_slots = time_slots + self.teacher_duty_days = teacher_duty_days + self.weekly_workload = teacher_weekly_workload + self.teacher_availability_matrix = teacher_availability_matrix + self.initial_lab_availability_matrix = copy.deepcopy(lab_availability_matrix) + self.lab_availability_matrix = copy.deepcopy(self.initial_lab_availability_matrix) + self.fixed_teacher_assignment = fixed_teacher_assignment or {} + # Initialize working days + defaults = Defaults() + self.weekdays = defaults.working_days + self._map_sections_to_classrooms() + + def _map_sections_to_classrooms(self) -> dict: + sorted_classrooms = sorted( + self.classrooms_manager.items(), + key = lambda item: item[1], + reverse=True + ) + sorted_sections = sorted( + self.sections_manager.items(), + key = lambda item: item[1], + reverse = True + ) + section_classroom_map = {} + + for section, student_count in sorted_sections: + for index, (classroom, capacity) in enumerate(sorted_classrooms): + if capacity >= student_count: + section_classroom_map[section] = classroom + sorted_classrooms.pop(index) + break + + self.section_to_classroom_map = section_classroom_map + return section_classroom_map + + + def _initialize_teacher_workload_tracker(self) -> dict: + return { + teacher: 0 + for teacher in self.weekly_workload + } + + + def _get_available_subjects(self, section: str, subject_usage_tracker: dict) -> list: + return [ + subject + for subject in self.subject_teacher_mapping + if subject_usage_tracker[section][subject] < self.subject_quota_limits.get(subject, 0) + ] + + + def _assign_subject_and_teacher( + self, + section: str, + slot_index: int, + subjects_scheduled_today: set, + assigned_classroom: str, + subject_usage_tracker: dict, + teacher_workload_tracker: dict, + teacher_availability_matrix: dict, + day_index: int, + ) -> tuple: + available_subjects = self._get_available_subjects(section, subject_usage_tracker) + random.shuffle(available_subjects) + assigned_teacher = None + selected_subject = None + assigned_room = assigned_classroom + + for subject in available_subjects: + if (subject in self.lab_subject_list or subject == "Placement_Class") and slot_index not in [1, 3, 5]: + continue + if subject not in subjects_scheduled_today: + # First, check for a fixed teacher assignment for (section, subject) + fixed_teacher = self.fixed_teacher_assignment.get(section, {}).get(subject) + if fixed_teacher: + if ( + fixed_teacher in teacher_availability_matrix and + len(teacher_availability_matrix[fixed_teacher]) > day_index and + len(teacher_availability_matrix[fixed_teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[fixed_teacher][day_index][slot_index - 1] + ): + assigned_teacher = fixed_teacher + teacher_workload_tracker[fixed_teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + break + + # Otherwise, assign normally from the available pool + teachers = self.subject_teacher_mapping[subject] + preferred_teachers = [ + t for t in teachers if self.teacher_availability_preferences.get(t, []) + ] + for teacher in sorted(preferred_teachers, key=lambda t: teacher_workload_tracker[t]): + if ( + teacher in teacher_availability_matrix and + len(teacher_availability_matrix[teacher]) > day_index and + len(teacher_availability_matrix[teacher][day_index]) > (slot_index - 1) and + teacher_availability_matrix[teacher][day_index][slot_index - 1] + ): + assigned_teacher = teacher + teacher_workload_tracker[teacher] += 1 + selected_subject = subject + subjects_scheduled_today.add(subject) + break + + if assigned_teacher: + break + + if not assigned_teacher: + selected_subject = "Library" + assigned_teacher = "None" + return assigned_teacher, selected_subject, assigned_room + + + def _allocate_lab( + self, + teacher: str, + subject: str, + day_index: int, + slot_index: int, + section_strength: int, + ) -> tuple: + group1_size = ceil(section_strength / 2) + group2_size = section_strength - group1_size + labs_list = list(self.lab_availability_matrix.keys()) + + for i in range(len(labs_list)): + lab1 = labs_list[i] + if ( + self.lab_availability_matrix[lab1][day_index][slot_index - 1] + and self.lab_availability_matrix[lab1][day_index][slot_index] + and self.lab_capacity_manager.get(lab1, 0) >= group1_size + ): + for j in range(i + 1, len(labs_list)): + lab2 = labs_list[j] + if ( + self.lab_availability_matrix[lab2][day_index][slot_index - 1] + and self.lab_availability_matrix[lab2][day_index][slot_index] + and self.lab_capacity_manager.get(lab2, 0) >= group2_size + ): + self.lab_availability_matrix[lab1][day_index][ + slot_index - 1 + ] = False + self.lab_availability_matrix[lab1][day_index][ + slot_index + ] = False + self.lab_availability_matrix[lab2][day_index][ + slot_index - 1 + ] = False + self.lab_availability_matrix[lab2][day_index][ + slot_index + ] = False + entries = [ + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index], + "group": 1, + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab1, + "time_slot": self.available_time_slots[slot_index + 1], + "group": 1, + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index], + "group": 2, + }, + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": lab2, + "time_slot": self.available_time_slots[slot_index + 1], + "group": 2, + }, + ] + return entries, slot_index + 2 + + merged_entry = { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": "merged_lab", + "time_slot": self.available_time_slots[slot_index], + "group": "merged", + "flagged": False, + } + return [merged_entry], slot_index + 1 + + + def _generate_section_schedule( + self, + section: str, + half_day_sections: list, + subject_usage_tracker: dict, + teacher_workload_tracker: dict, + teacher_availability_matrix: dict, + day_index: int, + section_strength: int, + ) -> tuple: + schedule = [] + subjects_scheduled = set() + assigned_classroom = self.section_to_classroom_map[section] + total_slots = 4 if section in half_day_sections else 7 + slot_index = 1 + + while slot_index <= total_slots: + teacher, subject, room = self._assign_subject_and_teacher( + section, + slot_index, + subjects_scheduled, + assigned_classroom, + subject_usage_tracker, + teacher_workload_tracker, + teacher_availability_matrix, + day_index, + ) + time_slot = self.available_time_slots[slot_index] + if subject in self.lab_subject_list or subject == "Placement_Class": + if slot_index <= total_slots - 1: + lab_entries, slot_index = self._allocate_lab( + teacher, subject, day_index, slot_index, section_strength + ) + schedule.extend(lab_entries) + subject_usage_tracker[section][subject] += len(lab_entries) + else: + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": assigned_classroom, + "time_slot": time_slot, + "group": "fallback", + } + ) + subject_usage_tracker[section][subject] += 1 + slot_index += 1 + else: + schedule.append( + { + "teacher_id": teacher, + "subject_id": subject, + "classroom_id": room, + "time_slot": time_slot, + "group": "all", + } + ) + if subject != "Library": + subject_usage_tracker[section][subject] += 1 + slot_index += 1 + + return schedule, teacher_availability_matrix + + + def generate_daily_schedule( + self, + sections: list, + half_day_sections: list, + subject_usage_tracker: dict, + day_index: int, + ) -> tuple: + daily_schedule = {} + teacher_workload = self._initialize_teacher_workload_tracker() + for section in sections: + section_strength = self.sections_manager[section] + ( + schedule, + self.teacher_availability_matrix, + ) = self._generate_section_schedule( + section, + half_day_sections, + subject_usage_tracker, + teacher_workload, + self.teacher_availability_matrix, + day_index, + section_strength, + ) + daily_schedule[section] = schedule + return daily_schedule, subject_usage_tracker, self.teacher_availability_matrix + + + def _generate_weekly_schedule(self) -> tuple: + weekly_schedule = {} + subject_usage = { + section: {subject: 0 for subject in self.subject_teacher_mapping.keys()} + for section in self.sections_manager.keys() + } + sections = list(self.sections_manager.keys()) + for day_index, weekday in enumerate(self.weekdays): + random.shuffle(sections) + half_day = sections[: len(sections) // 2] + ( + daily_sched, + subject_usage, + self.teacher_availability_matrix, + ) = self.generate_daily_schedule( + sections, half_day, subject_usage, day_index + ) + weekly_schedule[weekday] = daily_sched + return weekly_schedule, subject_usage, self.teacher_availability_matrix + + + def create_timetable(self, num_weeks: int) -> tuple: + timetable = {} + for week in range(1, num_weeks + 1): + self.lab_availability_matrix = copy.deepcopy( + self.initial_lab_availability_matrix + ) + ( + weekly_schedule, + _, + self.teacher_availability_matrix, + ) = self._generate_weekly_schedule() + timetable[f"Week {week}"] = weekly_schedule + return timetable, self.teacher_availability_matrix, self.lab_availability_matrix diff --git a/backend/algorithm/constants.py b/backend/algorithm/constants.py new file mode 100644 index 0000000..a7afea5 --- /dev/null +++ b/backend/algorithm/constants.py @@ -0,0 +1,30 @@ +""" +Constants for the timetable generation algorithm. +""" + + +class Defaults: + """Default configuration values.""" + def __init__(self, config=None): + config = config or {} + self.room_capacity = config.get('room_capacity', 60) + self.working_days = config.get('working_days', [ + "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" + ]) + self.starting_section_fitness = config.get('starting_section_fitness', 1000) + self.max_class_capacity = config.get('max_class_capacity', 250) + self.initial_no_of_chromosomes = config.get('initial_no_of_chromosomes', 10) + self.total_no_of_generations = config.get('total_no_of_generations', 50) + self.class_strength = config.get('class_strength', 50) + + +class PenaltyConstants: + """Penalty values for constraint violations.""" + def __init__(self, config=None): + config = config or {} + self.PENALTY_TEACHER_DOUBLE_BOOKED = config.get('teacher_double_booked', 30) + self.PENALTY_CLASSROOM_DOUBLE_BOOKED = config.get('classroom_double_booked', 20) + self.PENALTY_OVER_CAPACITY = config.get('over_capacity', 25) + self.PENALTY_UN_PREFERRED_SLOT = config.get('un_preferred_slot', 5) + self.PENALTY_OVERLOAD_TEACHER = config.get('overload_teacher', 10) + self.PENALTY_NON_DUTY_DAY = config.get('non_duty_day', 40) diff --git a/backend/algorithm/engine.py b/backend/algorithm/engine.py new file mode 100644 index 0000000..a15bdf8 --- /dev/null +++ b/backend/algorithm/engine.py @@ -0,0 +1,229 @@ +""" +Timetable generation engine using Genetic Algorithm. +""" +import copy +from dataclasses import dataclass +from typing import Dict, List, Tuple, Optional + +from algorithm.chromosome import TimeTableGeneration +from algorithm.fitness import TimetableFitnessEvaluator +from algorithm.mutation import TimeTableCrossOver, TimeTableMutation +from algorithm.selection import TimeTableSelection +from algorithm.helpers import ( + initialize_teacher_availability, + update_matrix_for_best, + update_teacher_availability_matrix, +) +from algorithm.constants import Defaults + + +@dataclass +class TimetableConfig: + """Configuration for timetable generation.""" + teacher_subject_mapping: dict + total_sections: dict + total_classrooms: dict + total_labs: dict + teacher_preferences: dict + teacher_weekly_workload: dict + special_subjects: dict + labs: dict + subject_quota_limits: dict + teacher_duty_days: dict + teacher_availability_matrix: dict + lab_availability_matrix: dict + total_generations: int + time_slots: dict + day_map: dict + time_slot_map: dict + prev_selected: dict = None + prev_mutated: list = None + fixed_teacher_assignment: dict = None + working_days: list = None + + +class TimetableEngine: + """Main engine for generating timetables using Genetic Algorithm.""" + + def __init__(self, config: TimetableConfig): + self.config = config + self.teacher_availability = copy.deepcopy(config.teacher_availability_matrix) + self.lab_availability = copy.deepcopy(config.lab_availability_matrix) + + # Set working days + if config.working_days: + from algorithm.constants import Defaults + defaults = Defaults({'working_days': config.working_days}) + self.working_days = defaults.working_days + else: + defaults = Defaults() + self.working_days = defaults.working_days + + def _update_lab_availability(self, best_timetable): + """Update lab availability based on best timetable.""" + updated_lab = copy.deepcopy(self.config.lab_availability_matrix) + for weekday, daily_schedule in best_timetable.items(): + day_index = self.config.day_map.get(weekday) + if day_index is None: + continue + for allocations in daily_schedule.values(): + for alloc in allocations: + lab = alloc.get("classroom_id") + ts_index = self.config.time_slot_map.get(alloc.get("time_slot")) + if lab in updated_lab and ts_index is not None: + if (day_index < len(updated_lab[lab]) and + ts_index - 1 < len(updated_lab[lab][day_index])): + updated_lab[lab][day_index][ts_index - 1] = False + return updated_lab + + def _generate_timetable(self, teacher_matrix): + """Generate a single generation of timetables.""" + tg = TimeTableGeneration( + teacher_subject_mapping=self.config.teacher_subject_mapping, + total_sections=self.config.total_sections, + total_classrooms=self.config.total_classrooms, + total_labs=self.config.total_labs, + teacher_preferences=self.config.teacher_preferences, + teacher_weekly_workload=self.config.teacher_weekly_workload, + special_subjects=self.config.special_subjects, + labs=self.config.labs, + subject_quota_limits=self.config.subject_quota_limits, + teacher_duty_days=self.config.teacher_duty_days, + teacher_availability_matrix=teacher_matrix, + lab_availability_matrix=self.lab_availability, + time_slots=self.config.time_slots, + fixed_teacher_assignment=self.config.fixed_teacher_assignment or {} + ) + + # Generate multiple weeks (chromosomes) + num_weeks = self.config.total_generations if self.config.total_generations < 10 else 10 + timetable, updated_teacher, _ = tg.create_timetable(num_weeks) + + # Evaluate fitness + fitness = TimetableFitnessEvaluator( + timetable=timetable, + all_sections=list(tg.sections_manager.keys()), + subject_teacher_mapping=tg.subject_teacher_mapping, + available_classrooms=list(tg.classrooms_manager.keys()), + available_labs=list(tg.lab_capacity_manager.keys()), + classroom_capacity=tg.classrooms_manager, + section_student_strength=tg.sections_manager, + subject_quota_data=tg.subject_quota_limits, + teacher_time_preferences=tg.teacher_availability_preferences, + teacher_daily_workload=tg.weekly_workload, + time_slots=self.config.time_slots, + ).evaluate_timetable_fitness() + + # Selection + selected = TimeTableSelection().select_chromosomes(fitness[1]) + if self.config.prev_selected: + selected.update(self.config.prev_selected) + + # Crossover + crossover = TimeTableCrossOver() + crossover_chromosomes = [] + selected_keys = list(selected.keys()) + for i in range(0, len(selected_keys), 2): + if i + 1 < len(selected_keys): + c1, c2 = crossover.perform_crossover( + timetable[selected_keys[i]], timetable[selected_keys[i + 1]] + ) + crossover_chromosomes.extend([c1, c2]) + + # Mutation + mutated = [TimeTableMutation().mutate_schedule_for_week(ch) for ch in crossover_chromosomes] + if self.config.prev_mutated: + mutated.extend(self.config.prev_mutated) + + # Find best chromosome + best_chromosome, best_score = None, -1 + for key, score in selected.items(): + score = int(score) + if score > best_score and key in timetable: + best_score = score + best_chromosome = timetable[key] + + if best_chromosome: + updated_teacher = update_teacher_availability_matrix(teacher_matrix, best_chromosome) + + return best_chromosome, updated_teacher, selected, mutated, best_score + + def run(self): + """Run the genetic algorithm to generate optimal timetable.""" + initial_teacher = copy.deepcopy(self.teacher_availability) + updated_teacher = copy.deepcopy(initial_teacher) + best_chromosome = None + best_score = -1 + + self.config.prev_selected = None + self.config.prev_mutated = None + + # Run for specified number of generations + for generation in range(self.config.total_generations): + teacher_copy = copy.deepcopy(initial_teacher) + best, updated_teacher, selected, mutated, score = self._generate_timetable(teacher_copy) + + if best and score > best_score: + best_chromosome = best + best_score = score + + self.config.prev_selected = selected + self.config.prev_mutated = mutated + + # Update teacher availability for final best timetable + if best_chromosome: + updated_teacher = update_matrix_for_best( + best_chromosome, + updated_teacher, + self.config.day_map, + self.config.time_slot_map, + ) + + updated_lab = self._update_lab_availability(best_chromosome) if best_chromosome else self.lab_availability + + return best_chromosome, updated_teacher, updated_lab, best_score + + +def run_timetable_generation( + teacher_subject_mapping: dict, + total_sections: dict, + total_classrooms: dict, + total_labs: dict, + teacher_preferences: dict, + teacher_weekly_workload: dict, + special_subjects: dict, + labs: dict, + subject_quota_limits: dict, + teacher_duty_days: dict, + teacher_availability_matrix: dict, + lab_availability_matrix: dict, + total_generations: int, + time_slots: dict, + day_map: dict, + time_slot_map: dict, + fixed_teacher_assignment: dict = None, + working_days: list = None, +): + """Main function to run timetable generation.""" + config = TimetableConfig( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects=special_subjects, + labs=labs, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, + total_generations=total_generations, + time_slots=time_slots, + day_map=day_map, + time_slot_map=time_slot_map, + fixed_teacher_assignment=fixed_teacher_assignment or {}, + working_days=working_days, + ) + engine = TimetableEngine(config) + return engine.run() diff --git a/backend/algorithm/fitness.py b/backend/algorithm/fitness.py new file mode 100644 index 0000000..3fe5248 --- /dev/null +++ b/backend/algorithm/fitness.py @@ -0,0 +1,186 @@ +import json + +from algorithm.constants import Defaults, PenaltyConstants +from algorithm.chromosome import TimeTableGeneration + + +class TimetableFitnessEvaluator: + def __init__( + self, + timetable, + all_sections, + subject_teacher_mapping, + available_classrooms, + available_labs, + classroom_capacity, + section_student_strength, + subject_quota_data, + teacher_time_preferences, + teacher_daily_workload, + time_slots, + config=None, + ): + self.timetable = timetable + self.defaults = Defaults(config) + self.penalty_constants = PenaltyConstants(config) + self.available_days = self.defaults.working_days + self.all_sections = all_sections + self.subject_teacher_mapping = subject_teacher_mapping + self.available_classrooms = available_classrooms + self.available_labs = available_labs + self.classroom_capacity = classroom_capacity + self.section_student_strength = section_student_strength + self.subject_quota_data = subject_quota_data + self.teacher_time_preferences = teacher_time_preferences + self.teacher_daily_workload = teacher_daily_workload + self.time_slots = time_slots + + def evaluate_timetable_fitness(self): + daily_section_fitness_scores = {} + weekly_fitness_scores = {} + teacher_workload_tracking = {} + + for week, week_schedule in self.timetable.items(): + weekly_fitness = 0 + daily_section_fitness_scores[week] = {} + teacher_time_slot_tracking = {} + for day, day_schedule in week_schedule.items(): + daily_section_fitness_scores[week][day] = {} + day_fitness = 0 + for section, section_schedule in day_schedule.items(): + section_fitness = self.defaults.starting_section_fitness + + classroom_time_slot_tracking = {} + + for schedule_item in section_schedule: + assigned_teacher = schedule_item["teacher_id"] + assigned_classroom = schedule_item["classroom_id"] + assigned_time_slot = self.time_slots.get( + schedule_item["time_slot"] + ) + section_strength = self.section_student_strength.get(section, 0) + + # Penalty 1: Double booking a teacher in the same time slot + if ( + assigned_teacher, + assigned_time_slot, + ) in teacher_time_slot_tracking.keys(): + section_fitness -= ( + self.penalty_constants.PENALTY_TEACHER_DOUBLE_BOOKED + ) + else: + teacher_time_slot_tracking[ + (assigned_teacher, assigned_time_slot) + ] = section + + # Penalty 2: Double booking a classroom in the same time slot + if ( + assigned_classroom, + assigned_time_slot, + ) in classroom_time_slot_tracking: + section_fitness -= ( + self.penalty_constants.PENALTY_CLASSROOM_DOUBLE_BOOKED + ) + else: + classroom_time_slot_tracking[ + (assigned_classroom, assigned_time_slot) + ] = section + + # Penalty 3: Over-capacity classrooms + if section_strength > self.classroom_capacity.get( + assigned_classroom, self.defaults.max_class_capacity + ): + section_fitness -= self.penalty_constants.PENALTY_OVER_CAPACITY + + # Penalty 4: Assigning teachers during unpreferred time slots + preferred_time_slots = self.teacher_time_preferences.get( + assigned_teacher, [] + ) + if assigned_time_slot not in preferred_time_slots: + section_fitness -= ( + self.penalty_constants.PENALTY_UN_PREFERRED_SLOT + ) + + # Penalty 5: Scheduling teacher on a non-duty day + # Note: teacher_duty_days should be passed as a parameter if needed + # For now, we'll skip this check or make it optional + pass + + # Tracking teacher workload + if assigned_teacher not in teacher_workload_tracking: + teacher_workload_tracking[assigned_teacher] = [] + teacher_workload_tracking[assigned_teacher].append( + assigned_time_slot + ) + + # Penalty 6: Exceeding teacher daily workload + for teacher, times_assigned in teacher_workload_tracking.items(): + if teacher is not None: + if len(times_assigned) > self.teacher_daily_workload.get( + teacher, 0 + ): + section_fitness -= ( + self.penalty_constants.PENALTY_OVERLOAD_TEACHER + ) + + daily_section_fitness_scores[week][day][section] = section_fitness + day_fitness += section_fitness + + weekly_fitness += day_fitness + + weekly_fitness_scores[week] = weekly_fitness + + return daily_section_fitness_scores, weekly_fitness_scores + + +if __name__ == "__main__": + total_sections = 6 + total_classrooms = 8 + total_labs = 3 + + # Generate timetable + timetable_generator = TimeTableGeneration( + teacher_subject_mapping=SubjectTeacherMap.subject_teacher_map, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=TeacherWorkload.teacher_preferences, + teacher_weekly_workload=TeacherWorkload.Weekly_workLoad, + special_subjects=SpecialSubjects.special_subjects, + subject_quota_limits=SubjectWeeklyQuota.subject_quota, + teacher_duty_days=TeacherWorkload.teacher_duty_days, + ) + generated_timetables = timetable_generator.create_timetable(5) + + # Evaluate fitness + fitness_evaluator = TimetableFitnessEvaluator( + generated_timetables, + timetable_generator.sections_manager.sections, + SubjectTeacherMap.subject_teacher_map, + timetable_generator.classrooms_manager.classrooms, + timetable_generator.classrooms_manager.labs, + timetable_generator.room_capacity_manager.room_capacity, + timetable_generator.room_capacity_manager.section_strength, + timetable_generator.subject_quota_limits, + timetable_generator.teacher_availability_preferences, + timetable_generator.weekly_workload, + ) + + ( + section_fitness_data, + weekly_fitness_data, + ) = fitness_evaluator.evaluate_timetable_fitness() + + # Save results + with open("GA/chromosome.json", "w") as timetable_file: + json.dump(generated_timetables, timetable_file, indent=4) + + fitness_output_data = { + "section_fitness_scores": section_fitness_data, + "weekly_fitness_scores": weekly_fitness_data, + } + + with open("GA/fitness.json", "w") as fitness_scores_file: + json.dump(fitness_output_data, fitness_scores_file, indent=4) + + print("Timetable and fitness scores have been saved.") diff --git a/backend/algorithm/helpers.py b/backend/algorithm/helpers.py new file mode 100644 index 0000000..e579b3a --- /dev/null +++ b/backend/algorithm/helpers.py @@ -0,0 +1,46 @@ +""" +Helper functions for timetable generation. +""" + + +def initialize_teacher_availability(teacher_list, num_days=5, num_slots=7): + """Initialize teacher availability matrix.""" + return { + teacher: [[True] * num_slots for _ in range(num_days)] + for teacher in teacher_list + } + + +def update_teacher_availability_matrix(teacher_availability_matrix, best_chromosome): + """Update teacher availability matrix based on best chromosome.""" + for teacher_id, schedule_data in best_chromosome.items(): + if teacher_id in teacher_availability_matrix: + teacher_availability_matrix[teacher_id] = schedule_data + return teacher_availability_matrix + + +def update_matrix_for_best(best_chromosome, teacher_availability_matrix, day_map, time_slot_map): + """Update teacher availability matrix for the best timetable.""" + for day_name, section_dict in best_chromosome.items(): + if day_name not in day_map: + continue + day_index = day_map[day_name] + + for section_name, schedule_items in section_dict.items(): + for item in schedule_items: + teacher_id = item.get("teacher_id") + if teacher_id == "None" or not teacher_id: + continue + + time_slot_str = item.get("time_slot") + if time_slot_str not in time_slot_map: + continue + slot_index = time_slot_map[time_slot_str] + + # Set availability to False + if (teacher_id in teacher_availability_matrix and + day_index < len(teacher_availability_matrix[teacher_id]) and + slot_index - 1 < len(teacher_availability_matrix[teacher_id][day_index])): + teacher_availability_matrix[teacher_id][day_index][slot_index - 1] = False + + return teacher_availability_matrix diff --git a/backend/algorithm/mutation.py b/backend/algorithm/mutation.py new file mode 100644 index 0000000..fd582d6 --- /dev/null +++ b/backend/algorithm/mutation.py @@ -0,0 +1,39 @@ +import copy +import random + +from algorithm.constants import Defaults + + +class TimeTableMutation: + def __init__(self, mutation_rate=0.7): + self.mutation_rate = mutation_rate + + def mutate_time_slots_in_section(self, schedule: dict, section: str) -> bool: + if section not in schedule or len(schedule[section]) < 2: + return False + + section_slots = schedule[section] + time_slots = [entry["time_slot"] for entry in section_slots] + random.shuffle(time_slots) + for i, entry in enumerate(section_slots): + entry["time_slot"] = time_slots[i] + return True + + def mutate_schedule_for_week(self, weekly_schedule: dict) -> dict: + mutated_schedule = copy.deepcopy(weekly_schedule) + for day, day_schedule in mutated_schedule.items(): + sections = list(day_schedule.keys()) + num_to_mutate = max(1, int(self.mutation_rate * len(sections))) + sections_to_mutate = random.sample(sections, num_to_mutate) + for section in sections_to_mutate: + self.mutate_time_slots_in_section(day_schedule, section) + return mutated_schedule + + +class TimeTableCrossOver: + def perform_crossover(self, timetable1: dict, timetable2: dict) -> tuple: + defaults = Defaults() + for day in defaults.working_days: + if day in timetable1 and day in timetable2: + timetable1[day], timetable2[day] = timetable2[day], timetable1[day] + return timetable1, timetable2 diff --git a/backend/algorithm/selection.py b/backend/algorithm/selection.py new file mode 100644 index 0000000..b761136 --- /dev/null +++ b/backend/algorithm/selection.py @@ -0,0 +1,97 @@ +import random + + +class TimeTableSelection: + def __init__(self): + pass + + def select_chromosomes( + self, weekly_fitness_scores, top_percentage=0.20, roulette_percentage=0.10 + ): + """ + Entry point for selecting chromosomes. + Select chromosomes based on top scores and roulette-wheel selection. + """ + + if not weekly_fitness_scores: + print("Weekly fitness scores are empty. Ensure data is loaded correctly!") + return {} + + top_selected, remaining_scores = self.get_top_and_remaining_items( + weekly_fitness_scores, top_percentage + ) + + roulette_selected = self.roulette_wheel_selection( + remaining_scores, int(len(weekly_fitness_scores) * roulette_percentage) + ) + + selected_fitness = {**top_selected, **roulette_selected} + # self.display_selected_chromosomes(selected_fitness) + return selected_fitness + + @staticmethod + def calculate_cumulative_probabilities(scores): + """ + Calculate cumulative probabilities for roulette wheel selection. + """ + + cumulative_probabilities = [] + cumulative_sum = 0 + + for week, score in scores.items(): + cumulative_sum += score + cumulative_probabilities.append((cumulative_sum, week)) + + return cumulative_probabilities + + @staticmethod + def perform_roulette_selection(cumulative_probabilities, total_fitness, num_select): + """ + Perform roulette-wheel selection to choose items. + """ + + selected_items = [] + for _ in range(num_select): + rand_value = random.uniform(0, total_fitness) + for cumulative_sum, week in cumulative_probabilities: + if rand_value <= cumulative_sum: + selected_items.append(week) + break + + return selected_items + + def roulette_wheel_selection(self, scores, num_select): + """ + Select items using roulette-wheel selection. + """ + + if not scores: + print("Scores are empty. Cannot perform roulette selection.") + return {} + + total_fitness = sum(scores.values()) + cumulative_probabilities = self.calculate_cumulative_probabilities(scores) + selected_items = self.perform_roulette_selection( + cumulative_probabilities, total_fitness, num_select + ) + return {week: scores[week] for week in selected_items} + + @staticmethod + def get_top_and_remaining_items(scores, percentage): + num_select = max( + 1, int(len(scores) * percentage) + ) # at least 1 chromosome to select. + sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) + top_selected = dict(sorted_scores[:num_select]) + remaining_items = dict(sorted_scores[num_select:]) + return top_selected, remaining_items + + @staticmethod + def display_selected_chromosomes(selected_fitness): + """ + Display the selected chromosomes and their fitness scores. + """ + + print("\n--- Selected Weeks and Fitness Scores ---") + for week, score in selected_fitness.items(): + print(f"Week: {week}, Score: {score}") diff --git a/backend/api/__init__.py b/backend/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/api/apps.py b/backend/api/apps.py new file mode 100644 index 0000000..66656fd --- /dev/null +++ b/backend/api/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ApiConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'api' diff --git a/backend/api/serializers.py b/backend/api/serializers.py new file mode 100644 index 0000000..a6287c6 --- /dev/null +++ b/backend/api/serializers.py @@ -0,0 +1,49 @@ +""" +Serializers for authentication. +""" +from rest_framework import serializers +from core.models import User +from django.contrib.auth.password_validation import validate_password + + +class UserRegistrationSerializer(serializers.ModelSerializer): + """Serializer for user registration.""" + password = serializers.CharField(write_only=True, required=True, validators=[validate_password]) + password2 = serializers.CharField(write_only=True, required=True, label='Confirm Password') + + class Meta: + model = User + fields = ['email', 'first_name', 'last_name', 'password', 'password2', 'role'] + extra_kwargs = { + 'first_name': {'required': True}, + 'last_name': {'required': True}, + } + + def validate(self, attrs): + if attrs['password'] != attrs['password2']: + raise serializers.ValidationError({"password": "Password fields didn't match."}) + return attrs + + def create(self, validated_data): + validated_data.pop('password2') + password = validated_data.pop('password') + user = User.objects.create_user(password=password, **validated_data) + return user + + +class UserLoginSerializer(serializers.Serializer): + """Serializer for user login.""" + email = serializers.EmailField(required=True) + password = serializers.CharField(required=True, write_only=True) + + +class UserSerializer(serializers.ModelSerializer): + """Serializer for user details.""" + full_name = serializers.ReadOnlyField() + college_name = serializers.CharField(source='college.name', read_only=True) + + class Meta: + model = User + fields = ['id', 'email', 'first_name', 'last_name', 'full_name', + 'role', 'college', 'college_name', 'is_active', 'date_joined'] + read_only_fields = ['id', 'date_joined'] diff --git a/backend/api/urls.py b/backend/api/urls.py new file mode 100644 index 0000000..69a20b6 --- /dev/null +++ b/backend/api/urls.py @@ -0,0 +1,12 @@ +""" +URLs for authentication API. +""" +from django.urls import path +from api import views + +urlpatterns = [ + path('register/', views.register, name='register'), + path('login/', views.login, name='login'), + path('me/', views.me, name='me'), + path('logout/', views.logout, name='logout'), +] diff --git a/backend/api/views.py b/backend/api/views.py new file mode 100644 index 0000000..0ed42e5 --- /dev/null +++ b/backend/api/views.py @@ -0,0 +1,73 @@ +""" +Authentication views. +""" +from rest_framework import status, generics +from rest_framework.decorators import api_view, permission_classes +from rest_framework.response import Response +from rest_framework.permissions import AllowAny, IsAuthenticated +from rest_framework_simplejwt.tokens import RefreshToken +from django.contrib.auth import authenticate +from api.serializers import UserRegistrationSerializer, UserLoginSerializer, UserSerializer +from core.models import User + + +@api_view(['POST']) +@permission_classes([AllowAny]) +def register(request): + """Register a new user.""" + serializer = UserRegistrationSerializer(data=request.data) + if serializer.is_valid(): + user = serializer.save() + refresh = RefreshToken.for_user(user) + return Response({ + 'user': UserSerializer(user).data, + 'refresh': str(refresh), + 'access': str(refresh.access_token), + }, status=status.HTTP_201_CREATED) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + +@api_view(['POST']) +@permission_classes([AllowAny]) +def login(request): + """Login user and return JWT tokens.""" + serializer = UserLoginSerializer(data=request.data) + if serializer.is_valid(): + email = serializer.validated_data['email'] + password = serializer.validated_data['password'] + user = authenticate(request, username=email, password=password) + + if user is not None and user.is_active: + refresh = RefreshToken.for_user(user) + return Response({ + 'user': UserSerializer(user).data, + 'refresh': str(refresh), + 'access': str(refresh.access_token), + }, status=status.HTTP_200_OK) + else: + return Response( + {'error': 'Invalid credentials or inactive account'}, + status=status.HTTP_401_UNAUTHORIZED + ) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + +@api_view(['GET']) +@permission_classes([IsAuthenticated]) +def me(request): + """Get current user details.""" + serializer = UserSerializer(request.user) + return Response(serializer.data) + + +@api_view(['POST']) +@permission_classes([IsAuthenticated]) +def logout(request): + """Logout user by blacklisting refresh token.""" + try: + refresh_token = request.data.get('refresh') + token = RefreshToken(refresh_token) + token.blacklist() + return Response({'message': 'Successfully logged out'}, status=status.HTTP_200_OK) + except Exception as e: + return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST) diff --git a/backend/core/__init__.py b/backend/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/core/admin.py b/backend/core/admin.py new file mode 100644 index 0000000..38ae9d5 --- /dev/null +++ b/backend/core/admin.py @@ -0,0 +1,103 @@ +""" +Django admin configuration. +""" +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin as BaseUserAdmin +from core.models import ( + User, College, Department, Teacher, Subject, Section, + Classroom, SubjectTeacherMapping, Timetable, TeacherPreference +) + + +@admin.register(College) +class CollegeAdmin(admin.ModelAdmin): + list_display = ['name', 'code', 'subdomain', 'is_active', 'created_at'] + list_filter = ['is_active', 'created_at'] + search_fields = ['name', 'code', 'subdomain'] + readonly_fields = ['id', 'created_at', 'updated_at'] + + +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin as BaseUserAdmin +from core.models import User + + +@admin.register(User) +class UserAdmin(BaseUserAdmin): + ordering = ('email',) + + list_display = ('email', 'full_name', 'role', 'is_active', 'is_staff') + list_filter = ('role', 'is_active', 'is_staff') + search_fields = ('email', 'first_name', 'last_name') + + fieldsets = ( + (None, {'fields': ('email', 'password')}), + ('Personal info', {'fields': ('first_name', 'last_name', 'role', 'college')}), + ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), + ('Important dates', {'fields': ('last_login', 'date_joined')}), + ) + + add_fieldsets = ( + (None, { + 'classes': ('wide',), + 'fields': ('email', 'first_name', 'last_name', 'password1', 'password2', 'role', 'college'), + }), + ) + + filter_horizontal = ('groups', 'user_permissions') + + +@admin.register(Department) +class DepartmentAdmin(admin.ModelAdmin): + list_display = ['name', 'code', 'college', 'hod', 'created_at'] + list_filter = ['college', 'created_at'] + search_fields = ['name', 'code'] + + +@admin.register(Teacher) +class TeacherAdmin(admin.ModelAdmin): + list_display = ['user', 'employee_id', 'department', 'designation', 'max_weekly_hours'] + list_filter = ['department', 'designation'] + search_fields = ['user__email', 'user__first_name', 'user__last_name', 'employee_id'] + + +@admin.register(Subject) +class SubjectAdmin(admin.ModelAdmin): + list_display = ['code', 'name', 'college', 'credits', 'weekly_quota', 'is_lab'] + list_filter = ['college', 'is_lab', 'department'] + search_fields = ['code', 'name'] + + +@admin.register(Section) +class SectionAdmin(admin.ModelAdmin): + list_display = ['name', 'college', 'student_strength', 'year', 'semester'] + list_filter = ['college', 'year', 'semester'] + search_fields = ['name'] + + +@admin.register(Classroom) +class ClassroomAdmin(admin.ModelAdmin): + list_display = ['name', 'college', 'capacity', 'is_lab'] + list_filter = ['college', 'is_lab'] + search_fields = ['name'] + + +@admin.register(SubjectTeacherMapping) +class SubjectTeacherMappingAdmin(admin.ModelAdmin): + list_display = ['subject', 'teacher', 'section', 'is_primary'] + list_filter = ['is_primary', 'subject__college'] + search_fields = ['subject__code', 'teacher__user__email'] + + +@admin.register(Timetable) +class TimetableAdmin(admin.ModelAdmin): + list_display = ['name', 'college', 'academic_year', 'status', 'fitness_score', 'created_at'] + list_filter = ['status', 'college', 'created_at'] + search_fields = ['name', 'academic_year'] + readonly_fields = ['id', 'created_at', 'updated_at'] + + +@admin.register(TeacherPreference) +class TeacherPreferenceAdmin(admin.ModelAdmin): + list_display = ['teacher', 'created_at', 'updated_at'] + search_fields = ['teacher__user__email'] diff --git a/backend/core/apps.py b/backend/core/apps.py new file mode 100644 index 0000000..8115ae6 --- /dev/null +++ b/backend/core/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CoreConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'core' diff --git a/backend/core/management/__init__.py b/backend/core/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/core/management/commands/__init__.py b/backend/core/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/core/management/commands/load_sample_data.py b/backend/core/management/commands/load_sample_data.py new file mode 100644 index 0000000..cd70582 --- /dev/null +++ b/backend/core/management/commands/load_sample_data.py @@ -0,0 +1,229 @@ +""" +Management command to load sample data for demonstration. +""" +from django.core.management.base import BaseCommand +from core.models import ( + College, User, Department, Teacher, Subject, Section, + Classroom, SubjectTeacherMapping, TeacherPreference +) +from algorithm.helpers import initialize_teacher_availability + + +class Command(BaseCommand): + help = 'Load sample data for demonstration' + + def handle(self, *args, **options): + self.stdout.write('Loading sample data...') + + # Create or get master admin + master_admin, created = User.objects.get_or_create( + email='ayushkapri18@gmail.com', + defaults={ + 'first_name': 'Ayush', + 'last_name': 'Kapri', + 'role': User.Role.MASTER_ADMIN, + 'is_staff': True, + 'is_superuser': True, + } + ) + if created: + master_admin.set_password('admin123') + master_admin.save() + self.stdout.write(self.style.SUCCESS('Created master admin (admin@timetable.com / admin123)')) + + # Create sample college + college, created = College.objects.get_or_create( + code='GEHU', + defaults={ + 'name': 'Graphic Era', + 'subdomain': 'graphicera', + 'email': 'info@gehu.ac.in', + 'phone': '+91XXXXXXXXXX', + 'address': 'Graphic Era Hill University, India', + 'is_active': True, + } + ) + if created: + self.stdout.write(self.style.SUCCESS(f'Created college: {college.name}')) + + # Create college admin + college_admin, created = User.objects.get_or_create( + email='admin@democollege.com', + defaults={ + 'first_name': 'College', + 'last_name': 'Admin', + 'role': User.Role.COLLEGE_ADMIN, + 'college': college, + } + ) + if created: + college_admin.set_password('admin123') + college_admin.save() + self.stdout.write(self.style.SUCCESS('Created college admin (admin@democollege.com / admin123)')) + + # Create department + dept, created = Department.objects.get_or_create( + college=college, + code='CS', + defaults={ + 'name': 'Computer Science', + 'hod': None, + } + ) + if created: + self.stdout.write(self.style.SUCCESS(f'Created department: {dept.name}')) + + # Create teachers + teachers_data = [ + {'email': 'teacher1@demo.com', 'name': 'John', 'surname': 'Doe', 'emp_id': 'T001', 'designation': 'Professor'}, + {'email': 'teacher2@demo.com', 'name': 'Jane', 'surname': 'Smith', 'emp_id': 'T002', 'designation': 'Associate Professor'}, + {'email': 'teacher3@demo.com', 'name': 'Bob', 'surname': 'Johnson', 'emp_id': 'T003', 'designation': 'Assistant Professor'}, + {'email': 'teacher4@demo.com', 'name': 'Alice', 'surname': 'Williams', 'emp_id': 'T004', 'designation': 'Professor'}, + ] + + teachers = [] + for t_data in teachers_data: + user, created = User.objects.get_or_create( + email=t_data['email'], + defaults={ + 'first_name': t_data['name'], + 'last_name': t_data['surname'], + 'role': User.Role.FACULTY, + 'college': college, + } + ) + if created: + user.set_password('teacher123') + user.save() + + teacher, created = Teacher.objects.get_or_create( + user=user, + defaults={ + 'employee_id': t_data['emp_id'], + 'department': dept, + 'designation': t_data['designation'], + 'max_weekly_hours': 20, + } + ) + teachers.append(teacher) + if created: + self.stdout.write(self.style.SUCCESS(f'Created teacher: {user.full_name}')) + + # Create subjects + subjects_data = [ + {'code': 'CS101', 'name': 'Introduction to Programming', 'credits': 3, 'quota': 3, 'is_lab': False}, + {'code': 'CS102', 'name': 'Data Structures', 'credits': 4, 'quota': 4, 'is_lab': False}, + {'code': 'CS103', 'name': 'Database Systems', 'credits': 3, 'quota': 3, 'is_lab': False}, + {'code': 'CS104', 'name': 'Programming Lab', 'credits': 2, 'quota': 2, 'is_lab': True}, + {'code': 'CS105', 'name': 'Web Development', 'credits': 3, 'quota': 3, 'is_lab': False}, + ] + + subjects = [] + for s_data in subjects_data: + subject, created = Subject.objects.get_or_create( + college=college, + code=s_data['code'], + defaults={ + 'name': s_data['name'], + 'credits': s_data['credits'], + 'weekly_quota': s_data['quota'], + 'is_lab': s_data['is_lab'], + 'department': dept, + } + ) + subjects.append(subject) + if created: + self.stdout.write(self.style.SUCCESS(f'Created subject: {subject.code}')) + + # Create sections + sections_data = [ + {'name': 'A', 'strength': 60}, + {'name': 'B', 'strength': 60}, + {'name': 'C', 'strength': 50}, + ] + + sections = [] + for s_data in sections_data: + section, created = Section.objects.get_or_create( + college=college, + name=s_data['name'], + year=1, + semester=1, + defaults={ + 'student_strength': s_data['strength'], + 'department': dept, + } + ) + sections.append(section) + if created: + self.stdout.write(self.style.SUCCESS(f'Created section: {section.name}')) + + # Create classrooms + classrooms_data = [ + {'name': 'R101', 'capacity': 80, 'is_lab': False}, + {'name': 'R102', 'capacity': 80, 'is_lab': False}, + {'name': 'R103', 'capacity': 60, 'is_lab': False}, + {'name': 'L101', 'capacity': 40, 'is_lab': True}, + {'name': 'L102', 'capacity': 40, 'is_lab': True}, + ] + + classrooms = [] + for c_data in classrooms_data: + classroom, created = Classroom.objects.get_or_create( + college=college, + name=c_data['name'], + defaults={ + 'capacity': c_data['capacity'], + 'is_lab': c_data['is_lab'], + 'department': dept, + } + ) + classrooms.append(classroom) + if created: + self.stdout.write(self.style.SUCCESS(f'Created classroom: {classroom.name}')) + + # Create subject-teacher mappings + mappings = [ + (subjects[0], teachers[0], sections[0]), # CS101 -> T001 -> Section A + (subjects[0], teachers[0], sections[1]), # CS101 -> T001 -> Section B + (subjects[1], teachers[1], sections[0]), # CS102 -> T002 -> Section A + (subjects[1], teachers[1], sections[1]), # CS102 -> T002 -> Section B + (subjects[2], teachers[2], sections[0]), # CS103 -> T003 -> Section A + (subjects[3], teachers[0], sections[0]), # CS104 -> T001 -> Section A + (subjects[4], teachers[3], sections[1]), # CS105 -> T004 -> Section B + ] + + for subject, teacher, section in mappings: + mapping, created = SubjectTeacherMapping.objects.get_or_create( + subject=subject, + teacher=teacher, + section=section, + defaults={'is_primary': True} + ) + if created: + self.stdout.write( + self.style.SUCCESS( + f'Created mapping: {subject.code} -> {teacher.employee_id} -> {section.name}' + ) + ) + + # Create teacher preferences + for teacher in teachers: + pref, created = TeacherPreference.objects.get_or_create( + teacher=teacher, + defaults={ + 'preferred_time_slots': [1, 2, 3, 4], # Morning slots + 'preferred_days': ['Monday', 'Tuesday', 'Wednesday', 'Thursday'], + 'unavailable_slots': [], + } + ) + if created: + self.stdout.write( + self.style.SUCCESS(f'Created preferences for {teacher.user.full_name}') + ) + + self.stdout.write(self.style.SUCCESS('\nSample data loaded successfully!')) + self.stdout.write(self.style.SUCCESS('\nLogin credentials:')) + self.stdout.write(self.style.SUCCESS('Master Admin: ayushkapri18@gmail.com / admin123')) + self.stdout.write(self.style.SUCCESS('College Admin: admin@democollege.com / admin123')) + self.stdout.write(self.style.SUCCESS('Teachers: teacher1@demo.com / teacher123 (and similar)')) diff --git a/backend/core/middleware.py b/backend/core/middleware.py new file mode 100644 index 0000000..b9b7205 --- /dev/null +++ b/backend/core/middleware.py @@ -0,0 +1,39 @@ +""" +Middleware for multi-tenant support. +""" +from django.http import Http404 +from core.models import College + + +class TenantMiddleware: + """Middleware to handle multi-tenancy based on subdomain or header.""" + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + # Get tenant from subdomain or X-College-Code header + host = request.get_host().split(':')[0] + subdomain = host.split('.')[0] if '.' in host else None + + college = None + if subdomain and subdomain != 'www' and subdomain != 'admin': + try: + college = College.objects.get(subdomain=subdomain, is_active=True) + except College.DoesNotExist: + pass + + # Also check header for API requests + if not college: + college_code = request.headers.get('X-College-Code') + if college_code: + try: + college = College.objects.get(code=college_code, is_active=True) + except College.DoesNotExist: + pass + + # Attach college to request + request.college = college + + response = self.get_response(request) + return response diff --git a/backend/core/migrations/0001_initial.py b/backend/core/migrations/0001_initial.py new file mode 100644 index 0000000..f61ed87 --- /dev/null +++ b/backend/core/migrations/0001_initial.py @@ -0,0 +1,208 @@ +# Generated by Django 4.2.7 on 2026-01-28 06:14 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('email', models.EmailField(max_length=254, unique=True)), + ('first_name', models.CharField(max_length=150)), + ('last_name', models.CharField(max_length=150)), + ('role', models.CharField(choices=[('master_admin', 'Master Admin'), ('college_admin', 'College Admin'), ('hod', 'Head of Department'), ('faculty', 'Faculty'), ('student', 'Student')], default='faculty', max_length=20)), + ('is_active', models.BooleanField(default=True)), + ('is_staff', models.BooleanField(default=False)), + ('is_superuser', models.BooleanField(default=False)), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now)), + ], + options={ + 'db_table': 'users', + 'ordering': ['-date_joined'], + }, + ), + migrations.CreateModel( + name='College', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('code', models.CharField(max_length=50, unique=True)), + ('logo', models.ImageField(blank=True, null=True, upload_to='colleges/logos/')), + ('domain', models.CharField(blank=True, max_length=255, null=True, unique=True)), + ('subdomain', models.CharField(blank=True, max_length=100, null=True, unique=True)), + ('address', models.TextField(blank=True, null=True)), + ('phone', models.CharField(blank=True, max_length=20, null=True)), + ('email', models.EmailField(blank=True, max_length=254, null=True)), + ('is_active', models.BooleanField(default=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + options={ + 'db_table': 'colleges', + 'ordering': ['-created_at'], + }, + ), + migrations.CreateModel( + name='Department', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('code', models.CharField(max_length=50)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('college', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='departments', to='core.college')), + ('hod', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='departments_headed', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'departments', + 'unique_together': {('college', 'code')}, + }, + ), + migrations.CreateModel( + name='Section', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=50)), + ('student_strength', models.IntegerField()), + ('year', models.IntegerField(blank=True, null=True)), + ('semester', models.IntegerField(blank=True, null=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('college', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sections', to='core.college')), + ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sections', to='core.department')), + ], + options={ + 'db_table': 'sections', + 'unique_together': {('college', 'name', 'year', 'semester')}, + }, + ), + migrations.CreateModel( + name='Subject', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('code', models.CharField(max_length=50)), + ('name', models.CharField(max_length=255)), + ('credits', models.IntegerField()), + ('weekly_quota', models.IntegerField()), + ('is_lab', models.BooleanField(default=False)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('college', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subjects', to='core.college')), + ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='subjects', to='core.department')), + ], + options={ + 'db_table': 'subjects', + 'unique_together': {('college', 'code')}, + }, + ), + migrations.CreateModel( + name='Teacher', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('employee_id', models.CharField(max_length=50)), + ('designation', models.CharField(max_length=100)), + ('max_weekly_hours', models.IntegerField(default=20)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('department', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teachers', to='core.department')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='teacher_profile', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'teachers', + 'unique_together': {('department', 'employee_id')}, + }, + ), + migrations.CreateModel( + name='Timetable', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('academic_year', models.CharField(max_length=20)), + ('semester', models.CharField(blank=True, max_length=20, null=True)), + ('status', models.CharField(choices=[('draft', 'Draft'), ('generated', 'Generated'), ('published', 'Published'), ('archived', 'Archived')], default='draft', max_length=20)), + ('timetable_data', models.JSONField()), + ('fitness_score', models.FloatField(blank=True, null=True)), + ('generation_config', models.JSONField(blank=True, null=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('college', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='timetables', to='core.college')), + ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_timetables', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'timetables', + 'ordering': ['-created_at'], + }, + ), + migrations.CreateModel( + name='TeacherPreference', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('preferred_time_slots', models.JSONField(default=list)), + ('preferred_days', models.JSONField(default=list)), + ('unavailable_slots', models.JSONField(default=list)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='preferences', to='core.teacher')), + ], + options={ + 'db_table': 'teacher_preferences', + }, + ), + migrations.AddField( + model_name='user', + name='college', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='users', to='core.college'), + ), + migrations.AddField( + model_name='user', + name='groups', + field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups'), + ), + migrations.AddField( + model_name='user', + name='user_permissions', + field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions'), + ), + migrations.CreateModel( + name='SubjectTeacherMapping', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('is_primary', models.BooleanField(default=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('section', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='subject_teacher_mappings', to='core.section')), + ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teacher_mappings', to='core.subject')), + ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subject_mappings', to='core.teacher')), + ], + options={ + 'db_table': 'subject_teacher_mappings', + 'unique_together': {('subject', 'teacher', 'section')}, + }, + ), + migrations.CreateModel( + name='Classroom', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100)), + ('capacity', models.IntegerField()), + ('is_lab', models.BooleanField(default=False)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('college', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='classrooms', to='core.college')), + ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='classrooms', to='core.department')), + ], + options={ + 'db_table': 'classrooms', + 'unique_together': {('college', 'name')}, + }, + ), + ] diff --git a/backend/core/migrations/__init__.py b/backend/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/core/models.py b/backend/core/models.py new file mode 100644 index 0000000..98bf7e7 --- /dev/null +++ b/backend/core/models.py @@ -0,0 +1,248 @@ +""" +Core models for multi-tenant timetable management system. +""" +from django.db import models +from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager +from django.utils import timezone +import uuid + + +class UserManager(BaseUserManager): + """Custom user manager.""" + + def create_user(self, email, password=None, **extra_fields): + if not email: + raise ValueError('The Email field must be set') + email = self.normalize_email(email) + user = self.model(email=email, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_superuser(self, email, password=None, **extra_fields): + extra_fields.setdefault('is_staff', True) + extra_fields.setdefault('is_superuser', True) + extra_fields.setdefault('is_active', True) + extra_fields.setdefault('role', User.Role.MASTER_ADMIN) + + if extra_fields.get('is_staff') is not True: + raise ValueError('Superuser must have is_staff=True.') + if extra_fields.get('is_superuser') is not True: + raise ValueError('Superuser must have is_superuser=True.') + + return self.create_user(email, password, **extra_fields) + + +class College(models.Model): + """College/Institution model for multi-tenancy.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + name = models.CharField(max_length=255) + code = models.CharField(max_length=50, unique=True) + logo = models.ImageField(upload_to='colleges/logos/', null=True, blank=True) + domain = models.CharField(max_length=255, unique=True, null=True, blank=True) + subdomain = models.CharField(max_length=100, unique=True, null=True, blank=True) + address = models.TextField(null=True, blank=True) + phone = models.CharField(max_length=20, null=True, blank=True) + email = models.EmailField(null=True, blank=True) + is_active = models.BooleanField(default=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + db_table = 'colleges' + ordering = ['-created_at'] + + def __str__(self): + return self.name + + +class User(AbstractBaseUser, PermissionsMixin): + """Custom user model with role-based access.""" + + class Role(models.TextChoices): + MASTER_ADMIN = 'master_admin', 'Master Admin' + COLLEGE_ADMIN = 'college_admin', 'College Admin' + HOD = 'hod', 'Head of Department' + FACULTY = 'faculty', 'Faculty' + STUDENT = 'student', 'Student' + + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + email = models.EmailField(unique=True) + first_name = models.CharField(max_length=150) + last_name = models.CharField(max_length=150) + role = models.CharField(max_length=20, choices=Role.choices, default=Role.FACULTY) + college = models.ForeignKey(College, on_delete=models.CASCADE, null=True, blank=True, related_name='users') + is_active = models.BooleanField(default=True) + is_staff = models.BooleanField(default=False) + is_superuser = models.BooleanField(default=False) + date_joined = models.DateTimeField(default=timezone.now) + + objects = UserManager() + + USERNAME_FIELD = 'email' + REQUIRED_FIELDS = ['first_name', 'last_name'] + + class Meta: + db_table = 'users' + ordering = ['-date_joined'] + + def __str__(self): + return f"{self.email} ({self.role})" + + @property + def full_name(self): + return f"{self.first_name} {self.last_name}" + + +class Department(models.Model): + """Department model.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + college = models.ForeignKey(College, on_delete=models.CASCADE, related_name='departments') + name = models.CharField(max_length=255) + code = models.CharField(max_length=50) + hod = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name='departments_headed') + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + db_table = 'departments' + unique_together = ['college', 'code'] + + def __str__(self): + return f"{self.name} ({self.college.name})" + + +class Teacher(models.Model): + """Teacher/Faculty model.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='teacher_profile') + employee_id = models.CharField(max_length=50) + department = models.ForeignKey(Department, on_delete=models.CASCADE, related_name='teachers') + designation = models.CharField(max_length=100) + max_weekly_hours = models.IntegerField(default=20) + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + db_table = 'teachers' + unique_together = ['department', 'employee_id'] + + def __str__(self): + return f"{self.user.full_name} ({self.employee_id})" + + +class Subject(models.Model): + """Subject/Course model.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + college = models.ForeignKey(College, on_delete=models.CASCADE, related_name='subjects') + code = models.CharField(max_length=50) + name = models.CharField(max_length=255) + credits = models.IntegerField() + weekly_quota = models.IntegerField() # Number of classes per week + is_lab = models.BooleanField(default=False) + department = models.ForeignKey(Department, on_delete=models.CASCADE, related_name='subjects', null=True, blank=True) + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + db_table = 'subjects' + unique_together = ['college', 'code'] + + def __str__(self): + return f"{self.code} - {self.name}" + + +class Section(models.Model): + """Section/Class model.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + college = models.ForeignKey(College, on_delete=models.CASCADE, related_name='sections') + name = models.CharField(max_length=50) # e.g., "A", "B", "C" + student_strength = models.IntegerField() + department = models.ForeignKey(Department, on_delete=models.CASCADE, related_name='sections', null=True, blank=True) + year = models.IntegerField(null=True, blank=True) + semester = models.IntegerField(null=True, blank=True) + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + db_table = 'sections' + unique_together = ['college', 'name', 'year', 'semester'] + + def __str__(self): + return f"{self.name} ({self.college.name})" + + +class Classroom(models.Model): + """Classroom model.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + college = models.ForeignKey(College, on_delete=models.CASCADE, related_name='classrooms') + name = models.CharField(max_length=100) + capacity = models.IntegerField() + is_lab = models.BooleanField(default=False) + department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True, blank=True, related_name='classrooms') + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + db_table = 'classrooms' + unique_together = ['college', 'name'] + + def __str__(self): + return f"{self.name} ({self.college.name})" + + +class SubjectTeacherMapping(models.Model): + """Mapping between subjects and teachers.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + subject = models.ForeignKey(Subject, on_delete=models.CASCADE, related_name='teacher_mappings') + teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='subject_mappings') + section = models.ForeignKey(Section, on_delete=models.CASCADE, related_name='subject_teacher_mappings', null=True, blank=True) + is_primary = models.BooleanField(default=True) # Primary teacher for this subject + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + db_table = 'subject_teacher_mappings' + unique_together = ['subject', 'teacher', 'section'] + + def __str__(self): + return f"{self.subject.code} - {self.teacher.user.full_name}" + + +class Timetable(models.Model): + """Generated timetable model.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + college = models.ForeignKey(College, on_delete=models.CASCADE, related_name='timetables') + name = models.CharField(max_length=255) + academic_year = models.CharField(max_length=20) + semester = models.CharField(max_length=20, null=True, blank=True) + status = models.CharField(max_length=20, choices=[ + ('draft', 'Draft'), + ('generated', 'Generated'), + ('published', 'Published'), + ('archived', 'Archived'), + ], default='draft') + timetable_data = models.JSONField() # Stores the generated timetable + fitness_score = models.FloatField(null=True, blank=True) + generation_config = models.JSONField(null=True, blank=True) # Stores algorithm config + created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='created_timetables') + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + db_table = 'timetables' + ordering = ['-created_at'] + + def __str__(self): + return f"{self.name} ({self.college.name})" + + +class TeacherPreference(models.Model): + """Teacher preferences for time slots.""" + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='preferences') + preferred_time_slots = models.JSONField(default=list) # List of preferred time slot IDs + preferred_days = models.JSONField(default=list) # List of preferred days + unavailable_slots = models.JSONField(default=list) # List of unavailable time slots + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + db_table = 'teacher_preferences' + + def __str__(self): + return f"Preferences for {self.teacher.user.full_name}" diff --git a/backend/core/permissions.py b/backend/core/permissions.py new file mode 100644 index 0000000..69b9f89 --- /dev/null +++ b/backend/core/permissions.py @@ -0,0 +1,52 @@ +""" +Custom permissions for the timetable system. +""" +from rest_framework import permissions + + +class IsMasterAdmin(permissions.BasePermission): + """Permission check for Master Admin.""" + def has_permission(self, request, view): + return ( + request.user and + request.user.is_authenticated and + request.user.role == 'master_admin' + ) + + +class IsCollegeAdminOrMaster(permissions.BasePermission): + """Permission check for College Admin or Master Admin.""" + def has_permission(self, request, view): + return ( + request.user and + request.user.is_authenticated and + request.user.role in ['master_admin', 'college_admin'] + ) + + +class IsCollegeMember(permissions.BasePermission): + """Permission check for any college member.""" + def has_permission(self, request, view): + return ( + request.user and + request.user.is_authenticated and + request.user.college is not None + ) + + +class IsOwnerOrAdmin(permissions.BasePermission): + """Permission to allow owners or admins.""" + def has_object_permission(self, request, view, obj): + # Master admin can do anything + if request.user.role == 'master_admin': + return True + + # College admin can manage their college's resources + if request.user.role == 'college_admin' and hasattr(obj, 'college'): + return obj.college == request.user.college + + # Users can manage their own resources + if hasattr(obj, 'created_by'): + return obj.created_by == request.user + + return False diff --git a/backend/core/serializers.py b/backend/core/serializers.py new file mode 100644 index 0000000..ffaeb78 --- /dev/null +++ b/backend/core/serializers.py @@ -0,0 +1,143 @@ +""" +Serializers for core models. +""" +from rest_framework import serializers +from core.models import ( + User, College, Department, Teacher, Subject, Section, + Classroom, SubjectTeacherMapping, Timetable, TeacherPreference +) + + +class CollegeSerializer(serializers.ModelSerializer): + """Serializer for College model.""" + class Meta: + model = College + fields = ['id', 'name', 'code', 'logo', 'domain', 'subdomain', + 'address', 'phone', 'email', 'is_active', 'created_at', 'updated_at'] + read_only_fields = ['id', 'created_at', 'updated_at'] + + +class UserSerializer(serializers.ModelSerializer): + """Serializer for User model.""" + full_name = serializers.ReadOnlyField() + college_name = serializers.CharField(source='college.name', read_only=True) + + class Meta: + model = User + fields = ['id', 'email', 'first_name', 'last_name', 'full_name', + 'role', 'college', 'college_name', 'is_active', 'date_joined'] + read_only_fields = ['id', 'date_joined'] + + +class DepartmentSerializer(serializers.ModelSerializer): + """Serializer for Department model.""" + college_name = serializers.CharField(source='college.name', read_only=True) + hod_name = serializers.CharField(source='hod.full_name', read_only=True) + + class Meta: + model = Department + fields = ['id', 'college', 'college_name', 'name', 'code', 'hod', 'hod_name', 'created_at'] + read_only_fields = ['id', 'created_at'] + + +class TeacherSerializer(serializers.ModelSerializer): + """Serializer for Teacher model.""" + user_email = serializers.CharField(source='user.email', read_only=True) + user_name = serializers.CharField(source='user.full_name', read_only=True) + department_name = serializers.CharField(source='department.name', read_only=True) + + class Meta: + model = Teacher + fields = ['id', 'user', 'user_email', 'user_name', 'employee_id', + 'department', 'department_name', 'designation', 'max_weekly_hours', 'created_at'] + read_only_fields = ['id', 'created_at'] + + +class SubjectSerializer(serializers.ModelSerializer): + """Serializer for Subject model.""" + college_name = serializers.CharField(source='college.name', read_only=True) + department_name = serializers.CharField(source='department.name', read_only=True) + + class Meta: + model = Subject + fields = ['id', 'college', 'college_name', 'code', 'name', 'credits', + 'weekly_quota', 'is_lab', 'department', 'department_name', 'created_at'] + read_only_fields = ['id', 'created_at'] + + +class SectionSerializer(serializers.ModelSerializer): + """Serializer for Section model.""" + college_name = serializers.CharField(source='college.name', read_only=True) + department_name = serializers.CharField(source='department.name', read_only=True) + + class Meta: + model = Section + fields = ['id', 'college', 'college_name', 'name', 'student_strength', + 'department', 'department_name', 'year', 'semester', 'created_at'] + read_only_fields = ['id', 'created_at'] + + +class ClassroomSerializer(serializers.ModelSerializer): + """Serializer for Classroom model.""" + college_name = serializers.CharField(source='college.name', read_only=True) + department_name = serializers.CharField(source='department.name', read_only=True) + + class Meta: + model = Classroom + fields = ['id', 'college', 'college_name', 'name', 'capacity', + 'is_lab', 'department', 'department_name', 'created_at'] + read_only_fields = ['id', 'created_at'] + + +class SubjectTeacherMappingSerializer(serializers.ModelSerializer): + """Serializer for SubjectTeacherMapping model.""" + subject_code = serializers.CharField(source='subject.code', read_only=True) + subject_name = serializers.CharField(source='subject.name', read_only=True) + teacher_name = serializers.CharField(source='teacher.user.full_name', read_only=True) + section_name = serializers.CharField(source='section.name', read_only=True) + + class Meta: + model = SubjectTeacherMapping + fields = ['id', 'subject', 'subject_code', 'subject_name', 'teacher', + 'teacher_name', 'section', 'section_name', 'is_primary', 'created_at'] + read_only_fields = ['id', 'created_at'] + + +class TimetableSerializer(serializers.ModelSerializer): + """Serializer for Timetable model.""" + college_name = serializers.CharField(source='college.name', read_only=True) + created_by_name = serializers.CharField(source='created_by.full_name', read_only=True) + + class Meta: + model = Timetable + fields = ['id', 'college', 'college_name', 'name', 'academic_year', + 'semester', 'status', 'timetable_data', 'fitness_score', + 'generation_config', 'created_by', 'created_by_name', + 'created_at', 'updated_at'] + read_only_fields = ['id', 'created_at', 'updated_at', 'fitness_score'] + + +class TeacherPreferenceSerializer(serializers.ModelSerializer): + """Serializer for TeacherPreference model.""" + teacher_name = serializers.CharField(source='teacher.user.full_name', read_only=True) + + class Meta: + model = TeacherPreference + fields = ['id', 'teacher', 'teacher_name', 'preferred_time_slots', + 'preferred_days', 'unavailable_slots', 'created_at', 'updated_at'] + read_only_fields = ['id', 'created_at', 'updated_at'] + + +class GenerateTimetableSerializer(serializers.Serializer): + """Serializer for timetable generation request.""" + name = serializers.CharField(max_length=255) + academic_year = serializers.CharField(max_length=20) + semester = serializers.CharField(max_length=20, required=False, allow_blank=True) + total_generations = serializers.IntegerField(default=50, min_value=1, max_value=200) + + # Optional overrides + time_slots = serializers.DictField(required=False) + day_map = serializers.DictField(required=False) + time_slot_map = serializers.DictField(required=False) + working_days = serializers.ListField(child=serializers.CharField(), required=False) + fixed_teacher_assignment = serializers.DictField(required=False) diff --git a/backend/core/urls.py b/backend/core/urls.py new file mode 100644 index 0000000..ef4621a --- /dev/null +++ b/backend/core/urls.py @@ -0,0 +1,22 @@ +""" +URLs for core app. +""" +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from core import views + +router = DefaultRouter() +router.register(r'colleges', views.CollegeViewSet, basename='college') +router.register(r'departments', views.DepartmentViewSet, basename='department') +router.register(r'teachers', views.TeacherViewSet, basename='teacher') +router.register(r'subjects', views.SubjectViewSet, basename='subject') +router.register(r'sections', views.SectionViewSet, basename='section') +router.register(r'classrooms', views.ClassroomViewSet, basename='classroom') +router.register(r'subject-teacher-mappings', views.SubjectTeacherMappingViewSet, basename='subject-teacher-mapping') +router.register(r'timetables', views.TimetableViewSet, basename='timetable') +router.register(r'teacher-preferences', views.TeacherPreferenceViewSet, basename='teacher-preference') +router.register(r'generate-timetable', views.GenerateTimetableViewSet, basename='generate-timetable') + +urlpatterns = [ + path('', include(router.urls)), +] diff --git a/backend/core/views.py b/backend/core/views.py new file mode 100644 index 0000000..26fadcd --- /dev/null +++ b/backend/core/views.py @@ -0,0 +1,348 @@ +""" +Views for core models. +""" +from rest_framework import viewsets, status, generics +from rest_framework.decorators import action +from rest_framework.response import Response +from rest_framework.permissions import IsAuthenticated +from django.db.models import Q +from core.models import ( + College, Department, Teacher, Subject, Section, + Classroom, SubjectTeacherMapping, Timetable, TeacherPreference +) +from core.serializers import ( + CollegeSerializer, DepartmentSerializer, TeacherSerializer, + SubjectSerializer, SectionSerializer, ClassroomSerializer, + SubjectTeacherMappingSerializer, TimetableSerializer, + TeacherPreferenceSerializer, GenerateTimetableSerializer +) +from core.permissions import ( + IsMasterAdmin, IsCollegeAdminOrMaster, IsCollegeMember, IsOwnerOrAdmin +) +from algorithm import run_timetable_generation +from algorithm.helpers import initialize_teacher_availability +import logging + +logger = logging.getLogger(__name__) + + +class CollegeViewSet(viewsets.ModelViewSet): + """ViewSet for College management.""" + queryset = College.objects.all() + serializer_class = CollegeSerializer + permission_classes = [IsAuthenticated, IsMasterAdmin] + filterset_fields = ['is_active'] + search_fields = ['name', 'code', 'subdomain'] + + +class DepartmentViewSet(viewsets.ModelViewSet): + """ViewSet for Department management.""" + serializer_class = DepartmentSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return Department.objects.all() + return Department.objects.filter(college=user.college) + + def perform_create(self, serializer): + if self.request.user.role != 'master_admin': + serializer.save(college=self.request.user.college) + + +class TeacherViewSet(viewsets.ModelViewSet): + """ViewSet for Teacher management.""" + serializer_class = TeacherSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + search_fields = ['user__email', 'user__first_name', 'user__last_name', 'employee_id'] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return Teacher.objects.all() + return Teacher.objects.filter(department__college=user.college) + + +class SubjectViewSet(viewsets.ModelViewSet): + """ViewSet for Subject management.""" + serializer_class = SubjectSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + search_fields = ['code', 'name'] + filterset_fields = ['is_lab', 'department'] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return Subject.objects.all() + return Subject.objects.filter(college=user.college) + + def perform_create(self, serializer): + if self.request.user.role != 'master_admin': + serializer.save(college=self.request.user.college) + + +class SectionViewSet(viewsets.ModelViewSet): + """ViewSet for Section management.""" + serializer_class = SectionSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + filterset_fields = ['year', 'semester'] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return Section.objects.all() + return Section.objects.filter(college=user.college) + + def perform_create(self, serializer): + if self.request.user.role != 'master_admin': + serializer.save(college=self.request.user.college) + + +class ClassroomViewSet(viewsets.ModelViewSet): + """ViewSet for Classroom management.""" + serializer_class = ClassroomSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + filterset_fields = ['is_lab'] + search_fields = ['name'] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return Classroom.objects.all() + return Classroom.objects.filter(college=user.college) + + def perform_create(self, serializer): + if self.request.user.role != 'master_admin': + serializer.save(college=self.request.user.college) + + +class SubjectTeacherMappingViewSet(viewsets.ModelViewSet): + """ViewSet for Subject-Teacher mapping.""" + serializer_class = SubjectTeacherMappingSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + filterset_fields = ['is_primary', 'subject', 'teacher', 'section'] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return SubjectTeacherMapping.objects.all() + return SubjectTeacherMapping.objects.filter( + subject__college=user.college + ) + + +class TeacherPreferenceViewSet(viewsets.ModelViewSet): + """ViewSet for Teacher Preference management.""" + serializer_class = TeacherPreferenceSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return TeacherPreference.objects.all() + return TeacherPreference.objects.filter( + teacher__department__college=user.college + ) + + +class TimetableViewSet(viewsets.ModelViewSet): + """ViewSet for Timetable management.""" + serializer_class = TimetableSerializer + permission_classes = [IsAuthenticated, IsCollegeMember] + filterset_fields = ['status', 'academic_year', 'semester'] + search_fields = ['name', 'academic_year'] + + def get_queryset(self): + user = self.request.user + if user.role == 'master_admin': + return Timetable.objects.all() + return Timetable.objects.filter(college=user.college) + + def perform_create(self, serializer): + if self.request.user.role != 'master_admin': + serializer.save(college=self.request.user.college, created_by=self.request.user) + + +class GenerateTimetableViewSet(viewsets.ViewSet): + """ViewSet for generating timetables.""" + permission_classes = [IsAuthenticated, IsCollegeAdminOrMaster] + + @action(detail=False, methods=['post']) + def generate(self, request): + """Generate a timetable using the genetic algorithm.""" + serializer = GenerateTimetableSerializer(data=request.data) + if not serializer.is_valid(): + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + college = request.user.college + if not college: + return Response( + {'error': 'User must be associated with a college'}, + status=status.HTTP_400_BAD_REQUEST + ) + + try: + # Get all required data from database + sections = Section.objects.filter(college=college) + classrooms = Classroom.objects.filter(college=college, is_lab=False) + labs = Classroom.objects.filter(college=college, is_lab=True) + subjects = Subject.objects.filter(college=college) + teachers = Teacher.objects.filter(department__college=college) + mappings = SubjectTeacherMapping.objects.filter(subject__college=college) + + # Validate resources exist + if not sections.exists(): + return Response( + {'error': 'No sections found. Please add sections first.'}, + status=status.HTTP_400_BAD_REQUEST + ) + if not teachers.exists(): + return Response( + {'error': 'No teachers found. Please add teachers first.'}, + status=status.HTTP_400_BAD_REQUEST + ) + if not subjects.exists(): + return Response( + {'error': 'No subjects found. Please add subjects first.'}, + status=status.HTTP_400_BAD_REQUEST + ) + if not classrooms.exists() and not labs.exists(): + return Response( + {'error': 'No classrooms or labs found. Please add classrooms/labs first.'}, + status=status.HTTP_400_BAD_REQUEST + ) + if not mappings.exists(): + return Response( + {'error': 'No subject-teacher mappings found. Please create mappings first.'}, + status=status.HTTP_400_BAD_REQUEST + ) + + # Build data structures for algorithm + total_sections = {s.name: s.student_strength for s in sections} + total_classrooms = {c.name: c.capacity for c in classrooms} + total_labs = {l.name: l.capacity for l in labs} + + # Build teacher-subject mapping + teacher_subject_mapping = {} + for mapping in mappings: + subject_code = mapping.subject.code + teacher_id = mapping.teacher.employee_id + if subject_code not in teacher_subject_mapping: + teacher_subject_mapping[subject_code] = [] + teacher_subject_mapping[subject_code].append(teacher_id) + + # Build subject quota limits + subject_quota_limits = {s.code: s.weekly_quota for s in subjects} + + # Build lab subjects list + lab_subjects = [s.code for s in subjects if s.is_lab] + + # Build teacher preferences + teacher_preferences = {} + teacher_weekly_workload = {} + teacher_duty_days = {} + + for teacher in teachers: + teacher_id = teacher.employee_id + teacher_weekly_workload[teacher_id] = teacher.max_weekly_hours + teacher_duty_days[teacher_id] = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] + + # Get preferences if exists + try: + pref = TeacherPreference.objects.get(teacher=teacher) + teacher_preferences[teacher_id] = pref.preferred_time_slots or [] + except TeacherPreference.DoesNotExist: + teacher_preferences[teacher_id] = [] + + # Initialize availability matrices + teacher_list = list(teacher_weekly_workload.keys()) + num_days = len(serializer.validated_data.get('working_days', ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'])) + num_slots = 7 # Default + + teacher_availability_matrix = initialize_teacher_availability(teacher_list, num_days, num_slots) + + lab_availability_matrix = {} + for lab in labs: + lab_availability_matrix[lab.name] = [[True] * num_slots for _ in range(num_days)] + + # Default time slots + time_slots = serializer.validated_data.get('time_slots', { + 1: "9:00 - 9:55", + 2: "9:55 - 10:50", + 3: "11:10 - 12:05", + 4: "12:05 - 1:00", + 5: "1:20 - 2:15", + 6: "2:15 - 3:10", + 7: "3:30 - 4:25", + }) + + day_map = serializer.validated_data.get('day_map', { + "Monday": 0, + "Tuesday": 1, + "Wednesday": 2, + "Thursday": 3, + "Friday": 4, + }) + + time_slot_map = serializer.validated_data.get('time_slot_map', { + "9:00 - 9:55": 1, + "9:55 - 10:50": 2, + "11:10 - 12:05": 3, + "12:05 - 1:00": 4, + "1:20 - 2:15": 5, + "2:15 - 3:10": 6, + "3:30 - 4:25": 7, + }) + + working_days = serializer.validated_data.get('working_days', ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']) + + # Run algorithm + best_tt, final_teacher, final_lab, fitness_score = run_timetable_generation( + teacher_subject_mapping=teacher_subject_mapping, + total_sections=total_sections, + total_classrooms=total_classrooms, + total_labs=total_labs, + teacher_preferences=teacher_preferences, + teacher_weekly_workload=teacher_weekly_workload, + special_subjects={}, + labs=lab_subjects, + subject_quota_limits=subject_quota_limits, + teacher_duty_days=teacher_duty_days, + teacher_availability_matrix=teacher_availability_matrix, + lab_availability_matrix=lab_availability_matrix, + total_generations=serializer.validated_data['total_generations'], + time_slots=time_slots, + day_map=day_map, + time_slot_map=time_slot_map, + fixed_teacher_assignment=serializer.validated_data.get('fixed_teacher_assignment'), + working_days=working_days, + ) + + # Save timetable + timetable = Timetable.objects.create( + college=college, + name=serializer.validated_data['name'], + academic_year=serializer.validated_data['academic_year'], + semester=serializer.validated_data.get('semester', ''), + status='generated', + timetable_data=best_tt, + fitness_score=fitness_score, + generation_config=serializer.validated_data, + created_by=request.user, + ) + + return Response({ + 'timetable_id': str(timetable.id), + 'timetable': best_tt, + 'fitness_score': fitness_score, + 'teacher_availability': final_teacher, + 'lab_availability': final_lab, + }, status=status.HTTP_201_CREATED) + + except Exception as e: + logger.error(f"Error generating timetable: {str(e)}", exc_info=True) + return Response( + {'error': f'Failed to generate timetable: {str(e)}'}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) diff --git a/backend/manage.py b/backend/manage.py new file mode 100644 index 0000000..2294b65 --- /dev/null +++ b/backend/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'timetable_backend.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..2342018 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,11 @@ +Django==4.2.7 +djangorestframework==3.14.0 +django-cors-headers==4.3.1 +djangorestframework-simplejwt==5.3.0 +psycopg2-binary==2.9.9 +python-decouple==3.8 +Pillow==10.1.0 +celery==5.3.4 +redis==5.0.1 +django-filter==23.5 +drf-spectacular==0.26.5 diff --git a/backend/timetable_backend/__init__.py b/backend/timetable_backend/__init__.py new file mode 100644 index 0000000..15d7c50 --- /dev/null +++ b/backend/timetable_backend/__init__.py @@ -0,0 +1,5 @@ +# This will make sure the app is always imported when +# Django starts so that shared_task will use this app. +from .celery import app as celery_app + +__all__ = ('celery_app',) diff --git a/backend/timetable_backend/celery.py b/backend/timetable_backend/celery.py new file mode 100644 index 0000000..0b4bde2 --- /dev/null +++ b/backend/timetable_backend/celery.py @@ -0,0 +1,11 @@ +""" +Celery configuration for timetable_backend project. +""" +import os +from celery import Celery + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'timetable_backend.settings') + +app = Celery('timetable_backend') +app.config_from_object('django.conf:settings', namespace='CELERY') +app.autodiscover_tasks() diff --git a/backend/timetable_backend/settings.py b/backend/timetable_backend/settings.py new file mode 100644 index 0000000..f266c40 --- /dev/null +++ b/backend/timetable_backend/settings.py @@ -0,0 +1,168 @@ +""" +Django settings for timetable_backend project. +""" +import os +from pathlib import Path +from decouple import config +from datetime import timedelta + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = config('SECRET_KEY', default='django-insecure-change-this-in-production') + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = config('DEBUG', default=True, cast=bool) + +ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='localhost,127.0.0.1', cast=lambda v: [s.strip() for s in v.split(',')]) + +# Application definition +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'rest_framework', + 'rest_framework_simplejwt', + 'corsheaders', + 'drf_spectacular', + 'django_filters', + 'core', + 'algorithm', + 'api', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'corsheaders.middleware.CorsMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'core.middleware.TenantMiddleware', +] + +ROOT_URLCONF = 'timetable_backend.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'timetable_backend.wsgi.application' + +# Database +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': config('DB_NAME', default='timetable_db'), + 'USER': config('DB_USER', default='postgres'), + 'PASSWORD': config('DB_PASSWORD', default='postgres'), + 'HOST': config('DB_HOST', default='localhost'), + 'PORT': config('DB_PORT', default='5432'), + } +} + +# Password validation +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + +# Internationalization +LANGUAGE_CODE = 'en-us' +TIME_ZONE = 'UTC' +USE_I18N = True +USE_TZ = True + +# Static files (CSS, JavaScript, Images) +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') + +# Default primary key field type +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +# Custom User Model +AUTH_USER_MODEL = 'core.User' + +# REST Framework +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework_simplejwt.authentication.JWTAuthentication', + ), + 'DEFAULT_PERMISSION_CLASSES': ( + 'rest_framework.permissions.IsAuthenticated', + ), + 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', + 'PAGE_SIZE': 20, + 'DEFAULT_FILTER_BACKENDS': ( + 'django_filters.rest_framework.DjangoFilterBackend', + 'rest_framework.filters.SearchFilter', + 'rest_framework.filters.OrderingFilter', + ), + 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', +} + +# JWT Settings +SIMPLE_JWT = { + 'ACCESS_TOKEN_LIFETIME': timedelta(hours=24), + 'REFRESH_TOKEN_LIFETIME': timedelta(days=7), + 'ROTATE_REFRESH_TOKENS': True, + 'BLACKLIST_AFTER_ROTATION': True, + 'ALGORITHM': 'HS256', + 'SIGNING_KEY': SECRET_KEY, + 'AUTH_HEADER_TYPES': ('Bearer',), +} + +# CORS Settings +CORS_ALLOWED_ORIGINS = config( + 'CORS_ALLOWED_ORIGINS', + default='http://localhost:3000,http://localhost:5173', + cast=lambda v: [s.strip() for s in v.split(',')] +) +CORS_ALLOW_CREDENTIALS = True + +# Spectacular Settings (API Documentation) +SPECTACULAR_SETTINGS = { + 'TITLE': 'Timetable Management API', + 'DESCRIPTION': 'API for managing timetables with genetic algorithm optimization', + 'VERSION': '1.0.0', + 'SERVE_INCLUDE_SCHEMA': False, +} + +# Celery Configuration (for async tasks) +CELERY_BROKER_URL = config('CELERY_BROKER_URL', default='redis://localhost:6379/0') +CELERY_RESULT_BACKEND = config('CELERY_RESULT_BACKEND', default='redis://localhost:6379/0') +CELERY_ACCEPT_CONTENT = ['json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_RESULT_SERIALIZER = 'json' +CELERY_TIMEZONE = TIME_ZONE diff --git a/backend/timetable_backend/urls.py b/backend/timetable_backend/urls.py new file mode 100644 index 0000000..8b46977 --- /dev/null +++ b/backend/timetable_backend/urls.py @@ -0,0 +1,20 @@ +""" +URL configuration for timetable_backend project. +""" +from django.contrib import admin +from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static +from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView + +urlpatterns = [ + path('admin/', admin.site.urls), + path('api/schema/', SpectacularAPIView.as_view(), name='schema'), + path('api/docs/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'), + path('api/auth/', include('api.urls')), + path('api/', include('core.urls')), +] + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/backend/timetable_backend/wsgi.py b/backend/timetable_backend/wsgi.py new file mode 100644 index 0000000..0c03338 --- /dev/null +++ b/backend/timetable_backend/wsgi.py @@ -0,0 +1,10 @@ +""" +WSGI config for timetable_backend project. +""" +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'timetable_backend.settings') + +application = get_wsgi_application() From 2b9bc7c1dd34322ae0e11a4d32a8b9ca4b301a6a Mon Sep 17 00:00:00 2001 From: TechLead-War Date: Wed, 28 Jan 2026 14:59:46 +0530 Subject: [PATCH 66/67] fix2 --- backend/core/models.py | 4 ++-- backend/core/serializers.py | 10 ++++----- backend/core/views.py | 31 ++++++++++++++++++--------- backend/timetable_backend/settings.py | 9 +++++--- 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/backend/core/models.py b/backend/core/models.py index 98bf7e7..1171a49 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -105,7 +105,7 @@ class Department(models.Model): class Meta: db_table = 'departments' - unique_together = ['college', 'code'] + unique_together = ['id'] def __str__(self): return f"{self.name} ({self.college.name})" @@ -123,7 +123,7 @@ class Teacher(models.Model): class Meta: db_table = 'teachers' - unique_together = ['department', 'employee_id'] + unique_together = ['id'] def __str__(self): return f"{self.user.full_name} ({self.employee_id})" diff --git a/backend/core/serializers.py b/backend/core/serializers.py index ffaeb78..5073337 100644 --- a/backend/core/serializers.py +++ b/backend/core/serializers.py @@ -37,7 +37,7 @@ class DepartmentSerializer(serializers.ModelSerializer): class Meta: model = Department fields = ['id', 'college', 'college_name', 'name', 'code', 'hod', 'hod_name', 'created_at'] - read_only_fields = ['id', 'created_at'] + read_only_fields = ['id', 'created_at', 'college'] class TeacherSerializer(serializers.ModelSerializer): @@ -62,7 +62,7 @@ class Meta: model = Subject fields = ['id', 'college', 'college_name', 'code', 'name', 'credits', 'weekly_quota', 'is_lab', 'department', 'department_name', 'created_at'] - read_only_fields = ['id', 'created_at'] + read_only_fields = ['id', 'created_at', 'college'] class SectionSerializer(serializers.ModelSerializer): @@ -74,7 +74,7 @@ class Meta: model = Section fields = ['id', 'college', 'college_name', 'name', 'student_strength', 'department', 'department_name', 'year', 'semester', 'created_at'] - read_only_fields = ['id', 'created_at'] + read_only_fields = ['id', 'created_at', 'college'] class ClassroomSerializer(serializers.ModelSerializer): @@ -86,7 +86,7 @@ class Meta: model = Classroom fields = ['id', 'college', 'college_name', 'name', 'capacity', 'is_lab', 'department', 'department_name', 'created_at'] - read_only_fields = ['id', 'created_at'] + read_only_fields = ['id', 'created_at', 'college'] class SubjectTeacherMappingSerializer(serializers.ModelSerializer): @@ -114,7 +114,7 @@ class Meta: 'semester', 'status', 'timetable_data', 'fitness_score', 'generation_config', 'created_by', 'created_by_name', 'created_at', 'updated_at'] - read_only_fields = ['id', 'created_at', 'updated_at', 'fitness_score'] + read_only_fields = ['id', 'created_at', 'updated_at', 'fitness_score', 'college'] class TeacherPreferenceSerializer(serializers.ModelSerializer): diff --git a/backend/core/views.py b/backend/core/views.py index 26fadcd..0b00ab2 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -47,8 +47,10 @@ def get_queryset(self): return Department.objects.filter(college=user.college) def perform_create(self, serializer): - if self.request.user.role != 'master_admin': - serializer.save(college=self.request.user.college) + if not self.request.user.college: + raise ValidationError("User has no college assigned") + + serializer.save(college=self.request.user.college) class TeacherViewSet(viewsets.ModelViewSet): @@ -78,8 +80,10 @@ def get_queryset(self): return Subject.objects.filter(college=user.college) def perform_create(self, serializer): - if self.request.user.role != 'master_admin': - serializer.save(college=self.request.user.college) + + if not self.request.user.college: + raise ValidationError("User has no college assigned") + serializer.save(college=self.request.user.college) class SectionViewSet(viewsets.ModelViewSet): @@ -95,8 +99,9 @@ def get_queryset(self): return Section.objects.filter(college=user.college) def perform_create(self, serializer): - if self.request.user.role != 'master_admin': - serializer.save(college=self.request.user.college) + if not self.request.user.college: + raise ValidationError("User has no college assigned") + serializer.save(college=self.request.user.college) class ClassroomViewSet(viewsets.ModelViewSet): @@ -113,8 +118,9 @@ def get_queryset(self): return Classroom.objects.filter(college=user.college) def perform_create(self, serializer): - if self.request.user.role != 'master_admin': - serializer.save(college=self.request.user.college) + if not self.request.user.college: + raise ValidationError("User has no college assigned") + serializer.save(college=self.request.user.college) class SubjectTeacherMappingViewSet(viewsets.ModelViewSet): @@ -160,8 +166,13 @@ def get_queryset(self): return Timetable.objects.filter(college=user.college) def perform_create(self, serializer): - if self.request.user.role != 'master_admin': - serializer.save(college=self.request.user.college, created_by=self.request.user) + if not self.request.user.college: + raise ValidationError("User has no college assigned") + + serializer.save( + college=self.request.user.college, + created_by=self.request.user + ) class GenerateTimetableViewSet(viewsets.ViewSet): diff --git a/backend/timetable_backend/settings.py b/backend/timetable_backend/settings.py index f266c40..3e07abc 100644 --- a/backend/timetable_backend/settings.py +++ b/backend/timetable_backend/settings.py @@ -15,8 +15,11 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = config('DEBUG', default=True, cast=bool) -ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='localhost,127.0.0.1', cast=lambda v: [s.strip() for s in v.split(',')]) - +ALLOWED_HOSTS = config( + 'ALLOWED_HOSTS', + default='localhost,127.0.0.1,172.16.4.55', + cast=lambda v: [s.strip() for s in v.split(',')] +) # Application definition INSTALLED_APPS = [ 'django.contrib.admin', @@ -146,7 +149,7 @@ # CORS Settings CORS_ALLOWED_ORIGINS = config( 'CORS_ALLOWED_ORIGINS', - default='http://localhost:3000,http://localhost:5173', + default='http://localhost:3000,http://localhost:5173,http://172.16.4.55:3000', cast=lambda v: [s.strip() for s in v.split(',')] ) CORS_ALLOW_CREDENTIALS = True From 9ac2896170e80d3339c4a59352e8dceec18d097d Mon Sep 17 00:00:00 2001 From: TechLead-War Date: Wed, 28 Jan 2026 15:05:37 +0530 Subject: [PATCH 67/67] fixx --- .DS_Store | Bin 6148 -> 8196 bytes .gitignore | 62 +- .idea/Time-Table.iml | 1 + IMPLEMENTATION_SUMMARY.md | 169 + README.md | 298 +- SETUP.md | 116 + frontend/.eslintrc.cjs | 21 + frontend/index.html | 13 + frontend/package-lock.json | 6259 +++++++++++++++++ frontend/package.json | 37 + frontend/postcss.config.js | 6 + frontend/src/App.jsx | 46 + frontend/src/components/ProtectedRoute.jsx | 16 + frontend/src/index.css | 31 + frontend/src/main.jsx | 10 + frontend/src/pages/Login.jsx | 96 + frontend/src/pages/college/Dashboard.jsx | 150 + .../src/pages/college/GenerateTimetable.jsx | 223 + frontend/src/pages/college/Resources.jsx | 1347 ++++ .../src/pages/college/TimetableDetail.jsx | 203 + frontend/src/pages/college/Timetables.jsx | 118 + frontend/src/pages/master-admin/Colleges.jsx | 218 + frontend/src/pages/master-admin/Dashboard.jsx | 63 + frontend/src/pages/master-admin/Users.jsx | 58 + frontend/src/stores/authStore.js | 19 + frontend/tailwind.config.js | 26 + frontend/vite.config.js | 22 + resources.html | 14 +- 28 files changed, 9526 insertions(+), 116 deletions(-) create mode 100644 IMPLEMENTATION_SUMMARY.md create mode 100644 SETUP.md create mode 100644 frontend/.eslintrc.cjs create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/App.jsx create mode 100644 frontend/src/components/ProtectedRoute.jsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.jsx create mode 100644 frontend/src/pages/Login.jsx create mode 100644 frontend/src/pages/college/Dashboard.jsx create mode 100644 frontend/src/pages/college/GenerateTimetable.jsx create mode 100644 frontend/src/pages/college/Resources.jsx create mode 100644 frontend/src/pages/college/TimetableDetail.jsx create mode 100644 frontend/src/pages/college/Timetables.jsx create mode 100644 frontend/src/pages/master-admin/Colleges.jsx create mode 100644 frontend/src/pages/master-admin/Dashboard.jsx create mode 100644 frontend/src/pages/master-admin/Users.jsx create mode 100644 frontend/src/stores/authStore.js create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/vite.config.js diff --git a/.DS_Store b/.DS_Store index 98b24d0feb73edaa5518a30fc2b4b1e6355e32fb..ca96f23af27ff7807b14c9024e7949b7c1aa2102 100644 GIT binary patch literal 8196 zcmeHM&1(}u6n~qh&8DFxpoKye7V5Fa^g}_sq-lx>3ffdXXpKperfWC5F&|B}6oMB) zFWv?J1+N~x=%3)tzru@N)Zd$(raPOYLJy*JX4!eOGw;2b{k@OLY>3Fnw#)NG(?n$A zW|~Z(8c=wg@4ga|Jr_U?$dgl@&u@CQdLO6m&-_U(}FC48s>k zza{xHl6HOSi<2P_ABLRSkS7#F%ntpQU?(HvQ(bEWGy?qy@Yy{|DXNl9E#>?^`t3<@ ztmfr%CC4kF&-}UY;^oHP=Vf)geC&9AJMe8_rVCL@Pyv@sF3&C6DXP=68;-XrXX0Sy zSyI15VIi8KB00DU)T9b+LeeG=I-2O=b`8BP@RYz)!JBR4sYXsn>-&(_F-X*L4OoG3 zKExY??jmO1fqs|Ds%GPLh|Ko2_*E zixC-#j*i95n3*s)^4ne~-zv7+&1|vpfS=Yq&nX?Yi=}&ZrBg_rUGdyj(RM2hAz+s) zV0n1ocFSHT>$Tl-Q^@B10W)sK3(4vI{iXEMoOL<9cra(}UtLJgSxbvo4i4hx)a<2e zYlR)B=6bLAMX}+?jfp1w=U&bJ(Dz=u`G)IwF58pkB6OXWRa+B#Xb>C0qgXe3jw4j` z2krUkZO@)^?8t)QF~w%lH&938@KtyhP3yr#%ZVLg7fT?ev$w!Mj-5>{Bjeo}=$uqSPi7t#c~Dw-x} z7o0pVXLg&OL%snmeR~00Rgq+DbU7&kBfj8t0(5ow_y3cs*K!&Gjlh3^fDz5*b6G6( z@Fz@o&3x9ja6iV)h55QZ6(Xp_aU4_}$3c647@}=~m1Q!Lc72K-l)wHVK=1#=zu%O7 MRPX=77f)058&pp;aR2}S delta 119 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5sJ6q~50$SANeU^g?Pz+@hQ>dDSR!jta^ z_D + diff --git a/IMPLEMENTATION_SUMMARY.md b/IMPLEMENTATION_SUMMARY.md new file mode 100644 index 0000000..5695371 --- /dev/null +++ b/IMPLEMENTATION_SUMMARY.md @@ -0,0 +1,169 @@ +# Implementation Summary + +## ✅ Completed Features + +### 1. **Detailed Timetable View** +- ✅ Full timetable display in college dashboard +- ✅ View shows complete schedule with days, time slots, sections, subjects, teachers, and classrooms +- ✅ Click "View" on any timetable card to see detailed schedule +- ✅ Route: `/college/timetables/:id` + +### 2. **Resource Management UI** +Complete CRUD interface for all resources: + +#### **Departments Tab** +- Add/Edit/Delete departments +- Fields: Name, Code + +#### **Teachers Tab** +- Add teachers with user account creation +- Fields: Name, Email, Password, Employee ID, Department, Designation, Max Weekly Hours +- Automatically creates user account with `faculty` role + +#### **Subjects Tab** +- Add/Edit/Delete subjects +- Fields: Code, Name, Credits, Weekly Quota, Department, Is Lab (checkbox) +- Visual indicator for Lab vs Theory subjects + +#### **Sections Tab** +- Add/Edit/Delete sections +- Fields: Name, Student Strength, Department, Year, Semester + +#### **Classrooms Tab** +- Add/Edit/Delete classrooms and labs +- Fields: Name, Capacity, Department, Is Lab (checkbox) +- Separate management for regular classrooms and labs + +#### **Subject-Teacher Mappings Tab** +- Create mappings between subjects and teachers +- Fields: Subject, Teacher, Section (optional), Primary Teacher (checkbox) +- Shows all current mappings in a table + +#### **Teacher Preferences Tab** +- Set preferred time slots for teachers +- Set preferred days +- Set unavailable time slots +- Visual checkbox interface for easy selection + +### 3. **Excel Export Functionality** +- ✅ Export timetable to Excel from detail view +- ✅ Export from timetable list (quick export) +- ✅ Creates properly formatted Excel file with: + - Days as rows + - Time slots as columns + - Sections as separate columns + - Subject, Teacher, Classroom in each cell +- ✅ Uses `xlsx` library (added to package.json) + +### 4. **Enhanced Generate Timetable Page** +- ✅ Shows resource status before generation +- ✅ Visual indicators (green checkmarks/red alerts) for each resource +- ✅ Prevents generation if required resources are missing +- ✅ Helpful error messages guiding user to add missing resources +- ✅ Link to Resources page for easy navigation + +### 5. **Improved Dashboard Navigation** +- ✅ Added "Resources" menu item +- ✅ Added "Dashboard" home page with statistics +- ✅ Better navigation structure +- ✅ Statistics cards showing counts of all resources + +### 6. **Backend Enhancements** +- ✅ Added `TeacherPreferenceViewSet` for managing preferences +- ✅ Added validation in generate endpoint to check for required resources +- ✅ Better error messages for missing resources +- ✅ All CRUD endpoints working for all resources + +## 📁 File Structure + +### Frontend Files Created/Updated: +``` +frontend/src/pages/college/ +├── Dashboard.jsx # Updated with Resources link and home page +├── Timetables.jsx # Updated with View button and Excel export +├── TimetableDetail.jsx # NEW - Detailed timetable view with Excel export +├── GenerateTimetable.jsx # Updated with resource status check +└── Resources.jsx # NEW - Complete resource management with tabs +``` + +### Backend Files Updated: +``` +backend/core/ +├── views.py # Added TeacherPreferenceViewSet, validation +└── urls.py # Added teacher-preferences endpoint +``` + +## 🎯 How to Use + +### For College Admin: + +1. **Setup Resources** (First Time): + - Go to "Resources" in navigation + - Add Departments + - Add Teachers (creates user accounts automatically) + - Add Subjects + - Add Sections + - Add Classrooms/Labs + - Create Subject-Teacher Mappings + - Set Teacher Preferences (optional but recommended) + +2. **Generate Timetable**: + - Go to "Generate" in navigation + - Check resource status (all should be green) + - Fill in timetable details + - Click "Generate Timetable" + - Wait for generation to complete + +3. **View Timetables**: + - Go to "Timetables" in navigation + - See all generated timetables + - Click "View" to see detailed schedule + - Click download icon for quick Excel export + +4. **Export to Excel**: + - From timetable list: Click download icon + - From detail view: Click "Export Excel" button + - File downloads automatically with proper formatting + +## 🔧 Installation Notes + +### Frontend Dependencies: +```bash +cd frontend +npm install +# xlsx package is already added to package.json +``` + +### Backend: +- All endpoints are already configured +- TeacherPreferenceViewSet is added +- Validation is in place + +## 📊 Resource Management Flow + +1. **Departments** → **Teachers** → **Subjects** → **Sections** → **Classrooms** +2. **Subject-Teacher Mappings** (links subjects to teachers) +3. **Teacher Preferences** (optional but improves results) +4. **Generate Timetable** (uses all above resources) + +## 🎨 UI Features + +- ✅ Tabbed interface for easy resource management +- ✅ Modal forms for adding/editing +- ✅ Visual status indicators +- ✅ Responsive design +- ✅ Client-friendly interface +- ✅ Clear error messages +- ✅ Loading states +- ✅ Empty states + +## 🚀 Next Steps (Optional Enhancements) + +1. Bulk import from Excel +2. Timetable editing after generation +3. Conflict detection and warnings +4. Teacher workload visualization +5. Room utilization reports +6. Print-friendly timetable view + +All core features are now implemented and ready for production use! diff --git a/README.md b/README.md index 96e14ac..ba7c659 100644 --- a/README.md +++ b/README.md @@ -1,116 +1,192 @@ -# Timetable Scheduling Project +# Timetable Management System + +A comprehensive, scalable timetable management system with multi-tenant support, genetic algorithm optimization, and modern React frontend. + +## Features + +- **Multi-Tenant Architecture**: Master admin can manage multiple colleges, each with their own dashboard +- **Genetic Algorithm**: Optimized timetable generation with constraint handling +- **Role-Based Access Control**: Master Admin, College Admin, HOD, Faculty, and Student roles +- **Modern Frontend**: React with TypeScript, Tailwind CSS, and responsive design +- **RESTful API**: Django REST Framework with JWT authentication +- **Scalable Design**: PostgreSQL database, Celery for async tasks, Redis for caching + +## Project Structure + +``` +Time-Table/ +├── backend/ # Django backend +│ ├── algorithm/ # Genetic algorithm implementation +│ ├── api/ # Authentication endpoints +│ ├── core/ # Core models, views, serializers +│ └── timetable_backend/ # Django settings +├── frontend/ # React frontend +│ └── src/ +│ ├── pages/ # Page components +│ ├── components/ # Reusable components +│ ├── stores/ # State management +│ └── lib/ # Utilities +└── README.md +``` + +## Setup Instructions + +### Backend Setup + +1. **Navigate to backend directory:** + ```bash + cd backend + ``` + +2. **Create virtual environment:** + ```bash + python -m venv venv + source venv/bin/activate # On Windows: venv\Scripts\activate + ``` + +3. **Install dependencies:** + ```bash + pip install -r requirements.txt + ``` + +4. **Set up environment variables:** + ```bash + cp .env.example .env + # Edit .env with your database credentials + ``` + +5. **Set up database:** + ```bash + python manage.py makemigrations core + python manage.py migrate + ``` + +6. **Create superuser (Master Admin):** + ```bash + python manage.py createsuperuser + ``` + +7. **Run server:** + ```bash + python manage.py runserver + ``` + +### Frontend Setup + +1. **Navigate to frontend directory:** + ```bash + cd frontend + ``` + +2. **Install dependencies:** + ```bash + npm install + ``` + +3. **Run development server:** + ```bash + npm run dev + ``` + +## Usage + +### Master Admin + +1. Login with master admin credentials +2. Navigate to Colleges section to add/manage colleges +3. Each college gets a unique subdomain and dashboard +4. Manage users across all colleges + +### College Admin + +1. Login with college admin credentials +2. Set up departments, teachers, subjects, sections, and classrooms +3. Generate timetables using the genetic algorithm +4. View and manage generated timetables + +## API Endpoints + +### Authentication +- `POST /api/auth/register/` - Register new user +- `POST /api/auth/login/` - Login +- `GET /api/auth/me/` - Get current user +- `POST /api/auth/logout/` - Logout + +### Colleges (Master Admin only) +- `GET /api/colleges/` - List colleges +- `POST /api/colleges/` - Create college +- `GET /api/colleges/{id}/` - Get college details +- `PATCH /api/colleges/{id}/` - Update college +- `DELETE /api/colleges/{id}/` - Delete college + +### Timetables +- `GET /api/timetables/` - List timetables +- `POST /api/timetables/` - Create timetable +- `GET /api/timetables/{id}/` - Get timetable details +- `POST /api/generate-timetable/generate/` - Generate timetable using GA + +## Algorithm + +The genetic algorithm optimizes timetable generation by: + +1. **Initialization**: Creates random timetable populations +2. **Fitness Evaluation**: Scores timetables based on constraint violations +3. **Selection**: Selects best timetables for reproduction +4. **Crossover**: Combines features from parent timetables +5. **Mutation**: Introduces random changes for diversity +6. **Iteration**: Repeats for specified generations + +### Constraints + +- **Hard Constraints**: Must be satisfied + - No teacher double-booking + - No classroom double-booking + - Room capacity limits + - Teacher availability + +- **Soft Constraints**: Preferences + - Teacher time preferences + - Balanced workload distribution + - Minimize gaps between classes + +## Sample Data + +To add sample data for testing: + +1. Use Django admin or API to create: + - Colleges + - Departments + - Teachers + - Subjects + - Sections + - Classrooms + - Subject-Teacher mappings + +2. Or use the management command (to be added): + ```bash + python manage.py load_sample_data + ``` + +## Deployment -## 📚 Overview -Welcome to the **Timetable Scheduling Project**! This repository documents research, findings, discussions, and progress on creating an efficient timetable scheduling system that addresses real-world challenges in academic scheduling. Our goal is to develop a scheduling model that optimally assigns rooms, teachers, and time slots while accommodating various constraints. +### Backend +- Use Gunicorn or uWSGI for production +- Set up PostgreSQL database +- Configure Redis for Celery +- Set environment variables securely + +### Frontend +- Build for production: `npm run build` +- Serve static files with Nginx or similar +- Configure API proxy -## 🔍 Project Goals -- **Optimal Assignment**: Effectively allocate rooms, teachers, and time slots. -- **Constraint Management**: Consider teacher preferences, student load, room capacities, and subject assignments. -- **Dynamic Adaptability**: Adjust to changes, such as adding new rooms or teachers, without complete model retraining. -- **Simplicity and Flexibility**: Simplify complex constraints while remaining adaptable to real-world needs. +## Contributing -## 🧬 Genetic Algorithm -The project employs a Genetic Algorithm (GA) to solve the scheduling problem, inspired by the principles of natural selection. Key modules in our GA include: +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Submit a pull request -1. **Data Encoding and Decoding**: Converting solutions into chromosomes for efficiency. -2. **Initial Population**: Generating a diverse set of potential solutions under specified constraints. -3. **Evaluation of Population**: Using a fitness function to assess solution quality. -4. **Crossover Evolution**: Creating new solutions by combining existing ones. -5. **Mutation**: Introducing random changes to explore new potential solutions. - -### Advantages -- Flexibility compared to manual systems -- Reduced processing power requirements -- Quick generation of accurate timetables -- User-friendly data entry and revision -- Improved productivity and minimal paperwork - -### Disadvantages -- Requires initial raw content input -- High memory consumption -- Internet connectivity needed - -## 📋 Applications -The genetic algorithm can efficiently create various timetables, including: -- University Timetable -- Exam Timetable -- School Timetable -- College Timetable -- Teacher Timetable - -## 📊 Results -The system generates distinct timetables for each class, faculty member, and lab, preventing slot conflicts and allowing customization. The program meets both hard and soft scheduling constraints. - -## ⚙️ Fitness Function -The fitness function is a critical component of our Genetic Algorithm, as it evaluates the quality of each timetable solution. It incorporates both hard and soft constraints to ensure a balanced and effective scheduling outcome. - -### Hard Constraints -These are strict requirements that must be satisfied for a solution to be considered valid: - -1. **No Overlap**: - - Teachers cannot be assigned to multiple classes at the same time. - - Time slots must not overlap for the same section. - - The same classroom cannot be allocated to multiple sections during the same time slot. - -2. **Room Capacity**: - - Each classroom's capacity must accommodate the number of students assigned to that class. - -3. **Time Slot Allocation**: - - Classes must be scheduled within designated time slots. - -4. **Teacher Load Distribution**: - - The total hours assigned to a teacher should not exceed their maximum allowable teaching hours. - -### Soft Constraints -These are preferences that enhance the quality of the solution but are not mandatory: - -1. **Teacher Preferences**: - - Assignments should consider teacher preferences for certain time slots or days. - -2. **Gaps Between Classes**: - - Minimizing the number of gaps between classes for teachers is preferred. - -3. **Balanced Workload**: - - Aim for a balanced distribution of classes among teachers to prevent overloading any single teacher. - -4. **Half Days for Sections** - - Every section should be provided half days so that resources can be utilised properly and also labs and calsses should be balanced. - -### Fitness Score Calculation -The fitness score is calculated based on the following criteria: - -- Each hard constraint violation deducts a significant penalty from the score (e.g., -100 points for each violation). -- Soft constraint preferences add to the score (e.g., +10 points for each preference met). -- The final score is a reflection of both the number of constraints satisfied and the overall quality of the timetable. - -A higher fitness score indicates a better solution, leading to more optimal timetables. The Genetic Algorithm iteratively evolves the population of solutions to maximize this fitness score over generations. - -## 🚀 Future Scope -This project aims to simplify faculty management by automatically assigning courses, considering workload balance, and tracking expertise. Future enhancements may include a master schedule for departments, integration with university websites, and personalized time slot assignments. - -## 🛠️ Installation - -To run this project, clone the repository, set up a virtual environment, and install the required dependencies: - -```bash -git clone https://github.com/yourusername/timetable-scheduling-project.git -cd timetable-scheduling-project - -# Set up a virtual environment -python -m venv venv - -# Activate the virtual environment -# For Linux/macOS: -source venv/bin/activate -# For Windows: -.\venv\Scripts\activate - -# Install dependencies -pip install -r requirements.txt - -# Optionally, set up environment variables in a .env file (e.g., DATABASE_URL, SECRET_KEY) -# Create and edit .env file with necessary variables -touch .env - -echo "Setup complete. You can now run the application." +## License +MIT License diff --git a/SETUP.md b/SETUP.md new file mode 100644 index 0000000..6e0ccb5 --- /dev/null +++ b/SETUP.md @@ -0,0 +1,116 @@ +# Setup Guide + +## Quick Start + +### Prerequisites +- Python 3.8+ +- Node.js 18+ +- PostgreSQL +- Redis (optional, for Celery) + +### Backend Setup + +1. **Navigate to backend:** + ```bash + cd backend + ``` + +2. **Create and activate virtual environment:** + ```bash + python -m venv venv + source venv/bin/activate # On Windows: venv\Scripts\activate + ``` + +3. **Install dependencies:** + ```bash + pip install -r requirements.txt + ``` + +4. **Configure environment:** + ```bash + cp .env.example .env + # Edit .env with your database credentials + ``` + +5. **Run migrations:** + ```bash + python manage.py makemigrations + python manage.py migrate + ``` + +6. **Create superuser:** + ```bash + python manage.py createsuperuser + # Or use the sample data command which creates one + ``` + +7. **Load sample data (optional):** + ```bash + python manage.py load_sample_data + ``` + +8. **Run server:** + ```bash + python manage.py runserver + ``` + +### Frontend Setup + +1. **Navigate to frontend:** + ```bash + cd frontend + ``` + +2. **Install dependencies:** + ```bash + npm install + ``` + +3. **Run development server:** + ```bash + npm run dev + ``` + +## Access the Application + +- Frontend: http://localhost:3000 +- Backend API: http://localhost:8000 +- API Documentation: http://localhost:8000/api/docs/ +- Django Admin: http://localhost:8000/admin/ + +## Default Credentials (after loading sample data) + +- **Master Admin:** + - Email: admin@timetable.com + - Password: admin123 + +- **College Admin:** + - Email: admin@democollege.com + - Password: admin123 + +- **Teachers:** + - Email: teacher1@demo.com, teacher2@demo.com, etc. + - Password: teacher123 + +## Troubleshooting + +### Database Connection Issues +- Ensure PostgreSQL is running +- Check database credentials in `.env` +- Verify database exists: `createdb timetable_db` + +### Frontend Build Issues +- Clear node_modules and reinstall: `rm -rf node_modules && npm install` +- Check Node.js version: `node --version` (should be 18+) + +### Import Errors +- Ensure all dependencies are installed +- Check Python virtual environment is activated +- Verify all migrations are applied + +## Next Steps + +1. Create your first college via Master Admin dashboard +2. Add departments, teachers, subjects, and sections +3. Generate your first timetable +4. Customize the algorithm parameters as needed diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 0000000..c0f1d02 --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,21 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + settings: { react: { version: '18.2' } }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + 'react/prop-types': 'off', + }, +} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..117b7d7 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Timetable Management System + + +

    + + + \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..0677499 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,6259 @@ +{ + "name": "timetable-frontend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "timetable-frontend", + "version": "1.0.0", + "dependencies": { + "@tanstack/react-query": "^5.12.2", + "axios": "^1.6.2", + "clsx": "^2.0.0", + "date-fns": "^2.30.0", + "lucide-react": "^0.294.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.20.0", + "recharts": "^2.10.3", + "tailwind-merge": "^2.1.0", + "xlsx": "^0.18.5", + "zustand": "^4.4.7" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.16", + "eslint": "^8.54.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.4", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.6", + "vite": "^5.0.8" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@remix-run/router": { + "version": "1.23.2", + "resolved": "https://registry.npmmirror.com/@remix-run/router/-/router-1.23.2.tgz", + "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz", + "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz", + "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz", + "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz", + "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz", + "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz", + "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz", + "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz", + "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz", + "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz", + "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz", + "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz", + "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz", + "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz", + "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz", + "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz", + "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz", + "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz", + "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz", + "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz", + "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz", + "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz", + "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz", + "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz", + "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz", + "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tanstack/query-core": { + "version": "5.90.20", + "resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.90.20.tgz", + "integrity": "sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.90.20", + "resolved": "https://registry.npmmirror.com/@tanstack/react-query/-/react-query-5.90.20.tgz", + "integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.90.20" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmmirror.com/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmmirror.com/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.4.tgz", + "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.18", + "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz", + "integrity": "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.279", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.279.tgz", + "integrity": "sha512-0bblUU5UNdOt5G7XqGiJtpZMONma6WAfq9vsFmtn9x1+joAObr6x1chfqyxFSDCAFwFhCQDrqeAr6MYdpwJ9Hg==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmmirror.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-equals": { + "version": "5.4.0", + "resolved": "https://registry.npmmirror.com/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.294.0", + "resolved": "https://registry.npmmirror.com/lucide-react/-/lucide-react-0.294.0.tgz", + "integrity": "sha512-V7o0/VECSGbLHn3/1O67FUgBwWB+hmzshrgDVRJQhMh8uj5D3HBuIvhuAmQTtlupILSplwIZg5FTc4tTKMA2SA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.30.3", + "resolved": "https://registry.npmmirror.com/react-router/-/react-router-6.30.3.tgz", + "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.3", + "resolved": "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.30.3.tgz", + "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2", + "react-router": "6.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmmirror.com/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmmirror.com/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmmirror.com/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.57.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.57.0.tgz", + "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.0", + "@rollup/rollup-android-arm64": "4.57.0", + "@rollup/rollup-darwin-arm64": "4.57.0", + "@rollup/rollup-darwin-x64": "4.57.0", + "@rollup/rollup-freebsd-arm64": "4.57.0", + "@rollup/rollup-freebsd-x64": "4.57.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.0", + "@rollup/rollup-linux-arm-musleabihf": "4.57.0", + "@rollup/rollup-linux-arm64-gnu": "4.57.0", + "@rollup/rollup-linux-arm64-musl": "4.57.0", + "@rollup/rollup-linux-loong64-gnu": "4.57.0", + "@rollup/rollup-linux-loong64-musl": "4.57.0", + "@rollup/rollup-linux-ppc64-gnu": "4.57.0", + "@rollup/rollup-linux-ppc64-musl": "4.57.0", + "@rollup/rollup-linux-riscv64-gnu": "4.57.0", + "@rollup/rollup-linux-riscv64-musl": "4.57.0", + "@rollup/rollup-linux-s390x-gnu": "4.57.0", + "@rollup/rollup-linux-x64-gnu": "4.57.0", + "@rollup/rollup-linux-x64-musl": "4.57.0", + "@rollup/rollup-openbsd-x64": "4.57.0", + "@rollup/rollup-openharmony-arm64": "4.57.0", + "@rollup/rollup-win32-arm64-msvc": "4.57.0", + "@rollup/rollup-win32-ia32-msvc": "4.57.0", + "@rollup/rollup-win32-x64-gnu": "4.57.0", + "@rollup/rollup-win32-x64-msvc": "4.57.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmmirror.com/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmmirror.com/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..37f8747 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,37 @@ +{ + "name": "timetable-frontend", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.20.0", + "axios": "^1.6.2", + "@tanstack/react-query": "^5.12.2", + "zustand": "^4.4.7", + "lucide-react": "^0.294.0", + "clsx": "^2.0.0", + "tailwind-merge": "^2.1.0", + "date-fns": "^2.30.0", + "recharts": "^2.10.3", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.16", + "eslint": "^8.54.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.4", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.6", + "vite": "^5.0.8" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 0000000..418c83c --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,46 @@ +import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import Login from './pages/Login' +import MasterAdminDashboard from './pages/master-admin/Dashboard' +import CollegeDashboard from './pages/college/Dashboard' +import ProtectedRoute from './components/ProtectedRoute' + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false, + retry: 1, + }, + }, +}) + +function App() { + return ( + + + + } /> + + + + } + /> + + + + } + /> + } /> + + + + ) +} + +export default App diff --git a/frontend/src/components/ProtectedRoute.jsx b/frontend/src/components/ProtectedRoute.jsx new file mode 100644 index 0000000..c192294 --- /dev/null +++ b/frontend/src/components/ProtectedRoute.jsx @@ -0,0 +1,16 @@ +import { Navigate } from 'react-router-dom' +import { useAuthStore } from '../stores/authStore' + +export default function ProtectedRoute({ children, allowedRoles }) { + const { user, isAuthenticated } = useAuthStore() + + if (!isAuthenticated()) { + return + } + + if (user && !allowedRoles.includes(user.role)) { + return + } + + return <>{children} +} diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..fe0fd6d --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,31 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light; + color: #0f172a; + background-color: #f8fafc; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + min-width: 320px; + min-height: 100vh; + background-color: #f8fafc; + color: #0f172a; +} + +#root { + width: 100%; + min-height: 100vh; +} \ No newline at end of file diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx new file mode 100644 index 0000000..54b39dd --- /dev/null +++ b/frontend/src/main.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +) diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx new file mode 100644 index 0000000..150f27a --- /dev/null +++ b/frontend/src/pages/Login.jsx @@ -0,0 +1,96 @@ +import { useState } from 'react' +import { useNavigate } from 'react-router-dom' +import { useAuthStore } from '../stores/authStore' +import api from '../lib/api' + +export default function Login() { + const [email, setEmail] = useState('') + const [password, setPassword] = useState('') + const [error, setError] = useState('') + const [loading, setLoading] = useState(false) + + const navigate = useNavigate() + const setAuth = useAuthStore((state) => state.setAuth) + + const handleSubmit = async (e) => { + e.preventDefault() + setError('') + setLoading(true) + + try { + const { data } = await api.post('/auth/login/', { email, password }) + const { user, access, refresh } = data + + setAuth(user, access, refresh) + + navigate(user.role === 'master_admin' ? '/master-admin' : '/college') + } catch (err) { + setError(err.response?.data?.error || 'Invalid credentials') + } finally { + setLoading(false) + } + } + + return ( +
    +
    +
    +

    + College Timetable System +

    +

    + Administrative Login +

    +
    + +
    + {error && ( +
    + {error} +
    + )} + +
    + + setEmail(e.target.value)} + required + className="w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-600" + placeholder="admin@college.edu" + /> +
    + +
    + + setPassword(e.target.value)} + required + className="w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-600" + placeholder="••••••••" + /> +
    + + +
    + +
    + Authorized personnel only +
    +
    +
    + ) +} \ No newline at end of file diff --git a/frontend/src/pages/college/Dashboard.jsx b/frontend/src/pages/college/Dashboard.jsx new file mode 100644 index 0000000..e961317 --- /dev/null +++ b/frontend/src/pages/college/Dashboard.jsx @@ -0,0 +1,150 @@ +import { Routes, Route, Link, useNavigate } from 'react-router-dom' +import { useQuery } from '@tanstack/react-query' +import { useAuthStore } from '../../stores/authStore' +import Timetables from './Timetables' +import TimetableDetail from './TimetableDetail' +import GenerateTimetable from './GenerateTimetable' +import Resources from './Resources' +import { LogOut, Calendar, Plus, Settings, Home, Building, Users, BookOpen, GraduationCap } from 'lucide-react' +import api from '../../lib/api' + +export default function CollegeDashboard() { + const { user, logout } = useAuthStore() + const navigate = useNavigate() + + const handleLogout = () => { + logout() + navigate('/login') + } + + return ( +
    + + +
    + + } /> + } /> + } /> + } /> + } /> + +
    +
    + ) +} + +function DashboardHome() { + const { data: stats, isLoading } = useQuery({ + queryKey: ['dashboard-stats'], + queryFn: async () => { + try { + const [timetables, departments, teachers, subjects, sections, classrooms] = await Promise.all([ + api.get('/timetables/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/departments/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/teachers/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/subjects/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/sections/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/classrooms/').then(r => r.data.results || r.data || []).catch(() => []), + ]) + return { + timetables: timetables?.length || 0, + departments: departments?.length || 0, + teachers: teachers?.length || 0, + subjects: subjects?.length || 0, + sections: sections?.length || 0, + classrooms: classrooms?.length || 0, + } + } catch (error) { + return { + timetables: 0, + departments: 0, + teachers: 0, + subjects: 0, + sections: 0, + classrooms: 0, + } + } + }, + }) + + if (isLoading) return
    Loading...
    + + return ( +
    +

    Dashboard Overview

    +
    + + + + + + +
    +
    + ) +} + +function StatCard({ title, value, icon: Icon }) { + return ( +
    +
    +
    +

    {title}

    +

    {value}

    +
    + +
    +
    + ) +} diff --git a/frontend/src/pages/college/GenerateTimetable.jsx b/frontend/src/pages/college/GenerateTimetable.jsx new file mode 100644 index 0000000..0f1ad5d --- /dev/null +++ b/frontend/src/pages/college/GenerateTimetable.jsx @@ -0,0 +1,223 @@ +import { useState } from 'react' +import { useMutation, useQuery } from '@tanstack/react-query' +import { useNavigate } from 'react-router-dom' +import { Link } from 'react-router-dom' +import api from '../../lib/api' +import { AlertCircle, CheckCircle } from 'lucide-react' + +export default function GenerateTimetable() { + const [formData, setFormData] = useState({ + name: '', + academic_year: '', + semester: '', + total_generations: 50, + }) + const navigate = useNavigate() + + // Fetch resources to check availability + const { data: resources, isLoading: resourcesLoading } = useQuery({ + queryKey: ['generation-resources'], + queryFn: async () => { + try { + const [departments, teachers, subjects, sections, classrooms, mappings] = await Promise.all([ + api.get('/departments/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/teachers/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/subjects/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/sections/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/classrooms/').then(r => r.data.results || r.data || []).catch(() => []), + api.get('/subject-teacher-mappings/').then(r => r.data.results || r.data || []).catch(() => []), + ]) + return { + departments: departments?.length || 0, + teachers: teachers?.length || 0, + subjects: subjects?.length || 0, + sections: sections?.length || 0, + classrooms: classrooms?.length || 0, + mappings: mappings?.length || 0, + } + } catch (error) { + return { + departments: 0, + teachers: 0, + subjects: 0, + sections: 0, + classrooms: 0, + mappings: 0, + } + } + }, + }) + + const generateMutation = useMutation({ + mutationFn: (data) => api.post('/generate-timetable/generate/', data), + onSuccess: () => { + navigate('/college/timetables') + }, + }) + + const handleSubmit = (e) => { + e.preventDefault() + generateMutation.mutate(formData) + } + + const canGenerate = resources && + resources.departments > 0 && + resources.teachers > 0 && + resources.subjects > 0 && + resources.sections > 0 && + resources.classrooms > 0 && + resources.mappings > 0 + + return ( +
    +

    Generate Timetable

    + + {/* Resource Status */} +
    +

    Resource Status

    + {resourcesLoading ? ( +
    Loading resources...
    + ) : ( +
    + + + + + + +
    + )} + + {!canGenerate && ( +
    +
    + +
    +

    + Missing required resources to generate timetable +

    +

    + Please add all required resources in the Resources section. +

    +
    +
    +
    + )} +
    + + {/* Generation Form */} +
    +
    + + setFormData({ ...formData, name: e.target.value })} + required + className="w-full px-3 py-2 border rounded-md focus:ring-2 focus:ring-primary-500" + placeholder="e.g., Fall 2024 Timetable" + /> +
    +
    + + setFormData({ ...formData, academic_year: e.target.value })} + required + className="w-full px-3 py-2 border rounded-md focus:ring-2 focus:ring-primary-500" + placeholder="e.g., 2024-2025" + /> +
    +
    + + setFormData({ ...formData, semester: e.target.value })} + className="w-full px-3 py-2 border rounded-md focus:ring-2 focus:ring-primary-500" + placeholder="e.g., Fall" + /> +
    +
    + + + setFormData({ ...formData, total_generations: parseInt(e.target.value) || 50 }) + } + min="1" + max="200" + className="w-full px-3 py-2 border rounded-md focus:ring-2 focus:ring-primary-500" + /> +

    Higher values may take longer but produce better results

    +
    + {generateMutation.error && ( +
    + {generateMutation.error?.response?.data?.error || generateMutation.error.message || 'Failed to generate timetable'} +
    + )} + +
    +
    + ) +} + +function ResourceStatus({ label, count, required }) { + const hasResource = count > 0 + return ( +
    +
    + {hasResource ? ( + + ) : ( + + )} + {label} + {required && *} +
    + + {count} + +
    + ) +} diff --git a/frontend/src/pages/college/Resources.jsx b/frontend/src/pages/college/Resources.jsx new file mode 100644 index 0000000..182d6e0 --- /dev/null +++ b/frontend/src/pages/college/Resources.jsx @@ -0,0 +1,1347 @@ +import { useState } from 'react' +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' +import api from '../../lib/api' +import { Plus, Edit, Trash2, Users, BookOpen, Building, GraduationCap, Settings, X } from 'lucide-react' + +export default function Resources() { + const [activeTab, setActiveTab] = useState('departments') + + const tabs = [ + { id: 'departments', label: 'Departments', icon: Building }, + { id: 'teachers', label: 'Teachers', icon: Users }, + { id: 'subjects', label: 'Subjects', icon: BookOpen }, + { id: 'sections', label: 'Sections', icon: GraduationCap }, + { id: 'classrooms', label: 'Classrooms', icon: Building }, + { id: 'mappings', label: 'Subject-Teacher', icon: Settings }, + { id: 'preferences', label: 'Teacher Preferences', icon: Settings }, + ] + + return ( +
    +

    Resource Management

    + +
    + +
    + +
    + {activeTab === 'departments' && } + {activeTab === 'teachers' && } + {activeTab === 'subjects' && } + {activeTab === 'sections' && } + {activeTab === 'classrooms' && } + {activeTab === 'mappings' && } + {activeTab === 'preferences' && } +
    +
    + ) +} + +// Modal Component +function Modal({ title, children, onClose }) { + return ( +
    +
    +
    +

    {title}

    + +
    + {children} +
    +
    + ) +} + +// Departments Tab +function DepartmentsTab() { + const [showModal, setShowModal] = useState(false) + const [editingItem, setEditingItem] = useState(null) + const queryClient = useQueryClient() + + const { data: departments, isLoading } = useQuery({ + queryKey: ['departments'], + queryFn: async () => { + const response = await api.get('/departments/') + return response.data.results || response.data + }, + }) + + const createMutation = useMutation({ + mutationFn: (data) => api.post('/departments/', data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['departments'] }) + setShowModal(false) + setEditingItem(null) + }, + }) + + const updateMutation = useMutation({ + mutationFn: ({ id, data }) => api.patch(`/departments/${id}/`, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['departments'] }) + setShowModal(false) + setEditingItem(null) + }, + }) + + const deleteMutation = useMutation({ + mutationFn: (id) => api.delete(`/departments/${id}/`), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['departments'] }) + }, + }) + + const handleSubmit = (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + const data = { + name: formData.get('name'), + code: formData.get('code'), + } + if (editingItem) { + updateMutation.mutate({ id: editingItem.id, data }) + } else { + createMutation.mutate(data) + } + } + + if (isLoading) return
    Loading...
    + + return ( +
    +
    +

    Departments

    + +
    + +
    + + + + + + + + + + {departments?.map((dept) => ( + + + + + + ))} + +
    NameCodeActions
    {dept.name}{dept.code} + + +
    +
    + + {showModal && ( + { + setShowModal(false) + setEditingItem(null) + }} + > +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + )} +
    + ) +} + +// Teachers Tab +function TeachersTab() { + const [showModal, setShowModal] = useState(false) + const [editingItem, setEditingItem] = useState(null) + const queryClient = useQueryClient() + + const { data: teachers, isLoading } = useQuery({ + queryKey: ['teachers'], + queryFn: async () => { + const response = await api.get('/teachers/') + return response.data.results || response.data + }, + }) + + const { data: departments } = useQuery({ + queryKey: ['departments'], + queryFn: async () => { + const response = await api.get('/departments/') + return response.data.results || response.data + }, + }) + + const createMutation = useMutation({ + mutationFn: (data) => api.post('/teachers/', data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['teachers'] }) + setShowModal(false) + }, + }) + + const deleteMutation = useMutation({ + mutationFn: (id) => api.delete(`/teachers/${id}/`), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['teachers'] }) + }, + }) + + const handleSubmit = async (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + + // First create user, then teacher + const userData = { + email: formData.get('email'), + password: formData.get('password'), + password2: formData.get('password'), + first_name: formData.get('first_name'), + last_name: formData.get('last_name'), + role: 'faculty', + } + + try { + // Register user first + const userResponse = await api.post('/auth/register/', userData) + const userId = userResponse.data.user.id + + // Then create teacher + const teacherData = { + user: userId, + employee_id: formData.get('employee_id'), + department: formData.get('department'), + designation: formData.get('designation'), + max_weekly_hours: parseInt(formData.get('max_weekly_hours')) || 20, + } + + createMutation.mutate(teacherData) + } catch (error) { + console.error('Error creating teacher:', error) + } + } + + if (isLoading) return
    Loading...
    + + return ( +
    +
    +

    Teachers

    + +
    + +
    + + + + + + + + + + + + {teachers?.map((teacher) => ( + + + + + + + + ))} + +
    NameEmployee IDDepartmentDesignationActions
    {teacher.user_name}{teacher.employee_id}{teacher.department_name}{teacher.designation} + +
    +
    + + {showModal && ( + { + setShowModal(false) + setEditingItem(null) + }} + > +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + )} +
    + ) +} + +// Subjects Tab +function SubjectsTab() { + const [showModal, setShowModal] = useState(false) + const [editingItem, setEditingItem] = useState(null) + const queryClient = useQueryClient() + + const { data: subjects, isLoading } = useQuery({ + queryKey: ['subjects'], + queryFn: async () => { + const response = await api.get('/subjects/') + return response.data.results || response.data + }, + }) + + const { data: departments } = useQuery({ + queryKey: ['departments'], + queryFn: async () => { + const response = await api.get('/departments/') + return response.data.results || response.data + }, + }) + + const createMutation = useMutation({ + mutationFn: (data) => api.post('/subjects/', data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['subjects'] }) + setShowModal(false) + }, + }) + + const updateMutation = useMutation({ + mutationFn: ({ id, data }) => api.patch(`/subjects/${id}/`, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['subjects'] }) + setShowModal(false) + setEditingItem(null) + }, + }) + + const deleteMutation = useMutation({ + mutationFn: (id) => api.delete(`/subjects/${id}/`), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['subjects'] }) + }, + }) + + const handleSubmit = (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + const data = { + code: formData.get('code'), + name: formData.get('name'), + credits: parseInt(formData.get('credits')), + weekly_quota: parseInt(formData.get('weekly_quota')), + is_lab: formData.get('is_lab') === 'on', + department: formData.get('department') || null, + } + if (editingItem) { + updateMutation.mutate({ id: editingItem.id, data }) + } else { + createMutation.mutate(data) + } + } + + if (isLoading) return
    Loading...
    + + return ( +
    +
    +

    Subjects

    + +
    + +
    + + + + + + + + + + + + + {subjects?.map((subject) => ( + + + + + + + + + ))} + +
    CodeNameCreditsWeekly QuotaTypeActions
    {subject.code}{subject.name}{subject.credits}{subject.weekly_quota} + + {subject.is_lab ? 'Lab' : 'Theory'} + + + + +
    +
    + + {showModal && ( + { + setShowModal(false) + setEditingItem(null) + }} + > +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + )} +
    + ) +} + +// Sections Tab +function SectionsTab() { + const [showModal, setShowModal] = useState(false) + const [editingItem, setEditingItem] = useState(null) + const queryClient = useQueryClient() + + const { data: sections, isLoading } = useQuery({ + queryKey: ['sections'], + queryFn: async () => { + const response = await api.get('/sections/') + return response.data.results || response.data + }, + }) + + const { data: departments } = useQuery({ + queryKey: ['departments'], + queryFn: async () => { + const response = await api.get('/departments/') + return response.data.results || response.data + }, + }) + + const createMutation = useMutation({ + mutationFn: (data) => api.post('/sections/', data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['sections'] }) + setShowModal(false) + }, + }) + + const updateMutation = useMutation({ + mutationFn: ({ id, data }) => api.patch(`/sections/${id}/`, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['sections'] }) + setShowModal(false) + setEditingItem(null) + }, + }) + + const deleteMutation = useMutation({ + mutationFn: (id) => api.delete(`/sections/${id}/`), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['sections'] }) + }, + }) + + const handleSubmit = (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + const data = { + name: formData.get('name'), + student_strength: parseInt(formData.get('student_strength')), + department: formData.get('department') || null, + year: formData.get('year') ? parseInt(formData.get('year')) : null, + semester: formData.get('semester') ? parseInt(formData.get('semester')) : null, + } + if (editingItem) { + updateMutation.mutate({ id: editingItem.id, data }) + } else { + createMutation.mutate(data) + } + } + + if (isLoading) return
    Loading...
    + + return ( +
    +
    +

    Sections

    + +
    + +
    + + + + + + + + + + + + {sections?.map((section) => ( + + + + + + + + ))} + +
    NameStrengthYearSemesterActions
    {section.name}{section.student_strength}{section.year || '-'}{section.semester || '-'} + + +
    +
    + + {showModal && ( + { + setShowModal(false) + setEditingItem(null) + }} + > +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    + )} +
    + ) +} + +// Classrooms Tab +function ClassroomsTab() { + const [showModal, setShowModal] = useState(false) + const [editingItem, setEditingItem] = useState(null) + const queryClient = useQueryClient() + + const { data: classrooms, isLoading } = useQuery({ + queryKey: ['classrooms'], + queryFn: async () => { + const response = await api.get('/classrooms/') + return response.data.results || response.data + }, + }) + + const { data: departments } = useQuery({ + queryKey: ['departments'], + queryFn: async () => { + const response = await api.get('/departments/') + return response.data.results || response.data + }, + }) + + const createMutation = useMutation({ + mutationFn: (data) => api.post('/classrooms/', data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['classrooms'] }) + setShowModal(false) + }, + }) + + const updateMutation = useMutation({ + mutationFn: ({ id, data }) => api.patch(`/classrooms/${id}/`, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['classrooms'] }) + setShowModal(false) + setEditingItem(null) + }, + }) + + const deleteMutation = useMutation({ + mutationFn: (id) => api.delete(`/classrooms/${id}/`), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['classrooms'] }) + }, + }) + + const handleSubmit = (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + const data = { + name: formData.get('name'), + capacity: parseInt(formData.get('capacity')), + is_lab: formData.get('is_lab') === 'on', + department: formData.get('department') || null, + } + if (editingItem) { + updateMutation.mutate({ id: editingItem.id, data }) + } else { + createMutation.mutate(data) + } + } + + if (isLoading) return
    Loading...
    + + return ( +
    +
    +

    Classrooms & Labs

    + +
    + +
    + + + + + + + + + + + {classrooms?.map((classroom) => ( + + + + + + + ))} + +
    NameCapacityTypeActions
    {classroom.name}{classroom.capacity} + + {classroom.is_lab ? 'Lab' : 'Classroom'} + + + + +
    +
    + + {showModal && ( + { + setShowModal(false) + setEditingItem(null) + }} + > +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + )} +
    + ) +} + +// Subject-Teacher Mappings Tab +function MappingsTab() { + const [showModal, setShowModal] = useState(false) + const [editingItem, setEditingItem] = useState(null) + const queryClient = useQueryClient() + + const { data: mappings, isLoading } = useQuery({ + queryKey: ['mappings'], + queryFn: async () => { + const response = await api.get('/subject-teacher-mappings/') + return response.data.results || response.data + }, + }) + + const { data: subjects } = useQuery({ + queryKey: ['subjects'], + queryFn: async () => { + const response = await api.get('/subjects/') + return response.data.results || response.data + }, + }) + + const { data: teachers } = useQuery({ + queryKey: ['teachers'], + queryFn: async () => { + const response = await api.get('/teachers/') + return response.data.results || response.data + }, + }) + + const { data: sections } = useQuery({ + queryKey: ['sections'], + queryFn: async () => { + const response = await api.get('/sections/') + return response.data.results || response.data + }, + }) + + const createMutation = useMutation({ + mutationFn: (data) => api.post('/subject-teacher-mappings/', data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['mappings'] }) + setShowModal(false) + }, + }) + + const deleteMutation = useMutation({ + mutationFn: (id) => api.delete(`/subject-teacher-mappings/${id}/`), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['mappings'] }) + }, + }) + + const handleSubmit = (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + const data = { + subject: formData.get('subject'), + teacher: formData.get('teacher'), + section: formData.get('section') || null, + is_primary: formData.get('is_primary') === 'on', + } + createMutation.mutate(data) + } + + if (isLoading) return
    Loading...
    + + return ( +
    +
    +

    Subject-Teacher Mappings

    + +
    + +
    + + + + + + + + + + + + {mappings?.map((mapping) => ( + + + + + + + + ))} + +
    SubjectTeacherSectionPrimaryActions
    {mapping.subject_code} - {mapping.subject_name}{mapping.teacher_name}{mapping.section_name || 'All'} + {mapping.is_primary ? ( + Yes + ) : ( + No + )} + + +
    +
    + + {showModal && ( + { + setShowModal(false) + setEditingItem(null) + }} + > +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + )} +
    + ) +} + +// Teacher Preferences Tab +function PreferencesTab() { + const [showModal, setShowModal] = useState(false) + const [selectedTeacher, setSelectedTeacher] = useState(null) + const queryClient = useQueryClient() + + const { data: teachers } = useQuery({ + queryKey: ['teachers'], + queryFn: async () => { + const response = await api.get('/teachers/') + return response.data.results || response.data + }, + }) + + const { data: preferences, isLoading } = useQuery({ + queryKey: ['preferences', selectedTeacher], + queryFn: async () => { + if (!selectedTeacher) return null + const response = await api.get(`/teacher-preferences/?teacher=${selectedTeacher}`) + return response.data.results?.[0] || response.data?.[0] || null + }, + enabled: !!selectedTeacher, + }) + + const createOrUpdateMutation = useMutation({ + mutationFn: (data) => { + if (preferences) { + return api.patch(`/teacher-preferences/${preferences.id}/`, data) + } else { + return api.post('/teacher-preferences/', { ...data, teacher: selectedTeacher }) + } + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['preferences'] }) + setShowModal(false) + }, + }) + + const timeSlots = [ + { id: 1, label: '9:00 - 9:55' }, + { id: 2, label: '9:55 - 10:50' }, + { id: 3, label: '11:10 - 12:05' }, + { id: 4, label: '12:05 - 1:00' }, + { id: 5, label: '1:20 - 2:15' }, + { id: 6, label: '2:15 - 3:10' }, + { id: 7, label: '3:30 - 4:25' }, + ] + + const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] + + const handleSubmit = (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + const preferredSlots = [] + const preferredDays = [] + const unavailableSlots = [] + + timeSlots.forEach(slot => { + if (formData.get(`pref_slot_${slot.id}`) === 'on') { + preferredSlots.push(slot.id) + } + if (formData.get(`unavail_slot_${slot.id}`) === 'on') { + unavailableSlots.push(slot.id) + } + }) + + days.forEach(day => { + if (formData.get(`pref_day_${day}`) === 'on') { + preferredDays.push(day) + } + }) + + createOrUpdateMutation.mutate({ + preferred_time_slots: preferredSlots, + preferred_days: preferredDays, + unavailable_slots: unavailableSlots, + }) + } + + return ( +
    +
    +

    Teacher Preferences

    +
    + +
    + + +
    + + {selectedTeacher && ( +
    + + + {preferences && ( +
    +

    Current Preferences

    +

    Preferred Time Slots: {preferences.preferred_time_slots?.join(', ') || 'None'}

    +

    Preferred Days: {preferences.preferred_days?.join(', ') || 'None'}

    +

    Unavailable Slots: {preferences.unavailable_slots?.join(', ') || 'None'}

    +
    + )} +
    + )} + + {showModal && selectedTeacher && ( + setShowModal(false)} + > +
    +
    + +
    + {timeSlots.map(slot => ( + + ))} +
    +
    +
    + +
    + {days.map(day => ( + + ))} +
    +
    +
    + +
    + {timeSlots.map(slot => ( + + ))} +
    +
    +
    + + +
    +
    +
    + )} +
    + ) +} diff --git a/frontend/src/pages/college/TimetableDetail.jsx b/frontend/src/pages/college/TimetableDetail.jsx new file mode 100644 index 0000000..237948c --- /dev/null +++ b/frontend/src/pages/college/TimetableDetail.jsx @@ -0,0 +1,203 @@ +import { useParams, useNavigate } from 'react-router-dom' +import { useQuery } from '@tanstack/react-query' +import api from '../../lib/api' +import { ArrowLeft, Download } from 'lucide-react' +import * as XLSX from 'xlsx' + +export default function TimetableDetail() { + const { id } = useParams() + const navigate = useNavigate() + + const { data: timetable, isLoading } = useQuery({ + queryKey: ['timetable', id], + queryFn: async () => { + const response = await api.get(`/timetables/${id}/`) + return response.data + }, + }) + + const exportToExcel = () => { + if (!timetable?.timetable_data) return + + const workbook = XLSX.utils.book_new() + + // Process each week + Object.keys(timetable.timetable_data).forEach((weekKey) => { + const weekData = timetable.timetable_data[weekKey] + + // Create a sheet for each week + const weekSheetData = [] + + // Header row + const days = Object.keys(weekData) + const sections = new Set() + + // Collect all sections + days.forEach(day => { + Object.keys(weekData[day] || {}).forEach(section => sections.add(section)) + }) + + // Create header + const header = ['Day', 'Time Slot', ...Array.from(sections)] + weekSheetData.push(header) + + // Process each day + days.forEach(day => { + const dayData = weekData[day] || {} + const timeSlots = new Set() + + // Collect all time slots for this day + Object.values(dayData).forEach(sectionSchedule => { + if (Array.isArray(sectionSchedule)) { + sectionSchedule.forEach(entry => { + if (entry?.time_slot) timeSlots.add(entry.time_slot) + }) + } + }) + + // Create rows for each time slot + Array.from(timeSlots).sort().forEach(timeSlot => { + const row = [day, timeSlot] + + Array.from(sections).forEach(section => { + const sectionSchedule = dayData[section] || [] + const entry = Array.isArray(sectionSchedule) + ? sectionSchedule.find(e => e?.time_slot === timeSlot) + : null + + if (entry) { + const cellValue = `${entry.subject_id || ''}\n${entry.teacher_id || ''}\n${entry.classroom_id || ''}` + row.push(cellValue) + } else { + row.push('') + } + }) + + weekSheetData.push(row) + }) + }) + + const worksheet = XLSX.utils.aoa_to_sheet(weekSheetData) + XLSX.utils.book_append_sheet(workbook, worksheet, weekKey.substring(0, 31)) // Excel sheet name limit + }) + + // Download + const fileName = `${timetable.name || 'timetable'}_${timetable.academic_year || 'unknown'}.xlsx` + XLSX.writeFile(workbook, fileName) + } + + if (isLoading) return
    Loading...
    + if (!timetable) return
    Timetable not found
    + + const timetableData = timetable.timetable_data || {} + + return ( +
    +
    +
    + +
    +

    {timetable.name}

    +

    + {timetable.academic_year} - {timetable.semester} +

    +
    +
    + +
    + +
    + {Object.keys(timetableData).map((weekKey) => { + const weekData = timetableData[weekKey] + const days = Object.keys(weekData || {}) + const sections = new Set() + + days.forEach(day => { + const dayData = weekData[day] || {} + Object.keys(dayData).forEach(section => sections.add(section)) + }) + + return ( +
    +
    +

    {weekKey}

    +
    + +
    + + + + + + {Array.from(sections).map(section => ( + + ))} + + + + {days.map(day => { + const dayData = weekData[day] || {} + const timeSlots = new Set() + + Object.values(dayData).forEach(sectionSchedule => { + if (Array.isArray(sectionSchedule)) { + sectionSchedule.forEach(entry => { + if (entry?.time_slot) timeSlots.add(entry.time_slot) + }) + } + }) + + return Array.from(timeSlots).sort().map((timeSlot, idx) => ( + + {idx === 0 && ( + + )} + + {Array.from(sections).map(section => { + const sectionSchedule = dayData[section] || [] + const entry = Array.isArray(sectionSchedule) + ? sectionSchedule.find(e => e?.time_slot === timeSlot) + : null + + return ( + + ) + })} + + )) + })} + +
    DayTime Slot + Section {section} +
    + {day} + {timeSlot} + {entry ? ( +
    +
    {entry.subject_id || '-'}
    +
    {entry.teacher_id || '-'}
    +
    {entry.classroom_id || '-'}
    +
    + ) : ( + - + )} +
    +
    +
    + ) + })} +
    +
    + ) +} diff --git a/frontend/src/pages/college/Timetables.jsx b/frontend/src/pages/college/Timetables.jsx new file mode 100644 index 0000000..dc47c89 --- /dev/null +++ b/frontend/src/pages/college/Timetables.jsx @@ -0,0 +1,118 @@ +import { useQuery } from '@tanstack/react-query' +import { useNavigate } from 'react-router-dom' +import api from '../../lib/api' +import { Eye, Download } from 'lucide-react' +import * as XLSX from 'xlsx' + +export default function Timetables() { + const navigate = useNavigate() + + const { data: timetables, isLoading } = useQuery({ + queryKey: ['timetables'], + queryFn: async () => { + const response = await api.get('/timetables/') + return response.data.results || response.data + }, + }) + + const exportToExcel = (timetable) => { + if (!timetable?.timetable_data) return + + const workbook = XLSX.utils.book_new() + const weekData = timetable.timetable_data[Object.keys(timetable.timetable_data)[0]] || {} + + const days = Object.keys(weekData) + const sections = new Set() + days.forEach(day => { + Object.keys(weekData[day] || {}).forEach(section => sections.add(section)) + }) + + const sheetData = [['Day', 'Time Slot', ...Array.from(sections)]] + + days.forEach(day => { + const dayData = weekData[day] || {} + const timeSlots = new Set() + + Object.values(dayData).forEach(sectionSchedule => { + if (Array.isArray(sectionSchedule)) { + sectionSchedule.forEach(entry => { + if (entry?.time_slot) timeSlots.add(entry.time_slot) + }) + } + }) + + Array.from(timeSlots).sort().forEach(timeSlot => { + const row = [day, timeSlot] + Array.from(sections).forEach(section => { + const sectionSchedule = dayData[section] || [] + const entry = Array.isArray(sectionSchedule) + ? sectionSchedule.find(e => e?.time_slot === timeSlot) + : null + row.push(entry ? `${entry.subject_id || ''} (${entry.teacher_id || ''}) - ${entry.classroom_id || ''}` : '') + }) + sheetData.push(row) + }) + }) + + const worksheet = XLSX.utils.aoa_to_sheet(sheetData) + XLSX.utils.book_append_sheet(workbook, worksheet, 'Timetable') + + const fileName = `${timetable.name || 'timetable'}_${timetable.academic_year || 'unknown'}.xlsx` + XLSX.writeFile(workbook, fileName) + } + + if (isLoading) return
    Loading...
    + + return ( +
    +

    Timetables

    +
    + {timetables?.map((timetable) => ( +
    +

    {timetable.name}

    +

    + {timetable.academic_year} - {timetable.semester} +

    +
    + + {timetable.status} + + {timetable.fitness_score && ( + + Score: {timetable.fitness_score.toFixed(2)} + + )} +
    +
    + + +
    +
    + ))} + {(!timetables || timetables.length === 0) && ( +
    + No timetables found. Generate your first timetable! +
    + )} +
    +
    + ) +} diff --git a/frontend/src/pages/master-admin/Colleges.jsx b/frontend/src/pages/master-admin/Colleges.jsx new file mode 100644 index 0000000..de58104 --- /dev/null +++ b/frontend/src/pages/master-admin/Colleges.jsx @@ -0,0 +1,218 @@ +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' +import { useState } from 'react' +import api from '../../lib/api' +import { Plus, Edit, Trash2 } from 'lucide-react' + +export default function Colleges() { + const [showModal, setShowModal] = useState(false) + const [editingCollege, setEditingCollege] = useState(null) + const queryClient = useQueryClient() + + const { data: colleges, isLoading } = useQuery({ + queryKey: ['colleges'], + queryFn: async () => { + const response = await api.get('/colleges/') + return response.data.results || response.data + }, + }) + + const createMutation = useMutation({ + mutationFn: (data) => api.post('/colleges/', data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['colleges'] }) + setShowModal(false) + }, + }) + + const updateMutation = useMutation({ + mutationFn: ({ id, data }) => + api.patch(`/colleges/${id}/`, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['colleges'] }) + setShowModal(false) + setEditingCollege(null) + }, + }) + + const deleteMutation = useMutation({ + mutationFn: (id) => api.delete(`/colleges/${id}/`), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['colleges'] }) + }, + }) + + const handleSubmit = (e) => { + e.preventDefault() + const formData = new FormData(e.currentTarget) + const data = { + name: formData.get('name'), + code: formData.get('code'), + subdomain: formData.get('subdomain'), + email: formData.get('email'), + phone: formData.get('phone'), + address: formData.get('address'), + } + + if (editingCollege) { + updateMutation.mutate({ id: editingCollege.id, data }) + } else { + createMutation.mutate(data) + } + } + + if (isLoading) return
    Loading...
    + + return ( +
    +
    +

    Colleges

    + +
    + +
    + + + + + + + + + + + + {colleges?.map((college) => ( + + + + + + + + ))} + +
    + Name + + Code + + Subdomain + + Status + + Actions +
    + {college.name} + + {college.code} + + {college.subdomain || '-'} + + + {college.is_active ? 'Active' : 'Inactive'} + + + + +
    +
    + + {showModal && ( +
    +
    +

    + {editingCollege ? 'Edit College' : 'Add College'} +

    +
    + + + + + +