in cater_preprocessing/utils.py [0:0]
def precompute_obj_identifiers_with_action(scene_struct, period_idx, interval_type, relation):
if interval_type=='atomic':
filter_options = scene_struct['_action_filter_options'][period_idx]
all_identifiers = scene_struct['_object_identifiers_with_action']
min_identifiers = scene_struct['_minimal_object_identifiers_with_action']
elif interval_type == 'compositional':
filter_options = scene_struct['_actions_filter_options'][period_idx][relation]
all_identifiers = scene_struct['_object_identifiers_with_actions']
min_identifiers = scene_struct['_minimal_object_identifiers_with_actions']
out = {}
duplicate_objs = False
for k,v in filter_options.items():
#if k[0] is None: continue
if len(v) != 1: continue
obj = list(v)[0]
if obj not in out: out[obj] = []
out[obj].append(k)
#pdb.set_trace()
if len(out) != len(scene_struct['objects']): duplicate_objs = True
output = [None] * len(scene_struct['objects'])
num_not_nones = [None] * len(scene_struct['objects'])
for k,v in out.items():
output[k] = v
num_not_none = []
for i in v:
num_not_none.append(int(i[0]!=None)+int(i[1]!=None)+int(i[2]!=None)+int(i[3]!=None)+int(i[4]!=None))
num_not_nones[k] = num_not_none
minimal_output = [None] * len(output)
for i, os in enumerate(output):
if os == None: continue
m = min(num_not_nones[i])
identifiers = []
for j, o in enumerate(os):
if num_not_nones[i][j] == m:
identifiers.append(o)
minimal_output[i] = identifiers
#only include identifiers with action as !None
action_minimal_output = [None] * len(output)
for k,vs in enumerate(minimal_output):
act_vs = []
if vs is None: continue
for v in vs:
if v[0] is None: continue
act_vs.append(v)
if len(act_vs)>0:
action_minimal_output[k] = act_vs
if interval_type=='atomic':
all_identifiers[period_idx] = output
min_identifiers[period_idx] = action_minimal_output
elif interval_type == 'compositional':
if period_idx not in all_identifiers:
all_identifiers[period_idx] = {}
min_identifiers[period_idx] = {}
all_identifiers[period_idx][relation] = output
min_identifiers[period_idx][relation] = action_minimal_output
return duplicate_objs