Решения задач по ml: код и краткая теория с копированием в буфер обмена
Project description
chislib
Библиотека-справочник по численным методам: каждой задаче курса соответствует функция, вызов которой копирует готовое решение (код на Python или краткий теоретический ответ) в буфер обмена. Работает полностью офлайн, внешних зависимостей нет (numpy нужен только коду, который вставляется из буфера).
Установка
pip install chislib
Использование
import chislib
chislib.bisection() # код метода бисекции скопирован в буфер обмена
chislib.theory.kahan_summation() # ответ на теоретический вопрос — в буфер
chislib.find("ньютон") # поиск: печатает функции, подходящие под запрос
chislib.contents() # оглавление всех задач и теории
chislib.show("rk4") # напечатать решение, не копируя
code = chislib.get("rk4") # получить текст решения строкой
chislib.rk4(copy=False) # вернуть текст без копирования в буфер
Из командной строки:
chislib find ньютон # поиск по части названия
chislib copy bisection # скопировать решение в буфер
chislib show theory.gershgorin
chislib list # оглавление
chislib ai "корень x^2 - 2 = 0 бисекцией" # сгенерировать моделью
Поиск
find() ищет по названию, ключевым словам и имени функции:
запрос нормализуется (регистр, ё/е, пунктуация), затем каждой задаче
выставляется балл — за вхождение запроса целиком, за префиксные совпадения
слов и за нечёткие совпадения через difflib (опечатки вроде «лагранш»
тоже находятся). Ключевые слова включают и русские, и английские названия
методов, поэтому работает и find("runge kutta"), и find("рунге").
ИИ-вариант: chislib.ai
Если задачи нет в справочнике, решение может сгенерировать модель — локальная (работает без интернета) или через API. Зависимостей по-прежнему ноль: все бэкенды доступны по OpenAI-совместимому HTTP, общение идёт через stdlib.
from chislib import ai
ai.solve("Найти корень x^2 - ln x - 1 = 0 методом секущих, eps=1e-4")
# → проверенный код в буфере обмена; вывод пустой, как у остальной библиотеки
# из коробки: Mistral, mistral-small-latest (ключ зашит, работает без VPN);
# при сбое — автоматический повтор через OpenRouter (ему нужен VPN)
# ai.configure("ollama", model="qwen2.5-coder:14b") # локальная модель
# ai.configure("openrouter", model="qwen/qwen3-coder:free") # другая модель
# ai.configure("github" / "anthropic" / "deepseek", api_key="...")
# ai.configure(base_url="http://gpu-box:8000/v1", model="...") # свой сервер
ai.solve("...", copy=False) # вернуть текст, не копируя
ai.solve_image("ticket.jpg") # фото билета (нужна vision-модель)
ai.ask("Чем метод секущих лучше Ньютона?") # теорвопрос → краткий ответ
Качество обеспечивают три механизма: системный промпт с правилами экзамена (белый список numpy, комментарии, строка «Ответ:»); похожие готовые решения из справочника подкладываются модели как эталон; сгенерированный код проверяется (белый список + пробный запуск) и при ошибке модель получает один шанс исправиться.
Если активная модель недоступна (перегрузка, лимит, нет соединения), библиотека автоматически идёт по цепочке запасных: Mistral → GitHub Models (gpt-4.1-mini) → OpenRouter. Сообщение о переключении печатается в stderr. Лимиты: Mistral — ~1 запрос/с; GitHub — ~150 запросов/день; OpenRouter free — ~50 запросов/день (и нужен VPN).
Локально (ПК с NVIDIA 16GB): установите Ollama,
затем ollama pull qwen2.5-coder:14b (~9 ГБ, базовый выбор). Альтернативы:
qwen3:14b (сильнее рассуждения), deepseek-r1-distill-qwen:14b (математика,
но медленно), qwen2.5-vl:7b (vision). Решение генерируется за 20–60 с.
Через API: бесплатно — Mistral, GitHub Models и OpenRouter (ключи
зашиты; OpenRouter требует VPN), Groq (свой ключ); дёшево — DeepSeek;
в рублях — VseGPT; максимум качества и vision — Claude/OpenAI. Gemini
поддерживается пресетом, но его API блокирует запросы из ряда регионов.
Свой ключ можно задать через api_key=, переменную CHISLIB_AI_API_KEY
или сохранить: save=True. Для фото билета (solve_image) используйте
ai.configure("github") — gpt-4.1-mini понимает изображения.
ai.check() (или chislib ai check) показывает, какие бэкенды отвечают
из текущей сети: для бэкендов с ключом выполняется настоящая мини-генерация,
так что видно и случаи «запрос уходит, ответ блокируется по дороге».
Запускайте при том состоянии сети (VPN вкл/выкл), в котором будете работать.
Настройки читаются в порядке: configure(...) → переменные CHISLIB_AI_*
→ ~/.config/chislib/ai.json → Ollama по умолчанию.
Ограничения экзамена
Решения написаны под экзаменационный белый список numpy: используются только
array, zeros, zeros_like, linspace, eye, shape, random, poly, roots, transpose, sqrt, log, exp, sin, cos, arctan, tan, mean (плюс арифметические
операторы и matplotlib). Никакого np.linalg, np.fft и т.п. — СЛАУ, QR и
преобразования Фурье реализованы вручную. Соблюдение белого списка проверяется
тестом. Код снабжён комментариями, как требуют правила экзамена.
Состав
- Плавающая точка: суммирование по Кахану (накопление ошибки).
- Нелинейные уравнения: бисекция, простая итерация, релаксация с параметром ускорения, секущие, Ньютон, модифицированный Ньютон, дихотомия (минимизация).
- Системы: итерации для нелинейных систем, Гаусс–Зейдель (СЛАУ и нелинейный), Ньютон 2D, Ньютон с фиксированным якобианом.
- Интерполяция: линейная, Лагранж (с графиком), кубический сплайн (метод прогонки).
- Матрицы: наивное умножение (и вариант с подсчётом числа операций), Штрассен, график времени Штрассена, QR-разложение (Хаусхолдер).
- Собственные значения: характеристический многочлен (poly/roots), степенной метод, обратные итерации со сдвигом, метод вращений Якоби (значения и векторы), QR-алгоритм, Шур.
- Численное дифференцирование: прямая/обратная/центральная разности, вторая производная.
- ОДУ: Эйлер, предиктор-корректор, РК4 (скаляр и система с фазовым портретом), Адамс-Башфорт, Адамс-Мултон (сравнение с Эйлером).
- Фурье: ДПФ/ОДПФ со спектром, БПФ (Кули-Тьюки) с шумом.
- Теория (
chislib.theory.*): ~60 кратких ответов — плавающая точка, погрешности, сходимость, интерполяция, линейная алгебра, ОДУ, сигналы.
Примеры в задачах используют данные реальных билетов (равновесная цена, PageRank-матрица 5×5, высота дрона, рост бактерий, осцилляторы и др.).
Примечание: dichotomy реализует поиск минимума унимодальной функции;
если в вашем курсе «метод дихотомии» — синоним бисекции для поиска корня,
используйте bisection.
Разработка
python -m venv .venv && .venv/bin/pip install numpy
PYTHONPATH=src .venv/bin/python -m unittest tests.test_chislib
Тесты исполняют каждый сниппет решения целиком и проверяют поиск.
Публикация на PyPI
pip install build twine
python -m build # создаст dist/*.tar.gz и dist/*.whl
twine upload dist/* # нужен аккаунт на pypi.org и API-токен
Перед публикацией: поднимите version в pyproject.toml; проверить пакет
без публикации можно через TestPyPI: twine upload -r testpypi dist/*.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chislib-0.3.5.tar.gz.
File metadata
- Download URL: chislib-0.3.5.tar.gz
- Upload date:
- Size: 202.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0c50bf62606f508a2a671dfc586891bc307e9909fccc19a64ea4b246eca831f
|
|
| MD5 |
25ebb65a6326040f1d6b516fab4d07d1
|
|
| BLAKE2b-256 |
ff5a0473533c7ed4c3e90f1c3343a4c60e6f700178cd0f089afdaf45b515584d
|
File details
Details for the file chislib-0.3.5-py3-none-any.whl.
File metadata
- Download URL: chislib-0.3.5-py3-none-any.whl
- Upload date:
- Size: 203.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b3edc412a88da6788ba45ce3593550e369d60186a81b884100dd44eb4697688
|
|
| MD5 |
7ebd9197c15921b1827a8ce7f9902368
|
|
| BLAKE2b-256 |
82808e72d9e8f72f66d591178e5a2d5202b0ae527260b426b2b23838d2901f6c
|