Skip to content

[QUESTION] np.ndarray typing #266

@callogan

Description

@callogan

Information

Вопрос
При аннотации типа данных как np.ndarray, линтер mypy требует уточнения типа аргументов массива (ошибки типа generic type). Однако на данный момент все варианты, которые были применены, не подошли:

  1. NDArray[np.int64], NDArray[Any] — линтер пишет, что "Module 'numpy.typing' has no attribute 'NDArray'", несмотря на то, что я откатил версию numpy до 1.26.4 (нормальная стабильная версия).
  2. Если поднять версию numpy выше 1.26.4 и применять типизацию — ndarray[Any, np.dtype[np.int64]], ndarray[np.dtype[np.int64]], то к сожалению линтер mypy выбрасывает ошибку — "Explicit 'Any' is not allowed."
  3. Типизация np.ndarray[(int, ...), np.dtype[np.int64]] — не проходит, так как базовый np.ndarray не поддерживает такую параметризацию в типах.
  4. Применение типизации ArrayLike, DTypeLike — выдает ошибку типа: "Argument 1 to 'DataFrame' has incompatible type 'Union[bool, int, float, complex, _SupportsArray, Sequence[Any]]'".
Image Image

Контекст
Используемая версия 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions