Shapely: Que tal adicionar dicas de tipo?

Criado em 25 mai. 2019  ·  5Comentários  ·  Fonte: Toblerity/Shapely

Como o Shapely atualmente não tem dicas de tipo , os resultados produzidos por verificadores de tipo estão longe de ser perfeitos. Alguns exemplos:

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

e assim por diante.

Então, que tal adicionar arquivos stub com as dicas de tipo, pelo menos para a funcionalidade mais básica dos documentos?


Versão Shapely: 1.6.4.post1, instalado a partir do conda.

Comentários muito úteis

Eu adoraria ver anotações de tipo no Shapely.

Todos 5 comentários

Não me oponho a adicionar arquivos stub. No entanto, como (ainda) não sou um usuário mypy e há muitos códigos a serem anotados, não vou assumir essa tarefa. Eu ficaria feliz em revisar um PR, especialmente se ele tivesse testes das anotações.

Eu adoraria ver anotações de tipo no Shapely.

Seria bom ter anotações, talvez para o marco 1.8 (?)

Uma coisa a considerar no planejamento desse recurso é colocar anotações em arquivos stub para manter a compatibilidade do Python 2.7 para versões futuras do shapely. Ou faça com que o próximo marco (por exemplo, 1.8) libere apenas Python 3+ e mantenha um branch separado para bugs do Python 2.7.

Observe que o Python 2.7 não será mantido após 2020 ( cerca de 7 meses a partir de agora ).

As anotações de tipo embutido serão muito mais fáceis de manter no futuro.

Se quisermos usar a nova sintaxe de anotação, será necessária a versão 3.5 como mínimo, enquanto atualmente oferecemos suporte a 3.4. Não sei se já concordamos com isso?

As anotações de tipo terão a seguinte aparência:

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

A menos que precisemos do suporte 3.4, caso em que eles precisam ser feitos como comentários (não tão agradáveis!):

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

Minha preferência seria exigir o Python 3.5 para o Shapely 1.8.

O Python 3.4 atingiu o fim de sua vida útil em março de 2019 e o nº 680 abordou isso para os testes do Travis CI, então acho que exigir o Python 3.5+ para a próxima etapa (1.8?) Faz sentido.

Mas isso significa que precisaríamos manter um branch 1.7 para usuários do Python 2.7 (também <= 3.4).

@sgillies, é hora de romper com a era Python 2.x?

Esta página foi útil?
0 / 5 - 0 avaliações