Skip to content

Commit 07d482f

Browse files
committed
Update the module docstring
1 parent 2e12b65 commit 07d482f

File tree

1 file changed

+14
-113
lines changed

1 file changed

+14
-113
lines changed

array_api_strict/__init__.py

+14-113
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,18 @@
11
"""
2-
A NumPy sub-namespace that conforms to the Python array API standard.
3-
4-
This submodule accompanies NEP 47, which proposes its inclusion in NumPy. It
5-
is still considered experimental, and will issue a warning when imported.
6-
7-
This is a proof-of-concept namespace that wraps the corresponding NumPy
8-
functions to give a conforming implementation of the Python array API standard
9-
(https://data-apis.github.io/array-api/latest/). The standard is currently in
10-
an RFC phase and comments on it are both welcome and encouraged. Comments
11-
should be made either at https://github.com/data-apis/array-api or at
12-
https://github.com/data-apis/consortium-feedback/discussions.
13-
14-
NumPy already follows the proposed spec for the most part, so this module
15-
serves mostly as a thin wrapper around it. However, NumPy also implements a
16-
lot of behavior that is not included in the spec, so this serves as a
17-
restricted subset of the API. Only those functions that are part of the spec
18-
are included in this namespace, and all functions are given with the exact
19-
signature given in the spec, including the use of position-only arguments, and
20-
omitting any extra keyword arguments implemented by NumPy but not part of the
21-
spec. The behavior of some functions is also modified from the NumPy behavior
22-
to conform to the standard. Note that the underlying array object itself is
23-
wrapped in a wrapper Array() class, but is otherwise unchanged. This submodule
24-
is implemented in pure Python with no C extensions.
25-
26-
The array API spec is designed as a "minimal API subset" and explicitly allows
27-
libraries to include behaviors not specified by it. But users of this module
28-
that intend to write portable code should be aware that only those behaviors
29-
that are listed in the spec are guaranteed to be implemented across libraries.
30-
Consequently, the NumPy implementation was chosen to be both conforming and
31-
minimal, so that users can use this implementation of the array API namespace
32-
and be sure that behaviors that it defines will be available in conforming
33-
namespaces from other libraries.
34-
35-
A few notes about the current state of this submodule:
36-
37-
- There is a test suite that tests modules against the array API standard at
38-
https://github.com/data-apis/array-api-tests. The test suite is still a work
39-
in progress, but the existing tests pass on this module, with a few
40-
exceptions:
41-
42-
- DLPack support (see https://github.com/data-apis/array-api/pull/106) is
43-
not included here, as it requires a full implementation in NumPy proper
44-
first.
45-
46-
The test suite is not yet complete, and even the tests that exist are not
47-
guaranteed to give a comprehensive coverage of the spec. Therefore, when
48-
reviewing and using this submodule, you should refer to the standard
49-
documents themselves. There are some tests in array_api_strict.tests, but
50-
they primarily focus on things that are not tested by the official array API
51-
test suite.
52-
53-
- There is a custom array object, array_api_strict.Array, which is returned by
54-
all functions in this module. All functions in the array API namespace
55-
implicitly assume that they will only receive this object as input. The only
56-
way to create instances of this object is to use one of the array creation
57-
functions. It does not have a public constructor on the object itself. The
58-
object is a small wrapper class around numpy.ndarray. The main purpose of it
59-
is to restrict the namespace of the array object to only those dtypes and
60-
only those methods that are required by the spec, as well as to limit/change
61-
certain behavior that differs in the spec. In particular:
62-
63-
- The array API namespace does not have scalar objects, only 0-D arrays.
64-
Operations on Array that would create a scalar in NumPy create a 0-D
65-
array.
66-
67-
- Indexing: Only a subset of indices supported by NumPy are required by the
68-
spec. The Array object restricts indexing to only allow those types of
69-
indices that are required by the spec. See the docstring of the
70-
array_api_strict.Array._validate_indices helper function for more
71-
information.
72-
73-
- Type promotion: Some type promotion rules are different in the spec. In
74-
particular, the spec does not have any value-based casting. The spec also
75-
does not require cross-kind casting, like integer -> floating-point. Only
76-
those promotions that are explicitly required by the array API
77-
specification are allowed in this module. See NEP 47 for more info.
78-
79-
- Functions do not automatically call asarray() on their input, and will not
80-
work if the input type is not Array. The exception is array creation
81-
functions, and Python operators on the Array object, which accept Python
82-
scalars of the same type as the array dtype.
83-
84-
- All functions include type annotations, corresponding to those given in the
85-
spec (see _typing.py for definitions of some custom types). These do not
86-
currently fully pass mypy due to some limitations in mypy.
87-
88-
- Dtype objects are just the NumPy dtype objects, e.g., float64 =
89-
np.dtype('float64'). The spec does not require any behavior on these dtype
90-
objects other than that they be accessible by name and be comparable by
91-
equality, but it was considered too much extra complexity to create custom
92-
objects to represent dtypes.
93-
94-
- All places where the implementations in this submodule are known to deviate
95-
from their corresponding functions in NumPy are marked with "# Note:"
96-
comments.
97-
98-
Still TODO in this module are:
99-
100-
- DLPack support for numpy.ndarray is still in progress. See
101-
https://github.com/numpy/numpy/pull/19083.
102-
103-
- The copy=False keyword argument to asarray() is not yet implemented. This
104-
requires support in numpy.asarray() first.
105-
106-
- Some functions are not yet fully tested in the array API test suite, and may
107-
require updates that are not yet known until the tests are written.
108-
109-
- The spec is still in an RFC phase and may still have minor updates, which
110-
will need to be reflected here.
111-
112-
- Complex number support in array API spec is planned but not yet finalized,
113-
as are the fft extension and certain linear algebra functions such as eig
114-
that require complex dtypes.
2+
array_api_strict is a strict, minimal implementation of the Python array
3+
API (https://data-apis.org/array-api/latest/)
4+
5+
The purpose of array-api-strict is to provide an implementation of the array
6+
API for consuming libraries to test against so they can be completely sure
7+
their usage of the array API is portable.
8+
9+
It is *not* intended to be used by end-users. End-users of the array API
10+
should just use their favorite array library (NumPy, CuPy, PyTorch, etc.) as
11+
usual. It is also not intended to be used as a dependency by consuming
12+
libraries. Consuming library code should use the
13+
array-api-compat (https://github.com/data-apis/array-api-compat) package to
14+
support the array API. Rather, it is intended to be used in the test suites of
15+
consuming libraries to test their array API usage.
11516
11617
"""
11718

0 commit comments

Comments
 (0)