123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- from __future__ import annotations
- from ._dtypes import (
- _floating_dtypes,
- _numeric_dtypes,
- )
- from ._array_object import Array
- from ._creation_functions import asarray
- from ._dtypes import float32, float64
- from typing import TYPE_CHECKING, Optional, Tuple, Union
- if TYPE_CHECKING:
- from ._typing import Dtype
- import numpy as np
- def max(
- x: Array,
- /,
- *,
- axis: Optional[Union[int, Tuple[int, ...]]] = None,
- keepdims: bool = False,
- ) -> Array:
- if x.dtype not in _numeric_dtypes:
- raise TypeError("Only numeric dtypes are allowed in max")
- return Array._new(np.max(x._array, axis=axis, keepdims=keepdims))
- def mean(
- x: Array,
- /,
- *,
- axis: Optional[Union[int, Tuple[int, ...]]] = None,
- keepdims: bool = False,
- ) -> Array:
- if x.dtype not in _floating_dtypes:
- raise TypeError("Only floating-point dtypes are allowed in mean")
- return Array._new(np.mean(x._array, axis=axis, keepdims=keepdims))
- def min(
- x: Array,
- /,
- *,
- axis: Optional[Union[int, Tuple[int, ...]]] = None,
- keepdims: bool = False,
- ) -> Array:
- if x.dtype not in _numeric_dtypes:
- raise TypeError("Only numeric dtypes are allowed in min")
- return Array._new(np.min(x._array, axis=axis, keepdims=keepdims))
- def prod(
- x: Array,
- /,
- *,
- axis: Optional[Union[int, Tuple[int, ...]]] = None,
- dtype: Optional[Dtype] = None,
- keepdims: bool = False,
- ) -> Array:
- if x.dtype not in _numeric_dtypes:
- raise TypeError("Only numeric dtypes are allowed in prod")
- # Note: sum() and prod() always upcast float32 to float64 for dtype=None
- # We need to do so here before computing the product to avoid overflow
- if dtype is None and x.dtype == float32:
- dtype = float64
- return Array._new(np.prod(x._array, dtype=dtype, axis=axis, keepdims=keepdims))
- def std(
- x: Array,
- /,
- *,
- axis: Optional[Union[int, Tuple[int, ...]]] = None,
- correction: Union[int, float] = 0.0,
- keepdims: bool = False,
- ) -> Array:
- # Note: the keyword argument correction is different here
- if x.dtype not in _floating_dtypes:
- raise TypeError("Only floating-point dtypes are allowed in std")
- return Array._new(np.std(x._array, axis=axis, ddof=correction, keepdims=keepdims))
- def sum(
- x: Array,
- /,
- *,
- axis: Optional[Union[int, Tuple[int, ...]]] = None,
- dtype: Optional[Dtype] = None,
- keepdims: bool = False,
- ) -> Array:
- if x.dtype not in _numeric_dtypes:
- raise TypeError("Only numeric dtypes are allowed in sum")
- # Note: sum() and prod() always upcast integers to (u)int64 and float32 to
- # float64 for dtype=None. `np.sum` does that too for integers, but not for
- # float32, so we need to special-case it here
- if dtype is None and x.dtype == float32:
- dtype = float64
- return Array._new(np.sum(x._array, axis=axis, dtype=dtype, keepdims=keepdims))
- def var(
- x: Array,
- /,
- *,
- axis: Optional[Union[int, Tuple[int, ...]]] = None,
- correction: Union[int, float] = 0.0,
- keepdims: bool = False,
- ) -> Array:
- # Note: the keyword argument correction is different here
- if x.dtype not in _floating_dtypes:
- raise TypeError("Only floating-point dtypes are allowed in var")
- return Array._new(np.var(x._array, axis=axis, ddof=correction, keepdims=keepdims))
|