code: def features(self, expand=False):
          
          fs = []
          for featpath, val in super(AVM, self).features(expand=expand):
              # don't juse Conjunction.features() here because we want to
              # include the non-AVM terms, too
              if expand and isinstance(val, Conjunction):
                  for term in val.terms:
                      if isinstance(term, AVM):
                          for fp, v in term.features(True):
                              fs.append(('{}.{}'.format(featpath, fp), v))
                      else:
                          fs.append((featpath, term))
              else:
                  fs.append((featpath, val))
          return fs
docs: Return the list of tuples of feature paths and feature values.
  
          Args:
              expand (bool): if `True`, expand all feature paths
          Example:
              >>> avm = AVM([('A.B', TypeIdentifier('1')),
              ...            ('A.C', TypeIdentifier('2')])
              >>> avm.features()
              [('A', <AVM object at ...>)]
              >>> avm.features(expand=True)
              [('A.B', <TypeIdentifier object (1) at ...>),
               ('A.C', <TypeIdentifier object (2) at ...>)]