arithmetic.pyi 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  1. import datetime as dt
  2. from typing import Any
  3. import numpy as np
  4. import numpy.typing as npt
  5. from numpy._typing import _32Bit,_64Bit, _128Bit
  6. from typing_extensions import assert_type
  7. b: bool
  8. c: complex
  9. f: float
  10. i: int
  11. c16: np.complex128
  12. c8: np.complex64
  13. # Can't directly import `np.float128` as it is not available on all platforms
  14. f16: np.floating[_128Bit]
  15. f8: np.float64
  16. f4: np.float32
  17. i8: np.int64
  18. i4: np.int32
  19. u8: np.uint64
  20. u4: np.uint32
  21. b_: np.bool
  22. M8: np.datetime64
  23. M8_none: np.datetime64[None]
  24. M8_date: np.datetime64[dt.date]
  25. M8_time: np.datetime64[dt.datetime]
  26. M8_int: np.datetime64[int]
  27. date: dt.date
  28. time: dt.datetime
  29. m8: np.timedelta64
  30. m8_none: np.timedelta64[None]
  31. m8_int: np.timedelta64[int]
  32. m8_delta: np.timedelta64[dt.timedelta]
  33. delta: dt.timedelta
  34. AR_b: npt.NDArray[np.bool]
  35. AR_u: npt.NDArray[np.uint32]
  36. AR_i: npt.NDArray[np.int64]
  37. AR_f: npt.NDArray[np.float64]
  38. AR_c: npt.NDArray[np.complex128]
  39. AR_m: npt.NDArray[np.timedelta64]
  40. AR_M: npt.NDArray[np.datetime64]
  41. AR_O: npt.NDArray[np.object_]
  42. AR_floating: npt.NDArray[np.floating]
  43. AR_number: npt.NDArray[np.number]
  44. AR_Any: npt.NDArray[Any]
  45. AR_LIKE_b: list[bool]
  46. AR_LIKE_u: list[np.uint32]
  47. AR_LIKE_i: list[int]
  48. AR_LIKE_f: list[float]
  49. AR_LIKE_c: list[complex]
  50. AR_LIKE_m: list[np.timedelta64]
  51. AR_LIKE_M: list[np.datetime64]
  52. AR_LIKE_O: list[np.object_]
  53. # Array subtraction
  54. assert_type(AR_number - AR_number, npt.NDArray[np.number[Any]])
  55. assert_type(AR_b - AR_LIKE_u, npt.NDArray[np.uint32])
  56. assert_type(AR_b - AR_LIKE_i, npt.NDArray[np.signedinteger[Any]])
  57. assert_type(AR_b - AR_LIKE_f, npt.NDArray[np.floating[Any]])
  58. assert_type(AR_b - AR_LIKE_c, npt.NDArray[np.complexfloating[Any, Any]])
  59. assert_type(AR_b - AR_LIKE_m, npt.NDArray[np.timedelta64])
  60. assert_type(AR_b - AR_LIKE_O, Any)
  61. assert_type(AR_LIKE_u - AR_b, npt.NDArray[np.uint32])
  62. assert_type(AR_LIKE_i - AR_b, npt.NDArray[np.signedinteger[Any]])
  63. assert_type(AR_LIKE_f - AR_b, npt.NDArray[np.floating[Any]])
  64. assert_type(AR_LIKE_c - AR_b, npt.NDArray[np.complexfloating[Any, Any]])
  65. assert_type(AR_LIKE_m - AR_b, npt.NDArray[np.timedelta64])
  66. assert_type(AR_LIKE_M - AR_b, npt.NDArray[np.datetime64])
  67. assert_type(AR_LIKE_O - AR_b, Any)
  68. assert_type(AR_u - AR_LIKE_b, npt.NDArray[np.uint32])
  69. assert_type(AR_u - AR_LIKE_u, npt.NDArray[np.unsignedinteger[Any]])
  70. assert_type(AR_u - AR_LIKE_i, npt.NDArray[np.signedinteger[Any]])
  71. assert_type(AR_u - AR_LIKE_f, npt.NDArray[np.floating[Any]])
  72. assert_type(AR_u - AR_LIKE_c, npt.NDArray[np.complexfloating[Any, Any]])
  73. assert_type(AR_u - AR_LIKE_m, npt.NDArray[np.timedelta64])
  74. assert_type(AR_u - AR_LIKE_O, Any)
  75. assert_type(AR_LIKE_b - AR_u, npt.NDArray[np.uint32])
  76. assert_type(AR_LIKE_u - AR_u, npt.NDArray[np.unsignedinteger[Any]])
  77. assert_type(AR_LIKE_i - AR_u, npt.NDArray[np.signedinteger[Any]])
  78. assert_type(AR_LIKE_f - AR_u, npt.NDArray[np.floating[Any]])
  79. assert_type(AR_LIKE_c - AR_u, npt.NDArray[np.complexfloating[Any, Any]])
  80. assert_type(AR_LIKE_m - AR_u, npt.NDArray[np.timedelta64])
  81. assert_type(AR_LIKE_M - AR_u, npt.NDArray[np.datetime64])
  82. assert_type(AR_LIKE_O - AR_u, Any)
  83. assert_type(AR_i - AR_LIKE_b, npt.NDArray[np.int64])
  84. assert_type(AR_i - AR_LIKE_u, npt.NDArray[np.signedinteger[Any]])
  85. assert_type(AR_i - AR_LIKE_i, npt.NDArray[np.signedinteger[Any]])
  86. assert_type(AR_i - AR_LIKE_f, npt.NDArray[np.floating[Any]])
  87. assert_type(AR_i - AR_LIKE_c, npt.NDArray[np.complexfloating[Any, Any]])
  88. assert_type(AR_i - AR_LIKE_m, npt.NDArray[np.timedelta64])
  89. assert_type(AR_i - AR_LIKE_O, Any)
  90. assert_type(AR_LIKE_b - AR_i, npt.NDArray[np.int64])
  91. assert_type(AR_LIKE_u - AR_i, npt.NDArray[np.signedinteger[Any]])
  92. assert_type(AR_LIKE_i - AR_i, npt.NDArray[np.signedinteger[Any]])
  93. assert_type(AR_LIKE_f - AR_i, npt.NDArray[np.floating[Any]])
  94. assert_type(AR_LIKE_c - AR_i, npt.NDArray[np.complexfloating[Any, Any]])
  95. assert_type(AR_LIKE_m - AR_i, npt.NDArray[np.timedelta64])
  96. assert_type(AR_LIKE_M - AR_i, npt.NDArray[np.datetime64])
  97. assert_type(AR_LIKE_O - AR_i, Any)
  98. assert_type(AR_f - AR_LIKE_b, npt.NDArray[np.float64])
  99. assert_type(AR_f - AR_LIKE_u, npt.NDArray[np.float64])
  100. assert_type(AR_f - AR_LIKE_i, npt.NDArray[np.float64])
  101. assert_type(AR_f - AR_LIKE_f, npt.NDArray[np.float64])
  102. assert_type(AR_f - AR_LIKE_c, npt.NDArray[np.complexfloating[Any, Any]])
  103. assert_type(AR_f - AR_LIKE_O, Any)
  104. assert_type(AR_LIKE_b - AR_f, npt.NDArray[np.float64])
  105. assert_type(AR_LIKE_u - AR_f, npt.NDArray[np.float64])
  106. assert_type(AR_LIKE_i - AR_f, npt.NDArray[np.float64])
  107. assert_type(AR_LIKE_f - AR_f, npt.NDArray[np.float64])
  108. assert_type(AR_LIKE_c - AR_f, npt.NDArray[np.complexfloating[Any, Any]])
  109. assert_type(AR_LIKE_O - AR_f, Any)
  110. assert_type(AR_c - AR_LIKE_b, npt.NDArray[np.complex128])
  111. assert_type(AR_c - AR_LIKE_u, npt.NDArray[np.complex128])
  112. assert_type(AR_c - AR_LIKE_i, npt.NDArray[np.complex128])
  113. assert_type(AR_c - AR_LIKE_f, npt.NDArray[np.complex128])
  114. assert_type(AR_c - AR_LIKE_c, npt.NDArray[np.complex128])
  115. assert_type(AR_c - AR_LIKE_O, Any)
  116. assert_type(AR_LIKE_b - AR_c, npt.NDArray[np.complex128])
  117. assert_type(AR_LIKE_u - AR_c, npt.NDArray[np.complex128])
  118. assert_type(AR_LIKE_i - AR_c, npt.NDArray[np.complex128])
  119. assert_type(AR_LIKE_f - AR_c, npt.NDArray[np.complex128])
  120. assert_type(AR_LIKE_c - AR_c, npt.NDArray[np.complex128])
  121. assert_type(AR_LIKE_O - AR_c, Any)
  122. assert_type(AR_m - AR_LIKE_b, npt.NDArray[np.timedelta64])
  123. assert_type(AR_m - AR_LIKE_u, npt.NDArray[np.timedelta64])
  124. assert_type(AR_m - AR_LIKE_i, npt.NDArray[np.timedelta64])
  125. assert_type(AR_m - AR_LIKE_m, npt.NDArray[np.timedelta64])
  126. assert_type(AR_m - AR_LIKE_O, Any)
  127. assert_type(AR_LIKE_b - AR_m, npt.NDArray[np.timedelta64])
  128. assert_type(AR_LIKE_u - AR_m, npt.NDArray[np.timedelta64])
  129. assert_type(AR_LIKE_i - AR_m, npt.NDArray[np.timedelta64])
  130. assert_type(AR_LIKE_m - AR_m, npt.NDArray[np.timedelta64])
  131. assert_type(AR_LIKE_M - AR_m, npt.NDArray[np.datetime64])
  132. assert_type(AR_LIKE_O - AR_m, Any)
  133. assert_type(AR_M - AR_LIKE_b, npt.NDArray[np.datetime64])
  134. assert_type(AR_M - AR_LIKE_u, npt.NDArray[np.datetime64])
  135. assert_type(AR_M - AR_LIKE_i, npt.NDArray[np.datetime64])
  136. assert_type(AR_M - AR_LIKE_m, npt.NDArray[np.datetime64])
  137. assert_type(AR_M - AR_LIKE_M, npt.NDArray[np.timedelta64])
  138. assert_type(AR_M - AR_LIKE_O, Any)
  139. assert_type(AR_LIKE_M - AR_M, npt.NDArray[np.timedelta64])
  140. assert_type(AR_LIKE_O - AR_M, Any)
  141. assert_type(AR_O - AR_LIKE_b, Any)
  142. assert_type(AR_O - AR_LIKE_u, Any)
  143. assert_type(AR_O - AR_LIKE_i, Any)
  144. assert_type(AR_O - AR_LIKE_f, Any)
  145. assert_type(AR_O - AR_LIKE_c, Any)
  146. assert_type(AR_O - AR_LIKE_m, Any)
  147. assert_type(AR_O - AR_LIKE_M, Any)
  148. assert_type(AR_O - AR_LIKE_O, Any)
  149. assert_type(AR_LIKE_b - AR_O, Any)
  150. assert_type(AR_LIKE_u - AR_O, Any)
  151. assert_type(AR_LIKE_i - AR_O, Any)
  152. assert_type(AR_LIKE_f - AR_O, Any)
  153. assert_type(AR_LIKE_c - AR_O, Any)
  154. assert_type(AR_LIKE_m - AR_O, Any)
  155. assert_type(AR_LIKE_M - AR_O, Any)
  156. assert_type(AR_LIKE_O - AR_O, Any)
  157. # Array "true" division
  158. assert_type(AR_f / b, npt.NDArray[np.float64])
  159. assert_type(AR_f / i, npt.NDArray[np.float64])
  160. assert_type(AR_f / f, npt.NDArray[np.float64])
  161. assert_type(b / AR_f, npt.NDArray[np.float64])
  162. assert_type(i / AR_f, npt.NDArray[np.float64])
  163. assert_type(f / AR_f, npt.NDArray[np.float64])
  164. assert_type(AR_b / AR_LIKE_b, npt.NDArray[np.float64])
  165. assert_type(AR_b / AR_LIKE_u, npt.NDArray[np.float64])
  166. assert_type(AR_b / AR_LIKE_i, npt.NDArray[np.float64])
  167. assert_type(AR_b / AR_LIKE_f, npt.NDArray[np.float64])
  168. assert_type(AR_b / AR_LIKE_O, Any)
  169. assert_type(AR_LIKE_b / AR_b, npt.NDArray[np.float64])
  170. assert_type(AR_LIKE_u / AR_b, npt.NDArray[np.float64])
  171. assert_type(AR_LIKE_i / AR_b, npt.NDArray[np.float64])
  172. assert_type(AR_LIKE_f / AR_b, npt.NDArray[np.float64])
  173. assert_type(AR_LIKE_O / AR_b, Any)
  174. assert_type(AR_u / AR_LIKE_b, npt.NDArray[np.float64])
  175. assert_type(AR_u / AR_LIKE_u, npt.NDArray[np.float64])
  176. assert_type(AR_u / AR_LIKE_i, npt.NDArray[np.float64])
  177. assert_type(AR_u / AR_LIKE_f, npt.NDArray[np.float64])
  178. assert_type(AR_u / AR_LIKE_O, Any)
  179. assert_type(AR_LIKE_b / AR_u, npt.NDArray[np.float64])
  180. assert_type(AR_LIKE_u / AR_u, npt.NDArray[np.float64])
  181. assert_type(AR_LIKE_i / AR_u, npt.NDArray[np.float64])
  182. assert_type(AR_LIKE_f / AR_u, npt.NDArray[np.float64])
  183. assert_type(AR_LIKE_m / AR_u, npt.NDArray[np.timedelta64])
  184. assert_type(AR_LIKE_O / AR_u, Any)
  185. assert_type(AR_i / AR_LIKE_b, npt.NDArray[np.float64])
  186. assert_type(AR_i / AR_LIKE_u, npt.NDArray[np.float64])
  187. assert_type(AR_i / AR_LIKE_i, npt.NDArray[np.float64])
  188. assert_type(AR_i / AR_LIKE_f, npt.NDArray[np.float64])
  189. assert_type(AR_i / AR_LIKE_O, Any)
  190. assert_type(AR_LIKE_b / AR_i, npt.NDArray[np.float64])
  191. assert_type(AR_LIKE_u / AR_i, npt.NDArray[np.float64])
  192. assert_type(AR_LIKE_i / AR_i, npt.NDArray[np.float64])
  193. assert_type(AR_LIKE_f / AR_i, npt.NDArray[np.float64])
  194. assert_type(AR_LIKE_m / AR_i, npt.NDArray[np.timedelta64])
  195. assert_type(AR_LIKE_O / AR_i, Any)
  196. assert_type(AR_f / AR_LIKE_b, npt.NDArray[np.float64])
  197. assert_type(AR_f / AR_LIKE_u, npt.NDArray[np.float64])
  198. assert_type(AR_f / AR_LIKE_i, npt.NDArray[np.float64])
  199. assert_type(AR_f / AR_LIKE_f, npt.NDArray[np.float64])
  200. assert_type(AR_f / AR_LIKE_O, Any)
  201. assert_type(AR_LIKE_b / AR_f, npt.NDArray[np.float64])
  202. assert_type(AR_LIKE_u / AR_f, npt.NDArray[np.float64])
  203. assert_type(AR_LIKE_i / AR_f, npt.NDArray[np.float64])
  204. assert_type(AR_LIKE_f / AR_f, npt.NDArray[np.float64])
  205. assert_type(AR_LIKE_m / AR_f, npt.NDArray[np.timedelta64])
  206. assert_type(AR_LIKE_O / AR_f, Any)
  207. assert_type(AR_m / AR_LIKE_u, npt.NDArray[np.timedelta64])
  208. assert_type(AR_m / AR_LIKE_i, npt.NDArray[np.timedelta64])
  209. assert_type(AR_m / AR_LIKE_f, npt.NDArray[np.timedelta64])
  210. assert_type(AR_m / AR_LIKE_m, npt.NDArray[np.float64])
  211. assert_type(AR_m / AR_LIKE_O, Any)
  212. assert_type(AR_LIKE_m / AR_m, npt.NDArray[np.float64])
  213. assert_type(AR_LIKE_O / AR_m, Any)
  214. assert_type(AR_O / AR_LIKE_b, Any)
  215. assert_type(AR_O / AR_LIKE_u, Any)
  216. assert_type(AR_O / AR_LIKE_i, Any)
  217. assert_type(AR_O / AR_LIKE_f, Any)
  218. assert_type(AR_O / AR_LIKE_m, Any)
  219. assert_type(AR_O / AR_LIKE_M, Any)
  220. assert_type(AR_O / AR_LIKE_O, Any)
  221. assert_type(AR_LIKE_b / AR_O, Any)
  222. assert_type(AR_LIKE_u / AR_O, Any)
  223. assert_type(AR_LIKE_i / AR_O, Any)
  224. assert_type(AR_LIKE_f / AR_O, Any)
  225. assert_type(AR_LIKE_m / AR_O, Any)
  226. assert_type(AR_LIKE_M / AR_O, Any)
  227. assert_type(AR_LIKE_O / AR_O, Any)
  228. # Array floor division
  229. assert_type(AR_b // AR_LIKE_b, npt.NDArray[np.int8])
  230. assert_type(AR_b // AR_LIKE_u, npt.NDArray[np.uint32])
  231. assert_type(AR_b // AR_LIKE_i, npt.NDArray[np.signedinteger[Any]])
  232. assert_type(AR_b // AR_LIKE_f, npt.NDArray[np.floating[Any]])
  233. assert_type(AR_b // AR_LIKE_O, Any)
  234. assert_type(AR_LIKE_b // AR_b, npt.NDArray[np.int8])
  235. assert_type(AR_LIKE_u // AR_b, npt.NDArray[np.uint32])
  236. assert_type(AR_LIKE_i // AR_b, npt.NDArray[np.signedinteger[Any]])
  237. assert_type(AR_LIKE_f // AR_b, npt.NDArray[np.floating[Any]])
  238. assert_type(AR_LIKE_O // AR_b, Any)
  239. assert_type(AR_u // AR_LIKE_b, npt.NDArray[np.uint32])
  240. assert_type(AR_u // AR_LIKE_u, npt.NDArray[np.unsignedinteger[Any]])
  241. assert_type(AR_u // AR_LIKE_i, npt.NDArray[np.signedinteger[Any]])
  242. assert_type(AR_u // AR_LIKE_f, npt.NDArray[np.floating[Any]])
  243. assert_type(AR_u // AR_LIKE_O, Any)
  244. assert_type(AR_LIKE_b // AR_u, npt.NDArray[np.uint32])
  245. assert_type(AR_LIKE_u // AR_u, npt.NDArray[np.unsignedinteger[Any]])
  246. assert_type(AR_LIKE_i // AR_u, npt.NDArray[np.signedinteger[Any]])
  247. assert_type(AR_LIKE_f // AR_u, npt.NDArray[np.floating[Any]])
  248. assert_type(AR_LIKE_m // AR_u, npt.NDArray[np.timedelta64])
  249. assert_type(AR_LIKE_O // AR_u, Any)
  250. assert_type(AR_i // AR_LIKE_b, npt.NDArray[np.int64])
  251. assert_type(AR_i // AR_LIKE_u, npt.NDArray[np.signedinteger[Any]])
  252. assert_type(AR_i // AR_LIKE_i, npt.NDArray[np.signedinteger[Any]])
  253. assert_type(AR_i // AR_LIKE_f, npt.NDArray[np.floating[Any]])
  254. assert_type(AR_i // AR_LIKE_O, Any)
  255. assert_type(AR_LIKE_b // AR_i, npt.NDArray[np.int64])
  256. assert_type(AR_LIKE_u // AR_i, npt.NDArray[np.signedinteger[Any]])
  257. assert_type(AR_LIKE_i // AR_i, npt.NDArray[np.signedinteger[Any]])
  258. assert_type(AR_LIKE_f // AR_i, npt.NDArray[np.floating[Any]])
  259. assert_type(AR_LIKE_m // AR_i, npt.NDArray[np.timedelta64])
  260. assert_type(AR_LIKE_O // AR_i, Any)
  261. assert_type(AR_f // AR_LIKE_b, npt.NDArray[np.float64])
  262. assert_type(AR_f // AR_LIKE_u, npt.NDArray[np.float64])
  263. assert_type(AR_f // AR_LIKE_i, npt.NDArray[np.float64])
  264. assert_type(AR_f // AR_LIKE_f, npt.NDArray[np.float64])
  265. assert_type(AR_f // AR_LIKE_O, Any)
  266. assert_type(AR_LIKE_b // AR_f, npt.NDArray[np.float64])
  267. assert_type(AR_LIKE_u // AR_f, npt.NDArray[np.float64])
  268. assert_type(AR_LIKE_i // AR_f, npt.NDArray[np.float64])
  269. assert_type(AR_LIKE_f // AR_f, npt.NDArray[np.float64])
  270. assert_type(AR_LIKE_m // AR_f, npt.NDArray[np.timedelta64])
  271. assert_type(AR_LIKE_O // AR_f, Any)
  272. assert_type(AR_m // AR_LIKE_u, npt.NDArray[np.timedelta64])
  273. assert_type(AR_m // AR_LIKE_i, npt.NDArray[np.timedelta64])
  274. assert_type(AR_m // AR_LIKE_f, npt.NDArray[np.timedelta64])
  275. assert_type(AR_m // AR_LIKE_m, npt.NDArray[np.int64])
  276. assert_type(AR_m // AR_LIKE_O, Any)
  277. assert_type(AR_LIKE_m // AR_m, npt.NDArray[np.int64])
  278. assert_type(AR_LIKE_O // AR_m, Any)
  279. assert_type(AR_O // AR_LIKE_b, Any)
  280. assert_type(AR_O // AR_LIKE_u, Any)
  281. assert_type(AR_O // AR_LIKE_i, Any)
  282. assert_type(AR_O // AR_LIKE_f, Any)
  283. assert_type(AR_O // AR_LIKE_m, Any)
  284. assert_type(AR_O // AR_LIKE_M, Any)
  285. assert_type(AR_O // AR_LIKE_O, Any)
  286. assert_type(AR_LIKE_b // AR_O, Any)
  287. assert_type(AR_LIKE_u // AR_O, Any)
  288. assert_type(AR_LIKE_i // AR_O, Any)
  289. assert_type(AR_LIKE_f // AR_O, Any)
  290. assert_type(AR_LIKE_m // AR_O, Any)
  291. assert_type(AR_LIKE_M // AR_O, Any)
  292. assert_type(AR_LIKE_O // AR_O, Any)
  293. # unary ops
  294. assert_type(-f16, np.floating[_128Bit])
  295. assert_type(-c16, np.complex128)
  296. assert_type(-c8, np.complex64)
  297. assert_type(-f8, np.float64)
  298. assert_type(-f4, np.float32)
  299. assert_type(-i8, np.int64)
  300. assert_type(-i4, np.int32)
  301. assert_type(-u8, np.uint64)
  302. assert_type(-u4, np.uint32)
  303. assert_type(-m8, np.timedelta64)
  304. assert_type(-m8_none, np.timedelta64[None])
  305. assert_type(-m8_int, np.timedelta64[int])
  306. assert_type(-m8_delta, np.timedelta64[dt.timedelta])
  307. assert_type(-AR_f, npt.NDArray[np.float64])
  308. assert_type(+f16, np.floating[_128Bit])
  309. assert_type(+c16, np.complex128)
  310. assert_type(+c8, np.complex64)
  311. assert_type(+f8, np.float64)
  312. assert_type(+f4, np.float32)
  313. assert_type(+i8, np.int64)
  314. assert_type(+i4, np.int32)
  315. assert_type(+u8, np.uint64)
  316. assert_type(+u4, np.uint32)
  317. assert_type(+m8_none, np.timedelta64[None])
  318. assert_type(+m8_int, np.timedelta64[int])
  319. assert_type(+m8_delta, np.timedelta64[dt.timedelta])
  320. assert_type(+AR_f, npt.NDArray[np.float64])
  321. assert_type(abs(f16), np.floating[_128Bit])
  322. assert_type(abs(c16), np.float64)
  323. assert_type(abs(c8), np.float32)
  324. assert_type(abs(f8), np.float64)
  325. assert_type(abs(f4), np.float32)
  326. assert_type(abs(i8), np.int64)
  327. assert_type(abs(i4), np.int32)
  328. assert_type(abs(u8), np.uint64)
  329. assert_type(abs(u4), np.uint32)
  330. assert_type(abs(m8), np.timedelta64)
  331. assert_type(abs(m8_none), np.timedelta64[None])
  332. assert_type(abs(m8_int), np.timedelta64[int])
  333. assert_type(abs(m8_delta), np.timedelta64[dt.timedelta])
  334. assert_type(abs(b_), np.bool)
  335. assert_type(abs(AR_O), npt.NDArray[np.object_])
  336. # Time structures
  337. assert_type(M8 + m8, np.datetime64)
  338. assert_type(M8 + i, np.datetime64)
  339. assert_type(M8 + i8, np.datetime64)
  340. assert_type(M8 - M8, np.timedelta64)
  341. assert_type(M8 - i, np.datetime64)
  342. assert_type(M8 - i8, np.datetime64)
  343. assert_type(M8_none + m8, np.datetime64[None])
  344. assert_type(M8_none + i, np.datetime64[None])
  345. assert_type(M8_none + i8, np.datetime64[None])
  346. assert_type(M8_none - M8, np.timedelta64[None])
  347. assert_type(M8_none - m8, np.datetime64[None])
  348. assert_type(M8_none - i, np.datetime64[None])
  349. assert_type(M8_none - i8, np.datetime64[None])
  350. assert_type(m8 + m8, np.timedelta64)
  351. assert_type(m8 + i, np.timedelta64)
  352. assert_type(m8 + i8, np.timedelta64)
  353. assert_type(m8 - m8, np.timedelta64)
  354. assert_type(m8 - i, np.timedelta64)
  355. assert_type(m8 - i8, np.timedelta64)
  356. assert_type(m8 * f, np.timedelta64)
  357. assert_type(m8 * f4, np.timedelta64)
  358. assert_type(m8 * np.True_, np.timedelta64)
  359. assert_type(m8 / f, np.timedelta64)
  360. assert_type(m8 / f4, np.timedelta64)
  361. assert_type(m8 / m8, np.float64)
  362. assert_type(m8 // m8, np.int64)
  363. assert_type(m8 % m8, np.timedelta64)
  364. assert_type(divmod(m8, m8), tuple[np.int64, np.timedelta64])
  365. assert_type(m8_none + m8, np.timedelta64[None])
  366. assert_type(m8_none + i, np.timedelta64[None])
  367. assert_type(m8_none + i8, np.timedelta64[None])
  368. assert_type(m8_none - i, np.timedelta64[None])
  369. assert_type(m8_none - i8, np.timedelta64[None])
  370. assert_type(m8_int + i, np.timedelta64[int])
  371. assert_type(m8_int + m8_delta, np.timedelta64[int])
  372. assert_type(m8_int + m8, np.timedelta64[int | None])
  373. assert_type(m8_int - i, np.timedelta64[int])
  374. assert_type(m8_int - m8_delta, np.timedelta64[int])
  375. assert_type(m8_int - m8, np.timedelta64[int | None])
  376. assert_type(m8_delta + date, dt.date)
  377. assert_type(m8_delta + time, dt.datetime)
  378. assert_type(m8_delta + delta, dt.timedelta)
  379. assert_type(m8_delta - delta, dt.timedelta)
  380. assert_type(m8_delta / delta, float)
  381. assert_type(m8_delta // delta, int)
  382. assert_type(m8_delta % delta, dt.timedelta)
  383. assert_type(divmod(m8_delta, delta), tuple[int, dt.timedelta])
  384. # boolean
  385. assert_type(b_ / b, np.float64)
  386. assert_type(b_ / b_, np.float64)
  387. assert_type(b_ / i, np.float64)
  388. assert_type(b_ / i8, np.float64)
  389. assert_type(b_ / i4, np.float64)
  390. assert_type(b_ / u8, np.float64)
  391. assert_type(b_ / u4, np.float64)
  392. assert_type(b_ / f, np.float64)
  393. assert_type(b_ / f16, np.floating[_128Bit])
  394. assert_type(b_ / f8, np.float64)
  395. assert_type(b_ / f4, np.float32)
  396. assert_type(b_ / c, np.complex128)
  397. assert_type(b_ / c16, np.complex128)
  398. assert_type(b_ / c8, np.complex64)
  399. assert_type(b / b_, np.float64)
  400. assert_type(b_ / b_, np.float64)
  401. assert_type(i / b_, np.float64)
  402. assert_type(i8 / b_, np.float64)
  403. assert_type(i4 / b_, np.float64)
  404. assert_type(u8 / b_, np.float64)
  405. assert_type(u4 / b_, np.float64)
  406. assert_type(f / b_, np.float64)
  407. assert_type(f16 / b_, np.floating[_128Bit])
  408. assert_type(f8 / b_, np.float64)
  409. assert_type(f4 / b_, np.float32)
  410. assert_type(c / b_, np.complex128)
  411. assert_type(c16 / b_, np.complex128)
  412. assert_type(c8 / b_, np.complex64)
  413. # Complex
  414. assert_type(c16 + f16, np.complex128 | np.complexfloating[_128Bit, _128Bit])
  415. assert_type(c16 + c16, np.complex128)
  416. assert_type(c16 + f8, np.complex128)
  417. assert_type(c16 + i8, np.complex128)
  418. assert_type(c16 + c8, np.complex128)
  419. assert_type(c16 + f4, np.complex128)
  420. assert_type(c16 + i4, np.complex128)
  421. assert_type(c16 + b_, np.complex128)
  422. assert_type(c16 + b, np.complex128)
  423. assert_type(c16 + c, np.complex128)
  424. assert_type(c16 + f, np.complex128)
  425. assert_type(c16 + AR_f, npt.NDArray[np.complex128])
  426. assert_type(f16 + c16, np.complex128 | np.complexfloating[_128Bit, _128Bit])
  427. assert_type(c16 + c16, np.complex128)
  428. assert_type(f8 + c16, np.complex128)
  429. assert_type(i8 + c16, np.complex128)
  430. assert_type(c8 + c16, np.complex128 | np.complex64)
  431. assert_type(f4 + c16, np.complex128 | np.complex64)
  432. assert_type(i4 + c16, np.complex128)
  433. assert_type(b_ + c16, np.complex128)
  434. assert_type(b + c16, np.complex128)
  435. assert_type(c + c16, np.complex128)
  436. assert_type(f + c16, np.complex128)
  437. assert_type(AR_f + c16, npt.NDArray[np.complex128])
  438. assert_type(c8 + f16, np.complexfloating[_32Bit, _32Bit] | np.complexfloating[_128Bit, _128Bit])
  439. assert_type(c8 + c16, np.complex64 | np.complex128)
  440. assert_type(c8 + f8, np.complex64 | np.complex128)
  441. assert_type(c8 + i8, np.complexfloating[_32Bit, _32Bit] | np.complexfloating[_64Bit, _64Bit])
  442. assert_type(c8 + c8, np.complex64)
  443. assert_type(c8 + f4, np.complex64)
  444. assert_type(c8 + i4, np.complex64)
  445. assert_type(c8 + b_, np.complex64)
  446. assert_type(c8 + b, np.complex64)
  447. assert_type(c8 + c, np.complex64 | np.complex128)
  448. assert_type(c8 + f, np.complex64 | np.complex128)
  449. assert_type(c8 + AR_f, npt.NDArray[np.complexfloating])
  450. assert_type(f16 + c8, np.complexfloating[_128Bit, _128Bit] | np.complex64)
  451. assert_type(c16 + c8, np.complex128)
  452. assert_type(f8 + c8, np.complexfloating[_64Bit, _64Bit])
  453. assert_type(i8 + c8, np.complexfloating[_64Bit, _64Bit] | np.complex64)
  454. assert_type(c8 + c8, np.complex64)
  455. assert_type(f4 + c8, np.complex64)
  456. assert_type(i4 + c8, np.complex64)
  457. assert_type(b_ + c8, np.complex64)
  458. assert_type(b + c8, np.complex64)
  459. assert_type(c + c8, np.complex64 | np.complex128)
  460. assert_type(f + c8, np.complex64 | np.complex128)
  461. assert_type(AR_f + c8, npt.NDArray[np.complexfloating])
  462. # Float
  463. assert_type(f8 + f16, np.float64| np.floating[_128Bit])
  464. assert_type(f8 + f8, np.float64)
  465. assert_type(f8 + i8, np.float64)
  466. assert_type(f8 + f4, np.float64)
  467. assert_type(f8 + i4, np.float64)
  468. assert_type(f8 + b_, np.float64)
  469. assert_type(f8 + b, np.float64)
  470. assert_type(f8 + c, np.float64 | np.complex128)
  471. assert_type(f8 + f, np.float64)
  472. assert_type(f8 + AR_f, npt.NDArray[np.float64])
  473. assert_type(f16 + f8, np.floating[_128Bit] | np.float64)
  474. assert_type(f8 + f8, np.float64)
  475. assert_type(i8 + f8, np.float64)
  476. assert_type(f4 + f8, np.float32 | np.float64)
  477. assert_type(i4 + f8,np.float64)
  478. assert_type(b_ + f8, np.float64)
  479. assert_type(b + f8, np.float64)
  480. assert_type(c + f8, np.complex128 | np.float64)
  481. assert_type(f + f8, np.float64)
  482. assert_type(AR_f + f8, npt.NDArray[np.float64])
  483. assert_type(f4 + f16, np.float32 | np.floating[_128Bit])
  484. assert_type(f4 + f8, np.float32 | np.float64)
  485. assert_type(f4 + i8, np.float32 | np.floating[_64Bit])
  486. assert_type(f4 + f4, np.float32)
  487. assert_type(f4 + i4, np.float32)
  488. assert_type(f4 + b_, np.float32)
  489. assert_type(f4 + b, np.float32)
  490. assert_type(f4 + c, np.complex64 | np.complex128)
  491. assert_type(f4 + f, np.float32 | np.float64)
  492. assert_type(f4 + AR_f, npt.NDArray[np.float64])
  493. assert_type(f16 + f4, np.floating[_128Bit] | np.float32)
  494. assert_type(f8 + f4, np.float64)
  495. assert_type(i8 + f4, np.floating[_32Bit] | np.floating[_64Bit])
  496. assert_type(f4 + f4, np.float32)
  497. assert_type(i4 + f4, np.float32)
  498. assert_type(b_ + f4, np.float32)
  499. assert_type(b + f4, np.float32)
  500. assert_type(c + f4, np.complex64 | np.complex128)
  501. assert_type(f + f4, np.float64 | np.float32)
  502. assert_type(AR_f + f4, npt.NDArray[np.float64])
  503. # Int
  504. assert_type(i8 + i8, np.int64)
  505. assert_type(i8 + u8, Any)
  506. assert_type(i8 + i4, np.signedinteger[_32Bit] | np.signedinteger[_64Bit])
  507. assert_type(i8 + u4, Any)
  508. assert_type(i8 + b_, np.int64)
  509. assert_type(i8 + b, np.int64)
  510. assert_type(i8 + c, np.complex128)
  511. assert_type(i8 + f, np.float64)
  512. assert_type(i8 + AR_f, npt.NDArray[np.float64])
  513. assert_type(u8 + u8, np.uint64)
  514. assert_type(u8 + i4, Any)
  515. assert_type(u8 + u4, np.unsignedinteger[_32Bit] | np.unsignedinteger[_64Bit])
  516. assert_type(u8 + b_, np.uint64)
  517. assert_type(u8 + b, np.uint64)
  518. assert_type(u8 + c, np.complex128)
  519. assert_type(u8 + f, np.float64)
  520. assert_type(u8 + AR_f, npt.NDArray[np.float64])
  521. assert_type(i8 + i8, np.int64)
  522. assert_type(u8 + i8, Any)
  523. assert_type(i4 + i8, np.signedinteger[_32Bit] | np.signedinteger[_64Bit])
  524. assert_type(u4 + i8, Any)
  525. assert_type(b_ + i8, np.int64)
  526. assert_type(b + i8, np.int64)
  527. assert_type(c + i8, np.complex128)
  528. assert_type(f + i8, np.float64)
  529. assert_type(AR_f + i8, npt.NDArray[np.float64])
  530. assert_type(u8 + u8, np.uint64)
  531. assert_type(i4 + u8, Any)
  532. assert_type(u4 + u8, np.unsignedinteger[_32Bit] | np.unsignedinteger[_64Bit])
  533. assert_type(b_ + u8, np.uint64)
  534. assert_type(b + u8, np.uint64)
  535. assert_type(c + u8, np.complex128)
  536. assert_type(f + u8, np.float64)
  537. assert_type(AR_f + u8, npt.NDArray[np.float64])
  538. assert_type(i4 + i8, np.signedinteger[_32Bit] | np.signedinteger[_64Bit])
  539. assert_type(i4 + i4, np.int32)
  540. assert_type(i4 + b_, np.int32)
  541. assert_type(i4 + b, np.int32)
  542. assert_type(i4 + AR_f, npt.NDArray[np.float64])
  543. assert_type(u4 + i8, Any)
  544. assert_type(u4 + i4, Any)
  545. assert_type(u4 + u8, np.unsignedinteger[_32Bit] | np.unsignedinteger[_64Bit])
  546. assert_type(u4 + u4, np.uint32)
  547. assert_type(u4 + b_, np.uint32)
  548. assert_type(u4 + b, np.uint32)
  549. assert_type(u4 + AR_f, npt.NDArray[np.float64])
  550. assert_type(i8 + i4, np.signedinteger[_32Bit] | np.signedinteger[_64Bit])
  551. assert_type(i4 + i4, np.int32)
  552. assert_type(b_ + i4, np.int32)
  553. assert_type(b + i4, np.int32)
  554. assert_type(AR_f + i4, npt.NDArray[np.float64])
  555. assert_type(i8 + u4, Any)
  556. assert_type(i4 + u4, Any)
  557. assert_type(u8 + u4, np.unsignedinteger[_32Bit] | np.unsignedinteger[_64Bit])
  558. assert_type(u4 + u4, np.uint32)
  559. assert_type(b_ + u4, np.uint32)
  560. assert_type(b + u4, np.uint32)
  561. assert_type(AR_f + u4, npt.NDArray[np.float64])
  562. # Any
  563. assert_type(AR_Any + 2, npt.NDArray[Any])
  564. # regression tests for https://github.com/numpy/numpy/issues/28805
  565. assert_type(AR_floating + f, npt.NDArray[np.floating])
  566. assert_type(AR_floating - f, npt.NDArray[np.floating])
  567. assert_type(AR_floating * f, npt.NDArray[np.floating])
  568. assert_type(AR_floating ** f, npt.NDArray[np.floating])
  569. assert_type(AR_floating / f, npt.NDArray[np.floating])
  570. assert_type(AR_floating // f, npt.NDArray[np.floating])
  571. assert_type(AR_floating % f, npt.NDArray[np.floating])
  572. assert_type(divmod(AR_floating, f), tuple[npt.NDArray[np.floating], npt.NDArray[np.floating]])
  573. assert_type(f + AR_floating, npt.NDArray[np.floating])
  574. assert_type(f - AR_floating, npt.NDArray[np.floating])
  575. assert_type(f * AR_floating, npt.NDArray[np.floating])
  576. assert_type(f ** AR_floating, npt.NDArray[np.floating])
  577. assert_type(f / AR_floating, npt.NDArray[np.floating])
  578. assert_type(f // AR_floating, npt.NDArray[np.floating])
  579. assert_type(f % AR_floating, npt.NDArray[np.floating])
  580. assert_type(divmod(f, AR_floating), tuple[npt.NDArray[np.floating], npt.NDArray[np.floating]])