Поскольку в настоящее время в 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.
Я не против добавления файлов-заглушек. Однако, поскольку я (пока) не являюсь пользователем 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?
Самый полезный комментарий
Я хотел бы видеть аннотации типов в Shapely.