Пример #1
0
    def gather_options(self):
        """Initialize our parser with basic options(only once).
        Add additional model-specific and dataset-specific options.
        These options are defined in the <modify_commandline_options> function
        in model and dataset classes.
        """
        if not self.initialized:  # check if it has been initialized
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, _ = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()  # parse again with new defaults

        # modify dataset-related parser options
        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        # save and return the parser
        self.parser = parser
        return parser.parse_args()
    def gather_options(self):
        # initialize parser with basic options
        if not self.initialized:
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, unknown = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)

        # modify dataset-related parser options
        # dataset_mode = opt.dataset_mode
        # dataset_option_setter = data.get_option_setter(dataset_mode)
        # parser = dataset_option_setter(parser, self.isTrain)

        opt, unknown = parser.parse_known_args()

        # if there is opt_file, load it.
        # The previous default options will be overwritten
        if opt.load_from_opt_file:
            parser = self.update_options_from_file(parser, opt)

        opt = parser.parse_args()
        self.parser = parser
        return opt
Пример #3
0
    def gather_options(self):
        """
        涉及到basic_options.initialize和train_options.initialize
        model.__init__.get_option_setter和model.cycle_gan.modify_commandline_options
        data.__init__.get_option_setter和data.unalingned.modify_commandline_options

        被parse()调用

        :return:argparse.Namespace
        """

        # step1: initiaize parser with basic options
        if not self.initialized:
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        opt, _ = parser.parse_known_args()

        # step2: initialize parser with model
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()

        # step3: initialize parser with data
        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()

        self.parser = parser

        return opt
Пример #4
0
    def parse(self):

        opt = options.Options.parse(self, print_opt=False)

        # modify model-related parser options 
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        self.parser = model_option_setter(self.parser)
        opt = options.Options.parse(self, print_opt=False)

        opt.isTrain = self.isTrain

        # default model name
        if opt.name == '':
            opt.name = '{model}_{which_model_netD}_size{fineSize}'.format(**vars(opt))
        else:
            opt.name = opt.name.format(**vars(opt))

        # process opt.suffix
        if opt.suffix:
            suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else ''
            opt.name = opt.name + suffix
            opt.suffix = ''

        # process opt.prefix
        if opt.prefix:
            prefix = (opt.prefix.format(**vars(opt))) if opt.prefix != '' else ''
            prefix += '-'
            opt.name = prefix + opt.name
            opt.prefix = ''

        # print options after name/prefix/suffix is modified
        if self.print_opt:
            self.print_options(opt)

        # set gpu ids
        str_ids = opt.gpu_ids
        if isinstance(opt.gpu_ids, str):
            str_ids = opt.gpu_ids.split(',')
        opt.gpu_ids = []
        for str_id in str_ids:
            id = int(str_id)
            if id >= 0:
                opt.gpu_ids.append(id)
            if len(opt.gpu_ids) > 0 and torch.cuda.is_available():
                torch.cuda.set_device(opt.gpu_ids[0])

        # check both image paths are specified
        assert(opt.real_im_path and opt.fake_im_path)
        return opt
Пример #5
0
    def gather_options(self):
        args, _ = self.parser.parse_known_args()

        # Update model-related parser options
        model_option_setter = models.get_option_setter(args.model)
        parser, str_keys, val_keys, bool_keys = model_option_setter(
            self.parser, self.is_train)
        args, _ = parser.parse_known_args()
        self.parser = parser

        self.str_keys += str_keys
        self.val_keys += val_keys
        self.bool_keys += bool_keys
        return parser.parse_args()
Пример #6
0
    def gather_options(self):
        if not self.initialized:
            parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        opt, _ = parser.parse_known_args()

        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()

        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        self.parser = parser
        return parser.parse_args()
Пример #7
0
def get_models_parsers():
    """
    Create a dict {model_name: parser} in which each parser hold arguments
    specific to a model
    """
    model_names = get_models_names()
    model_parsers = {}

    for model_name in model_names:
        parser = argparse.ArgumentParser()
        model_option_setter = get_option_setter(model_name)

        try:
            model_parsers[model_name] = model_option_setter(parser, True)
        except:
            pass

    return model_parsers
Пример #8
0
    def gather_options(self):

        parser = self.parser
        # get the basic option
        opt, _ = parser.parse_known_args()

        # modify additional option
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()

        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        self.parser = parser
        return parser.parse_args()
Пример #9
0
    def gather_options(self):
        if not self.initialized:  # check if it has been initialized
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, _ = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(self, parser)
        opt, _ = parser.parse_known_args()  # parse again with new defaults

        # save and return the parser
        self.parser = parser
        return parser.parse_args()
    def gather_options(self):
        # initialize parser with basic options
        if not self.initialized:
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, _ = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()  # parse again with the new defaults

        self.parser = parser

        return parser.parse_args()
Пример #11
0
    def gather_options(self):
        # initialize parser with basic options
        if not self.initialized:
            '''
            设置一个解析器
            使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。
            解析器类是 ArgumentParser 。构造方法接收几个参数来设置用于程序帮助文本的描述信息以及其他全局的行为或设置。
            argparse.ArgumentDefaultsHelpFormatter 在每个选项的帮助信息后面输出他们对应的缺省值,如果有设置的话。
            之后再初始化解析器,并将add_argument后的解析器返回
            '''
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        # opt返回所有参数及其默认值(或者在命令行中给定的值)
        # 例如:Namespace(batch_size=1, dataroot='.', fineSize=256, input_nc=3, loadSize=286, ndf=64, netD='basic', ngf=64, output_nc=3)
        # 使用parser.parse_known_args()方法比parser.parse_args()方法鲁棒性更好,前者在运行时指定了程序中没有的参数时,不会报错,而是保存在第二个返回参数中
        opt, _ = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model

        # model_option_setter得到静态modify_commandline_options方法入口
        model_option_setter = models.get_option_setter(model_name)

        # 传递base_options的option参数,并根据相应model的option参数,返回新的parser
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()  # parse again with the new defaults

        # modify dataset-related parser options
        # 同样的,根据dataset的option参数返回新的parser
        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        self.parser = parser

        return parser.parse_args()
Пример #12
0
    def gather_options_jupyter(self):

        argstr = ["--names","rs_model","--dataset", "example", "--list_start", "0", "--list_end", "10", \
        "--dataset_mode","allface","--gpu_ids","0,1","--netG","rotatespade","--norm_G","spectralsyncbatch", \
            "--model","rotatespade","--label_nc","5","--nThreads","3","--heatmap_size","2.5","--chunk_size","1", \
        "--no_gaussian_landmark","--multi_gpu","--device_count","2","--render_thread","1","--label_mask", \
        "--align","--erode_kernel","21","--yaw_poses","0","30"]
        # argstr_part = ["--name","face","--dataset_mode", "paired", "--adaptive_spade", "--warp_ref", "--batchSize","8","--no_flow_gt"]

        # initialize parser with basic options
        if not self.initialized:
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, unknown = parser.parse_known_args(argstr)

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)

        # modify dataset-related parser options
        dataset_mode = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_mode)
        parser = dataset_option_setter(parser, self.isTrain)

        opt, unknown = parser.parse_known_args(argstr)

        # if there is opt_file, load it.
        # lt options will be overwritten
        if opt.load_from_opt_file:
            parser = self.update_options_from_file(parser, opt)

        opt = parser.parse_args(argstr)
        self.parser = parser
        return opt
Пример #13
0
    def gather_options(self):
        # """Initialize our parser with basic options(only once).
        # Add additional model-specific and dataset-specific options.
        # These options are defined in the <modify_commandline_options> function
        # in model and dataset classes.
        # """
        parser = argparse.ArgumentParser(
            formatter_class=argparse.ArgumentDefaultsHelpFormatter)
        parser = self.initialize(parser)

        opt, _ = parser.parse_known_args()

        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()

        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        self.parser = parser
        return parser.parse_args()
Пример #14
0
    def gather_options(self, infer=False):
        """使用基础选项参数初始化 parser(仅一次).
		增加额外的 model-specific 和 dataset-specific 选项
		这些选项定义在 dataset 和 model 类的 <modify_commandline_options> 函数中
		"""
        if not self.initialized:  # 检查是否已被初始化
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        if infer:
            parser.add_argument('--port',
                                required=True,
                                type=str,
                                help='推理时后端服务开放端口')
            parser.set_defaults(dataroot='./')  # 推理时不需要指定--dataroot
            parser.set_defaults(norm_max=255)  # 读取非dicom时不需要指定 norm_max
            parser.set_defaults(norm_min=0)  # 读取非dicom时不需要指定 norm_min
            parser.set_defaults(model='test')  # 读取非dicom时不需要指定 norm_min
            parser.set_defaults(dataset_mode='single')  # 推理时数据集类应为单向
        # 得到基本选项
        opt, _ = parser.parse_known_args()

        # 修改 model-related parser 选项
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()  # parse again with new defaults

        # modify dataset-related parser options
        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        # 保存并返回 parser
        self.parser = parser
        return parser.parse_args()
    def gather_options(self):
        # initialize parser with basic options
        if not self.initialized:
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)            
            parser = self.initialize(parser)

        # get the basic options
        opt, _ = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args() # parse again with the new defaults

        # modify dataset-related parser options
        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        self.parser = parser
        
        return parser.parse_args()
    def gather_options(self):
        parser = argparse.ArgumentParser(
            prog='configurations',
            description='Settings:',
            formatter_class=argparse.ArgumentDefaultsHelpFormatter)
        parser = self.initialize(parser)

        # get the basic settings
        opt, _ = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()  # parse again with new defaults

        # modify dataset-related parser options
        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        # save and return
        self.parser = parser
        return parser.parse_args()
Пример #17
0
    def get_schema(self, allow_nan=False):
        if not self.initialized:
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        opt = argparse.Namespace()
        self._json_parse_known_args(parser, opt, {})

        named_parsers = {"": parser}
        for model_name in models.get_models_names():
            if self.isTrain and model_name in ["test"]:
                continue
            setter = models.get_option_setter(model_name)
            model_parser = argparse.ArgumentParser()
            setter(model_parser)
            self._json_parse_known_args(model_parser, opt, {})
            named_parsers[model_name] = model_parser

        self.opt = opt
        self.parser = parser
        json_vals = self.to_json()

        for k in json_vals:
            if json_vals[k] is None:
                json_vals[k] = "None"
            if not allow_nan:
                if json_vals[k] == float("inf"):
                    json_vals[k] = 1e100
                if json_vals[k] == float("-inf"):
                    json_vals[k] = -1e100
                if type(json_vals[k]) == float and math.isnan(json_vals[k]):
                    json_vals[k] = 0

        from pydantic import create_model
        schema = create_model(type(self).__name__, **json_vals).schema()

        option_tags = defaultdict(list)

        for parser_name in named_parsers:
            current_parser = named_parsers[parser_name]

            for action_group in current_parser._action_groups:
                for action in action_group._group_actions:
                    if isinstance(action, _HelpAction):
                        continue

                    if len(parser_name) > 0:
                        option_tags[action.dest].append(parser_name)

                    if action.dest in schema["properties"]:
                        field = schema["properties"][action.dest]
                        description = action.help if action.help is not None else ""
                        for c in "#*<>":
                            description = description.replace(c, "\\" + c)
                        field["description"] = description
                        if "title" in field:
                            del field["title"]

        for tagged in option_tags:
            tags = " | ".join(option_tags[tagged])
            schema["properties"][tagged][
                "description"] = "[" + tags + "]\n\n" + schema["properties"][
                    tagged]["description"]

        return schema
Пример #18
0
        self.initialized = True
        return parser

    def gather_options(self):
        # initialize parser with basic options
        if not self.initialized:
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, unknown = parser.parse_known_args()

        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)

        # modify dataset-related parser options
        dataset_mode = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_mode)
        parser = dataset_option_setter(parser, self.isTrain)

        opt, unknown = parser.parse_known_args()

        # if there is opt_file, load it.
        # The previous default options will be overwritten
        if opt.load_from_opt_file:
            parser = self.update_options_from_file(parser, opt)

        opt = parser.parse_args()
Пример #19
0
    def gather_options(self):
        """Initialize our parser with basic options(only once).
        Add additional model-specific and dataset-specific options.
        These options are defined in the <modify_commandline_options> function
        in model and dataset classes.
        """
        if not self.initialized:  # check if it has been initialized
            parser = argparse.ArgumentParser(
                formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, _ = parser.parse_known_args()

        # modify model-related parser options
        # modify model-related parser options
        model_name = opt.model
        model_option_setter = models.get_option_setter(model_name)
        parser = model_option_setter(parser, self.isTrain)
        opt, _ = parser.parse_known_args()  # parse again with new defaults
        # modify dataset-related parser options
        dataset_name = opt.dataset_mode
        dataset_option_setter = data.get_option_setter(dataset_name)
        parser = dataset_option_setter(parser, self.isTrain)

        # save and return the parser
        self.parser = parser
        output_opt, _ = parser.parse_known_args()

        # determine alphabet and dataroot according to dataname:
        output_opt.dataroot = dataset_catalog.datasets[output_opt.dataname]
        if self.isTrain:
            if output_opt.unlabeled_dataname is not None:
                output_opt.unlabeled_dataroot = dataset_catalog.datasets[
                    output_opt.unlabeled_dataname]
        alphabet_dict = dataset_catalog.alphabet_dict
        lex_dict = dataset_catalog.lex_dict
        for name in alphabet_dict.keys():
            if name in opt.dataname:
                output_opt.alphabet = getattr(alphabets, alphabet_dict[name])
                if output_opt.lex == '':
                    output_opt.lex = lex_dict[name]
                    lex_str = ''
                else:
                    lex_str = '_lex_' + os.path.splitext(
                        output_opt.lex.split('/')[-1])[0]
        # save to the disk
        if output_opt.name == '':
            # name is constructed from the following:
            # 1. path to the datasets - with underscore instead of / beginning from main dataset name which is taken from the list IAM/RIMES/CVL/gw
            # 2. lexicon if it's not the default one for this dataset
            # 3. resolution
            # 4. batch size
            # if changed from default:
            # 5. dim_z
            # 6. no Hierarchial Z
            # 7. one_hot_k
            # 8. if different OCR from default is used, the structure of the OCR (TPS, feature extractor and prediction layer)
            # 9. if an rnn is used, '_useRNN' is added
            # 10. noGB or GB alpha different from 1
            # 11. semi supervised parameters
            # 12. Single writer parameters
            # 13. Not optimizing G
            # 14. Use reconstruction loss instead of adversarial loss and which one
            # 15. Use only rec onstruction loss (alpha=Inf)
            output_opt.name += output_opt.name_prefix + '_' + output_opt.dataname + lex_str + output_opt.capitalize * '_CapitalizeLex' + '_GANres%s' % output_opt.resolution + '_bs%s' % output_opt.batch_size
            if output_opt.dim_z != 128:
                output_opt.name += '_dimZ%s' % output_opt.dim_z
            if output_opt.no_hier:
                output_opt.name += '_noHier'
            if output_opt.one_hot_k > 1:
                output_opt.name += '_oneHot%s' % output_opt.one_hot_k
            if output_opt.use_rnn:
                output_opt.name += '_useRNN'

            if self.isTrain:
                if output_opt.no_grad_balance:
                    output_opt.name += '_noGB'
                elif output_opt.gb_alpha != 1:
                    output_opt.name += '_GB%s' % output_opt.gb_alpha
                if output_opt.unlabeled_dataname is not None:
                    output_opt.name += '_SemiSupervised_' + output_opt.unlabeled_dataname
                    if output_opt.disjoint:
                        output_opt.name += '_disjoint'
                if output_opt.single_writer:
                    output_opt.name += '_SingleWriter'
                    if output_opt.optimize_z:
                        output_opt.name += 'OptimizeZ'
                if output_opt.not_optimize_G:
                    output_opt.name += '_NotOptimizeG'
                if output_opt.onlyOCR:
                    output_opt.name += '_OnlyOCRLoss'

        output_opt.len_vocab = len(output_opt.alphabet)
        return output_opt
Пример #20
0
    def gather_options(self):
        """Initialize our parser with basic options(only once).
        Add additional model-specific and dataset-specific options.
        These options are defined in the <modify_commandline_options> function
        in model and dataset classes.
        """
        if not self.initialized:  # check if it has been initialized
            parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
            parser = self.initialize(parser)

        # get the basic options
        opt, _ = parser.parse_known_args()

        #Phase Specific option:
        method_name = "phase_" + opt.phase + "_options"
        module = importlib.import_module('options.phase_specific_options')
        method = getattr(module, method_name)
        parser = method(parser)
        opt, _ = parser.parse_known_args()
        self.isTrain = opt.phase == 'train'

        # print('so far', opt)
        # print('str_options_from_file',str_options_from_file)

        dict_options, isLoading = self.get_all_specific_options_from_file(opt)

        # print('so far 2', dict_options)

        # parser_phase_sepcific = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
        parser = self.load_base_option(parser)

        # if isLoading:
        # print('\n\nis loading is true: {}'.format(dict_options))
        opt_spec, _ = parser.parse_known_args(dict_options)
        # print('so far 3', opt_spec)

        # print('\n\nso far so good')

        managers_option_setter = managers.get_option_setter(opt_spec.model)
        parser = managers_option_setter(parser, self.isTrain)
        # opt, _ = parser.parse_known_args()  # parse again with new defaults

        model_option_setter = models.get_option_setter(opt_spec.model)
        parser = model_option_setter(parser, self.isTrain)
        # opt, _ = parser.parse_known_args()  # parse again with new defaults

        # modify dataset-related parser options
        dataset_option_setter = data.get_option_setter(opt_spec.dataset)
        # print(dataset_option_setter)
        parser = dataset_option_setter(parser, self.isTrain)
        # opt, _ = parser.parse_known_args()

        # parser_all = method(parser_phase_sepcific)
        # parser_all = self.initialize(parser_all)
        self.parser = parser


        # print('so far so good - last')

        options = parser.parse_args()
        # print(options)

        # print('so far so good - last last')
        # print('\n\n\n',options)
        # print('\n\n\n',options2)

        # print('so far so good')
        # todelete = []
        # for idx,elem in enumerate(dict_options):
        #     kk = elem.replace('--','').split('=')[0]
        #     if not hasattr(options2, kk):
        #         todelete.append(idx)
        # print('deleting elements: {}'.format(todelete))
        # for i in todelete:
        #     del dict_options[i]
        if isLoading:
            options2 = parser.parse_known_args(dict_options)
            # print('so far so good - last last last')
            for kk, vv in vars(options2[0]).items():
                if hasattr(options, kk) and getattr(options, kk) != vv:
                    old = getattr(options, kk)
                    setattr(options, kk, vv)
                    print('updating option: {} from {} to {}'.format(kk,old, vv))
                    
        return options