code: def map(self, func, **kwargs):
          
          if kwargs.get('with_path', False):
              yield self.path, func(self)
          if kwargs.get('recursive', True):
              for child in self.children.values():
                  for value in child.map(func, **kwargs):
                      yield value
docs: Generator function returning result of
          `func(self)`
  
          :param func: callable object
          :keyword recursive: if True, then apply map to every children nodes
          :keyword with_path: whether the yield values is a tuple
          of 2 elements containing report-path and `func(self)` result or
          simply `func(self)` result.
  
          :rtype: generator