-
-
Notifications
You must be signed in to change notification settings - Fork 99
Description
Information
Вопрос
При аннотации типа данных как np.ndarray, линтер mypy требует уточнения типа аргументов массива (ошибки типа generic type). Однако на данный момент все варианты, которые были применены, не подошли:
- NDArray[np.int64], NDArray[Any] — линтер пишет, что "Module 'numpy.typing' has no attribute 'NDArray'", несмотря на то, что я откатил версию numpy до 1.26.4 (нормальная стабильная версия).
- Если поднять версию numpy выше 1.26.4 и применять типизацию — ndarray[Any, np.dtype[np.int64]], ndarray[np.dtype[np.int64]], то к сожалению линтер mypy выбрасывает ошибку — "Explicit 'Any' is not allowed."
- Типизация np.ndarray[(int, ...), np.dtype[np.int64]] — не проходит, так как базовый np.ndarray не поддерживает такую параметризацию в типах.
- Применение типизации ArrayLike, DTypeLike — выдает ошибку типа: "Argument 1 to 'DataFrame' has incompatible type 'Union[bool, int, float, complex, _SupportsArray, Sequence[Any]]'".
Контекст
Используемая версия numpy — 1.26.4, с которой при типизации возникает ошибка: "Module 'numpy.typing' has no attribute 'NDArray'".
При попытке использовать типизацию с NDArray возникают проблемы с линтерами, а при попытке использовать старые аннотации np.ndarray линтер также жалуется на их несовместимость с используемой версией.
Я пробовал разные варианты, в том числе:
• Применение np.ndarray[(int, ...), np.dtype[np.int64]].
• Применение ArrayLike и DTypeLike для упрощения типизации.
Тем не менее, возникшие ошибки продолжают мешать корректной типизации и сборке проекта.
Цель
Я бы хотел получить помощь в разрешении проблемы с типизацией np.ndarray и предложений по корректной аннотации для работы с массивами в Python при использовании numpy версии 1.26.4. Также интересуют рекомендации по:
• Возможности использования NDArray (или альтернатив) в старых версиях numpy.
• Правильной типизации без ошибок линтеров.
• Возможных workaround'ах для описанных проблем с типизацией, особенно для np.ndarray и ArrayLike.