| 18 | |
| 19 | |
| 20 | def resize_linear_helper(ilen: int, olen: int): |
| 21 | assert olen != 0 and ilen != 0 |
| 22 | scale = olen / ilen |
| 23 | if ilen == 1: |
| 24 | alpha0 = ones((olen,), dtype=np.float32) |
| 25 | idx0 = zeros((olen,), dtype=np.int32) |
| 26 | alpha1 = zeros((olen,), dtype=np.float32) |
| 27 | idx1 = zeros((olen,), dtype=np.int32) |
| 28 | else: |
| 29 | base = iota(dtype=np.float32, shape=(olen,), dimension=-1) |
| 30 | alpha = (base + 0.5) / scale - 0.5 |
| 31 | origin_idx = floor(alpha) |
| 32 | alpha = alpha - origin_idx |
| 33 | origin_idx_l0 = origin_idx < 0.0 |
| 34 | origin_idx_ll = origin_idx + 1.0 >= (ilen * 1.0) |
| 35 | |
| 36 | origin_idx = where(origin_idx_l0, 0.0, origin_idx) |
| 37 | origin_idx = where(origin_idx_ll, ilen - 2.0, origin_idx) |
| 38 | alpha = where(origin_idx_l0, 0.0, alpha) |
| 39 | alpha = where(origin_idx_ll, 1.0, alpha) |
| 40 | |
| 41 | alpha0 = 1.0 - alpha |
| 42 | idx0 = origin_idx.astype(np.int32) |
| 43 | alpha1 = alpha |
| 44 | idx1 = (origin_idx + 1.0).astype(np.int32) |
| 45 | |
| 46 | return alpha0, idx0, alpha1, idx1 |
| 47 | |
| 48 | |
| 49 | def resize_nearest(inp: HLOTensor, size: Sequence[int]): |