# Path: compilertools/compilers/_core.py
# class CompilerBase(BaseClass):
#     """Base class for compiler"""
# 
#     Arg = namedtuple("Argument", "args suffix import_if build_if")
#     Arg.__new__.__defaults__ = ("", "", True, True)
#     Arg.__doc__ = """
#        Compiler argument.
# 
#        Parameters
#        ----------
#        args : list of str
#            arguments sent to compiler (ex "-flto -w").
#        suffix : str
#            suffix related to this argument in compiled file name.
#        import_if : bool
#            condition that must be True for importing file compiled with this argument
#            (ex architecture compatibility). Default value is True.
#        build_if : bool
#            Condition that must be True for compile file with this argument and the
#            current compiler (Ex compiler version). Default value is True."""
# 
#     def __init__(self, current_compiler=False):
#         BaseClass.__init__(self)
#         self["current_compiler"] = current_compiler
#         self._default["current_compiler"] = False
#         self._default["version"] = 0.0
# 
#     def _compile_args_matrix(self, arch, cpu):
#         """Returns available compiler arguments for the specified CPU architecture as a
#         matrix.
# 
#         Override to define matrix.
# 
#         Parameters
#         ----------
#         arch : str
#             CPU Architecture.
#         cpu : compilertools.processors.ProcessorBase subclass
#             Processor instance
# 
#         Returns
#         -------
#         list of CompilerBase.Arg
#             Arguments matrix."""
#         raise NotImplementedError
# 
#     def _compile_args_current_machine(self, arch, cpu):
#         """Defines optimized arguments for current machine.
# 
#         By default, gets the best options from compile_args method.
# 
#         Override to define another behavior.
# 
#         Parameters
#         ----------
#         arch : str
#             CPU Architecture.
#         cpu : compilertools.processors.ProcessorBase subclass
#             Processor instance.
# 
#         Returns
#         -------
#         str
#             Best compiler arguments for current machine."""
#         args = _order_args_matrix(
#             self._compile_args_matrix(arch, cpu), current_machine=True
#         )
# 
#         if not args:
#             return []
#         return args[list(args)[0]]
# 
#     def compile_args(self, arch=None, current_machine=False):
#         """Gets compiler args list for a specific architecture.
# 
#         Parameters
#         ----------
#         arch : str
#             Target architecture name.
#         current_machine : bool
#             If True, returns only arguments compatibles with current machine
#             (conditions from "Arg.import_if").
# 
#         Returns
#         -------
#         collections.OrderedDict with keys and values as str
#             Arguments matrix. Keys are suffixes, values are compiler arguments."""
#         return _order_args_matrix(
#             self._compile_args_matrix(
#                 *_get_arch_and_cpu(arch, current_machine=current_machine)
#             ),
#             current_machine,
#             self["current_compiler"],
#         )
# 
#     def compile_args_current_machine(self):
#         """Return compiler arguments optimized by compiler for current machine
# 
#         Returns
#         -------
#         str
#             Best compiler arguments for current machine."""
#         return self._compile_args_current_machine(
#             *_get_arch_and_cpu(current_machine=True)
#         )
# 
#     @BaseClass._memoized_property
#     def name(self):
#         """Compiler type name
# 
#         Returns
#         -------
#         str
#             Name."""
#         return self.__module__.rsplit(".", 1)[-1]
# 
#     @BaseClass._memoized_property
#     def api(self):
#         """Compatibles API
# 
#         Returns
#         -------
#         dict
#             Keys are API names, values are dict of arguments with keys in
#             {'link', 'compile'}."""
#         return {}
# 
#     @BaseClass._memoized_property
#     def option(self):
#         """Compatibles Options
# 
#         Returns
#         -------
#         dict
#             Keys are options names, values are dict of arguments with keys in
#             {'link', 'compile'}."""
#         return {}


from compilertools.compilers import CompilerBase as _CompilerBase
        from platform import python_compiler
                    suffix="sse2",
                    import_if="SSE2" in cpu.features and arch == "x86_32",
                    build_if=arch == "x86_32",
                ),
                self.Arg(
                    args="/arch:SSE",
                    suffix="sse",
                    import_if="SSE" in cpu.features and arch == "x86_32",
                    build_if=arch == "x86_32",
                ),
                self.Arg(),
            ],
            # CPU Generic vendor/brand optimisations
            [
                self.Arg(
                    args="/favor:ATOM",
                    suffix="intel_atom",
                    import_if=(
                        cpu.vendor == "GenuineIntel"
                        and "Atom" in cpu.brand
                        and self.version >= 11.0
                    ),
                    build_if=self.version >= 11.0,
                ),
                self.Arg(
                    args="/favor:INTEL64",
                    suffix="intel",
                    import_if=(cpu.vendor == "GenuineIntel" and arch == "x86_64"),
                    build_if=arch == "x86_64",
                ),

# Path: compilertools/compilers/_core.py
# class CompilerBase(BaseClass):
#     """Base class for compiler"""
# 
#     Arg = namedtuple("Argument", "args suffix import_if build_if")
#     Arg.__new__.__defaults__ = ("", "", True, True)
#     Arg.__doc__ = """
#        Compiler argument.
# 
#        Parameters
#        ----------
#        args : list of str
#            arguments sent to compiler (ex "-flto -w").
#        suffix : str
#            suffix related to this argument in compiled file name.
#        import_if : bool
#            condition that must be True for importing file compiled with this argument
#            (ex architecture compatibility). Default value is True.
#        build_if : bool
#            Condition that must be True for compile file with this argument and the
#            current compiler (Ex compiler version). Default value is True."""
# 
#     def __init__(self, current_compiler=False):
#         BaseClass.__init__(self)
#         self["current_compiler"] = current_compiler
#         self._default["current_compiler"] = False
#         self._default["version"] = 0.0
# 
#     def _compile_args_matrix(self, arch, cpu):
#         """Returns available compiler arguments for the specified CPU architecture as a
#         matrix.
# 
#         Override to define matrix.
# 
#         Parameters
#         ----------
#         arch : str
#             CPU Architecture.
#         cpu : compilertools.processors.ProcessorBase subclass
#             Processor instance
# 
#         Returns
#         -------
#         list of CompilerBase.Arg
#             Arguments matrix."""
#         raise NotImplementedError
# 
#     def _compile_args_current_machine(self, arch, cpu):
#         """Defines optimized arguments for current machine.
# 
#         By default, gets the best options from compile_args method.
# 
#         Override to define another behavior.
# 
#         Parameters
#         ----------
#         arch : str
#             CPU Architecture.
#         cpu : compilertools.processors.ProcessorBase subclass
#             Processor instance.
# 
#         Returns
#         -------
#         str
#             Best compiler arguments for current machine."""
#         args = _order_args_matrix(
#             self._compile_args_matrix(arch, cpu), current_machine=True
#         )
# 
#         if not args:
#             return []
#         return args[list(args)[0]]
# 
#     def compile_args(self, arch=None, current_machine=False):
#         """Gets compiler args list for a specific architecture.
# 
#         Parameters
#         ----------
#         arch : str
#             Target architecture name.
#         current_machine : bool
#             If True, returns only arguments compatibles with current machine
#             (conditions from "Arg.import_if").
# 
#         Returns
#         -------
#         collections.OrderedDict with keys and values as str
#             Arguments matrix. Keys are suffixes, values are compiler arguments."""
#         return _order_args_matrix(
#             self._compile_args_matrix(
#                 *_get_arch_and_cpu(arch, current_machine=current_machine)
#             ),
#             current_machine,
#             self["current_compiler"],
#         )
# 
#     def compile_args_current_machine(self):
#         """Return compiler arguments optimized by compiler for current machine
# 
#         Returns
#         -------
#         str
#             Best compiler arguments for current machine."""
#         return self._compile_args_current_machine(
#             *_get_arch_and_cpu(current_machine=True)
#         )
# 
#     @BaseClass._memoized_property
#     def name(self):
#         """Compiler type name
# 
#         Returns
#         -------
#         str
#             Name."""
#         return self.__module__.rsplit(".", 1)[-1]
# 
#     @BaseClass._memoized_property
#     def api(self):
#         """Compatibles API
# 
#         Returns
#         -------
#         dict
#             Keys are API names, values are dict of arguments with keys in
#             {'link', 'compile'}."""
#         return {}
# 
#     @BaseClass._memoized_property
#     def option(self):
#         """Compatibles Options
# 
#         Returns
#         -------
#         dict
#             Keys are options names, values are dict of arguments with keys in
#             {'link', 'compile'}."""
#         return {}


# Path: compilertools/compilers/msvc.py
from compilertools.compilers import CompilerBase as _CompilerBase
        from platform import python_compiler

                    suffix="sse2",
                    import_if="SSE2" in cpu.features and arch == "x86_32",
                    build_if=arch == "x86_32",
                ),
                self.Arg(
                    args="/arch:SSE",
                    suffix="sse",
                    import_if="SSE" in cpu.features and arch == "x86_32",
                    build_if=arch == "x86_32",
                ),
                self.Arg(),
            ],
            # CPU Generic vendor/brand optimisations
            [
                self.Arg(
                    args="/favor:ATOM",
                    suffix="intel_atom",
                    import_if=(
                        cpu.vendor == "GenuineIntel"
                        and "Atom" in cpu.brand
                        and self.version >= 11.0
                    ),
                    build_if=self.version >= 11.0,
                ),
                self.Arg(
                    args="/favor:INTEL64",
                    suffix="intel",
                    import_if=(cpu.vendor == "GenuineIntel" and arch == "x86_64"),
                    build_if=arch == "x86_64",
                ),

                self.Arg(