code: def fn_name(fn):
      '''
          Gets a funtion fully quaified name.
          Args    :
              fn      : The function.
          Returns : The name of the function.
      '''
      expression = '(\S+) (?:of|at)'
      #Checks if the function is a mehtod and should have the self argument passed
      is_method   = inspect.ismethod(fn)
  
      #Builds the name of the method,module.class.method or module.method
      name        = '{}.{}'.format(fn.__module__, re.compile(expression).findall(str(fn))[0])
  
      return name,is_methof fn_name(fn):
      '''
          Gets a funtion fully quaified name.
          Args    :
              fn      : The function.
          Returns : The name of the function.
      '''
      expression = '(\S+) (?:of|at)'
      #Checks if the function is a mehtod and should have the self argument passed
      is_method   = inspect.ismethod(fn)
  
      #Builds the name of the method,module.class.method or module.method
      name        = '{}.{}'.format(fn.__module__, re.compile(expression).findall(str(fn))[0])
  
      return name,is_method
docs: Gets a funtion fully quaified name.
          Args    :
              fn      : The function.
          Returns : The name of the function.