Esempio n. 1
0
def create_parser(general_defaults={}, constants={}, subcommand=MAIN):
    """Sets the accepted command options, variables, defaults and help

    """

    defaults = general_defaults['BigMLer']

    version = pkg_resources.require("BigMLer")[0].version
    version_text = """\
BigMLer %s - A Higher Level API to BigML's API
Copyright 2012-2019 BigML

Licensed under the Apache License, Version 2.0 (the \"License\"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.""" % version
    constants['version_text'] = version_text
    main_parser = argparse.ArgumentParser(
        description="A higher level API to BigML's API.",
        epilog="Happy predictive modeling!",
        formatter_class=argparse.RawTextHelpFormatter)
    main_parser.add_argument('--version',
                             action='version', version=version_text)
    subparsers = main_parser.add_subparsers()

    # list of options
    common_options = get_common_options(defaults=defaults, constants=constants)
    delete_options = get_delete_options(defaults=defaults)
    source_options = get_source_options(defaults=defaults)
    dataset_options = get_dataset_options(defaults=defaults)
    test_options = get_test_options(defaults=defaults)
    multi_label_options = get_multi_label_options(defaults=defaults)

    # subcommand options
    subcommand_options = {}
    # specific options
    subcommand_options["main"] = get_main_options(defaults=defaults,
                                                  constants=constants)
    # general options
    subcommand_options["main"].update(common_options)
    subcommand_options["main"].update(source_options)
    subcommand_options["main"].update(dataset_options)
    subcommand_options["main"].update(multi_label_options)
    subcommand_options["main"].update(test_options)
    subcommand_options["main"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--model-tag': delete_options['--model-tag'],
        '--ensemble-tag': delete_options['--ensemble-tag'],
        '--prediction-tag': delete_options['--prediction-tag'],
        '--batch-prediction-tag': delete_options['--batch-prediction-tag']})

    main_options = subcommand_options["main"]

    subcommand_options["dataset"] = dataset_options
    subcommand_options["dataset"].update(get_dataset_trans_options( \
        defaults=defaults))
    subcommand_options["dataset"].update(common_options)
    subcommand_options["dataset"].update(source_options)
    subcommand_options["main"].update(multi_label_options)
    subcommand_options["dataset"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--max-categories': subcommand_options['main']['--max-categories'],
        '--labels': subcommand_options['main']['--labels'],
        '--multi-label': subcommand_options['main']['--multi-label'],
        '--objective': subcommand_options['main']['--objective'],
        '--reports': subcommand_options['main']['--reports']})

    dataset_sampling_options = { \
        '--replacement': main_options['--replacement'],
        '--sample-rate': main_options['--sample-rate'],
        '--seed': main_options['--seed']}

    defaults = general_defaults["BigMLer whizzml"]
    subcommand_options["whizzml"] = get_whizzml_options(defaults=defaults)
    subcommand_options["whizzml"].update(common_options)
    defaults = general_defaults["BigMLer analyze"]
    subcommand_options["analyze"] = get_analyze_options(defaults=defaults)
    subcommand_options["analyze"].update(common_options)
    # we add the options that should be transmitted to bigmler main subcommands
    # in analyze
    subcommand_options["analyze"].update({
        '--dataset': dataset_options['--dataset'],
        '--objective': main_options['--objective'],
        '--max-parallel-models': main_options['--max-parallel-models'],
        '--max-parallel-evaluations': main_options[
            '--max-parallel-evaluations'],
        '--model-fields': main_options['--model-fields'],
        '--balance': main_options['--balance'],
        '--no-balance': main_options['--no-balance'],
        '--number-of-models': main_options['--number-of-models'],
        '--missing-splits': main_options['--missing-splits'],
        '--pruning': main_options['--pruning'],
        '--weight-field': main_options['--weight-field'],
        '--ensemble-sample-no-replacement': main_options[ \
            '--ensemble-sample-no-replacement'],
        '--ensemble-sample-rate': main_options['--ensemble-sample-rate'],
        '--ensemble-sample-seed': main_options['--ensemble-sample-seed'],
        '--objective-weights': main_options['--objective-weights'],
        '--model-attributes': main_options['--model-attributes'],
        '--ensemble-attributes': main_options['--ensemble-attributes'],
        '--boosting': main_options['--boosting'],
        '--boosting-iterations': main_options['--boosting-iterations'],
        '--early-holdout': main_options['--early-holdout'],
        '--no-early-out-of-bag': main_options['--no-early-out-of-bag'],
        '--learning-rate': main_options['--learning-rate'],
        '--no-step-out-of-bag': main_options['--no-step-out-of-bag'],
        '--randomize': main_options['--randomize'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset'],
        '--datasets': main_options['--datasets'],
        '--dataset-file': main_options['--dataset-file'],
        '--dataset-tag': delete_options['--dataset-tag']})
    subcommand_options["analyze"].update(dataset_sampling_options)

    defaults = general_defaults["BigMLer cluster"]
    subcommand_options["cluster"] = get_cluster_options(defaults=defaults)
    # general options
    subcommand_options["cluster"].update(common_options)
    subcommand_options["cluster"].update(source_options)
    subcommand_options["cluster"].update(dataset_options)
    subcommand_options["cluster"].update(test_options)
    subcommand_options["cluster"].update(dataset_sampling_options)
    subcommand_options["cluster"].update({
        '--cpp': main_options['--cpp'],
        '--fields-map': main_options['--fields-map'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--cluster-tag': delete_options['--cluster-tag'],
        '--centroid-tag': delete_options['--centroid-tag'],
        '--batch-centroid-tag': delete_options['--batch-centroid-tag'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--default-numeric-value': main_options['--default-numeric-value'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset']})

    defaults = general_defaults["BigMLer anomaly"]
    subcommand_options["anomaly"] = get_anomaly_options(defaults=defaults)
    # general options
    subcommand_options["anomaly"].update(common_options)
    subcommand_options["anomaly"].update(source_options)
    subcommand_options["anomaly"].update(dataset_options)
    subcommand_options["anomaly"].update(test_options)
    subcommand_options["anomaly"].update(dataset_sampling_options)
    subcommand_options["anomaly"].update({
        '--cpp': main_options['--cpp'],
        '--fields-map': main_options['--fields-map'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--anomaly-tag': delete_options['--anomaly-tag'],
        '--anomaly-score-tag': delete_options['--anomaly-score-tag'],
        '--batch-anomaly-score-tag': delete_options[
            '--batch-anomaly-score-tag'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--default-numeric-value': main_options['--default-numeric-value'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset']})

    defaults = general_defaults["BigMLer sample"]
    subcommand_options["sample"] = get_sample_options(defaults=defaults)
    # general options
    subcommand_options["sample"].update(common_options)
    subcommand_options["sample"].update(source_options)
    subcommand_options["sample"].update(dataset_options)
    subcommand_options["sample"].update({
        '--cpp': main_options['--cpp'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--sample-tag': delete_options['--sample-tag'],
        '--reports': main_options['--reports']})

    subcommand_options["delete"] = delete_options
    subcommand_options["delete"].update(common_options)

    defaults = general_defaults["BigMLer report"]
    subcommand_options["report"] = get_report_options(defaults=defaults)

    defaults = general_defaults["BigMLer export"]
    subcommand_options["export"] = get_export_options(defaults=defaults)
    export_common_options_list = ['clear-logs', 'username', 'api-key',
                                  'version', 'org-project',
                                  'output-dir', 'verbosity',
                                  'resume', 'stack-level', 'debug', 'store']
    export_common_options = {}
    for option in export_common_options_list:
        option = '--%s' % option
        export_common_options.update({option: common_options[option]})
    subcommand_options["export"].update(export_common_options)

    defaults = general_defaults["BigMLer reify"]
    subcommand_options["reify"] = get_reify_options(defaults=defaults)
    reify_common_options_list = ['clear-logs', 'username', 'api-key',
                                 'version', 'org-project',
                                 'output-dir', 'verbosity',
                                 'resume', 'stack-level', 'debug', 'store']
    reify_common_options = {}
    for option in reify_common_options_list:
        option = '--%s' % option
        reify_common_options.update({option: common_options[option]})
    subcommand_options["reify"].update(reify_common_options)

    subcommand_options["project"] = get_project_options(defaults=defaults)
    subcommand_options["project"].update({
        '--project': source_options['--project'],
        '--project-id': source_options['--project-id'],
        '--name': common_options['--name'],
        '--description': common_options['--description'],
        '--category': common_options['--category'],
        '--tag': common_options['--tag'],
        '--resources-file': main_options['--resources-log']})
    project_common_options = {}
    for option in reify_common_options_list:
        option = '--%s' % option
        project_common_options.update({option: common_options[option]})
    subcommand_options["project"].update(project_common_options)

    defaults = general_defaults["BigMLer association"]
    subcommand_options["association"] = get_association_options( \
        defaults=defaults)
    # general options
    subcommand_options["association"].update(common_options)
    subcommand_options["association"].update(source_options)
    subcommand_options["association"].update(dataset_options)
    subcommand_options["association"].update(test_options)
    subcommand_options["association"].update(dataset_sampling_options)
    subcommand_options["association"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--association-tag': delete_options['--association-tag'],
        '--default-numeric-value': main_options['--default-numeric-value'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv']})

    defaults = general_defaults["BigMLer logistic regression"]
    subcommand_options["logistic-regression"] = \
        get_logistic_regression_options( \
        defaults=defaults)
    # general options
    subcommand_options["logistic-regression"].update(common_options)
    subcommand_options["logistic-regression"].update(source_options)
    subcommand_options["logistic-regression"].update(dataset_options)
    subcommand_options["logistic-regression"].update(test_options)
    subcommand_options["logistic-regression"].update(dataset_sampling_options)
    subcommand_options["logistic-regression"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--logistic-regression-tag': delete_options[
            '--logistic-regression-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--default-numeric-value': main_options['--default-numeric-value'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--to-dataset': main_options['--to-dataset'],
        '--no-csv': main_options['--no-csv'],
        '--fields-map': main_options['--fields-map'],
        '--dataset-off': main_options['--dataset-off'],
        '--operating-point': main_options['--operating-point'],
        '--max-parallel-evaluations': main_options[
            '--max-parallel-evaluations'],
        '--cross-validation-rate': main_options[
            '--cross-validation-rate'],
        '--number-of-evaluations': main_options[
            '--number-of-evaluations'],
        '--batch-prediction-attributes': main_options[
            '--batch-prediction-attributes'],
        '--prediction-attributes': main_options[
            '--prediction-attributes'],
        '--prediction-tag': delete_options['--prediction-tag'],
        '--batch-prediction-tag': delete_options['--batch-prediction-tag'],
        '--no-no-csv': main_options['--no-no-csv']})



    defaults = general_defaults["BigMLer linear regression"]
    subcommand_options["linear-regression"] = \
        get_linear_regression_options( \
        defaults=defaults)
    # general options
    subcommand_options["linear-regression"].update(common_options)
    subcommand_options["linear-regression"].update(source_options)
    subcommand_options["linear-regression"].update(dataset_options)
    subcommand_options["linear-regression"].update(test_options)
    subcommand_options["linear-regression"].update(dataset_sampling_options)
    subcommand_options["linear-regression"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--linear-regression-tag': delete_options[
            '--linear-regression-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--default-numeric-value': main_options['--default-numeric-value'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--to-dataset': main_options['--to-dataset'],
        '--no-csv': main_options['--no-csv'],
        '--fields-map': main_options['--fields-map'],
        '--dataset-off': main_options['--dataset-off'],
        '--field-codings': subcommand_options['logistic-regression'][ \
            '--field-codings'],
        '--bias': subcommand_options['logistic-regression'][ \
            '--bias'],
        '--no-bias': subcommand_options['logistic-regression'][ \
            '--no-bias'],
        '--max-parallel-evaluations': main_options[
            '--max-parallel-evaluations'],
        '--cross-validation-rate': main_options[
            '--cross-validation-rate'],
        '--number-of-evaluations': main_options[
            '--number-of-evaluations'],
        '--batch-prediction-attributes': main_options[
            '--batch-prediction-attributes'],
        '--prediction-attributes': main_options[
            '--prediction-attributes'],
        '--prediction-tag': delete_options['--prediction-tag'],
        '--batch-prediction-tag': delete_options['--batch-prediction-tag'],
        '--no-no-csv': main_options['--no-no-csv']})



    # time-series
    defaults = general_defaults["BigMLer time-series"]
    subcommand_options["time-series"] = get_time_series_options( \
        defaults=defaults)

    subcommand_options["time-series"].update(common_options)
    subcommand_options["time-series"].update(source_options)
    subcommand_options["time-series"].update(dataset_options)
    subcommand_options["time-series"].update(test_options)
    subcommand_options["time-series"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--fields-map': main_options['--fields-map'],
        '--time-series-tag': delete_options[
            '--time-series-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--prediction-header': main_options['--prediction-header'],
        '--default-numeric-value': main_options['--default-numeric-value'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote']})


    defaults = general_defaults["BigMLer execute"]
    subcommand_options["execute"] = get_execute_options(defaults=defaults)
    execute_common_options = {}
    for option in common_options:
        execute_common_options.update({option: common_options[option]})
    subcommand_options["execute"].update(execute_common_options)
    subcommand_options["execute"].update(
        {'--project': source_options['--project'],
         '--upgrade': subcommand_options['whizzml']['--upgrade'],
         '--project-id': source_options['--project-id'],
         '--script-tag': delete_options['--script-tag'],
         '--library-tag': delete_options['--library-tag'],
         '--execution-tag': delete_options['--execution-tag']})


    defaults = {}
    subcommand_options["retrain"] = get_retrain_options(defaults=defaults)
    # shared options are like the ones in reify
    subcommand_options["retrain"].update(reify_common_options)
    subcommand_options["retrain"].update( \
        {'--output': subcommand_options['reify']['--output'],
         '--org-project': common_options['--org-project'],
         '--upgrade': subcommand_options['reify']['--upgrade'],
         '--model-tag': delete_options['--model-tag'],
         '--ensemble-tag': delete_options['--ensemble-tag'],
         '--logistic-regression-tag': delete_options['--logistic-regression-tag'],
         '--deepnet-tag': delete_options['--deepnet-tag'],
         '--cluster-tag': delete_options['--cluster-tag'],
         '--anomaly-tag': delete_options['--anomaly-tag'],
         '--association-tag': delete_options['--association-tag'],
         '--time-series-tag': delete_options['--time-series-tag'],
         '--topic-model-tag': delete_options['--topic-model-tag']})


    defaults = general_defaults["BigMLer topic model"]
    subcommand_options["topic-model"] = get_topic_model_options(
        defaults=defaults)
    # general options
    subcommand_options["topic-model"].update(common_options)
    subcommand_options["topic-model"].update(source_options)
    subcommand_options["topic-model"].update(dataset_options)
    subcommand_options["topic-model"].update(test_options)
    subcommand_options["topic-model"].update(dataset_sampling_options)
    subcommand_options["topic-model"].update({
        '--cpp': main_options['--cpp'],
        '--fields-map': main_options['--fields-map'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--topic-model-tag': delete_options['--topic-model-tag'],
        '--topic-distribution-tag': delete_options['--topic-distribution-tag'],
        '--batch-topic-distribution-tag': delete_options[ \
            '--batch-topic-distribution-tag'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset']})


    defaults = general_defaults["BigMLer deepnet"]
    subcommand_options["deepnet"] = \
        get_deepnet_options(defaults=defaults)
    # general options
    subcommand_options["deepnet"].update(common_options)
    subcommand_options["deepnet"].update(source_options)
    subcommand_options["deepnet"].update(dataset_options)
    subcommand_options["deepnet"].update(test_options)
    subcommand_options["deepnet"].update(dataset_sampling_options)
    subcommand_options["deepnet"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--deepnet-tag': delete_options[
            '--deepnet-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--default-numeric-value': main_options['--default-numeric-value'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--to-dataset': main_options['--to-dataset'],
        '--no-csv': main_options['--no-csv'],
        '--fields-map': main_options['--fields-map'],
        '--operating-point': main_options['--operating-point'],
        '--dataset-off': main_options['--dataset-off'],
        '--max-parallel-evaluations': main_options[
            '--max-parallel-evaluations'],
        '--cross-validation-rate': main_options[
            '--cross-validation-rate'],
        '--number-of-evaluations': main_options[
            '--number-of-evaluations'],
        '--batch-prediction-attributes': main_options[
            '--batch-prediction-attributes'],
        '--prediction-attributes': main_options[
            '--prediction-attributes'],
        '--prediction-tag': delete_options['--prediction-tag'],
        '--batch-prediction-tag': delete_options['--batch-prediction-tag'],
        '--no-no-csv': main_options['--no-no-csv']})

    defaults = general_defaults["BigMLer PCA"]
    subcommand_options["pca"] = \
        get_pca_options( \
        defaults=defaults)
    # general options
    subcommand_options["pca"].update(common_options)
    subcommand_options["pca"].update(source_options)
    subcommand_options["pca"].update(dataset_options)
    subcommand_options["pca"].update(test_options)
    subcommand_options["pca"].update(dataset_sampling_options)
    subcommand_options["pca"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--pca-tag': delete_options[
            '--pca-tag'],
        '--projection-tag': delete_options[
            '--projection-tag'],
        '--batch-projection-tag': delete_options[
            '--batch-projection-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--to-dataset': main_options['--to-dataset'],
        '--no-csv': main_options['--no-csv'],
        '--fields-map': main_options['--fields-map'],
        '--dataset-off': main_options['--dataset-off'],
        '--no-no-csv': main_options['--no-no-csv']})


    subparser = subparsers.add_parser(subcommand)

    defaults = general_defaults["BigMLer Fusion"]
    subcommand_options["fusion"] = get_fusion_options(defaults=defaults)
    # general options
    subcommand_options["fusion"].update(common_options)
    subcommand_options["fusion"].update(test_options)
    subcommand_options["fusion"].update(source_options)
    subcommand_options["fusion"].update(dataset_options)
    del(subcommand_options["fusion"]["--train"])
    del(subcommand_options["fusion"]["--source"])
    del(subcommand_options["fusion"]["--source-file"])
    del(subcommand_options["fusion"]["--dataset"])
    del(subcommand_options["fusion"]["--datasets"])
    del(subcommand_options["fusion"]["--dataset-file"])
    subcommand_options["fusion"].update({
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--operating-point': main_options['--operating-point'],
        '--reports': main_options['--reports'],
         '--project-id': source_options['--project-id'],
         '--project': source_options['--project'],
        '--remote': main_options['--remote'],
        '--batch-prediction-attributes': main_options[
            '--batch-prediction-attributes'],
        '--prediction-attributes': main_options[
            '--prediction-attributes'],
        '--prediction-tag': delete_options['--prediction-tag'],
        '--batch-prediction-tag': delete_options['--batch-prediction-tag'],
        '--no-batch': main_options['--no-batch'],
        '--evaluate': main_options['--evaluate'],
        '--to-dataset': main_options['--to-dataset'],
        '--no-csv': main_options['--no-csv'],
        '--fields-map': main_options['--fields-map'],
        '--dataset-off': main_options['--dataset-off'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--locale': main_options['--locale'],
        '--training-separator': main_options['--training-separator'],
        '--fusion-tag': delete_options['--fusion-tag']})

    subparser = subparsers.add_parser(subcommand)

    parser_add_options(subparser, subcommand_options[subcommand])

    # options to be transmitted from analyze to main
    chained_options = [
        "--debug", "--username", "--api-key", "--resources-log",
        "--store", "--clear-logs", "--max-parallel-models",
        "--max-parallel-evaluations", "--objective", "--tag",
        "--no-tag", "--no-debug", "--model-fields", "--balance",
        "--verbosity", "--resume", "--stack_level", "--no-balance",
        "--args-separator", "--name"]

    return main_parser, chained_options, subcommand_options
Esempio n. 2
0
def create_parser(general_defaults={}, constants={}, subcommand=MAIN):
    """Sets the accepted command options, variables, defaults and help

    """

    defaults = general_defaults['BigMLer']

    version = pkg_resources.require("BigMLer")[0].version
    version_text = """\
BigMLer %s - A Higher Level API to BigML's API
Copyright 2012-2018 BigML

Licensed under the Apache License, Version 2.0 (the \"License\"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.""" % version
    constants['version_text'] = version_text
    main_parser = argparse.ArgumentParser(
        description="A higher level API to BigML's API.",
        epilog="Happy predictive modeling!",
        formatter_class=argparse.RawTextHelpFormatter)
    main_parser.add_argument('--version',
                             action='version', version=version_text)
    subparsers = main_parser.add_subparsers()

    # list of options
    common_options = get_common_options(defaults=defaults, constants=constants)
    delete_options = get_delete_options(defaults=defaults)
    source_options = get_source_options(defaults=defaults)
    dataset_options = get_dataset_options(defaults=defaults)
    test_options = get_test_options(defaults=defaults)
    multi_label_options = get_multi_label_options(defaults=defaults)

    # subcommand options
    subcommand_options = {}
    # specific options
    subcommand_options["main"] = get_main_options(defaults=defaults,
                                                  constants=constants)
    # general options
    subcommand_options["main"].update(common_options)
    subcommand_options["main"].update(source_options)
    subcommand_options["main"].update(dataset_options)
    subcommand_options["main"].update(multi_label_options)
    subcommand_options["main"].update(test_options)
    subcommand_options["main"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--model-tag': delete_options['--model-tag'],
        '--ensemble-tag': delete_options['--ensemble-tag'],
        '--prediction-tag': delete_options['--prediction-tag'],
        '--batch-prediction-tag': delete_options['--batch-prediction-tag']})

    main_options = subcommand_options["main"]

    dataset_sampling_options = { \
        '--replacement': main_options['--replacement'],
        '--sample-rate': main_options['--sample-rate'],
        '--seed': main_options['--seed']}

    defaults = general_defaults["BigMLer whizzml"]
    subcommand_options["whizzml"] = get_whizzml_options(defaults=defaults)
    subcommand_options["whizzml"].update(common_options)
    defaults = general_defaults["BigMLer analyze"]
    subcommand_options["analyze"] = get_analyze_options(defaults=defaults)
    subcommand_options["analyze"].update(common_options)
    # we add the options that should be transmitted to bigmler main subcommands
    # in analyze
    subcommand_options["analyze"].update({
        '--dataset': dataset_options['--dataset'],
        '--objective': main_options['--objective'],
        '--max-parallel-models': main_options['--max-parallel-models'],
        '--max-parallel-evaluations': main_options[
            '--max-parallel-evaluations'],
        '--model-fields': main_options['--model-fields'],
        '--balance': main_options['--balance'],
        '--no-balance': main_options['--no-balance'],
        '--number-of-models': main_options['--number-of-models'],
        '--missing-splits': main_options['--missing-splits'],
        '--pruning': main_options['--pruning'],
        '--weight-field': main_options['--weight-field'],
        '--ensemble-sample-no-replacement': main_options[ \
            '--ensemble-sample-no-replacement'],
        '--ensemble-sample-rate': main_options['--ensemble-sample-rate'],
        '--ensemble-sample-seed': main_options['--ensemble-sample-seed'],
        '--objective-weights': main_options['--objective-weights'],
        '--model-attributes': main_options['--model-attributes'],
        '--ensemble-attributes': main_options['--ensemble-attributes'],
        '--boosting': main_options['--boosting'],
        '--boosting-iterations': main_options['--boosting-iterations'],
        '--early-holdout': main_options['--early-holdout'],
        '--no-early-out-of-bag': main_options['--no-early-out-of-bag'],
        '--learning-rate': main_options['--learning-rate'],
        '--no-step-out-of-bag': main_options['--no-step-out-of-bag'],
        '--randomize': main_options['--randomize'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset'],
        '--datasets': main_options['--datasets'],
        '--dataset-file': main_options['--dataset-file'],
        '--dataset-tag': delete_options['--dataset-tag']})
    subcommand_options["analyze"].update(dataset_sampling_options)

    defaults = general_defaults["BigMLer cluster"]
    subcommand_options["cluster"] = get_cluster_options(defaults=defaults)
    # general options
    subcommand_options["cluster"].update(common_options)
    subcommand_options["cluster"].update(source_options)
    subcommand_options["cluster"].update(dataset_options)
    subcommand_options["cluster"].update(test_options)
    subcommand_options["cluster"].update(dataset_sampling_options)
    subcommand_options["cluster"].update({
        '--cpp': main_options['--cpp'],
        '--fields-map': main_options['--fields-map'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--cluster-tag': delete_options['--cluster-tag'],
        '--centroid-tag': delete_options['--centroid-tag'],
        '--batch-centroid-tag': delete_options['--batch-centroid-tag'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset']})

    defaults = general_defaults["BigMLer anomaly"]
    subcommand_options["anomaly"] = get_anomaly_options(defaults=defaults)
    # general options
    subcommand_options["anomaly"].update(common_options)
    subcommand_options["anomaly"].update(source_options)
    subcommand_options["anomaly"].update(dataset_options)
    subcommand_options["anomaly"].update(test_options)
    subcommand_options["anomaly"].update(dataset_sampling_options)
    subcommand_options["anomaly"].update({
        '--cpp': main_options['--cpp'],
        '--fields-map': main_options['--fields-map'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--anomaly-tag': delete_options['--anomaly-tag'],
        '--anomaly-score-tag': delete_options['--anomaly-score-tag'],
        '--batch-anomaly-score-tag': delete_options[
            '--batch-anomaly-score-tag'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset']})

    defaults = general_defaults["BigMLer sample"]
    subcommand_options["sample"] = get_sample_options(defaults=defaults)
    # general options
    subcommand_options["sample"].update(common_options)
    subcommand_options["sample"].update(source_options)
    subcommand_options["sample"].update(dataset_options)
    subcommand_options["sample"].update({
        '--cpp': main_options['--cpp'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--sample-tag': delete_options['--sample-tag'],
        '--reports': main_options['--reports']})

    subcommand_options["delete"] = delete_options
    subcommand_options["delete"].update(common_options)

    defaults = general_defaults["BigMLer report"]
    subcommand_options["report"] = get_report_options(defaults=defaults)

    defaults = general_defaults["BigMLer export"]
    subcommand_options["export"] = get_export_options(defaults=defaults)
    export_common_options_list = ['clear-logs', 'username', 'api-key',
                                  'version',
                                  'dev', 'no-dev', 'output-dir', 'verbosity',
                                  'resume', 'stack-level', 'debug', 'store']
    export_common_options = {}
    for option in export_common_options_list:
        option = '--%s' % option
        export_common_options.update({option: common_options[option]})
    subcommand_options["export"].update(export_common_options)

    defaults = general_defaults["BigMLer reify"]
    subcommand_options["reify"] = get_reify_options(defaults=defaults)
    reify_common_options_list = ['clear-logs', 'username', 'api-key',
                                 'version',
                                 'dev', 'no-dev', 'output-dir', 'verbosity',
                                 'resume', 'stack-level', 'debug', 'store']
    reify_common_options = {}
    for option in reify_common_options_list:
        option = '--%s' % option
        reify_common_options.update({option: common_options[option]})
    subcommand_options["reify"].update(reify_common_options)

    subcommand_options["project"] = get_project_options(defaults=defaults)
    subcommand_options["project"].update({
        '--project': source_options['--project'],
        '--project-id': source_options['--project-id'],
        '--name': common_options['--name'],
        '--description': common_options['--description'],
        '--category': common_options['--category'],
        '--tag': common_options['--tag'],
        '--resources-file': main_options['--resources-log']})
    project_common_options = {}
    for option in reify_common_options_list:
        option = '--%s' % option
        project_common_options.update({option: common_options[option]})
    subcommand_options["project"].update(project_common_options)

    defaults = general_defaults["BigMLer association"]
    subcommand_options["association"] = get_association_options( \
        defaults=defaults)
    # general options
    subcommand_options["association"].update(common_options)
    subcommand_options["association"].update(source_options)
    subcommand_options["association"].update(dataset_options)
    subcommand_options["association"].update(test_options)
    subcommand_options["association"].update(dataset_sampling_options)
    subcommand_options["association"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--association-tag': delete_options['--association-tag'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv']})

    defaults = general_defaults["BigMLer logistic regression"]
    subcommand_options["logistic-regression"] = \
        get_logistic_regression_options( \
        defaults=defaults)
    # general options
    subcommand_options["logistic-regression"].update(common_options)
    subcommand_options["logistic-regression"].update(source_options)
    subcommand_options["logistic-regression"].update(dataset_options)
    subcommand_options["logistic-regression"].update(test_options)
    subcommand_options["logistic-regression"].update(dataset_sampling_options)
    subcommand_options["logistic-regression"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--logistic-regression-tag': delete_options[
            '--logistic-regression-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--to-dataset': main_options['--to-dataset'],
        '--no-csv': main_options['--no-csv'],
        '--fields-map': main_options['--fields-map'],
        '--dataset-off': main_options['--dataset-off'],
        '--operating-point': main_options['--operating-point'],
        '--max-parallel-evaluations': main_options[
            '--max-parallel-evaluations'],
        '--cross-validation-rate': main_options[
            '--cross-validation-rate'],
        '--number-of-evaluations': main_options[
            '--number-of-evaluations'],
        '--no-no-csv': main_options['--no-no-csv']})

    # time-series
    defaults = general_defaults["BigMLer time-series"]
    subcommand_options["time-series"] = get_time_series_options( \
        defaults=defaults)

    subcommand_options["time-series"].update(common_options)
    subcommand_options["time-series"].update(source_options)
    subcommand_options["time-series"].update(dataset_options)
    subcommand_options["time-series"].update(test_options)
    subcommand_options["time-series"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--fields-map': main_options['--fields-map'],
        '--time-series-tag': delete_options[
            '--time-series-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--prediction-header': main_options['--prediction-header'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote']})


    defaults = general_defaults["BigMLer execute"]
    subcommand_options["execute"] = get_execute_options(defaults=defaults)
    execute_common_options = {}
    for option in common_options:
        execute_common_options.update({option: common_options[option]})
    subcommand_options["execute"].update(execute_common_options)
    subcommand_options["execute"].update(
        {'--project': source_options['--project'],
         '--upgrade': subcommand_options['whizzml']['--upgrade'],
         '--project-id': source_options['--project-id'],
         '--script-tag': delete_options['--script-tag'],
         '--library-tag': delete_options['--library-tag'],
         '--execution-tag': delete_options['--execution-tag']})


    defaults = {}
    subcommand_options["retrain"] = get_retrain_options(defaults=defaults)
    # shared options are like the ones in reify
    subcommand_options["retrain"].update(reify_common_options)
    subcommand_options["retrain"].update( \
        {'--output': subcommand_options['reify']['--output'],
         '--org-project': common_options['--org-project'],
         '--upgrade': subcommand_options['reify']['--upgrade'],
         '--model-tag': delete_options['--model-tag'],
         '--ensemble-tag': delete_options['--ensemble-tag'],
         '--logistic-regression-tag': delete_options['--logistic-regression-tag'],
         '--deepnet-tag': delete_options['--deepnet-tag'],
         '--cluster-tag': delete_options['--cluster-tag'],
         '--anomaly-tag': delete_options['--anomaly-tag'],
         '--association-tag': delete_options['--association-tag'],
         '--time-series-tag': delete_options['--time-series-tag'],
         '--topic-model-tag': delete_options['--topic-model-tag']})


    defaults = general_defaults["BigMLer topic model"]
    subcommand_options["topic-model"] = get_topic_model_options(
        defaults=defaults)
    # general options
    subcommand_options["topic-model"].update(common_options)
    subcommand_options["topic-model"].update(source_options)
    subcommand_options["topic-model"].update(dataset_options)
    subcommand_options["topic-model"].update(test_options)
    subcommand_options["topic-model"].update(dataset_sampling_options)
    subcommand_options["topic-model"].update({
        '--cpp': main_options['--cpp'],
        '--fields-map': main_options['--fields-map'],
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--topic-model-tag': delete_options['--topic-model-tag'],
        '--topic-distribution-tag': delete_options['--topic-distribution-tag'],
        '--batch-topic-distribution-tag': delete_options[ \
            '--batch-topic-distribution-tag'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--no-csv': main_options['--no-csv'],
        '--no-no-csv': main_options['--no-no-csv'],
        '--to-dataset': main_options['--to-dataset']})


    defaults = general_defaults["BigMLer deepnet"]
    subcommand_options["deepnet"] = \
        get_deepnet_options(defaults=defaults)
    # general options
    subcommand_options["deepnet"].update(common_options)
    subcommand_options["deepnet"].update(source_options)
    subcommand_options["deepnet"].update(dataset_options)
    subcommand_options["deepnet"].update(test_options)
    subcommand_options["deepnet"].update(dataset_sampling_options)
    subcommand_options["deepnet"].update({
        '--source-tag': delete_options['--source-tag'],
        '--dataset-tag': delete_options['--dataset-tag'],
        '--deepnet-tag': delete_options[
            '--deepnet-tag'],
        '--objective': main_options['--objective'],
        '--evaluate': main_options['--evaluate'],
        '--prediction-info': main_options['--prediction-info'],
        '--prediction-header': main_options['--prediction-header'],
        '--prediction-fields': main_options['--prediction-fields'],
        '--reports': main_options['--reports'],
        '--remote': main_options['--remote'],
        '--no-batch': main_options['--no-batch'],
        '--to-dataset': main_options['--to-dataset'],
        '--no-csv': main_options['--no-csv'],
        '--fields-map': main_options['--fields-map'],
        '--operating-point': main_options['--operating-point'],
        '--dataset-off': main_options['--dataset-off'],
        '--max-parallel-evaluations': main_options[
            '--max-parallel-evaluations'],
        '--cross-validation-rate': main_options[
            '--cross-validation-rate'],
        '--number-of-evaluations': main_options[
            '--number-of-evaluations'],
        '--no-no-csv': main_options['--no-no-csv']})

    subparser = subparsers.add_parser(subcommand)
    parser_add_options(subparser, subcommand_options[subcommand])

    # options to be transmitted from analyze to main
    chained_options = [
        "--debug", "--username", "--api-key", "--resources-log",
        "--store", "--clear-logs", "--max-parallel-models",
        "--max-parallel-evaluations", "--objective", "--tag",
        "--no-tag", "--no-debug", "--no-dev", "--model-fields", "--balance",
        "--verbosity", "--resume", "--stack_level", "--no-balance",
        "--args-separator", "--name"]

    return main_parser, chained_options
Esempio n. 3
0
def create_parser(general_defaults={}, constants={}, subcommand=MAIN):
    """Sets the accepted command options, variables, defaults and help

    """

    defaults = general_defaults["BigMLer"]

    version = pkg_resources.require("BigMLer")[0].version
    version_text = (
        """\
BigMLer %s - A Higher Level API to BigML's API
Copyright 2012-2015 BigML

Licensed under the Apache License, Version 2.0 (the \"License\"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License."""
        % version
    )
    constants["version_text"] = version_text
    main_parser = argparse.ArgumentParser(
        description="A higher level API to BigML's API.",
        epilog="Happy predictive modeling!",
        formatter_class=argparse.RawTextHelpFormatter,
    )
    main_parser.add_argument("--version", action="version", version=version_text)
    subparsers = main_parser.add_subparsers()

    # list of options
    common_options = get_common_options(defaults=defaults, constants=constants)
    delete_options = get_delete_options(defaults=defaults)
    source_options = get_source_options(defaults=defaults)
    dataset_options = get_dataset_options(defaults=defaults)
    test_options = get_test_options(defaults=defaults)
    multi_label_options = get_multi_label_options(defaults=defaults)

    # subcommand options
    subcommand_options = {}
    # specific options
    subcommand_options["main"] = get_main_options(defaults=defaults, constants=constants)
    # general options
    subcommand_options["main"].update(common_options)
    subcommand_options["main"].update(source_options)
    subcommand_options["main"].update(dataset_options)
    subcommand_options["main"].update(multi_label_options)
    subcommand_options["main"].update(test_options)
    subcommand_options["main"].update(
        {
            "--source-tag": delete_options["--source-tag"],
            "--dataset-tag": delete_options["--dataset-tag"],
            "--model-tag": delete_options["--model-tag"],
            "--ensemble-tag": delete_options["--ensemble-tag"],
            "--prediction-tag": delete_options["--prediction-tag"],
            "--batch-prediction-tag": delete_options["--batch-prediction-tag"],
        }
    )

    main_options = subcommand_options["main"]

    defaults = general_defaults["BigMLer analyze"]
    subcommand_options["analyze"] = get_analyze_options(defaults=defaults)
    subcommand_options["analyze"].update(common_options)
    # we add the options that should be transmitted to bigmler main subcommands
    # in analyze
    subcommand_options["analyze"].update(
        {
            "--dataset": dataset_options["--dataset"],
            "--objective": main_options["--objective"],
            "--max-parallel-models": main_options["--max-parallel-models"],
            "--max-parallel-evaluations": main_options["--max-parallel-evaluations"],
            "--model-fields": main_options["--model-fields"],
            "--balance": main_options["--balance"],
            "--no-balance": main_options["--no-balance"],
            "--number-of-models": main_options["--number-of-models"],
            "--sample-rate": main_options["--sample-rate"],
            "--missing-splits": main_options["--missing-splits"],
            "--pruning": main_options["--pruning"],
            "--weight-field": main_options["--weight-field"],
            "--replacement": main_options["--replacement"],
            "--objective-weights": main_options["--objective-weights"],
            "--model-attributes": main_options["--model-attributes"],
            "--ensemble-attributes": main_options["--ensemble-attributes"],
            "--tlp": main_options["--tlp"],
            "--randomize": main_options["--randomize"],
            "--no-csv": main_options["--no-csv"],
            "--no-no-csv": main_options["--no-no-csv"],
            "--to-dataset": main_options["--to-dataset"],
            "--datasets": main_options["--datasets"],
            "--dataset-file": main_options["--dataset-file"],
            "--dataset-tag": delete_options["--dataset-tag"],
        }
    )

    defaults = general_defaults["BigMLer cluster"]
    subcommand_options["cluster"] = get_cluster_options(defaults=defaults)
    # general options
    subcommand_options["cluster"].update(common_options)
    subcommand_options["cluster"].update(source_options)
    subcommand_options["cluster"].update(dataset_options)
    subcommand_options["cluster"].update(test_options)
    subcommand_options["cluster"].update(
        {
            "--cpp": main_options["--cpp"],
            "--fields-map": main_options["--fields-map"],
            "--source-tag": delete_options["--source-tag"],
            "--dataset-tag": delete_options["--dataset-tag"],
            "--cluster-tag": delete_options["--cluster-tag"],
            "--centroid-tag": delete_options["--centroid-tag"],
            "--batch-centroid-tag": delete_options["--batch-centroid-tag"],
            "--prediction-info": main_options["--prediction-info"],
            "--prediction-header": main_options["--prediction-header"],
            "--prediction-fields": main_options["--prediction-fields"],
            "--reports": main_options["--reports"],
            "--remote": main_options["--remote"],
            "--no-batch": main_options["--no-batch"],
            "--no-csv": main_options["--no-csv"],
            "--no-no-csv": main_options["--no-no-csv"],
            "--to-dataset": main_options["--to-dataset"],
        }
    )

    defaults = general_defaults["BigMLer anomaly"]
    subcommand_options["anomaly"] = get_anomaly_options(defaults=defaults)
    # general options
    subcommand_options["anomaly"].update(common_options)
    subcommand_options["anomaly"].update(source_options)
    subcommand_options["anomaly"].update(dataset_options)
    subcommand_options["anomaly"].update(test_options)
    subcommand_options["anomaly"].update(
        {
            "--cpp": main_options["--cpp"],
            "--fields-map": main_options["--fields-map"],
            "--source-tag": delete_options["--source-tag"],
            "--dataset-tag": delete_options["--dataset-tag"],
            "--anomaly-tag": delete_options["--anomaly-tag"],
            "--anomaly-score-tag": delete_options["--anomaly-score-tag"],
            "--batch-anomaly-score-tag": delete_options["--batch-anomaly-score-tag"],
            "--prediction-info": main_options["--prediction-info"],
            "--prediction-header": main_options["--prediction-header"],
            "--prediction-fields": main_options["--prediction-fields"],
            "--reports": main_options["--reports"],
            "--remote": main_options["--remote"],
            "--no-batch": main_options["--no-batch"],
            "--no-csv": main_options["--no-csv"],
            "--no-no-csv": main_options["--no-no-csv"],
            "--to-dataset": main_options["--to-dataset"],
        }
    )

    defaults = general_defaults["BigMLer sample"]
    subcommand_options["sample"] = get_sample_options(defaults=defaults)
    # general options
    subcommand_options["sample"].update(common_options)
    subcommand_options["sample"].update(source_options)
    subcommand_options["sample"].update(dataset_options)
    subcommand_options["sample"].update(
        {
            "--cpp": main_options["--cpp"],
            "--source-tag": delete_options["--source-tag"],
            "--dataset-tag": delete_options["--dataset-tag"],
            "--sample-tag": delete_options["--sample-tag"],
            "--reports": main_options["--reports"],
        }
    )

    subcommand_options["delete"] = delete_options
    subcommand_options["delete"].update(common_options)

    defaults = general_defaults["BigMLer report"]
    subcommand_options["report"] = get_report_options(defaults=defaults)

    defaults = general_defaults["BigMLer reify"]
    subcommand_options["reify"] = get_reify_options(defaults=defaults)
    reify_common_options_list = [
        "clear-logs",
        "username",
        "api-key",
        "version",
        "dev",
        "no-dev",
        "output-dir",
        "verbosity",
        "resume",
        "stack-level",
        "debug",
        "store",
    ]
    reify_common_options = {}
    for option in reify_common_options_list:
        option = "--%s" % option
        reify_common_options.update({option: common_options[option]})
    subcommand_options["reify"].update(reify_common_options)

    subcommand_options["project"] = get_project_options(defaults=defaults)
    subcommand_options["project"].update(
        {
            "--project": source_options["--project"],
            "--project-id": source_options["--project-id"],
            "--name": common_options["--name"],
            "--description": common_options["--description"],
            "--category": common_options["--category"],
            "--tag": common_options["--tag"],
            "--resources-file": main_options["--resources-log"],
        }
    )
    project_common_options = {}
    for option in reify_common_options_list:
        option = "--%s" % option
        project_common_options.update({option: common_options[option]})
    subcommand_options["project"].update(project_common_options)

    defaults = general_defaults["BigMLer association"]
    subcommand_options["association"] = get_association_options(defaults=defaults)
    # general options
    subcommand_options["association"].update(common_options)
    subcommand_options["association"].update(source_options)
    subcommand_options["association"].update(dataset_options)
    subcommand_options["association"].update(test_options)
    subcommand_options["association"].update(
        {
            "--source-tag": delete_options["--source-tag"],
            "--dataset-tag": delete_options["--dataset-tag"],
            "--association-tag": delete_options["--association-tag"],
            "--reports": main_options["--reports"],
            "--remote": main_options["--remote"],
            "--no-batch": main_options["--no-batch"],
            "--no-csv": main_options["--no-csv"],
            "--no-no-csv": main_options["--no-no-csv"],
        }
    )

    for subcommand in SUBCOMMANDS:
        subparser = subparsers.add_parser(subcommand)
        parser_add_options(subparser, subcommand_options[subcommand])

    # options to be transmitted from analyze to main
    chained_options = [
        "--debug",
        "--dev",
        "--username",
        "--api-key",
        "--resources-log",
        "--store",
        "--clear-logs",
        "--max-parallel-models",
        "--max-parallel-evaluations",
        "--objective",
        "--tag",
        "--no-tag",
        "--no-debug",
        "--no-dev",
        "--model-fields",
        "--balance",
        "--verbosity",
        "--resume",
        "--stack_level",
        "--no-balance",
        "--args-separator",
        "--name",
    ]

    return main_parser, chained_options