code: def _lower_non_existent_context_field_filters(match_traversals, visitor_fn):
      
      new_match_traversals = []
      for match_traversal in match_traversals:
          new_match_traversal = []
          for step in match_traversal:
              if step.where_block is not None:
                  new_filter = step.where_block.visit_and_update_expressions(visitor_fn)
                  if new_filter.predicate == TrueLiteral:
                      new_filter = None
  
                  new_step = step._replace(where_block=new_filter)
              else:
                  new_step = step
  
              new_match_traversal.append(new_step)
          new_match_traversals.append(new_match_traversal)
  
      return new_match_traversals
docs: Return new match traversals, lowering filters involving non-existent ContextFields.
  
      Expressions involving non-existent ContextFields are evaluated to TrueLiteral.
      BinaryCompositions, where one of the operands is lowered to a TrueLiteral,
      are lowered appropriately based on the present operator (u'||' and u'&&' are affected).
      TernaryConditionals, where the predicate is lowered to a TrueLiteral,
      are replaced by their if_true predicate.
      The `visitor_fn` implements these behaviors (see `_update_context_field_expression`).
  
      Args:
          match_traversals: list of match traversal enitities to be lowered
          visitor_fn: visit_and_update function for lowering expressions in given match traversal
  
      Returns:
          new list of match_traversals, with all filter expressions lowered