Условие:
На факультете переносных наук одного университета очень забеспокоились, а пользуются ли студентом функционалом их системы МДНЛ (Молюсь дабы не ломалось), и хотят понять три вещи:
Какие студенты пользуются той или иной функцией
Как часто студенты ими пользуются
Как быстро сами функции отрабатывают
Для этого они пригласили вас в качестве эксперта по оптимизации ресурсов. Напишите класс Analiser, который будет анализировать кол-во вызовов тех или иных функций, а также среднее время выполнения этих функций.
Так как никакая анонимность не гарантирована, для вызова любой функции в качестве именнованого аргумента student всегда присылается почта, с помощью которой можно собирать всю необходимую статистику.
Класс Analiser представляет из себя класс-декоратор, который хранит следующие данные:
\nstudents - множество студентов, которые пользовались функционалом\ntimings - словарь {название функции : суммарное время выполнения функции}\nusages - словарь {название функции : число использований}\nunique_usages - словарь {название функции : множество уникальных пользователей}
Обратите внимание, что при добавлении декоратора наши исходные функции должны сохранять свои метаданные (название, описание, модуль)
Также реализуйте внутри класса Analiser следующие функции:
\nget_avg_timing(self, fn) - возвращает среднее время выполнения функции\nget_perc_usages(self, fn) - возвращает процент студентов, которые использовали функцию\nget_all_students(self) - возвращает число студентов, которые пользовались хотя бы один раз системой\nworkload(self) - возвращает общее число вызовов функций\nget_all_timing(self) - возвращает общее время обработки всех функций

