Skip to content

Commit

Permalink
Autogenerate all API docs (#2002)
Browse files Browse the repository at this point in the history
* Autogenerate all API docs

* Fix duplicate Array docs

* Fix doc errors

* Fix skip logic

* Fix module name splitting

* Change autoapi directory

* Add more enum docs

* Fix testing docstring

* Pin max version of sphinx-autoapi

* Fix spelling

* Pin max version of sphinx-autoapi

* Skip zarr.core in API docs

* Fix buffer namespace
  • Loading branch information
dstansby authored Sep 8, 2024
1 parent 59b118d commit 8e29f37
Show file tree
Hide file tree
Showing 16 changed files with 56 additions and 18 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ coverage.xml

# Sphinx documentation
docs/_build/
docs/_autoapi

# PyBuilder
target/
Expand Down
1 change: 1 addition & 0 deletions docs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ help:
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
rm -rf $(BUILDDIR)/../_autoapi

.PHONY: html
html:
Expand Down
2 changes: 1 addition & 1 deletion docs/api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ API Reference
.. toctree::
:maxdepth: 1

zarr
../_autoapi/zarr/index
5 changes: 0 additions & 5 deletions docs/api/zarr.rst

This file was deleted.

18 changes: 15 additions & 3 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,10 @@

autoapi_dirs = ['../src/zarr']
autoapi_add_toctree_entry = False
autoapi_generate_api_docs = False
autoapi_generate_api_docs = True
autoapi_member_order = "groupwise"
autoapi_root = "api"
autoapi_root = "_autoapi"
autoapi_keep_files = True


# Add any paths that contain templates here, relative to this directory.
Expand Down Expand Up @@ -172,8 +173,19 @@
html_logo = "_static/logo1.png"


def autoapi_skip_modules(app: sphinx.application.Sphinx, what: str, name: str, obj: object, skip: bool, options: dict[str, Any]) -> bool:
"""
Return True if a module should be skipped in th API docs.
"""
parts = name.split(".")
if what == "module" and (any(part.startswith("_") for part in parts) or "v2" in name or name.startswith("zarr.core")):
return True
return False


def setup(app: sphinx.application.Sphinx) -> None:
app.add_css_file("custom.css")
app.connect("autoapi-skip-member", autoapi_skip_modules)


# The name of an image file (relative to this directory) to use as a favicon of
Expand Down Expand Up @@ -339,7 +351,7 @@ def setup(app: sphinx.application.Sphinx) -> None:
# use in refs e.g:
# :ref:`comparison manual <python:comparisons>`
intersphinx_mapping = {
"python": ("https://docs.python.org/", None),
"python": ("https://docs.python.org/3/", None),
"numpy": ("https://numpy.org/doc/stable/", None),
"numcodecs": ("https://numcodecs.readthedocs.io/en/stable/", None),
}
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,9 @@ gpu = [
"cupy-cuda12x",
]
docs = [
'sphinx',
'sphinx<8',
'sphinx-autobuild>=2021.3.14',
'sphinx-autoapi',
'sphinx-autoapi<3.1',
'sphinx_design',
'sphinx-issues',
'sphinx-copybutton',
Expand Down
8 changes: 8 additions & 0 deletions src/zarr/codecs/blosc.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@


class BloscShuffle(Enum):
"""
Enum for shuffle filter used by blosc.
"""

noshuffle = "noshuffle"
shuffle = "shuffle"
bitshuffle = "bitshuffle"
Expand All @@ -38,6 +42,10 @@ def from_int(cls, num: int) -> BloscShuffle:


class BloscCname(Enum):
"""
Enum for compression library used by blosc.
"""

lz4 = "lz4"
lz4hc = "lz4hc"
blosclz = "blosclz"
Expand Down
4 changes: 4 additions & 0 deletions src/zarr/codecs/bytes.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@


class Endian(Enum):
"""
Enum for endian type used by bytes codec.
"""

big = "big"
little = "little"

Expand Down
4 changes: 4 additions & 0 deletions src/zarr/codecs/sharding.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@


class ShardingCodecIndexLocation(Enum):
"""
Enum for index location used by the sharding codec.
"""

start = "start"
end = "end"

Expand Down
3 changes: 3 additions & 0 deletions src/zarr/core/array.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@

from zarr.abc.codec import Codec, CodecPipeline

# Array and AsyncArray are defined in the base ``zarr`` namespace
__all__ = ["parse_array_metadata", "create_codec_pipeline"]


def parse_array_metadata(data: Any) -> ArrayV2Metadata | ArrayV3Metadata:
if isinstance(data, ArrayV2Metadata | ArrayV3Metadata):
Expand Down
3 changes: 3 additions & 0 deletions src/zarr/core/buffer/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
from zarr.codecs.bytes import Endian
from zarr.core.common import BytesLike, ChunkCoords

# Everything here is imported into ``zarr.core.buffer`` namespace.
__all__: list[str] = []


@runtime_checkable
class ArrayLike(Protocol):
Expand Down
6 changes: 5 additions & 1 deletion src/zarr/core/indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,10 @@ def __iter__(self) -> Iterator[ChunkDimProjection]:


class Order(Enum):
"""
Enum for indexing order.
"""

UNKNOWN = 0
INCREASING = 1
DECREASING = 2
Expand Down Expand Up @@ -700,7 +704,7 @@ def slice_to_range(s: slice, length: int) -> range:


def ix_(selection: Any, shape: ChunkCoords) -> npt.NDArray[np.intp]:
"""Convert an orthogonal selection to a numpy advanced (fancy) selection, like numpy.ix_
"""Convert an orthogonal selection to a numpy advanced (fancy) selection, like ``numpy.ix_``
but with support for slices and single ints."""

# normalisation
Expand Down
9 changes: 6 additions & 3 deletions src/zarr/testing/strategies.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,9 +155,12 @@ def basic_indices(draw: st.DrawFn, *, shape: tuple[int], **kwargs): # type: ign


def key_ranges(keys: SearchStrategy = node_names) -> SearchStrategy[list]:
"""fn to generate key_ranges strategy for get_partial_values()
returns list strategy w/ form: [(key, (range_start, range_step)),
(key, (range_start, range_step)),...]
"""
Function to generate key_ranges strategy for get_partial_values()
returns list strategy w/ form::
[(key, (range_start, range_step)),
(key, (range_start, range_step)),...]
"""
byte_ranges = st.tuples(
st.none() | st.integers(min_value=0), st.none() | st.integers(min_value=0)
Expand Down
2 changes: 1 addition & 1 deletion src/zarr/v2/indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ def slice_to_range(s: slice, l: int): # noqa: E741


def ix_(selection, shape):
"""Convert an orthogonal selection to a numpy advanced (fancy) selection, like numpy.ix_
"""Convert an orthogonal selection to a numpy advanced (fancy) selection, like ``numpy.ix_``
but with support for slices and single ints."""

# normalisation
Expand Down
3 changes: 1 addition & 2 deletions src/zarr/v2/meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@

# FLOAT_FILLS = {"NaN": np.nan, "Infinity": np.PINF, "-Infinity": np.NINF}

_v3_core_types = set("".join(d) for d in itertools.product("<>", ("u", "i", "f"), ("2", "4", "8")))
_v3_core_types = {"bool", "i1", "u1"} | _v3_core_types
_v3_core_types = {"bool", "i1", "u1"} | set("".join(d) for d in itertools.product("<>", ("u", "i", "f"), ("2", "4", "8")))

# The set of complex types allowed ({"<c8", "<c16", ">c8", ">c16"})
_v3_complex_types = set(f"{end}c{_bytes}" for end, _bytes in itertools.product("<>", ("8", "16")))
Expand Down
1 change: 1 addition & 0 deletions src/zarr/v2/n5.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ class N5FSStore(FSStore):
"""Implementation of the N5 format (https://github.com/saalfeldlab/n5)
using `fsspec`, which allows storage on a variety of filesystems. Based
on `zarr.N5Store`.
Parameters
----------
path : string
Expand Down

0 comments on commit 8e29f37

Please sign in to comment.