Skip to content

Entry Point

Argument parsing and entry point for command line usage.

layopt_parser

layopt_parser()

Create a parser for reading options at the commandline.

The parser has multiple sub-parsers for reading options to run layopt.

Returns:

Type Description
ArgumentParser

Argument parser.

Source code in src/layopt/entry_point.py
def layopt_parser() -> arg.ArgumentParser:
    """
    Create a parser for reading options at the commandline.

    The parser has multiple sub-parsers for reading options to run ``layopt``.

    Returns
    -------
    arg.ArgumentParser
        Argument parser.
    """
    parser = arg.ArgumentParser(description="Run layopt.")
    parser.add_argument(
        "-v",
        "--version",
        action="version",
        version=f"Installed version of Layopt: {__version__}",
        help="Report the current version of Layopt that is installed",
    )
    parser.add_argument(
        "-c",
        "--config-file",
        dest="config_file",
        type=Path,
        required=False,
        help="Path to a YAML configuration file.",
    )
    parser.add_argument(
        "-o",
        "--output-dir",
        dest="output_dir",
        type=Path,
        required=False,
        help="Output directory to write results to.",
    )
    parser.add_argument(
        "-l",
        "--log-level",
        dest="log_level",
        default="info",
        type=str,
        required=False,
        help="Set verbosity of logging, options (least verbose to most) are 'error', 'warning', 'info', 'error', 'debug'.",
    )
    parser.add_argument(
        "-j",
        "--cores",
        dest="cores",
        type=int,
        required=False,
        help="Number of cores to use for parallel processing.",
    )
    # Add subparsers
    subparsers = parser.add_subparsers(
        title="program",
        description="Available processing options are :",
        dest="module",
    )

    # Add an optimise parser
    optimise_parser = subparsers.add_parser(
        "optimise",
        description="Run Layopt",
        help="Run LayOpt",
    )
    optimise_parser.add_argument(
        "--width",
        dest="width",
        type=int,
        required=False,
        help="Width of structure.",
    )
    optimise_parser.add_argument(
        "--height",
        dest="height",
        type=int,
        required=False,
        help="Height of structure.",
    )
    optimise_parser.add_argument(
        "--stress-tensile",
        dest="stress_tensile",
        type=float,
        required=False,
        help="Tensile stress limit.",
    )
    optimise_parser.add_argument(
        "--stress-compressive",
        dest="stress_compressive",
        type=float,
        required=False,
        help="Compressive stress limit.",
    )
    optimise_parser.add_argument(
        "--joint-cost",
        dest="joint_cost",
        type=float,
        required=False,
        help="Joint cost.",
    )
    optimise_parser.add_argument(
        "--load-direction",
        dest="load_direction",
        nargs="+",
        type=int,
        required=False,
        help="Load direction.",
    )
    optimise_parser.add_argument(
        "--load-large",
        dest="load_large",
        type=float,
        required=False,
        help="Large load to apply at each point.",
    )
    optimise_parser.add_argument(
        "--load-small",
        dest="load_small",
        type=float,
        required=False,
        help="Small load to apply at each point.",
    )
    optimise_parser.add_argument(
        "--max-length",
        dest="max_length",
        type=float,
        required=False,
        help="Maximum member length.",
    )
    optimise_parser.add_argument(
        "--filter-levels",
        dest="filter_levels",
        nargs="+",
        type=float,
        required=False,
        help="Member area filtering levels.",
    )
    optimise_parser.add_argument(
        "--primal-method",
        dest="primal_method",
        type=str,
        required=False,
        help="Primal violation method.",
    )
    optimise_parser.add_argument(
        "--problem-name",
        dest="problem_name",
        type=str,
        required=False,
        help="Problem name",
    )
    optimise_parser.add_argument(
        "--csv-filename",
        dest="csv_filename",
        type=str,
        default="results.csv",
        required=False,
        help="File to save results to. Defaults to 'results_<YYYY-MM-DD-hhmmss>.csv'.",
    )
    optimise_parser.add_argument(
        "--notes", dest="notes", type=str, required=False, help="Additional notes."
    )
    optimise_parser.set_defaults(func=run_modules.optimise)

    # Add a create configuration parser
    create_config_parser = subparsers.add_parser(
        "create-config",
        description="Create a configuration file using the defaults.",
        help="Create a configuration file using the defaults.",
    )
    create_config_parser.add_argument(
        "-f",
        "--filename",
        dest="filename",
        type=Path,
        required=False,
        help="Name of YAML file to save configuration to (default 'config.yaml').",
    )
    create_config_parser.add_argument(
        "-o",
        "--output-dir",
        dest="output_dir",
        type=Path,
        required=False,
        default="./",
        help="Path to where the YAML file should be saved (default './' the current directory).",
    )
    create_config_parser.add_argument(
        "-m",
        "--module",
        dest="module",
        default="afmslicer",
        help="The AFM module to use, currently `afmslicer` (default).",
    )
    create_config_parser.add_argument(
        "-c",
        "--config",
        dest="config",
        type=str,
        default="default",
        help="Configuration to use, currently only 'default' is supported.",
    )
    create_config_parser.set_defaults(func=write_config)

    return parser

entry_point

entry_point(manually_provided_args=None, testing=False)

Entry point for all LayOpt programs.

Main entry point for running layopt which allows the different processing, plotting and testing modules to be run.

Parameters:

Name Type Description Default
manually_provided_args None

Manually provided arguments.

None
testing bool

Whether testing is being carried out.

False

Returns:

Type Description
None

Function does not return anything.

Source code in src/layopt/entry_point.py
def entry_point(
    manually_provided_args: list[Any] | None = None, testing: bool = False
) -> None | arg.Namespace:
    """
    Entry point for all LayOpt programs.

    Main entry point for running ``layopt`` which allows the different processing, plotting and testing modules to be
    run.

    Parameters
    ----------
    manually_provided_args : None
        Manually provided arguments.
    testing : bool
        Whether testing is being carried out.

    Returns
    -------
    None
        Function does not return anything.
    """
    # Create LayOpt parser
    parser = layopt_parser()
    args = (
        parser.parse_args()
        if manually_provided_args is None
        else parser.parse_args(manually_provided_args)
    )
    # If no module has been specified print help and exit
    if not args.module:
        parser.print_help()
        sys.exit()
    if testing:
        return args
    # Run the specified module(s)
    args.func(args)
    return None