mkdocstrings-python 1.16.3__py3-none-any.whl → 1.16.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. mkdocstrings_handlers/python/config.py +8 -0
  2. mkdocstrings_handlers/python/handler.py +1 -0
  3. mkdocstrings_handlers/python/rendering.py +53 -5
  4. mkdocstrings_handlers/python/templates/material/_base/attribute.html.jinja +4 -0
  5. mkdocstrings_handlers/python/templates/material/_base/backlinks.html.jinja +17 -0
  6. mkdocstrings_handlers/python/templates/material/_base/class.html.jinja +9 -1
  7. mkdocstrings_handlers/python/templates/material/_base/docstring/other_parameters.html.jinja +3 -3
  8. mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html.jinja +6 -6
  9. mkdocstrings_handlers/python/templates/material/_base/docstring/raises.html.jinja +3 -3
  10. mkdocstrings_handlers/python/templates/material/_base/docstring/receives.html.jinja +4 -4
  11. mkdocstrings_handlers/python/templates/material/_base/docstring/returns.html.jinja +4 -4
  12. mkdocstrings_handlers/python/templates/material/_base/docstring/warns.html.jinja +3 -3
  13. mkdocstrings_handlers/python/templates/material/_base/docstring/yields.html.jinja +4 -4
  14. mkdocstrings_handlers/python/templates/material/_base/expression.html.jinja +7 -7
  15. mkdocstrings_handlers/python/templates/material/_base/function.html.jinja +4 -0
  16. mkdocstrings_handlers/python/templates/material/_base/module.html.jinja +4 -0
  17. mkdocstrings_handlers/python/templates/material/_base/signature.html.jinja +7 -3
  18. mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html.jinja +1 -1
  19. mkdocstrings_handlers/python/templates/material/_base/summary/classes.html.jinja +1 -1
  20. mkdocstrings_handlers/python/templates/material/_base/summary/functions.html.jinja +1 -1
  21. mkdocstrings_handlers/python/templates/material/_base/summary/modules.html.jinja +1 -1
  22. mkdocstrings_handlers/python/templates/material/backlinks.html.jinja +1 -0
  23. mkdocstrings_handlers/python/templates/material/style.css +34 -6
  24. mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/other_parameters.html.jinja +1 -1
  25. mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/parameters.html.jinja +2 -2
  26. mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/raises.html.jinja +1 -1
  27. mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/receives.html.jinja +1 -1
  28. mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/returns.html.jinja +1 -1
  29. mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/warns.html.jinja +1 -1
  30. mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/yields.html.jinja +1 -1
  31. {mkdocstrings_python-1.16.3.dist-info → mkdocstrings_python-1.16.5.dist-info}/METADATA +1 -1
  32. {mkdocstrings_python-1.16.3.dist-info → mkdocstrings_python-1.16.5.dist-info}/RECORD +35 -33
  33. {mkdocstrings_python-1.16.3.dist-info → mkdocstrings_python-1.16.5.dist-info}/WHEEL +0 -0
  34. {mkdocstrings_python-1.16.3.dist-info → mkdocstrings_python-1.16.5.dist-info}/entry_points.txt +0 -0
  35. {mkdocstrings_python-1.16.3.dist-info → mkdocstrings_python-1.16.5.dist-info}/licenses/LICENSE +0 -0
@@ -386,6 +386,14 @@ class PythonInputOptions:
386
386
  ),
387
387
  ] = "brief"
388
388
 
389
+ backlinks: Annotated[
390
+ Literal["flat", "tree", False],
391
+ Field(
392
+ group="general",
393
+ description="Whether to render backlinks, and how.",
394
+ ),
395
+ ] = False
396
+
389
397
  docstring_options: Annotated[
390
398
  GoogleStyleOptions | NumpyStyleOptions | SphinxStyleOptions | AutoStyleOptions | None,
391
399
  Field(
@@ -301,6 +301,7 @@ class PythonHandler(BaseHandler):
301
301
  self.env.filters["as_functions_section"] = rendering.do_as_functions_section
302
302
  self.env.filters["as_classes_section"] = rendering.do_as_classes_section
303
303
  self.env.filters["as_modules_section"] = rendering.do_as_modules_section
304
+ self.env.filters["backlink_tree"] = rendering.do_backlink_tree
304
305
  self.env.globals["AutorefsHook"] = rendering.AutorefsHook
305
306
  self.env.tests["existing_template"] = lambda template_name: template_name in self.env.list_templates()
306
307
 
@@ -8,11 +8,12 @@ import string
8
8
  import subprocess
9
9
  import sys
10
10
  import warnings
11
+ from collections import defaultdict
11
12
  from dataclasses import replace
12
13
  from functools import lru_cache
13
14
  from pathlib import Path
14
15
  from re import Match, Pattern
15
- from typing import TYPE_CHECKING, Any, Callable, ClassVar, Literal
16
+ from typing import TYPE_CHECKING, Any, Callable, ClassVar, Literal, TypeVar
16
17
 
17
18
  from griffe import (
18
19
  Alias,
@@ -28,11 +29,11 @@ from griffe import (
28
29
  )
29
30
  from jinja2 import TemplateNotFound, pass_context, pass_environment
30
31
  from markupsafe import Markup
31
- from mkdocs_autorefs import AutorefsHookInterface
32
+ from mkdocs_autorefs import AutorefsHookInterface, Backlink, BacklinkCrumb
32
33
  from mkdocstrings import get_logger
33
34
 
34
35
  if TYPE_CHECKING:
35
- from collections.abc import Iterator, Sequence
36
+ from collections.abc import Iterable, Iterator, Sequence
36
37
 
37
38
  from griffe import Attribute, Class, Function, Module
38
39
  from jinja2 import Environment, Template
@@ -210,10 +211,15 @@ def do_format_attribute(
210
211
 
211
212
  signature = str(attribute_path).strip()
212
213
  if annotations and attribute.annotation:
213
- annotation = template.render(context.parent, expression=attribute.annotation, signature=True)
214
+ annotation = template.render(
215
+ context.parent,
216
+ expression=attribute.annotation,
217
+ signature=True,
218
+ backlink_type="returned-by",
219
+ )
214
220
  signature += f": {annotation}"
215
221
  if attribute.value:
216
- value = template.render(context.parent, expression=attribute.value, signature=True)
222
+ value = template.render(context.parent, expression=attribute.value, signature=True, backlink_type="used-by")
217
223
  signature += f" = {value}"
218
224
 
219
225
  signature = do_format_code(signature, line_length)
@@ -725,3 +731,45 @@ class AutorefsHook(AutorefsHookInterface):
725
731
  filepath=str(filepath),
726
732
  lineno=lineno,
727
733
  )
734
+
735
+
736
+ T = TypeVar("T")
737
+ Tree = dict[T, "Tree"]
738
+ CompactTree = dict[tuple[T, ...], "CompactTree"]
739
+ _rtree = lambda: defaultdict(_rtree) # type: ignore[has-type,var-annotated] # noqa: E731
740
+
741
+
742
+ def _tree(data: Iterable[tuple[T, ...]]) -> Tree:
743
+ new_tree = _rtree()
744
+ for nav in data:
745
+ *path, leaf = nav
746
+ node = new_tree
747
+ for key in path:
748
+ node = node[key]
749
+ node[leaf] = _rtree()
750
+ return new_tree
751
+
752
+
753
+ def _compact_tree(tree: Tree) -> CompactTree:
754
+ new_tree = _rtree()
755
+ for key, value in tree.items():
756
+ child = _compact_tree(value)
757
+ if len(child) == 1:
758
+ child_key, child_value = next(iter(child.items()))
759
+ new_key = (key, *child_key)
760
+ new_tree[new_key] = child_value
761
+ else:
762
+ new_tree[(key,)] = child
763
+ return new_tree
764
+
765
+
766
+ def do_backlink_tree(backlinks: list[Backlink]) -> CompactTree[BacklinkCrumb]:
767
+ """Build a tree of backlinks.
768
+
769
+ Parameters:
770
+ backlinks: The list of backlinks.
771
+
772
+ Returns:
773
+ A tree of backlinks.
774
+ """
775
+ return _compact_tree(_tree(backlink.crumbs for backlink in backlinks))
@@ -113,6 +113,10 @@ Context:
113
113
  {% include "docstring"|get_template with context %}
114
114
  {% endwith %}
115
115
  {% endblock docstring %}
116
+
117
+ {% if config.backlinks %}
118
+ <backlinks identifier="{{ html_id }}" handler="python" />
119
+ {% endif %}
116
120
  {% endblock contents %}
117
121
  </div>
118
122
 
@@ -0,0 +1,17 @@
1
+ {#- Template for backlinks.
2
+
3
+ This template renders backlinks.
4
+
5
+ Context:
6
+ backlinks (Mapping[str, Iterable[str]]): The backlinks to render.
7
+ config (dict): The configuration options.
8
+ verbose_type (Mapping[str, str]): The verbose backlink types.
9
+ default_crumb (BacklinkCrumb): A default, empty crumb.
10
+ -#}
11
+
12
+ {% block logs scoped %}
13
+ {#- Logging block.
14
+
15
+ This block can be used to log debug messages, deprecation messages, warnings, etc.
16
+ -#}
17
+ {% endblock logs %}
@@ -130,7 +130,11 @@ Context:
130
130
  {% if config.show_bases and class.bases %}
131
131
  <p class="doc doc-class-bases">
132
132
  Bases: {% for expression in class.bases -%}
133
- <code>{% include "expression"|get_template with context %}</code>{% if not loop.last %}, {% endif %}
133
+ <code>
134
+ {%- with backlink_type = "subclassed-by" -%}
135
+ {%- include "expression"|get_template with context -%}
136
+ {%- endwith -%}
137
+ </code>{% if not loop.last %}, {% endif %}
134
138
  {% endfor -%}
135
139
  </p>
136
140
  {% endif %}
@@ -159,6 +163,10 @@ Context:
159
163
  {% endif %}
160
164
  {% endblock docstring %}
161
165
 
166
+ {% if config.backlinks %}
167
+ <backlinks identifier="{{ html_id }}" handler="python" />
168
+ {% endif %}
169
+
162
170
  {% block summary scoped %}
163
171
  {#- Summary block.
164
172
 
@@ -36,7 +36,7 @@ Context:
36
36
  <td><code>{{ parameter.name }}</code></td>
37
37
  <td>
38
38
  {% if parameter.annotation %}
39
- {% with expression = parameter.annotation %}
39
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
40
40
  <code>{% include "expression"|get_template with context %}</code>
41
41
  {% endwith %}
42
42
  {% endif %}
@@ -60,7 +60,7 @@ Context:
60
60
  <li class="doc-section-item field-body">
61
61
  <b><code>{{ parameter.name }}</code></b>
62
62
  {% if parameter.annotation %}
63
- {% with expression = parameter.annotation %}
63
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
64
64
  (<code>{% include "expression"|get_template with context %}</code>)
65
65
  {% endwith %}
66
66
  {% endif %}
@@ -94,7 +94,7 @@ Context:
94
94
  {% if parameter.annotation %}
95
95
  <span class="doc-param-annotation">
96
96
  <b>{{ lang.t("TYPE:") }}</b>
97
- {% with expression = parameter.annotation %}
97
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
98
98
  <code>{% include "expression"|get_template with context %}</code>
99
99
  {% endwith %}
100
100
  </span>
@@ -51,7 +51,7 @@ Context:
51
51
  </td>
52
52
  <td>
53
53
  {% if parameter.annotation %}
54
- {% with expression = parameter.annotation %}
54
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
55
55
  <code>{% include "expression"|get_template with context %}</code>
56
56
  {% endwith %}
57
57
  {% endif %}
@@ -63,7 +63,7 @@ Context:
63
63
  </td>
64
64
  <td>
65
65
  {% if parameter.default %}
66
- {% with expression = parameter.default %}
66
+ {% with expression = parameter.default, backlink_type = "used-by" %}
67
67
  <code>{% include "expression"|get_template with context %}</code>
68
68
  {% endwith %}
69
69
  {% else %}
@@ -96,10 +96,10 @@ Context:
96
96
  <b><code>{{ parameter.name }}</code></b>
97
97
  {% endif %}
98
98
  {% if parameter.annotation %}
99
- {% with expression = parameter.annotation %}
99
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
100
100
  (<code>{% include "expression"|get_template with context %}</code>
101
101
  {%- if parameter.default %}, {{ lang.t("default:") }}
102
- {% with expression = parameter.default %}
102
+ {% with expression = parameter.default, backlink_type = "used-by" %}
103
103
  <code>{% include "expression"|get_template with context %}</code>
104
104
  {% endwith %}
105
105
  {% endif %})
@@ -149,7 +149,7 @@ Context:
149
149
  {% if parameter.annotation %}
150
150
  <span class="doc-param-annotation">
151
151
  <b>{{ lang.t("TYPE:") }}</b>
152
- {% with expression = parameter.annotation %}
152
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
153
153
  <code>{% include "expression"|get_template with context %}</code>
154
154
  {% endwith %}
155
155
  </span>
@@ -157,7 +157,7 @@ Context:
157
157
  {% if parameter.default %}
158
158
  <span class="doc-param-default">
159
159
  <b>{{ lang.t("DEFAULT:") }}</b>
160
- {% with expression = parameter.default %}
160
+ {% with expression = parameter.default, backlink_type = "used-by" %}
161
161
  <code>{% include "expression"|get_template with context %}</code>
162
162
  {% endwith %}
163
163
  </span>
@@ -34,7 +34,7 @@ Context:
34
34
  <tr class="doc-section-item">
35
35
  <td>
36
36
  {% if raises.annotation %}
37
- {% with expression = raises.annotation %}
37
+ {% with expression = raises.annotation, backlink_type = "raised-by" %}
38
38
  <code>{% include "expression"|get_template with context %}</code>
39
39
  {% endwith %}
40
40
  {% endif %}
@@ -57,7 +57,7 @@ Context:
57
57
  {% for raises in section.value %}
58
58
  <li class="doc-section-item field-body">
59
59
  {% if raises.annotation %}
60
- {% with expression = raises.annotation %}
60
+ {% with expression = raises.annotation, backlink_type = "raised-by" %}
61
61
  <code>{% include "expression"|get_template with context %}</code>
62
62
  {% endwith %}
63
63
 
@@ -84,7 +84,7 @@ Context:
84
84
  <tr class="doc-section-item">
85
85
  <td>
86
86
  <span class="doc-raises-annotation">
87
- {% with expression = raises.annotation %}
87
+ {% with expression = raises.annotation, backlink_type = "raised-by" %}
88
88
  <code>{% include "expression"|get_template with context %}</code>
89
89
  {% endwith %}
90
90
  </span>
@@ -37,7 +37,7 @@ Context:
37
37
  {% if name_column %}<td>{% if receives.name %}<code>{{ receives.name }}</code>{% endif %}</td>{% endif %}
38
38
  <td>
39
39
  {% if receives.annotation %}
40
- {% with expression = receives.annotation %}
40
+ {% with expression = receives.annotation, backlink_type = "received-by" %}
41
41
  <code>{% include "expression"|get_template with context %}</code>
42
42
  {% endwith %}
43
43
  {% endif %}
@@ -61,7 +61,7 @@ Context:
61
61
  <li class="doc-section-item field-body">
62
62
  {% if receives.name %}<b><code>{{ receives.name }}</code></b>{% endif %}
63
63
  {% if receives.annotation %}
64
- {% with expression = receives.annotation %}
64
+ {% with expression = receives.annotation, backlink_type = "received-by" %}
65
65
  {% if receives.name %} ({% endif %}
66
66
  <code>{% include "expression"|get_template with context %}</code>
67
67
  {% if receives.name %}){% endif %}
@@ -93,7 +93,7 @@ Context:
93
93
  <code>{{ receives.name }}</code>
94
94
  {% elif receives.annotation %}
95
95
  <span class="doc-receives-annotation">
96
- {% with expression = receives.annotation %}
96
+ {% with expression = receives.annotation, backlink_type = "received-by" %}
97
97
  <code>{% include "expression"|get_template with context %}</code>
98
98
  {% endwith %}
99
99
  </span>
@@ -107,7 +107,7 @@ Context:
107
107
  <p>
108
108
  <span class="doc-receives-annotation">
109
109
  <b>{{ lang.t("TYPE:") }}</b>
110
- {% with expression = receives.annotation %}
110
+ {% with expression = receives.annotation, backlink_type = "received-by" %}
111
111
  <code>{% include "expression"|get_template with context %}</code>
112
112
  {% endwith %}
113
113
  </span>
@@ -37,7 +37,7 @@ Context:
37
37
  {% if name_column %}<td>{% if returns.name %}<code>{{ returns.name }}</code>{% endif %}</td>{% endif %}
38
38
  <td>
39
39
  {% if returns.annotation %}
40
- {% with expression = returns.annotation %}
40
+ {% with expression = returns.annotation, backlink_type = "returned-by" %}
41
41
  <code>{% include "expression"|get_template with context %}</code>
42
42
  {% endwith %}
43
43
  {% endif %}
@@ -61,7 +61,7 @@ Context:
61
61
  <li class="doc-section-item field-body">
62
62
  {% if returns.name %}<b><code>{{ returns.name }}</code></b>{% endif %}
63
63
  {% if returns.annotation %}
64
- {% with expression = returns.annotation %}
64
+ {% with expression = returns.annotation, backlink_type = "returned-by" %}
65
65
  {% if returns.name %} ({% endif %}
66
66
  <code>{% include "expression"|get_template with context %}</code>
67
67
  {% if returns.name %}){% endif %}
@@ -93,7 +93,7 @@ Context:
93
93
  <code>{{ returns.name }}</code>
94
94
  {% elif returns.annotation %}
95
95
  <span class="doc-returns-annotation">
96
- {% with expression = returns.annotation %}
96
+ {% with expression = returns.annotation, backlink_type = "returned-by" %}
97
97
  <code>{% include "expression"|get_template with context %}</code>
98
98
  {% endwith %}
99
99
  </span>
@@ -107,7 +107,7 @@ Context:
107
107
  <p>
108
108
  <span class="doc-returns-annotation">
109
109
  <b>{{ lang.t("TYPE:") }}</b>
110
- {% with expression = returns.annotation %}
110
+ {% with expression = returns.annotation, backlink_type = "returned-by" %}
111
111
  <code>{% include "expression"|get_template with context %}</code>
112
112
  {% endwith %}
113
113
  </span>
@@ -34,7 +34,7 @@ Context:
34
34
  <tr class="doc-section-item">
35
35
  <td>
36
36
  {% if warns.annotation %}
37
- {% with expression = warns.annotation %}
37
+ {% with expression = warns.annotation, backlink_type = "emitted-by" %}
38
38
  <code>{% include "expression"|get_template with context %}</code>
39
39
  {% endwith %}
40
40
  {% endif %}
@@ -57,7 +57,7 @@ Context:
57
57
  {% for warns in section.value %}
58
58
  <li class="doc-section-item field-body">
59
59
  {% if warns.annotation %}
60
- {% with expression = warns.annotation %}
60
+ {% with expression = warns.annotation, backlink_type = "emitted-by" %}
61
61
  <code>{% include "expression"|get_template with context %}</code>
62
62
  {% endwith %}
63
63
 
@@ -84,7 +84,7 @@ Context:
84
84
  <tr class="doc-section-item">
85
85
  <td>
86
86
  <span class="doc-warns-annotation">
87
- {% with expression = warns.annotation %}
87
+ {% with expression = warns.annotation, backlink_type = "emitted-by" %}
88
88
  <code>{% include "expression"|get_template with context %}</code>
89
89
  {% endwith %}
90
90
  </span>
@@ -37,7 +37,7 @@ Context:
37
37
  {% if name_column %}<td>{% if yields.name %}<code>{{ yields.name }}</code>{% endif %}</td>{% endif %}
38
38
  <td>
39
39
  {% if yields.annotation %}
40
- {% with expression = yields.annotation %}
40
+ {% with expression = yields.annotation, backlink_type = "yielded-by" %}
41
41
  <code>{% include "expression"|get_template with context %}</code>
42
42
  {% endwith %}
43
43
  {% endif %}
@@ -61,7 +61,7 @@ Context:
61
61
  <li class="doc-section-item field-body">
62
62
  {% if yields.name %}<b><code>{{ yields.name }}</code></b>{% endif %}
63
63
  {% if yields.annotation %}
64
- {% with expression = yields.annotation %}
64
+ {% with expression = yields.annotation, backlink_type = "yielded-by" %}
65
65
  {% if yields.name %} ({% endif %}
66
66
  <code>{% include "expression"|get_template with context %}</code>
67
67
  {% if yields.name %}){% endif %}
@@ -93,7 +93,7 @@ Context:
93
93
  <code>{{ yields.name }}</code>
94
94
  {% elif yields.annotation %}
95
95
  <span class="doc-yields-annotation">
96
- {% with expression = yields.annotation %}
96
+ {% with expression = yields.annotation, backlink_type = "yielded-by" %}
97
97
  <code>{% include "expression"|get_template with context %}</code>
98
98
  {% endwith %}
99
99
  </span>
@@ -107,7 +107,7 @@ Context:
107
107
  <p>
108
108
  <span class="doc-yields-annotation">
109
109
  <b>{{ lang.t("TYPE:") }}:</b>
110
- {% with expression = yields.annotation %}
110
+ {% with expression = yields.annotation, backlink_type = "yielded-by" %}
111
111
  <code>{% include "expression"|get_template with context %}</code>
112
112
  {% endwith %}
113
113
  </span>
@@ -11,7 +11,7 @@ which is a tree-like structure representing a Python expression.
11
11
  -#}
12
12
  {% endblock logs %}
13
13
 
14
- {%- macro crossref(name, annotation_path) -%}
14
+ {%- macro crossref(name, annotation_path, backlink_type="") -%}
15
15
  {#- Output a cross-reference.
16
16
 
17
17
  This macro outputs a cross-reference to the given name.
@@ -35,11 +35,11 @@ which is a tree-like structure representing a Python expression.
35
35
  {{ prefix }}
36
36
  {%- if not signature -%}
37
37
  {#- Always render cross-references outside of signatures. We don't need to stash them. -#}
38
- <autoref identifier="{{ path }}" optional{% if title != path %} hover{% endif %}>{{ title }}</autoref>
38
+ <autoref identifier="{{ path }}"{% if backlink_type %} backlink-type="{{ backlink_type }}" backlink-anchor="{{ html_id }}"{% endif %} optional{% if title != path %} hover{% endif %}>{{ title }}</autoref>
39
39
  {%- elif config.signature_crossrefs -%}
40
40
  {#- We're in a signature and cross-references are enabled, we must render one and stash it. -#}
41
41
  {%- filter stash_crossref(length=title|length) -%}
42
- <autoref identifier="{{ path }}" optional{% if title != path %} hover{% endif %}>{{ title }}</autoref>
42
+ <autoref identifier="{{ path }}"{% if backlink_type %} backlink-type="{{ backlink_type }}" backlink-anchor="{{ html_id }}"{% endif %} optional{% if title != path %} hover{% endif %}>{{ title }}</autoref>
43
43
  {%- endfilter -%}
44
44
  {%- else -%}
45
45
  {#- We're in a signature but cross-references are disabled, we just render the title. -#}
@@ -72,7 +72,7 @@ which is a tree-like structure representing a Python expression.
72
72
  {%- endif -%}
73
73
  {%- endmacro -%}
74
74
 
75
- {%- macro render(expression, annotations_path) -%}
75
+ {%- macro render(expression, annotations_path, backlink_type="") -%}
76
76
  {#- Render an expression.
77
77
 
78
78
  Parameters:
@@ -85,13 +85,13 @@ which is a tree-like structure representing a Python expression.
85
85
  {%- if expression is string -%}
86
86
  {%- if signature -%}{{ expression|safe }}{%- else -%}{{ expression }}{%- endif -%}
87
87
  {%- elif expression.classname == "ExprName" -%}
88
- {{ crossref(expression, annotations_path) }}
88
+ {{ crossref(expression, annotations_path, backlink_type) }}
89
89
  {%- elif config.unwrap_annotated and expression.classname == "ExprSubscript" and expression.canonical_path in ("typing.Annotated", "typing_extensions.Annotated") -%}
90
90
  {{ render(expression.slice.elements[0], annotations_path) }}
91
91
  {%- elif expression.classname == "ExprAttribute" -%}
92
92
  {%- if annotations_path == "brief" -%}
93
93
  {%- if expression.last.is_enum_value -%}
94
- {{ crossref(expression.last.parent, "brief") }}.value
94
+ {{ crossref(expression.last.parent, "brief", backlink_type) }}.value
95
95
  {%- else -%}
96
96
  {{ render(expression.last, "brief") }}
97
97
  {%- endif -%}
@@ -116,4 +116,4 @@ which is a tree-like structure representing a Python expression.
116
116
  {%- endif -%}
117
117
  {%- endmacro -%}
118
118
 
119
- {{ render(expression, config.annotations_path) }}
119
+ {{ render(expression, config.annotations_path, backlink_type|default("")) }}
@@ -129,6 +129,10 @@ Context:
129
129
  {% endwith %}
130
130
  {% endblock docstring %}
131
131
 
132
+ {% if config.backlinks %}
133
+ <backlinks identifier="{{ html_id }}" handler="python" />
134
+ {% endif %}
135
+
132
136
  {% block source scoped %}
133
137
  {#- Source block.
134
138
 
@@ -97,6 +97,10 @@ Context:
97
97
  {% endwith %}
98
98
  {% endblock docstring %}
99
99
 
100
+ {% if config.backlinks %}
101
+ <backlinks identifier="{{ html_id }}" handler="python" />
102
+ {% endif %}
103
+
100
104
  {% block summary scoped %}
101
105
  {#- Summary block.
102
106
 
@@ -49,7 +49,9 @@ Context:
49
49
  {%- set ns.equal = " = " -%}
50
50
  {%- if config.separate_signature -%}
51
51
  {%- with expression = parameter.annotation -%}
52
- {%- set ns.annotation -%}: {% include "expression"|get_template with context %}{%- endset -%}
52
+ {%- set ns.annotation -%}: {% with backlink_type = "used-by" -%}
53
+ {%- include "expression"|get_template with context -%}
54
+ {%- endwith -%}{%- endset -%}
53
55
  {%- endwith -%}
54
56
  {%- else -%}
55
57
  {%- set ns.annotation = ": " + parameter.annotation|safe -%}
@@ -102,7 +104,7 @@ Context:
102
104
  {%- if ns.default -%}
103
105
  {{ ns.equal }}
104
106
  {%- if config.signature_crossrefs and config.separate_signature -%}
105
- {%- with expression = parameter.default -%}
107
+ {%- with expression = parameter.default, backlink_type = "used-by" -%}
106
108
  {%- include "expression"|get_template with context -%}
107
109
  {%- endwith -%}
108
110
  {%- else -%}
@@ -121,7 +123,9 @@ Context:
121
123
  and function.annotation
122
124
  and not (config.merge_init_into_class and function.name == "__init__" )
123
125
  %} -> {% if config.separate_signature and config.signature_crossrefs -%}
124
- {%- with expression = function.annotation %}{% include "expression"|get_template with context %}{%- endwith -%}
126
+ {%- with expression = function.annotation, backlink_type = "returned-by" -%}
127
+ {%- include "expression"|get_template with context -%}
128
+ {%- endwith -%}
125
129
  {%- else -%}
126
130
  {{ function.annotation|safe }}
127
131
  {%- endif -%}
@@ -7,7 +7,7 @@
7
7
  -#}
8
8
  {% endblock logs %}
9
9
 
10
- {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "attributes") %}
10
+ {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "attributes") | list %}
11
11
  {% with section = obj.attributes
12
12
  |filter_objects(
13
13
  filters=config.filters,
@@ -7,7 +7,7 @@
7
7
  -#}
8
8
  {% endblock logs %}
9
9
 
10
- {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "classes") %}
10
+ {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "classes") | list %}
11
11
  {% with section = obj.classes
12
12
  |filter_objects(
13
13
  filters=config.filters,
@@ -7,7 +7,7 @@
7
7
  -#}
8
8
  {% endblock logs %}
9
9
 
10
- {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "functions") %}
10
+ {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "functions") | list %}
11
11
  {% with section = obj.functions
12
12
  |filter_objects(
13
13
  filters=config.filters,
@@ -7,7 +7,7 @@
7
7
  -#}
8
8
  {% endblock logs %}
9
9
 
10
- {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "modules") %}
10
+ {% if not obj.docstring.parsed | selectattr("kind.value", "eq", "modules") | list %}
11
11
  {% with section = obj.modules
12
12
  |filter_objects(
13
13
  filters=config.filters,
@@ -0,0 +1 @@
1
+ {% extends "_base/backlinks.html.jinja" %}
@@ -41,6 +41,28 @@
41
41
  font-weight: bold;
42
42
  }
43
43
 
44
+ /* Backlinks crumb separator. */
45
+ .doc-backlink-crumb {
46
+ display: inline-flex;
47
+ gap: .2rem;
48
+ white-space: nowrap;
49
+ align-items: center;
50
+ vertical-align: middle;
51
+ }
52
+ .doc-backlink-crumb:not(:first-child)::before {
53
+ background-color: var(--md-default-fg-color--lighter);
54
+ content: "";
55
+ display: inline;
56
+ height: 1rem;
57
+ --md-path-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>');
58
+ -webkit-mask-image: var(--md-path-icon);
59
+ mask-image: var(--md-path-icon);
60
+ width: 1rem;
61
+ }
62
+ .doc-backlink-crumb.last {
63
+ font-weight: bold;
64
+ }
65
+
44
66
  /* Symbols in Navigation and ToC. */
45
67
  :root, :host,
46
68
  [data-md-color-scheme="default"] {
@@ -82,7 +104,8 @@ code.doc-symbol {
82
104
  font-weight: bold;
83
105
  }
84
106
 
85
- code.doc-symbol-parameter {
107
+ code.doc-symbol-parameter,
108
+ a code.doc-symbol-parameter {
86
109
  color: var(--doc-symbol-parameter-fg-color);
87
110
  background-color: var(--doc-symbol-parameter-bg-color);
88
111
  }
@@ -91,7 +114,8 @@ code.doc-symbol-parameter::after {
91
114
  content: "param";
92
115
  }
93
116
 
94
- code.doc-symbol-attribute {
117
+ code.doc-symbol-attribute,
118
+ a code.doc-symbol-attribute {
95
119
  color: var(--doc-symbol-attribute-fg-color);
96
120
  background-color: var(--doc-symbol-attribute-bg-color);
97
121
  }
@@ -100,7 +124,8 @@ code.doc-symbol-attribute::after {
100
124
  content: "attr";
101
125
  }
102
126
 
103
- code.doc-symbol-function {
127
+ code.doc-symbol-function,
128
+ a code.doc-symbol-function {
104
129
  color: var(--doc-symbol-function-fg-color);
105
130
  background-color: var(--doc-symbol-function-bg-color);
106
131
  }
@@ -109,7 +134,8 @@ code.doc-symbol-function::after {
109
134
  content: "func";
110
135
  }
111
136
 
112
- code.doc-symbol-method {
137
+ code.doc-symbol-method,
138
+ a code.doc-symbol-method {
113
139
  color: var(--doc-symbol-method-fg-color);
114
140
  background-color: var(--doc-symbol-method-bg-color);
115
141
  }
@@ -118,7 +144,8 @@ code.doc-symbol-method::after {
118
144
  content: "meth";
119
145
  }
120
146
 
121
- code.doc-symbol-class {
147
+ code.doc-symbol-class,
148
+ a code.doc-symbol-class {
122
149
  color: var(--doc-symbol-class-fg-color);
123
150
  background-color: var(--doc-symbol-class-bg-color);
124
151
  }
@@ -127,7 +154,8 @@ code.doc-symbol-class::after {
127
154
  content: "class";
128
155
  }
129
156
 
130
- code.doc-symbol-module {
157
+ code.doc-symbol-module,
158
+ a code.doc-symbol-module {
131
159
  color: var(--doc-symbol-module-fg-color);
132
160
  background-color: var(--doc-symbol-module-bg-color);
133
161
  }
@@ -32,7 +32,7 @@ Context:
32
32
  <li>
33
33
  <b><code>{{ parameter.name }}</code></b>
34
34
  {% if parameter.annotation %}
35
- {% with expression = parameter.annotation %}
35
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
36
36
  (<code>{% include "expression"|get_template with context %}</code>)
37
37
  {% endwith %}
38
38
  {% endif %}
@@ -32,10 +32,10 @@ Context:
32
32
  <li>
33
33
  <b><code>{{ parameter.name }}</code></b>
34
34
  {% if parameter.annotation %}
35
- {% with expression = parameter.annotation %}
35
+ {% with expression = parameter.annotation, backlink_type = "used-by" %}
36
36
  (<code>{% include "expression"|get_template with context %}</code>
37
37
  {%- if parameter.default %}, {{ lang.t("default:") }}
38
- {% with expression = parameter.default %}
38
+ {% with expression = parameter.default, backlink_type = "used-by" %}
39
39
  <code>{% include "expression"|get_template with context %}</code>
40
40
  {% endwith %}
41
41
  {% endif %})
@@ -31,7 +31,7 @@ Context:
31
31
  {% for raises in section.value %}
32
32
  <li>
33
33
  {% if raises.annotation %}
34
- {% with expression = raises.annotation %}
34
+ {% with expression = raises.annotation, backlink_type = "raised-by" %}
35
35
  <code>{% include "expression"|get_template with context %}</code>
36
36
  {% endwith %}
37
37
  {% endif %}
@@ -32,7 +32,7 @@ Context:
32
32
  <li>
33
33
  {% if receives.name %}<b><code>{{ receives.name }}</code></b>{% endif %}
34
34
  {% if receives.annotation %}
35
- {% with expression = receives.annotation %}
35
+ {% with expression = receives.annotation, backlink_type = "received-by" %}
36
36
  {% if receives.name %}({% endif %}
37
37
  <code>{% include "expression"|get_template with context %}</code>
38
38
  {% if receives.name %}){% endif %}
@@ -32,7 +32,7 @@ Context:
32
32
  <li>
33
33
  {% if returns.name %}<b><code>{{ returns.name }}</code></b>{% endif %}
34
34
  {% if returns.annotation %}
35
- {% with expression = returns.annotation %}
35
+ {% with expression = returns.annotation, backlink_type = "returned-by" %}
36
36
  {% if returns.name %}({% endif %}
37
37
  <code>{% include "expression"|get_template with context %}</code>
38
38
  {% if returns.name %}){% endif %}
@@ -31,7 +31,7 @@ Context:
31
31
  {% for warns in section.value %}
32
32
  <li>
33
33
  {% if warns.annotation %}
34
- {% with expression = warns.annotation %}
34
+ {% with expression = warns.annotation, backlink_type = "emitted-by" %}
35
35
  <code>{% include "expression"|get_template with context %}</code>
36
36
  {% endwith %}
37
37
  {% endif %}
@@ -32,7 +32,7 @@ Context:
32
32
  <li>
33
33
  {% if yields.name %}<b></code>{{ yields.name }}</code></b>{% endif %}
34
34
  {% if yields.annotation %}
35
- {% with expression = yields.annotation %}
35
+ {% with expression = yields.annotation, backlink_type = "yielded-by" %}
36
36
  {% if yields.name %}({% endif %}
37
37
  <code>{% include "expression"|get_template with context %}</code>
38
38
  {% if yields.name %}){% endif %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mkdocstrings-python
3
- Version: 1.16.3
3
+ Version: 1.16.5
4
4
  Summary: A Python handler for mkdocstrings.
5
5
  Author-Email: =?utf-8?q?Timoth=C3=A9e_Mazzucotelli?= <dev@pawamoy.fr>
6
6
  License: ISC
@@ -148,17 +148,18 @@ mkdocstrings_handlers/python/.mypy_cache/3.12/watchdog/observers/polling.data.js
148
148
  mkdocstrings_handlers/python/.mypy_cache/3.12/watchdog/observers/polling.meta.json,sha256=EDv6SusmmK9nmVtgCfInvJ8BlI91GDkqFeYVkybpql0,1941
149
149
  mkdocstrings_handlers/python/.mypy_cache/CACHEDIR.TAG,sha256=8cE6_FVTWMkDOw8fMKqhd_6IvaQPS4okWYQA1UeHatw,190
150
150
  mkdocstrings_handlers/python/__init__.py,sha256=k-0NWvXysr5RqWjtGyCozookveBB-ADZHIhgxvI1px8,128
151
- mkdocstrings_handlers/python/config.py,sha256=YUOP_DTPfvzYDeEweRePjSYE2TAD6HenNf1tifJXN2o,31639
151
+ mkdocstrings_handlers/python/config.py,sha256=pIIo3FQEO8XA8M2P83r4Vxtzq7xLco4QknFPQyh4ba0,31840
152
152
  mkdocstrings_handlers/python/debug.py,sha256=4vqIbCbbz_vcjcFk6jPoF8E1kLig8AQEsQ93ybcjIVc,2894
153
- mkdocstrings_handlers/python/handler.py,sha256=DBYjKnbh0oe8muN8PU5zrhNNEuqk40lIjXX977_cnho,14860
153
+ mkdocstrings_handlers/python/handler.py,sha256=HLn1Zy1r_PyVAnWaltzJTQGF3SFkw5isw-kA913DsbI,14931
154
154
  mkdocstrings_handlers/python/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
- mkdocstrings_handlers/python/rendering.py,sha256=zqJ5E9oSLDw4NJHAl1fngBZIzd5heCqo-WtctakBIfw,23021
155
+ mkdocstrings_handlers/python/rendering.py,sha256=H2mXB5-i_lPng-26Xxj8ZVz2L3uDU_EsGze57qz_B-A,24338
156
156
  mkdocstrings_handlers/python/templates/material/_base/attribute.html,sha256=nn0671f4bE7VqnTs-VQL3SGPACWAxb2uJBRcP2nwYng,427
157
- mkdocstrings_handlers/python/templates/material/_base/attribute.html.jinja,sha256=sbbkQtl5bPm5mmmZ-VCyLtfsOuhSr-FrD2FUSlbK-Zs,4451
157
+ mkdocstrings_handlers/python/templates/material/_base/attribute.html.jinja,sha256=OMRRC_o67v-XMeNw6E6Z6hNLE7NhMxqIVog-UlYLazg,4574
158
+ mkdocstrings_handlers/python/templates/material/_base/backlinks.html.jinja,sha256=FFrvIa-KH-DhT1cpc9HL0ecShR2gUVGs3VT9c1q88z8,467
158
159
  mkdocstrings_handlers/python/templates/material/_base/children.html,sha256=mOafkSlphFQJLWfrYrIMFVRGi2yjdtN6iJh8bPt7uRI,424
159
160
  mkdocstrings_handlers/python/templates/material/_base/children.html.jinja,sha256=Bu5dsIKcf5bX0_VzfSADmHvxXlY6K8wYBvXtuXtKVsU,6391
160
161
  mkdocstrings_handlers/python/templates/material/_base/class.html,sha256=x0M8Wjk7TC9cgnstMoukLVQvxZUEMFjQA0VJQPEAC9Y,415
161
- mkdocstrings_handlers/python/templates/material/_base/class.html.jinja,sha256=HZdvHheL3s5pQYTejXNnPTTM6nYjHFvMLDOgBFxIc7Y,8721
162
+ mkdocstrings_handlers/python/templates/material/_base/class.html.jinja,sha256=lRozA00LPPcwSnO_3X6VB8R0a0l15X7ZwocJAfubWzw,8981
162
163
  mkdocstrings_handlers/python/templates/material/_base/docstring.html,sha256=9gDeMzbEUGfOBklwvriH5HMfcotOcaXUvlgLC9klTi8,427
163
164
  mkdocstrings_handlers/python/templates/material/_base/docstring.html.jinja,sha256=7SMBYzPGNaHoFpIXkREjye_bibXjK-0SMKngY8cmj4A,3129
164
165
  mkdocstrings_handlers/python/templates/material/_base/docstring/admonition.html,sha256=yShTX2BBdYlOGCj-Hb1NIAeWldLGE_toMDIOn1OYdPs,460
@@ -174,23 +175,23 @@ mkdocstrings_handlers/python/templates/material/_base/docstring/functions.html.j
174
175
  mkdocstrings_handlers/python/templates/material/_base/docstring/modules.html,sha256=JWBpk6tJN12tEZVqZ8kK2L_mmk0lkIdWuYYtfw_4dYQ,451
175
176
  mkdocstrings_handlers/python/templates/material/_base/docstring/modules.html.jinja,sha256=UG7K0eaxvolNkQDXrniJQmsOAIPUU0rKnV24CPxVO_M,3168
176
177
  mkdocstrings_handlers/python/templates/material/_base/docstring/other_parameters.html,sha256=yDBXgj-qMDQP3Si-ZjDj-Z0ksRl3BP6YbwHy8fZrmdU,478
177
- mkdocstrings_handlers/python/templates/material/_base/docstring/other_parameters.html.jinja,sha256=d52mHwTsGP2np4SCobwc-R0rWL0GK0mZXnAEkg-7GjM,3976
178
+ mkdocstrings_handlers/python/templates/material/_base/docstring/other_parameters.html.jinja,sha256=jBBgaAG_QvIOWLE1Prh_cimvK71APvQnau5uxvZq0bA,4057
178
179
  mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html,sha256=xKQQydQJst6CJT0nH6RPWDXH92tRH_k1EIiPNoHzI1g,460
179
- mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html.jinja,sha256=JBFjL6ZkAagEU6XklR0DwUuSSMwUTvz_wz7TEIJ3-UE,6852
180
+ mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html.jinja,sha256=AJZK5qGFz7wmQqc7fuaAs0ScR3gYDCwNK1zEI06V_wI,7014
180
181
  mkdocstrings_handlers/python/templates/material/_base/docstring/raises.html,sha256=f4tZCDGQxPeaTMvo95Yipc-t-enuqV42LZ4sKUu4FaM,448
181
- mkdocstrings_handlers/python/templates/material/_base/docstring/raises.html.jinja,sha256=ygJIUa_pgxB9Lvd_klXKl4DMVuwgOC70m-wX8f2grWA,3558
182
+ mkdocstrings_handlers/python/templates/material/_base/docstring/raises.html.jinja,sha256=OTtpZ53Dnrx1CjY_eDbKbpV7B2iY_WuofrFUb1KNbdk,3645
182
183
  mkdocstrings_handlers/python/templates/material/_base/docstring/receives.html,sha256=hz4Yr6SufruNEYPlsyS2G18UgHEhXBlBu15B02pXqtY,454
183
- mkdocstrings_handlers/python/templates/material/_base/docstring/receives.html.jinja,sha256=UxE762NN3S3Q8TcbONkwmco5KebjrhM9dcaX80hmR-A,4651
184
+ mkdocstrings_handlers/python/templates/material/_base/docstring/receives.html.jinja,sha256=Dpwe40wyI1ADtWxARkV1V_9VFpqilz-ltaDgbRCNdLU,4775
184
185
  mkdocstrings_handlers/python/templates/material/_base/docstring/returns.html,sha256=_j3bo51bHgMlQa0Gl1KTOndVnrluSfd_uFIEcWvDI-M,451
185
- mkdocstrings_handlers/python/templates/material/_base/docstring/returns.html.jinja,sha256=SnA-FkYr4xFOYxGHuTTJyBPbZuL7BJxPCjyj7_bPzMk,4615
186
+ mkdocstrings_handlers/python/templates/material/_base/docstring/returns.html.jinja,sha256=yXtxVVHVJX67KxxCrOOdze9homuhL6RCP-4abTiH1G0,4739
186
187
  mkdocstrings_handlers/python/templates/material/_base/docstring/warns.html,sha256=4lkQoVm9QW3eGrBQ2l9tH8TpmvhSN6qPyOp6Pk6WRks,445
187
- mkdocstrings_handlers/python/templates/material/_base/docstring/warns.html.jinja,sha256=0bCEkV4zzxxy-YFBpkvoMd51be-FSg7XFQUacvE9Jo4,3530
188
+ mkdocstrings_handlers/python/templates/material/_base/docstring/warns.html.jinja,sha256=XAujQUPLh0AlFbROof60m5y_8iKiY1cZRSOA5OZc_cg,3620
188
189
  mkdocstrings_handlers/python/templates/material/_base/docstring/yields.html,sha256=-aNSOHi5lvqheUzklSRThN7UeCdsqTHm35CyKi5yaWU,448
189
- mkdocstrings_handlers/python/templates/material/_base/docstring/yields.html.jinja,sha256=2J1tK2lSTUHYOnOnqeX_I_LWMAOh2dZGbIvifKKt46c,4589
190
+ mkdocstrings_handlers/python/templates/material/_base/docstring/yields.html.jinja,sha256=Mei01_ZCARpqcYLsw8Z0XetL0jlbD3jYRIZ6kzrb2hI,4709
190
191
  mkdocstrings_handlers/python/templates/material/_base/expression.html,sha256=JU-ScDWoFk0m6x0Dx50LKN9yW7RzTWj4VYcJYEIQ144,430
191
- mkdocstrings_handlers/python/templates/material/_base/expression.html.jinja,sha256=kfvwxwW6BrHLAEd-h7YOUWMu4lFaOrUEPvt9sD_y0G0,4393
192
+ mkdocstrings_handlers/python/templates/material/_base/expression.html.jinja,sha256=RZX2Wbmhlldvr0H8SB0hFOiHaxY7G7wnKNOhBRoJpJY,4688
192
193
  mkdocstrings_handlers/python/templates/material/_base/function.html,sha256=tFpXIt5sIhjXjTCXhtYZ4cGpbgdbaIdbm8HdP9Pccik,424
193
- mkdocstrings_handlers/python/templates/material/_base/function.html.jinja,sha256=MAlOHqt7GRru5wb2M-gUzHT_6u8N5QgamZdFy-OZUro,5744
194
+ mkdocstrings_handlers/python/templates/material/_base/function.html.jinja,sha256=4S314qy6cZkXB8U7oMeM5ObjSiK3jh22Ubzgpk4D3UU,5867
194
195
  mkdocstrings_handlers/python/templates/material/_base/labels.html,sha256=SJGvRoTYj9AImTRRn-SP4nGAdpfz-ai4gGgHGxMOJK8,418
195
196
  mkdocstrings_handlers/python/templates/material/_base/labels.html.jinja,sha256=mue5CMl2WQpagj3aYqbUiAQX0P72aLCgY3MX_zEpE8s,786
196
197
  mkdocstrings_handlers/python/templates/material/_base/language.html,sha256=Qvw8RvhTvKk3-OobTEOyWsh5yE3WbIWW4meoR4X_5fY,424
@@ -202,21 +203,22 @@ mkdocstrings_handlers/python/templates/material/_base/languages/ja.html.jinja,sh
202
203
  mkdocstrings_handlers/python/templates/material/_base/languages/zh.html,sha256=qpCtwgIj9xjbsPDApJE3W34s-V7Syg_iFeN8zX5kZqY,436
203
204
  mkdocstrings_handlers/python/templates/material/_base/languages/zh.html.jinja,sha256=Zr0o9OJv_NWZ2IHZrQYUpM7U-GCnRNr9y5FVQzIHLxY,1125
204
205
  mkdocstrings_handlers/python/templates/material/_base/module.html,sha256=cEq3DXlXfZ57NAK6CXA7OxtyeffgfUpWVvLW1O1aNzw,418
205
- mkdocstrings_handlers/python/templates/material/_base/module.html.jinja,sha256=-4xwDnFLnmP5pBRAVJiSTXYbnF79sfKRHpKd9TI1sHo,4169
206
+ mkdocstrings_handlers/python/templates/material/_base/module.html.jinja,sha256=1tRur06w72RTicEC88gZqKdVx6Foz62mUBzufaDEBlo,4292
206
207
  mkdocstrings_handlers/python/templates/material/_base/signature.html,sha256=7TcpvSL7n5pbg0Eokbx49vlLbY6YHM6S8o7aFpaxgXU,427
207
- mkdocstrings_handlers/python/templates/material/_base/signature.html.jinja,sha256=L0ZPY4GfNrWzjTJZ09wO5vmdOoFbUXpPUH-VOIckvGU,4954
208
+ mkdocstrings_handlers/python/templates/material/_base/signature.html.jinja,sha256=RY8xflgGAmIqWIbeJ35WHf2CY1fiq2Bz3r3PbHuujFo,5121
208
209
  mkdocstrings_handlers/python/templates/material/_base/summary.html,sha256=2OR2p8zJ5I0mkknX7ZY7qj59orJH4e9HVg0S5DaUUsU,421
209
210
  mkdocstrings_handlers/python/templates/material/_base/summary.html.jinja,sha256=s5rEtPwncirxmPmF-F9LsFBhAay_HEQtHf7cDjh-WnM,730
210
211
  mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html,sha256=CSrl1A7woDmRxgMpYHArnKQGgilSbk8fvXgsx1OzPwU,454
211
- mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html.jinja,sha256=RvIqjTpOJj4rLkj72CJm9zYvQ0Ogd26MA4AXjjQw3kg,758
212
+ mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html.jinja,sha256=1QcvqHWt1OV-XXmCLBrLKPsi1QXy8I75eXkbaI41LgY,765
212
213
  mkdocstrings_handlers/python/templates/material/_base/summary/classes.html,sha256=hhFsCc_4quq7mPWMWKBMas1jNRjSOHoCmbz8gGR1by8,445
213
- mkdocstrings_handlers/python/templates/material/_base/summary/classes.html.jinja,sha256=Iv8U9CTyI3w-036poLjcgeLMpqKaSC4a91rizxZ6US4,743
214
+ mkdocstrings_handlers/python/templates/material/_base/summary/classes.html.jinja,sha256=f2JGctWSljUNZ9I6L_syIcdVrEDeUfs7sBZVTLLldHI,750
214
215
  mkdocstrings_handlers/python/templates/material/_base/summary/functions.html,sha256=gm2x5_dy7KVWxBSZlY7gCjXyC0otT6n0pIpxTvjp8WA,451
215
- mkdocstrings_handlers/python/templates/material/_base/summary/functions.html.jinja,sha256=vloayD3SociyQJOlhLL3b9CNSekTYOyiVaur6zl6a_c,761
216
+ mkdocstrings_handlers/python/templates/material/_base/summary/functions.html.jinja,sha256=OJVwHFwyk2_HHaYi0oIQCKU5zRx2eMi608YdfMPnt9U,768
216
217
  mkdocstrings_handlers/python/templates/material/_base/summary/modules.html,sha256=4aM17FMv-a-h5IawwFtxDHw2AdI6fICyiKtdYckQc6s,445
217
- mkdocstrings_handlers/python/templates/material/_base/summary/modules.html.jinja,sha256=cDhmzUVKsuuVzlWbR376hpME_Sh6KjSfvcT4c6KVkps,737
218
+ mkdocstrings_handlers/python/templates/material/_base/summary/modules.html.jinja,sha256=WqWyIx8yEenQZGYuq2NLiH_mFqs8bTRCDlM9JS2c3zs,744
218
219
  mkdocstrings_handlers/python/templates/material/attribute.html,sha256=HkKz308jpCZj3PffJ5JtZC46rtkNNZ-2bE5zvaQQTRE,43
219
220
  mkdocstrings_handlers/python/templates/material/attribute.html.jinja,sha256=HkKz308jpCZj3PffJ5JtZC46rtkNNZ-2bE5zvaQQTRE,43
221
+ mkdocstrings_handlers/python/templates/material/backlinks.html.jinja,sha256=FVUyYCo5n44JCYp9DRufAtb0RJUQQGnJB-O13wOrkTc,43
220
222
  mkdocstrings_handlers/python/templates/material/children.html,sha256=rUBgwytUT2xB9S1pCHy74o-UyLOIu-fczvj-DoMxbbA,42
221
223
  mkdocstrings_handlers/python/templates/material/children.html.jinja,sha256=rUBgwytUT2xB9S1pCHy74o-UyLOIu-fczvj-DoMxbbA,42
222
224
  mkdocstrings_handlers/python/templates/material/class.html,sha256=Vp8XFvKfvsCZgco87McoyMhtoBgis9VXw-46jtHKk_U,39
@@ -267,7 +269,7 @@ mkdocstrings_handlers/python/templates/material/module.html,sha256=ws59JJTsITCnd
267
269
  mkdocstrings_handlers/python/templates/material/module.html.jinja,sha256=ws59JJTsITCndGTXSUXoQ14BcXsKJswZW24ceJaHGNI,40
268
270
  mkdocstrings_handlers/python/templates/material/signature.html,sha256=EvvFPpG9PEUi25f-_2V0iVXTsUlvC9iTWtgFbJ3YVeI,43
269
271
  mkdocstrings_handlers/python/templates/material/signature.html.jinja,sha256=EvvFPpG9PEUi25f-_2V0iVXTsUlvC9iTWtgFbJ3YVeI,43
270
- mkdocstrings_handlers/python/templates/material/style.css,sha256=Q1fQyKGThnX5L4X2ylMG4GAAjErxGygrUptJDb4PPfQ,3385
272
+ mkdocstrings_handlers/python/templates/material/style.css,sha256=Zs9KDad75ApnOieglrvCu1VVaLgYqDUUrsm2CcFGMeI,4198
271
273
  mkdocstrings_handlers/python/templates/material/summary.html,sha256=Wd7HXzuU0mriz82Riy2PDpRbcMo-7IHrAdBsvxbtKrY,41
272
274
  mkdocstrings_handlers/python/templates/material/summary.html.jinja,sha256=Wd7HXzuU0mriz82Riy2PDpRbcMo-7IHrAdBsvxbtKrY,41
273
275
  mkdocstrings_handlers/python/templates/material/summary/attributes.html,sha256=l3ON8hgvZaihmIpiXTwjDuHD6hp8PuiCdrTvprXYp9k,52
@@ -281,19 +283,19 @@ mkdocstrings_handlers/python/templates/material/summary/modules.html.jinja,sha25
281
283
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/attributes.html,sha256=0c4KoMA2oehvEvNZvOgfvSxTMhVtOSl6R4r1fUoc3DE,460
282
284
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/attributes.html.jinja,sha256=IqMbcL3AvDie7pNCgbueiaLSCGBNjMLl3zIippntQoY,1539
283
285
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/other_parameters.html,sha256=yDBXgj-qMDQP3Si-ZjDj-Z0ksRl3BP6YbwHy8fZrmdU,478
284
- mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/other_parameters.html.jinja,sha256=5OL5dFxI4jeDTeRiWL9txNeABslizrwPG_1lsy8vDOY,1557
286
+ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/other_parameters.html.jinja,sha256=9MAFCgLQIrntVO8mclnTf-V3uBSLdUOx9fxR1YGAWOc,1584
285
287
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/parameters.html,sha256=xKQQydQJst6CJT0nH6RPWDXH92tRH_k1EIiPNoHzI1g,460
286
- mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/parameters.html.jinja,sha256=uwFctvLk_v31nnNAa1T-YOObDDUXpd-2QkhGNaupdrk,1825
288
+ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/parameters.html.jinja,sha256=Nz5wIVhh1AYJXc2fxtz1aMqxcfAarOvYUvvv6CSnc3E,1879
287
289
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/raises.html,sha256=f4tZCDGQxPeaTMvo95Yipc-t-enuqV42LZ4sKUu4FaM,448
288
- mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/raises.html.jinja,sha256=VI8tOYqVA1VMU5qd9XCqcE2AYZfKfks3jd844aX4IQY,1462
290
+ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/raises.html.jinja,sha256=MZP4ignZxk9R0nvvh8zI_6RfLPwROAgA8e9Q3qAkMhg,1491
289
291
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/receives.html,sha256=hz4Yr6SufruNEYPlsyS2G18UgHEhXBlBu15B02pXqtY,454
290
- mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/receives.html.jinja,sha256=0z60-YyKCL0E2yd_J1br6HFi-TPyJnCLGI5m38bt1-s,1685
292
+ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/receives.html.jinja,sha256=U01XUCadUV0WbVp-0qS0YoZFbns7xhSloO3G5s2DzEI,1716
291
293
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/returns.html,sha256=_j3bo51bHgMlQa0Gl1KTOndVnrluSfd_uFIEcWvDI-M,451
292
- mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/returns.html.jinja,sha256=JgI_ieCQR21F9TlSYiPAmfSTtV3Jk9dY8G5gAg-yev8,1662
294
+ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/returns.html.jinja,sha256=jmFTQ-c-JkeGK2G0kids0MOQPtSX74u5qvtaqtsea-w,1693
293
295
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/warns.html,sha256=4lkQoVm9QW3eGrBQ2l9tH8TpmvhSN6qPyOp6Pk6WRks,445
294
- mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/warns.html.jinja,sha256=i2QhuqwjZavfUk4SmTFIHTJw9MkXen1BgVSM4lPIXBg,1454
296
+ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/warns.html.jinja,sha256=bB8gXNrKUGi64WRGjXMr_7hiQl0a6v7mVUu6_DPnCNU,1484
295
297
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/yields.html,sha256=-aNSOHi5lvqheUzklSRThN7UeCdsqTHm35CyKi5yaWU,448
296
- mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/yields.html.jinja,sha256=Iy9kBkoWPqOa-U49G373A2zpZ2ioY4y3dmVCWEsI3Q8,1665
298
+ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/yields.html.jinja,sha256=9vPw5Al3ufqCTHFe5cCKJdcyiPi-U9S8pMBY2DSbTwU,1695
297
299
  mkdocstrings_handlers/python/templates/readthedocs/_base/language.html,sha256=Qvw8RvhTvKk3-OobTEOyWsh5yE3WbIWW4meoR4X_5fY,424
298
300
  mkdocstrings_handlers/python/templates/readthedocs/_base/language.html.jinja,sha256=z91eJaxpxQegKdBpAfxj9-dSjiEzGEaUEALW3LKIBB4,620
299
301
  mkdocstrings_handlers/python/templates/readthedocs/_base/languages/en.html,sha256=E8a7EBeQ1E7HVYzhilVbouqbNJkePhz7amCEJdbRxmQ,436
@@ -327,8 +329,8 @@ mkdocstrings_handlers/python/templates/readthedocs/languages/ja.html.jinja,sha25
327
329
  mkdocstrings_handlers/python/templates/readthedocs/languages/zh.html,sha256=OuvrkorxuL0gKZNYneann1bwd1Z2i5bBY7SbC496HDw,46
328
330
  mkdocstrings_handlers/python/templates/readthedocs/languages/zh.html.jinja,sha256=OuvrkorxuL0gKZNYneann1bwd1Z2i5bBY7SbC496HDw,46
329
331
  mkdocstrings_handlers/python/templates/readthedocs/style.css,sha256=Ds8vF1rSxc2B0c4P10osx4cqXHWMntcSCxmRfX-nfzw,971
330
- mkdocstrings_python-1.16.3.dist-info/METADATA,sha256=svj0uB9ijF1SrT_lnqTls9PHw8i1lWP__e90CUDWYrA,5572
331
- mkdocstrings_python-1.16.3.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
332
- mkdocstrings_python-1.16.3.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
333
- mkdocstrings_python-1.16.3.dist-info/licenses/LICENSE,sha256=JGb4pdPEM8TTjjhr-uNCO7oXkiVrwG5Pz0JamcjNF_s,754
334
- mkdocstrings_python-1.16.3.dist-info/RECORD,,
332
+ mkdocstrings_python-1.16.5.dist-info/METADATA,sha256=T08VONc1cJ3wauU83ASAG8qXmAPpUtcWNIMXIrTpAb8,5572
333
+ mkdocstrings_python-1.16.5.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
334
+ mkdocstrings_python-1.16.5.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
335
+ mkdocstrings_python-1.16.5.dist-info/licenses/LICENSE,sha256=JGb4pdPEM8TTjjhr-uNCO7oXkiVrwG5Pz0JamcjNF_s,754
336
+ mkdocstrings_python-1.16.5.dist-info/RECORD,,