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: Print out the attributes of a compiler instance.
docstr_tok: ["Print","out","the","attributes","of","a","compiler","instance","."]
code: def dump_properties(self):
      """Print out the attributes of a compiler instance."""
      props = []
      for key in list(self.executables.keys()) + [
          "version",
          "libraries",
          "library_dirs",
          "object_switch",
          "compile_switch",
      ]:
          if hasattr(self, key):
              v = getattr(self, key)
              props.append((key, None, "= " + repr(v)))
      props.sort()
  
      pretty_printer = FancyGetopt(props)
      for l in pretty_printer.generate_help(
          "%s instance properties:" % (self.__class__.__name__)
      ):
          if l[:4] == "  --":
              l = "  " + l[4:]
          print(l)
  
imports: import os
  import sys
  import re
  from pathlib import Path
  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 import _shell_utils
  from .environment import EnvironmentConfig
label_desc: Use image node_id 26 for calling the FCompiler obj's underlying member method code with example usage: obj.dump_properties() without return types