Can Sphinx napoleon document function returning multiple arguments?
Question:
I am trying to use the Google code style to document a function that I then use sphinx with the napoleon extension to create documentation for. The function is unusual in that is returns two arguments. I don’t think napoleon handles this. If so, could someone tell me how they handle it?
def foo(a):
'''one line summary
longer explanation
Args:
a (int): parameter description
Returns:
servers (list): list of servers to use
msg (str): logging message string
'''
pass
Maybe I’m getting a message that it is not great coding style to return multiple arguments, but can you do this? The html generated treats those two lines as part of a description for one argument. If I put a newline between the servers and msg line, it helps, but it is still documenting one arg.
Answers:
Python only returns a single object. If you call
serv,msg = foo(myinput)
Then you are explicitly expanding the expression_list tuple which is generated when the function returns with this code
return servers,msg
You docstring should read some thing like this (with the Napoleon Google Style)
"""
one line summary
longer explanation
Args:
a (int): parameter description
Returns:
(tuple): tuple containing:
servers(list) servers to use
msg (str): logging message string
"""
Or with the Napoleon NumPy style:
"""
one line summary
longer explanation
Parameters
----------
a : int
parameter description
Returns
-------
servers : list
servers to use
msg : str
logging message string
"""
Have a look at the python docs for return and perhaps expression_list
Google style does not support multiple return values. As a workaround you can use:
Returns:
2-element tuple containing
- **rates** (*array*): the unnormalized rates (just the sum of the
exponential kernels). To obtain rates in Hz divide the
array by `2*tau` (or other conventional `x*tau` duration).
- **nph** (*array*): number of photons in -5*tau..5*tau window
for each timestamp. Proportional to the rate computed
with KDE and rectangular kernel.
This results in a nice output even with multi-line description for each returned item.
After trying several options, this format worked for me
def foo(a):
"""
Args:
a (int): parameter description
Returns:
- list:
parameter description
- str:
logging message string
"""
Note the two spaces after the linebreak.
You can configure napoleon to interpret the Returns
section of a Google-style docstring like the Args
section using the napoleon_custom_sections
setting.
napoleon_custom_sections = [('Returns', 'params_style')]
This way, multiple return values (as given in the question) are rendered nicely by Sphinx. However, I am not entirely sure if one is still strictly adhering to the Google-style docstring convention when using this option.
I am trying to use the Google code style to document a function that I then use sphinx with the napoleon extension to create documentation for. The function is unusual in that is returns two arguments. I don’t think napoleon handles this. If so, could someone tell me how they handle it?
def foo(a):
'''one line summary
longer explanation
Args:
a (int): parameter description
Returns:
servers (list): list of servers to use
msg (str): logging message string
'''
pass
Maybe I’m getting a message that it is not great coding style to return multiple arguments, but can you do this? The html generated treats those two lines as part of a description for one argument. If I put a newline between the servers and msg line, it helps, but it is still documenting one arg.
Python only returns a single object. If you call
serv,msg = foo(myinput)
Then you are explicitly expanding the expression_list tuple which is generated when the function returns with this code
return servers,msg
You docstring should read some thing like this (with the Napoleon Google Style)
"""
one line summary
longer explanation
Args:
a (int): parameter description
Returns:
(tuple): tuple containing:
servers(list) servers to use
msg (str): logging message string
"""
Or with the Napoleon NumPy style:
"""
one line summary
longer explanation
Parameters
----------
a : int
parameter description
Returns
-------
servers : list
servers to use
msg : str
logging message string
"""
Have a look at the python docs for return and perhaps expression_list
Google style does not support multiple return values. As a workaround you can use:
Returns:
2-element tuple containing
- **rates** (*array*): the unnormalized rates (just the sum of the
exponential kernels). To obtain rates in Hz divide the
array by `2*tau` (or other conventional `x*tau` duration).
- **nph** (*array*): number of photons in -5*tau..5*tau window
for each timestamp. Proportional to the rate computed
with KDE and rectangular kernel.
This results in a nice output even with multi-line description for each returned item.
After trying several options, this format worked for me
def foo(a):
"""
Args:
a (int): parameter description
Returns:
- list:
parameter description
- str:
logging message string
"""
Note the two spaces after the linebreak.
You can configure napoleon to interpret the Returns
section of a Google-style docstring like the Args
section using the napoleon_custom_sections
setting.
napoleon_custom_sections = [('Returns', 'params_style')]
This way, multiple return values (as given in the question) are rendered nicely by Sphinx. However, I am not entirely sure if one is still strictly adhering to the Google-style docstring convention when using this option.