<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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))