Skip to content

Conversation

@s01st
Copy link

@s01st s01st commented Nov 21, 2025

At present docscrape.NumpyDocString finally supports all Numpy Document Sections. However, only the Parameters section supports parameters. However per numpydoc many sections should support parameters e.g. Attributes.

This patch:

  1. Adds a constant PARAM_SECTIONS to note sections which support parameters.

  2. Updates NumpyDocString to:

    • include a param_sections similar to sections,

    • normalize the parameter processing done for NumpyDocString.sections['Parameters'] to the supported param_sections,

    • exposes configuration options to NumpyDocString.__init__

At present, this will prevent complaints when running nbdev_prepare due to TypeErrors. For example, consider the simple class:

#| export
@dataclass
class Message:
    """A single message in a conversation.
    
    Attributes
    ----------
    role : Literal["system", "user", "assistant"]
        The role of the message sender
    content : str
        The message content
    timestamp : datetime
        When the message was created
    metadata : dict
        Additional metadata (e.g., token count, model info)
    
    Examples
    --------
    >>> msg = Message(role="user", content="Hello!")
    >>> msg.role
    'user'
    """

Then:

> showdoc.parse_docstring(Message)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[9], [line 70](vscode-notebook-cell:?execution_count=9&line=70)
     69 parsed_data = copy.deepcopy(sections)
---> [70](vscode-notebook-cell:?execution_count=9&line=70) docscrape.NumpyDocString(docstring(Message))
     71 showdoc.parse_docstring(Message)

File ~/mamba/envs/fastcore_env/lib/python3.12/site-packages/fastcore/docscrape.py:112, in NumpyDocString.__init__(self, docstring, config)
    110 self['Parameters'] = {o.name:o for o in self['Parameters']}
    111 if self['Returns']: self['Returns'] = self['Returns'][0]
--> [112](https://file+.vscode-resource.vscode-cdn.net/Users/demo_user/Projects/NBDev_Example/nbs/doctest/~/mamba/envs/fastcore_env/lib/python3.12/site-packages/fastcore/docscrape.py:112) for section in SECTIONS: self[section] = dedent_lines(self[section], split=False)

File ~/mamba/envs/fastcore_env/lib/python3.12/site-packages/fastcore/docscrape.py:235, in dedent_lines(lines, split)
    233 def dedent_lines(lines, split=True):
    234     """Deindent a list of lines maximally"""
--> [235](https://file+.vscode-resource.vscode-cdn.net/Users/demo_user/Projects/NBDev_Example/nbs/doctest/~/mamba/envs/fastcore_env/lib/python3.12/site-packages/fastcore/docscrape.py:235)     res = textwrap.dedent("\n".join(lines))
    236     if split: res = res.split("\n")
    237     return res

TypeError: sequence item 0: expected str instance, Parameter found

After applying the patch:

> showdoc.parse_docstring(Message)

{ 'Also': '',
  'Attributes': 'role\ncontent\ntimestamp\nmetadata',
  'Examples': '>>> msg = Message(role="user", content="Hello!")\n'
              '>>> msg.role\n'
              "'user'",
  'Extended': '',
  'Methods': '',
  'Notes': '',
  'Other': '',
  'Parameters': {},
  'Raises': '',
  'Receives': '',
  'References': '',
  'Returns': [],
  'See': '',
  'Summary': 'A single message in a conversation.',
  'Warnings': '',
  'Warns': '',
  'Yields': ''}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant