code: def make_rule(filter, *symbolizers):
      
      scale_tests = [test for test in filter.tests if test.isMapScaled()]
      other_tests = [test for test in filter.tests if not test.isMapScaled()]
      
      # these will be replaced with values as necessary
      minscale, maxscale, filter = None, None, None
      
      for scale_test in scale_tests:
  
          if scale_test.op in ('>', '>='):
              if scale_test.op == '>=':
                  value = scale_test.value
              elif scale_test.op == '>':
                  value = scale_test.value + 1
  
              minscale = output.MinScaleDenominator(value)
  
          if scale_test.op in ('<', '<='):
              if scale_test.op == '<=':
                  value = scale_test.value
              elif scale_test.op == '<':
                  value = scale_test.value - 1
  
              maxscale = output.MaxScaleDenominator(value)
      
      filter_text = ' and '.join(test2str(test) for test in other_tests)
      
      if filter_text:
          filter = output.Filter(filter_text)
  
      rule = output.Rule(minscale, maxscale, filter, [s for s in symbolizers if s])
      
      return rule
docs: Given a Filter and some symbolizers, return a Rule prepopulated
          with applicable min/max scale denominator and filter.