def sample_earlier_unique_object()

in dvd_generation/filters/dialogue_filters.py [0:0]


def sample_earlier_unique_object(dialogue, template): #, turn_dependencies, metadata):
    if len(dialogue)==0 or template['ref_remark'] == 'no_reference': 
        template['earlier_unique_obj'] = -1 
        return 

    used_objects = template['used_objects']
    curr_objects = template['all_unique_objs']
    
    if len(curr_objects)==0 or len(used_objects)==0: 
        template['earlier_unique_obj'] = -1
        return 
    
    identifiers =  template['_dial_minimal_object_identifiers']
    
    while(True):
        curr_object = random.choice(curr_objects)
        if len(curr_object)==3 and curr_object[2]=='ans':
            continue
        break

    past_turns = list(range(1, len(dialogue)+1))
    random.shuffle(past_turns)
    past_objects = copy.deepcopy(list(used_objects))
    random.shuffle(past_objects) 
    found_earlier = False 
    for turn in past_turns:
        for earlier_obj_id in past_objects:
            if identifiers[earlier_obj_id] != [None] and used_objects[earlier_obj_id]['original_turn']==turn: 
                found_earlier = True 
                break
        if found_earlier: break 
    
    '''
    temp = copy.deepcopy(list(used_objects))
    pdb.set_trace()
    random.shuffle(temp)
    found_earlier = False 
    for earlier_obj_id in temp:
        #earlier_obj_id = random.choice(list(used_objects))
        if identifiers[earlier_obj_id] != [None]:
            found_earlier = True 
            break       
    '''
    
    if not found_earlier: 
        template['earlier_unique_obj'] = -1
        return 

    identifier_attrs = curr_object[1]['side_inputs']
    strip_identifier_attrs = [strip_attr_key(a) for a in identifier_attrs]
    identifier = random.choice(identifiers[earlier_obj_id])
    if identifier == (None,None,None,None):pdb.set_trace()
    if len(identifier_attrs)!=4: pdb.set_trace()
    obj_attr = {}
    obj_attr_map = {k:v for k,v in zip(strip_identifier_attrs,identifier_attrs)}
    for idx, i in enumerate(identifier):
        if i is None:
            if idx == len(identifier)-1: # Shape
                val = 'thing'
            else:
                val = ''
        else:
            val = i
        obj_attr[strip_identifier_attrs[idx]] = val

    template['earlier_unique_obj'] = earlier_obj_id
    template['earlier_unique_obj_attr'] = obj_attr
    template['earlier_unique_obj_attr_map'] = obj_attr_map
    template['earlier_unique_obj_node'] = curr_object[1]

    return