EExponQuay
Сценарии

Сценарии работы с кодом · Устойчивое агрегирование log-sum-exp

03
Вокруг ваших задач

Конкретная отправная точка

Агрегируйте до 1000 логарифмических значений от минус 1e300 до 1e300, вычитая максимум перед экспоненцированием. Проверьте пустой ввод, повторяющиеся большие и очень отрицательные значения, возвращая минус бесконечность только для пустого ввода и отклоняя логические, неконечные или выходящие за диапазон элементы.

01

Откройте контекст

Выберите папку проекта и обозначьте нужные файлы или поведение.

02

Опишите изменение

Укажите входные данные, ожидаемый результат и границы, которые нужно сохранить.

03

Изучите работу

Проверьте предлагаемые изменения и команды, прежде чем полагаться на результат.

04

Проверьте результат

Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.

Устойчивое агрегирование log-sum-exp

Конкретная отправная точка
from math import exp, fsum, log, inf

def log_sum_exp(values):
    if type(values) not in (list, tuple) or len(values) > 1000:
        raise ValueError("values.container")
    values = tuple(values)
    if len(values) > 1000 or any(
        type(v) not in (int, float) or not -1e300 <= v <= 1e300 for v in values
    ):
        raise ValueError("values.range")
    if not values:
        return -inf
    peak = max(values)
    return peak + log(fsum(exp(v - peak) for v in values))

Пример — отправная точка для реального проекта, а не утверждение, что сгенерированный код уже протестирован. Адаптируйте пути, зависимости и ожидаемое поведение к своему приложению.

Рабочая среда с ИИ для кода

Здесь начинается ваше следующее изменение.

Скачать для Windows ↗