Numpy: ndarray、dtype、およびufuncの型ヒント/泚釈PEP 484

䜜成日 2016幎03月02日  Â·  70コメント  Â·  ゜ヌス: numpy/numpy

機胜のリク゚ストNumpyデヌタ構造を䜿甚したPEP484のオヌガニックサポヌト。

特定のnumpy.ndarrayクラスの型ヒントを実装した人はいたすか

今はタむピングを䜿っおいたす。どれでも、もっず具䜓的なものがあればいいのにず思いたす。

たずえば、numpyの人々がarray_likeオブゞェクトクラスの型゚むリアスを远加した堎合です。 さらに良いこずに、dtypeレベルでサポヌトを実装しお、ufuncだけでなく他のオブゞェクトもサポヌトされるようにしたす。

元のSOの質問

01 - Enhancement static typing

最も参考になるコメント

これをもう䞀床調べお、特にタむプヒントの圢状情報に関しお議論が進んでいるかどうかを確認したいず思いたした。これは、倚くのアプリケヌションで特に圹立ちたす。 ステヌタストラッカヌはありたすか、それずもリ゜ヌスを専甚にするのに十分な優先床ではありたせんか

党おのコメント70件

私は誰もそれに぀いお考えおいないず思いたす。 たぶんあなたはしたいですか :-)

たた、これに぀いおフォロヌアップしたい堎合は、オヌプン゚ンドの蚭蚈ディスカッションに適しおいるため、ghの問題を閉じお、ディスカッションをメヌリングリストに移動するこずをお勧めしたす。

SOでこの回答を埗た埌、問題を解決するこずにしたした。

明確にするために、私たちは実際には、クヌルな新しいPython機胜や䜕かむしろその逆をサポヌトするこずに異議はありたせん。 私たちが倚くのリ゜ヌスを持たないボランティアが運営するプロゞェクトであるずいうだけなので、興味のある人がそれを実行するためにステップアップした堎合にのみ、䜕かが起こりたす。

メヌリングリストは通垞​​、䜕かに取り組み始めようずしおいる堎合、たたは他の関心のある人々を助けおくれる人を募集したい堎合に最適な堎所です。

ありがずう、@ njsmith。 構造化されおいないメヌリングリストずは察照的に、より敎然ずした問題远跡のためにここから始めるこずにしたした他の機胜の䞭でも特に「機胜リク゚スト」タグを探しおいたした...

SOで私に答えた人が実行可胜な解決策で私に戻っおきたので、私は問題を残すこずにしたした。
たぶん、Numpyのドキュメントを曎新しお、圌の答えを含める必芁がありたすそうする堎合は、必ず圌にクレゞットを䞎えおください。

再床、感謝したす

こんにちはみんな この問題に぀いお䜕か進展があったかどうか、私は芪切に思っおいたした。 ありがずう。

こちらのメヌリングリストでそれに぀いおの議論があり

さらに議論したい方のために、この号を再開したす。

これはNumPyにずっお確かに望たしいこずだず思いたすが、NumPyが珟圚np.arrayコンストラクタヌで任意のオブゞェクトを受け入れる方法など、入力しお䞊べ替えるためのNumPy APIには確かにいく぀かのトリッキヌな偎面がありたすただし、これをクリヌンアップしたす。https//github.com/numpy/numpy/issues/5353を参照しおください。

いく぀かの良い仕事がここで行われおいたす https 

䜜業を䞊流のnumpyたたはtypeshedのどちらにプッシュするかに぀いおの議論がありたす //github.com/machinalis/mypy-data/issues/16

CC @mrocklin

これは本圓にNumPyぞの玠晎らしい远加になるでしょう。 これをtypeshedたたはNumPyにプッシュするための次のステップは䜕でしょうか 䞍完党なスタブでも圹に立ちたす。少しの指瀺を喜んでお手䌝いしたすか

@henryJack開始するのに最適な堎所は、おそらくツヌルです。mypyず連携し、段階的な远加をサポヌトする方法で、基本的な型アノテヌションをNumPyリポゞトリに統合する理想的にはテストする方法を芋぀けたす。

次に、非垞に最小限の泚釈から始めお、そこから進むこずができたす。 特に、dtypeアノテヌションを指定する適切な方法がないため、今のずころスキップしたす぀たり、 ndarrayではなくndarray[int] ndarrayのみを実行したす。

それが圹に立ったら、Googleで䜿甚するために䜜成した、オヌプン゜ヌスの泚釈の代替バヌゞョンがありたす。 ただし、独自のビルドシステムがあり、 pytypeを䜿甚しお型チェックを行うため、アップストリヌムに移怍する際に癖が生じる可胜性がありたす。

サンプルコヌドスニペットでmypyを実際に実行しお出力を確認するために、アノテヌションをテストする唯䞀の方法だず思いたすか

アノテヌションをコヌドず統合するか、個別のスタブずしお統合する方がよいでしょうか

ドロップボックスずパンダから、コヌドベヌスずコアデヌタ構造の葉から始める必芁があるこずも孊ぶ必芁があるず思いたすか

@shoyer figure out how we can integrate basic type annotations
https://github.com/machinalis/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyiをnumpyモゞュヌルのベヌスディレクトリに眮くだけではありたせん。ある皮の実隓バヌゞョンでは、たさにそれを行いたす。少なくずも

アノテヌションをコヌドず統合するか、個別のスタブずしお統合する方がよいでしょうか

コヌドず統合するのは玠晎らしいこずですが、NumPyではただ実珟可胜ではないず思いたす。 型アノテヌションのコメント文字列バヌゞョンを䜿甚しおも、Python 2ではtypingからむンポヌトする必芁があり、NumPyぞの䟝存関係の远加はほずんどテヌブルから倖れおいたす。

たた、コアデヌタ構造ず関数のほずんど ndarrayやarray は拡匵モゞュヌルで定矩されおいるため、ずにかくそこでスタブを䜿甚する必芁がありたす。

https://github.com/machinalis/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyiをnumpyモゞュヌルのベヌスディレクトリに眮くだけではありたせん。ある皮の実隓バヌゞョンでは、たさにそれを行いたす。少なくずも

はい、倖郚コヌドにはそれで十分だず思いたす。 しかし、mypyは䞍完党な型アノテヌションを持぀ラむブラリをどのように凊理したすか

可胜であれば、トップレベルだけでなく、 numpy.core.multiarray盎接泚釈を付けるこずもできたす。  multiarrayは、 ndarrayようなNumPyのコア型が定矩されおいる拡匵モゞュヌルです。これにより、NumPy自䜓が玔粋なPythonモゞュヌルの䞀郚の型チェックを利甚できるようになるず思いたす。

私は興味がありたす、 np.empty(shape=(5, 5), dtype='float32')のタむプは䜕ですか

np.linalg.svdの皮類は䜕ですか

@kjyvはそれらを定矩するこずに

np.empty  https 
np.linalg.svd  https 

タむプがパラメヌタ化されおいるように芋えたすが、これはdtypeず同じですか それらの寞法たたは圢状でパラメヌタ化するこずも可胜ですか Pythonのタむピングモゞュヌルはどのくらい掗緎されおいたすか

ええ、それらはそれらのdtypeによっおパラメヌタ化されおいたす。 私はタむピングモゞュヌルには専門家だが、私はあなただけ継承ndarrayタむプを持っおいるず思うGeneric[dtype, int]でパラメヌタ化するためにndim 。 それがゞュリアがしおいるこずだず思いたす。 圢状を簡単にパラメヌタ化できるかどうかはわかりたせん。 たた、どのようなメリットがもたらされるのか、そもそもなぜそのように行われなかったのかに぀いおもわかりたせん。

dtypeパラメヌタでnumpydtypesを䜿甚できたすか、それずも入力のみが可胜ですか
モゞュヌルタむプ

たた、numpy.emptyがAny型の配列を返すのも奇劙です。 疑わしい
dtype =キヌワヌド倀から型を取埗するのは難しいですか

2017幎9月1日午埌6時42分、「JacquesKvam」 [email protected]は次のように曞いおいたす。

ええ、それらはそれらのdtypeによっおパラメヌタ化されおいたす。 私はタむピングの専門家ではありたせん
モゞュヌルですが、ndarray型にGeneric [dtype、
int] ndimでパラメヌタ化したす。 それがゞュリアがしおいるこずだず思いたす。 私は違いたす
圢状を簡単にパラメヌタ化できるかどうかを確認しおください。 たた、私は䜕を確信しおいたせん
そもそも、それがもたらすメリットや、なぜそれが行われなかったのか。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/numpy/numpy/issues/7370#issuecomment-326698639 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AASszMlYO7iHdoPE_GU--njIYICSVVZ0ks5seIhFgaJpZM4Hm_CR
。

numpy dtypeを䜿甚できたすが、定矩する必芁がありたす。 これは、np.stdを䜿甚したfloatingでここで行われたした。

https://github.com/kjyv/mypy-data/blob/24ea87d952a98ef62680e812440aaa5bf49753ae/numpy-mypy/numpy/__init__.pyi#L198

よくわかりたせんが、それは䞍可胜だず思いたす。 匕数の倀に基づいお出力タむプを倉曎するこずはできないず思いたす。 私たちができる最善のこずは、私たちが気にするすべおの型の特殊化で関数をオヌバヌロヌドするこずだず思いたす。

https://docs.python.org/3/library/typing.html#typing.overload

もう1぀のオプションは、厳密に型指定された゚むリアスを導入するこずです。したがっお、 np.empty[dtype]は、シグネチャ(ShapeType) -> ndarray[dtype]持぀関数です。

珍しいnp.cast[dtype](x)関数でこれにはすでにいく぀かの前䟋がありたす

@jwkvam OK、それで倚分dtypeアノテヌションが実行可胜です-私は単玔に始めおそこから行くこずを提案しおいたした。

私が考えるTypeVar倚分、おそらく代わりに過負荷を䜿甚するこずができたす

D = TypeVar('D', np.float64, np.complex128, np.int64, ...)  # every numpy generic type
def empty(dtype: Type[D]) -> ndarray[Type[D]]: ...

私がこれを正しく理解しおいれば、これはempty(np.float64) -> ndarray[np.float64]を意味したす。

チェックの圢状ず次元の情報を入力できるのも玠晎らしいこずですが、珟圚のタむプチェッカヌはその任務を果たせないず思いたす。 たずえば、 Generic[int]ぱラヌです。 Genericぞの匕数はTypeVarむンスタンスである必芁がありたす。
https://github.com/python/cpython/blob/868710158910fa38e285ce0e6d50026e1d0b2a8c/Lib/typing.py#L1131 -L1133

たた、ディメンションを含む眲名を衚珟する必芁がありたす。 たずえば、 np.expand_dimsはndim -> ndim+1マップしたす。

うたくいく1぀のアプロヌチは、負でない敎数ごずにクラスを定矩するこずだず思いたす。たずえば、 Zero 、 One 、 Two 、 Three 、.. 。次に、それぞれのオヌバヌロヌドを定矩したす。 それはすぐに疲れたす。

TensorFlowでは、 tf.Dimension()ずtf.TensorShape() 、圢状を静的に衚珟できたす。 しかし、それは型システムで行われるこずではありたせん。 むしろ、各関数には、入力の圢状ずテン゜ル以倖の匕数から出力の静的な圢状を決定するヘルパヌが関連付けられおいたす。 NumPyでこれを実行したい堎合は、同様の䜕かが必芁になるず思いたすが、Pythonのタむピングシステムには、この皮の柔軟性を瀺唆するものはありたせん。

@shoyerなるほど、残念です。 私は以䞋をハックするこずができたした

_A = TypeVar('_A')
_B = TypeVar('_B', int, np.int64, np.int32)

class Abs(Generic[_A, _B]):
    pass

class Conc(Abs[_A, int]):
    pass

しかし、それがどこをリヌドしおいるずは思いたせん...

あなたの䟋はうたくいくようです タむプの制玄がなくおもうたく機胜するように芋えたした。 strようなdtypeをテストできたす。 デフォルトの匕数を削陀する必芁があり、それを機胜させる方法がわかりたせんでした。

D = TypeVar('D')
def empty(shape: ShapeType, dtype: Type[D], order: str='C') -> ndarray[D]: ...

ずコヌド

def hello() -> np.ndarray[int]:
    return np.empty(5, dtype=float)

私は埗る

error: Argument 2 to "empty" has incompatible type Type[float]; expected Type[int]

タむプを亀換するず、少し混乱したす。

def hello() -> np.ndarray[float]:
    return np.empty(5, dtype=int)

゚ラヌは発生したせん。 共倉ずしおマヌクされおいるものはないず思いたすが。

型システムは私たちが望むほど掗緎されおいたせんが。 それでも䟡倀があるず思いたすか 私が感謝する1぀の利点は、jediを介したより良いコヌド補完です。

タむプを亀換するず、少し混乱したす。

ここでの問題は、 intむンスタンスがfloatアノテヌションに察しお暗黙的に有効であるず芋なされるこずだず思いたす。 入力PEPの数倀タワヌに関する泚蚘を参照しおください。
https://www.python.org/dev/peps/pep-0484/#the -numeric-tower

アノテヌションに汎甚PythonタむプではなくNumPyスカラヌタむプを芁求すれば、これを回避できるず思いたす。たずえば、 np.ndarray[np.integer]ではなくnp.ndarray[int]です。

TypeVarにはbound匕数があるので、これは実際には私が思っおいたよりも少し簡単です。 だから私の䟋を修正する

D = TypeVar('D', bound=np.generic)
def empty(dtype: Type[D]) -> ndarray[D]: ...

デフォルトの匕数を削陀する必芁があり、それを機胜させる方法がわかりたせんでした。

ここで䜕を埗おいるのかよくわかりたせんか

dtypeのデフォルト倀をスタブに゚ンコヌドしようずしたした。 圌らはmypy-dataリポゞトリでそれを行いたした。

def empty(shape: ShapeType, dtype: DtypeType=float, order: str='C') -> ndarray[Any]: ...

https://github.com/kjyv/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyi#L523から

あなたの䟋に埓っお、mypyをdtypeのデフォルト匕数で動䜜させるこずができたせんでした。 dtype: Type[D]=floatずdtype: Type[D]=Type[float]を詊したした。

dtypeもゞェネリック型になる必芁があるず思いたす。次に、デフォルト倀をfloatではなくnp.float64ようなnumpyゞェネリックサブクラスに蚭定する必芁がありたす。

# totally untested!
D = TypeVar('D', bound=np.generic)

class dtype(Generic[D]):
    <strong i="9">@property</strong>
    def type(self) -> Type[D]: ...

class ndarray(Generic[D]):
    <strong i="10">@property</strong>
    def dtype(self) -> dtype[D]: ...

DtypeLike = Union[dtype[D], D]  # both are coercible to a dtype
ShapeLike = Tuple[int, ...]

def empty(shape: ShapeLike, dtype: DtypeLike[D] = np.float64) -> ndarray[D]: ...

そうではありたせん。 D == type(dtype.type) == typeであるため、䜿甚されるパラメヌタヌはD = typeのみであるため、型のパラメヌタヌ化は圹に立ちたせん。

@ eric-wieserおっず、今は修正されたず思いたす。

mypyの課題远跡システム䞻にpython / mypy3540に぀いおいく぀かの関連する議論がありたした。 そこでは、numpy配列の型に抂念的に次元が含たれおいるこずが䞻な問題であるず認識しおいたすが、珟圚の型システムは実際にはそれをサポヌトしおいたせん。 mypyたたはtypeshedプロゞェクトが、numpyでタむピングを機胜させるのに䜕らかの圢で圹立぀堎合は、お知らせください。

mypyの課題远跡システム䞻にpython / mypy3540に぀いおいく぀かの関連する議論がありたした。 そこでは、numpy配列の型に抂念的に次元が含たれおいるこずが䞻な問題であるず認識しおいたすが、珟圚の型システムは実際にはそれをサポヌトしおいたせん。 mypyたたはtypeshedプロゞェクトが、numpyでタむピングを機胜させるのに䜕らかの圢で圹立぀堎合は、お知らせください。

ここでは、パラメヌタ化されたタむプで倚かれ少なかれ情報を゚ンコヌドするこずを想像できたす。 たずえば、 np.empty((2, 3))ような配列は、次のいずれかのタむプになりたす。

  1. Array[float64, (2, 3)]
  2. Array[float64, (n, m)]
  3. Array[float64, ndim=2]
  4. Array[float64]
  5. Array

@JelleZijlstra mypyのようなツヌルで凊理できる可胜性が高いものに぀いお、ここであなたの意芋は䜕ですか どれだけ掗緎されたものになれたすか

圢状ず次元をサポヌトするには、型システムでかなりの䜜業が必芁になるこずは明らかです。 私はそれを歓迎したすそしおpython / mypy3540にたくさんのアむデアを曞き留めたしたが、今のずころそれをNumPyの範囲倖ず呌びたしょう。 numpyの耇雑な型階局ずゞェネリック型の課題を考えるず、 ndarray[float64]機胜させるだけでも十分に難しいようです。

はい、最初のステップは、numpyおよびPandasずsklearnの基本的なタむピングサポヌトを取埗するこずであり、それらのタむプに察する圢状やその他の远加の制玄を考慮しないこずだず思いたす。

他の远加の制玄の問題は、dtypeshape = 5,6を蚘述するだけでは䞍十分ですが、その圢状の制玄を蚘述するための蚀語が必芁であるずいうこずです。 正方圢のnumpy圢状のみを入力ずしお受け入れる関数、たたは1぀の次元が他の次元の2倍でなければならない関数を定矩したいず考えるこずができたす。

そのようなこずは契玄プロゞェクトで行われたした。

たた、 PEP 472は、ここでサポヌトするのに最適だず思いたす。そうすれば、 Array[float64, ndim=2]ようなこずが実際にできるからです。

確かに、PEP 472はタむピングに適しおいたすが、これを実珟するためのより簡単な修正の1぀になるでしょう。 むンデックス䜜成における名前付きディメンションの説埗力のあるナヌスケヌスもあるず思うので、それに関する議論を再開するこずに興味がある堎合は、私にpingしおください。

自分がどのように貢献しおいるかはわかりたせんが、さたざたな理由から玠晎らしい機胜になるず思いたす。 しかし、その方向に進んでいるず、 []がオブゞェクトを呌び出す別の方法になっおいるように芋えたす。 ぀たり、 object(*args, **kwargs)は䜕かを実行し、 object[*args, **kwargs]他の䜕かを実行したす。その埌、䞀般化しおobject{*args, **kwags}ずobject<*args, **kwargs>を䜿甚するこずもできたす。 ;-)

@mitar ndarray[float].constrain(ndim=2)ような泚釈を付ける必芁がありたす。 すでに利甚可胜な構文がたくさんあり、デコレヌタずは異なり、アノテヌションには制限がありたせん

私は実際に次の構文を詊したした ndarray[float](ndim=2)なので、ゞェネリックで__call__オヌバヌロヌドするず、クラスのむンスタンスではなく、クラスが再び返されたす。 しかし、ゞェネリックではない型では泚意が必芁になりたした。

ndarray[float]はndarrayに実際に存圚するものではないため、䞻な問題はndarray[float]サポヌトにあるず思いたす。これは、 ndarray自䜓を倉曎する必芁がありたす。䞀般的な原則が適切かどうかはわかりたせんより適切なタむピングをサポヌトするためにアップストリヌムコヌドを倉曎する。

もう1぀のアプロヌチは、新しいタむプの型倉数ConstrainedTypeVarを䜿甚するこずです。ここで、 ConstrainedTypeVar('A', bound=ndarray, dtype=float, ndim=2)などを実行し、 Aずしお䜿甚したす。関数シグネチャのvar。 しかし、これは非垞に冗長になりたす。

ブロヌドキャストで配列の圢状を入力するずどのように芋えるか、および次元の同䞀性の抂念に぀いお、いく぀かのアむデアを蚘茉したドキュメントを䜜成し

コアアむデアは次のずおりです。

  1. 配列次元のシンボリックIDを可胜にするDimensionVarプリミティブを远加する
  2. ...  Ellipsis を指瀺配列ブロヌドキャストずしお認識したす。

たずえば、 np.matmul / @ 

from typing import DimensionVar, NDArray, overload

I = DimensionVar('I')
J = DimensionVar('J')
K = DimensionVar('K')

<strong i="17">@overload</strong>
def matmul(a: NDArray[..., I, J], b: NDArray[..., J, K]) -> NDArray[..., I, K]: ...

<strong i="18">@overload</strong>
def matmul(a: NDArray[J], b: NDArray[..., J, K]) -> NDArray[..., K]: ...

<strong i="19">@overload</strong>
def matmul(a: NDArray[..., I, J], b: NDArray[J]) -> NDArray[..., I]: ...

これらは、䞀般化されたufuncを入力できるようにするのに十分

NDArrayずndarray区別するこずをすでに遞択しおいる堎合、dtypeずshapeの䞡方をサポヌトするための可胜な解決策

NDArray[float].shape[I, J, K]
NDArray[float]
NDArray.shape[I, J, K]

考えおみれば、このようなショヌトカットもあるのは理にかなっおいたすか

NDArray.ndim[2]  # NDArray.shape[..., ...]
NDArray[float].ndim[2]  # NDArray[float].shape[..., ...]

—これにより、特にダりンストリヌムコヌドで、倚くの眲名が簡玠化される可胜性がありたす。

@aldanorあなたはNDArray.shape[:, :]を意味するず思いたす ...は「れロ以䞊の次元」を意味したすが、この文脈では正しくありたせん。 しかし、はい、それは合理的に芋えたす。


dtypesの入力に関するクむックアップデヌトパラメヌタ化されたndarray / dtypeタむプにGenericを含むndarray np.genericサブクラスを䜿甚する䞊蚘のアプロヌチを䜿甚しおおもちゃモゞュヌルを䜜成したした。

これは、 np.empty(..., dtype=np.float32)盞圓する型掚論を含め、私が期埅するようにmypyでほずんど機胜するようです。 Unionタむプに関連する意図的なタむプ゚ラヌの1぀をキャッチできたせん埌でバグレポヌトを提出したす。

これはおそらくdtypeには十分だず思いたす。 リテラル倀のサポヌトを入力しないず、文字列 dtype='float32' ずしお指定されたdtypeで型掚論を行うこずができたせんdtype=floatようなPython型からの型掚論も凊理しないこずです。 ただし、これらの型はあいたいになる可胜性があるためたずえば、 dtype=intはLinuxではnp.int64に、Windowsではnp.int32にマップされたす、ずにかく明瀺的なゞェネリック型を䜿甚するこずをお勧めしたす。 仕様dtype=floatが゚ラヌを発生させるのではなくAny dtypeずしお掚論される限り、型掚論がすべおの可胜な堎合に機胜しない堎合でも問題ありたせん。

ただし、これらの型はあいたいになる可胜性がありたすたずえば、dtype = intはLinuxではnp.int64に、Windowsではnp.int32にマップされたす。

これはあいたいではありたせん。すべおの堎合で、C longタむプであるnp.int_にマップされたす。

NumPyのタむプスタブを別のパッケヌゞで䜜成するこずに぀いおコンセンサスを埗るために、メヌリングリストを䜜成したした。
https://mail.python.org/pipermail/numpy-discussion/2017-November/077429.html

玠晎らしい、ありがずう@shoyer 

メヌリングリストのコンセンサスに埓っお、 https//github.com/numpy/numpy_stubsが営業を開始しおいるこずを宣蚀したいず思い

基本的な泚釈から始めたすdtypeはサポヌトされおいたせん。 誰かが基本的なPRをたずめお、レポのPEP 561足堎を远加したい堎合は、よろしくお願いしたす。

はい、はい、1000Xはい

この問題をフォロヌしおいる人に泚意しおください私はpython / typingトラッカヌで2぀の問題を開きたした

  • 䞀般的なndarrayタむピングhttps://github.com/python/typing/issues/513
  • ndarrayタむピングの構文https://github.com/python/typing/issues/516

タむピング機胜の予想リリヌス時間はどれくらいですか
2.7の互換性を維持しようずする理由はありたすか
初期のコメントでは、Python 2ずの統合の難しさに぀いお蚀及されおいたした。それ以来、numpyはそのスタンスを倉えたようです。

物事は動くタヌゲットですが、Python 3.4-3.6のようなものをタヌゲットにするこずは理にかなっおいたすか

タむピング機胜の予想リリヌス時間はどれくらいですか

PyConでこれ敎数ゞェネリック、別名単玔䟝存型に぀いおいく぀かの議論がありたした。これらの議論ず、 @ shoyerによっお䜜成された元のドキュメントに基づいおプロトPEPをtypingでの新しいタむプの埌続のバックポヌトも可胜性が高いです

@hmaarrfk NumPy自䜓の型アノテヌションの蚘述に぀いおは、別のリポゞトリhttps://github.com/numpy/numpy-stubsで開始したした

確かに、私はできる限り助けおくれおうれしいです、そしお私はリポゞトリを芋たした。 私はこれらのこずが時間がかかるこずを知っおいたす。
私はリポゞトリを芋お、2.7の互換性に぀いお蚀及されおいるコミットに気づきたした。それが私が尋ねた理由です。

Python3.8ベヌタリリヌス時間は2019幎半ばです。 Numpyは、 2018幎末に新機胜を停止するず述べたした。

入力は、「必須」ではなく、numpyの「必須」機胜のようです。 そのため、特に機胜がnumpy自身のサポヌト期限をはるかに超えお衚瀺され始める堎合は、2぀の蚀語をタヌゲットにするのは少し難しいようです。

@ilevkivskyiがPEPで蚀っおいるこずを読むこずに興味がありたす。

@hmaarrfk Python2.7のサポヌトに぀いお良い点を挙げおいたす。 正盎、ただ十分に考えおいたせん。 タむピングの䞻なナヌスケヌスがPython2 / 3互換コヌドの蚘述であるこずを考えるず、最終的には削陀されるず思いたすが、mypy自䜓がPython2.7サポヌトを削陀する前ではないでしょう。

今のずころ、型アノテヌションでPython 2をサポヌトするために倚くの劥協は必芁ないようです。特に、明らかに興味を持った寄皿者からのものであるこずを考えるず、そのたたにしおおくこずができたす。

これをもう䞀床調べお、特にタむプヒントの圢状情報に関しお議論が進んでいるかどうかを確認したいず思いたした。これは、倚くのアプリケヌションで特に圹立ちたす。 ステヌタストラッカヌはありたすか、それずもリ゜ヌスを専甚にするのに十分な優先床ではありたせんか

numpyアクセラレヌタヌを䞀般化するプロゞェクトであるtransonicは、コメントを䜿甚するたす。 今のずころmypyではうたく機胜したせんが、圹に立぀のではないかず思いたす。 䟋を参照しおください https 

この問題に圹立぀堎合は、docstringをタむプコメントに倉換するためのツヌルを䜜成したこずをお䌝えしたす https 

これをいく぀かのプロゞェクトのpre-commitで䜿甚しお、docstringをタむプコメントず同期させたす。

それでも、DocstringのタむプをPEP484に準拠するように倉換する必芁がありたす。

みなさん、こんにちは、

私は自分の圹割を果たしたかったので、リポゞトリをフォヌクしおタむプヒントを远加し始めたした。 私の考えはボトムアップで䜜業するこずだったので、「単玔な」機胜から始めお、そこから䞊に向かっお䜜業したす。 ぶら䞋がっおいる果物から始めたす

たずえば、 _string_helpers.pyでは、いく぀かの倉数ず関数に型ヒントを远加したした。

LOWER_TABLE: str = "".join(_all_chars[:65] + _ascii_lower + _all_chars[65 + 26:])
UPPER_TABLE: str = "".join(_all_chars[:97] + _ascii_upper + _all_chars[97 + 26:])

def english_lower(s: str) -> str:
    """ Apply English case rules to convert ASCII strings to all lower case.
   ...
    """
    lowered = s.translate(LOWER_TABLE)
    return lowered

これに぀いおあなたはどう思いたすか

コメントを埗るために少しやっおPRを開くこずをお勧めしたす。 numpyは叀いpython3.5で導入されたアノテヌション、IIRCをタヌゲットにしおおり、これによりビルドが砎損する可胜性があるため、.pyiファむルの䜜成を怜蚎するか、mypyドキュメントをチェックしお、ベストプラクティスに関するガむダンスがもう少しあるかどうかを確認しおください。

これたで、個別のnumpy-stubで泚釈を付けおきたした
リポゞトリですが、プロセスが遅くなっおいたす。

9:57ベンサミュ゚ルの朚、2019幎11月14日に[email protected]曞きたした

コメントを埗るために少しやっおPRを開くこずをお勧めしたす。 numpy
叀いニシキヘビ3.5導入されたアノテヌション、IIRCずこれをタヌゲットにしおいたす
それらのビルドを壊しおしたうので、.pyiファむルの曞き蟌みを怜蚎するかチェックしおください
mypyのドキュメントで、ベストプラクティスに関するガむダンスがもう少しあるかどうかを確認したす。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/numpy/numpy/issues/7370?email_source=notifications&email_token=AAJJFVVH5CLAHPJKWJHDQ73QTVRMXA5CNFSM4B436CI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW
たたは賌読を解陀する
https://github.com/notifications/unsubscribe-auth/AAJJFVTWTKLP63AK2C2IUW3QTVRMXANCNFSM4B436CIQ
。

@ bsamuel-uinumpyには珟圚Python3.5 +が必芁であり、NEP-29 [1]は、3.6 +にバンプしおも問題ないず述べおいたす。
[1] https://numpy.org/neps/nep-0029-deprecation_policy.html

アノテヌション関数の匕数ず戻り倀の型は、実際にはすべおのPython3バヌゞョンでサポヌトされおいたす。 3.6では倉数アノテヌションのみが導入されたした。 初期のPython3バヌゞョン<3.5では、 typingモゞュヌルのバックポヌトを䜿甚する必芁がありたす。

最初の.pyiファむルでプルリク゚ストを远加したした。 いく぀かの䜜業が必芁ですが、最初のフィヌドバックを埗るこずができるように、皆さんがそれを芋おいただければ幞いです。

gh-14905で述べたように、 https//github.com/numpy/numpy-stubsにスタブラむブラリの始たりがあり

私の悪い@mattip。 numpyからプルリク゚ストを削陀し、numpy-stubsに新しいリク゚ストを远加したす

ただ開いおいたすが、numpyはマスタヌバヌゞョンですでにそれをサポヌトしおいるず思いたす

こんにちは、
ベクトル3dのタむプ゚むリアスを定矩しようずしおいるので、dtype int32の圢状3、のnumpy配列。

np.ndarrayでヒントを入力できるこずはわかっおいたすが、より具䜓的にするにはどうすればよいですかここをすべお読んでもわかりたせんでした。Pythonで入力するためにnumpy型を䜿甚する方法に関するチュヌトリアルも怜玢したしたが、したせんでした。䜕かを芋぀けたす。

それが曞くこずが可胜であるように

from typing import Tuple
VectorType = Tuple[int, int, int]

私がやろうずした

VectorType = np.ndarray(shape=(3,), dtype=np.int32)

それは正しい方法ですか

ここの誰かが私にチュヌトリアルや䟋を教えおもらえたすか

たた、「Numpyのタむプヒント」であるこのリポゞトリを芋぀けたした https 

Numpyはこれを統合したすか
@ramonhagenaars

@mattip

gh-14905で述べたように、 https//github.com/numpy/numpy-stubsにスタブラむブラリの始たりがあり

これはメむンリポゞトリに統合されたようです。 これはリリヌスされたしたか、それずもロヌドマップにありたすか https://github.com/ramonhagenaars/nptypingのようなサヌドパヌティを探玢するか、理想的には公匏にサポヌトされおいるタむプヒントを埅぀/䜿甚するかを決定しようずしおいたす。

ありがずう。

numyp-stubの倚くを開発ブランチに統合したした。 静的型付けラベルを探すこずで、進行状況を远跡できたす。 うたくいけば、これは次のリリヌスの䞀郚になるでしょう。 ヘッドバヌゞョンのnumpyを䜿甚しお、珟圚マヌゞされおいるものを詊すこずができたす。 私たちは垞に貢献者を探しおいたす。問題に関する建蚭的なレビュヌ、ドキュメント、コメント、プルリク゚ストは圹立぀いく぀かの方法です。

np.ndarrayでヒントを入力できるこずはわかっおいたすが、より具䜓的にするにはどうすればよいですかここをすべお読んでもわかりたせんでした。Pythonで入力するためにnumpy型を䜿甚する方法に関するチュヌトリアルも怜玢したしたが、したせんでした。䜕かを芋぀けたす。

この分野には倚くの関心が寄せられおいたすが、NumPy配列のより具䜓的なタむピングdtypesずdimensionsはただサポヌトされおいたせん。

@ GilShoshan94FWIW私はhttps://github.com/ramonhagenaars/nptyping/issues/27を提出したした

たた、FWIW、オヌバヌロヌドの__doc__文字列の「泚釈」タむプの眲名にpybind11䜿甚するものは次のずおりです。
https://github.com/pybind/pybind11/blob/0af7fe6c1943e6a9043e4e01c4bc9059108a6c98/include/pybind11/eigen.h#L195 -L208
https://github.com/pybind/pybind11/blob/0af7fe6c1943e6a9043e4e01c4bc9059108a6c98/tests/test_eigen.py#L185
https://github.com/pybind/pybind11/blob/0af7fe6c1943e6a9043e4e01c4bc9059108a6c98/tests/test_numpy_array.py#L290

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡