<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_and_run_pipeline(pipeline_name, pipeline_context_input=None, working_dir=None, context=None, parse_input=True, loader=None):
 """Load and run the specified pypyr pipeline. This function runs the actual pipeline by name. If you are running another pipeline from within a pipeline, call this, not main(). Do call main() instead for your 1st pipeline if there are pipelines calling pipelines. By default pypyr uses file loader. This means that pipeline_name.yaml should be in the working_dir/pipelines/ directory. Args: pipeline_name (str):
 Name of pipeline, sans .yaml at end. pipeline_context_input (str):
 Initialize the pypyr context with this string. working_dir (path):
 Look for pipelines and modules in this directory. If context arg passed, will use context.working_dir and ignore this argument. If context is None, working_dir must be specified. context (pypyr.context.Context):
 Use if you already have a Context object, such as if you are running a pipeline from within a pipeline and you want to re-use the same context object for the child pipeline. Any mutations of the context by the pipeline will be against this instance of it. parse_input (bool):
 run context_parser in pipeline. loader (str):
 str. optional. Absolute name of pipeline loader module. If not specified will use pypyr.pypeloaders.fileloader. Returns: None """

    logger.debug(f"you asked to run pipeline: {pipeline_name}")
    if loader:
        logger.debug(f"you set the pype loader to: {loader}")
    else:
        loader = 'pypyr.pypeloaders.fileloader'
        logger.debug(f"use default pype loader: {loader}")

    logger.debug(f"you set the initial context to: {pipeline_context_input}")

    if context is None:
        context = pypyr.context.Context()
        context.working_dir = working_dir
    else:
        working_dir = context.working_dir

    # pipeline loading deliberately outside of try catch. The try catch will
    # try to run a failure-handler from the pipeline, but if the pipeline
    # doesn't exist there is no failure handler that can possibly run so this
    # is very much a fatal stop error.
    loader_module = pypyr.moduleloader.get_module(loader)

    try:
        get_pipeline_definition = getattr(
            loader_module, 'get_pipeline_definition'
        )
    except AttributeError:
        logger.error(
            f"The pipeline loader {loader_module} doesn't have a "
            "get_pipeline_definition(pipeline_name, working_dir) function.")
        raise

    logger.debug(f"loading the pipeline definition with {loader_module}")
    pipeline_definition = get_pipeline_definition(
        pipeline_name=pipeline_name,
        working_dir=working_dir
    )
    logger.debug(f"{loader_module} done")

    run_pipeline(
        pipeline=pipeline_definition,
        pipeline_context_input=pipeline_context_input,
        context=context,
        parse_input=parse_input
    )