def split_model(mod):
    """ Take a model given by a set of operations and split it into a set of models
        and operators

        model = 3*pf1-pf2 ->
            model = (models, coefs, operators)
            model = ((pf1, pf2), (3, 1), (multiple, subtract))
    """

    # Dictionary to map symbols to strings used later in the code
    op_dct = {'*': 'multiply', '+': 'add', '/': 'divide', '-': 'substract'}

    # Break the down the model string into
    # constituent models, coefficients, and operators
    coeffs, operators, models = [], [], []
    coeff, model = '', ''
    for char in mod:
        if char == '.' or char.isdigit():
            coeff += char
        elif char.isalpha():
            model += char
        elif char in op_dct:
            operators.append(op_dct[char])
            if coeff:
                coeffs.append(float(coeff))
            else:
                coeffs.append(1.0)
            models.append(model)
            coeff = ''
            model = ''
    if coeff:
        coeffs.append(float(coeff))
    else:
        coeffs.append(1.0)
    models.append(model)

    return (tuple(models), tuple(coeffs), tuple(operators))