| # mypy: ignore-errors |
| |
| """ |
| Python polyfills for common builtins. |
| """ |
| import math |
| |
| import torch |
| |
| |
| def all(iterator): |
| for elem in iterator: |
| if not elem: |
| return False |
| return True |
| |
| |
| def any(iterator): |
| for elem in iterator: |
| if elem: |
| return True |
| return False |
| |
| |
| def index(iterator, item, start=0, end=None): |
| for i, elem in enumerate(list(iterator))[start:end]: |
| if item == elem: |
| return i |
| # This will not run in dynamo |
| raise ValueError(f"{item} is not in {type(iterator)}") |
| |
| |
| def repeat(item, count): |
| for i in range(count): |
| yield item |
| |
| |
| def radians(x): |
| return math.pi / 180.0 * x |
| |
| |
| def accumulate_grad(x, new_grad): |
| new_grad = torch.clone(new_grad) |
| if x.grad is None: |
| x.grad = new_grad |
| else: |
| x.grad.add_(new_grad) |