def derived_fp(atoms=None, atoms_parameters=None, connectivity=None, fp_1=
    None, fp_2=None, n_1=None, n_2=None, op=None):
    """NOTE : This is a work in progress. I'll redesign the whole thing to allow
    for arithmetic manipulation of two fingerprints.

    Given two fingerprints vector, it will perform arithmetic operation to
    design new fingerprints.

    Parameters
    ----------
    op : str ('add' | 'subtract' | 'divide' | 'multiply')
        add - Adds two fingerprints of equal length raised to their given power
        subtract - subtracts two fingerprints of equal length raised to
                   their given power
        mulltiply - multiply two fingerprints of equal length raised to
                    their given power
        divide - divide two fingerprints of equal length raised to their
                 given power
    """
    if op == 'add':
        return fp_1 ** n_1 + fp_2 ** n_2
    elif op == 'subtract':
        return fp_1 ** n_1 - fp_2 ** n_2
    elif op == 'divide':
        return fp_1 ** n_1 / fp_2 ** n_2
    elif op == 'multiply':
        return fp_1 ** n_1 * fp_2 ** n_2
