Python Tutor прокручивает вашу программу по шагам прямо в браузере
Результат неверный, а где именно состояние поехало — непонятно, и код обрастает
Ставить ничего не нужно, регистрации нет, код вставляется прямо на странице. Кроме Python поддерживаются Java, C, C++ и JavaScript. С 2010 года сервисом воспользовались больше 25 млн человек, он построил свыше 500 млн визуализаций.
В нашем канале «Точка входа» разобрали подробнее.
Результат неверный, а где именно состояние поехало — непонятно, и код обрастает
print. Python Tutor запускает программу на pythontutor.com и позволяет ходить по шагам вперёд и назад: видно значения переменных, как меняются списки и словари, какие объекты друг на друга ссылаются, какая функция выполняется и откуда её вызвали.Ставить ничего не нужно, регистрации нет, код вставляется прямо на странице. Кроме Python поддерживаются Java, C, C++ и JavaScript. С 2010 года сервисом воспользовались больше 25 млн человек, он построил свыше 500 млн визуализаций.
В нашем канале «Точка входа» разобрали подробнее.
🔥1
Вышел Python 3.15.0rc2: до финала 1 октября осталось проверить свои пакеты
Второй релиз-кандидат опубликован 1 сентября: 144 исправления от 76 участников после rc1. Главное в нём то, чего уже не будет: ABI заморожен, и wheels, собранные на rc2, будут работать с финальной 3.15 и всеми её патч-версиями. Значит, мейнтейнеры расширений на C могут собирать и выкладывать колёса под 3.15 уже сейчас.
🔘 экспериментальный JIT даёт в среднем 8–9% к обычному интерпретатору на x86-64 Linux и 12–13% к tail-calling-интерпретатору на AArch64 macOS, разработчики просят прогнать на нём свои нагрузки и сообщить о регрессиях
🔘 в прод rc2 ставить не рекомендуют, для CI и тестов совместимости он и предназначен
Ставится через
Что означает заморозка ABI, сколько даёт JIT и что проверить мейнтейнеру разобрали на сайте.
@zen_of_python
Второй релиз-кандидат опубликован 1 сентября: 144 исправления от 76 участников после rc1. Главное в нём то, чего уже не будет: ABI заморожен, и wheels, собранные на rc2, будут работать с финальной 3.15 и всеми её патч-версиями. Значит, мейнтейнеры расширений на C могут собирать и выкладывать колёса под 3.15 уже сейчас.
Ставится через
uv python install 3.15.0rc2 или с python.org.Что означает заморозка ABI, сколько даёт JIT и что проверить мейнтейнеру разобрали на сайте.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
Python.org
Python Release Python 3.15.0rc2
The official home of the Python Programming Language
❤2👍1
uv 0.12.9 закрыл проблему с памятью при чтении чужих wheel и добавил CPython 3.15.0rc2
Релиз 1 сентября. Из важного:
🔘 обновлён
🔘 чувствительные заголовки больше не утекают при редиректах между зонами аутентификации, включая смену схемы на том же хосте;
🔘 секреты в подписанных URL вырезаются из диагностики повторов;
🔘 новые флаги
🔘 холодная установка wheel быстрее: каждый ZIP распаковывается в одной блокирующей задаче с переиспользованием буферов;
🔘 добавлен CPython 3.15.0rc2.
Если ставите пакеты из сторонних индексов, обновляйтесь. Заметки к релизу.
@zen_of_python
Релиз 1 сентября. Из важного:
async_http_range_reader до 0.11.1: закрыта потенциальная проблема memory-safety при чтении метаданных из недоверенных wheel по HTTP range;--no-locked и --no-frozen отключают режимы из UV_LOCKED и UV_FROZEN на один вызов, а --locked, --frozen, --check теперь важнее переменных окружения;Если ставите пакеты из сторонних индексов, обновляйтесь. Заметки к релизу.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥1
Повторите 44% на ARC-AGI-1 на PyTorch за полтора часа и 67 центов
ARC-AGI-1 это тысяча задач на цветных сетках, где по паре примеров нужно угадать правило. Митхил Вакде обучил трансформер на 75 млн параметров с нуля и получил 44% на публичном eval за 1,5 часа на RTX 5090. Код открыт под MIT.
🔘 задачи превращаются в последовательности токенов, модель учится авторегрессионно;
🔘 обучение во время теста: на train- и eval-задачах при скрытых ответах;
🔘 обучаемые 3D RoPE для двумерных сеток и отдельный additive embedding на задачу;
🔘 8 слоёв, SwiGLU вместо GELU, RMSNorm вместо LayerNorm, flash attention с varlen на обучении, flex attention на inference;
🔘 удаление обучения на входных токенах подняло результат с 40% до 44%, автор пишет «я не понимаю почему»;
🔘 нужны CUDA выше 12.8, лучше 13.0; на ARC-2 та же модель даёт 7%.
Репозиторий mdlARC, ограничения замера разобрали на сайте.
@zen_of_python
ARC-AGI-1 это тысяча задач на цветных сетках, где по паре примеров нужно угадать правило. Митхил Вакде обучил трансформер на 75 млн параметров с нуля и получил 44% на публичном eval за 1,5 часа на RTX 5090. Код открыт под MIT.
Репозиторий mdlARC, ограничения замера разобрали на сайте.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
PyTorch 2.14 уже собран под Python 3.15, но компилировать модели под ним пока нельзя
PyTorch Foundation выпустила 2.14: 2995 коммитов от 487 участников.
🔘 wheels для Python 3.15 и free-threaded 3.15t есть для Linux, Windows и macOS, но лежат на download․pytorch․org, не на PyPI;
🔘
🔘
🔘 удалены
🔘 у скалярного
Сам Python 3.15 выходит 1 октября, второй rc был 1 сентября, так что проверить совместимость кода можно уже сейчас, а замеры с компиляцией придётся отложить. Чек-лист обновления на сайте.
@zen_of_python
PyTorch Foundation выпустила 2.14: 2995 коммитов от 487 участников.
torch.compile под 3.15 в этом релизе не работает и завершается RuntimeError, только eager;torch.switch обобщает torch.cond на несколько веток, torch.while_loop захватывается CUDA Graphs;torch.cholesky, torch.qr, параметр профилировщика use_cuda; acc_policy="balanced" теперь ValueError;clamp градиент на границе стал 0 вместо 1, модели с клиппингом могут учиться иначе.Сам Python 3.15 выходит 1 октября, второй rc был 1 сентября, так что проверить совместимость кода можно уже сейчас, а замеры с компиляцией придётся отложить. Чек-лист обновления на сайте.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Polars 2.0 RC: после обновления ваши
Polars выпустила первый release candidate версии 2.0. Автор библиотеки Ричи Винк пишет, что релиз должен быть «скучным»: новых функций почти нет, меняются дефолты. Главный из них:
Вторая часть релиза про то, чтобы падать сразу, а не через 20 минут работы пайплайна.
Поставить в отдельное окружение:
@zen_of_python
join и group_by могут вернуть строки в другом порядкеPolars выпустила первый release candidate версии 2.0. Автор библиотеки Ричи Винк пишет, что релиз должен быть «скучным»: новых функций почти нет, меняются дефолты. Главный из них:
LazyFrame.collect() теперь идёт через потоковый движок, который обрабатывает данные порциями. Авторы ожидают, что в совокупности он «легко в 5 раз быстрее», но порядок строк после join, group_by и unpivot он не гарантирует. Если код молча полагался на порядок, например брал head(1) после группировки, добавьте maintain_order (у join и group_by) или явный sort. Старый движок возвращается через pl.Config.set_engine_affinity("in-memory").Вторая часть релиза про то, чтобы падать сразу, а не через 20 минут работы пайплайна.
is_in между Int64 и Float64 больше не округляет молча: 9007199254740993 раньше превращался в 9007199254740992 и давал ложное совпадение, теперь InvalidOperationError. Горизонтальный concat таблиц разной высоты бросает ShapeError вместо заполнения null. Вместо cast(pl.Date) только .str.to_date(), вместо каста целых в Enum только .cat.to(). В CSV без заголовка колонки теперь нумеруются с column_0. Большинство удалённых методов отвечают AttributeRemovedError с подсказкой, чем заменить.Поставить в отдельное окружение:
pip install polars==2.0rc1. Чек-лист, что проверить до финального релиза, собрали на сайте.@zen_of_python
Что происходит между
🔘
🔘
🔘 реестр встроенных ufunc порождается скриптом
🔘 циклы собираются в нескольких вариантах под наборы инструкций (
Какой вариант реально работает у вас, покажет
@zen_of_python
np.add(a, b) и SIMD-циклом: разбор пути одного вызоваnp.add не функция Python, а объект C-типа numpy.ufunc с 22 сигнатурами в np.add.types. Файт Хеллер прослеживает, что происходит с вызовом для dd->d, двух массивов float64.ufunc_generic_vectorcall и ufunc_generic_fastcall проверяют overrides и конвертируют аргументы;promote_and_get_ufuncimpl и resolve_descriptors выбирают реализацию и dtype результата;generate_umath.py в файл __umath_generated.c; для add bool-цикл переиспользует logical_or, а object-массивы уходят в PyNumber_Add;X86_V2, X86_V3, NEON, ASIMD), и нужный выбирается при импорте.Какой вариант реально работает у вас, покажет
numpy.lib.introspect.opt_func_info(func_name="add", signature="float64").@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
После обновления на Polars 2.0 ваши join и group_by могут вернуть строки в другом порядке
Ричи Винк выпустил первый release candidate Polars 2.0 и сам называет релиз скучным: новых функций почти нет, мажорную версию подняли, чтобы избавиться от старых решений и поменять дефолты.
Главная смена дефолта: все запросы
Если код где-то молча полагался на порядок после
Ричи Винк выпустил первый release candidate Polars 2.0 и сам называет релиз скучным: новых функций почти нет, мажорную версию подняли, чтобы избавиться от старых решений и поменять дефолты.
Главная смена дефолта: все запросы
LazyFrame теперь идут через потоковый движок, который обрабатывает данные порциями. В совокупности авторы ожидают «легко в 5 раз быстрее» и заметно меньше памяти. Плата за это в том, что порядок строк после операций больше не гарантирован.Если код где-то молча полагался на порядок после
join или group_by, он сломается тихо. К релизу выложен полный migration guide, и заглянуть в него стоит до того, как обновитесь.Polars
Pre-release of Polars 2.0
Preview of Python Polars 2.0, bringing the streaming engine to all lazy queries
Почему CPython остаётся стековой машиной, а её соседи уходят на регистры
Байткод CPython стековый:
Замеры честные: 11 чередующихся запусков, медиана, повтор набора; в сравнении участвовал и CPython 3.14.6, но автор оговаривает разную семантику языков. Вывод один: в интерпретаторе главный рычаг это число инструкций на диспетчеризацию. Как устроено новое 64-битное слово инструкции и почему Lua ограничена 255 регистрами на фрейм, на сайте.
@zen_of_python
Байткод CPython стековый:
a + b это LOAD_FAST a, LOAD_FAST b, BINARY_OP. Максим Шевалье-Буавер, в прошлом автор YJIT для Ruby, измерила на своём языке Plush, сколько стоит такая модель: после перехода на регистровый байткод, где то же сложение одна инструкция с тремя операндами, медианное ускорение по тестам составило 2,07 раза, максимальное 3,37, а тесты сборщика мусора не изменились вовсе.Замеры честные: 11 чередующихся запусков, медиана, повтор набора; в сравнении участвовал и CPython 3.14.6, но автор оговаривает разную семантику языков. Вывод один: в интерпретаторе главный рычаг это число инструкций на диспетчеризацию. Как устроено новое 64-битное слово инструкции и почему Lua ограничена 255 регистрами на фрейм, на сайте.
@zen_of_python
CPython официально поддерживает RISC-V как платформу третьего уровня
Работа шла несколько месяцев, и теперь RISC-V официально поддержан в CPython как tier 3. Для питониста это означает, что сборки под эту архитектуру перестали быть самодеятельностью и попали в зону ответственности проекта.
RISC-V это открытая система команд: в отличие от x86 и ARM, она развивается как открытый стандарт, и реализовать её может кто угодно. Экосистема за последние годы выросла заметно.
Третий уровень означает поддержку без гарантий на каждый релиз: сборка проверяется, но падение на этой платформе не блокирует выпуск. Для продакшена на RISC-V это ещё не зелёный свет, а сигнал, что можно начинать проверять свои колёса.
#cpython
Работа шла несколько месяцев, и теперь RISC-V официально поддержан в CPython как tier 3. Для питониста это означает, что сборки под эту архитектуру перестали быть самодеятельностью и попали в зону ответственности проекта.
RISC-V это открытая система команд: в отличие от x86 и ARM, она развивается как открытый стандарт, и реализовать её может кто угодно. Экосистема за последние годы выросла заметно.
Третий уровень означает поддержку без гарантий на каждый релиз: сборка проверяется, но падение на этой платформе не блокирует выпуск. Для продакшена на RISC-V это ещё не зелёный свет, а сигнал, что можно начинать проверять свои колёса.
#cpython
Python Insider
RISC-V is now officially supported by CPython! | Python Insider
I’m happy to announce that RISC-V platforms are now officially supported by CPython. 🎉 🚀
Два класса с именем Helper в разных модулях затирают друг другу
Name mangling переименовывает
В нашем канале «Точка входа» разобрали подробнее.
@zen_of_python
__valueName mangling переименовывает
__value в _Helper__value только по имени класса, без учёта модуля. Если два независимых класса Helper хранят __value, а кто-то наследуется от обоих, поле оказывается общим: один кладёт строку, другой число, сложение падает с TypeError. Именно этот пример сейчас обсуждают на форуме разработчиков Python в споре о настоящей приватности; рецепт на сегодня: одно подчёркивание и композиция вместо двойного наследования.В нашем канале «Точка входа» разобрали подробнее.
@zen_of_python
❤1
Документация Python официально вышла на русском языке
Перевод объявлен официально и доступен на docs.python.org. Сделало его сообщество, и это тот случай, когда вклад волонтёров превращается в инфраструктуру языка.
Практический смысл двойной. Своим джунам теперь можно давать ссылку на официальную документацию, а не на пересказ с непонятной родословной. И при споре о терминологии появляется общая опора: как называется вещь по-русски, решает не переводчик статьи, а перевод самой документации.
Отставать от оригинала перевод будет ровно настолько, насколько его перестанут поддерживать, так что если найдёте кривое место, чинится оно пул-реквестом.
Перевод объявлен официально и доступен на docs.python.org. Сделало его сообщество, и это тот случай, когда вклад волонтёров превращается в инфраструктуру языка.
Практический смысл двойной. Своим джунам теперь можно давать ссылку на официальную документацию, а не на пересказ с непонятной родословной. И при споре о терминологии появляется общая опора: как называется вещь по-русски, решает не переводчик статьи, а перевод самой документации.
Отставать от оригинала перевод будет ровно настолько, насколько его перестанут поддерживать, так что если найдёте кривое место, чинится оно пул-реквестом.
Python Insider
The Python documentation is now available in Russian! | Python Insider
The official blog of the Python core development team.
👍6❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Запрограммируй робота на Python и поборись за призовой фонд трека 7 500 000 ₽ на True Tech Champ 2026.
Попробуй себя в треке по программированию роботов. Начать проще, чем кажется: зарегистрируйся, собери команду или объединись с другими участниками на платформе и пройди квалификационный этап до 13 сентября. В онлайн-симуляторе тебе предстоит запрограммировать робособаку для доставки груза через полосу препятствий. Количество попыток не ограничено, а еще тебя будет ждать серия обучающих вебинаров.
Лучшие команды пройдут в финал и будут программировать реальных роботов на офлайн-полигоне, 22 октября, на большой сцене.
Масштабный финал объединит борьбу за призовой фонд, выступления хедлайнеров, доклады спикеров и активности для всех гостей мероприятия.
Рекомендуемые стеки: Go, Java, Python, C#, C++, JS.
Успей зарегистрироваться и пройти квалификацию до 13 сентября.
Erid:2VSb5yJrsAz
Попробуй себя в треке по программированию роботов. Начать проще, чем кажется: зарегистрируйся, собери команду или объединись с другими участниками на платформе и пройди квалификационный этап до 13 сентября. В онлайн-симуляторе тебе предстоит запрограммировать робособаку для доставки груза через полосу препятствий. Количество попыток не ограничено, а еще тебя будет ждать серия обучающих вебинаров.
Лучшие команды пройдут в финал и будут программировать реальных роботов на офлайн-полигоне, 22 октября, на большой сцене.
Масштабный финал объединит борьбу за призовой фонд, выступления хедлайнеров, доклады спикеров и активности для всех гостей мероприятия.
Рекомендуемые стеки: Go, Java, Python, C#, C++, JS.
Успей зарегистрироваться и пройти квалификацию до 13 сентября.
Erid:2VSb5yJrsAz
🔥1
SpaceWeb исполнилось 25 лет — и вместо скучного пресс-релиза компания вместе с Типичным программистом сделала забавную анкету. Вопросы школьные: любимый спорт, лучший друг, обои на рабочий стол. А вокруг — аська, скайп, биткоин и всё остальное, чем жил рунет с 2001 по 2026 год, плюс короткая история веба и самой компании.
В конце — заглянем в будущее, дадим промокод на услуги SpaceWeb и покажем результат заполнения анкеты.
В конце — заглянем в будущее, дадим промокод на услуги SpaceWeb и покажем результат заполнения анкеты.
❤2
Найти повторяющиеся строки просто, а вот решить, что считать одинаковым кодом, уже нет
Задача звучит тривиально: есть исходники, найди последовательности строк, которые встречаются больше одного раза. Автор Arid, чекера дублей для Python, начинал ровно с этой формулировки.
Ответ, как обычно, оказался «зависит от того, что вы имеете в виду». Переименованная переменная, другой порядок аргументов, вынесенный в константу литерал — текстуально это разный код, а по смыслу тот же самый.
Разбор интересен именно этим: как выбрать уровень абстракции, на котором сравнивать, и где проходит граница между дублем и совпадением. Полезно, если у вас в CI стоит проверка на дубли и вы не понимаете её вердиктов.
Задача звучит тривиально: есть исходники, найди последовательности строк, которые встречаются больше одного раза. Автор Arid, чекера дублей для Python, начинал ровно с этой формулировки.
Ответ, как обычно, оказался «зависит от того, что вы имеете в виду». Переименованная переменная, другой порядок аргументов, вынесенный в константу литерал — текстуально это разный код, а по смыслу тот же самый.
Разбор интересен именно этим: как выбрать уровень абстракции, на котором сравнивать, и где проходит граница между дублем и совпадением. Полезно, если у вас в CI стоит проверка на дубли и вы не понимаете её вердиктов.
DEV Community
Detecting Duplicate Python Code Is Harder Than Comparing Text
Detecting Duplicate Python Code Is Harder Than Comparing Text The hard part isn't finding...
Автор написал токенизатор, RoPE и SwiGLU руками и обучил модель на бытовой видеокарте
Развернуть Unsloth и дообучить Llama 3 за вечер несложно. Автор захотел посмотреть, что будет, если так не делать, и написал всё сам: BPE-токенизатор, RoPE, блоки SwiGLU и цикл обучения на чистом PyTorch.
Получилась EmsyAI версии 4 на 196,7 млн активных параметров: около 180 млн в блоках трансформера, остальное в эмбеддингах словаря примерно на 16 тысяч токенов. Обучение прошло на 1,96 млрд токенов и на потребительской видеокарте.
Ценность тут не в качестве модели, а в том, что каждый слой написан руками и его видно. Если вы читали про RoPE и SwiGLU, но не собирали их сами, это готовый маршрут.
Развернуть Unsloth и дообучить Llama 3 за вечер несложно. Автор захотел посмотреть, что будет, если так не делать, и написал всё сам: BPE-токенизатор, RoPE, блоки SwiGLU и цикл обучения на чистом PyTorch.
Получилась EmsyAI версии 4 на 196,7 млн активных параметров: около 180 млн в блоках трансформера, остальное в эмбеддингах словаря примерно на 16 тысяч токенов. Обучение прошло на 1,96 млрд токенов и на потребительской видеокарте.
Ценность тут не в качестве модели, а в том, что каждый слой написан руками и его видно. Если вы читали про RoPE и SwiGLU, но не собирали их сами, это готовый маршрут.
DEV Community
Building a 200M parameter LLM from scratch in PyTorch
It's really easy to spin up Unsloth and fine-tune Llama 3 in an afternoon. I wanted to see what...
В Python шесть предобъявленных констант, и каждая ведёт себя по-своему
Первая тройка это вообще не идентификаторы, а собственные лексические токены: разрешаются в лексере, а не при обычном разрешении имён. Побочный эффект в том, что выражение
Отдельный случай
True, False, None, __debug__, Ellipsis и NotImplemented. Автор разбирает, чем они отличаются, и различий больше, чем ожидаешь.Первая тройка это вообще не идентификаторы, а собственные лексические токены: разрешаются в лексере, а не при обычном разрешении имён. Побочный эффект в том, что выражение
x.True даёт SyntaxError, и больше в языке так не ведёт себя ничего.Отдельный случай
__debug__: обычный идентификатор, но единственный, которому нельзя присвоить значение, причём даже как атрибуту. При этом x.__debug__ даёт уже AttributeError, потому что синтаксически это законно. Хорошая заметка на вечер, если любите тёмные углы языка.