code: def reduce_on_components(
      self, fn_name: str, reduction: Optional[str] = None, **fn_kwargs
  ) -> Any:
      results = []
      for component in self.components:
          results.append(getattr(component, fn_name)(**fn_kwargs))
  
      if reduction is not None and len(results) > 0:
          out = results.pop(0)
          for r in results:
              getattr(out, reduction)(r)
      else:
          out = results
  
      return out
  
imports: from icevision.imports import *
  from icevision.core import tasks
label_desc: Use image node_id 3 for calling the Composite obj's underlying member method code with example usage: obj.reduce_on_components(fn_name, reduction) and returns: out