class_docstr: Filter Operator.
  
  Filter the input columns based on the selected filter_columns and filter.
  
  i.e.
          ---1---2---3---4--->
      [   filter('input', 'output', lambda i: i > 2)    ]
          ---3---4--->
class_docstr_tok: ["Filter","Operator",".","Filter","the","input","columns","based","on","the","selected","filter_columns","and","filter",".","i.e",".","--","-1","--","-2","--","-3","--","-4","--","-",">","[","filter","(","'input","'",",","'output","'",",","lambda","i",":","i",">","2",")","]","--","-3","--","-4","--","-",">"]
code: def process_step(self):
      self._time_profiler.record(self.uid, Event.queue_in)
      data = self.read_row()
      if data is None or not self.side_by_to_next(data):
          return None
  
      process_data = [
          data.get(key)
          for key in self._node_repr.iter_info.param[
              FilterConst.param.filter_by
          ]
      ]
      if any((i is Empty() for i in process_data)):
          return None
  
      self._time_profiler.record(self.uid, Event.process_in)
      succ, is_need, msg = self._call(process_data)
      self._time_profiler.record(self.uid, Event.process_out)
      assert succ, msg
      self._time_profiler.record(self.uid, Event.queue_out)
      if is_need:
          output_map = {
              new_key: data[old_key]
              for new_key, old_key in self._key_map.items()
          }
          self.data_to_next(output_map)
  
file_path: towhee/towhee/runtime/nodes/_filter.py
imports: from typing import List
  from towhee.runtime.constants import FilterConst
  from towhee.runtime.data_queue import Empty
  from towhee.runtime.time_profiler import Event
  from .node import Node
  from ._single_input import SingleInputMixin
label_desc: Use image node_id 2 for calling the Filter obj's underlying member method code with example usage: obj.process_step() and returns: None, None