docs: def get_subsequence(self, resnums, new_id=None, copy_letter_annotations=True):
          """Get a subsequence as a new SeqProp object given a list of residue numbers"""
          # XTODO: documentation
          biop_compound_list = []
          for resnum in resnums:
              # XTODO can be sped up by separating into ranges based on continuous resnums
              feat = FeatureLocation(resnum - 1, resnum)
              biop_compound_list.append(feat)
  
          if len(biop_compound_list) == 0:
              log.debug('Zero length subsequence')
              return
          elif len(biop_compound_list) == 1:
              log.debug('Subsequence only one residue long')
              sub_feature_location = biop_compound_list[0]
          else:
              sub_feature_location = CompoundLocation(biop_compound_list)
  
          try:
              sub_feature = sub_feature_location.extract(self)
          except TypeError:
              log.critical('SeqProp {}: unknown error when trying to get subsequence - please investigate! '
                            'Try using a feature to extract a subsequence from the SeqProp'.format(self.id))
              return
  
          if not new_id:
              new_id = '{}_subseq'.format(self.id)
  
          new_sp = SeqProp(id=new_id, seq=sub_feature.seq)
          if copy_letter_annotations:
              new_sp.letter_annotations = sub_feature.letter_annotations
          return new_sp