docs: def filter(self, **filters):
          """Update filters with provided arguments.
  
          Note that filters are only resolved when the view is iterated, and
          hence they do not compose. Each call to filter merely updates the
          relevant filters. For example, with this code::
  
              view = sdat.steps[500:].filter(rprof=True, fields=['T'])
              view.filter(fields=[])
  
          the produced ``view``, when iterated, will generate the steps after the
          500-th that have radial profiles. The ``fields`` filter set in the
          first line is emptied in the second line.
  
          Args:
              snap (bool): the step must be a snapshot to pass.
              rprof (bool): the step must have rprof data to pass.
              fields (list): list of fields that must be present to pass.
              func (function): arbitrary function taking a
                  :class:`~stagpy._step.Step` as argument and returning a True
                  value if the step should pass the filter.
  
          Returns:
              self.
          """
          for flt, val in self._flt.items():
              self._flt[flt] = filters.pop(flt, val)
          if filters:
              raise error.UnknownFiltersError(filters.keys())
          return self