|
|
|
|
|
|
|
def is_3dlist(x): |
|
"""check x is 3d-list([[[1], []]]) or 2d empty list([[], []]) or 1d empty |
|
list([]). |
|
|
|
Notice: |
|
The reason that it contains 1d or 2d empty list is because |
|
some arguments from gt annotation file or model prediction |
|
may be empty, but usually, it should be 3d-list. |
|
""" |
|
if not isinstance(x, list): |
|
return False |
|
if len(x) == 0: |
|
return True |
|
for sub_x in x: |
|
if not is_2dlist(sub_x): |
|
return False |
|
|
|
return True |
|
|
|
|
|
def is_2dlist(x): |
|
"""check x is 2d-list([[1], []]) or 1d empty list([]). |
|
|
|
Notice: |
|
The reason that it contains 1d empty list is because |
|
some arguments from gt annotation file or model prediction |
|
may be empty, but usually, it should be 2d-list. |
|
""" |
|
if not isinstance(x, list): |
|
return False |
|
if len(x) == 0: |
|
return True |
|
|
|
return all(isinstance(item, list) for item in x) |
|
|
|
|
|
def is_type_list(x, type): |
|
|
|
if not isinstance(x, list): |
|
return False |
|
|
|
return all(isinstance(item, type) for item in x) |
|
|
|
|
|
def is_none_or_type(x, type): |
|
|
|
return isinstance(x, type) or x is None |
|
|
|
|
|
def equal_len(*argv): |
|
assert len(argv) > 0 |
|
|
|
num_arg = len(argv[0]) |
|
for arg in argv: |
|
if len(arg) != num_arg: |
|
return False |
|
return True |
|
|
|
|
|
def valid_boundary(x, with_score=True): |
|
num = len(x) |
|
if num < 8: |
|
return False |
|
if num % 2 == 0 and (not with_score): |
|
return True |
|
if num % 2 == 1 and with_score: |
|
return True |
|
|
|
return False |
|
|