mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary:
I've written custom parsers and emitters for everything from docstrings to classes and functions. However, I recently came across an issue when I was parsing/generating from the TensorFlow codebase: inconsistent use of `Args:` and `Arguments:` in its docstrings.
```sh
(pytorch#c348fae)$ for name in 'Args:' 'Arguments:'; do
printf '%-10s %04d\n' "$name" "$(rg -IFtpy --count-matches "$name" | paste -s -d+ -- | bc)"; done
Args: 1095
Arguments: 0336
```
It is easy enough to extend my parsers to support both variants, however it looks like `Arguments:` is wrong anyway, as per:
- https://google.github.io/styleguide/pyguide.html#doc-function-args @ [`ddccc0f`](https://github.com/google/styleguide/blob/ddccc0f/pyguide.md)
- https://chromium.googlesource.com/chromiumos/docs/+/master/styleguide/python.md#describing-arguments-in-docstrings @ [`9fc0fc0`](https://chromium.googlesource.com/chromiumos/docs/+/9fc0fc0/styleguide/python.md)
- https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html @ [`c0ae8e3`](https://github.com/sphinx-contrib/napoleon/blob/c0ae8e3/docs/source/example_google.rst)
Therefore, only `Args:` is valid. This PR replaces them throughout the codebase.
PS: For related PRs, see tensorflow/tensorflow/pull/45420
PPS: The trackbacks automatically appearing below are sending the same changes to other repositories in the [PyTorch](https://github.com/pytorch) organisation.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/49736
Reviewed By: albanD
Differential Revision: D25710534
Pulled By: soumith
fbshipit-source-id: 61e8ff01abb433e9f78185c2d1d0cbd7c22c1619
38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
def _parse_remote_device(remote_device: str):
|
||
r"""
|
||
Parses the remote device.
|
||
|
||
Args:
|
||
remote_device (str): Device on the destination worker where we‘d like to place this module.
|
||
The format should be "<workername>/<device>", where the device field can be parsed as torch.device type.
|
||
E.g., "trainer0/cpu", "trainer0", "ps0/cuda:0".
|
||
In addition, the device field can be optional and the default value is "cpu".
|
||
|
||
Returns:
|
||
A workername and a device.
|
||
"""
|
||
fields = remote_device.split("/")
|
||
if len(fields) == 2:
|
||
[on, device] = fields
|
||
elif len(fields) == 1:
|
||
on = fields[0]
|
||
device = "cpu"
|
||
else:
|
||
raise RuntimeError(
|
||
"Could not parse remote_device: {}. The valid format is '<workername>/<device>'".format(
|
||
remote_device
|
||
)
|
||
)
|
||
|
||
# Since the workername in the input remote device won't be validated until the created remote module is executed,
|
||
# only do some very basic sanity check on workername at the module creation time.
|
||
# As currently there is no regex to describe the format of workername, just check whether the workername is empty.
|
||
if not on:
|
||
raise RuntimeError(
|
||
"The workername in remote_device '{}' cannot be empty. The valid format is '<workername>/<device>'".format(
|
||
remote_device
|
||
)
|
||
)
|
||
|
||
return on, device
|