Example #1
0
def doc_script():
    from cobaya.mpi import am_single_or_primary_process
    if not am_single_or_primary_process():
        return
    warn_deprecation()
    # Parse arguments
    import argparse
    parser = argparse.ArgumentParser(
        description="Prints defaults for Cobaya's internal modules.")
    parser.add_argument("module",
                        action="store",
                        nargs="?",
                        default="",
                        metavar="module_name",
                        help="The module whose defaults are requested.")
    kind_opt, kind_opt_ishort = "kind", 0
    parser.add_argument(
        "-" + kind_opt[kind_opt_ishort],
        "--" + kind_opt,
        action="store",
        nargs=1,
        default=None,
        metavar="module_kind",
        help=("Kind of module whose defaults are requested: " +
              ", ".join(['%s' % kind for kind in _kinds]) + ". " +
              "Use only when module name is not unique (it would fail)."))
    parser.add_argument("-p",
                        "--python",
                        action="store_true",
                        default=False,
                        help="Request Python instead of YAML.")
    expand_flag, expand_flag_ishort = "expand", 1
    parser.add_argument("-" + expand_flag[expand_flag_ishort],
                        "--" + expand_flag,
                        action="store_true",
                        default=False,
                        help="Expand YAML defaults.")
    arguments = parser.parse_args()
    # Remove plurals (= name of src subfolders), for user-friendliness
    if arguments.module.lower() in subfolders.values():
        arguments.module = next(k for k in subfolders
                                if arguments.module == subfolders[k])
    # Kind given, list all
    if not arguments.module:
        msg = "Available modules: (some may need external code/data)"
        print(msg + "\n" + "-" * len(msg))
        for kind in _kinds:
            print("%s:" % kind)
            print(_indent + ("\n" + _indent).join(get_available_modules(kind)))
        return
    # Kind given: list all modules of that kind
    if arguments.module.lower() in _kinds:
        print("%s:" % arguments.module.lower())
        print(_indent +
              ("\n" +
               _indent).join(get_available_modules(arguments.module.lower())))
        return
    # Otherwise, check if it's a unique module name
    try:
        if arguments.kind:
            arguments.kind = arguments.kind[0].lower()
        to_print = get_default_info(arguments.module,
                                    arguments.kind,
                                    return_yaml=not arguments.python,
                                    yaml_expand_defaults=arguments.expand,
                                    fail_if_not_found=True)
        if arguments.python:
            print(import_odict + pformat(to_print))
        else:
            print(to_print)
            if "!defaults" in to_print:
                print("# This file contains defaults. "
                      "To populate them, use the flag --%s (or -%s)." %
                      (expand_flag, expand_flag[expand_flag_ishort]))
    except:
        if not arguments.kind:
            print("Specify its kind with '--%s [module_kind]'." % kind_opt)
        return 1
    return
Example #2
0
 packages=find_packages(exclude=['docs', 'tests']),
 install_requires=[
     'numpy>=1.12.0', 'scipy>=1.0', 'pandas>=1.0.1', 'PyYAML>=5.1',
     'requests>=2.18', 'py-bobyqa>=1.2', 'GetDist>=1.1.1',
     'fuzzywuzzy>=0.17', 'packaging', 'tqdm'
 ],
 extras_require={
     'test': ['pytest', 'pytest-forked', 'flaky', 'mpi4py'],
     'gui': ['pyqt5', 'pyside2']
 },
 package_data={
     'cobaya':
     list(
         chain(*[['%s/*/*.yaml' %
                  folder, '%s/*/*.bibtex' % folder]
                 for folder in subfolders.values()]))
 },
 entry_points={
     'console_scripts': [
         'cobaya-install=cobaya.install:install_script',
         'cobaya-create-image=cobaya.containers:create_image_script',
         'cobaya-prepare-data=cobaya.containers:prepare_data_script',
         'cobaya-run=cobaya.run:run_script',
         'cobaya-doc=cobaya.doc:doc_script',
         'cobaya-bib=cobaya.bib:bib_script',
         'cobaya-grid-create=cobaya.grid_tools:make_grid_script',
         'cobaya-grid-run=cobaya.grid_tools.runbatch:run',
         'cobaya-run-job=cobaya.grid_tools.runMPI:run_single',
         'cobaya-cosmo-generator=cobaya.cosmo_input:gui_script',
     ],
 },
Example #3
0
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Environment :: Console',
        'Intended Audience :: Science/Research',
        'Topic :: Scientific/Engineering :: Astronomy',
        'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)',
        'Programming Language :: Python :: 2.7',
    ],
    keywords='montecarlo sampling cosmology',
    packages=find_packages(exclude=['docs', 'tests']),
    install_requires=[
        'numpy>=1.12.0', 'scipy >= 0.18', 'pandas>=0.17.1', 'PyYAML>=3.12',
        'wget>=3.2', 'imageio>=2.2.0'
    ],
    package_data={
        'cobaya': ['%s/*/*.yaml' % folder for folder in subfolders.values()]
    },
    entry_points={
        'console_scripts': [
            'cobaya-install=cobaya.install:install_script',
            'cobaya-create-image=cobaya.containers:create_image_script',
            'cobaya-prepare-data=cobaya.containers:prepare_data_script',
            'cobaya-run=cobaya.run:run_script',
            'cobaya-citation=cobaya.citation:citation_script',
            'cobaya-grid-create=cobaya.grid_tools:MakeGridScript',
            'cobaya-grid-run=cobaya.grid_tools.runbatch:run',
            'cobaya-cosmo-generator=cobaya.cosmo_input:gui_script',
        ],
    },
)
Example #4
0
def doc_script():
    from cobaya.mpi import is_main_process
    if not is_main_process():
        return
    warn_deprecation()
    # Parse arguments
    import argparse
    parser = argparse.ArgumentParser(
        description="Prints defaults for Cobaya's components.")
    parser.add_argument("component",
                        action="store",
                        nargs="?",
                        default="",
                        metavar="component_name",
                        help="The component whose defaults are requested.")
    kind_opt, kind_opt_ishort = "kind", 0
    parser.add_argument(
        "-" + kind_opt[kind_opt_ishort],
        "--" + kind_opt,
        action="store",
        nargs=1,
        default=None,
        metavar="component_kind",
        help=("Kind of component whose defaults are requested: " +
              ", ".join(['%s' % kind for kind in kinds]) + ". " +
              "Use only when component name is not unique (it would fail)."))
    parser.add_argument("-p",
                        "--python",
                        action="store_true",
                        default=False,
                        help="Request Python instead of YAML.")
    expand_flag, expand_flag_ishort = "expand", 1
    parser.add_argument("-" + expand_flag[expand_flag_ishort],
                        "--" + expand_flag,
                        action="store_true",
                        default=False,
                        help="Expand YAML defaults.")
    arguments = parser.parse_args()
    # Remove plurals (= name of src subfolders), for user-friendliness
    if arguments.component.lower() in subfolders.values():
        arguments.component = next(k for k in subfolders
                                   if arguments.component == subfolders[k])
    # Kind given, list all
    if not arguments.component:
        msg = "Available components: (some may need external code/data)"
        print(msg + "\n" + "-" * len(msg))
        for kind in kinds:
            print("%s:" % kind)
            print(_indent +
                  ("\n" +
                   _indent).join(get_available_internal_class_names(kind)))
        return
    # Kind given: list all components of that kind
    if arguments.component.lower() in kinds:
        print("%s:" % arguments.component.lower())
        print(_indent + ("\n" + _indent).join(
            get_available_internal_class_names(arguments.component.lower())))
        return
    # Otherwise, check if it's a unique component name
    try:
        if arguments.kind:
            arguments.kind = arguments.kind[0].lower()
            if arguments.kind not in kinds:
                print("Kind %r not recognized. Try one of %r" %
                      (arguments.kind, tuple(kinds)))
                raise ValueError
        else:
            arguments.kind = get_kind(arguments.component)
        to_print = get_default_info(arguments.component,
                                    arguments.kind,
                                    return_yaml=not arguments.python,
                                    yaml_expand_defaults=arguments.expand)
        if arguments.python:
            print(pformat({arguments.kind: {arguments.component: to_print}}))
        else:
            print(arguments.kind + ":\n" + _indent + arguments.component +
                  ":\n" + 2 * _indent +
                  ("\n" + 2 * _indent).join(to_print.split("\n")))
            if "!defaults" in to_print:
                print("# This file contains defaults. "
                      "To populate them, use the flag --%s (or -%s)." %
                      (expand_flag, expand_flag[expand_flag_ishort]))
    except Exception:
        if isinstance(Exception, LoggedError.__class__):
            pass
        else:
            if not arguments.kind:
                print("Specify its kind with '--%s [component_kind]'." %
                      kind_opt)
        return 1
    return
Example #5
0
def doc_script(args=None):
    """Command line script for the documentation."""
    warn_deprecation()
    logger_setup()
    logger = get_logger("doc")
    # Parse arguments
    import argparse
    parser = argparse.ArgumentParser(
        prog="cobaya doc",
        description="Prints defaults for Cobaya's components.")
    parser.add_argument(
        "component",
        action="store",
        nargs="?",
        default="",
        metavar="component_name",
        help=("The component whose defaults are requested. "
              "Pass a component kind (sampler, theory, likelihood) to "
              "list all available (internal) ones, pass nothing to list "
              "all available (internal) components of all kinds."))
    parser.add_argument("-p",
                        "--python",
                        action="store_true",
                        default=False,
                        help="Request Python instead of YAML.")
    expand_flag, expand_flag_ishort = "expand", 1
    parser.add_argument("-" + expand_flag[expand_flag_ishort],
                        "--" + expand_flag,
                        action="store_true",
                        default=False,
                        help="Expand YAML defaults.")
    arguments = parser.parse_args(args)
    # Nothing passed: list all
    if not arguments.component:
        msg = "Available components: (some may need external code/data)"
        print(msg + "\n" + "-" * len(msg))
        for kind in kinds:
            print("%s:" % kind)
            print(_indent +
                  ("\n" +
                   _indent).join(get_available_internal_class_names(kind)))
        return
    # A kind passed (plural or singular): list all of that kind
    if arguments.component.lower() in subfolders.values():
        arguments.component = next(k for k in subfolders
                                   if arguments.component == subfolders[k])
    if arguments.component.lower() in kinds:
        print("%s:" % arguments.component.lower())
        print(_indent + ("\n" + _indent).join(
            get_available_internal_class_names(arguments.component.lower())))
        return
    # Otherwise, try to identify the component
    try:
        cls = get_component_class(arguments.component, logger=logger)
    except ComponentNotFoundError:
        suggestions = similar_internal_class_names(arguments.component)
        logger.error(
            f"Could not identify component '{arguments.component}'. "
            f"Did you mean any of the following? {suggestions} (mind capitalization!)"
        )
        return 1
    to_print = get_default_info(cls,
                                return_yaml=not arguments.python,
                                yaml_expand_defaults=arguments.expand)
    if arguments.python:
        print(pformat({cls.get_kind(): {arguments.component: to_print}}))
    else:
        print(cls.get_kind() + ":\n" + _indent + arguments.component + ":\n" +
              2 * _indent + ("\n" + 2 * _indent).join(to_print.split("\n")))
        if "!defaults" in to_print:
            print("# This file contains defaults. "
                  "To populate them, use the flag --%s (or -%s)." %
                  (expand_flag, expand_flag[expand_flag_ishort]))