Установка
Поставить и попробовать
Пакет опубликован на PyPI под именем balansis. Обязательных зависимостей две — numpy и pydantic; ни C-расширений, ни системных библиотек в обязательном пути установки нет.
Установка
pip install balansis # текущая версия — 1.1.0
pipx install balansis # если нужен только CLI
python -c "import balansis; print(balansis.__version__)"
# 1.1.0| Файл | balansis-1.1.0-py3-none-any.whl |
|---|---|
| Размер | 96 КБ |
| Опубликован | 2026-08-31T03:19:21.786970Z |
| Требует Python | <4.0,>=3.10 |
| Лицензия в метаданных | AGPL-3.0-only |
| sha256 колеса | 2445ae239cb21e48e5b267e5364e161cc6b89a0fbaef90160bf88bd3eae0b828 |
| Сверка | sha256 скачанного файла совпал с digest из API PyPI; все 35 .py-файлов установленного пакета побайтово равны содержимому колеса |
Проверить, что установилось именно то
pip download balansis==1.1.0 --no-deps -d /tmp/w
sha256sum /tmp/w/balansis-1.1.0-py3-none-any.whl
# 2445ae239cb21e48e5b267e5364e161cc6b89a0fbaef90160bf88bd3eae0b828
curl -s https://pypi.org/pypi/balansis/1.1.0/json \
| python -c "import json,sys; print(json.load(sys.stdin)['urls'][0]['digests']['sha256'])"CLI
Ниже — вывод команд того же прогона: скрипт бенчмарков запускает CLI установленного пакета и кладёт его stdout в data/benchmarks.json, откуда страница его и печатает. Вписать сюда что-то другое руками нельзя — блок собирается из данных. Снято 2026-09-08
$ balansis doctor
{"compensation": 1e-12, "operation": "compensated_add", "result": 0.0, "status": "ok", "version": "1.1.0"}
$ balansis add 0.1 0.2 --json
{"compensation": 1.0, "left": 0.1, "operation": "compensated_add", "result": 0.30000000000000004, "right": 0.2}0.1 + 0.2 здесь даёт то же самое 0.30000000000000004, что и обычный float. Balansis не «чинит» двоичное представление десятичных дробей и не заменяет Decimal. Он работает там, где потеря точности возникает при накоплении и при взаимном уничтожении слагаемых, а не при вводе десятичного литерала.Первые вызовы API
Значения в комментариях получены тем же прогоном — это результат вызовов, а не ожидание автора. Снято 2026-09-08
from balansis import AbsoluteValue as Bv, Operations, SingularPolicy
# 1. Компенсация возвращается вместе с результатом
values = [Bv.from_float(v) for v in (1e16, 1.0, -1e16)]
total, compensation = Operations.sequence_sum(values)
total.to_float() # 1
compensation # 1.000e+15 — столько точности пришлось спасать
# 2. Ноль как состояние, а не как маленькое число
Bv.absolute().is_absolute() # True
# 3. Деление на ноль: состояние + политика
ratio, _ = Operations.compensated_divide_extended(Bv.from_float(1.0), Bv.absolute())
ratio.kind # 'infinite'
ratio.reason # 'finite_over_absolute'
value, _, event = Operations.compensated_divide_policy(
Bv.from_float(1.0), Bv.absolute(), policy=SingularPolicy.SATURATE
)
value.numerical_value() # 1000000000000Быстрый путь: без объектов
Если нужна точность, а не типы, берите примитивы напрямую — они работают на голых float и стоят в разы, а не в десятки раз дороже обычной арифметики (см. цену компенсации).
from balansis.core._eft import two_sum, two_product, dot2
from balansis.numpy_integration import compensated_dot_product, compensated_softmax
s, err = two_sum(1e16, 1.0) # s = 10000000000000000, err = 1
# s + err == 1e16 + 1.0 точно (проверено в рациональной арифметике)
value = dot2(a, b) # корректно округлённое скалярное произведениеЧто ещё есть в пакете
Модули
core (арифметика и EFT-примитивы), linalg (matmul, QR, SVD с телеметрией), numpy_integration (мост к массивам), finance/ledger, ml/optimizer, algebra, cli.
Документация и примеры
Пять Jupyter-ноутбуков в examples/, справочник API и материалы по формальной верификации в docs/ репозитория.
Совместимость
В метаданных релиза: Requires-Python <4.0,>=3.10, а классификаторы объявляют 3.10–3.14. Числа на этом сайте получены только на Python 3.12.3 и numpy 1.26.4; на остальных версиях прогон не выполнялся, и заявлять его результат было бы нечестно.
Лицензия
Двойное лицензирование: AGPL-3.0-only для открытых проектов и коммерческая лицензия для закрытых. Условия и маршрутизация — в LICENSING.md. Патентов по этой работе нет и не подаётся.
Исходники: github.com/StudyLabPro/Balansis. Пакет: pypi.org/project/balansis.