Shapely: Как насчет добавления подсказок типа?

Созданный на 25 мая 2019  ·  5Комментарии  ·  Источник: Toblerity/Shapely

Поскольку в настоящее время в Shapely нет подсказок по типу , результаты, полученные с помощью средств проверки типов, далеки от совершенства. Некоторые примеры:

from shapely.geometry import Polygon, LineString, Point

area = Polygon().area  # Inferred type: Any. Should be: float
geom_type = LineString().geom_type  # Inferred type: Union[str, List[str]]
# Should be LineString in this case
representative_point = Polygon().representative_point()
# Inferred type: Union[Polygon, Any]. Should be: Point
x = Point(1, 1).x  # Inferred type: Union[object, Tuple[object, object, object], Tuple[object, object]]
# Should be: float

и так далее.

Итак, как насчет добавления файлов-заглушек с подсказками типов, по крайней мере, для самых основных функций из документации?


Версия Shapely: 1.6.4.post1, устанавливается с conda.

Самый полезный комментарий

Я хотел бы видеть аннотации типов в Shapely.

Все 5 Комментарий

Я не против добавления файлов-заглушек. Однако, поскольку я (пока) не являюсь пользователем mypy и мне нужно комментировать много кода, я не собираюсь браться за эту задачу. Я был бы рад просмотреть PR, особенно если бы в нем были тесты аннотаций.

Я хотел бы видеть аннотации типов в Shapely.

Было бы неплохо иметь аннотации, возможно, к этапу 1.8 (?)

При планировании этой функции следует подумать о том, следует ли помещать аннотации в файлы-заглушки для обеспечения совместимости с Python 2.7 для будущих версий shapely. Или сделайте следующий этап (например, 1.8) выпуском только Python 3+ и сохраните отдельную ветку для ошибок Python 2.7.

Обратите внимание, что Python 2.7 не будет поддерживаться после 2020 года ( примерно через 7 месяцев ).

Аннотации встроенного типа будет намного проще поддерживать в будущем.

Если мы хотим использовать новый синтаксис аннотаций, это потребуется как минимум 3.5, тогда как в настоящее время мы поддерживаем 3.4. Я не знаю, договорились ли мы об этом?

Аннотации типов будут выглядеть так:

def nearest_points(g1: Geometry, g2: Geometry) -> Tuple[Geometry, Geometry]:

Если нам не нужна поддержка 3.4, в этом случае они должны быть сделаны в виде комментариев (не так хорошо!):

def nearest_points(g1, g2): # type: (Geometry, Geometry) -> Tuple[Geometry, Geometry]

Я бы предпочел, чтобы для Shapely 1.8 требовался Python 3.5.

Python 3.4 подошел к концу в марте 2019 года , а в # 680 это было решено для тестов Travis CI, поэтому я думаю, что необходимость Python 3.5+ для следующей вехи (1.8?) Имеет смысл.

Но это означает, что нам нужно будет поддерживать ветку 1.7 для пользователей Python 2.7 (также <= 3.4).

@sgillies пора ли оторваться от эры Python 2.x?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги