Shapely: ¿Qué tal agregar sugerencias de tipo?

Creado en 25 may. 2019  ·  5Comentarios  ·  Fuente: Toblerity/Shapely

Como Shapely actualmente no tiene sugerencias de tipo , los resultados producidos por los verificadores de tipo están lejos de ser perfectos. Algunos ejemplos:

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

y así.

Entonces, ¿qué tal agregar archivos stub con las sugerencias de tipo, al menos para la funcionalidad más básica de los documentos?


Versión Shapely: 1.6.4.post1, instalada desde conda.

Comentario más útil

Me encantaría ver las anotaciones de tipo en Shapely.

Todos 5 comentarios

No me opongo a agregar archivos de resguardo. Sin embargo, dado que no soy un usuario mypy (todavía) y hay mucho código para anotar, no voy a asumir esta tarea. Me complacería revisar un PR, especialmente si tuviera pruebas de las anotaciones.

Me encantaría ver las anotaciones de tipo en Shapely.

Sería bueno tener anotaciones, tal vez para el hito 1.8 (?)

Una cosa a considerar al planear esta función es si colocar anotaciones en archivos stub para mantener la compatibilidad con Python 2.7 para futuras versiones de shapely. O bien, haga que el próximo hito (por ejemplo, 1.8) libere Python 3+ únicamente y mantenga una rama separada para los errores de Python 2.7.

Tenga en cuenta que Python 2.7 no se mantendrá después de 2020 ( alrededor de 7 meses a partir de ahora ).

Las anotaciones de tipo en línea serán mucho más fáciles de mantener en el futuro.

Si queremos usar la nueva sintaxis de anotación, se requerirá 3.5 como versión mínima, mientras que actualmente admitimos 3.4. No sé si hemos acordado esto todavía.

Las anotaciones de tipo se verán así:

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

A menos que necesitemos admitir 3.4, en cuyo caso deberían hacerse como comentarios (¡no tan bien!):

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

Mi preferencia sería requerir Python 3.5 para Shapely 1.8.

Python 3.4 llegó al final de su vida útil en marzo de 2019 , y el # 680 abordó eso para las pruebas de Travis CI, por lo que creo que requerir Python 3.5+ para el próximo hito (1.8?) Tiene sentido.

Pero esto significa que necesitaríamos mantener una rama 1.7 para los usuarios de Python 2.7 (también <= 3.4).

@sgillies ¿ es hora de romper con la era de Python 2.x?

¿Fue útil esta página
0 / 5 - 0 calificaciones