Команда Python for Devs подготовила перевод статьи о том, как превратить код Python в элегантные математические формулы прямо в Jupyter-ноутбуке. Если вы строите финансовые модели, алгоритмы или научные расчёты — LaTeX поможет оформить их профессионально. В статье разбираем четыре инструмента: IPython.display.Latexдля ручного рендеринга, handcalcs для пошаговых вычислений, latexify-py для автоматического преобразования функций и SymPy для символьной математики.
Представьте, что вы финансовый аналитик, строите финансовые модели на Python и должны презентовать их нетехническим руководителям. Поскольку они не знакомы с Python, вам нужно показать не просто фрагменты кода, а математические основы ваших алгоритмов. Как это сделать?
Лучший способ представить математические модели — использовать LaTeX. Это мощный инструмент для записи математических обозначений и уравнений, широко применяемый в научных статьях, исследованиях и технических отчётах.
Однако писать LaTeX вручную непросто, особенно для сложных выражений. В этой статье вы узнаете, как конвертировать код Python в LaTeX в Jupyter-ноутбуках с помощью четырёх мощных инструментов: IPython.display.Latex, handcalcs, latexify-py и SymPy.
Полный исходный код и Jupyter-ноутбук к этому руководству доступны на GitHub. Клонируйте репозиторий, чтобы идти по шагам!
Ключевые выводы
Вот чему вы научитесь:
Превращать вычисления на Python в профессионально оформленные формулы LaTeX с помощью четырёх специализированных инструментов.
Автоматически генерировать пошаговую математическую документацию с magic-командами handcalcs.
Мгновенно конвертировать функции Python в аккуратную LaTeX-запись с помощью декораторов latexify-py.
Выполнять символьную математику — от решения уравнений до алгебраических преобразований — с помощью SymPy.
Настройка окружения
Установите необходимые пакеты с помощью pip или uv.
# Using pip
pip install handcalcs latexify-py sympy
# Using uv (recommended)
uv add handcalcs latexify-py sympyIPython.display.Latex: встроенный рендеринг LaTeX
Самый простой подход — использовать встроенный в Jupyter рендеринг IPython.display.Latex. Он идеален, когда вам нужен точный контроль над математическими обозначениями.
Давайте создадим профессионально оформленный расчёт сложных процентов.
Начните с определения переменных: где P — начальная сумма (principal), r — годовая процентная ставка, а t — число лет.
P = 10000 # principal amount
r = 0.08 # annual interest rate
t = 5 # number of yearsТеперь мы готовы вывести вычисление в LaTeX. Чтобы за ним было проще следить, разобьём его на три части:
Показать формулу
Подставить переменные в формулу
Вывести результат
# Calculate result
A = P * (1 + r) ** t
# Display the calculation with LaTeX
display(Latex(r"$A = P(1 + r)^t$"))
display(Latex(f"$A = {P:,}(1 + {r})^{{{t}}}$"))
display(Latex(f"$A = {A:,.2f}$"))Такой подход демонстрирует пошаговые подстановки, но писать LaTeX для каждого шага вручную — долго и неудобно.
Было бы здорово, если бы шаги, подстановки и LaTeX-код генерировались автоматически прямо при написании кода на Python? Именно здесь и пригодится handcalcs.
Handcalcs: пошаговые вычисления
handcalcs автоматически превращает вычисления на Python в пошаговую математическую документацию. Идеально подходит для технических отчётов и учебных материалов.
Magic-команда Jupyter
Чтобы использовать handcalcs в Jupyter, сначала нужно загрузить расширение.
import handcalcs.render
from handcalcs import handcalc
# Enable handcalcs in Jupyter
%load_ext handcalcs.renderТеперь можно применить magic-команду %%render, чтобы отрендерить вычисление.
%%render
# Step-by-step substitutions for compound interest
A = P * (1 + r)**tВ результате вы получите полноценный пошаговый расчёт с показом всех подстановок и промежуточных результатов — и ни одной строчки LaTeX вручную!
Декоратор функции
Используйте декоратор функции, чтобы отрендерить вычисления. Установите jupyter_display=True, чтобы показывать LaTeX в Jupyter.
from handcalcs import handcalc
@handcalc(jupyter_display=True)
def calculate_compound_interest(P, r, t):
A = P * (1 + r)**t
return A
# Calling the function renders the calculation with substitutions
result = calculate_compound_interest(10000, 0.08, 5)Результат — простое число, которое можно использовать в дальнейших вычислениях.
result
print(f"Result: {result:,.2f}")Вывод:
Result: 14,693.28Latexify-py: автоматическое преобразование функций
В отличие от handcalcs, который выводит пошаговые численные подстановки, latexify-py фокусируется на документировании на уровне функций без промежуточной арифметики. Идеально, когда нужна чистая, многократно используемая формула и нет необходимости показывать промежуточные шаги.
import latexify
# Simple function conversion
@latexify.function
def A(P, r, t):
return P * (1 + r) ** t
AФункцию из latexify-py можно использовать как обычную функцию Python для вычисления результата.
result = A(10000, 0.08, 5)
print(f"Result: {result:,.2f}")Вывод:
Result: 14,693.28SymPy: символьная математика
handcalcs и latexify-py отлично подходят для получения наглядных результатов при подстановке конкретных значений, но они не рассчитаны на символьные задачи — такие как решение уравнений по переменной, вычисление производных или интегралов. Для таких задач используйте SymPy.
Чтобы создать символьное уравнение, начните с определения переменных и самого уравнения.
from sympy import symbols, Eq, solve
# Define the variables
A, P, r, t = symbols("A P r t", positive=True)
# Define the equation
eq = Eq(A, P * (1 + r) ** t)
eqПосле задания уравнения можно переходить к символьным вычислениям.
Подстановка переменных
Давайте вычислим A (сумму) по заданным P (начальный вклад), r (процентная ставка) и t (время), решив уравнение относительно A и подставив значения.
# Solve for A
A_expr = solve(eq, A)[0]
# Substitute the values
A_result = A_expr.subs({P: 10000, r: 0.08, t: 5})
A_resultРешение относительно переменной
Решим уравнение относительно t, чтобы ответить на вопрос: «За сколько лет инвестиция достигнет A (суммы) при заданных P (начальном вкладе) и r (процентной ставке)?»
t_sol = solve(eq, t)[0]
t_solРезультат — формула для вычисления t.
Теперь можно подставить переменные в уравнение, чтобы ответить на более конкретный вопрос: «Сколько лет потребуется, чтобы инвестиция достигла $5 000 при начальной сумме $1 000 и годовой ставке 8%?»
t_result = t_sol.subs({P: 1000, r: 0.08, A: 5000}).evalf(2)
t_resultРезультат показывает, что до $5 000 инвестиция дойдёт примерно за 21 год.
Раскрытие и разложение выражения
Мы также можем использовать SymPy, чтобы раскрыть выражение и разложить его на множители.
Предположим t = 2. При годовой ставке rrr и двух периодах начисления сложных процентов выражение принимает вид:
compound_expr = P * (1 + r) ** 2
compound_exprРаскроем выражение с помощью функции expand.
from sympy import expand
expanded_expr = expand(compound_expr)
expanded_exprЗатем можно вернуть выражение к произведению множителей с помощью функции factor.
from sympy import factor
factored_expr = factor(expanded_expr)
factored_exprИтоги
Преобразование кода Python в LaTeX в Jupyter-ноутбуках превращает вашу техническую документацию из перегруженной кодом в математически изящную. Когда что использовать:
Используйте IPython.display.Latex, когда вам нужен точный контроль над математической нотацией.
Используйте handcalcs, когда нужна пошаговая документация вычислений.
Используйте latexify-py, когда требуется автоматическое преобразование функции в LaTeX.
Используйте SymPy, когда нужно решать уравнения, вычислять производные и интегралы.
Русскоязычное сообщество про Python

Друзья! Эту статью подготовила команда Python for Devs — канала, где каждый день выходят самые свежие и полезные материалы о Python и его экосистеме. Подписывайтесь, чтобы ничего не пропустить!