def randomize_model_list(modelList, randomizationStrength, numCopies,
                         seed=None):
    """
    Applies random unitary perturbations to a models.

    If `modelList` is a length-1 list, then `numCopies` determines how
    many randomizations to create.  If `modelList` containes multiple
    models, then `numCopies` must be `None` and each model is
    randomized once to create the corresponding returned model.

    Parameters
    ----------
    modelList : Model or list
        A list of Model objects.

    randomizationStrengh : float
        The strength (input as the `scale` argument to
        :func:`Model.randomize_with_unitary`) of random unitary
        perturbations.

    numCopies : int
        The number of random perturbations of `modelList[0]` to generate when
        `len(modelList) == 1`.  A value of `None` will result in 1 copy.  If
        `len(modelList) > 1` then `numCopies` must be set to None.

    seed : int, optional
        Starting seed for randomization.  Successive randomizations receive
        successive seeds.  `None` results in random seeds.
    """
    if len(modelList) > 1 and numCopies is not None:
        raise ValueError("Input multiple models XOR request multiple "
                         "copies only!")

    newmodelList = []
    if len(modelList) > 1:
        for modelnum, model in enumerate(modelList):
            newmodelList.append(model.randomize_with_unitary(
                randomizationStrength,
                seed=None if seed is None else seed + modelnum))
    else:
        for modelnum in range(numCopies if numCopies is not None else 1):
            newmodelList.append(modelList[0].randomize_with_unitary(
                randomizationStrength,
                seed=None if seed is None else seed + modelnum))
    return newmodelList