in dvd_generation/simulators/temporal_question_engine.py [0:0]
def make_query_action_handler(attribute):
def query_action_handler(scene_struct, inputs, side_inputs, period_idx, period_relation='during'):
assert len(inputs) == 1
if len(side_inputs) != 0 and attribute not in ['action_order', 'action_freq']:
pdb.set_trace()
idx = inputs[0]
obj = scene_struct['objects'][idx]
if attribute == 'action':
period_idx = period_idx = convert_to_compositional_period_idx(scene_struct, period_idx)
all_moves = scene_struct['_action_list'][period_idx][period_relation][idx]
all_moves = remove_contained_act(all_moves)
if all_moves is not None:
assert len(all_moves)==1
return next(iter(all_moves))
return 'no action'
#all_moves = get_action_by_moment(scene_struct, idx, period_idx, include_moving=False)
#assert len(all_moves)==1
#if list(all_moves)[0] == 'static' or list(all_moves)[0] == 'stationary':
# return 'no action'
#return list(all_moves)[0]
elif attribute == 'action_set':
all_moves = scene_struct['_action_list'][period_idx][period_relation][idx]
all_moves = remove_contained_act(all_moves)
if all_moves is not None:
return ','.join(sorted(set(all_moves)))
return 'no action'
elif attribute == 'action_seq':
all_moves = scene_struct['_action_list'][period_idx][period_relation][idx]
all_moves = remove_contained_act(all_moves)
if all_moves is not None:
return ','.join(all_moves)
return 'no action'
elif attribute == 'action_order':
all_moves = scene_struct['_action_list'][period_idx][period_relation][idx]
all_moves = remove_contained_act(all_moves)
if all_moves is not None:
assert len(all_moves)>0
if side_inputs[0] == 'last':
return all_moves[-1]
else:
order = reverse_ordinal_map[side_inputs[0]]
if len(all_moves)>=order:
return all_moves[order-1]
return 'no action'
elif attribute == 'action_freq':
all_moves = scene_struct['_action_list'][period_idx][period_relation][idx]
all_moves = remove_contained_act(all_moves)
out = []
if all_moves is not None:
assert len(all_moves)>0
all_freqs = Counter(all_moves)
if side_inputs[0] == 'the most':
freq = max(all_freqs.values())
elif side_inputs[0] == 'the least':
freq = min(all_freqs.values())
else:
freq = frequency_to_number[side_inputs[0]]
for k,v in all_freqs.items():
if v == freq:
out.append(k)
if len(out)>0:
return ','.join(sorted(set(out)))
return 'no action'
else:
pdb.set_trace()
return query_action_handler