def _construct_other_pipelines(
    main_pipeline: PassPipeline, convert_from: Text, convert_to: Text
) -> Tuple[PassPipeline, PassPipeline]:
    """
    Construct other pipelines based on the main pipeline. It includes:
    - The frontend pipeline which will run in the frontend converter
    - The backend pipeline which will run in the backend converter
    As the main pipeline could have passes which also exists in the frontend/backend passes, we
    need to make sure the pass options are set properly in all pipelines.
    For example, if users set options to skip some vars in `const_elimination` pass, we want to make
    sure those vars are skipped not only in main_pipeline, but also in other pipelines wherever the
    `const_elimination` pass runs.

    TODO: rdar://106046237 ([Infra] Expose Backend and Frontend Pipeline to External Users)
    Currently users only control the passes in the main pipeline by passing `pass_pipeline` param.
    There are two reasons why we don't expose the frontend/backend pipelines at the current stage:
    - The frontend and backend specific passes need to be well documented.
    - The interface need more carefully design, as we don't want to provide too many params such as
      ct.convert(..., frontend_pipeline=xxx, backend_pipelien=xxx, main_pipeline=xxx) to overwhelm
      users.
    """
    # Set the main pipeline options specified by the user in frontend/backend pipeline.
    frontend_pipeline = PassPipeline.get_pipeline(f"frontend_{convert_from.lower()}")
    frontend_pipeline.set_options_by_another_pipeline(main_pipeline)
    backend_pipeline = PassPipeline.get_pipeline(f"backend_{convert_to.lower()}")
    backend_pipeline.set_options_by_another_pipeline(main_pipeline)

    # If a pass is skipped in the main pipeline, we also skip it in the frontend/backend pipeline.
    default_main_pipeline = PassPipeline.get_pipeline("default")
    passes_skipped_in_main = set(default_main_pipeline.passes) - set(main_pipeline.passes)
    frontend_pipeline.remove_passes(passes_skipped_in_main)
    backend_pipeline.remove_passes(passes_skipped_in_main)

    return frontend_pipeline, backend_pipeline

    Construct other pipelines based on the main pipeline. It includes:
    - The frontend pipeline which will run in the frontend converter
    - The backend pipeline which will run in the backend converter
    As the main pipeline could have passes which also exists in the frontend/backend passes, we
    need to make sure the pass options are set properly in all pipelines.
    For example, if users set options to skip some vars in `const_elimination` pass, we want to make
    sure those vars are skipped not only in main_pipeline, but also in other pipelines wherever the
    `const_elimination` pass runs.

    TODO: rdar://106046237 ([Infra] Expose Backend and Frontend Pipeline to External Users)
    Currently users only control the passes in the main pipeline by passing `pass_pipeline` param.
    There are two reasons why we don't expose the frontend/backend pipelines at the current stage:
    - The frontend and backend specific passes need to be well documented.
    - The interface need more carefully design, as we don't want to provide too many params such as
      ct.convert(..., frontend_pipeline=xxx, backend_pipelien=xxx, main_pipeline=xxx) to overwhelm
      users.
    
coremltools/converters/mil/converter.py