class_docstr: Abstract base class to define the interface that must be implemented
  by real Fortran compiler classes.
  
  Methods that subclasses may redefine:
  
      update_executables(), find_executables(), get_version()
      get_flags(), get_flags_opt(), get_flags_arch(), get_flags_debug()
      get_flags_f77(), get_flags_opt_f77(), get_flags_arch_f77(),
      get_flags_debug_f77(), get_flags_f90(), get_flags_opt_f90(),
      get_flags_arch_f90(), get_flags_debug_f90(),
      get_flags_fix(), get_flags_linker_so()
  
  DON'T call these methods (except get_version) after
  constructing a compiler instance or inside any other method.
  All methods, except update_executables() and find_executables(),
  may call the get_version() method.
  
  After constructing a compiler instance, always call customize(dist=None)
  method that finalizes compiler construction and makes the following
  attributes available:
    compiler_f77
    compiler_f90
    compiler_fix
    linker_so
    archiver
    ranlib
    libraries
    library_dirs
class_docstr_tok: ["Abstract","base","class","to","define","the","interface","that","must","be","implemented","by","real","Fortran","compiler","classes",".","Methods","that","subclasses","may","redefine",":","update_executables","(",")",",","find_executables","(",")",",","get_version","(",")","get_flags","(",")",",","get_flags_opt","(",")",",","get_flags_arch","(",")",",","get_flags_debug","(",")","get_flags_f77","(",")",",","get_flags_opt_f77","(",")",",","get_flags_arch_f77","(",")",",","get_flags_debug_f77","(",")",",","get_flags_f90","(",")",",","get_flags_opt_f90","(",")",",","get_flags_arch_f90","(",")",",","get_flags_debug_f90","(",")",",","get_flags_fix","(",")",",","get_flags_linker_so","(",")","DO","N'T","call","these","methods","(","except","get_version",")","after","constructing","a","compiler","instance","or","inside","any","other","method",".","All","methods",",","except","update_executables","(",")","and","find_executables","(",")",",","may","call","the","get_version","(",")","method",".","After","constructing","a","compiler","instance",",","always","call","customize","(","dist=None",")","method","that","finalizes","compiler","construction","and","makes","the","following","attributes","available",":","compiler_f77","compiler_f90","compiler_fix","linker_so","archiver","ranlib","libraries","library_dirs"]
docstr: Compile 'src' to product 'obj'.
docstr_tok: ["Compile","'src","'","to","product","'obj","'","."]
code: def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
      """Compile 'src' to product 'obj'."""
      src_flags = {}
      if is_f_file(src) and not has_f90_header(src):
          flavor = ":f77"
          compiler = self.compiler_f77
          src_flags = get_f77flags(src)
          extra_compile_args = self.extra_f77_compile_args or []
      elif is_free_format(src):
          flavor = ":f90"
          compiler = self.compiler_f90
          if compiler is None:
              raise DistutilsExecError(
                  "f90 not supported by %s needed for %s"
                  % (self.__class__.__name__, src)
              )
          extra_compile_args = self.extra_f90_compile_args or []
      else:
          flavor = ":fix"
          compiler = self.compiler_fix
          if compiler is None:
              raise DistutilsExecError(
                  "f90 (fixed) not supported by %s needed for %s"
                  % (self.__class__.__name__, src)
              )
          extra_compile_args = self.extra_f90_compile_args or []
      if self.object_switch[-1] == " ":
          o_args = [self.object_switch.strip(), obj]
      else:
          o_args = [self.object_switch.strip() + obj]
  
      assert self.compile_switch.strip()
      s_args = [self.compile_switch, src]
  
      if extra_compile_args:
          log.info(
              "extra %s options: %r"
              % (flavor[1:], " ".join(extra_compile_args))
          )
  
      extra_flags = src_flags.get(self.compiler_type, [])
      if extra_flags:
          log.info(
              "using compile options from source: %r"
              % " ".join(extra_flags)
          )
  
      command = (
          compiler
          + cc_args
          + extra_flags
          + s_args
          + o_args
          + extra_postargs
          + extra_compile_args
      )
  
      display = "%s: %s" % (os.path.basename(compiler[0]) + flavor, src)
      try:
          self.spawn(command, display=display)
      except DistutilsExecError:
          msg = str(get_exception())
          raise CompileError(msg)
  
imports: from __future__ import division, absolute_import, print_function
  import os
  import sys
  import re
  import types
  from numpy.compat import open_latin1
  from distutils.sysconfig import get_python_lib
  from distutils.fancy_getopt import FancyGetopt
  from distutils.errors import DistutilsModuleError, DistutilsExecError, CompileError, LinkError, DistutilsPlatformError
  from distutils.util import split_quoted, strtobool
  from numpy.distutils.ccompiler import CCompiler, gen_lib_options
  from numpy.distutils import log
  from numpy.distutils.misc_util import is_string, all_strings, is_sequence, make_temp_file, get_shared_lib_extension
  from numpy.distutils.exec_command import find_executable
  from numpy.distutils.compat import get_exception
  from numpy.distutils import _shell_utils
  from .environment import EnvironmentConfig
label_desc: Use image node_id 27 for calling the FCompiler obj's underlying member method code with example usage: obj._compile(obj, src, ext, cc_args, extra_postargs, pp_opts) without return types