Skip to content

Commit acd2982

Browse files
authored
Toctrees for classes and methods using sphinx autosummary (#1393)
* Implement autosummary patch for autolisting * Fix css for autogenerated tables via autosummary * Improve autolist feature * Add toctrees for methods and classes for ignite * Better import for autolist * Add toctrees for methods and classes for contrib package * Fix CSS for autosummary table row height * Fix warnings raised by toctree
1 parent 465e621 commit acd2982

File tree

11 files changed

+242
-53
lines changed

11 files changed

+242
-53
lines changed

docs/source/_templates/_static/css/ignite_theme.css

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,21 @@ div.container a.header-logo
125125
line-height: 1;
126126
}
127127

128+
/* automatically generated toctree tables */
129+
130+
article.pytorch-article table.longtable.docutils.align-default colgroup {
131+
display: none;
132+
}
133+
134+
article.pytorch-article table.longtable.docutils.align-default tbody td:first-child {
135+
width: 30%;
136+
}
137+
138+
article.pytorch-article table.longtable.docutils.align-default tbody td {
139+
padding: 0.25rem;
140+
}
141+
142+
article.pytorch-article table.longtable.docutils.align-default tbody td p {
143+
margin-block-start: 0.1em;
144+
margin-block-end: 0.1em;
145+
}

docs/source/conf.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,3 +205,98 @@
205205

206206
# replaces pending_xref node with desc_type for type annotations
207207
sphinx.domains.python.type_to_xref = lambda t, e=None: addnodes.desc_type("", nodes.Text(t))
208+
209+
# -- Autosummary patch to get list of a classes, funcs automatically ----------
210+
211+
from importlib import import_module
212+
from inspect import getmembers, isclass, isfunction
213+
import sphinx.ext.autosummary
214+
from sphinx.ext.autosummary import Autosummary
215+
from docutils.parsers.rst import directives
216+
from docutils.statemachine import StringList
217+
218+
219+
class BetterAutosummary(Autosummary):
220+
"""Autosummary with autolisting for modules.
221+
222+
By default it tries to import all public names (__all__),
223+
otherwise import all classes and/or functions in a module.
224+
225+
Options:
226+
- :autolist: option to get list of classes and functions from currentmodule.
227+
- :autolist-classes: option to get list of classes from currentmodule.
228+
- :autolist-functions: option to get list of functions from currentmodule.
229+
230+
Example Usage:
231+
232+
.. currentmodule:: ignite.metrics
233+
234+
.. autosummary::
235+
:nosignatures:
236+
:autolist:
237+
"""
238+
239+
# Add new option
240+
_option_spec = Autosummary.option_spec.copy()
241+
_option_spec.update(
242+
{
243+
"autolist": directives.unchanged,
244+
"autolist-classes": directives.unchanged,
245+
"autolist-functions": directives.unchanged,
246+
}
247+
)
248+
option_spec = _option_spec
249+
250+
def run(self):
251+
for auto in ("autolist", "autolist-classes", "autolist-functions"):
252+
if auto in self.options:
253+
# Get current module name
254+
module_name = self.env.ref_context.get("py:module")
255+
# Import module
256+
module = import_module(module_name)
257+
258+
# Get public names (if possible)
259+
try:
260+
names = getattr(module, "__all__")
261+
except AttributeError:
262+
# Get classes defined in the module
263+
cls_names = [
264+
name[0]
265+
for name in getmembers(module, isclass)
266+
if name[-1].__module__ == module_name and not (name[0].startswith("_"))
267+
]
268+
# Get functions defined in the module
269+
fn_names = [
270+
name[0]
271+
for name in getmembers(module, isfunction)
272+
if (name[-1].__module__ == module_name) and not (name[0].startswith("_"))
273+
]
274+
names = cls_names + fn_names
275+
# It may happen that module doesn't have any defined class or func
276+
if not names:
277+
names = [name[0] for name in getmembers(module)]
278+
279+
if auto == "autolist":
280+
# Get list of all classes and functions inside module
281+
names = [
282+
name for name in names if (isclass(getattr(module, name)) or isfunction(getattr(module, name)))
283+
]
284+
else:
285+
if auto == "autolist-classes":
286+
# Get only classes
287+
check = isclass
288+
elif auto == "autolist-functions":
289+
# Get only functions
290+
check = isfunction
291+
else:
292+
raise NotImplementedError
293+
294+
names = [name for name in names if check(getattr(module, name))]
295+
296+
# Update content
297+
self.content = StringList(names)
298+
return super().run()
299+
300+
301+
# Patch original Autosummary
302+
sphinx.ext.autosummary.Autosummary = BetterAutosummary

docs/source/contrib/engines.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ Contribution module of engines and helper tools
55

66
.. currentmodule:: ignite.contrib.engines
77

8+
.. currentmodule:: ignite.contrib.engines.tbptt
9+
10+
.. autosummary::
11+
:nosignatures:
12+
:autolist:
13+
14+
.. currentmodule:: ignite.contrib.engines.common
15+
16+
.. autosummary::
17+
:nosignatures:
18+
:autolist:
819

920
Truncated Backpropagation Throught Time
1021
---------------------------------------

docs/source/contrib/handlers.rst

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,54 @@ Contribution module of handlers
77
param_scheduler
88
---------------
99

10+
.. currentmodule:: ignite.contrib.handlers.param_scheduler
11+
12+
.. autosummary::
13+
:nosignatures:
14+
:autolist:
15+
1016
.. automodule:: ignite.contrib.handlers.param_scheduler
1117
:members:
1218

19+
1320
lr_finder
1421
---------
1522

23+
.. currentmodule:: ignite.contrib.handlers.lr_finder
24+
25+
.. autosummary::
26+
:nosignatures:
27+
:autolist:
28+
1629
.. automodule:: ignite.contrib.handlers.lr_finder
1730
:members:
1831

1932

2033
time_profilers
2134
---------------
2235

36+
.. currentmodule:: ignite.contrib.handlers.time_profilers
37+
38+
.. autosummary::
39+
:nosignatures:
40+
:autolist:
41+
42+
2343
.. automodule:: ignite.contrib.handlers.time_profilers
2444
:members:
2545

46+
2647
tensorboard_logger
2748
------------------
2849

2950
See `tensorboardX mnist example <https://github.com/pytorch/ignite/blob/master/examples/contrib/mnist/mnist_with_tensorboard_logger.py>`_
3051
and `CycleGAN and EfficientNet notebooks <https://github.com/pytorch/ignite/tree/master/examples/notebooks>`_ for detailed usage.
3152

53+
.. currentmodule:: ignite.contrib.handlers.tensorboard_logger
54+
55+
.. autosummary::
56+
:nosignatures:
57+
:autolist:
3258

3359
.. automodule:: ignite.contrib.handlers.tensorboard_logger
3460
:members:
@@ -41,6 +67,12 @@ visdom_logger
4167
See `visdom mnist example <https://github.com/pytorch/ignite/blob/master/examples/contrib/mnist/mnist_with_visdom_logger.py>`_
4268
for detailed usage.
4369

70+
.. currentmodule:: ignite.contrib.handlers.visdom_logger
71+
72+
.. autosummary::
73+
:nosignatures:
74+
:autolist:
75+
4476
.. automodule:: ignite.contrib.handlers.visdom_logger
4577
:members:
4678
:inherited-members:
@@ -52,6 +84,11 @@ neptune_logger
5284
See `neptune mnist example <https://github.com/pytorch/ignite/blob/master/examples/contrib/mnist/mnist_with_neptune_logger.py>`_
5385
for detailed usage.
5486

87+
.. currentmodule:: ignite.contrib.handlers.neptune_logger
88+
89+
.. autosummary::
90+
:nosignatures:
91+
:autolist:
5592

5693
.. automodule:: ignite.contrib.handlers.neptune_logger
5794
:members:
@@ -61,6 +98,12 @@ for detailed usage.
6198
mlflow_logger
6299
-------------
63100

101+
.. currentmodule:: ignite.contrib.handlers.mlflow_logger
102+
103+
.. autosummary::
104+
:nosignatures:
105+
:autolist:
106+
64107
.. automodule:: ignite.contrib.handlers.mlflow_logger
65108
:members:
66109
:inherited-members:
@@ -72,13 +115,24 @@ tqdm_logger
72115
See `tqdm mnist example <https://github.com/pytorch/ignite/blob/master/examples/contrib/mnist/mnist_with_tqdm_logger.py>`_
73116
for detailed usage.
74117

118+
.. currentmodule:: ignite.contrib.handlers.tqdm_logger
119+
120+
.. autosummary::
121+
:nosignatures:
122+
:autolist:
75123

76124
.. automodule:: ignite.contrib.handlers.tqdm_logger
77125
:members:
78126

79127
polyaxon_logger
80128
---------------
81129

130+
.. currentmodule:: ignite.contrib.handlers.polyaxon_logger
131+
132+
.. autosummary::
133+
:nosignatures:
134+
:autolist:
135+
82136
.. automodule:: ignite.contrib.handlers.polyaxon_logger
83137
:members:
84138
:inherited-members:
@@ -89,6 +143,12 @@ wandb_logger
89143
See `wandb mnist example <https://github.com/pytorch/ignite/blob/master/examples/contrib/mnist/mnist_with_wandb_logger.py>`_
90144
for detailed usage.
91145

146+
.. currentmodule:: ignite.contrib.handlers.wandb_logger
147+
148+
.. autosummary::
149+
:nosignatures:
150+
:autolist:
151+
92152
.. automodule:: ignite.contrib.handlers.wandb_logger
93153
:members:
94154
:inherited-members:
@@ -99,6 +159,12 @@ trains_logger
99159
See `trains mnist example <https://github.com/pytorch/ignite/blob/master/examples/contrib/mnist/mnist_with_trains_logger.py>`_
100160
for detailed usage.
101161

162+
.. currentmodule:: ignite.contrib.handlers.trains_logger
163+
164+
.. autosummary::
165+
:nosignatures:
166+
:autolist:
167+
102168
.. automodule:: ignite.contrib.handlers.trains_logger
103169
:members:
104170
:inherited-members:

docs/source/contrib/metrics.rst

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ Contribution module of metrics
55

66
.. currentmodule:: ignite.contrib.metrics
77

8+
.. autosummary::
9+
:nosignatures:
10+
:autolist:
11+
812
.. automodule:: ignite.contrib.metrics
913
:members:
1014
:imported-members:
@@ -26,21 +30,11 @@ metrics useful for regression tasks. Definitions of metrics are based on `Botchk
2630

2731
Complete list of metrics:
2832

29-
- :class:`~ignite.contrib.metrics.regression.CanberraMetric`
30-
- :class:`~ignite.contrib.metrics.regression.FractionalAbsoluteError`
31-
- :class:`~ignite.contrib.metrics.regression.FractionalBias`
32-
- :class:`~ignite.contrib.metrics.regression.GeometricMeanAbsoluteError`
33-
- :class:`~ignite.contrib.metrics.regression.GeometricMeanRelativeAbsoluteError`
34-
- :class:`~ignite.contrib.metrics.regression.ManhattanDistance`
35-
- :class:`~ignite.contrib.metrics.regression.MaximumAbsoluteError`
36-
- :class:`~ignite.contrib.metrics.regression.MeanAbsoluteRelativeError`
37-
- :class:`~ignite.contrib.metrics.regression.MeanError`
38-
- :class:`~ignite.contrib.metrics.regression.MeanNormalizedBias`
39-
- :class:`~ignite.contrib.metrics.regression.MedianAbsoluteError`
40-
- :class:`~ignite.contrib.metrics.regression.MedianAbsolutePercentageError`
41-
- :class:`~ignite.contrib.metrics.regression.MedianRelativeAbsoluteError`
42-
- :class:`~ignite.contrib.metrics.regression.R2Score`
43-
- :class:`~ignite.contrib.metrics.regression.WaveHedgesDistance`
33+
.. currentmodule:: ignite.contrib.metrics.regression
34+
35+
.. autosummary::
36+
:nosignatures:
37+
:autolist:
4438

4539

4640
.. autoclass:: CanberraMetric

docs/source/distributed.rst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ ignite.distributed.auto
6161

6262
.. currentmodule:: ignite.distributed.auto
6363

64+
.. autosummary::
65+
:nosignatures:
66+
:autolist:
67+
6468
.. automodule:: ignite.distributed.auto
6569
:members:
6670

@@ -70,6 +74,10 @@ ignite.distributed.launcher
7074

7175
.. currentmodule:: ignite.distributed.launcher
7276

77+
.. autosummary::
78+
:nosignatures:
79+
:autolist:
80+
7381
.. automodule:: ignite.distributed.launcher
7482
:members:
7583

@@ -82,6 +90,10 @@ group or spawn multiple processes.
8290

8391
.. currentmodule:: ignite.distributed.utils
8492

93+
.. autosummary::
94+
:nosignatures:
95+
:autolist:
96+
8597
.. automodule:: ignite.distributed.utils
8698
:members:
8799

docs/source/engine.rst

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,25 @@ ignite.engine
33

44
Main module of the library containing:
55

6-
- :class:`~ignite.engine.engine.Engine` - abstraction that loops provided data, executes a processing function and returns a result
7-
- :class:`~ignite.engine.events.Events` - events triggered by the :class:`~ignite.engine.engine.Engine` during execution
8-
- :class:`~ignite.engine.events.State` - object to pass internal and user-defined data between event handlers
6+
.. currentmodule:: ignite.engine.engine
7+
8+
.. autosummary::
9+
:nosignatures:
10+
:autolist:
11+
12+
.. currentmodule:: ignite.engine.events
13+
14+
.. autosummary::
15+
:nosignatures:
16+
:autolist:
917

1018
and helper methods:
1119

12-
- :meth:`~ignite.engine.create_supervised_trainer` - creates single model/optimizer/criterion supervised trainer
13-
- :meth:`~ignite.engine.create_supervised_evaluator` - creates single model supervised evaluation engine
20+
.. currentmodule:: ignite.engine
1421

22+
.. autosummary::
23+
:nosignatures:
24+
:autolist-functions:
1525

1626
More details about those structures can be found in :doc:`concepts`.
1727

docs/source/exceptions.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@ ignite.exceptions
33

44
.. currentmodule:: ignite.exceptions
55

6+
.. autosummary::
7+
:nosignatures:
8+
:autolist:
9+
610
.. autoclass:: NotComputableError

0 commit comments

Comments
 (0)