<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="6" skipped="0" tests="18" time="31783.740" timestamp="2026-06-05T16:22:48.575666-04:00" hostname="cvpost128"><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_E2E6_1_00010_S__uid___A002_Xd0a588_X2239__procedure_hifa_image__regression" file="tests/regression/fast/alma_if_fast_test.py" line="146" time="1478.563"><failure message="Failed: pipeline_manifest.xml is not present under the products directory">@pytest.mark.twelve
    def test_E2E6_1_00010_S__uid___A002_Xd0a588_X2239__procedure_hifa_image__regression():
        """Run ALMA cal+image regression on a 12m moderate-size test dataset in ASDM.
    
        Recipe name:                procedure_hifa_calimage
        Dataset:                    E2E6.1.00010.S: uid___A002_Xd0a588_X2239
        """
        ref_directory = 'pl-regressiontest/E2E6.1.00010.S'
    
        pt = PipelineTester(
            visname=['uid___A002_Xd0a588_X2239'],
            recipe='procedure_hifa_calimage.xml',
            input_dir=ref_directory,
            expectedoutput_dir=ref_directory,
            )
    
&gt;       pt.run()

tests/regression/fast/alma_if_fast_test.py:163: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/testing_utils.py:351: in run
    self.__do_sanity_checks(context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.testing_utils.PipelineTester object at 0x7fdd9cde9550&gt;
context = &lt;Context(name='pipeline-procedure_hifa_calimage')&gt;

    def __do_sanity_checks(self, context: Context):
        """
        Do the following sanity-checks on the pipeline run
    
        1. rawdata, working, products directories are present
        2. Non-existence of errorexit-*.txt in working directory
        3. *pipeline_manifest.xml is present under the products directory (regression mode only)
        4. No weblog rendering failures
    
        Args:
            context: Pipeline context object from the current run.
        """
    
        # 1. rawdata, working, products directories are present
        # The rawdata directory is only present for PPR runs
        missing_directories = regression.missing_directories(context, include_rawdata=self.ppr)
        if len(missing_directories) &gt; 0:
            msg = f"The following directories are missing from the pipeline run: {', '.join(missing_directories)}"
            LOG.warning(msg)
            pytest.fail(msg)
    
        # 2. Non-existence of errorexit-*.txt in working directory
        if regression.errorexit_present(context):
            msg = "errorexit-*.txt is present in working directory"
            LOG.warning(msg)
            pytest.fail(msg)
    
        # 3. *pipeline_manifest.xml is present under the products directory; regression mode only
        if self.mode == 'regression':
            if not regression.manifest_present(context):
                msg = "pipeline_manifest.xml is not present under the products directory"
                LOG.warning(msg)
&gt;               pytest.fail(msg)
E               Failed: pipeline_manifest.xml is not present under the products directory

tests/testing_utils.py:493: Failed</failure></testcase><testcase classname="tests.regression.fast.vla_fast_test" name="test_13A_537__restore__cont_cube_selfcal__regression" file="tests/regression/fast/vla_fast_test.py" line="73" time="22513.036" /><testcase classname="tests.regression.fast.vla_fast_test" name="test_13A_537__calibration__PPR__regression" file="tests/regression/fast/vla_fast_test.py" line="27" time="3493.732" /><testcase classname="tests.regression.fast.alma_sd_fast_test" name="test_uid___A002_X85c183_X36f_SPW15_23__PPR__regression" file="tests/regression/fast/alma_sd_fast_test.py" line="24" time="1284.885" /><testcase classname="tests.regression.fast.nobeyama_sd_fast_test" name="test_mg2_20170525142607_180419__PPR__regression" file="tests/regression/fast/nobeyama_sd_fast_test.py" line="23" time="2386.549" /><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_uid___A002_Xc46ab2_X15ae_repSPW_spw16_17_small__PPR__regression" file="tests/regression/fast/alma_if_fast_test.py" line="9" time="2084.481" /><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_uid___A002_Xee1eb6_Xc58d__procedure_hifa_calsurvey__regression" file="tests/regression/fast/alma_if_fast_test.py" line="185" time="1011.909"><failure message="Failed: pipeline_manifest.xml is not present under the products directory">@pytest.mark.twelve
    def test_uid___A002_Xee1eb6_Xc58d__procedure_hifa_calsurvey__regression():
        """Run ALMA cal+survey regression on a calibration survey test dataset.
    
        Recipe name:                procedure_hifa_calsurvey
        Dataset:                    uid___A002_Xee1eb6_Xc58d
        """
        ref_directory = 'pl-regressiontest/uid___A002_Xee1eb6_Xc58d_calsurvey'
    
        pt = PipelineTester(
            visname=['uid___A002_Xee1eb6_Xc58d'],
            recipe='procedure_hifa_calsurvey.xml',
            input_dir=ref_directory,
            output_dir='uid___A002_Xee1eb6_Xc58d_calsurvey_output',
            expectedoutput_dir=ref_directory,
            )
    
&gt;       pt.run()

tests/regression/fast/alma_if_fast_test.py:203: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/testing_utils.py:351: in run
    self.__do_sanity_checks(context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.testing_utils.PipelineTester object at 0x7fe12ec49ee0&gt;
context = &lt;Context(name='pipeline-procedure_hifa_calsurvey')&gt;

    def __do_sanity_checks(self, context: Context):
        """
        Do the following sanity-checks on the pipeline run
    
        1. rawdata, working, products directories are present
        2. Non-existence of errorexit-*.txt in working directory
        3. *pipeline_manifest.xml is present under the products directory (regression mode only)
        4. No weblog rendering failures
    
        Args:
            context: Pipeline context object from the current run.
        """
    
        # 1. rawdata, working, products directories are present
        # The rawdata directory is only present for PPR runs
        missing_directories = regression.missing_directories(context, include_rawdata=self.ppr)
        if len(missing_directories) &gt; 0:
            msg = f"The following directories are missing from the pipeline run: {', '.join(missing_directories)}"
            LOG.warning(msg)
            pytest.fail(msg)
    
        # 2. Non-existence of errorexit-*.txt in working directory
        if regression.errorexit_present(context):
            msg = "errorexit-*.txt is present in working directory"
            LOG.warning(msg)
            pytest.fail(msg)
    
        # 3. *pipeline_manifest.xml is present under the products directory; regression mode only
        if self.mode == 'regression':
            if not regression.manifest_present(context):
                msg = "pipeline_manifest.xml is not present under the products directory"
                LOG.warning(msg)
&gt;               pytest.fail(msg)
E               Failed: pipeline_manifest.xml is not present under the products directory

tests/testing_utils.py:493: Failed</failure></testcase><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_uid___A002_Xc46ab2_X15ae__selfcal_restore_procedure_hifa_image__regression" file="tests/regression/fast/alma_if_fast_test.py" line="77" time="2667.455" /><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_uid___A002_Xc845c0_X7366__cycle5_restore_procedure_hifa_image__regression" file="tests/regression/fast/alma_if_fast_test.py" line="52" time="10618.489" /><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_2023_1_00228_S__uid___A002_X1199f9e_X7c24__procedure_hifa_calimage_diffgain__regression" file="tests/regression/fast/alma_if_fast_test.py" line="125" time="31765.229"><failure message="AssertionError: Expected key s21.hif_applycal.uid___A002_X1199f9e_X7c24.spw_31.qa.metric.phase_vs_freqslope does not match new key s21.hif_applycal.uid___A002_X1199f9e_X7c24.spw_31.qa.metric.phase_vs_freqintercept.">@pytest.mark.seven
    @pytest.mark.mpi
    def test_2023_1_00228_S__uid___A002_X1199f9e_X7c24__procedure_hifa_calimage_diffgain__regression():
        """Run ALMA cal+image regression on a 7m B2B dataset with differential gain calibration.
    
        Recipe name:                procedure_hifa_calimage_diffgain
        Dataset:                    2023.1.00228.S: uid___A002_X1199f9e_X7c24
        """
        ref_directory = 'pl-regressiontest/2023.1.00228.S'
    
        pt = PipelineTester(
            visname=['uid___A002_X1199f9e_X7c24'],
            recipe='procedure_hifa_calimage_diffgain.xml',
            input_dir=ref_directory,
            expectedoutput_dir=ref_directory,
            )
    
&gt;       pt.run()

tests/regression/fast/alma_if_fast_test.py:143: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/testing_utils.py:376: in run
    self.__compare_results(new_file, default_relative_tolerance)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.testing_utils.PipelineTester object at 0x7fba08757350&gt;
new_file = 'uid___A002_X1199f9e_X7c24.NEW.results.txt'
relative_tolerance = 1e-07

    def __compare_results(self, new_file: str, relative_tolerance: float) -&gt; None:
        """
        Compare results between new one loaded from file and old one.
    
        Args:
            new_file : file path of new results
            relative_tolerance : relative tolerance of output value
        """
        with open(self.expectedoutput_file) as expected_fd, open(new_file) as new_fd:
            expected_results = expected_fd.readlines()
            new_results = new_fd.readlines()
            errors = []
            worst_diff = (0, 0)
            worst_percent_diff = (0, 0)
            for old, new in zip(expected_results, new_results):
                try:
                    oldkey, oldval, tol = self.__sanitize_results_string(old)
                    newkey, newval, _ = self.__sanitize_results_string(new)
                except ValueError as e:
                    errorstr = "The results: {0} could not be parsed. Error: {1}".format(new, str(e))
                    errors.append(errorstr)
                    continue
    
&gt;               assert oldkey == newkey, f"Expected key {oldkey} does not match new key {newkey}."
                       ^^^^^^^^^^^^^^^^
E               AssertionError: Expected key s21.hif_applycal.uid___A002_X1199f9e_X7c24.spw_31.qa.metric.phase_vs_freqslope does not match new key s21.hif_applycal.uid___A002_X1199f9e_X7c24.spw_31.qa.metric.phase_vs_freqintercept.

tests/testing_utils.py:409: AssertionError</failure></testcase><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_2022_1_00207_S__uid___A001_X2d20_X373d__PPR__regression" file="tests/regression/fast/alma_if_fast_test.py" line="101" time="2068.644"><failure message="pipeline.infrastructure.exceptions.PipelineException: Traceback (most recent call last):&#10;  File &quot;/lustre/cv/sw/casa/casaci/cvpost128/bamboohome/xml-data/build-dir/PIPESPECS-TESTPIPEMAINCASAMASTER-ML228PY312TEST/casa-build-utils/pipeline/workdir/pipeline/pipeline/infrastructure/executeppr.py&quot;, line 280, in executeppr&#10;    results = pipeline_task(**task_args)&#10;              ^^^^^^^^^^^^^^^^^^^^^^^^^^&#10;  File &quot;/lustre/cv/sw/casa/casaci/cvpost128/bamboohome/xml-data/build-dir/PIPESPECS-TESTPIPEMAINCASAMASTER-ML228PY312TEST/casa-build-utils/pipeline/workdir/pipeline/pipeline/h/cli/utils.py&quot;, line 83, in wrapper&#10;    results = execute_task(context, task_name, all_inputs)&#10;              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&#10;  File &quot;/lustre/cv/sw/casa/casaci/cvpost128/bamboohome/xml-data/build-dir/PIPESPECS-TESTPIPEMAINCASAMASTER-ML228PY312TEST/casa-build-utils/pipeline/workdir/pipeline/pipeline/h/cli/utils.py&quot;, line 165, in execute_task&#10;    raise exceptions.PipelineException(previous_tracebacks_as_string)&#10;pipeline.infrastructure.exceptions.PipelineException: Online flux catalog unavailable; fell back to local Source.xml fluxes. Stopping after weblog export.">@pytest.mark.seven
    @pytest.mark.mpi
    def test_2022_1_00207_S__uid___A001_X2d20_X373d__PPR__regression():
        """Run ALMA polcal+image regression on a multi-EB 7m test dataset with a PPR file.
    
        PPR:                        pl-regressiontest/2022.1.00207.S/PPR.xml
        Project:                    2022.1.00207.S
        MOUS:                       uid___A001_X2d20_X373d
        EBs:                        uid___A002_X10b6f7c_X41d1
                                    uid___A002_X10b6f7c_X46cc
        """
        ref_directory = 'pl-regressiontest/2022.1.00207.S'
    
        pt = PipelineTester(
            visname=['uid___A002_X10b6f7c_X41d1',
                     'uid___A002_X10b6f7c_X46cc'],
            ppr=f"{ref_directory}/PPR.xml",
            input_dir=ref_directory,
            expectedoutput_dir=ref_directory,
            )
    
&gt;       pt.run()

tests/regression/fast/alma_if_fast_test.py:123: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/testing_utils.py:335: in run
    self.__run_ppr(input_vis, telescope)
tests/testing_utils.py:523: in __run_ppr
    executeppr.executeppr(ppr_local, importonly=False)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pprXmlFile = '../PPR.xml', importonly = False, breakpoint = 'breakpoint'
bpaction = 'ignore', loglevel = 'info', plotlevel = 'default'
interactive = True

    def executeppr(pprXmlFile: str, importonly: bool = True, breakpoint: str = 'breakpoint', bpaction: str = 'ignore',
                   loglevel: str = 'info', plotlevel: str = 'default', interactive: bool = True) -&gt; None:
        """
        Runs Pipeline Processing Request (PPR).
    
        Executes pipeline tasks based on instructions described in pprXmlFile.
    
        Args:
            pprXmlFile: A path to PPR file.
            importonly: Whether or not to indicate to stop processing after
                importing data. If True, execution of PPR stops after
                h*_importdata stage. The parameter has no effect if there is no
                h*_importdata stage in PPR.
            breakpoint: A name of command that should be considered as a break point.
            bpaction: An action to be taken at the breakpoint.
                Available actions are,
                'ignore': ignores breakpoint in pprXmlFile.
                'break': stop execution at the breakpoint in pprXmlFile.
                'resume': resume the last context and restart processing after the
                    breakpoint in pprXmlFile.
            loglevel: A logging level. Available levels are, 'critical', 'error',
                'warning', 'info', 'debug', 'todo', and 'trace'.
            plotlevel: A plot level. Available levels are, 'all', 'default', and
                'summary'
            interactive: If True, print pipeline log to STDOUT.
    
        Examples:
           Only import EBs.
           &gt;&gt;&gt; executeppr('PPR_uid___A001_X14c3_X1dd.xml')
    
           Full execution of PPR.
           &gt;&gt;&gt; executeppr('PPR_uid___A001_X14c3_X1dd.xml', importonly=False)
    
           Run pipeline tasks up to the 'breakpoint' in PPR and save context.
           &gt;&gt;&gt; executeppr('PPR_uid___A001_X14c3_X1dd.xml', importonly=False, bpaction='break')
    
           Resume execution from the 'breakpoint' in PPR.
           &gt;&gt;&gt; executeppr('PPR_uid___A001_X14c3_X1dd.xml', importonly=False, bpaction='resume')
        """
        # save existing context to disk
        save_existing_context()
    
        # Useful mode parameters
        echo_to_screen = interactive
        workingDir = None
    
        try:
            # Decode the processing request
            casa_tools.post_to_log("Analyzing pipeline processing request ...", echo_to_screen=echo_to_screen)
            info, structure, relativePath, intentsDict, asdmList, procedureName, commandsList = \
                _getFirstRequest(pprXmlFile)
            processing_intents = _getProcessingIntents(intentsDict, procedureName)
    
            # Set the directories
            if 'SCIPIPE_ROOTDIR' in os.environ:
                workingDir = os.path.join(os.path.expandvars('$SCIPIPE_ROOTDIR'), relativePath, 'working')
                rawDir = os.path.join(os.path.expandvars('$SCIPIPE_ROOTDIR'), relativePath, 'rawdata')
            else:
                # PIPE-2093: if $SCIPIPE_ROOTDIR doesn't exist, we likely run in a local dev/test environment.
                # Then we will override the typical production workingDir/rawDIR values that are traditionally
                # constructed from $SCIPIPE_ROOTDIR and the PPR &lt;RelativePath&gt; field. Note that we assume that
                # any executeppr call here happens inside the "working/" directory.
                workingDir = os.path.abspath(os.path.join('..', 'working'))
                rawDir = os.path.abspath(os.path.join('..', 'rawdata'))
    
            # Check for the breakpoint
            bpset = False
            if breakpoint != '':
                for command in commandsList:
                    if command[0] == breakpoint:
                        casa_tools.post_to_log("    Found break point: " + breakpoint, echo_to_screen=echo_to_screen)
                        casa_tools.post_to_log("    Break point action is: " + bpaction, echo_to_screen=echo_to_screen)
                        bpset = True
                        break
    
            # Get the pipeline context
            #     Resumes from the last context. Consider adding name
            if bpset and bpaction == 'resume':
                context = cli.h_resume(filename='last')
                context.processing_intents.update(processing_intents)
                casa_tools.post_to_log("    Resuming from last context", echo_to_screen=echo_to_screen)
            else:
                context = cli.h_init(loglevel=loglevel, plotlevel=plotlevel, processing_intents=processing_intents)
                casa_tools.post_to_log("    Creating new pipeline context", echo_to_screen=echo_to_screen)
    
        except Exception:
            casa_tools.post_to_log("Beginning pipeline run ...", echo_to_screen=echo_to_screen)
            casa_tools.post_to_log("For processing request: " + pprXmlFile, echo_to_screen=echo_to_screen)
            traceback.print_exc(file=sys.stdout)
            errstr = traceback.format_exc()
            casa_tools.post_to_log(errstr, echo_to_screen=echo_to_screen)
            casa_tools.post_to_log("Terminating procedure execution ...", echo_to_screen=echo_to_screen)
            errorfile = utils.write_errorexit_file(workingDir, 'errorexit', 'txt')
            return
    
        # Request decoded, starting run.
        casa_tools.post_to_log("Beginning pipeline run ...", echo_to_screen=echo_to_screen)
        casa_tools.post_to_log("For processing request: " + pprXmlFile, echo_to_screen=echo_to_screen)
    
        # Check for common error conditions.
        if relativePath == "":
            casa_tools.post_to_log("    Undefined relative data path", echo_to_screen=echo_to_screen)
            casa_tools.post_to_log("Terminating pipeline execution ...", echo_to_screen=echo_to_screen)
            errorfile = utils.write_errorexit_file(workingDir, 'errorexit', 'txt')
            return
        elif len(asdmList) &lt; 1:
            casa_tools.post_to_log("    Empty ASDM list", echo_to_screen=echo_to_screen)
            casa_tools.post_to_log("Terminating pipeline execution ...", echo_to_screen=echo_to_screen)
            errorfile = utils.write_errorexit_file(workingDir, 'errorexit', 'txt')
            return
        elif len(commandsList) &lt; 1:
            casa_tools.post_to_log("    Empty commands list", echo_to_screen=echo_to_screen)
            casa_tools.post_to_log("Terminating pipeline execution ...", echo_to_screen=echo_to_screen)
            errorfile = utils.write_errorexit_file(workingDir, 'errorexit', 'txt')
            return
    
        # List project summary information
        casa_tools.post_to_log("Project summary", echo_to_screen=echo_to_screen)
        for item in info:
            casa_tools.post_to_log("    " + item[1][0] + item[1][1], echo_to_screen=echo_to_screen)
        ds = dict(info)
        context.project_summary = project.ProjectSummary(
            proposal_code=ds['proposal_code'][1],
            proposal_title='unknown',
            piname='unknown',
            observatory=ds['observatory'][1],
            telescope=ds['telescope'][1])
    
        # List project structure information
        casa_tools.post_to_log("Project structure", echo_to_screen=echo_to_screen)
        for item in structure:
            casa_tools.post_to_log("    " + item[1][0] + item[1][1], echo_to_screen=echo_to_screen)
        ds = dict(structure)
        context.project_structure = project.ProjectStructure(
            ous_entity_id=ds['ous_entity_id'][1],
            ous_part_id=ds['ous_part_id'][1],
            ous_title=ds['ous_title'][1],
            ous_type=ds['ous_type'][1],
            ps_entity_id=ds['ps_entity_id'][1],
            ousstatus_entity_id=ds['ousstatus_entity_id'][1],
            ppr_file=pprXmlFile,
            recipe_name=procedureName)
    
        # Create performance parameters object
        context.project_performance_parameters = _getPerformanceParameters(intentsDict)
    
        # Get the session info from the intents dictionary
        if len(intentsDict) &gt; 0:
            sessionsDict = _getSessions(intentsDict)
        else:
            sessionsDict = {}
    
        # Print the relative path
        casa_tools.post_to_log("Directory structure", echo_to_screen=echo_to_screen)
        casa_tools.post_to_log("    Working directory: " + workingDir, echo_to_screen=echo_to_screen)
        casa_tools.post_to_log("    Raw data directory: " + rawDir, echo_to_screen=echo_to_screen)
    
        # Construct the ASDM list
        casa_tools.post_to_log("Number of ASDMs: " + str(len(asdmList)), echo_to_screen=echo_to_screen)
        files = []
        sessions = []
        defsession = 'session_1'
        for asdm in asdmList:
            session = defsession
    
            for key, value in sessionsDict.items():
                if filenamer.sanitize_for_ms(asdm[1]) in value:
                    session = key.lower()
                    break
    
            sessions.append(session)
            files.append(os.path.join(rawDir, asdm[1]))
            casa_tools.post_to_log("    Session: " + session + "  ASDM: " + asdm[1], echo_to_screen=echo_to_screen)
    
        # Paths for all these ASDM should be the same
        #     Add check for this ?
    
        # Beginning execution
        casa_tools.post_to_log("\nStarting procedure execution ...\n", echo_to_screen=echo_to_screen)
        casa_tools.post_to_log("Procedure name: " + procedureName + "\n", echo_to_screen=echo_to_screen)
    
        # Names of import tasks that need special treatment:
        import_tasks = ('h_importdata', 'hifa_importdata', 'hifv_importdata',
                        'hsd_importdata', 'hsdn_importdata')
        restore_tasks = ('h_restoredata', 'hifa_restoredata', 'hifv_restoredata',
                         'hsd_restoredata')
        restore_tasks_no_session = ('hsdn_restoredata',)
    
        # Loop over the commands
        errstr = ''
        foundbp = False
        tracebacks = []
        results = None
        for command in commandsList:
    
            # Get task name and arguments lists.
            pipeline_task_name = command[0]
            task_args = command[1]
            casa_tools.set_log_origin(fromwhere=pipeline_task_name)
    
            # Handle break point if one is set
            if bpset:
                # Found the break point
                #    Set the found flag
                #    Ignore it  or
                #    Break the loop or
                #    Resume execution
                if pipeline_task_name == breakpoint:
                    foundbp = True
                    if bpaction == 'ignore':
                        casa_tools.post_to_log("Ignoring breakpoint " + pipeline_task_name, echo_to_screen=echo_to_screen)
                        continue
                    elif bpaction == 'break':
                        casa_tools.post_to_log("Terminating execution at breakpoint " + pipeline_task_name,
                                               echo_to_screen=echo_to_screen)
                        break
                    elif bpaction == 'resume':
                        casa_tools.post_to_log("Resuming execution after breakpoint " + pipeline_task_name,
                                               echo_to_screen=echo_to_screen)
                        continue
                # Not the break point so check the resume case
                elif not foundbp and bpaction == 'resume':
                    casa_tools.post_to_log("Skipping task " + pipeline_task_name, echo_to_screen=echo_to_screen)
                    continue
    
            # Execute the command
            casa_tools.post_to_log("Executing command ..." + pipeline_task_name, echo_to_screen=echo_to_screen)
            try:
                pipeline_task = cli.get_pipeline_task_with_name(pipeline_task_name)
    
                # List parameters
                for keyword, value in task_args.items():
                    casa_tools.post_to_log("    Parameter: " + keyword + " = " + repr(value), echo_to_screen=echo_to_screen)
    
                # For import/restore tasks, set vis and session explicitly (not inferred from context).
                if pipeline_task_name in import_tasks or pipeline_task_name in restore_tasks:
                    task_args['vis'] = files
                    task_args['session'] = sessions
                elif pipeline_task_name in restore_tasks_no_session:
                    task_args['vis'] = files
    
                results = pipeline_task(**task_args)
                casa_tools.post_to_log('Results ' + str(results), echo_to_screen=echo_to_screen)
    
                if importonly and pipeline_task_name in import_tasks:
                    casa_tools.post_to_log("Terminating execution after running " + pipeline_task_name,
                                           echo_to_screen=echo_to_screen)
                    break
    
            except Exception:
                # Log message if an exception occurred that was not handled by
                # standardtask template (not turned into failed task result).
                casa_tools.post_to_log("Unhandled error in executeppr while running pipeline task {}"
                                       "".format(pipeline_task_name), echo_to_screen=echo_to_screen)
                errstr = traceback.format_exc()
                casa_tools.post_to_log(errstr, echo_to_screen=echo_to_screen)
    
            # Check whether any exceptions were raised either during the task
            # (shown as traceback in task results) or after the task during results
            # acceptance.
            if results:
                tracebacks.extend(utils.get_tracebacks(results))
            if errstr:
                tracebacks.append(errstr)
            # If we have a traceback from an exception, then create local error
            # exit file, and export both error file and weblog to the products
            # directory.
            if len(tracebacks) &gt; 0:
                errorfile = utils.write_errorexit_file(workingDir, 'errorexit', 'txt')
                export_on_exception(context, errorfile)
    
                # Save the context
                cli.h_save()
                casa_tools.post_to_log("Terminating procedure execution ...", echo_to_screen=echo_to_screen)
                casa_tools.set_log_origin(fromwhere='')
    
                previous_tracebacks_as_string = "{}".format("\n".join([tb for tb in tracebacks]))
&gt;               raise exceptions.PipelineException(previous_tracebacks_as_string)
E               pipeline.infrastructure.exceptions.PipelineException: Traceback (most recent call last):
E                 File "/lustre/cv/sw/casa/casaci/cvpost128/bamboohome/xml-data/build-dir/PIPESPECS-TESTPIPEMAINCASAMASTER-ML228PY312TEST/casa-build-utils/pipeline/workdir/pipeline/pipeline/infrastructure/executeppr.py", line 280, in executeppr
E                   results = pipeline_task(**task_args)
E                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
E                 File "/lustre/cv/sw/casa/casaci/cvpost128/bamboohome/xml-data/build-dir/PIPESPECS-TESTPIPEMAINCASAMASTER-ML228PY312TEST/casa-build-utils/pipeline/workdir/pipeline/pipeline/h/cli/utils.py", line 83, in wrapper
E                   results = execute_task(context, task_name, all_inputs)
E                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E                 File "/lustre/cv/sw/casa/casaci/cvpost128/bamboohome/xml-data/build-dir/PIPESPECS-TESTPIPEMAINCASAMASTER-ML228PY312TEST/casa-build-utils/pipeline/workdir/pipeline/pipeline/h/cli/utils.py", line 165, in execute_task
E                   raise exceptions.PipelineException(previous_tracebacks_as_string)
E               pipeline.infrastructure.exceptions.PipelineException: Online flux catalog unavailable; fell back to local Source.xml fluxes. Stopping after weblog export.

pipeline/infrastructure/executeppr.py:316: PipelineException</failure></testcase><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_uid___A002_Xef72bb_X9d29__renorm_restore_procedure_hifa_image__regression" file="tests/regression/fast/alma_if_fast_test.py" line="28" time="10359.098" /><testcase classname="tests.regression.fast.alma_sd_fast_test" name="test_uid___A002_X85c183_X36f__procedure_hsd_calimage__regression" file="tests/regression/fast/alma_sd_fast_test.py" line="6" time="5154.438"><failure message="Failed: Failed to match 1 result value within tolerance :&#10;s7.hsd_applycal.uid___A002_X85c183_X36f.qa.score.ApplycalFlags&#10;&#09;values differ by &gt; a relative difference of 1e-07&#10;&#09;expected: 0.9579857010836426&#10;&#09;new:      1.0&#10;&#09;diff: -0.04201429891635744&#10;&#09;percent_diff: -4.38569165164284%&#10;Worst absolute diff, s7.hsd_applycal.uid___A002_X85c183_X36f.qa.score.ApplycalFlags: -0.04201429891635744&#10;Worst percentage diff, s7.hsd_applycal.uid___A002_X85c183_X36f.qa.score.ApplycalFlags: -4.38569165164284%">def test_uid___A002_X85c183_X36f__procedure_hsd_calimage__regression():
        """Run ALMA single-dish cal+image regression on the observation data of M100.
    
        Recipe name:                procedure_hsd_calimage
        Dataset:                    uid___A002_X85c183_X36f
        """
        ref_directory = 'pl-regressiontest/uid___A002_X85c183_X36f'
    
        pt = PipelineTester(
            visname=['uid___A002_X85c183_X36f'],
            recipe='procedure_hsd_calimage.xml',
            input_dir=ref_directory,
            expectedoutput_dir=ref_directory,
            )
    
&gt;       pt.run()

tests/regression/fast/alma_sd_fast_test.py:22: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/testing_utils.py:376: in run
    self.__compare_results(new_file, default_relative_tolerance)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.testing_utils.PipelineTester object at 0x7fe12ea1e990&gt;
new_file = 'uid___A002_X85c183_X36f.NEW.results.txt', relative_tolerance = 1e-07

    def __compare_results(self, new_file: str, relative_tolerance: float) -&gt; None:
        """
        Compare results between new one loaded from file and old one.
    
        Args:
            new_file : file path of new results
            relative_tolerance : relative tolerance of output value
        """
        with open(self.expectedoutput_file) as expected_fd, open(new_file) as new_fd:
            expected_results = expected_fd.readlines()
            new_results = new_fd.readlines()
            errors = []
            worst_diff = (0, 0)
            worst_percent_diff = (0, 0)
            for old, new in zip(expected_results, new_results):
                try:
                    oldkey, oldval, tol = self.__sanitize_results_string(old)
                    newkey, newval, _ = self.__sanitize_results_string(new)
                except ValueError as e:
                    errorstr = "The results: {0} could not be parsed. Error: {1}".format(new, str(e))
                    errors.append(errorstr)
                    continue
    
                assert oldkey == newkey, f"Expected key {oldkey} does not match new key {newkey}."
                tolerance = tol if tol else relative_tolerance
                if newval is not None:
                    LOG.info('Comparing %s to %s with a rel. tolerance of %s', oldval, newval, tolerance)
                    if oldval != pytest.approx(newval, rel=tolerance):
                        diff = oldval-newval
                        percent_diff = (oldval-newval)/oldval * 100 if oldval != 0 else 100
                        if abs(diff) &gt; abs(worst_diff[0]):
                            worst_diff = diff, oldkey
                        if abs(percent_diff) &gt; abs(worst_percent_diff[0]):
                            worst_percent_diff = percent_diff, oldkey
                        errorstr = f"{oldkey}\n\tvalues differ by &gt; a relative difference of {tolerance}\n\texpected: {oldval}\n\tnew:      {newval}\n\tdiff: {diff}\n\tpercent_diff: {percent_diff}%"
                        errors.append(errorstr)
                elif oldval is not None:
                    # If only the new value is None, fail
                    errorstr = f"{oldkey}\n\tvalue is None\n\texpected: {oldval}\n\tnew:      {newval}"
                    errors.append(errorstr)
                else:
                    # If old and new values are both None, this is expected, so pass
                    LOG.info('Comparing %s and %s... both values are None.', oldval, newval)
    
            [LOG.warning(x) for x in errors]
            n_errors = len(errors)
            if n_errors &gt; 0:
                summary_str = f"Worst absolute diff, {worst_diff[1]}: {worst_diff[0]}\nWorst percentage diff, {worst_percent_diff[1]}: {worst_percent_diff[0]}%"
                errors.append(summary_str)
&gt;               pytest.fail("Failed to match {0} result value{1} within tolerance{1} :\n{2}".format(
                    n_errors, '' if n_errors == 1 else 's', '\n'.join(errors)), pytrace=True)
E               Failed: Failed to match 1 result value within tolerance :
E               s7.hsd_applycal.uid___A002_X85c183_X36f.qa.score.ApplycalFlags
E               	values differ by &gt; a relative difference of 1e-07
E               	expected: 0.9579857010836426
E               	new:      1.0
E               	diff: -0.04201429891635744
E               	percent_diff: -4.38569165164284%
E               Worst absolute diff, s7.hsd_applycal.uid___A002_X85c183_X36f.qa.score.ApplycalFlags: -0.04201429891635744
E               Worst percentage diff, s7.hsd_applycal.uid___A002_X85c183_X36f.qa.score.ApplycalFlags: -4.38569165164284%

tests/testing_utils.py:435: Failed</failure></testcase><testcase classname="tests.regression.fast.nobeyama_sd_fast_test" name="test_mg2_20170525142607_180419__procedure_hsdn_calimage__regression" file="tests/regression/fast/nobeyama_sd_fast_test.py" line="6" time="2420.668" /><testcase classname="tests.regression.fast.alma_if_fast_test" name="test_csv_3899_eb2_small__procedure_hifa_calimage__regression" file="tests/regression/fast/alma_if_fast_test.py" line="165" time="323.305"><failure message="Failed: pipeline_manifest.xml is not present under the products directory">@pytest.mark.twelve
    def test_csv_3899_eb2_small__procedure_hifa_calimage__regression():
        """PIPE-2245: Run small ALMA cal+image regression to cover various heuristics
    
        Recipe name:                procedure_hifa_calimage
        Dataset:                    CSV-3899-EB2-small
        """
        ref_directory = 'pl-regressiontest/CSV-3899-EB2-small'
    
        pt = PipelineTester(
            visname=['uid___A002_X1181695_X1c6a4_8ant.ms'],
            recipe='procedure_hifa_calimage.xml',
            input_dir=ref_directory,
            output_dir='csv_3899_eb2_small',
            expectedoutput_dir=ref_directory,
            )
    
&gt;       pt.run(omp_num_threads=1)

tests/regression/fast/alma_if_fast_test.py:183: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/testing_utils.py:351: in run
    self.__do_sanity_checks(context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.testing_utils.PipelineTester object at 0x7fdd4f8a8800&gt;
context = &lt;Context(name='pipeline-procedure_hifa_calimage')&gt;

    def __do_sanity_checks(self, context: Context):
        """
        Do the following sanity-checks on the pipeline run
    
        1. rawdata, working, products directories are present
        2. Non-existence of errorexit-*.txt in working directory
        3. *pipeline_manifest.xml is present under the products directory (regression mode only)
        4. No weblog rendering failures
    
        Args:
            context: Pipeline context object from the current run.
        """
    
        # 1. rawdata, working, products directories are present
        # The rawdata directory is only present for PPR runs
        missing_directories = regression.missing_directories(context, include_rawdata=self.ppr)
        if len(missing_directories) &gt; 0:
            msg = f"The following directories are missing from the pipeline run: {', '.join(missing_directories)}"
            LOG.warning(msg)
            pytest.fail(msg)
    
        # 2. Non-existence of errorexit-*.txt in working directory
        if regression.errorexit_present(context):
            msg = "errorexit-*.txt is present in working directory"
            LOG.warning(msg)
            pytest.fail(msg)
    
        # 3. *pipeline_manifest.xml is present under the products directory; regression mode only
        if self.mode == 'regression':
            if not regression.manifest_present(context):
                msg = "pipeline_manifest.xml is not present under the products directory"
                LOG.warning(msg)
&gt;               pytest.fail(msg)
E               Failed: pipeline_manifest.xml is not present under the products directory

tests/testing_utils.py:493: Failed</failure></testcase><testcase classname="tests.regression.fast.vla_fast_test" name="test_13A_537__procedure_hifv__regression" file="tests/regression/fast/vla_fast_test.py" line="8" time="3468.447" /><testcase classname="tests.regression.fast.vla_fast_test" name="test_13A_537__restore__PPR__regression" file="tests/regression/fast/vla_fast_test.py" line="46" time="304.388" /><testcase classname="tests.regression.fast.vlass_fast_test" name="test_TSKY0001__vlass_quicklook_regression" file="tests/regression/fast/vlass_fast_test.py" line="6" time="564.500" /></testsuite></testsuites>