code: def from_function(cls, function):
          
          module_name = function.__module__
          function_name = function.__name__
          class_name = ""
  
          function_source_hasher = hashlib.sha1()
          try:
              # If we are running a script or are in IPython, include the source
              # code in the hash.
              source = inspect.getsource(function)
              if sys.version_info[0] >= 3:
                  source = source.encode()
              function_source_hasher.update(source)
              function_source_hash = function_source_hasher.digest()
          except (IOError, OSError, TypeError):
              # Source code may not be available:
              # e.g. Cython or Python interpreter.
              function_source_hash = b""
  
          return cls(module_name, function_name, class_name,
                     function_source_hash)
docs: Create a FunctionDescriptor from a function instance.
  
          This function is used to create the function descriptor from
          a python function. If a function is a class function, it should
          not be used by this function.
  
          Args:
              cls: Current class which is required argument for classmethod.
              function: the python function used to create the function
                  descriptor.
  
          Returns:
              The FunctionDescriptor instance created according to the function.