Numpy: Ndarray, dtype рдФрд░ ufunc рдХреЗ рд▓рд┐рдП hinting / annotation (PEP 484) рдЯрд╛рдЗрдк рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдорд╛рд░реНрдЪ 2016  ┬╖  70рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

рдлрд╝реАрдЪрд░ рдЕрдиреБрд░реЛрдз: Numpy рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде PEP 484 рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдмрдирд┐рдХ рд╕рдорд░реНрдердиред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ numpy.ndarray рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ?

рдЕрднреА, рдореИрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреЛрдИ рднреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдЫ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рд╕реБрдиреНрди рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдкрдиреЗ array_like рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдирд╛рдо рдЬреЛрдбрд╝рд╛ред рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ, dtype рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рд╣реЛ, рд╕рд╛рде рд╣реА рд╕рд╛рде ufuncред

рдореВрд▓ рдПрд╕рдУ рдкреНрд░рд╢реНрди

01 - Enhancement static typing

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдЖрдЧреЗ рдмрдврд╝реА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рдХреНрдпрд╛ рдХреЛрдИ рд╕реНрдЯреЗрдЯрд╕ рдЯреНрд░реИрдХрд░ рд╣реИ рдпрд╛ рдпрд╣ рдХреЛрдИ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдЗрд╕рдХреЗ рдкреНрд░рддрд┐ рд╕рдорд░реНрдкрд┐рдд рд╣реЛ?

рд╕рднреА 70 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? :-)

рдореИрдВ рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо gh рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЛ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдУрдкрди-рдПрдВрдбреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИред

рдПрд╕рдУ рдкрд░ рдпрд╣ рдЬрд╡рд╛рдм рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд╛рдВрдд рдирдП рдЕрдЬрдЧрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдпрд╛ рдХреБрдЫ рднреА (рдмрд▓реНрдХрд┐ рд╡рд┐рдкрд░реАрдд) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХ рд░рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рди рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдЙрдард╛рддрд╛ рд╣реИред

рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреА рднрд░реНрддреА рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реЛрдВред

рдзрдиреНрдпрд╡рд╛рдж, @njsmith рдореИрдВрдиреЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдореБрджреНрджрд╛-рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдпрд╣рд╛рдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдЕрд╕рдВрд░рдЪрд┐рдд рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХреЗ рд╡рд┐рдкрд░реАрдд (рдореИрдВ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ 'рдлрд╝реАрдЪрд░ рдЕрдиреБрд░реЛрдз' рдЯреИрдЧ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛ ...)

рдЪреВрдВрдХрд┐ рдПрд╕рдУ рдиреЗ рдореБрдЭреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЧрдпрд╛, рдореИрдВрдиреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдЬрд╡рд╛рдм рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Numpy рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдЙрд╕реЗ рдХреНрд░реЗрдбрд┐рдЯ рджреЗрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ)ред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!

рд╣реИрд▓реЛ рджреЛрд╕реНрддреЛрдВ! рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣рд╛рдБ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдХреА

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЖрдЧреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ NumPy рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NumPy API рдХреЗ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓ рдкрд╣рд▓реВ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ NumPy рд╡рд░реНрддрдорд╛рди рдореЗрдВ np.array рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдордирдорд╛рдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░реЗрдВ, https://github.com/numpy/numpy/issues/5353) рджреЗрдЦреЗрдВред

рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдХрд╛рдо рдпрд╣рд╛рдВ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ: https://github.com/machinalis/mypy-data

рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрддрдмреНрдз рдпрд╛ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/machinalis/mypy-data/issues/16

рд╕реАрд╕реА @mrocklin

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ NumPy рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдврд╝рд┐рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧрд╛ред рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдпрд╛ NumPy рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рдХрджрдо рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ? рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрдкреВрд░реНрдг рд╕реНрдЯрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдФрд░ рдореИрдВ рдереЛрдбрд╝реА рд╕реА рджрд┐рд╢рд╛ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВ?

@henryJack рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╢рд╛рдпрдж рдЯреВрд▓реАрдВрдЧ рд╣реЛрдЧреА: рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд┐ рд╣рдо рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдиреНрдпреВрдкреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ) рдПрдХ рддрд░рд╣ рд╕реЗ рдореИрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдлрд┐рд░, рдЕрддреНрдпрдВрдд рдиреНрдпреВрдирддрдо рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП dtype рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА, рдХреЗрд╡рд▓ ndarray , ndarray[int] )ред

рдпрджрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдореИрдВрдиреЗ Google рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреА рдЕрдиреВрдареА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдФрд░ рдкрд╛рдЗрдкреНрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡рддрдпрд╛ рдпрд╣ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реБрдЖ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдореВрдирд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдкрд░ рдорд╛рдЗрдкреА рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИ?

рдХреНрдпрд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдпрд╛ рдЕрд▓рдЧ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдФрд░ рдкрд╛рдВрдбрд╛ рд╕реЗ рднреА рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдХреЛрдбрдмреЗрд╕ рдмрдирд╛рдо рдХреЛрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдкрддреНрддрд┐рдпреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@shoyer figure out how we can integrate basic type annotations
рдмрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ https://github.com/machinalis/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyi in numpy рдореЙрдбреНрдпреВрд▓ рдмреЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ .. рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВред рдХрдо рд╕реЗ рдХрдо

рдХреНрдпрд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдпрд╛ рдЕрд▓рдЧ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛?

рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╕реБрдВрджрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ NumPy рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИред рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдЯрд┐рдкреНрдкрдгреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рднреА, рд╣рдореЗрдВ рдкрд╛рдпрдерди 2 рдкрд░ typing рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ NumPy рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХрд╛рдВрд╢ рдореБрдЦреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдХрд╛рд░реНрдп (рдЪреАрдЬреЗрдВ рдЬреИрд╕реЗ ndarray рдФрд░ array ) рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ рд╡реИрд╕реЗ рднреА рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдХреЗрд╡рд▓ рдЦрдЧреЛрд▓реАрдп рдореЙрдбреНрдпреВрд▓ рдмреЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ https://github.com/machinalis/mypy-data/blob/master/numpy-mypy/numpy/__init__.py рдбрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА .. рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВред рдХрдо рд╕реЗ рдХрдо

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ mypy рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ?

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рд╣рдо рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдмрдЬрд╛рдп numpy.core.multiarray рд╕реАрдзреЗ рдПрдиреЛрдЯреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ( multiarray рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬрд╣рд╛рдВ NumPy рдХреЗ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ ndarray рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред) рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ NumPy рдХреЛ рдЕрдкрдиреЗ рдХреБрдЫ рдкреНрдпреЛрд░-рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдБ, np.empty(shape=(5, 5), dtype='float32') рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ?

np.linalg.svd рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @kjyv рдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдХрджрдо рдЙрдард╛рдпрд╛ рд╣реИред

np.empty : https://github.com/kjyv/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyi#L523
np.linalg.svd : https://github.com/kjyv/mypy-data/blob/master/numpy-mypy/numpy/linalg/__init__.pyi#L13

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдЯреНрд░рд╛рдЗрдЬреНрдб рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдЙрдирдХреЗ dtype рдХреЗ рд╕рд╛рде рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЙрдирдХреЗ рдЖрдпрд╛рдо рдпрд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрд░рд┐рдЬрд╝ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд╣реИ? рдкрд╛рдпрдерди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд┐рддрдирд╛ рдкрд░рд┐рд╖реНрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ?

рд╣рд╛рдБ, рд╡реЗ рдЕрдкрдиреЗ dtype рджреНрд╡рд╛рд░рд╛ рдорд╛рдирдХреАрдХреГрдд рд╣реИрдВред рдореИрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Generic[dtype, int] рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ndim ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдпрд╣реА рдХрд░рддреА рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдХрд╛рд░ рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВред рди рд╣реА рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЬреЛ рд▓рд╛рдн рд▓рд╛рдПрдЧрд╛ рдпрд╛ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдХреНрдпрд╛ рдХреЛрдИ dtype рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ numpy dtypes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд░?

рдпрд╣ рднреА рдЕрдЬреАрдм рд╣реИ рдХрд┐ numpy.empty рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ
рдпрд╣ dtype = рдХреАрд╡рд░реНрдб рдорд╛рди рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдВрддрд░ рдХрд░рдиреЗ рдФрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИ?

1 рд╕рд┐рддрдВрдмрд░, 2017 рдХреЛ 6:42 рдмрдЬреЗ, "рдЬреИрдХреНрд╕ рдХреЗрд╡рдо" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдБ, рд╡реЗ рдЕрдкрдиреЗ dtype рджреНрд╡рд╛рд░рд╛ рдорд╛рдирдХреАрдХреГрдд рд╣реИрдВред рдореИрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдБ
рдореЙрдбреНрдпреВрд▓, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ [dtype,
int] ndim рдкрд░ рдкрд░рд┐рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдпрд╣реА рдХрд░рддреА рд╣реИред рдореИрдВ рдирд╣реАрдВ
рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдХрд╛рд░ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рди рд╣реА рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреНрдпрд╛
рд▓рд╛рдн рдЬреЛ рд▓рд╛рдПрдЧрд╛ рдпрд╛ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдХреНрдпреЛрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/7370#issuecomment-326698639 , рдпрд╛ рдореНрдпреВрдЯ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AASszMlYO7iHdoPE_GU--njIYICSVVZ0ks5seIhFgaJpZM4Hm_CR
ред

рдЖрдк рд╕реБрдиреНрди dtypes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ floating рд╕рд╛рде np.std рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╣рдо рдкрд░рд╡рд╛рд╣ рдХрд░реЗрдВрдЧреЗред

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

рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдХреБрдЫ рд╕рдЦреНрдд рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП np.empty[dtype] рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (ShapeType) -> ndarray[dtype] рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред

рдЕрд╕рд╛рдорд╛рдиреНрдп np.cast[dtype](x) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдорд┐рд╕рд╛рд▓ рд╣реИрдВ

@jwkvam рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж 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 -L113333

рд╣рдореЗрдВ рдЖрдпрд╛рдореЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реБрдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рднреА рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, np.expand_dims рдирдХреНрд╢реЗ ndim -> ndim+1 ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдЬреИрд╕реЗ, Zero , One , Two , Three , редред ред рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдердХ рдЬрд╛рддрд╛ред

TensorFlow рдореЗрдВ, tf.Dimension() рдФрд░ tf.TensorShape() рдЖрдкрдХреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрдд рд╣реЛрдиреЗ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд▓реНрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╣рд╛рдпрдХ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕реНрдерд┐рд░ рдЖрдХрд╛рд░ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдХрд┐рд╕реА рднреА рдЧреИрд░-рджрд╕рд┐рдпреЛрдВ рддрд░реНрдХ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ NumPy рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд▓рдЪреАрд▓рд╛рдкрди рд╣реИред

@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 рдЬреИрд╕реЗ dtypes рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдореБрдЭреЗ рддрдпрд╢реБрджрд╛ рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛рдирд╛ рдерд╛, рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ рдХрд┐ рдЙрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

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)

рдореБрдЭреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреБрдЫ рднреА рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред

рднрд▓реЗ рд╣реА рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдЙрддрдиреА рдкрд░рд┐рд╖реНрдХреГрдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдиреА рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ? рдПрдХ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЬреЗрдбреА рдХреЛ рдмреЗрд╣рддрд░ рдХреЛрдб рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЯрд╛рдЗрдкреНрд╕ рд╕реНрд╡реИрдк рдХрд░рддрд╛ рд╣реВрдБ:

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ int рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ float рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдз рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯрд╛рдЗрдкрд┐рдВрдЧ PEP рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЯреЙрд╡рд░ рдкрд░ рдиреЛрдЯ рджреЗрдЦреЗрдВ:
https://www.python.org/dev/peps/pep-0484/#the -numeric-Tower

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬреЗрдиреЗрд░рд┐рдХ рдкрд╛рдпрдерди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп NumPy рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, np.ndarray[np.integer] рдмрдЬрд╛рдп np.ndarray[int] ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ TypeVar рдХрд╛ bound рддрд░реНрдХ рд╣реИред рддреЛ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд:

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

рдореБрдЭреЗ рддрдпрд╢реБрджрд╛ рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛рдирд╛ рдерд╛, рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ рдХрд┐ рдЙрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рдереЗ?

рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рд╕реНрдЯрдм рдореЗрдВ dtype рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЙрдиреНрд╣реЛрдВрдиреЗ рдорд╛рдпрдкреА-рдбреЗрдЯрд╛ рд░реЗрдкреЛ рдореЗрдВ рдРрд╕рд╛ рдХрд┐рдпрд╛ред

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

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рдореИрдВ dtype рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mypy рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ dtype: Type[D]=float рдФрд░ dtype: Type[D]=Type[float] ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ dtype рднреА рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдмрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рдХреЛ float , рдЙрджрд╛ рдЬреИрд╕реЗ np.float64 рдЬреИрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛ред

# 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 рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдЯреНрд░реИрдХрд░ (рдЕрдЬрдЧрд░ / mypy # 3540 рдЬреНрдпрд╛рджрд╛рддрд░)ред рд╡рд╣рд╛рдБ, рд╣рдо рдореБрдЦреНрдп рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕реБрдиреНрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЙрдирдХреЗ рдЖрдпрд╛рдореЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдореИрдкреА рдпрд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реБрдиреНрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ!

Mypy рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдЯреНрд░реИрдХрд░ (рдЕрдЬрдЧрд░ / mypy # 3540 рдЬреНрдпрд╛рджрд╛рддрд░)ред рд╡рд╣рд╛рдБ, рд╣рдо рдореБрдЦреНрдп рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕реБрдиреНрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЙрдирдХреЗ рдЖрдпрд╛рдореЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдореИрдкреА рдпрд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реБрдиреНрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ!

рдореИрдВ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬреНрдб рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЬрд╛рдирдХрд╛рд░реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдЬреИрд╕реЗ 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 рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛? рд╣рдо рдХрд┐рддрдирд╛ рдкрд░рд┐рд╖реНрдХреГрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдХрд╛рд░ рдФрд░ рдЖрдпрд╛рдореАрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдВ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ (рдФрд░ рдмрд╕ рдЕрдЬрдЧрд░ / рдореИрдкреА # 3540 рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЕрдм рдХреЗ рд▓рд┐рдП рд╣рдо NumPy рдХреЗ рд▓рд┐рдП рдЙрд╕ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╣рддреЗ рд╣реИрдВред рдмрд╕ ndarray[float64] рдХрд╛рдо рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЪреБрдиреМрддрд┐рдпрд╛рдБ рджреА рдЧрдИ рд╣реИрдВред

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдХрджрдо рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдЖрдХрд╛рд░ рдФрд░ рдЕрдиреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдмрд┐рдирд╛ рдЦрддрдирд╛ (рдФрд░ рдкрдВрдбреЛрдВ рдФрд░ рд╕реНрдХреЗрд▓реЗрд░) рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред

рдЕрдиреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ dtype (рдЖрдХрд╛рд░ = 5,6) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдЖрдХреГрддрд┐ рдкрд░ рдПрдХ рдмрд╛рдзрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рдлрдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд░реНрдЧрд╛рдХрд╛рд░ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЬрд╣рд╛рдВ рдПрдХ рдЖрдпрд╛рдо рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ 2x рд╣реЛрдирд╛ рд╣реИред

рдЕрдиреБрдмрдВрдз рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ PEP 472 рдпрд╣рд╛рдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Array[float64, ndim=2] рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, PEP 472 рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рд╕рдВрднрд╡рдд: рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╕реБрдзрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдЧрд╛! (рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдкрд┐рдВрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдХреНрд░рдордг рдореЗрдВ рдирд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЛрд╣рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рднреА рд╣реИрдВред)

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди, рд╣рдо рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [] рд╕рд┐рд░реНрдл рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред рддреЛ object(*args, **kwargs) рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, object[*args, **kwargs] рдХреБрдЫ рдФрд░, рдФрд░ рдлрд┐рд░ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ object{*args, **kwags} рдФрд░ object<*args, **kwargs> ред ;-)

@ рд╣рдорддрд╛рд░ : рдЗрд╕реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд╢рд╛рдпрдж рд╣рдореЗрдВ ndarray[float].constrain(ndim=2) рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ

рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: ndarray[float](ndim=2) , рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рд╣реИ рдХрд┐ рдЬреЗрдирд░рд┐рдХ __call__ рдлрд┐рд░ рд╕реЗ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдореБрджреНрджрд╛ ndarray[float] рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ ndarray[float] рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ndarray , рдХрд┐рд╕реА рдХреЛ ndarray рд╣реА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ (рдмреЗрд╣рддрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛрдб рдмрджрд▓рдирд╛)ред

рдПрдХ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, ConstrainedTypeVar , рдЬрд╣рд╛рдВ рдЖрдк ConstrainedTypeVar('A', bound=ndarray, dtype=float, ndim=2) рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдк A рдЙрдкрдпреЛрдЧ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ varред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЙрдХ рд▓рд┐рдЦрд╛ , рдЬреЛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдФрд░ рдЖрдпрд╛рдо рдкрд╣рдЪрд╛рди рдХреА рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. рдПрдХ 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]: ...

рдпреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд ufuncs рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрдЯрд░ рджреЗрдЦреЗрдВред

рдпрджрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА NDArray рдФрд░ ndarray рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрди рд░рд╣реЗ рд╣реИрдВ, рддреЛ dtypes рдФрд░ рдЖрдХреГрддрд┐рдпреЛрдВ рджреЛрдиреЛрдВ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди:

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 рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдкрд░ рддреНрд╡рд░рд┐рдд рдЕрдкрдбреЗрдЯ: рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЦрд┐рд▓реМрдирд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ np.generic рдЙрдк-рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ Generic рд▓рд┐рдП, рдЬреЛ ndarray dtype ред

рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ mypy рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, np.empty(..., dtype=np.float32) рдХреЗ рдмрд░рд╛рдмрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рд╕рд╣рд┐рддред рдпрд╣ рдореЗрд░реА рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ Union рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдореИрдВ рдмрд╛рдж рдореЗрдВ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рджрд░реНрдЬ рдХрд░реВрдВрдЧрд╛)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ dtypes рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╢рд╛рдмреНрджрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ dtype ( dtype='float32' ) рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗред рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд╛рдпрдерди рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ dtype=float рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рднреА рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпреЗ рдкреНрд░рдХрд╛рд░ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ, dtype=int рдирдХреНрд╢реЗ np.int64 Linux рдкрд░ рдФрд░ np.int32 Windows рдкрд░), рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ рд╕реНрдкрд╖реНрдЯ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реИрд╕реЗ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣рд░ рд╕рдВрднрд╡ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ dtype=float Any рддреНрд░реБрдЯрд┐ рдХреЗ рдмрдЬрд╛рдп рдЕрдиреБрдорд╛рдирд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпреЗ рдкреНрд░рдХрд╛рд░ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, dtype = int рдореИрдкреНрд╕ рдкрд░ np.int64 рд▓рд┐рдирдХреНрд╕ рдкрд░ рдФрд░ np.int32 рд╡рд┐рдВрдбреЛрдЬ рдкрд░)

рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ np.int_ рд▓рд┐рдП рдореИрдк рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ C long ред

рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдореЗрдВ NumPy рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк-рд╕реНрдЯрдмреНрд╕ рд▓рд┐рдЦрдиреЗ рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рд▓рд┐рдЦреА рд╣реИ:
https://mail.python.org/pipermail/numpy-discussion/2017-November/077429.html

рдЕрджреНрднреБрдд, рдзрдиреНрдпрд╡рд╛рдж @shoyer !

рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рд╕рд╣рдорддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП https://github.com/numpy/numpy_stubs рдЦреЛрд▓рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!

рд╣рдо рдмреБрдирд┐рдпрд╛рджреА рдПрдиреЛрдЯреЗрд╢рди (рдХреЛрдИ dtype рд╕рдорд░реНрдерди) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдХреЛрдИ рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдкреАрдИрдкреА 561 рдордЪрд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓ рдкреАрдЖрд░ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА!

рд╣рд╛рдБ, рд╣рд╛рдБ, 1000X рд╣рд╛рдБ!

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╕реНрдпрд╛рдПрдБ: рдореИрдВрдиреЗ рдЕрдЬрдЧрд░ / рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЯреНрд░реИрдХрд░ рдкрд░ рджреЛ рдореБрджреНрджреЗ рдЦреЛрд▓реЗ рд╣реИрдВ:

  • ndarray рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ (https://github.com/python/typing/issues/513)
  • ndarray рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ (https://github.com/python/typing/issues/516)

рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд░рд┐рд▓реАрдЬрд╝ рд╕рдордп рдХреНрдпрд╛ рд╣реИ?
рдХреНрдпрд╛ 2.7 рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ?
рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдиреЗ рдЕрдЬрдЧрд░ 2 рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рддрдм рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реБрдиреНрди рдиреЗ рдЕрдкрдирд╛ рд░реБрдЦ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред

рдЪреАрдЬреЗрдВ рд▓рдХреНрд╖реНрдп рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реА рд╣реИрдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдкрд╛рдпрдерди 3.4-3.6 рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛?

рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд░рд┐рд▓реАрдЬрд╝ рд╕рдордп рдХреНрдпрд╛ рд╣реИ?

рдкрд╛рдЗрдХреЙрди рдореЗрдВ рдЗрд╕ (рдкреВрд░реНрдгрд╛рдВрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдЙрд░реНрдл тАЛтАЛрд╕рд░рд▓ рдЖрд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЪрд░реНрдЪрд╛рдПрдВ рд╣реБрдИрдВ, рдореИрдВ рдЗрди рдЪрд░реНрдЪрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкреНрд░реЛрдЯреЛ-рдкреАрдИрдкреА рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдореВрд▓ рдбреЙрдХ рдЬреЛ @shoyer рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рд╣реИред рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп PEP рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдпрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Python 3.8 Beta 1 рдХреЗ рд▓рд┐рдП рд╕рдордп рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдкрд╛рдпрдерди 2 рдХреЗ рд▓рд┐рдП typing рдореЗрдВ рдирдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдмрд╛рдж рдХрд╛ рдмреИрдХрдкреЛрд░реНрдЯ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ)

рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/numpy/numpy-stubsред рдЖрдкрдХреЛ рдЙрди рд╕реНрдЯрдмреНрд╕ рдХреЛ рдЪрд╛рд▓реВ рд╕реНрдерд┐рддрд┐ рдореЗрдВ (рдорд╛рдЗрдкреА рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде) рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡реЗ рдкреВрд░реНрдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВред рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА!

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣рд╛рдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рднрдВрдбрд╛рд░ рджреЗрдЦрд╛ред рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд░реЗрдкреЛ рдХреЛ рджреЗрдЦрд╛ рдФрд░ 2.7 рд╕рдВрдЧрддрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рджреЗрдЦрд╛, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкреВрдЫрд╛ред

рдкрд╛рдпрдерди 3.8 рдмреАрдЯрд╛ рд░рд┐рд▓реАрдЬ рдХрд╛ рд╕рдордп 2019 рдХреЗ рдордзреНрдп рд╣реИ ред рдиреЗрдореНрдкреА рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ 2018 рдХреЗ рдЕрдВрдд рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд░реЛрдХ рджреЗрдВрдЧреЗред

рдЯрдВрдХрдг рдПрдХ "рдЕрдЪреНрдЫрд╛-рдЯреВ-рд╣реИ" рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди рдХреЗ рд▓рд┐рдП рдПрдХ "рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рдХреЗ рд╡рд┐рдкрд░реАрдд рд▓рдЧрддрд╛ рд╣реИред рдЬреИрд╕реЗ, рджреЛ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдлреАрдЪрд░ рд╕реБрдкреНрдкреА рдХреА рдЕрдкрдиреА рд╕рдорд░реНрдерди рд╕рдордп рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗрдЧрд╛ред

рдореБрдЭреЗ рдпрд╣ рдкрдврд╝рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА рдХрд┐ рдкреАрдИрдкреА рдореЗрдВ @ilevkivskyi рдХрд╛ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИред

@hmarrfk рдЖрдк рдкрд╛рдпрдерди 2.7 рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдЙрдард╛рддреЗ рд╣реИрдВред рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдХрд┐ рдореИрдкреА рд╣реА рдкрд╛рдпрдерди 2.7 рд╕рдорд░реНрдерди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рдЙрдкрдпреЛрдЧ-рдХреЗрд╕ рдкрд╛рдпрдерди 2/3 рд╕рдВрдЧрдд рдХреЛрдб рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдЕрдЬрдЧрд░ 2 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдордЭреМрддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢ рд╣реВрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдПрдХ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдЖрдпрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗред

рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдЖрдЧреЗ рдмрдврд╝реА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рдХреНрдпрд╛ рдХреЛрдИ рд╕реНрдЯреЗрдЯрд╕ рдЯреНрд░реИрдХрд░ рд╣реИ рдпрд╛ рдпрд╣ рдХреЛрдИ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдЗрд╕рдХреЗ рдкреНрд░рддрд┐ рд╕рдорд░реНрдкрд┐рдд рд╣реЛ?

transonic , рдЦрд╕реНрддрд╛ рддреНрд╡рд░рдХ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╛рдпрдерди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрдХреЗрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ https://transonic.readthedocs.io/en/latest/examples/type_hin.html.html

рдпрджрд┐ рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдпрд╛ рд╣реИ: https://pypi.org/project/doc484/

рдореИрдВ рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд┐рдВрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдЖрдкрдХреЛ рдЕрднреА рднреА PEP484 рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ docstrings рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░,

рдореИрдВ рдЕрдкрдирд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд░реЗрдкреЛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдЯрд╛рдЗрдк рд╕рдВрдХреЗрдд рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдиреАрдЪреЗ-рдКрдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП "рд╕рд░рд▓" рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдКрдкрд░ рдХреА рддрд░рдл рдХрд╛рдо рдХрд░реЗрдВред (рдХрдо рд▓рдЯрдХрдиреЗ рд╡рд╛рд▓реЗ рдлрд▓реЛрдВ рд╕реЗ рд╢реБрд░реВ)

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП _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

рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдФрд░ рдПрдХ рдкреАрдЖрд░ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред numpy рдкреБрд░рд╛рдиреЗ pythons (3.5 рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдПрдиреЛрдЯреЗрд╢рди, IIRC) рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрди рдмрд┐рд▓реНрдбреНрд╕ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ .pyi рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдпрд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП mypy рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╣реИред

рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реБрдиреНрди-рд╕реНрдЯрдмреНрд╕ рдореЗрдВ рдЕрдм рддрдХ рдПрдиреЛрдЯреЗрд╢рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рднрдВрдбрд╛рд░, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдзреАрдореА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░рд╣реА рд╣реИред

Thu, Nov 14, 2019 рдХреЛ рд╕реБрдмрд╣ 9:57 рдмрдЬреЗ рдмреЗрди рд╕реИрдореБрдЕрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдФрд░ рдПрдХ рдкреАрдЖрд░ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред Numpy
рдкреБрд░рд╛рдиреЗ рдЕрдЬрдЧрд░ (3.5 рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдПрдиреЛрдЯреЗрд╢рди, IIRC) рдФрд░ рдпрд╣ рд▓рдХреНрд╖реНрдп рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЙрди рдмрд┐рд▓реНрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж .pyi рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рдЬрд╛рдБрдЪ рдХреЛ рджреЗрдЦреЗрдВ
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╣реИ рдпрд╛ рдирд╣реАрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/7370?email_source=notifications&email_token=AAJJFVVHHCLCLPPJKWJQQ73RTVTV4A5A5CNFSM4B436CI2YY3PNVWKH5252HFH5252&hl=hf&hl=hi
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAJJFVTWTKLP63AK2C2IUW3QTVRMXANCNFSM4B436CIQ
ред

@ bsamuel-ui numpy рдХреЛ рдлрд┐рд▓рд╣рд╛рд▓ рдкрд╛рдпрдерди 3.5+ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ NEP-29 [1] рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ 3.6+ рдкрд░ рдЯрдХреНрдХрд░ рджреЗрдирд╛ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
[рез] https://numpy.org/neps/nep-0029-deprecation_policy.html

рдПрдиреЛрдЯреЗрд╢рди (рдлрд╝рдВрдХреНрд╢рди рдЖрд░реНрдЧреНрд╕ рдФрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдкрд╛рдпрдерди 3 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ; 3.6 рдХреЗрд╡рд▓ рдЪрд░ рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдХреАред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд╛рдпрдерди 3 рд╕рдВрд╕реНрдХрд░рдг (<3.5) рдореЗрдВ рдЖрдкрдХреЛ typing рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреИрдХрдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд╣рд▓реА .pyi рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЬреЛрдбрд╝рд╛ рд╣реИред рдЗрд╕реЗ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд▓реЛрдЧ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓ рд╕рдХреЗ

рдЬреИрд╕рд╛ рдХрд┐ gh-14905 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ https://github.com/numpy/numpy-stubs рдореЗрдВ рдПрдХ рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ

рдореЗрд░реА рдмреБрд░ @ рдордЯреНрдЯреАрдк рдореИрдВ рд╕реБрдиреНрди рд╕реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ рдФрд░ рд╕реБрдиреНрди-рд╕реНрдЯрдмреНрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛

рдпрд╣ рдЕрднреА рднреА рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╕реБрдиреНрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рд╕реНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ

рдирдорд╕реНрддреЗ,
рдореИрдВ рд╡реЗрдХреНрдЯрд░ 3 рдбреА рдХреЗ рд▓рд┐рдП рдПрдП рдЯрд╛рдЗрдк рдЙрд░реНрдл тАЛтАЛрдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП dtype int32 рдХреА рдЖрдХреГрддрд┐ (3) рдХрд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд░рдгреАред

(рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ np.ndarray рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕рдм рдкрдврд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдореИрдВ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдЦреЛрдЬрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдирд╣реАрдВ рдХреБрдЫ рднреА рдкрддрд╛ рд▓рдЧрд╛рдПрдБред )

рдЬреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ:

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

рдореИрдВрдиреЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

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

рдХреНрдпрд╛ рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ?

рдХреНрдпрд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдореБрдЭреЗ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдпрд╣ рд░реЗрдкреЛ рдорд┐рд▓рд╛ рдЬреЛ "Numpy рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕рдВрдХреЗрдд" рд╣реИ: https://github.com/ramonhagenaars/tptyping

рдХреНрдпрд╛ рдирдореНрдкреА рдЗрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░реЗрдЧреА?
@ramonhagenaars

@mattip

рдЬреИрд╕рд╛ рдХрд┐ gh-14905 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ https://github.com/numpy/numpy-stubs рдореЗрдВ рдПрдХ рд╕реНрдЯрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдореБрдЦреНрдп рд░реЗрдкреЛ рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИ? рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ https://github.com/ramonhagenaars/nptyping рдпрд╛ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ) рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ / рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдзрдиреНрдпрд╡рд╛рджред

рд╣рдордиреЗ рдмрд╣реБрдд рд╕реЗ рд╕реНрддреВрдк-рд╕реНрдЯрдмреНрд╕ рдХреЛ рд╡рд┐рдХрд╛рд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЖрдк рд╕реНрдереИрддрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд▓реЗрдмрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░ рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реБрдиреНрди рдХреЗ рдПрдХ рд╣реЗрдб рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрдпрд╛ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ: рд░рдЪрдирд╛рддреНрдордХ рд╕рдореАрдХреНрд╖рд╛, рдкреНрд░рд▓реЗрдЦрди, рдФрд░ рдореБрджреНрджреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдорджрдж рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред

(рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ np.ndarray рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕рдм рдкрдврд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдореИрдВ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдЦреЛрдЬрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдирд╣реАрдВ рдХреБрдЫ рднреА рдкрддрд╛ рд▓рдЧрд╛рдПрдБред )

рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрд╣реБрдд рд░реБрдЪрд┐ рд╣реИ, рд▓реЗрдХрд┐рди NumPy рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ (dtypes рдФрд░ рдЖрдпрд╛рдо) рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред

@ GilShoshan94 FWIW рдореИрдВрдиреЗ https://github.com/ramonhagenaars/nptyping/issues/27 рджрд╛рдпрд░ рдХреА рд╣реИ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдпрд╣рд╛рдВ __doc__ рдУрд╡рд░рд▓реЛрдб рдХреЗ рд▓рд┐рдП pybind11 "
https://github.com/pybind/pybind11/blob/0af7fe6c1943e6a9043e4e01c4bc9059108a6c98/include/pybind11/higen/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 рд░реЗрдЯрд┐рдВрдЧреНрд╕