<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _get_sym_mappings_from_permutations(permutations, atom_list_done):
 """This can be thought of as computing 'map_atom_disp' and 'map_sym' for all atoms, except done using permutations instead of by computing overlaps. Input: * permutations, shape [num_rot][num_pos] * atom_list_done Output: * map_atoms, shape [num_pos]. Maps each atom in the full structure to its equivalent atom in atom_list_done. (each entry will be an integer found in atom_list_done) * map_syms, shape [num_pos]. For each atom, provides the index of a rotation that maps it into atom_list_done. (there might be more than one such rotation, but only one will be returned) (each entry will be an integer 0 <= i < num_rot) """


    assert permutations.ndim == 2
    num_pos = permutations.shape[1]

    # filled with -1
    map_atoms = np.zeros((num_pos,), dtype='intc') - 1
    map_syms = np.zeros((num_pos,), dtype='intc') - 1

    atom_list_done = set(atom_list_done)
    for atom_todo in range(num_pos):
        for (sym_index, permutation) in enumerate(permutations):
            if permutation[atom_todo] in atom_list_done:
                map_atoms[atom_todo] = permutation[atom_todo]
                map_syms[atom_todo] = sym_index
                break
        else:
            text = ("Input forces are not enough to calculate force constants,"
                    "or something wrong (e.g. crystal structure does not "
                    "match).")
            print(textwrap.fill(text))
            raise ValueError

    assert set(map_atoms) & set(atom_list_done) == set(map_atoms)
    assert -1 not in map_atoms
    assert -1 not in map_syms
    return map_atoms, map_syms