mkdocstrings-python 1.11.0__py3-none-any.whl → 1.12.0__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 (20) hide show
  1. mkdocstrings_handlers/python/handler.py +15 -3
  2. mkdocstrings_handlers/python/rendering.py +93 -68
  3. mkdocstrings_handlers/python/templates/material/_base/class.html.jinja +12 -2
  4. mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html.jinja +43 -3
  5. mkdocstrings_handlers/python/templates/material/_base/expression.html.jinja +31 -3
  6. mkdocstrings_handlers/python/templates/material/_base/function.html.jinja +11 -1
  7. mkdocstrings_handlers/python/templates/material/_base/module.html.jinja +8 -0
  8. mkdocstrings_handlers/python/templates/material/_base/signature.html.jinja +43 -4
  9. mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html.jinja +13 -0
  10. mkdocstrings_handlers/python/templates/material/_base/summary/classes.html.jinja +13 -0
  11. mkdocstrings_handlers/python/templates/material/_base/summary/functions.html.jinja +13 -0
  12. mkdocstrings_handlers/python/templates/material/_base/summary/modules.html.jinja +13 -0
  13. mkdocstrings_handlers/python/templates/material/_base/summary.html.jinja +18 -0
  14. mkdocstrings_handlers/python/templates/material/style.css +25 -1
  15. mkdocstrings_handlers/python/templates/readthedocs/_base/language.html.jinja +5 -5
  16. {mkdocstrings_python-1.11.0.dist-info → mkdocstrings_python-1.12.0.dist-info}/METADATA +4 -3
  17. {mkdocstrings_python-1.11.0.dist-info → mkdocstrings_python-1.12.0.dist-info}/RECORD +20 -19
  18. {mkdocstrings_python-1.11.0.dist-info → mkdocstrings_python-1.12.0.dist-info}/WHEEL +1 -1
  19. mkdocstrings_python-1.12.0.dist-info/entry_points.txt +4 -0
  20. {mkdocstrings_python-1.11.0.dist-info → mkdocstrings_python-1.12.0.dist-info}/licenses/LICENSE +0 -0
@@ -10,7 +10,7 @@ import sys
10
10
  from collections import ChainMap
11
11
  from contextlib import suppress
12
12
  from pathlib import Path
13
- from typing import TYPE_CHECKING, Any, BinaryIO, ClassVar, Iterator, Mapping, Sequence
13
+ from typing import TYPE_CHECKING, Any, BinaryIO, ClassVar
14
14
 
15
15
  from griffe import (
16
16
  AliasResolutionError,
@@ -29,6 +29,8 @@ from mkdocstrings.loggers import get_logger
29
29
  from mkdocstrings_handlers.python import rendering
30
30
 
31
31
  if TYPE_CHECKING:
32
+ from collections.abc import Iterator, Mapping, Sequence
33
+
32
34
  from markdown import Markdown
33
35
 
34
36
 
@@ -85,6 +87,8 @@ class PythonHandler(BaseHandler):
85
87
  "separate_signature": False,
86
88
  "line_length": 60,
87
89
  "merge_init_into_class": False,
90
+ "relative_crossrefs": False,
91
+ "scoped_crossrefs": False,
88
92
  "show_docstring_attributes": True,
89
93
  "show_docstring_functions": True,
90
94
  "show_docstring_classes": True,
@@ -100,6 +104,7 @@ class PythonHandler(BaseHandler):
100
104
  "show_docstring_yields": True,
101
105
  "show_source": True,
102
106
  "show_bases": True,
107
+ "show_inheritance_diagram": False,
103
108
  "show_submodules": False,
104
109
  "group_by_category": True,
105
110
  "heading_level": 2,
@@ -114,6 +119,8 @@ class PythonHandler(BaseHandler):
114
119
  "summary": False,
115
120
  "show_labels": True,
116
121
  "unwrap_annotated": False,
122
+ "parameter_headings": False,
123
+ "modernize_annotations": False,
117
124
  }
118
125
  """Default handler configuration.
119
126
 
@@ -121,6 +128,7 @@ class PythonHandler(BaseHandler):
121
128
  find_stubs_package (bool): Whether to load stubs package (package-stubs) when extracting docstrings. Default `False`.
122
129
  allow_inspection (bool): Whether to allow inspecting modules when visiting them is not possible. Default: `True`.
123
130
  show_bases (bool): Show the base classes of a class. Default: `True`.
131
+ show_inheritance_diagram (bool): Show the inheritance diagram of a class using Mermaid. Default: `False`.
124
132
  show_source (bool): Show the source code of this object. Default: `True`.
125
133
  preload_modules (list[str] | None): Pre-load modules that are
126
134
  not specified directly in autodoc instructions (`::: identifier`).
@@ -134,6 +142,7 @@ class PythonHandler(BaseHandler):
134
142
 
135
143
  Attributes: Headings options:
136
144
  heading_level (int): The initial heading level to use. Default: `2`.
145
+ parameter_headings (bool): Whether to render headings for parameters (therefore showing parameters in the ToC). Default: `False`.
137
146
  show_root_heading (bool): Show the heading of the object at the root of the documentation tree
138
147
  (i.e. the object referenced by the identifier after `:::`). Default: `False`.
139
148
  show_root_toc_entry (bool): If the root heading is not shown, at least add a ToC entry for it. Default: `True`.
@@ -168,6 +177,8 @@ class PythonHandler(BaseHandler):
168
177
  docstring_options (dict): The options for the docstring parser. See [docstring parsers](https://mkdocstrings.github.io/griffe/reference/docstrings/) and their options in Griffe docs.
169
178
  docstring_section_style (str): The style used to render docstring sections. Options: `table`, `list`, `spacy`. Default: `"table"`.
170
179
  merge_init_into_class (bool): Whether to merge the `__init__` method into the class' signature and docstring. Default: `False`.
180
+ relative_crossrefs (bool): Whether to enable the relative crossref syntax. Default: `False`.
181
+ scoped_crossrefs (bool): Whether to enable the scoped crossref ability. Default: `False`.
171
182
  show_if_no_docstring (bool): Show the object heading even if it has no docstring or children with docstrings. Default: `False`.
172
183
  show_docstring_attributes (bool): Whether to display the "Attributes" section in the object's docstring. Default: `True`.
173
184
  show_docstring_functions (bool): Whether to display the "Functions" or "Methods" sections in the object's docstring. Default: `True`.
@@ -192,6 +203,7 @@ class PythonHandler(BaseHandler):
192
203
  separate_signature (bool): Whether to put the whole signature in a code block below the heading.
193
204
  If Black is installed, the signature is also formatted using it. Default: `False`.
194
205
  unwrap_annotated (bool): Whether to unwrap `Annotated` types to show only the type without the annotations. Default: `False`.
206
+ modernize_annotations (bool): Whether to modernize annotations, for example `Optional[str]` into `str | None`. Default: `False`.
195
207
  """
196
208
 
197
209
  def __init__(
@@ -266,7 +278,7 @@ class PythonHandler(BaseHandler):
266
278
  ) -> Iterator[tuple[str, str]]:
267
279
  """Yield items and their URLs from an inventory file streamed from `in_file`.
268
280
 
269
- This implements mkdocstrings' `load_inventory` "protocol" (see [`mkdocstrings.plugin`][mkdocstrings.plugin]).
281
+ This implements mkdocstrings' `load_inventory` "protocol" (see [`mkdocstrings.plugin`][]).
270
282
 
271
283
  Arguments:
272
284
  in_file: The binary file-like object to read the inventory from.
@@ -420,7 +432,7 @@ class PythonHandler(BaseHandler):
420
432
  self.env.filters["format_signature"] = rendering.do_format_signature
421
433
  self.env.filters["format_attribute"] = rendering.do_format_attribute
422
434
  self.env.filters["filter_objects"] = rendering.do_filter_objects
423
- self.env.filters["stash_crossref"] = lambda ref, length: ref
435
+ self.env.filters["stash_crossref"] = rendering.do_stash_crossref
424
436
  self.env.filters["get_template"] = rendering.do_get_template
425
437
  self.env.filters["as_attributes_section"] = rendering.do_as_attributes_section
426
438
  self.env.filters["as_functions_section"] = rendering.do_as_functions_section
@@ -8,12 +8,17 @@ import re
8
8
  import string
9
9
  import sys
10
10
  import warnings
11
- from functools import lru_cache, partial
11
+ from functools import lru_cache
12
12
  from pathlib import Path
13
- from typing import TYPE_CHECKING, Any, Callable, Match, Pattern, Sequence
13
+ from re import Match, Pattern
14
+ from typing import TYPE_CHECKING, Any, Callable, ClassVar
14
15
 
15
16
  from griffe import (
16
17
  Alias,
18
+ DocstringAttribute,
19
+ DocstringClass,
20
+ DocstringFunction,
21
+ DocstringModule,
17
22
  DocstringSectionAttributes,
18
23
  DocstringSectionClasses,
19
24
  DocstringSectionFunctions,
@@ -26,6 +31,8 @@ from mkdocs_autorefs.references import AutorefsHookInterface
26
31
  from mkdocstrings.loggers import get_logger
27
32
 
28
33
  if TYPE_CHECKING:
34
+ from collections.abc import Sequence
35
+
29
36
  from griffe import Attribute, Class, Function, Module
30
37
  from jinja2 import Environment, Template
31
38
  from jinja2.runtime import Context
@@ -80,24 +87,26 @@ def do_format_code(code: str, line_length: int) -> str:
80
87
  return formatter(code, line_length)
81
88
 
82
89
 
83
- _stash_key_alphabet = string.ascii_letters + string.digits
84
-
90
+ class _StashCrossRefFilter:
91
+ stash: ClassVar[dict[str, str]] = {}
85
92
 
86
- def _gen_key(length: int) -> str:
87
- return "_" + "".join(random.choice(_stash_key_alphabet) for _ in range(max(1, length - 1))) # noqa: S311
93
+ @staticmethod
94
+ def _gen_key(length: int) -> str:
95
+ return "_" + "".join(random.choice(string.ascii_letters + string.digits) for _ in range(max(1, length - 1))) # noqa: S311
88
96
 
97
+ def _gen_stash_key(self, length: int) -> str:
98
+ key = self._gen_key(length)
99
+ while key in self.stash:
100
+ key = self._gen_key(length)
101
+ return key
89
102
 
90
- def _gen_stash_key(stash: dict[str, str], length: int) -> str:
91
- key = _gen_key(length)
92
- while key in stash:
93
- key = _gen_key(length)
94
- return key
103
+ def __call__(self, crossref: str, *, length: int) -> str:
104
+ key = self._gen_stash_key(length)
105
+ self.stash[key] = crossref
106
+ return key
95
107
 
96
108
 
97
- def _stash_crossref(stash: dict[str, str], crossref: str, *, length: int) -> str:
98
- key = _gen_stash_key(stash, length)
99
- stash[key] = crossref
100
- return key
109
+ do_stash_crossref = _StashCrossRefFilter()
101
110
 
102
111
 
103
112
  def _format_signature(name: Markup, signature: str, line_length: int) -> str:
@@ -126,7 +135,7 @@ def do_format_signature(
126
135
  line_length: int,
127
136
  *,
128
137
  annotations: bool | None = None,
129
- crossrefs: bool = False,
138
+ crossrefs: bool = False, # noqa: ARG001
130
139
  ) -> str:
131
140
  """Format a signature using Black.
132
141
 
@@ -144,12 +153,6 @@ def do_format_signature(
144
153
  env = context.environment
145
154
  # TODO: Stop using `do_get_template` when `*.html` templates are removed.
146
155
  template = env.get_template(do_get_template(env, "signature"))
147
- config_annotations = context.parent["config"]["show_signature_annotations"]
148
- old_stash_ref_filter = env.filters["stash_crossref"]
149
-
150
- stash: dict[str, str] = {}
151
- if (annotations or config_annotations) and crossrefs:
152
- env.filters["stash_crossref"] = partial(_stash_crossref, stash)
153
156
 
154
157
  if annotations is None:
155
158
  new_context = context.parent
@@ -157,11 +160,8 @@ def do_format_signature(
157
160
  new_context = dict(context.parent)
158
161
  new_context["config"] = dict(new_context["config"])
159
162
  new_context["config"]["show_signature_annotations"] = annotations
160
- try:
161
- signature = template.render(new_context, function=function, signature=True)
162
- finally:
163
- env.filters["stash_crossref"] = old_stash_ref_filter
164
163
 
164
+ signature = template.render(new_context, function=function, signature=True)
165
165
  signature = _format_signature(callable_path, signature, line_length)
166
166
  signature = str(
167
167
  env.filters["highlight"](
@@ -181,9 +181,10 @@ def do_format_signature(
181
181
  if signature.find('class="nf"') == -1:
182
182
  signature = signature.replace('class="n"', 'class="nf"', 1)
183
183
 
184
- if stash:
184
+ if stash := env.filters["stash_crossref"].stash:
185
185
  for key, value in stash.items():
186
186
  signature = re.sub(rf"\b{key}\b", value, signature)
187
+ stash.clear()
187
188
 
188
189
  return signature
189
190
 
@@ -195,7 +196,7 @@ def do_format_attribute(
195
196
  attribute: Attribute,
196
197
  line_length: int,
197
198
  *,
198
- crossrefs: bool = False,
199
+ crossrefs: bool = False, # noqa: ARG001
199
200
  ) -> str:
200
201
  """Format an attribute using Black.
201
202
 
@@ -213,23 +214,14 @@ def do_format_attribute(
213
214
  # TODO: Stop using `do_get_template` when `*.html` templates are removed.
214
215
  template = env.get_template(do_get_template(env, "expression"))
215
216
  annotations = context.parent["config"]["show_signature_annotations"]
216
- separate_signature = context.parent["config"]["separate_signature"]
217
- old_stash_ref_filter = env.filters["stash_crossref"]
218
217
 
219
- stash: dict[str, str] = {}
220
- if separate_signature and crossrefs:
221
- env.filters["stash_crossref"] = partial(_stash_crossref, stash)
222
-
223
- try:
224
- signature = str(attribute_path).strip()
225
- if annotations and attribute.annotation:
226
- annotation = template.render(context.parent, expression=attribute.annotation, signature=True)
227
- signature += f": {annotation}"
228
- if attribute.value:
229
- value = template.render(context.parent, expression=attribute.value, signature=True)
230
- signature += f" = {value}"
231
- finally:
232
- env.filters["stash_crossref"] = old_stash_ref_filter
218
+ signature = str(attribute_path).strip()
219
+ if annotations and attribute.annotation:
220
+ annotation = template.render(context.parent, expression=attribute.annotation, signature=True)
221
+ signature += f": {annotation}"
222
+ if attribute.value:
223
+ value = template.render(context.parent, expression=attribute.value, signature=True)
224
+ signature += f" = {value}"
233
225
 
234
226
  signature = do_format_code(signature, line_length)
235
227
  signature = str(
@@ -241,9 +233,10 @@ def do_format_attribute(
241
233
  ),
242
234
  )
243
235
 
244
- if stash:
236
+ if stash := env.filters["stash_crossref"].stash:
245
237
  for key, value in stash.items():
246
238
  signature = re.sub(rf"\b{key}\b", value, signature)
239
+ stash.clear()
247
240
 
248
241
  return signature
249
242
 
@@ -477,16 +470,7 @@ def do_get_template(env: Environment, obj: str | Object) -> str | Template:
477
470
  template = env.get_template(f"{name}.html")
478
471
  except TemplateNotFound:
479
472
  return f"{name}.html.jinja"
480
- # TODO: Remove once support for Python 3.8 is dropped.
481
- if sys.version_info < (3, 9):
482
- try:
483
- Path(template.filename).relative_to(Path(__file__).parent) # type: ignore[arg-type]
484
- except ValueError:
485
- our_template = False
486
- else:
487
- our_template = True
488
- else:
489
- our_template = Path(template.filename).is_relative_to(Path(__file__).parent) # type: ignore[arg-type]
473
+ our_template = Path(template.filename).is_relative_to(Path(__file__).parent) # type: ignore[arg-type]
490
474
  if our_template:
491
475
  return f"{name}.html.jinja"
492
476
  # TODO: Switch to a warning log after some time.
@@ -501,9 +485,9 @@ def do_get_template(env: Environment, obj: str | Object) -> str | Template:
501
485
  @pass_context
502
486
  def do_as_attributes_section(
503
487
  context: Context, # noqa: ARG001
504
- attributes: Sequence[Attribute], # noqa: ARG001
488
+ attributes: Sequence[Attribute],
505
489
  *,
506
- check_public: bool = True, # noqa: ARG001
490
+ check_public: bool = True,
507
491
  ) -> DocstringSectionAttributes:
508
492
  """Build an attributes section from a list of attributes.
509
493
 
@@ -514,15 +498,26 @@ def do_as_attributes_section(
514
498
  Returns:
515
499
  An attributes docstring section.
516
500
  """
517
- return DocstringSectionAttributes([])
501
+ return DocstringSectionAttributes(
502
+ [
503
+ DocstringAttribute(
504
+ name=attribute.name,
505
+ description=attribute.docstring.value.split("\n", 1)[0] if attribute.docstring else "",
506
+ annotation=attribute.annotation,
507
+ value=attribute.value, # type: ignore[arg-type]
508
+ )
509
+ for attribute in attributes
510
+ if not check_public or attribute.is_public
511
+ ],
512
+ )
518
513
 
519
514
 
520
515
  @pass_context
521
516
  def do_as_functions_section(
522
- context: Context, # noqa: ARG001
523
- functions: Sequence[Function], # noqa: ARG001
517
+ context: Context,
518
+ functions: Sequence[Function],
524
519
  *,
525
- check_public: bool = True, # noqa: ARG001
520
+ check_public: bool = True,
526
521
  ) -> DocstringSectionFunctions:
527
522
  """Build a functions section from a list of functions.
528
523
 
@@ -533,15 +528,25 @@ def do_as_functions_section(
533
528
  Returns:
534
529
  A functions docstring section.
535
530
  """
536
- return DocstringSectionFunctions([])
531
+ keep_init_method = not context.parent["config"]["merge_init_into_class"]
532
+ return DocstringSectionFunctions(
533
+ [
534
+ DocstringFunction(
535
+ name=function.name,
536
+ description=function.docstring.value.split("\n", 1)[0] if function.docstring else "",
537
+ )
538
+ for function in functions
539
+ if (not check_public or function.is_public) and (function.name != "__init__" or keep_init_method)
540
+ ],
541
+ )
537
542
 
538
543
 
539
544
  @pass_context
540
545
  def do_as_classes_section(
541
546
  context: Context, # noqa: ARG001
542
- classes: Sequence[Class], # noqa: ARG001
547
+ classes: Sequence[Class],
543
548
  *,
544
- check_public: bool = True, # noqa: ARG001
549
+ check_public: bool = True,
545
550
  ) -> DocstringSectionClasses:
546
551
  """Build a classes section from a list of classes.
547
552
 
@@ -552,15 +557,24 @@ def do_as_classes_section(
552
557
  Returns:
553
558
  A classes docstring section.
554
559
  """
555
- return DocstringSectionClasses([])
560
+ return DocstringSectionClasses(
561
+ [
562
+ DocstringClass(
563
+ name=cls.name,
564
+ description=cls.docstring.value.split("\n", 1)[0] if cls.docstring else "",
565
+ )
566
+ for cls in classes
567
+ if not check_public or cls.is_public
568
+ ],
569
+ )
556
570
 
557
571
 
558
572
  @pass_context
559
573
  def do_as_modules_section(
560
574
  context: Context, # noqa: ARG001
561
- modules: Sequence[Module], # noqa: ARG001
575
+ modules: Sequence[Module],
562
576
  *,
563
- check_public: bool = True, # noqa: ARG001
577
+ check_public: bool = True,
564
578
  ) -> DocstringSectionModules:
565
579
  """Build a modules section from a list of modules.
566
580
 
@@ -571,7 +585,16 @@ def do_as_modules_section(
571
585
  Returns:
572
586
  A modules docstring section.
573
587
  """
574
- return DocstringSectionModules([])
588
+ return DocstringSectionModules(
589
+ [
590
+ DocstringModule(
591
+ name=module.name,
592
+ description=module.docstring.value.split("\n", 1)[0] if module.docstring else "",
593
+ )
594
+ for module in modules
595
+ if not check_public or module
596
+ ],
597
+ )
575
598
 
576
599
 
577
600
  class AutorefsHook(AutorefsHookInterface):
@@ -589,7 +612,9 @@ class AutorefsHook(AutorefsHookInterface):
589
612
  config: The configuration dictionary.
590
613
  """
591
614
  self.current_object = current_object
615
+ """The current object being rendered."""
592
616
  self.config = config
617
+ """The configuration options."""
593
618
 
594
619
  def expand_identifier(self, identifier: str) -> str:
595
620
  """Expand an identifier.
@@ -133,13 +133,23 @@ Context:
133
133
  {% endwith %}
134
134
  {% if config.merge_init_into_class %}
135
135
  {% if "__init__" in class.all_members and class.all_members["__init__"].has_docstring %}
136
- {% with docstring_sections = class.all_members["__init__"].docstring.parsed %}
137
- {% include "docstring"|get_template with context %}
136
+ {% with function = class.all_members["__init__"] %}
137
+ {% with obj = function, docstring_sections = function.docstring.parsed %}
138
+ {% include "docstring"|get_template with context %}
139
+ {% endwith %}
138
140
  {% endwith %}
139
141
  {% endif %}
140
142
  {% endif %}
141
143
  {% endblock docstring %}
142
144
 
145
+ {% block summary scoped %}
146
+ {#- Summary block.
147
+
148
+ This block renders auto-summaries for classes, methods, and attributes.
149
+ -#}
150
+ {% include "summary"|get_template with context %}
151
+ {% endblock summary %}
152
+
143
153
  {% block source scoped %}
144
154
  {#- Source block.
145
155
 
@@ -34,7 +34,21 @@ Context:
34
34
  <tbody>
35
35
  {% for parameter in section.value %}
36
36
  <tr class="doc-section-item">
37
- <td><code>{{ parameter.name }}</code></td>
37
+ <td>
38
+ {% if config.parameter_headings %}
39
+ {% filter heading(
40
+ heading_level + 1,
41
+ role="param",
42
+ id=html_id ~ "(" ~ parameter.name ~ ")",
43
+ class="doc doc-heading doc-heading-parameter",
44
+ toc_label=('<code class="doc-symbol doc-symbol-toc doc-symbol-parameter"></code>&nbsp;'|safe if config.show_symbol_type_toc else '') + parameter.name,
45
+ ) %}
46
+ <code>{{ parameter.name }}</code>
47
+ {% endfilter %}
48
+ {% else %}
49
+ <code>{{ parameter.name }}</code>
50
+ {% endif %}
51
+ </td>
38
52
  <td>
39
53
  {% if parameter.annotation %}
40
54
  {% with expression = parameter.annotation %}
@@ -68,7 +82,19 @@ Context:
68
82
  <ul>
69
83
  {% for parameter in section.value %}
70
84
  <li class="doc-section-item field-body">
71
- <b><code>{{ parameter.name }}</code></b>
85
+ {% if config.parameter_headings %}
86
+ {% filter heading(
87
+ heading_level + 1,
88
+ role="param",
89
+ id=html_id ~ "(" ~ parameter.name ~ ")",
90
+ class="doc doc-heading doc-heading-parameter",
91
+ toc_label=('<code class="doc-symbol doc-symbol-toc doc-symbol-parameter"></code>&nbsp;'|safe if config.show_symbol_type_toc else '') + parameter.name,
92
+ ) %}
93
+ <b><code>{{ parameter.name }}</code></b>
94
+ {% endfilter %}
95
+ {% else %}
96
+ <b><code>{{ parameter.name }}</code></b>
97
+ {% endif %}
72
98
  {% if parameter.annotation %}
73
99
  {% with expression = parameter.annotation %}
74
100
  (<code>{% include "expression"|get_template with context %}</code>
@@ -100,7 +126,21 @@ Context:
100
126
  <tbody>
101
127
  {% for parameter in section.value %}
102
128
  <tr class="doc-section-item">
103
- <td><code>{{ parameter.name }}</code></td>
129
+ <td>
130
+ {% if config.parameter_headings %}
131
+ {% filter heading(
132
+ heading_level + 1,
133
+ role="param",
134
+ id=html_id ~ "(" ~ parameter.name ~ ")",
135
+ class="doc doc-heading doc-heading-parameter",
136
+ toc_label=('<code class="doc-symbol doc-symbol-toc doc-symbol-parameter"></code>&nbsp;'|safe if config.show_symbol_type_toc else '') + parameter.name,
137
+ ) %}
138
+ <code>{{ parameter.name }}</code>
139
+ {% endfilter %}
140
+ {% else %}
141
+ <code>{{ parameter.name }}</code>
142
+ {% endif %}
143
+ </td>
104
144
  <td class="doc-param-details">
105
145
  <div class="doc-md-description">
106
146
  {{ parameter.description|convert_markdown(heading_level, html_id, autoref_hook=autoref_hook) }}
@@ -32,10 +32,14 @@ which is a tree-like structure representing a Python expression.
32
32
  {%- set annotation = full -%}
33
33
  {%- endif -%}
34
34
  {%- for title, path in annotation|split_path(full) -%}
35
- {%- if not signature or config.signature_crossrefs -%}
36
- {%- filter stash_crossref(length=title|length) -%}
35
+ {%- if config.signature_crossrefs -%}
36
+ {%- if signature -%}
37
+ {%- filter stash_crossref(length=title|length) -%}
38
+ <autoref identifier="{{ path }}" optional{% if title != path %} hover{% endif %}>{{ title }}</autoref>
39
+ {%- endfilter -%}
40
+ {%- else -%}
37
41
  <autoref identifier="{{ path }}" optional{% if title != path %} hover{% endif %}>{{ title }}</autoref>
38
- {%- endfilter -%}
42
+ {%- endif -%}
39
43
  {%- else -%}
40
44
  {{ title }}
41
45
  {%- endif -%}
@@ -44,6 +48,28 @@ which is a tree-like structure representing a Python expression.
44
48
  {%- endwith -%}
45
49
  {%- endmacro -%}
46
50
 
51
+ {%- macro param_crossref(expression) -%}
52
+ {#- Render a cross-reference to a parameter heading.
53
+
54
+ Parameters:
55
+ expression (griffe.expressions.Expr): The expression to render.
56
+
57
+ Returns:
58
+ The autorefs cross-reference, or the parameter name.
59
+ -#}
60
+ {%- if config.signature_crossrefs -%}
61
+ {%- if signature -%}
62
+ {%- filter stash_crossref(length=expression.name|length) -%}
63
+ <autoref identifier="{{ expression.canonical_path }}" optional hover>{{ expression.name }}</autoref>
64
+ {%- endfilter -%}
65
+ {%- else -%}
66
+ <autoref identifier="{{ expression.canonical_path }}" optional hover>{{ expression.name }}</autoref>
67
+ {%- endif -%}
68
+ {%- else -%}
69
+ {{ expression.name }}
70
+ {%- endif -%}
71
+ {%- endmacro -%}
72
+
47
73
  {%- macro render(expression, annotations_path) -%}
48
74
  {#- Render an expression.
49
75
 
@@ -79,6 +105,8 @@ which is a tree-like structure representing a Python expression.
79
105
  {{ render(element, annotations_path) }}
80
106
  {%- endfor -%}
81
107
  {%- endif -%}
108
+ {%- elif expression.classname == "ExprKeyword" -%}
109
+ {{ param_crossref(expression) }}={{ render(expression.value, annotations_path) }}
82
110
  {%- else -%}
83
111
  {%- for element in expression -%}
84
112
  {{ render(element, annotations_path) }}
@@ -77,8 +77,18 @@ Context:
77
77
  {% block signature scoped %}
78
78
  {#- Signature block.
79
79
 
80
- This block renders the signature for the function.
80
+ This block renders the signature for the function,
81
+ as well as its overloaded signatures if any.
81
82
  -#}
83
+ {% if function.overloads %}
84
+ <div class="doc-overloads">
85
+ {% for overload in function.overloads %}
86
+ {% filter format_signature(overload, config.line_length, annotations=True, crossrefs=config.signature_crossrefs) %}
87
+ {{ overload.name }}
88
+ {% endfilter %}
89
+ {% endfor %}
90
+ </div>
91
+ {% endif %}
82
92
  {% if config.separate_signature %}
83
93
  {% filter format_signature(function, config.line_length, crossrefs=config.signature_crossrefs) %}
84
94
  {{ function.name }}
@@ -97,6 +97,14 @@ Context:
97
97
  {% endwith %}
98
98
  {% endblock docstring %}
99
99
 
100
+ {% block summary scoped %}
101
+ {#- Summary block.
102
+
103
+ This block renders auto-summaries for classes, methods, and attributes.
104
+ -#}
105
+ {% include "summary"|get_template with context %}
106
+ {% endblock summary %}
107
+
100
108
  {% block children scoped %}
101
109
  {#- Children block.
102
110
 
@@ -25,6 +25,7 @@ Context:
25
25
  render_kw_only_separator=True,
26
26
  annotation="",
27
27
  equal="=",
28
+ default=False,
28
29
  ) -%}
29
30
 
30
31
  (
@@ -60,7 +61,9 @@ Context:
60
61
 
61
62
  {#- Prepare default value. -#}
62
63
  {%- if parameter.default is not none and parameter.kind.value != "variadic positional" and parameter.kind.value != "variadic keyword" -%}
63
- {%- set default = ns.equal + parameter.default|safe -%}
64
+ {%- set ns.default = True -%}
65
+ {%- else -%}
66
+ {%- set ns.default = False -%}
64
67
  {%- endif -%}
65
68
 
66
69
  {#- TODO: Move inside kind handling above? -#}
@@ -68,9 +71,45 @@ Context:
68
71
  {%- set ns.render_kw_only_separator = False -%}
69
72
  {%- endif -%}
70
73
 
71
- {#- Render name, annotation and default. -#}
72
- {% if parameter.kind.value == "variadic positional" %}*{% elif parameter.kind.value == "variadic keyword" %}**{% endif -%}
73
- {{ parameter.name }}{{ ns.annotation }}{{ default }}
74
+ {#- Prepare name. -#}
75
+ {%- set param_name -%}
76
+ {%- if parameter.kind.value == "variadic positional" -%}
77
+ *
78
+ {%- elif parameter.kind.value == "variadic keyword" -%}
79
+ **
80
+ {%- endif -%}
81
+ {{ parameter.name }}
82
+ {%- endset -%}
83
+
84
+ {#- Render parameter name with optional cross-reference to its heading. -#}
85
+ {%- if config.separate_signature and config.parameter_headings and config.signature_crossrefs -%}
86
+ {%- filter stash_crossref(length=param_name|length) -%}
87
+ {%- with func_path = function.path -%}
88
+ {%- if config.merge_init_into_class and func_path.endswith(".__init__") -%}
89
+ {%- set func_path = func_path[:-9] -%}
90
+ {%- endif -%}
91
+ <autoref identifier="{{ func_path }}({{ param_name }})" optional>{{ param_name }}</autoref>
92
+ {%- endwith -%}
93
+ {%- endfilter -%}
94
+ {%- else -%}
95
+ {{ param_name }}
96
+ {%- endif -%}
97
+
98
+ {#- Render parameter annotation. -#}
99
+ {{ ns.annotation }}
100
+
101
+ {#- Render parameter default value. -#}
102
+ {%- if ns.default -%}
103
+ {{ ns.equal }}
104
+ {%- if config.signature_crossrefs and config.separate_signature -%}
105
+ {%- with expression = parameter.default -%}
106
+ {%- include "expression"|get_template with context -%}
107
+ {%- endwith -%}
108
+ {%- else -%}
109
+ {{ parameter.default }}
110
+ {%- endif -%}
111
+ {%- endif -%}
112
+
74
113
  {%- if not loop.last %}, {% endif -%}
75
114
 
76
115
  {%- endif -%}
@@ -6,3 +6,16 @@
6
6
  This block can be used to log debug messages, deprecation messages, warnings, etc.
7
7
  -#}
8
8
  {% endblock logs %}
9
+
10
+ {% with section = obj.attributes
11
+ |filter_objects(
12
+ filters=config.filters,
13
+ members_list=members_list,
14
+ inherited_members=config.inherited_members,
15
+ keep_no_docstrings=config.show_if_no_docstring,
16
+ )
17
+ |order_members(config.members_order, members_list)
18
+ |as_attributes_section(check_public=not members_list)
19
+ %}
20
+ {% if section %}{% include "docstring/attributes"|get_template with context %}{% endif %}
21
+ {% endwith %}
@@ -6,3 +6,16 @@
6
6
  This block can be used to log debug messages, deprecation messages, warnings, etc.
7
7
  -#}
8
8
  {% endblock logs %}
9
+
10
+ {% with section = obj.classes
11
+ |filter_objects(
12
+ filters=config.filters,
13
+ members_list=members_list,
14
+ inherited_members=config.inherited_members,
15
+ keep_no_docstrings=config.show_if_no_docstring,
16
+ )
17
+ |order_members(config.members_order, members_list)
18
+ |as_classes_section(check_public=not members_list)
19
+ %}
20
+ {% if section %}{% include "docstring/classes"|get_template with context %}{% endif %}
21
+ {% endwith %}
@@ -6,3 +6,16 @@
6
6
  This block can be used to log debug messages, deprecation messages, warnings, etc.
7
7
  -#}
8
8
  {% endblock logs %}
9
+
10
+ {% with section = obj.functions
11
+ |filter_objects(
12
+ filters=config.filters,
13
+ members_list=members_list,
14
+ inherited_members=config.inherited_members,
15
+ keep_no_docstrings=config.show_if_no_docstring,
16
+ )
17
+ |order_members(config.members_order, members_list)
18
+ |as_functions_section(check_public=not members_list)
19
+ %}
20
+ {% if section %}{% include "docstring/functions"|get_template with context %}{% endif %}
21
+ {% endwith %}
@@ -6,3 +6,16 @@
6
6
  This block can be used to log debug messages, deprecation messages, warnings, etc.
7
7
  -#}
8
8
  {% endblock logs %}
9
+
10
+ {% with section = obj.modules
11
+ |filter_objects(
12
+ filters=config.filters,
13
+ members_list=members_list,
14
+ inherited_members=config.inherited_members,
15
+ keep_no_docstrings=config.show_if_no_docstring,
16
+ )
17
+ |order_members(config.members_order.alphabetical, members_list)
18
+ |as_modules_section(check_public=not members_list)
19
+ %}
20
+ {% if section %}{% include "docstring/modules"|get_template with context %}{% endif %}
21
+ {% endwith %}
@@ -6,3 +6,21 @@
6
6
  This block can be used to log debug messages, deprecation messages, warnings, etc.
7
7
  -#}
8
8
  {% endblock logs %}
9
+
10
+ {% with members_list = config.members if root_members else None %}
11
+ {% if config.summary.modules %}
12
+ {% include "summary/modules"|get_template with context %}
13
+ {% endif %}
14
+
15
+ {% if config.summary.classes %}
16
+ {% include "summary/classes"|get_template with context %}
17
+ {% endif %}
18
+
19
+ {% if config.summary.functions %}
20
+ {% include "summary/functions"|get_template with context %}
21
+ {% endif %}
22
+
23
+ {% if config.summary.attributes %}
24
+ {% include "summary/attributes"|get_template with context %}
25
+ {% endif %}
26
+ {% endwith %}
@@ -25,20 +25,33 @@
25
25
  float: right;
26
26
  }
27
27
 
28
+ /* Parameter headings must be inline, not blocks. */
29
+ .doc-heading-parameter {
30
+ display: inline;
31
+ }
32
+
33
+ /* Prefer space on the right, not the left of parameter permalinks. */
34
+ .doc-heading-parameter .headerlink {
35
+ margin-left: 0 !important;
36
+ margin-right: 0.2rem;
37
+ }
38
+
28
39
  /* Backward-compatibility: docstring section titles in bold. */
29
40
  .doc-section-title {
30
41
  font-weight: bold;
31
42
  }
32
43
 
33
44
  /* Symbols in Navigation and ToC. */
34
- :root,
45
+ :root, :host,
35
46
  [data-md-color-scheme="default"] {
47
+ --doc-symbol-parameter-fg-color: #df50af;
36
48
  --doc-symbol-attribute-fg-color: #953800;
37
49
  --doc-symbol-function-fg-color: #8250df;
38
50
  --doc-symbol-method-fg-color: #8250df;
39
51
  --doc-symbol-class-fg-color: #0550ae;
40
52
  --doc-symbol-module-fg-color: #5cad0f;
41
53
 
54
+ --doc-symbol-parameter-bg-color: #df50af1a;
42
55
  --doc-symbol-attribute-bg-color: #9538001a;
43
56
  --doc-symbol-function-bg-color: #8250df1a;
44
57
  --doc-symbol-method-bg-color: #8250df1a;
@@ -47,12 +60,14 @@
47
60
  }
48
61
 
49
62
  [data-md-color-scheme="slate"] {
63
+ --doc-symbol-parameter-fg-color: #ffa8cc;
50
64
  --doc-symbol-attribute-fg-color: #ffa657;
51
65
  --doc-symbol-function-fg-color: #d2a8ff;
52
66
  --doc-symbol-method-fg-color: #d2a8ff;
53
67
  --doc-symbol-class-fg-color: #79c0ff;
54
68
  --doc-symbol-module-fg-color: #baff79;
55
69
 
70
+ --doc-symbol-parameter-bg-color: #ffa8cc1a;
56
71
  --doc-symbol-attribute-bg-color: #ffa6571a;
57
72
  --doc-symbol-function-bg-color: #d2a8ff1a;
58
73
  --doc-symbol-method-bg-color: #d2a8ff1a;
@@ -67,6 +82,15 @@ code.doc-symbol {
67
82
  font-weight: bold;
68
83
  }
69
84
 
85
+ code.doc-symbol-parameter {
86
+ color: var(--doc-symbol-parameter-fg-color);
87
+ background-color: var(--doc-symbol-parameter-bg-color);
88
+ }
89
+
90
+ code.doc-symbol-parameter::after {
91
+ content: "param";
92
+ }
93
+
70
94
  code.doc-symbol-attribute {
71
95
  color: var(--doc-symbol-attribute-fg-color);
72
96
  background-color: var(--doc-symbol-attribute-bg-color);
@@ -9,10 +9,10 @@
9
9
 
10
10
  {% set lang_pth = "languages/" ~ locale | get_template %}
11
11
  {% if lang_pth is existing_template %}
12
- {% import lang_pth as lang %}
13
- {% import "languages/en"|get_template as fallback %}
14
- {% macro t(key) %}{{ lang.t(key) or fallback.t(key) }}{% endmacro %}
12
+ {% import lang_pth as lang %}
13
+ {% import "languages/en"|get_template as fallback %}
14
+ {% macro t(key) %}{{ lang.t(key) or fallback.t(key) }}{% endmacro %}
15
15
  {% else %}
16
- {% import "languages/en"|get_template as lang %}
17
- {% macro t(key) %}{{ lang.t(key) }}{% endmacro %}
16
+ {% import "languages/en"|get_template as lang %}
17
+ {% macro t(key) %}{{ lang.t(key) }}{% endmacro %}
18
18
  {% endif %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mkdocstrings-python
3
- Version: 1.11.0
3
+ Version: 1.12.0
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
@@ -9,14 +9,15 @@ Classifier: Intended Audience :: Developers
9
9
  Classifier: Programming Language :: Python
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3 :: Only
12
- Classifier: Programming Language :: Python :: 3.8
13
12
  Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
17
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
18
  Classifier: Topic :: Documentation
19
19
  Classifier: Topic :: Software Development
20
+ Classifier: Topic :: Software Development :: Documentation
20
21
  Classifier: Topic :: Utilities
21
22
  Classifier: Typing :: Typed
22
23
  Project-URL: Homepage, https://mkdocstrings.github.io/python
@@ -27,7 +28,7 @@ Project-URL: Issues, https://github.com/mkdocstrings/python/issues
27
28
  Project-URL: Discussions, https://github.com/mkdocstrings/python/discussions
28
29
  Project-URL: Gitter, https://gitter.im/mkdocstrings/python
29
30
  Project-URL: Funding, https://github.com/sponsors/pawamoy
30
- Requires-Python: >=3.8
31
+ Requires-Python: >=3.9
31
32
  Requires-Dist: mkdocstrings>=0.26
32
33
  Requires-Dist: mkdocs-autorefs>=1.2
33
34
  Requires-Dist: griffe>=0.49
@@ -1,14 +1,14 @@
1
1
  mkdocstrings_handlers/python/__init__.py,sha256=k-0NWvXysr5RqWjtGyCozookveBB-ADZHIhgxvI1px8,128
2
2
  mkdocstrings_handlers/python/debug.py,sha256=4vqIbCbbz_vcjcFk6jPoF8E1kLig8AQEsQ93ybcjIVc,2894
3
- mkdocstrings_handlers/python/handler.py,sha256=0e8M6j5oHzUoPYUt--n1nN_XmlG-AMc4nXJUezvPRto,24355
3
+ mkdocstrings_handlers/python/handler.py,sha256=jz8mjS1ePwA8Mpb0gEHY84DxFQRXsw4EvaJsE0ZBQdw,25152
4
4
  mkdocstrings_handlers/python/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- mkdocstrings_handlers/python/rendering.py,sha256=225Gi6KJKxcL7wpReFsA19_GXetdgiwF-fe006Oe5rY,19939
5
+ mkdocstrings_handlers/python/rendering.py,sha256=5wqL8VFwrRuScNDP2n-uL0xS2-URfw8MiXVywQcCG8U,20584
6
6
  mkdocstrings_handlers/python/templates/material/_base/attribute.html,sha256=nn0671f4bE7VqnTs-VQL3SGPACWAxb2uJBRcP2nwYng,427
7
7
  mkdocstrings_handlers/python/templates/material/_base/attribute.html.jinja,sha256=_NTap6NDkJUMpJJaQ4mCIzsxVWwkv4Z6ZdaCxLe34mo,4361
8
8
  mkdocstrings_handlers/python/templates/material/_base/children.html,sha256=mOafkSlphFQJLWfrYrIMFVRGi2yjdtN6iJh8bPt7uRI,424
9
9
  mkdocstrings_handlers/python/templates/material/_base/children.html.jinja,sha256=o7JzhXx1OSo9MM-z_gks6H1aTETIPFFvTyE1St392Xs,6414
10
10
  mkdocstrings_handlers/python/templates/material/_base/class.html,sha256=x0M8Wjk7TC9cgnstMoukLVQvxZUEMFjQA0VJQPEAC9Y,415
11
- mkdocstrings_handlers/python/templates/material/_base/class.html.jinja,sha256=3_kmoqspe9abryiv4UeBX2Nlwl3uHtR8z5YvbueSb-M,7229
11
+ mkdocstrings_handlers/python/templates/material/_base/class.html.jinja,sha256=DVjmOqwm3O3rTT3MPpjuX2Dc538XK9CmEVD8JaDJLDg,7587
12
12
  mkdocstrings_handlers/python/templates/material/_base/docstring.html,sha256=9gDeMzbEUGfOBklwvriH5HMfcotOcaXUvlgLC9klTi8,427
13
13
  mkdocstrings_handlers/python/templates/material/_base/docstring.html.jinja,sha256=1kqZ_T7WMGQgFDuWQJaozLAk2FPTxNPyQuiDbFllRks,3133
14
14
  mkdocstrings_handlers/python/templates/material/_base/docstring/admonition.html,sha256=yShTX2BBdYlOGCj-Hb1NIAeWldLGE_toMDIOn1OYdPs,460
@@ -26,7 +26,7 @@ mkdocstrings_handlers/python/templates/material/_base/docstring/modules.html.jin
26
26
  mkdocstrings_handlers/python/templates/material/_base/docstring/other_parameters.html,sha256=yDBXgj-qMDQP3Si-ZjDj-Z0ksRl3BP6YbwHy8fZrmdU,478
27
27
  mkdocstrings_handlers/python/templates/material/_base/docstring/other_parameters.html.jinja,sha256=he0BczZk-STGsgXgdGlGEqipdv1ptEYOH_hf0GwY9Y8,3978
28
28
  mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html,sha256=xKQQydQJst6CJT0nH6RPWDXH92tRH_k1EIiPNoHzI1g,460
29
- mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html.jinja,sha256=jbmhNL0QavoPHgI3gEuPuY3gWlc_jplRfC5JCP8kyos,4991
29
+ mkdocstrings_handlers/python/templates/material/_base/docstring/parameters.html.jinja,sha256=MeUMh4yC-uqid_y-bqLDXn5jXqWpTIX5w81XpLFO_ms,6854
30
30
  mkdocstrings_handlers/python/templates/material/_base/docstring/raises.html,sha256=f4tZCDGQxPeaTMvo95Yipc-t-enuqV42LZ4sKUu4FaM,448
31
31
  mkdocstrings_handlers/python/templates/material/_base/docstring/raises.html.jinja,sha256=6bFvWICLUtKidLPNrCbBeGeDDd91AFmudhlXI3ZGUJU,3560
32
32
  mkdocstrings_handlers/python/templates/material/_base/docstring/receives.html,sha256=hz4Yr6SufruNEYPlsyS2G18UgHEhXBlBu15B02pXqtY,454
@@ -38,9 +38,9 @@ mkdocstrings_handlers/python/templates/material/_base/docstring/warns.html.jinja
38
38
  mkdocstrings_handlers/python/templates/material/_base/docstring/yields.html,sha256=-aNSOHi5lvqheUzklSRThN7UeCdsqTHm35CyKi5yaWU,448
39
39
  mkdocstrings_handlers/python/templates/material/_base/docstring/yields.html.jinja,sha256=a52QMKQ2udRBIhGa1eHX6fYFvkqG3XqgIkPULt7_oKw,4591
40
40
  mkdocstrings_handlers/python/templates/material/_base/expression.html,sha256=JU-ScDWoFk0m6x0Dx50LKN9yW7RzTWj4VYcJYEIQ144,430
41
- mkdocstrings_handlers/python/templates/material/_base/expression.html.jinja,sha256=tz5BbJcb87Xtd2pBI5xwUGTgDHQR2swSUV9Vjy_I-HM,3081
41
+ mkdocstrings_handlers/python/templates/material/_base/expression.html.jinja,sha256=1r4Lri9PcTNJmflCBwEKFlkgTWsh167SUKdB9G8H2uo,4134
42
42
  mkdocstrings_handlers/python/templates/material/_base/function.html,sha256=tFpXIt5sIhjXjTCXhtYZ4cGpbgdbaIdbm8HdP9Pccik,424
43
- mkdocstrings_handlers/python/templates/material/_base/function.html.jinja,sha256=L7McTQ63BIoQR8VZNs2q8W_qSDSJrqYjekcJd4DD3oM,5238
43
+ mkdocstrings_handlers/python/templates/material/_base/function.html.jinja,sha256=BfYBsyL01U_rvMn0_U6HJ3Krf44_xLNCA_KNL3ZFq8I,5676
44
44
  mkdocstrings_handlers/python/templates/material/_base/labels.html,sha256=SJGvRoTYj9AImTRRn-SP4nGAdpfz-ai4gGgHGxMOJK8,418
45
45
  mkdocstrings_handlers/python/templates/material/_base/labels.html.jinja,sha256=xGgvyJCTx4-uxqUzz1cX2_hszNSdgH5P8T4qVc7Rbvw,790
46
46
  mkdocstrings_handlers/python/templates/material/_base/language.html,sha256=Qvw8RvhTvKk3-OobTEOyWsh5yE3WbIWW4meoR4X_5fY,424
@@ -52,19 +52,19 @@ mkdocstrings_handlers/python/templates/material/_base/languages/ja.html.jinja,sh
52
52
  mkdocstrings_handlers/python/templates/material/_base/languages/zh.html,sha256=qpCtwgIj9xjbsPDApJE3W34s-V7Syg_iFeN8zX5kZqY,436
53
53
  mkdocstrings_handlers/python/templates/material/_base/languages/zh.html.jinja,sha256=p8AtmAqXBDu1ZWnrWk8hclnNyOCBs1UVGxmKg4dxqGg,1073
54
54
  mkdocstrings_handlers/python/templates/material/_base/module.html,sha256=cEq3DXlXfZ57NAK6CXA7OxtyeffgfUpWVvLW1O1aNzw,418
55
- mkdocstrings_handlers/python/templates/material/_base/module.html.jinja,sha256=2gVT8yrQpalCE1Z5t9z5E7A8mkRFFw1BVl8-FEcPXJ0,3813
55
+ mkdocstrings_handlers/python/templates/material/_base/module.html.jinja,sha256=gtYkBVqdRBVKiLKFHryDXJVT3DRIeqYFhqPXPFwsrc4,4076
56
56
  mkdocstrings_handlers/python/templates/material/_base/signature.html,sha256=7TcpvSL7n5pbg0Eokbx49vlLbY6YHM6S8o7aFpaxgXU,427
57
- mkdocstrings_handlers/python/templates/material/_base/signature.html.jinja,sha256=0SgtxQ_zYZQ-hIKBnQSsm_PnWX03nU0yyVBiJM-D2do,3609
57
+ mkdocstrings_handlers/python/templates/material/_base/signature.html.jinja,sha256=YP5K8t4xUSmbImAehvrzfdCT9WxYVeZJVzSYEDbCjtk,4952
58
58
  mkdocstrings_handlers/python/templates/material/_base/summary.html,sha256=2OR2p8zJ5I0mkknX7ZY7qj59orJH4e9HVg0S5DaUUsU,421
59
- mkdocstrings_handlers/python/templates/material/_base/summary.html.jinja,sha256=GQtXFwa7gy-66DlF-l57ZKukEFkyAbTUnJY-voHBEeo,197
59
+ mkdocstrings_handlers/python/templates/material/_base/summary.html.jinja,sha256=Mvy_IeWRe0At4wKJC9TaIhK7fZyLpGHDWHlCsFSUXpw,732
60
60
  mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html,sha256=CSrl1A7woDmRxgMpYHArnKQGgilSbk8fvXgsx1OzPwU,454
61
- mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html.jinja,sha256=1c9MwGPvYk9W9hD-1P72XU_eldwZzOyzT9COk-Zy3W8,191
61
+ mkdocstrings_handlers/python/templates/material/_base/summary/attributes.html.jinja,sha256=qVoKOlLc7KP2BKVtGOHl8BPeGDVDIZdqDS2XsxSAHI4,643
62
62
  mkdocstrings_handlers/python/templates/material/_base/summary/classes.html,sha256=hhFsCc_4quq7mPWMWKBMas1jNRjSOHoCmbz8gGR1by8,445
63
- mkdocstrings_handlers/python/templates/material/_base/summary/classes.html.jinja,sha256=U9McVqgXsuX2CqbvrjezoRk7Ev9l_2f2Yp6WckWOBOE,188
63
+ mkdocstrings_handlers/python/templates/material/_base/summary/classes.html.jinja,sha256=_P2RggKoVCiBj5MqzRFJVO9Jhr-b_MGTx-VMe_BpRR8,631
64
64
  mkdocstrings_handlers/python/templates/material/_base/summary/functions.html,sha256=gm2x5_dy7KVWxBSZlY7gCjXyC0otT6n0pIpxTvjp8WA,451
65
- mkdocstrings_handlers/python/templates/material/_base/summary/functions.html.jinja,sha256=B-UrIg03Ui-dhGQo9lweFzugkyn8BlQ0M-KNdeHPR-I,198
65
+ mkdocstrings_handlers/python/templates/material/_base/summary/functions.html.jinja,sha256=FenhIa07wvcZqfxur9D_SuGQnReLi74mSRUi_cOHrmo,647
66
66
  mkdocstrings_handlers/python/templates/material/_base/summary/modules.html,sha256=4aM17FMv-a-h5IawwFtxDHw2AdI6fICyiKtdYckQc6s,445
67
- mkdocstrings_handlers/python/templates/material/_base/summary/modules.html.jinja,sha256=DRZwGpL-g1-7itKIt0jNe_ClxkuTbJ_bfHW0GIlRaGA,188
67
+ mkdocstrings_handlers/python/templates/material/_base/summary/modules.html.jinja,sha256=Zmoo_4rfUPzMD-r7xZj2ldpPFdRNg649jw9EbEelyw4,644
68
68
  mkdocstrings_handlers/python/templates/material/attribute.html,sha256=HkKz308jpCZj3PffJ5JtZC46rtkNNZ-2bE5zvaQQTRE,43
69
69
  mkdocstrings_handlers/python/templates/material/attribute.html.jinja,sha256=HkKz308jpCZj3PffJ5JtZC46rtkNNZ-2bE5zvaQQTRE,43
70
70
  mkdocstrings_handlers/python/templates/material/children.html,sha256=rUBgwytUT2xB9S1pCHy74o-UyLOIu-fczvj-DoMxbbA,42
@@ -117,7 +117,7 @@ mkdocstrings_handlers/python/templates/material/module.html,sha256=ws59JJTsITCnd
117
117
  mkdocstrings_handlers/python/templates/material/module.html.jinja,sha256=ws59JJTsITCndGTXSUXoQ14BcXsKJswZW24ceJaHGNI,40
118
118
  mkdocstrings_handlers/python/templates/material/signature.html,sha256=EvvFPpG9PEUi25f-_2V0iVXTsUlvC9iTWtgFbJ3YVeI,43
119
119
  mkdocstrings_handlers/python/templates/material/signature.html.jinja,sha256=EvvFPpG9PEUi25f-_2V0iVXTsUlvC9iTWtgFbJ3YVeI,43
120
- mkdocstrings_handlers/python/templates/material/style.css,sha256=4I__VnNhGMj_KR-65j6XJsB3tbjfss6zHcULlBJuX9A,2740
120
+ mkdocstrings_handlers/python/templates/material/style.css,sha256=Q1fQyKGThnX5L4X2ylMG4GAAjErxGygrUptJDb4PPfQ,3385
121
121
  mkdocstrings_handlers/python/templates/material/summary.html,sha256=Wd7HXzuU0mriz82Riy2PDpRbcMo-7IHrAdBsvxbtKrY,41
122
122
  mkdocstrings_handlers/python/templates/material/summary.html.jinja,sha256=Wd7HXzuU0mriz82Riy2PDpRbcMo-7IHrAdBsvxbtKrY,41
123
123
  mkdocstrings_handlers/python/templates/material/summary/attributes.html,sha256=l3ON8hgvZaihmIpiXTwjDuHD6hp8PuiCdrTvprXYp9k,52
@@ -145,7 +145,7 @@ mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/warns.html.ji
145
145
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/yields.html,sha256=-aNSOHi5lvqheUzklSRThN7UeCdsqTHm35CyKi5yaWU,448
146
146
  mkdocstrings_handlers/python/templates/readthedocs/_base/docstring/yields.html.jinja,sha256=wJzAynY2f7Ntmhq3r8MxuiXdAIMGb8izOCcG1ciZrqk,1667
147
147
  mkdocstrings_handlers/python/templates/readthedocs/_base/language.html,sha256=Qvw8RvhTvKk3-OobTEOyWsh5yE3WbIWW4meoR4X_5fY,424
148
- mkdocstrings_handlers/python/templates/readthedocs/_base/language.html.jinja,sha256=gvhC0ie-OtANXQ-S3gMsyyL_Qjr2b93Unrts7NGZoSY,632
148
+ mkdocstrings_handlers/python/templates/readthedocs/_base/language.html.jinja,sha256=LdY01ulO7QlPnz3zlQ1Bq4m9zHpSl0UqSQFJJ3MCZdA,622
149
149
  mkdocstrings_handlers/python/templates/readthedocs/_base/languages/en.html,sha256=E8a7EBeQ1E7HVYzhilVbouqbNJkePhz7amCEJdbRxmQ,436
150
150
  mkdocstrings_handlers/python/templates/readthedocs/_base/languages/en.html.jinja,sha256=UXTwUvL_GdJscqwAwI16YexazJy26KNOVTz7lWpWqj8,1010
151
151
  mkdocstrings_handlers/python/templates/readthedocs/_base/languages/ja.html,sha256=OscqH81KN7hkkijGazKv5IdoEuLCxVlgyC6eZj2n0ns,436
@@ -177,7 +177,8 @@ mkdocstrings_handlers/python/templates/readthedocs/languages/ja.html.jinja,sha25
177
177
  mkdocstrings_handlers/python/templates/readthedocs/languages/zh.html,sha256=OuvrkorxuL0gKZNYneann1bwd1Z2i5bBY7SbC496HDw,46
178
178
  mkdocstrings_handlers/python/templates/readthedocs/languages/zh.html.jinja,sha256=OuvrkorxuL0gKZNYneann1bwd1Z2i5bBY7SbC496HDw,46
179
179
  mkdocstrings_handlers/python/templates/readthedocs/style.css,sha256=Ds8vF1rSxc2B0c4P10osx4cqXHWMntcSCxmRfX-nfzw,971
180
- mkdocstrings_python-1.11.0.dist-info/METADATA,sha256=-kJIz7Ck3C3uUoFUVItVMHhSDGNpHuiTnSpgYqADUMc,5587
181
- mkdocstrings_python-1.11.0.dist-info/WHEEL,sha256=rSwsxJWe3vzyR5HCwjWXQruDgschpei4h_giTm0dJVE,90
182
- mkdocstrings_python-1.11.0.dist-info/licenses/LICENSE,sha256=JGb4pdPEM8TTjjhr-uNCO7oXkiVrwG5Pz0JamcjNF_s,754
183
- mkdocstrings_python-1.11.0.dist-info/RECORD,,
180
+ mkdocstrings_python-1.12.0.dist-info/METADATA,sha256=gvGESAKNRpK2IYHWb_hMLMuIjX3CZii9Okkc9DjEIX0,5647
181
+ mkdocstrings_python-1.12.0.dist-info/WHEEL,sha256=pM0IBB6ZwH3nkEPhtcp50KvKNX-07jYtnb1g1m6Z4Co,90
182
+ mkdocstrings_python-1.12.0.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
183
+ mkdocstrings_python-1.12.0.dist-info/licenses/LICENSE,sha256=JGb4pdPEM8TTjjhr-uNCO7oXkiVrwG5Pz0JamcjNF_s,754
184
+ mkdocstrings_python-1.12.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.3.3)
2
+ Generator: pdm-backend (2.4.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+
3
+ [gui_scripts]
4
+