simple.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. """Simple expression that should pass with mypy."""
  2. import operator
  3. import numpy as np
  4. import numpy.typing as npt
  5. from collections.abc import Iterable
  6. # Basic checks
  7. array = np.array([1, 2])
  8. def ndarray_func(x: npt.NDArray[np.float64]) -> npt.NDArray[np.float64]:
  9. return x
  10. ndarray_func(np.array([1, 2], dtype=np.float64))
  11. array == 1
  12. array.dtype == float
  13. # Dtype construction
  14. np.dtype(float)
  15. np.dtype(np.float64)
  16. np.dtype(None)
  17. np.dtype("float64")
  18. np.dtype(np.dtype(float))
  19. np.dtype(("U", 10))
  20. np.dtype((np.int32, (2, 2)))
  21. # Define the arguments on the previous line to prevent bidirectional
  22. # type inference in mypy from broadening the types.
  23. two_tuples_dtype = [("R", "u1"), ("G", "u1"), ("B", "u1")]
  24. np.dtype(two_tuples_dtype)
  25. three_tuples_dtype = [("R", "u1", 2)]
  26. np.dtype(three_tuples_dtype)
  27. mixed_tuples_dtype = [("R", "u1"), ("G", np.str_, 1)]
  28. np.dtype(mixed_tuples_dtype)
  29. shape_tuple_dtype = [("R", "u1", (2, 2))]
  30. np.dtype(shape_tuple_dtype)
  31. shape_like_dtype = [("R", "u1", (2, 2)), ("G", np.str_, 1)]
  32. np.dtype(shape_like_dtype)
  33. object_dtype = [("field1", object)]
  34. np.dtype(object_dtype)
  35. np.dtype((np.int32, (np.int8, 4)))
  36. # Dtype comparison
  37. np.dtype(float) == float
  38. np.dtype(float) != np.float64
  39. np.dtype(float) < None
  40. np.dtype(float) <= "float64"
  41. np.dtype(float) > np.dtype(float)
  42. np.dtype(float) >= np.dtype(("U", 10))
  43. # Iteration and indexing
  44. def iterable_func(x: Iterable[object]) -> Iterable[object]:
  45. return x
  46. iterable_func(array)
  47. list(array)
  48. iter(array)
  49. zip(array, array)
  50. array[1]
  51. array[:]
  52. array[...]
  53. array[:] = 0
  54. array_2d = np.ones((3, 3))
  55. array_2d[:2, :2]
  56. array_2d[:2, :2] = 0
  57. array_2d[..., 0]
  58. array_2d[..., 0] = 2
  59. array_2d[-1, -1] = None
  60. array_obj = np.zeros(1, dtype=np.object_)
  61. array_obj[0] = slice(None)
  62. # Other special methods
  63. len(array)
  64. str(array)
  65. array_scalar = np.array(1)
  66. int(array_scalar)
  67. float(array_scalar)
  68. complex(array_scalar)
  69. bytes(array_scalar)
  70. operator.index(array_scalar)
  71. bool(array_scalar)
  72. # comparisons
  73. array < 1
  74. array <= 1
  75. array == 1
  76. array != 1
  77. array > 1
  78. array >= 1
  79. 1 < array
  80. 1 <= array
  81. 1 == array
  82. 1 != array
  83. 1 > array
  84. 1 >= array
  85. # binary arithmetic
  86. array + 1
  87. 1 + array
  88. array += 1
  89. array - 1
  90. 1 - array
  91. array -= 1
  92. array * 1
  93. 1 * array
  94. array *= 1
  95. nonzero_array = np.array([1, 2])
  96. array / 1
  97. 1 / nonzero_array
  98. float_array = np.array([1.0, 2.0])
  99. float_array /= 1
  100. array // 1
  101. 1 // nonzero_array
  102. array //= 1
  103. array % 1
  104. 1 % nonzero_array
  105. array %= 1
  106. divmod(array, 1)
  107. divmod(1, nonzero_array)
  108. array ** 1
  109. 1 ** array
  110. array **= 1
  111. array << 1
  112. 1 << array
  113. array <<= 1
  114. array >> 1
  115. 1 >> array
  116. array >>= 1
  117. array & 1
  118. 1 & array
  119. array &= 1
  120. array ^ 1
  121. 1 ^ array
  122. array ^= 1
  123. array | 1
  124. 1 | array
  125. array |= 1
  126. # unary arithmetic
  127. -array
  128. +array
  129. abs(array)
  130. ~array
  131. # Other methods
  132. np.array([1, 2]).transpose()