parameters: (properties)
return_statement: return result
docstring: Combine all subproperties into their parent properties
  
          Requires: for every subproperty, there is a parent property.  All
          features are explicitly expressed.
  
          This rule probably shouldn't be needed, but
          build-request.expand-no-defaults is being abused for unintended
          purposes and it needs help
docstring_summary: Combine all subproperties into their parent properties
docstring_tokens: Combine all subproperties into their parent properties
function: def compress_subproperties (properties):
      """ Combine all subproperties into their parent properties
  
          Requires: for every subproperty, there is a parent property.  All
          features are explicitly expressed.
  
          This rule probably shouldn't be needed, but
          build-request.expand-no-defaults is being abused for unintended
          purposes and it needs help
      """
      from .property import Property
      assert is_iterable_typed(properties, Property)
      result = []
      matched_subs = set()
      all_subs = set()
      for p in properties:
          f = p.feature
  
          if not f.subfeature:
              subs = [x for x in properties if is_subfeature_of(p, x.feature)]
              if subs:
  
                  matched_subs.update(subs)
  
                  subvalues = '-'.join (sub.value for sub in subs)
                  result.append(Property(
                      p.feature, p.value + '-' + subvalues,
                      p.condition))
              else:
                  result.append(p)
  
          else:
              all_subs.add(p)
  
      # TODO: this variables are used just for debugging. What's the overhead?
      assert all_subs == matched_subs
  
      return result
function_tokens: def compress_subproperties ( properties ) : from . property import Property assert is_iterable_typed ( properties , Property ) result = [ ] matched_subs = set ( ) all_subs = set ( ) for p in properties : f = p . feature if not f . subfeature : subs = [ x for x in properties if is_subfeature_of ( p , x . feature ) ] if subs : matched_subs . update ( subs ) subvalues = '-' . join ( sub . value for sub in subs ) result . append ( Property ( p . feature , p . value + '-' + subvalues , p . condition ) ) else : result . append ( p ) else : all_subs . add ( p ) # TODO: this variables are used just for debugging. What's the overhead? assert all_subs == matched_subs return result