def from_index_amount(cls, idx, amount):
        """
        Like Deformation.from_index_amount, except generates
        a strain from the zero 3x3 tensor or voigt vector with
        the amount specified in the index location.  Ensures
        symmetric strain.

        Args:
            idx (tuple or integer): index to be perturbed, can be voigt or
                full-tensor notation
            amount (float): amount to perturb selected index
        """
        if np.array(idx).ndim == 0:
            v = np.zeros(6)
            v[idx] = amount
            return cls.from_voigt(v)
        elif np.array(idx).ndim == 1:
            v = np.zeros((3, 3))
            for i in itertools.permutations(idx):
                v[i] = amount
            return cls(v)
        else:
            raise ValueError("Index must either be 2-tuple or integer "
                             "corresponding to full-tensor or voigt index")