Установка

Поставить и попробовать

Пакет опубликован на PyPI под именем balansis. Обязательных зависимостей две — numpy и pydantic; ни C-расширений, ни системных библиотек в обязательном пути установки нет.

Установка

Для повторения опубликованных результатов установите указанную версию в отдельное окружение. На сайте измерена версия 1.1.0; это не утверждение о том, какой релиз сейчас последний. Команды ниже относятся к ней.

python -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install "balansis==1.1.0" "numpy==1.26.4"

python -c "import balansis; print(balansis.__version__)"
# 1.1.0

В PowerShell активация: .venv\Scripts\Activate.ps1. Окружение сохранённого прогона — Python 3.12.3. Старые зависимости этого релиза могут не иметь колёс для новых Python; для воспроизведения используйте ту же минорную версию Python, а для нового релиза следуйте его собственным требованиям.

Метаданные релиза, полученные из JSON-API PyPI во время прогона бенчмарков. Проверено 2026-09-08
Файл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-файлов установленного пакета побайтово равны содержимому колеса

Проверить, что установилось именно то

python -m 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 версии 1.1.0 из опубликованного прогона. Вывод вашей установки можно сравнить с ним. Снято 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. Модуль _eft внутренний; его API может меняться. Публичный вход для скалярного произведения этой версии — compensated_dot_product, полный пример находится в разделе примеров.

from fractions import Fraction
from balansis.core._eft import two_sum

s, err = two_sum(1e16, 1.0)        # s = 10000000000000000, err = 1
assert (Fraction(s) + Fraction(err)
        == Fraction(1e16) + Fraction(1.0))

Точна сумма двух компонентов в рациональной арифметике. Выражение s + err на обычных float снова округлится. dot2 в этом релизе не гарантирует корректное округление для всех входов и может терять поправки при underflow.

Что ещё есть в пакете

Модули

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.