docs: def find_courses(self, partial):
          """Finds all courses by a given substring. This is case-insensitive.
          """
          partial = partial.lower()
          keys = self.courses.keys()
          keys = [k for k in keys if k.lower().find(partial) != -1]
          courses = [self.courses[k] for k in keys]
          return list(set(courses))