In Python (3.11) why does the use of an assignment expression (the "walrus operator") require wrapping in brackets when used inside an f-string?
For example:
#!/usr/bin/env python
from pathlib import Path
import torch
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
ckpt_dir = Path("/home/path/to/checkpoints")
_ckpt = next(ckpt_dir.iterdir())
print(_ckpt)
sdict = torch.load(_ckpt, map_location=DEVICE)
model_dict = sdict["state_dict"]
for k, v in model_dict.items():
print(k)
print(type(v))
print(_shape := v.size())
print(f"{(_numel := v.numel())}")
print(_numel == torch.prod(torch.tensor(_shape)))
The code block above with print(f"{_numel := v.numel()}")
instead does not parse.
What about the parsing / AST creation mandates this?