| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- """
- Array API Inspection namespace
- This is the namespace for inspection functions as defined by the array API
- standard. See
- https://data-apis.org/array-api/latest/API_specification/inspection.html for
- more details.
- """
- from numpy._core import (
- dtype,
- bool,
- intp,
- int8,
- int16,
- int32,
- int64,
- uint8,
- uint16,
- uint32,
- uint64,
- float32,
- float64,
- complex64,
- complex128,
- )
- class __array_namespace_info__:
- """
- Get the array API inspection namespace for NumPy.
- The array API inspection namespace defines the following functions:
- - capabilities()
- - default_device()
- - default_dtypes()
- - dtypes()
- - devices()
- See
- https://data-apis.org/array-api/latest/API_specification/inspection.html
- for more details.
- Returns
- -------
- info : ModuleType
- The array API inspection namespace for NumPy.
- Examples
- --------
- >>> info = np.__array_namespace_info__()
- >>> info.default_dtypes()
- {'real floating': numpy.float64,
- 'complex floating': numpy.complex128,
- 'integral': numpy.int64,
- 'indexing': numpy.int64}
- """
- __module__ = 'numpy'
- def capabilities(self):
- """
- Return a dictionary of array API library capabilities.
- The resulting dictionary has the following keys:
- - **"boolean indexing"**: boolean indicating whether an array library
- supports boolean indexing. Always ``True`` for NumPy.
- - **"data-dependent shapes"**: boolean indicating whether an array
- library supports data-dependent output shapes. Always ``True`` for
- NumPy.
- See
- https://data-apis.org/array-api/latest/API_specification/generated/array_api.info.capabilities.html
- for more details.
- See Also
- --------
- __array_namespace_info__.default_device,
- __array_namespace_info__.default_dtypes,
- __array_namespace_info__.dtypes,
- __array_namespace_info__.devices
- Returns
- -------
- capabilities : dict
- A dictionary of array API library capabilities.
- Examples
- --------
- >>> info = np.__array_namespace_info__()
- >>> info.capabilities()
- {'boolean indexing': True,
- 'data-dependent shapes': True}
- """
- return {
- "boolean indexing": True,
- "data-dependent shapes": True,
- # 'max rank' will be part of the 2024.12 standard
- # "max rank": 64,
- }
- def default_device(self):
- """
- The default device used for new NumPy arrays.
- For NumPy, this always returns ``'cpu'``.
- See Also
- --------
- __array_namespace_info__.capabilities,
- __array_namespace_info__.default_dtypes,
- __array_namespace_info__.dtypes,
- __array_namespace_info__.devices
- Returns
- -------
- device : str
- The default device used for new NumPy arrays.
- Examples
- --------
- >>> info = np.__array_namespace_info__()
- >>> info.default_device()
- 'cpu'
- """
- return "cpu"
- def default_dtypes(self, *, device=None):
- """
- The default data types used for new NumPy arrays.
- For NumPy, this always returns the following dictionary:
- - **"real floating"**: ``numpy.float64``
- - **"complex floating"**: ``numpy.complex128``
- - **"integral"**: ``numpy.intp``
- - **"indexing"**: ``numpy.intp``
- Parameters
- ----------
- device : str, optional
- The device to get the default data types for. For NumPy, only
- ``'cpu'`` is allowed.
- Returns
- -------
- dtypes : dict
- A dictionary describing the default data types used for new NumPy
- arrays.
- See Also
- --------
- __array_namespace_info__.capabilities,
- __array_namespace_info__.default_device,
- __array_namespace_info__.dtypes,
- __array_namespace_info__.devices
- Examples
- --------
- >>> info = np.__array_namespace_info__()
- >>> info.default_dtypes()
- {'real floating': numpy.float64,
- 'complex floating': numpy.complex128,
- 'integral': numpy.int64,
- 'indexing': numpy.int64}
- """
- if device not in ["cpu", None]:
- raise ValueError(
- 'Device not understood. Only "cpu" is allowed, but received:'
- f' {device}'
- )
- return {
- "real floating": dtype(float64),
- "complex floating": dtype(complex128),
- "integral": dtype(intp),
- "indexing": dtype(intp),
- }
- def dtypes(self, *, device=None, kind=None):
- """
- The array API data types supported by NumPy.
- Note that this function only returns data types that are defined by
- the array API.
- Parameters
- ----------
- device : str, optional
- The device to get the data types for. For NumPy, only ``'cpu'`` is
- allowed.
- kind : str or tuple of str, optional
- The kind of data types to return. If ``None``, all data types are
- returned. If a string, only data types of that kind are returned.
- If a tuple, a dictionary containing the union of the given kinds
- is returned. The following kinds are supported:
- - ``'bool'``: boolean data types (i.e., ``bool``).
- - ``'signed integer'``: signed integer data types (i.e., ``int8``,
- ``int16``, ``int32``, ``int64``).
- - ``'unsigned integer'``: unsigned integer data types (i.e.,
- ``uint8``, ``uint16``, ``uint32``, ``uint64``).
- - ``'integral'``: integer data types. Shorthand for ``('signed
- integer', 'unsigned integer')``.
- - ``'real floating'``: real-valued floating-point data types
- (i.e., ``float32``, ``float64``).
- - ``'complex floating'``: complex floating-point data types (i.e.,
- ``complex64``, ``complex128``).
- - ``'numeric'``: numeric data types. Shorthand for ``('integral',
- 'real floating', 'complex floating')``.
- Returns
- -------
- dtypes : dict
- A dictionary mapping the names of data types to the corresponding
- NumPy data types.
- See Also
- --------
- __array_namespace_info__.capabilities,
- __array_namespace_info__.default_device,
- __array_namespace_info__.default_dtypes,
- __array_namespace_info__.devices
- Examples
- --------
- >>> info = np.__array_namespace_info__()
- >>> info.dtypes(kind='signed integer')
- {'int8': numpy.int8,
- 'int16': numpy.int16,
- 'int32': numpy.int32,
- 'int64': numpy.int64}
- """
- if device not in ["cpu", None]:
- raise ValueError(
- 'Device not understood. Only "cpu" is allowed, but received:'
- f' {device}'
- )
- if kind is None:
- return {
- "bool": dtype(bool),
- "int8": dtype(int8),
- "int16": dtype(int16),
- "int32": dtype(int32),
- "int64": dtype(int64),
- "uint8": dtype(uint8),
- "uint16": dtype(uint16),
- "uint32": dtype(uint32),
- "uint64": dtype(uint64),
- "float32": dtype(float32),
- "float64": dtype(float64),
- "complex64": dtype(complex64),
- "complex128": dtype(complex128),
- }
- if kind == "bool":
- return {"bool": bool}
- if kind == "signed integer":
- return {
- "int8": dtype(int8),
- "int16": dtype(int16),
- "int32": dtype(int32),
- "int64": dtype(int64),
- }
- if kind == "unsigned integer":
- return {
- "uint8": dtype(uint8),
- "uint16": dtype(uint16),
- "uint32": dtype(uint32),
- "uint64": dtype(uint64),
- }
- if kind == "integral":
- return {
- "int8": dtype(int8),
- "int16": dtype(int16),
- "int32": dtype(int32),
- "int64": dtype(int64),
- "uint8": dtype(uint8),
- "uint16": dtype(uint16),
- "uint32": dtype(uint32),
- "uint64": dtype(uint64),
- }
- if kind == "real floating":
- return {
- "float32": dtype(float32),
- "float64": dtype(float64),
- }
- if kind == "complex floating":
- return {
- "complex64": dtype(complex64),
- "complex128": dtype(complex128),
- }
- if kind == "numeric":
- return {
- "int8": dtype(int8),
- "int16": dtype(int16),
- "int32": dtype(int32),
- "int64": dtype(int64),
- "uint8": dtype(uint8),
- "uint16": dtype(uint16),
- "uint32": dtype(uint32),
- "uint64": dtype(uint64),
- "float32": dtype(float32),
- "float64": dtype(float64),
- "complex64": dtype(complex64),
- "complex128": dtype(complex128),
- }
- if isinstance(kind, tuple):
- res = {}
- for k in kind:
- res.update(self.dtypes(kind=k))
- return res
- raise ValueError(f"unsupported kind: {kind!r}")
- def devices(self):
- """
- The devices supported by NumPy.
- For NumPy, this always returns ``['cpu']``.
- Returns
- -------
- devices : list of str
- The devices supported by NumPy.
- See Also
- --------
- __array_namespace_info__.capabilities,
- __array_namespace_info__.default_device,
- __array_namespace_info__.default_dtypes,
- __array_namespace_info__.dtypes
- Examples
- --------
- >>> info = np.__array_namespace_info__()
- >>> info.devices()
- ['cpu']
- """
- return ["cpu"]
|