""" AttackCommand class =========================== """ from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser from textattack import Attacker, CommandLineAttackArgs, DatasetArgs, ModelArgs from textattack.commands import TextAttackCommand class AttackCommand(TextAttackCommand): """The TextAttack attack module: A command line parser to run an attack from user specifications. """ def run(self, args): attack_args = CommandLineAttackArgs(**vars(args)) dataset = DatasetArgs._create_dataset_from_args(attack_args) if attack_args.interactive: model_wrapper = ModelArgs._create_model_from_args(attack_args) attack = CommandLineAttackArgs._create_attack_from_args( attack_args, model_wrapper ) Attacker.attack_interactive(attack) else: model_wrapper = ModelArgs._create_model_from_args(attack_args) attack = CommandLineAttackArgs._create_attack_from_args( attack_args, model_wrapper ) attacker = Attacker(attack, dataset, attack_args) attacker.attack_dataset() @staticmethod def register_subcommand(main_parser: ArgumentParser): parser = main_parser.add_parser( "attack", help="run an attack on an NLP model", formatter_class=ArgumentDefaultsHelpFormatter, ) parser = CommandLineAttackArgs._add_parser_args(parser) parser.set_defaults(func=AttackCommand())