/hse-advanced-python-2022

Small projects for advanced PYTHON course

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

AdvancedPython-2022

HW1_AST

Easy

Написать функцию для поиска первых n чисел Фибоначчи

Medium

Построить AST полученной выше функции. Для визуализации можно использовать networkx. Для корректного отображения кода (имена переменных и операторы) на графе можно использовать метод ast.unparse (Python >= 3.9) или библиотеку astunparse

Hard

Сделать отображение графа красивым. Помечать разными цветами константы, вызов функций, операторы. Подписи вершин не должны вылазить за границы. Граф должен быть похож на дерево.

HW2_Functional

Необходимо реализовать генератор LaTeX в функциональном стиле. Для генерации латеха нельзя использовать сторонние библиотеки.

Easy

Написать функцию для генерации таблиц. На вход поступает двойной список, на выходе строка с отформатированным валидным латехом. Проверить, что латех валидный можно, например, в Overleaf. Строку необходимо сохранить в .tex файл и это будет артефактом для этой задачи Если вы никогда не работали с латехом, то это хороший повод попробовать

Medium

Написать функцию для генерации картинок в латех. В качестве картинки использовать картинку из первой домашки, НО: Нужно собрать код из первой ДЗ в библиотеку при помощи setuptools/conda-build, выложить в репозиторий Если первая ДЗ не сделана, то собрать любой пакет, который генерирует картинку Установить библиотеку, сгенерировать картинку После этого сгенерировать по полученному латеху PDF с таблицей из easy задачи и картинкой. PDF - первый артефакт задачи, ссылка на репозиторий в PyPI/Anaconda - второй. Генерировать pdf можно при помощи pdflatex. Но чтобы он заработал, нужен дистрибутив самого теха. Их много разных

Hard

Скорее всего, для задачи Medium вы руками установили какие-то бинарные зависимости латеха. Если другой разработчик захочет переиспользовать ваш код, то ему придется проделать тоже самое. Чтобы этого избежать, обычно используют Docker. Задача - написать Dockerfile и сгенерировать pdf при помощи докера. Артефактом будет сам Dockerfile, его можно оставить в папке hw02 Да, можно использовать docker compose

HW2_Matrix

Нужно реализовать небольшую библиотеку для работы с матрицами

Easy

Сделать класс матрицы, в котором определить операции сложения и умножения (матричного и покомпонентного) через перегрузку операторов +, *, @ (как в numpy). Отлавливать исключения, если матрицы на входе некорректной размерности Сгенерировать две матрицы через np.random.randint(0, 10, (10, 10)) c seed-ом 0 и над ними провести все три операции. Записать результаты в текстовые файлы, названные matrix+.txt, matrix*.txt, matrix@.txt, соответственно. Это будет артефактом задачи.

Medium

Используя примеси numpy, сделать класс, который будет уметь выполнять все стандартные арифметические операции. Также добавить через примеси: запись объекта в файл, красивое отображение в консоли __str__), getter-ы и setter-ы для полей класса В самих классах должно быть минимальное количество методов Артефакты задачи - аналогично задаче easy

Hard

Задача является продолжением задачи Easy Придумать и реализовать простейшую хэш-фукнцию (дать краткое текстовое описание в комментариях в коде) для матрицы в методе hash (вынести в примесь). Ограничение на хэш-функцию - она должна быть не константой Настроить кэширование произведения матриц по этой хэш-функции Найти коллизию в хэш-функции (если поиск производится кодом, то код также нужно выложить) Артефакт - 7 файлов. A.txt, B.txt, C.txt, D.txt - матрицы, такие, что (hash(A) == hash(C)) and (A != C) and (B == D) and (A @ B != C @ D) AB.txt - результат произведения A @ B CD.txt - настоящий результат произведения C @ D hash.txt - хэш матриц AB и CD

Hw04_Async

Easy

"Взять функцию подсчета чисел Фибоначчи и сравнить время исполнения кода (вызова функции от большого числа n 10 раз через 10 потоков\процессов) при использовании threading и multiprocessing Необходимо сравнить время выполнения при синхронном запуске, использовании потоков и процессов. Артефакт - текстовый файл с результатами запуска различными методами."

Medium

"Переписать функцию integrate для того, чтобы ее выполнение можно было распараллелить. Иcпользовать concurrent.futures: ThreadPoolExecutor и ProcessPoolExecutor. Добавить логирование (когда какая задача запускается), сравнить время выполнения для integrate(math.cos, 0, math.pi / 2, n_jobs=n_jobs) при разном числе n_jobs (от 1 до cpu_num*2) Артефакт - файл логов, файл сравнения общего времени исполнения"

Hard

"Практика работы с процессами. Использование multiprocessing.Queue и multiprocessing.Pipe. Реализовать следующую схему приложения: У вас есть главный процесс и 2 дочерних (A и B). Из главного процесса вы можете через stdin отправлять сообщения (строки) в процесс A, которые будут складироваться в очередь. К каждому из сообщений процесс A будет применять .lower() и отправлять в процесс B (одно сообщение раз в 5 секунд). Процесс B должен отправлять закодированную сроку через rot13 и отправлять в главный процесс откуда печатать в stdout. Артефакт - текстовый файл взаимодействия вас и программы (необходимо выводить время сообщений)"

Hw05_AsyncImagesDownloading

Easy

Асинхронное скачивание картинок\файлов с любого сайта из https://thisxdoesnotexist.com/. Сделать питоновский скрипт, которому можно указать количество файлов, которые нужно получить в нужную папку. Использовать aiohttp.