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
等々。
では、少なくともドキュメントの最も基本的な機能については、タイプヒントを使用して
形の良いバージョン:1.6.4.post1、condaからインストール。
私はスタブファイルを追加することに反対していません。 ただし、私は(まだ)mypyユーザーではなく、注釈を付けるコードがたくさんあるので、このタスクを引き受けるつもりはありません。 特に注釈のテストがあった場合は、PRを確認できれば幸いです。
Shapelyで型注釈を確認したいと思います。
おそらく1.8マイルストーン(?)の場合、注釈があると便利です。
この機能の計画を検討する際に考慮すべきことの1つは、Shapelyの将来のバージョンでPython 2.7との互換性を維持するために、アノテーションをスタブファイルに配置するかどうかです。 または、次のマイルストーン(1.8など)でPython 3以降のみをリリースし、Python2.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]
私の好みは、Shapely1.8にPython3.5を要求することです。
Python 3.4は2019年3月にサポートが終了し、#680はTravis CIテストでこれに対処したため、次のマイルストーン(1.8?)にPython3.5以降を要求することは理にかなっていると思います。
ただし、これは、Python 2.7ユーザー用に1.7ブランチを維持する必要があることを意味します(これも<= 3.4)。
@sgilliesは、Python 2.xの時代から脱却する時ですか?
最も参考になるコメント
Shapelyで型注釈を確認したいと思います。