Example #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-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
Example #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-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({
        '--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']
    })

    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)

    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
Example #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-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
Example #4
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