Написать функцию для поиска первых n чисел Фибоначчи
Построить AST полученной выше функции. Для визуализации можно использовать networkx
. Для корректного отображения кода (имена переменных и операторы) на графе можно использовать метод ast.unparse
(Python >= 3.9) или библиотеку astunparse
Сделать отображение графа красивым. Помечать разными цветами константы, вызов функций, операторы. Подписи вершин не должны вылазить за границы. Граф должен быть похож на дерево.
Необходимо реализовать генератор LaTeX в функциональном стиле. Для генерации латеха нельзя использовать сторонние библиотеки.
Написать функцию для генерации таблиц. На вход поступает двойной список, на выходе строка с отформатированным валидным латехом. Проверить, что латех валидный можно, например, в Overleaf.
Строку необходимо сохранить в .tex
файл и это будет артефактом для этой задачи
Если вы никогда не работали с латехом, то это хороший повод попробовать
Написать функцию для генерации картинок в латех.
В качестве картинки использовать картинку из первой домашки, НО:
Нужно собрать код из первой ДЗ в библиотеку при помощи setuptools/conda-build, выложить в репозиторий
Если первая ДЗ не сделана, то собрать любой пакет, который генерирует картинку
Установить библиотеку, сгенерировать картинку
После этого сгенерировать по полученному латеху PDF с таблицей из easy задачи и картинкой. PDF - первый артефакт задачи, ссылка на репозиторий в PyPI/Anaconda
- второй.
Генерировать pdf можно при помощи pdflatex. Но чтобы он заработал, нужен дистрибутив самого теха. Их много разных
Скорее всего, для задачи Medium вы руками установили какие-то бинарные зависимости латеха. Если другой разработчик захочет переиспользовать ваш код, то ему придется проделать тоже самое. Чтобы этого избежать, обычно используют Docker.
Задача - написать Dockerfile
и сгенерировать pdf при помощи докера.
Артефактом будет сам Dockerfile
, его можно оставить в папке hw02
Да, можно использовать docker compose
Нужно реализовать небольшую библиотеку для работы с матрицами
Сделать класс матрицы, в котором определить операции сложения и умножения (матричного и покомпонентного) через перегрузку операторов +
, *
, @
(как в numpy). Отлавливать исключения, если матрицы на входе некорректной размерности
Сгенерировать две матрицы через np.random.randint(0, 10, (10, 10))
c seed-ом 0 и над ними провести все три операции. Записать результаты в текстовые файлы, названные matrix+.txt
, matrix*.txt
, matrix@.txt
, соответственно. Это будет артефактом задачи.
Используя примеси numpy, сделать класс, который будет уметь выполнять все стандартные арифметические операции.
Также добавить через примеси: запись объекта в файл, красивое отображение в консоли __str__)
, getter-ы и setter-ы для полей класса
В самих классах должно быть минимальное количество методов
Артефакты задачи - аналогично задаче easy
Задача является продолжением задачи 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
"Взять функцию подсчета чисел Фибоначчи и сравнить время исполнения кода (вызова функции от большого числа n 10 раз через 10 потоков\процессов) при использовании threading и multiprocessing Необходимо сравнить время выполнения при синхронном запуске, использовании потоков и процессов. Артефакт - текстовый файл с результатами запуска различными методами."
"Переписать функцию integrate для того, чтобы ее выполнение можно было распараллелить. Иcпользовать concurrent.futures
: ThreadPoolExecutor
и ProcessPoolExecutor
. Добавить логирование (когда какая задача запускается), сравнить время выполнения для integrate(math.cos, 0, math.pi / 2, n_jobs=n_jobs)
при разном числе n_jobs
(от 1 до cpu_num*2
)
Артефакт - файл логов, файл сравнения общего времени исполнения"
"Практика работы с процессами. Использование multiprocessing.Queue
и multiprocessing.Pipe
. Реализовать следующую схему приложения:
У вас есть главный процесс и 2 дочерних (A и B). Из главного процесса вы можете через stdin отправлять сообщения (строки) в процесс A, которые будут складироваться в очередь. К каждому из сообщений процесс A будет применять .lower()
и отправлять в процесс B (одно сообщение раз в 5 секунд). Процесс B должен отправлять закодированную сроку через rot13 и отправлять в главный процесс откуда печатать в stdout.
Артефакт - текстовый файл взаимодействия вас и программы (необходимо выводить время сообщений)"
Асинхронное скачивание картинок\файлов с любого сайта из https://thisxdoesnotexist.com/
. Сделать питоновский скрипт, которому можно указать количество файлов, которые нужно получить в нужную папку. Использовать aiohttp.