Spaces:
Configuration error
Configuration error
# EfficientViT: Multi-Scale Linear Attention for High-Resolution Dense Prediction | |
# Han Cai, Junyan Li, Muyan Hu, Chuang Gan, Song Han | |
# International Conference on Computer Vision (ICCV), 2023 | |
__all__ = [ | |
"list_sum", | |
"list_mean", | |
"weighted_list_sum", | |
"list_join", | |
"val2list", | |
"val2tuple", | |
"squeeze_list", | |
] | |
def list_sum(x: list) -> any: | |
return x[0] if len(x) == 1 else x[0] + list_sum(x[1:]) | |
def list_mean(x: list) -> any: | |
return list_sum(x) / len(x) | |
def weighted_list_sum(x: list, weights: list) -> any: | |
assert len(x) == len(weights) | |
return ( | |
x[0] * weights[0] | |
if len(x) == 1 | |
else x[0] * weights[0] + weighted_list_sum(x[1:], weights[1:]) | |
) | |
def list_join(x: list, sep="\t", format_str="%s") -> str: | |
return sep.join([format_str % val for val in x]) | |
def val2list(x: list or tuple or any, repeat_time=1) -> list: | |
if isinstance(x, (list, tuple)): | |
return list(x) | |
return [x for _ in range(repeat_time)] | |
def val2tuple(x: list or tuple or any, min_len: int = 1, idx_repeat: int = -1) -> tuple: | |
x = val2list(x) | |
# repeat elements if necessary | |
if len(x) > 0: | |
x[idx_repeat:idx_repeat] = [x[idx_repeat] for _ in range(min_len - len(x))] | |
return tuple(x) | |
def squeeze_list(x: list or None) -> list or any: | |
if x is not None and len(x) == 1: | |
return x[0] | |
else: | |
return x | |