code: def expand (properties):
      
      if __debug__:
          from .property import Property
          assert is_iterable_typed(properties, Property)
      expanded = expand_subfeatures(properties)
      return expand_composites (expanded)
docs: Given a property set which may consist of composite and implicit
          properties and combined subfeature values, returns an expanded,
          normalized property set with all implicit features expressed
          explicitly, all subfeature values individually expressed, and all
          components of composite properties expanded. Non-free features
          directly expressed in the input properties cause any values of
          those features due to composite feature expansion to be dropped. If
          two values of a given non-free feature are directly expressed in the
          input, an error is issued.