_arraypad_impl.pyi 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from typing import (
  2. Any,
  3. Literal as L,
  4. Protocol,
  5. TypeAlias,
  6. TypeVar,
  7. overload,
  8. type_check_only,
  9. )
  10. from numpy import generic
  11. from numpy._typing import ArrayLike, NDArray, _ArrayLike, _ArrayLikeInt
  12. __all__ = ["pad"]
  13. _ScalarT = TypeVar("_ScalarT", bound=generic)
  14. @type_check_only
  15. class _ModeFunc(Protocol):
  16. def __call__(
  17. self,
  18. vector: NDArray[Any],
  19. iaxis_pad_width: tuple[int, int],
  20. iaxis: int,
  21. kwargs: dict[str, Any],
  22. /,
  23. ) -> None: ...
  24. _ModeKind: TypeAlias = L[
  25. "constant",
  26. "edge",
  27. "linear_ramp",
  28. "maximum",
  29. "mean",
  30. "median",
  31. "minimum",
  32. "reflect",
  33. "symmetric",
  34. "wrap",
  35. "empty",
  36. ]
  37. # TODO: In practice each keyword argument is exclusive to one or more
  38. # specific modes. Consider adding more overloads to express this in the future.
  39. _PadWidth: TypeAlias = (
  40. _ArrayLikeInt
  41. | dict[int, int]
  42. | dict[int, tuple[int, int]]
  43. | dict[int, int | tuple[int, int]]
  44. )
  45. # Expand `**kwargs` into explicit keyword-only arguments
  46. @overload
  47. def pad(
  48. array: _ArrayLike[_ScalarT],
  49. pad_width: _PadWidth,
  50. mode: _ModeKind = "constant",
  51. *,
  52. stat_length: _ArrayLikeInt | None = None,
  53. constant_values: ArrayLike = 0,
  54. end_values: ArrayLike = 0,
  55. reflect_type: L["odd", "even"] = "even",
  56. ) -> NDArray[_ScalarT]: ...
  57. @overload
  58. def pad(
  59. array: ArrayLike,
  60. pad_width: _PadWidth,
  61. mode: _ModeKind = "constant",
  62. *,
  63. stat_length: _ArrayLikeInt | None = None,
  64. constant_values: ArrayLike = 0,
  65. end_values: ArrayLike = 0,
  66. reflect_type: L["odd", "even"] = "even",
  67. ) -> NDArray[Any]: ...
  68. @overload
  69. def pad(
  70. array: _ArrayLike[_ScalarT],
  71. pad_width: _PadWidth,
  72. mode: _ModeFunc,
  73. **kwargs: Any,
  74. ) -> NDArray[_ScalarT]: ...
  75. @overload
  76. def pad(
  77. array: ArrayLike,
  78. pad_width: _PadWidth,
  79. mode: _ModeFunc,
  80. **kwargs: Any,
  81. ) -> NDArray[Any]: ...