Forwarded from DeepSchool
Краткая история механизма внимания в NLP
Механизм внимания — один из ключевых компонентов современных нейросетей, позволяющий моделям концентрироваться на важных фрагментах данных. Это повлияло на улучшения в разных областях: NLP, Robotics и GenAI. В новой статье рассказываем историю появления и развития механизма внимания👨🏼💻
Из этой статьи вы узнаете:
- какие были предпосылки появления механизма внимания
- какие основные принципы работы self-attention, cross-attention и multi-head self-attention
- и как работает позиционное кодирование и маскирование
Читайте статью по ссылке! 👈
Механизм внимания — один из ключевых компонентов современных нейросетей, позволяющий моделям концентрироваться на важных фрагментах данных. Это повлияло на улучшения в разных областях: NLP, Robotics и GenAI. В новой статье рассказываем историю появления и развития механизма внимания👨🏼💻
Из этой статьи вы узнаете:
- какие были предпосылки появления механизма внимания
- какие основные принципы работы self-attention, cross-attention и multi-head self-attention
- и как работает позиционное кодирование и маскирование
Читайте статью по ссылке! 👈
DeepSchool
Краткая история механизма внимания в NLP - DeepSchool
Рассказываем краткую историю появления и развития механизма внимания.
Forwarded from Korenev AI - GPT в тапочках🩴
Сейчас читаю книгу Криса Восса «Договориться не проблема».
Восс больше 20 лет работал в ФБР и специализировался на переговорах с террористами, особенно когда заложниками были дети. Сегодня он обучает переговорам в бизнесе и жизни.
Его техники одинаково хорошо работают как с дядьками с автоматами, так и с дядьками с дипломатами.
Главный инсайт Восса: решения принимают не логикой, а эмоциями. Факты не убеждают, пока человек не почувствует, что его понимают. Это касается не только переговоров в бизнесе, но и повседневных диалогов - будь то спор с подростком, просьба к супругу или разговор с чиновником.
Я обсудил одну свою жизненную ситуацию с Клодом и попросил его ответить, используя знания Восса. Получился отличный набор промптов, но в этот раз не для ИИ, а для для кожаных: что спросить, что сказать, как выстроить диалог.
Зацените иронию:
ИИ пишет промпт, чтобы человек показал лучший результат
Для получения ответа я использовал эту инструкцию:
Ты - специалист по переговорам. Используя знания Крисса Восса в целом, и книги "Договориться не проблема" в частности.
Дай мне рекомендации по моей ситуации. При необходимости задай до 10 вопросов, чтобы лучше понять происходящее. [опиши свою ситуацию]
Но я не остановился на этом и сделал бесплатного Телеграм-бота с GPT-5 под капотом, который по методике Восса помогает выстроить диалог в любой сфере: от бизнеса и работы - до семьи, друзей и случайных споров.
Можно даже не печатать, а надиктовывать голосом.
Кто в каментах оставит по боту обратную связь - у того скилл по переговорам вырастет сразу на 3 пункта!
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from TechSparks
С Днем знаний, дорогие читатели! Хочется надеяться, что если вы читаете этот канал, то знания вам небезразличны:)
Первого сентября хочется поделиться полезным и для тех, кто учит, и для тех, кто учится. Ну, и актуальным, естественно, про ИИшечку.
У Anthropic есть немало курсов для технарей, но я бы посоветовал на странице по ссылке обратить внимание на:
- AI Fluency: Framework & Foundations
- AI Fluency for Educators
- AI Fluency for Students
- Teaching AI Fluency
(по-русски мы обычно говорим «ИИ-грамотность», но fluency подразумевает чуть большее и тем мне больше нравится)
Курсы бесплатны, но получше многих платных;)
https://anthropic.skilljar.com
Первого сентября хочется поделиться полезным и для тех, кто учит, и для тех, кто учится. Ну, и актуальным, естественно, про ИИшечку.
У Anthropic есть немало курсов для технарей, но я бы посоветовал на странице по ссылке обратить внимание на:
- AI Fluency: Framework & Foundations
- AI Fluency for Educators
- AI Fluency for Students
- Teaching AI Fluency
(по-русски мы обычно говорим «ИИ-грамотность», но fluency подразумевает чуть большее и тем мне больше нравится)
Курсы бесплатны, но получше многих платных;)
https://anthropic.skilljar.com
Anthropic Courses
Learn to build with Claude AI
through Anthropic's comprehensive courses and training programs.
through Anthropic's comprehensive courses and training programs.
Forwarded from Refat Talks: Tech & AI
This media is not supported in your browser
VIEW IN TELEGRAM
AI Creative Tools: State of Play - чудесная презентация-шпаргалка от партнера a16z
Партнер a16z Justine Moore тратит большую часть дня на тестирование последних AI-моделей и воркфлоу для всех форм креативного контента - изображения, видео, аудио, 3D. И собрала все это в красивейшую презентацию + с примерами и промптами - все как мы любим. Увидел там много интересного, уверен вам тоже зайдет - делюсь.
Это выжимка от человека, который тестирует эту дичь каждый день и отобрал только топ на сегодняшний день:
- Какие модели решили проблему консистентности персонажей (с конкретными примерами как это делать)
- Что использовать для каждой задачи: Veo 3 для общей генерации, Hailuo 2.0 для физики, Seedance Pro для монтажа
- Почему про-криейторы юзают Krea для тестирования промптов на куче моделей одновременно
- Какие фичи уже есть vs что еще в разработке (спойлер: больше рабочего, чем кажется)
Преза тут: https://www.canva.com/design/DAGw9BX8VoE/J2aeyzKKZobzCWR9hsZsBQ/edit
P.S. Кто такие a16z я писал и у них кстати на днях вышел свежий The Top 100 Gen AI Consumer Apps с их топом и аналитикой, зацените тоже.
Сохраняйте и репостните если было полезно!
🔥➕🔁
Партнер a16z Justine Moore тратит большую часть дня на тестирование последних AI-моделей и воркфлоу для всех форм креативного контента - изображения, видео, аудио, 3D. И собрала все это в красивейшую презентацию + с примерами и промптами - все как мы любим. Увидел там много интересного, уверен вам тоже зайдет - делюсь.
Это выжимка от человека, который тестирует эту дичь каждый день и отобрал только топ на сегодняшний день:
- Какие модели решили проблему консистентности персонажей (с конкретными примерами как это делать)
- Что использовать для каждой задачи: Veo 3 для общей генерации, Hailuo 2.0 для физики, Seedance Pro для монтажа
- Почему про-криейторы юзают Krea для тестирования промптов на куче моделей одновременно
- Какие фичи уже есть vs что еще в разработке (спойлер: больше рабочего, чем кажется)
Преза тут: https://www.canva.com/design/DAGw9BX8VoE/J2aeyzKKZobzCWR9hsZsBQ/edit
P.S. Кто такие a16z я писал и у них кстати на днях вышел свежий The Top 100 Gen AI Consumer Apps с их топом и аналитикой, зацените тоже.
Сохраняйте и репостните если было полезно!
🔥➕🔁
Forwarded from Daniel Dhawan l founder blog
Как мы стали #2 App Store US с Rork iOS аппом, который превращает любую идею в приложения
Rork – это самый быстрый способ принести свою идею в ваш телефон. Вы пишете какое приложение вам нужно, Rork делает его с помощью AI, и вы сразу можете пользоваться им внутри Rork аппа хоть каждый день, или скинуть ссылку друзьям. Никаких танцев с бубном с TestFlight и App Store!
Приложения получаются как настоящие и могут использовать AI (делать чатботов, анализировать аудио и картинки, и даже генерить картинки с NanoBanana), а также почти все нативные iOS функции: камеру, вибрации, и тп
Пока мы делаем простые аппы и игры без бэкэнда, но самый интересный learning был в том, что оказывается многим этого уже достаточно
В мире куча людей, у которых есть уникальный инсайт/доменная область и очень маленькая проблема, с которой они встречаются каждый день, но о которой никто из стартаперов или разработчиков в жизни бы никогда не узнал.
Хороший пример: российский доктор из клиники по лечению рака, который сделал для себя приложение, чтобы рассчитывать дозу химиютерапии на ходу, вместе с AI библиотекой с советами и рекомендациями.
Им нужно очень простое приложение, которое решает их маленькую боль. Часто они понимают, что они не единственные в мире, кто имеет эту проблему, и решают запуститься в App Store, начать принимать платежи и создают свой маленький бизнес.
Все как завещал PG – лучшая идея для стартапа, это проблема, которая есть у тебя.
История
Последние 6 месяцев мы успешно растили веб версией Rork, которая растет быстрее 99% SaaS бизнесов пред AI эпохи, и уже достигла несколько миллионов ARR.
У Левана давно была идея – а что если добавить AI агент Rork в мобильное приложение, которое будет сразу принимать форму приложения, которое вы попросили? Такой универсальный апп делающий другие аппы и позволяющий их пошерить с друзьями
Потом пришли конкуренты Vibecodeapp, которые начали активно копировать Rork, но чтобы дифференцироваться запустили свое мобильное приложение.
Запуск у них не пошел несмотря на хайповое название, помощь Nikita Bier, кофаундер-инфлюенсера с 100к подписчиками и раунд в $9M – работает сильно хуже, и людям все равно хочется публиковать аппы в Апп Стор, поэтому им пришлось копировать нашу веб-версию.
Но там у нас давно полная доминация, где мы по SimilarWeb скоро обгоним Bolt в категории мобильных приложений.
При этом мы времени не теряли, и параллельно сделали свой iOS апп, который благодаря гениальности Левана и нашей маленькой команды получился в разы лучше, чем все что было на рынке.
Так, Rork в день запуска вышел в глобальный топ App Store в Developer Tools, обогнав Replit, Github, других конкурентов, а в каких-то странах даже TestFlight. От чего все конкуренты в Твиттере жестко испугались и резко активизировались
Вывод тут классический. Good distribution + great product >> great distribution + bad/mediocre product
Хотя, конечно, это и не end game – посмотрим, чем закончится!
Как мы запустились?
Так как веб версия Rork.com уже почти обогнал Bolt в мобильных приложениях, нам достаточно было добавить ссылку на App Store на сайт чтобы выйти в #2 App Store in Dev Tools и топ 1-10 в мире
В честь запуска, ну и просто чтобы проверить насколько сильно разойдется вайбкодинг, мы сделали iOS приложение Rork полностью бесплатным.
По традиции запускаемся на Product Hunt, поддержите пожалуйста апвоутом и комментом
P.S. Спасибо Серафиму что закрафтил нам UI и анимации в приложении!!!
Rork – это самый быстрый способ принести свою идею в ваш телефон. Вы пишете какое приложение вам нужно, Rork делает его с помощью AI, и вы сразу можете пользоваться им внутри Rork аппа хоть каждый день, или скинуть ссылку друзьям. Никаких танцев с бубном с TestFlight и App Store!
Приложения получаются как настоящие и могут использовать AI (делать чатботов, анализировать аудио и картинки, и даже генерить картинки с NanoBanana), а также почти все нативные iOS функции: камеру, вибрации, и тп
Пока мы делаем простые аппы и игры без бэкэнда, но самый интересный learning был в том, что оказывается многим этого уже достаточно
В мире куча людей, у которых есть уникальный инсайт/доменная область и очень маленькая проблема, с которой они встречаются каждый день, но о которой никто из стартаперов или разработчиков в жизни бы никогда не узнал.
Хороший пример: российский доктор из клиники по лечению рака, который сделал для себя приложение, чтобы рассчитывать дозу химиютерапии на ходу, вместе с AI библиотекой с советами и рекомендациями.
Им нужно очень простое приложение, которое решает их маленькую боль. Часто они понимают, что они не единственные в мире, кто имеет эту проблему, и решают запуститься в App Store, начать принимать платежи и создают свой маленький бизнес.
Все как завещал PG – лучшая идея для стартапа, это проблема, которая есть у тебя.
История
Последние 6 месяцев мы успешно растили веб версией Rork, которая растет быстрее 99% SaaS бизнесов пред AI эпохи, и уже достигла несколько миллионов ARR.
У Левана давно была идея – а что если добавить AI агент Rork в мобильное приложение, которое будет сразу принимать форму приложения, которое вы попросили? Такой универсальный апп делающий другие аппы и позволяющий их пошерить с друзьями
Потом пришли конкуренты Vibecodeapp, которые начали активно копировать Rork, но чтобы дифференцироваться запустили свое мобильное приложение.
Запуск у них не пошел несмотря на хайповое название, помощь Nikita Bier, кофаундер-инфлюенсера с 100к подписчиками и раунд в $9M – работает сильно хуже, и людям все равно хочется публиковать аппы в Апп Стор, поэтому им пришлось копировать нашу веб-версию.
Но там у нас давно полная доминация, где мы по SimilarWeb скоро обгоним Bolt в категории мобильных приложений.
При этом мы времени не теряли, и параллельно сделали свой iOS апп, который благодаря гениальности Левана и нашей маленькой команды получился в разы лучше, чем все что было на рынке.
Так, Rork в день запуска вышел в глобальный топ App Store в Developer Tools, обогнав Replit, Github, других конкурентов, а в каких-то странах даже TestFlight. От чего все конкуренты в Твиттере жестко испугались и резко активизировались
Вывод тут классический. Good distribution + great product >> great distribution + bad/mediocre product
Хотя, конечно, это и не end game – посмотрим, чем закончится!
Как мы запустились?
Так как веб версия Rork.com уже почти обогнал Bolt в мобильных приложениях, нам достаточно было добавить ссылку на App Store на сайт чтобы выйти в #2 App Store in Dev Tools и топ 1-10 в мире
В честь запуска, ну и просто чтобы проверить насколько сильно разойдется вайбкодинг, мы сделали iOS приложение Rork полностью бесплатным.
По традиции запускаемся на Product Hunt, поддержите пожалуйста апвоутом и комментом
P.S. Спасибо Серафиму что закрафтил нам UI и анимации в приложении!!!
Forwarded from Дата канальи — про «специалистов» в данных / ML / AI
ML Training HSE TS.pdf
6.2 MB
В комментах к последним постам про логарифмирование таргета (а в комментах был материал про другие модификации и их свойства) задавались вопросы по прогнозированию временных рядов.
Ок, лучшее, что я могу посоветовать - презентация с наших совместных с ВШЭ ML-тренировок by Дмитрий Симаков, Kaggle competitions master, тимлид Sber AI Lab
Прежде чем покупать и листать большие книги -- а по рядам их написано много -- макроэкномисты и биржевые спекулянты продолжают искать философский камень -- я бы начал с этой презентации -- максимум практики и опыта в одном месте.
Ок, лучшее, что я могу посоветовать - презентация с наших совместных с ВШЭ ML-тренировок by Дмитрий Симаков, Kaggle competitions master, тимлид Sber AI Lab
Прежде чем покупать и листать большие книги -- а по рядам их написано много -- макроэкномисты и биржевые спекулянты продолжают искать философский камень -- я бы начал с этой презентации -- максимум практики и опыта в одном месте.
Forwarded from Aspiring Data Science (Anatoly Alekseev)
#trading
Если интересно про фьючи (а затем и опционы) узнать, вот лучший в стране лектор рассказывает.
https://www.youtube.com/watch?v=7XBoISgP0t4
Если интересно про фьючи (а затем и опционы) узнать, вот лучший в стране лектор рассказывает.
https://www.youtube.com/watch?v=7XBoISgP0t4
YouTube
Опционы. Срочный рынок и его особенности. Фьючерсы. Основные понятия. Сергей Плешков
Автор курса ПЛЕШКОВ СЕРГЕЙ https://teletype.in/@cmd_trading/options
.............................................................................................
Обязательно посетите наши ресурсы для ознакомления с полезной информацией 🙂
Tелеграмм https…
.............................................................................................
Обязательно посетите наши ресурсы для ознакомления с полезной информацией 🙂
Tелеграмм https…
Forwarded from Ebout Data Science | Дима Савелко
LLM на стероидах: Что такое ReAct и почему он опускает обычный RAG?Представим, что у нас есть чат-бот, который отвечает на вопросы по загруженной базе документов (RAG чат-бот). Вроде круто, но что если нам нужно, чтобы он не просто в документах копался, а еще и как-то с внешним миром взаимодействовал?
Например, мог:
Обычная LLMка либо рассуждает и отвечает на основе текста, либо вызывает какой-то один инструмент, например, RAG. Она не может делать и то, и другое одновременно.
И вот тут на сцену врывается с двух ног ReAct-архитектура (Reason + Act). Такой агент - настоящий гигачад, потому что он умеет чередовать рассуждения с действиями (вызовами функций, или Tools) для взаимодействия с миром.
Агент анализирует запрос пользователя и сам решает, что делать дальше:
Структура ReAct Agent
Как это работает на практике?
Допустим, мы спрашиваем: «Хочу сделать додеп на 100 баксов в слоты, есть какие-нибудь бонусы?»
После согласия пользователя агент может инициировать транзакцию через API платёжного шлюза.
Итог:
ReAct Agent превращает LLMку из обычного генератора текста в полноценного ассистента, который умеет взаимодействовать с внешним миром и реально решать задачи, а не просто болтать. Короче, это база!
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ML Baldini • Nikita Boyandin (Nikita Boyandin)
Топ лучших LLM для кода и как их оценивают😁
Какие бенчмарки используют для проверки и что они все таки проверяют
Если простым языком, то бенчмарк - экзамен для LLM в разных областях. Существует много разных видов, которые оценивают способность модели к мышлению(GPQA-bench) или к математики, но все-таки для нас более важна оценка в программировании и как ее получили:
1️⃣ HumanEval — набор ~160 ручных Python-задач, где оценивают функциональную корректность (генерируемая функция должна проходить тесты),метрика
2️⃣ APPS — большой набор (~10k задач) разной сложности, включая алгоритмические и конкурсы; проверка — прогон тестов на корректность. Нужен для оценки способности решать «серьёзные» задачи.
3️⃣ CodeXGLUE / Code-benchmarks — набор задач разного типа (completion, summarization, clone detection), чтобы оценивать разные сценарии кода, не только решение задачи.
4️⃣ SWE-bench — модель не просто генерирует функцию, а получает репозиторий + описание и должна подготовить патч, который исправит проблему и пройдёт тесты в изолированном окружении(агентский бенчмарк).
В чем проблема этих бенчмарков
1️⃣ Бенчмарки проверяют отдельные функции, но на моем опыте основная проблема в интеграциях и правильной архитектуре
2️⃣ Некоторые компании сами натаскивают LLM, чтобы на лидерборде она была выше
3️⃣ Зачастую нам не говорят, на какой температуре проверялась LLM, включен ли был reasoning и так далее, хотя это напрямую влияет на качество ответа
4️⃣ Автоматические метрики (BLEU, CodeBLEU и др.) дают число, но оно не всегда отражает читаемость, безопасность, оптимальность или пригодность решения в проекте.
Сам топ
1️⃣ Anthropic — Claude (Opus 4 / Opus 4.1) — очень сильна в «реальном» кодинге, хороша для больших, долгих сессий и отладочных диалогов; лидирует в ряде современных SWE-bench и задач на инженерию ПО.
2️⃣ OpenAI — GPT-5 — топ по общей мощности и часто отлично показывает себя в автоматических бенчмарках по коду; сильна в генерации, пояснениях и отладке. Но уже сейчас отмечают разницу ожиданий и поведения.
3️⃣ Google — Gemini (2.x / 2.5 Pro и выше) —хорош в больших контекстах и full-stack задачах; сильна при комбинировании поиска и кода.
4️⃣ xAI — Grok (серии 3/4) - для меня все еще лучший бесплатный игрок, может спокойно написать 200-300 строк кода, но при этом сильно проигрывает своим платным конкурентам.
Интересные сайты, которые я нашел при подготовке поста
Базовая база
Оценка именно кодовых ответов LLM
Очень красивые графики по разным бенчмаркам + доп информация по стоимости, контекстному окну и выдаче токенов
Как вам такой пост?) Обязательно ставьте реакции и пишите комментарии💗
Какие бенчмарки используют для проверки и что они все таки проверяют
Если простым языком, то бенчмарк - экзамен для LLM в разных областях. Существует много разных видов, которые оценивают способность модели к мышлению(GPQA-bench) или к математики, но все-таки для нас более важна оценка в программировании и как ее получили:
pass@k.В чем проблема этих бенчмарков
Сам топ
Интересные сайты, которые я нашел при подготовке поста
Базовая база
Оценка именно кодовых ответов LLM
Очень красивые графики по разным бенчмаркам + доп информация по стоимости, контекстному окну и выдаче токенов
Как вам такой пост?) Обязательно ставьте реакции и пишите комментарии
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Data Secrets | Карьера
Нашли книжку, которая идеально подойдет для подготовки к собеседованиям или предстоящих экзаменов или контрольных, ведь сентябрь уже не за горами.
Так что же внутри?
➖ Разобранные проблемы из самых разных областей ИИ. Не просто сухие ответы, а глубокие объяснения;
➖ Фокус на ключевые темы: от основ ML до сложных архитектур;
➖ Задачи, которые точно встретятся на собесах.
Эту книгу часто советуют для прокачки навыков — поэтому и мы рекомендуем.
Так что же внутри?
Эту книгу часто советуют для прокачки навыков — поэтому и мы рекомендуем.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Находки в опенсорсе
`__typing_subst__` – магический метод в Python, про который вы не слышали
В питоне сложилась довольно сложная ситуация с типизацией. В отличии от многих других языков, у нас нет специального "мини-языка типов". Что сильно упрощает работу с типизацией для авторов языка. Ведь им не нужно поддерживать поведение объектов типизации в рантайме.
А у нас есть только старый добрый питон и его объекты. Да, в питоне – действительно всё объект. Даже типизация. Оттого, любой код, который вы пишите в аннотациях – должен корректно работать в рантайме. Ведь у нас есть потребители такого, например:
Скажем, у нас есть TypeAliasType объект с одной типовой переменной. Мы хотим её явно указать:
Тут все довольно просто в рантайме:
Мы видим, что замена
А как физически происходит замена переменной?
Начнем с того, что в Python есть 3 TypeVar-like объекта:
-
-
-
Пример ошибки замены, исходник:
Пытаемся заменить
Но как фактически проверить, что замена корректная? И вот тут входит в дело
Он определен у всех типов TypeVar-like. Мы посмотрим на ParamSpec. Все, конечно же, написано на дикой смеси C и Python. И Cшная реализация
Аналогично:
Подготовка к замене
Но, все еще чуть-чуть сложнее. Потому что перед тем как что-то заменить, нам нужно подготовиться к замене.
Есть второй магический метод, исходники:
Ну или напрямую:
Здесь в первом случае
Вот такая машинерия выполняется каждый раз, когда нам нужен
Обсуждение: задумывались ли вы о работе аннотаций типов в рантайме? Сталкивались ли с проблемами в данной сфере? Тормозило?
| Поддержать | YouTube | GitHub | Чат |
В питоне сложилась довольно сложная ситуация с типизацией. В отличии от многих других языков, у нас нет специального "мини-языка типов". Что сильно упрощает работу с типизацией для авторов языка. Ведь им не нужно поддерживать поведение объектов типизации в рантайме.
А у нас есть только старый добрый питон и его объекты. Да, в питоне – действительно всё объект. Даже типизация. Оттого, любой код, который вы пишите в аннотациях – должен корректно работать в рантайме. Ведь у нас есть потребители такого, например:
pydantic.Скажем, у нас есть TypeAliasType объект с одной типовой переменной. Мы хотим её явно указать:
type StrDict[_V] = dict[str, _V]
numbers: StrDict[int] = {'one': 1}
Тут все довольно просто в рантайме:
StrDict[int] вызовет __getitem__ вот тут. Кстати, там Cшный код, конечно же. И нам просто вернется нужный GenericAlias объект с нужными __args__:
>>> type StrDict[_V] = dict[str, _V]
>>> StrDict[int], type(StrDict[int]), StrDict[int].__args__
(StrDict[int], <class 'types.GenericAlias'>, (<class 'int'>,))
Мы видим, что замена
_V на int работает! Пока что 🌚А как физически происходит замена переменной?
Начнем с того, что в Python есть 3 TypeVar-like объекта:
TypeVar, TypeVarTuple, ParamSpec. У каждого из них есть свои правила, как можно их заменять (в некоторых контекстах):-
TypeVar можно заменять на одно другое типовое значение-
TypeVarTuple можно заменять на любое количество типовых значений-
ParamSpec можно заменять на Concatenate, ... и список типовПример ошибки замены, исходник:
>>> from collections.abc import Callable
>>> from typing import ParamSpec, TypeVar
>>> P = ParamSpec('P')
>>> R = TypeVar('R')
>>> Callable[P, R][0, int]
Traceback (most recent call last):
TypeError: Expected a list of types, an ellipsis, ParamSpec, or Concatenate. Got <class 'int'>
Пытаемся заменить
P на 0, что не является корректной заменой.Но как фактически проверить, что замена корректная? И вот тут входит в дело
__typing_subst__.Он определен у всех типов TypeVar-like. Мы посмотрим на ParamSpec. Все, конечно же, написано на дикой смеси C и Python. И Cшная реализация
ParamSpec.__typing_subst__ вызывает typing._paramspec_subst. Почему так? В 3.12 все переписали на C в спешке. Но некоторые части были слишком сложны, их оставили на питоне.Аналогично:
>>> P.__typing_subst__([])
()
>>> P.__typing_subst__([int, str])
(<class 'int'>, <class 'str'>)
>>> P.__typing_subst__(...)
Ellipsis
>>> P.__typing_subst__(0)
Traceback (most recent call last):
TypeError: Expected a list of types, an ellipsis, ParamSpec, or Concatenate. Got 0
Подготовка к замене
Но, все еще чуть-чуть сложнее. Потому что перед тем как что-то заменить, нам нужно подготовиться к замене.
Есть второй магический метод, исходники:
__typing_prepare_subst__. Он нужен, чтобы собрать аргументы для замены. Потому что у нас, например, могут быть неявные аргументы с default. Проверим на TypeVarTuple:
>>> class Custom[T1, *Ts=(int, int)]: ...
...
>>> Custom[str]
__main__.Custom[str, [int, int]]
>>> Custom[str, str]
__main__.Custom[str, str]
Ну или напрямую:
>>> Custom.__type_params__[1].__typing_prepare_subst__(*Custom.__type_params__[1], ())
([(<class 'int'>, <class 'int'>)],)
>>> Custom.__type_params__[1].__typing_prepare_subst__(*Custom.__type_params__[1], (str,))
((<class 'str'>,),)
Здесь в первом случае
[int, int] нам как раз добавили в __args__ через __typing_prepare_subst__ вот тут.Вот такая машинерия выполняется каждый раз, когда нам нужен
Generic с параметрами. Потому с 3.14 все аннотации будут ленивыми по-умолчанию. А __annotate__ будет выполняться только тогда, когда аннотации будут запрашивать реально для рантайма.Обсуждение: задумывались ли вы о работе аннотаций типов в рантайме? Сталкивались ли с проблемами в данной сфере? Тормозило?
| Поддержать | YouTube | GitHub | Чат |
Python documentation
typing — Support for type hints
Source code: Lib/typing.py This module provides runtime support for type hints. Consider the function below: The function surface_area_of_cube takes an argument expected to be an instance of float,...