code: def to_shcoeffs(self, itaper, normalization='4pi', csphase=1):
          
          if type(normalization) != str:
              raise ValueError('normalization must be a string. ' +
                               'Input type was {:s}'
                               .format(str(type(normalization))))
  
          if normalization.lower() not in set(['4pi', 'ortho', 'schmidt']):
              raise ValueError(
                  "normalization must be '4pi', 'ortho' " +
                  "or 'schmidt'. 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))
                  )
  
          coeffs = self.to_array(itaper, normalization=normalization.lower(),
                                 csphase=csphase)
          return SHCoeffs.from_array(coeffs, normalization=normalization.lower(),
                                     csphase=csphase, copy=False)
docs: Return the spherical harmonic coefficients of taper i as a SHCoeffs
          class instance.
  
          Usage
          -----
          clm = x.to_shcoeffs(itaper, [normalization, csphase])
  
          Returns
          -------
          clm : SHCoeffs class instance
  
          Parameters
          ----------
          itaper : int
              Taper number, where itaper=0 is the best concentrated.
          normalization : str, optional, default = '4pi'
              Normalization of the output class: '4pi', 'ortho' or 'schmidt' for
              geodesy 4pi-normalized, orthonormalized, or Schmidt semi-normalized
              coefficients, respectively.
          csphase : int, optional, default = 1
              Condon-Shortley phase convention: 1 to exclude the phase factor,
              or -1 to include it.