code: def file_build(self, path, modname=None):
          
          try:
              stream, encoding, data = open_source_file(path)
          except IOError as exc:
              raise exceptions.AstroidBuildingError(
                  "Unable to load file {path}:\n{error}",
                  modname=modname,
                  path=path,
                  error=exc,
              ) from exc
          except (SyntaxError, LookupError) as exc:
              raise exceptions.AstroidSyntaxError(
                  "Python 3 encoding specification error or unknown encoding:\n"
                  "{error}",
                  modname=modname,
                  path=path,
                  error=exc,
              ) from exc
          except UnicodeError as exc:  # wrong encoding
              # detect_encoding returns utf-8 if no encoding specified
              raise exceptions.AstroidBuildingError(
                  "Wrong or no encoding specified for {filename}.", filename=path
              ) from exc
          with stream:
              # get module name if necessary
              if modname is None:
                  try:
                      modname = ".".join(modutils.modpath_from_file(path))
                  except ImportError:
                      modname = os.path.splitext(os.path.basename(path))[0]
              # build astroid representation
              module = self._data_build(data, modname, path)
              return self._post_build(module, encoding)
docs: Build astroid from a source code file (i.e. from an ast)
  
          *path* is expected to be a python source file