python / python/typeshed

[networkx] Some functions don't accept valid Graph types

オープン
#16,365 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

stubs: false positive
主要言語
Python
スター
5.1k
フォーク
2.1k
平均マージ
1日 19時間
マージ済み PR(30日)
82

説明

I'm using networkx with the Generics introduced by and think I have found a bug.

For some context:
I'm trying to run a type checker on a class Foo that looks like so:

class Bar(Mapping[str, Any]):
    ...

class Foo(Graph[int, Bar]):
    node_attr_dict_factory = Bar
    ...

The key point being that Bar implements Mapping, but is not a dict.

networkx.draw(G: Graph[Node_], ...) doesn't accept this Foo graph, and gives a typing error with the current stubs.

In the transition to generic types for node and edge data, _NodeData and _EdgeData were given an upper bound of Mapping[str, Any] and a default of dict[str, Any]. (https://github.com/python/typeshed/pull/15660/changes)

With this, most functions that took a Graph[_Node] parameter before, were changed to take a Graph[_Node, _NodeData, _EdgeData]

However, some weren't changed, which means they effectively have a parameter with type: Graph[_Node, dict[str, Any], dict[str, Any].
Passing a Graph[_Node, Mapping[str, Any], dict[str, Any]] causes a type error.

Is there a reason that some functions weren't updated to use Graph[_Node, _NodeData, _EdgeData] @ThePiep ?
I see that there are a few other functions in the library that use Graph[_Node] still, but am unsure why.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

networkx のスタブから始め、まだ Graph[_Node] を使用している関数を見つけ、汎用的なノードデータおよびエッジデータ向けに更新されたシグネチャと比較します。報告された Foo の例を型チェッカーで確認し、関連するシグネチャを更新して Mapping ベースのデータが受け入れられるようにしたうえで、型付けエラーが解消されたことを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
developer-experience, tooling
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
活発
明瞭さ
おおむね明確
初心者へのやさしさ
68/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。