<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def convert(self, normalization=None, csphase=None, lmax=None, kind=None, check=True):
 """ Return a SHCoeffs class instance with a different normalization convention. Usage ----- clm = x.convert([normalization, csphase, lmax, kind, check]) Returns ------- clm : SHCoeffs class instance Parameters normalization : str, optional, default = x.normalization Normalization of the output class: '4pi', 'ortho', 'schmidt', or 'unnorm', for geodesy 4pi normalized, orthonormalized, Schmidt semi-normalized, or unnormalized coefficients, respectively. csphase : int, optional, default = x.csphase Condon-Shortley phase convention for the output class: 1 to exclude the phase factor, or -1 to include it. lmax : int, optional, default = x.lmax Maximum spherical harmonic degree to output. kind : str, optional, default = clm.kind 'real' or 'complex' spherical harmonic coefficients for the output class. check : bool, optional, default = True When converting complex coefficients to real coefficients, if True, check if function is entirely real. Description This method will return a new class instance of the spherical harmonic coefficients using a different normalization and Condon-Shortley phase convention. The coefficients can be converted between real and complex form, and a different maximum spherical harmonic degree of the output coefficients can be specified. If this maximum degree is smaller than the maximum degree of the original class, the coefficients will be truncated. Conversely, if this degree is larger than the maximum degree of the original class, the coefficients of the new class will be zero padded. """

        if normalization is None:
            normalization = self.normalization
        if csphase is None:
            csphase = self.csphase
        if lmax is None:
            lmax = self.lmax
        if kind is None:
            kind = self.kind

        # check argument consistency
        if type(normalization) != str:
            raise ValueError('normalization must be a string. ' +
                             'Input type was {:s}'
                             .format(str(type(normalization))))
        if normalization.lower() not in ('4pi', 'ortho', 'schmidt', 'unnorm'):
            raise ValueError(
                "normalization must be '4pi', 'ortho', 'schmidt', or " +
                "'unnorm'. Provided value was {:s}"
                .format(repr(normalization)))
        if csphase != 1 and csphase != -1:
            raise ValueError(
                "csphase must be 1 or -1. Input value was {:s}"
                .format(repr(csphase)))

        if (kind != self.kind):
            if (kind == 'complex'):
                temp = self._make_complex()
            else:
                temp = self._make_real(check=check)
            coeffs = temp.to_array(normalization=normalization.lower(),
                                   csphase=csphase, lmax=lmax)
        else:
            coeffs = self.to_array(normalization=normalization.lower(),
                                   csphase=csphase, lmax=lmax)

        return SHCoeffs.from_array(coeffs,
                                   normalization=normalization.lower(),
                                   csphase=csphase, copy=False)