Курсовой проект по теории алгоритмов и формальных языков, продуктом которого является эмулятор одно- и многоленточной машины Тьюринга.
- графический интерфейс
- основной функционал — проверка слова на соответствие языку МТ и построение графика временной сложности алгоритмов МТ
- поддержка алгоритмов для одно- и многоленточных МТ, переключение между ними
- интерфейс должен оставаться отзывчивым при запущенном процессе проверки слова или построения графика (многопоточность)
- должен быть предусмотрен вывод протокола МТ и его экспорт в файл
- должен быть предусмотрен экспорт графика временной сложности в файл
- собственный формат алгоритма МТ и его парсер
- множество предустановленных алгоритмов в папке src/algorithm (частично с комментариями)
- возможность включить режим разработки, при котором алгоритмы перезагружаются при каждом запуске (позволяет удобно отлаживать алгоритм при его создании)
- продвинутые инструменты для управления пакетами и анализа качества кода
- покрытие юнит-тестами
- Python — язык программирования
- uv — пакетный менеджер
- PyQt6 — библиотека для создания графического интерфейса
- pyqtgraph — библиотека для построения графиков в PyQt
- Ruff — инструмент для форматирования и анализа кода
- MyPy — статический типизатор Python
- pre-commit — фреймворк для настройки хуков Git
- Клонируйте репозиторий и перейдите в его папку.
- Установите пакетный менеджер uv одним из способов. Например, для Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Установите зависимости:
uv sync --frozen --no-dev
- Теперь запускать проект можно командой:
uv run -m src
Чтобы модифицировать проект, необходимо установить все зависимости, включая необходимые только для разработки:
uv sync
pre-commit install
Запустить форматирование кода, его линтинг и статический анализ типов можно следующими командами соответственно:
ruff format
ruff check --fix
mypy .
Обновить py-файл интерфейса после модификации ui-файла в Qt Designer можно командой:
uv run -m PyQt6.uic.pyuic -o src/ui/form.py -x src/ui/form.ui
Эта и предыдущая операции производятся автоматически при коммитах.