<?xml version="1.0" encoding="utf-8"?>
<testsuites>
  <testsuite name="pytest" errors="0" failures="10" skipped="21" tests="117" time="1226.079" timestamp="2025-02-03T19:11:29.386811+00:00" hostname="spacetelescope-runner-7k7bz-qskb4">
    <testcase classname="tests.hap.test_processing_utils" name="test_add_skycell_to_header[sample_ipppssoot_flc.fits]" time="0.621"/>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_align_ngc188" time="0.001">
      <skipped type="pytest.skip" message="need --run-slow option to run">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_align.py:60: need --run-slow option to run</skipped>
    </testcase>
    <testcase classname="tests.drizzle.test_kernel" name="test_point_kernel[square]" time="0.602"/>
    <testcase classname="tests.wfc3.test_vary_perf.TestVaryPerf" name="test_perf[False-None-wfc3_default_perf-0.1-True]" time="7.787">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfc3_default_perf_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_None_wfc3_defa0/reference_wfc3_default_perf.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(145), np.int64(9)]:&#10;        a&gt; np.float32(8.634045)&#10;         ?                 ^^^&#10;        b&gt; np.float32(8.633741)&#10;         ?                ++ ^&#10;     Data differs at [np.int64(146), np.int64(9)]:&#10;        a&gt; np.float32(9.101629)&#10;         ?                  --&#10;        b&gt; np.float32(9.101926)&#10;         ?                 ++&#10;     Data differs at [np.int64(145), np.int64(10)]:&#10;        a&gt; np.float32(1.0749277)&#10;         ?                  ^ ^&#10;        b&gt; np.float32(1.0749073)&#10;         ?                  ^ ^&#10;     Data differs at [np.int64(146), np.int64(10)]:&#10;        a&gt; np.float32(1.3534267)&#10;         ?                  ^^^&#10;        b&gt; np.float32(1.3534905)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(81), np.int64(11)]:&#10;        a&gt; np.float32(19.906078)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(19.905945)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(82), np.int64(11)]:&#10;        a&gt; np.float32(6.0668597)&#10;         ?                ^^ --&#10;        b&gt; np.float32(6.0670495)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(81), np.int64(12)]:&#10;        a&gt; np.float32(2.196716)&#10;         ?                  ^^&#10;        b&gt; np.float32(2.196742)&#10;         ?                  ^^&#10;     Data differs at [np.int64(82), np.int64(12)]:&#10;        a&gt; np.float32(0.83121413)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.8312565)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(228), np.int64(14)]:&#10;        a&gt; np.float32(1.515448)&#10;         ?                 ^^^&#10;        b&gt; np.float32(1.5153519)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(229), np.int64(14)]:&#10;        a&gt; np.float32(0.79496676)&#10;         ?                 -----&#10;        b&gt; np.float32(0.79501164)&#10;         ?                +++++&#10;     ...&#10;     758988 different pixels found (37.65% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(35), np.int64(2)]:&#10;        a&gt; np.float32(4.586735)&#10;         ?                  ^&#10;        b&gt; np.float32(4.5867195)&#10;         ?                  ^^&#10;     Data differs at [np.int64(36), np.int64(2)]:&#10;        a&gt; np.float32(1.7817361)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.781721)&#10;         ?                  ^&#10;     Data differs at [np.int64(49), np.int64(3)]:&#10;        a&gt; np.float32(15.214938)&#10;         ?                   ^^&#10;        b&gt; np.float32(15.214912)&#10;         ?                   ^^&#10;     Data differs at [np.int64(50), np.int64(3)]:&#10;        a&gt; np.float32(12.409804)&#10;         ?                    ^&#10;        b&gt; np.float32(12.4097805)&#10;         ?                  +  ^&#10;     Data differs at [np.int64(51), np.int64(3)]:&#10;        a&gt; np.float32(9.605422)&#10;         ?                 ^^^&#10;        b&gt; np.float32(9.605397)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(52), np.int64(3)]:&#10;        a&gt; np.float32(6.8019633)&#10;         ?                  - ^&#10;        b&gt; np.float32(6.801939)&#10;         ?                   ^&#10;     Data differs at [np.int64(53), np.int64(3)]:&#10;        a&gt; np.float32(3.9985518)&#10;         ?                   --&#10;        b&gt; np.float32(3.9985275)&#10;         ?                  ++&#10;     Data differs at [np.int64(54), np.int64(3)]:&#10;        a&gt; np.float32(1.2027918)&#10;         ?                   ^^&#10;        b&gt; np.float32(1.2027694)&#10;         ?                  + ^&#10;     Data differs at [np.int64(64), np.int64(4)]:&#10;        a&gt; np.float32(23.03286)&#10;         ?                   ^&#10;        b&gt; np.float32(23.032825)&#10;         ?                   ^^&#10;     Data differs at [np.int64(65), np.int64(4)]:&#10;        a&gt; np.float32(20.230196)&#10;         ?                   -&#10;        b&gt; np.float32(20.230162)&#10;         ?                    +&#10;     ...&#10;     186060 different pixels found (9.23% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(189), np.int64(705)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(196), np.int64(708)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(963), np.int64(984)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(932), np.int64(987)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(568), np.int64(1045)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(279), np.int64(1283)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(975), np.int64(1439)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     7 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873ce710&gt;
output = 'wfc3_default_perf', in_memory = False, num_cores = None
use_static = True, skywidth = 0.1

    def test_perf(self, output, in_memory, num_cores, use_static, skywidth):
    
        # Prepare input files.
        raw_inputs = ["ib6m02d9q_flt.fits", "ib6m02daq_flt.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                      for i in raw_inputs]
    
        # Merge common parameter settings with test-specific settings
        input_pars = {'build':True, 'preserve':False,
                       'clean':True, 'sky_bits':None}
        input_pars['output'] = output
        input_pars['in_memory'] = in_memory
        input_pars['num_cores'] = num_cores
        input_pars['use_static'] = use_static
        input_pars['skywidth'] = skywidth
        run_file = '{}.log'.format(output)
        input_pars['runfile'] = run_file
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs, use_db=False)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=parObj, **input_pars)
    
        # Compare results
        outfile = '{}_drz.fits'.format(output)
        reffile = 'reference_{}.fits'.format(output)
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_vary_perf.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873ce710&gt;
outputs = [('wfc3_default_perf_drz.fits', 'reference_wfc3_default_perf.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfc3_default_perf_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_None_wfc3_defa0/reference_wfc3_default_perf.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(145), np.int64(9)]:
E                   a&gt; np.float32(8.634045)
E                    ?                 ^^^
E                   b&gt; np.float32(8.633741)
E                    ?                ++ ^
E                Data differs at [np.int64(146), np.int64(9)]:
E                   a&gt; np.float32(9.101629)
E                    ?                  --
E                   b&gt; np.float32(9.101926)
E                    ?                 ++
E                Data differs at [np.int64(145), np.int64(10)]:
E                   a&gt; np.float32(1.0749277)
E                    ?                  ^ ^
E                   b&gt; np.float32(1.0749073)
E                    ?                  ^ ^
E                Data differs at [np.int64(146), np.int64(10)]:
E                   a&gt; np.float32(1.3534267)
E                    ?                  ^^^
E                   b&gt; np.float32(1.3534905)
E                    ?                  ^^^
E                Data differs at [np.int64(81), np.int64(11)]:
E                   a&gt; np.float32(19.906078)
E                    ?                 ^^^^
E                   b&gt; np.float32(19.905945)
E                    ?                 ^^^^
E                Data differs at [np.int64(82), np.int64(11)]:
E                   a&gt; np.float32(6.0668597)
E                    ?                ^^ --
E                   b&gt; np.float32(6.0670495)
E                    ?                ^^^^
E                Data differs at [np.int64(81), np.int64(12)]:
E                   a&gt; np.float32(2.196716)
E                    ?                  ^^
E                   b&gt; np.float32(2.196742)
E                    ?                  ^^
E                Data differs at [np.int64(82), np.int64(12)]:
E                   a&gt; np.float32(0.83121413)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.8312565)
E                    ?                  ^^^
E                Data differs at [np.int64(228), np.int64(14)]:
E                   a&gt; np.float32(1.515448)
E                    ?                 ^^^
E                   b&gt; np.float32(1.5153519)
E                    ?                 ^^^^
E                Data differs at [np.int64(229), np.int64(14)]:
E                   a&gt; np.float32(0.79496676)
E                    ?                 -----
E                   b&gt; np.float32(0.79501164)
E                    ?                +++++
E                ...
E                758988 different pixels found (37.65% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(35), np.int64(2)]:
E                   a&gt; np.float32(4.586735)
E                    ?                  ^
E                   b&gt; np.float32(4.5867195)
E                    ?                  ^^
E                Data differs at [np.int64(36), np.int64(2)]:
E                   a&gt; np.float32(1.7817361)
E                    ?                  ^^
E                   b&gt; np.float32(1.781721)
E                    ?                  ^
E                Data differs at [np.int64(49), np.int64(3)]:
E                   a&gt; np.float32(15.214938)
E                    ?                   ^^
E                   b&gt; np.float32(15.214912)
E                    ?                   ^^
E                Data differs at [np.int64(50), np.int64(3)]:
E                   a&gt; np.float32(12.409804)
E                    ?                    ^
E                   b&gt; np.float32(12.4097805)
E                    ?                  +  ^
E                Data differs at [np.int64(51), np.int64(3)]:
E                   a&gt; np.float32(9.605422)
E                    ?                 ^^^
E                   b&gt; np.float32(9.605397)
E                    ?                 ^^^
E                Data differs at [np.int64(52), np.int64(3)]:
E                   a&gt; np.float32(6.8019633)
E                    ?                  - ^
E                   b&gt; np.float32(6.801939)
E                    ?                   ^
E                Data differs at [np.int64(53), np.int64(3)]:
E                   a&gt; np.float32(3.9985518)
E                    ?                   --
E                   b&gt; np.float32(3.9985275)
E                    ?                  ++
E                Data differs at [np.int64(54), np.int64(3)]:
E                   a&gt; np.float32(1.2027918)
E                    ?                   ^^
E                   b&gt; np.float32(1.2027694)
E                    ?                  + ^
E                Data differs at [np.int64(64), np.int64(4)]:
E                   a&gt; np.float32(23.03286)
E                    ?                   ^
E                   b&gt; np.float32(23.032825)
E                    ?                   ^^
E                Data differs at [np.int64(65), np.int64(4)]:
E                   a&gt; np.float32(20.230196)
E                    ?                   -
E                   b&gt; np.float32(20.230162)
E                    ?                    +
E                ...
E                186060 different pixels found (9.23% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(189), np.int64(705)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(196), np.int64(708)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(963), np.int64(984)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(932), np.int64(987)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(568), np.int64(1045)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(279), np.int64(1283)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(975), np.int64(1439)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                7 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_square_with_point" time="0.788"/>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_align_47tuc" time="0.000">
      <skipped type="pytest.skip" message="need --run-slow option to run">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_align.py:105: need --run-slow option to run</skipped>
    </testcase>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_align_single_visits[input_filenames0]" time="0.001">
      <skipped type="pytest.skip" message="need --run-slow option to run">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_align.py:150: need --run-slow option to run</skipped>
    </testcase>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_align_single_visits[input_filenames1]" time="0.000">
      <skipped type="pytest.skip" message="need --run-slow option to run">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_align.py:150: need --run-slow option to run</skipped>
    </testcase>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_align_single_visits[input_filenames2]" time="0.000">
      <skipped type="pytest.skip" message="need --run-slow option to run">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_align.py:150: need --run-slow option to run</skipped>
    </testcase>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_align_single_visits[input_filenames3]" time="0.000">
      <skipped type="pytest.skip" message="need --run-slow option to run">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_align.py:150: need --run-slow option to run</skipped>
    </testcase>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_align_fail_single_visit" time="0.000">
      <skipped type="pytest.skip" message="need --run-slow option to run">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_align.py:237: need --run-slow option to run</skipped>
    </testcase>
    <testcase classname="tests.hap.test_align.TestAlignMosaic" name="test_astroquery" time="113.563"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_point_kernel[point]" time="0.335"/>
    <testcase classname="tests.hap.test_processing_utils" name="test_add_skycell_to_header[sample_ipppssoot_flt.fits]" time="0.105"/>
    <testcase classname="tests.hap.test_processing_utils" name="test_add_skycell_to_header[sample_svm_flc.fits]" time="0.583"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_square_with_grid" time="0.761"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_point_kernel[turbo]" time="0.516"/>
    <testcase classname="tests.hap.test_processing_utils" name="test_add_skycell_to_header[sample_svm_flt.fits]" time="0.117"/>
    <testcase classname="tests.hap.test_processing_utils" name="test_add_skycell_to_header[sample_ipppssoot_flt_w_skycell_header_keyword.fits]" time="0.111"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_point_kernel[gaussian]" time="0.338"/>
    <testcase classname="tests.hap.test_processing_utils" name="test_add_skycell_to_header_invalid_filename" time="0.001"/>
    <testcase classname="tests.acs.test_acs_kernels.TestAcsKernels" name="test_kernels[square-acs_square]" time="1.573"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_turbo_with_grid" time="0.647"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_point_kernel[lanczos3]" time="0.341"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_cdriz_edge" time="0.356"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_gaussian_with_grid" time="0.998"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_cdriz_large" time="0.377"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_cdriz_non_symmetrical" time="0.344"/>
    <testcase classname="tests.acs.test_acs_kernels.TestAcsKernels" name="test_kernels[turbo-acs_turbo]" time="1.152"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_lanczos_with_grid" time="1.370"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_zero_input_weight[square]" time="0.003"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_zero_input_weight[point]" time="0.003"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_zero_input_weight[turbo]" time="0.002"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_zero_input_weight[gaussian]" time="0.003"/>
    <testcase classname="tests.drizzle.test_kernel" name="test_zero_input_weight[lanczos3]" time="0.003"/>
    <testcase classname="tests.acs.test_unit.TestBlot" name="test_blot_with_point" time="0.620"/>
    <testcase classname="tests.acs.test_unit.TestBlot" name="test_blot_with_default" time="0.786"/>
    <testcase classname="tests.acs.test_acs_kernels.TestAcsKernels" name="test_kernels[point-acs_point]" time="1.274"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_tophat_with_grid" time="0.681"/>
    <testcase classname="tests.acs.test_unit.TestBlot" name="test_blot_with_lan3" time="0.836"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_point_with_grid" time="0.571"/>
    <testcase classname="tests.acs.test_unit.TestBlot" name="test_blot_with_lan5" time="0.698"/>
    <testcase classname="tests.acs.test_acs_kernels.TestAcsKernels" name="test_kernels[lanczos3-acs_lanczos3]" time="2.021"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_square_with_image" time="0.909"/>
    <testcase classname="tests.acs.test_unit.TestBlot" name="test_blot_with_image" time="0.666"/>
    <testcase classname="tests.acs.test_unit.TestDriz" name="test_turbo_with_image" time="0.815"/>
    <testcase classname="tests.drizzle.test_cdriz" name="test_square_kernel[square]" time="0.332"/>
    <testcase classname="tests.drizzle.test_cdriz" name="test_square_kernel[point]" time="0.741"/>
    <testcase classname="tests.stis.test_stis.TestSTIS" name="test_fuv_mama" time="9.330"/>
    <testcase classname="tests.acs.test_acs_kernels.TestAcsKernels" name="test_kernels[gaussian-acs_gaussian]" time="1.543"/>
    <testcase classname="tests.wfc3.test_vary_perf.TestVaryPerf" name="test_perf[False-12-wfc3_parallel_hi-0.1-True]" time="7.740">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfc3_parallel_hi_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_12_wfc3_parall0/reference_wfc3_parallel_hi.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(145), np.int64(9)]:&#10;        a&gt; np.float32(8.634045)&#10;         ?                 ^^^&#10;        b&gt; np.float32(8.633741)&#10;         ?                ++ ^&#10;     Data differs at [np.int64(146), np.int64(9)]:&#10;        a&gt; np.float32(9.101629)&#10;         ?                  --&#10;        b&gt; np.float32(9.101926)&#10;         ?                 ++&#10;     Data differs at [np.int64(145), np.int64(10)]:&#10;        a&gt; np.float32(1.0749277)&#10;         ?                  ^ ^&#10;        b&gt; np.float32(1.0749073)&#10;         ?                  ^ ^&#10;     Data differs at [np.int64(146), np.int64(10)]:&#10;        a&gt; np.float32(1.3534267)&#10;         ?                  ^^^&#10;        b&gt; np.float32(1.3534905)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(81), np.int64(11)]:&#10;        a&gt; np.float32(19.906078)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(19.905945)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(82), np.int64(11)]:&#10;        a&gt; np.float32(6.0668597)&#10;         ?                ^^ --&#10;        b&gt; np.float32(6.0670495)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(81), np.int64(12)]:&#10;        a&gt; np.float32(2.196716)&#10;         ?                  ^^&#10;        b&gt; np.float32(2.196742)&#10;         ?                  ^^&#10;     Data differs at [np.int64(82), np.int64(12)]:&#10;        a&gt; np.float32(0.83121413)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.8312565)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(228), np.int64(14)]:&#10;        a&gt; np.float32(1.515448)&#10;         ?                 ^^^&#10;        b&gt; np.float32(1.5153519)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(229), np.int64(14)]:&#10;        a&gt; np.float32(0.79496676)&#10;         ?                 -----&#10;        b&gt; np.float32(0.79501164)&#10;         ?                +++++&#10;     ...&#10;     758988 different pixels found (37.65% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(35), np.int64(2)]:&#10;        a&gt; np.float32(4.586735)&#10;         ?                  ^&#10;        b&gt; np.float32(4.5867195)&#10;         ?                  ^^&#10;     Data differs at [np.int64(36), np.int64(2)]:&#10;        a&gt; np.float32(1.7817361)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.781721)&#10;         ?                  ^&#10;     Data differs at [np.int64(49), np.int64(3)]:&#10;        a&gt; np.float32(15.214938)&#10;         ?                   ^^&#10;        b&gt; np.float32(15.214912)&#10;         ?                   ^^&#10;     Data differs at [np.int64(50), np.int64(3)]:&#10;        a&gt; np.float32(12.409804)&#10;         ?                    ^&#10;        b&gt; np.float32(12.4097805)&#10;         ?                  +  ^&#10;     Data differs at [np.int64(51), np.int64(3)]:&#10;        a&gt; np.float32(9.605422)&#10;         ?                 ^^^&#10;        b&gt; np.float32(9.605397)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(52), np.int64(3)]:&#10;        a&gt; np.float32(6.8019633)&#10;         ?                  - ^&#10;        b&gt; np.float32(6.801939)&#10;         ?                   ^&#10;     Data differs at [np.int64(53), np.int64(3)]:&#10;        a&gt; np.float32(3.9985518)&#10;         ?                   --&#10;        b&gt; np.float32(3.9985275)&#10;         ?                  ++&#10;     Data differs at [np.int64(54), np.int64(3)]:&#10;        a&gt; np.float32(1.2027918)&#10;         ?                   ^^&#10;        b&gt; np.float32(1.2027694)&#10;         ?                  + ^&#10;     Data differs at [np.int64(64), np.int64(4)]:&#10;        a&gt; np.float32(23.03286)&#10;         ?                   ^&#10;        b&gt; np.float32(23.032825)&#10;         ?                   ^^&#10;     Data differs at [np.int64(65), np.int64(4)]:&#10;        a&gt; np.float32(20.230196)&#10;         ?                   -&#10;        b&gt; np.float32(20.230162)&#10;         ?                    +&#10;     ...&#10;     186060 different pixels found (9.23% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(189), np.int64(705)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(196), np.int64(708)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(963), np.int64(984)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(932), np.int64(987)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(568), np.int64(1045)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(279), np.int64(1283)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(975), np.int64(1439)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     7 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873e2f50&gt;
output = 'wfc3_parallel_hi', in_memory = False, num_cores = 12
use_static = True, skywidth = 0.1

    def test_perf(self, output, in_memory, num_cores, use_static, skywidth):
    
        # Prepare input files.
        raw_inputs = ["ib6m02d9q_flt.fits", "ib6m02daq_flt.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                      for i in raw_inputs]
    
        # Merge common parameter settings with test-specific settings
        input_pars = {'build':True, 'preserve':False,
                       'clean':True, 'sky_bits':None}
        input_pars['output'] = output
        input_pars['in_memory'] = in_memory
        input_pars['num_cores'] = num_cores
        input_pars['use_static'] = use_static
        input_pars['skywidth'] = skywidth
        run_file = '{}.log'.format(output)
        input_pars['runfile'] = run_file
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs, use_db=False)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=parObj, **input_pars)
    
        # Compare results
        outfile = '{}_drz.fits'.format(output)
        reffile = 'reference_{}.fits'.format(output)
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_vary_perf.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873e2f50&gt;
outputs = [('wfc3_parallel_hi_drz.fits', 'reference_wfc3_parallel_hi.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfc3_parallel_hi_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_12_wfc3_parall0/reference_wfc3_parallel_hi.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(145), np.int64(9)]:
E                   a&gt; np.float32(8.634045)
E                    ?                 ^^^
E                   b&gt; np.float32(8.633741)
E                    ?                ++ ^
E                Data differs at [np.int64(146), np.int64(9)]:
E                   a&gt; np.float32(9.101629)
E                    ?                  --
E                   b&gt; np.float32(9.101926)
E                    ?                 ++
E                Data differs at [np.int64(145), np.int64(10)]:
E                   a&gt; np.float32(1.0749277)
E                    ?                  ^ ^
E                   b&gt; np.float32(1.0749073)
E                    ?                  ^ ^
E                Data differs at [np.int64(146), np.int64(10)]:
E                   a&gt; np.float32(1.3534267)
E                    ?                  ^^^
E                   b&gt; np.float32(1.3534905)
E                    ?                  ^^^
E                Data differs at [np.int64(81), np.int64(11)]:
E                   a&gt; np.float32(19.906078)
E                    ?                 ^^^^
E                   b&gt; np.float32(19.905945)
E                    ?                 ^^^^
E                Data differs at [np.int64(82), np.int64(11)]:
E                   a&gt; np.float32(6.0668597)
E                    ?                ^^ --
E                   b&gt; np.float32(6.0670495)
E                    ?                ^^^^
E                Data differs at [np.int64(81), np.int64(12)]:
E                   a&gt; np.float32(2.196716)
E                    ?                  ^^
E                   b&gt; np.float32(2.196742)
E                    ?                  ^^
E                Data differs at [np.int64(82), np.int64(12)]:
E                   a&gt; np.float32(0.83121413)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.8312565)
E                    ?                  ^^^
E                Data differs at [np.int64(228), np.int64(14)]:
E                   a&gt; np.float32(1.515448)
E                    ?                 ^^^
E                   b&gt; np.float32(1.5153519)
E                    ?                 ^^^^
E                Data differs at [np.int64(229), np.int64(14)]:
E                   a&gt; np.float32(0.79496676)
E                    ?                 -----
E                   b&gt; np.float32(0.79501164)
E                    ?                +++++
E                ...
E                758988 different pixels found (37.65% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(35), np.int64(2)]:
E                   a&gt; np.float32(4.586735)
E                    ?                  ^
E                   b&gt; np.float32(4.5867195)
E                    ?                  ^^
E                Data differs at [np.int64(36), np.int64(2)]:
E                   a&gt; np.float32(1.7817361)
E                    ?                  ^^
E                   b&gt; np.float32(1.781721)
E                    ?                  ^
E                Data differs at [np.int64(49), np.int64(3)]:
E                   a&gt; np.float32(15.214938)
E                    ?                   ^^
E                   b&gt; np.float32(15.214912)
E                    ?                   ^^
E                Data differs at [np.int64(50), np.int64(3)]:
E                   a&gt; np.float32(12.409804)
E                    ?                    ^
E                   b&gt; np.float32(12.4097805)
E                    ?                  +  ^
E                Data differs at [np.int64(51), np.int64(3)]:
E                   a&gt; np.float32(9.605422)
E                    ?                 ^^^
E                   b&gt; np.float32(9.605397)
E                    ?                 ^^^
E                Data differs at [np.int64(52), np.int64(3)]:
E                   a&gt; np.float32(6.8019633)
E                    ?                  - ^
E                   b&gt; np.float32(6.801939)
E                    ?                   ^
E                Data differs at [np.int64(53), np.int64(3)]:
E                   a&gt; np.float32(3.9985518)
E                    ?                   --
E                   b&gt; np.float32(3.9985275)
E                    ?                  ++
E                Data differs at [np.int64(54), np.int64(3)]:
E                   a&gt; np.float32(1.2027918)
E                    ?                   ^^
E                   b&gt; np.float32(1.2027694)
E                    ?                  + ^
E                Data differs at [np.int64(64), np.int64(4)]:
E                   a&gt; np.float32(23.03286)
E                    ?                   ^
E                   b&gt; np.float32(23.032825)
E                    ?                   ^^
E                Data differs at [np.int64(65), np.int64(4)]:
E                   a&gt; np.float32(20.230196)
E                    ?                   -
E                   b&gt; np.float32(20.230162)
E                    ?                    +
E                ...
E                186060 different pixels found (9.23% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(189), np.int64(705)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(196), np.int64(708)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(963), np.int64(984)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(932), np.int64(987)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(568), np.int64(1045)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(279), np.int64(1283)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(975), np.int64(1439)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                7 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.drizzle.test_cdriz" name="test_square_kernel[turbo]" time="0.442"/>
    <testcase classname="tests.drizzle.test_cdriz" name="test_gaussian_kernel" time="0.370"/>
    <testcase classname="tests.drizzle.test_cdriz" name="test_lanczos3_kernel" time="0.345"/>
    <testcase classname="tests.wfc3.test_wfc3.TestWFC3" name="test_binned_single" time="11.212"/>
    <testcase classname="tests.wfc3.test_vary_perf.TestVaryPerf" name="test_perf[False-1-wfc3_parallel_off-0.1-True]" time="7.681">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfc3_parallel_off_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_1_wfc3_paralle0/reference_wfc3_parallel_off.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(145), np.int64(9)]:&#10;        a&gt; np.float32(8.634045)&#10;         ?                 ^^^&#10;        b&gt; np.float32(8.633741)&#10;         ?                ++ ^&#10;     Data differs at [np.int64(146), np.int64(9)]:&#10;        a&gt; np.float32(9.101629)&#10;         ?                  --&#10;        b&gt; np.float32(9.101926)&#10;         ?                 ++&#10;     Data differs at [np.int64(145), np.int64(10)]:&#10;        a&gt; np.float32(1.0749277)&#10;         ?                  ^ ^&#10;        b&gt; np.float32(1.0749073)&#10;         ?                  ^ ^&#10;     Data differs at [np.int64(146), np.int64(10)]:&#10;        a&gt; np.float32(1.3534267)&#10;         ?                  ^^^&#10;        b&gt; np.float32(1.3534905)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(81), np.int64(11)]:&#10;        a&gt; np.float32(19.906078)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(19.905945)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(82), np.int64(11)]:&#10;        a&gt; np.float32(6.0668597)&#10;         ?                ^^ --&#10;        b&gt; np.float32(6.0670495)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(81), np.int64(12)]:&#10;        a&gt; np.float32(2.196716)&#10;         ?                  ^^&#10;        b&gt; np.float32(2.196742)&#10;         ?                  ^^&#10;     Data differs at [np.int64(82), np.int64(12)]:&#10;        a&gt; np.float32(0.83121413)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.8312565)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(228), np.int64(14)]:&#10;        a&gt; np.float32(1.515448)&#10;         ?                 ^^^&#10;        b&gt; np.float32(1.5153519)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(229), np.int64(14)]:&#10;        a&gt; np.float32(0.79496676)&#10;         ?                 -----&#10;        b&gt; np.float32(0.79501164)&#10;         ?                +++++&#10;     ...&#10;     758988 different pixels found (37.65% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(35), np.int64(2)]:&#10;        a&gt; np.float32(4.586735)&#10;         ?                  ^&#10;        b&gt; np.float32(4.5867195)&#10;         ?                  ^^&#10;     Data differs at [np.int64(36), np.int64(2)]:&#10;        a&gt; np.float32(1.7817361)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.781721)&#10;         ?                  ^&#10;     Data differs at [np.int64(49), np.int64(3)]:&#10;        a&gt; np.float32(15.214938)&#10;         ?                   ^^&#10;        b&gt; np.float32(15.214912)&#10;         ?                   ^^&#10;     Data differs at [np.int64(50), np.int64(3)]:&#10;        a&gt; np.float32(12.409804)&#10;         ?                    ^&#10;        b&gt; np.float32(12.4097805)&#10;         ?                  +  ^&#10;     Data differs at [np.int64(51), np.int64(3)]:&#10;        a&gt; np.float32(9.605422)&#10;         ?                 ^^^&#10;        b&gt; np.float32(9.605397)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(52), np.int64(3)]:&#10;        a&gt; np.float32(6.8019633)&#10;         ?                  - ^&#10;        b&gt; np.float32(6.801939)&#10;         ?                   ^&#10;     Data differs at [np.int64(53), np.int64(3)]:&#10;        a&gt; np.float32(3.9985518)&#10;         ?                   --&#10;        b&gt; np.float32(3.9985275)&#10;         ?                  ++&#10;     Data differs at [np.int64(54), np.int64(3)]:&#10;        a&gt; np.float32(1.2027918)&#10;         ?                   ^^&#10;        b&gt; np.float32(1.2027694)&#10;         ?                  + ^&#10;     Data differs at [np.int64(64), np.int64(4)]:&#10;        a&gt; np.float32(23.03286)&#10;         ?                   ^&#10;        b&gt; np.float32(23.032825)&#10;         ?                   ^^&#10;     Data differs at [np.int64(65), np.int64(4)]:&#10;        a&gt; np.float32(20.230196)&#10;         ?                   -&#10;        b&gt; np.float32(20.230162)&#10;         ?                    +&#10;     ...&#10;     186060 different pixels found (9.23% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(189), np.int64(705)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(196), np.int64(708)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(963), np.int64(984)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(932), np.int64(987)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(568), np.int64(1045)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(279), np.int64(1283)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(975), np.int64(1439)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     7 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873c6510&gt;
output = 'wfc3_parallel_off', in_memory = False, num_cores = 1
use_static = True, skywidth = 0.1

    def test_perf(self, output, in_memory, num_cores, use_static, skywidth):
    
        # Prepare input files.
        raw_inputs = ["ib6m02d9q_flt.fits", "ib6m02daq_flt.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                      for i in raw_inputs]
    
        # Merge common parameter settings with test-specific settings
        input_pars = {'build':True, 'preserve':False,
                       'clean':True, 'sky_bits':None}
        input_pars['output'] = output
        input_pars['in_memory'] = in_memory
        input_pars['num_cores'] = num_cores
        input_pars['use_static'] = use_static
        input_pars['skywidth'] = skywidth
        run_file = '{}.log'.format(output)
        input_pars['runfile'] = run_file
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs, use_db=False)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=parObj, **input_pars)
    
        # Compare results
        outfile = '{}_drz.fits'.format(output)
        reffile = 'reference_{}.fits'.format(output)
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_vary_perf.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873c6510&gt;
outputs = [('wfc3_parallel_off_drz.fits', 'reference_wfc3_parallel_off.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfc3_parallel_off_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_1_wfc3_paralle0/reference_wfc3_parallel_off.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(145), np.int64(9)]:
E                   a&gt; np.float32(8.634045)
E                    ?                 ^^^
E                   b&gt; np.float32(8.633741)
E                    ?                ++ ^
E                Data differs at [np.int64(146), np.int64(9)]:
E                   a&gt; np.float32(9.101629)
E                    ?                  --
E                   b&gt; np.float32(9.101926)
E                    ?                 ++
E                Data differs at [np.int64(145), np.int64(10)]:
E                   a&gt; np.float32(1.0749277)
E                    ?                  ^ ^
E                   b&gt; np.float32(1.0749073)
E                    ?                  ^ ^
E                Data differs at [np.int64(146), np.int64(10)]:
E                   a&gt; np.float32(1.3534267)
E                    ?                  ^^^
E                   b&gt; np.float32(1.3534905)
E                    ?                  ^^^
E                Data differs at [np.int64(81), np.int64(11)]:
E                   a&gt; np.float32(19.906078)
E                    ?                 ^^^^
E                   b&gt; np.float32(19.905945)
E                    ?                 ^^^^
E                Data differs at [np.int64(82), np.int64(11)]:
E                   a&gt; np.float32(6.0668597)
E                    ?                ^^ --
E                   b&gt; np.float32(6.0670495)
E                    ?                ^^^^
E                Data differs at [np.int64(81), np.int64(12)]:
E                   a&gt; np.float32(2.196716)
E                    ?                  ^^
E                   b&gt; np.float32(2.196742)
E                    ?                  ^^
E                Data differs at [np.int64(82), np.int64(12)]:
E                   a&gt; np.float32(0.83121413)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.8312565)
E                    ?                  ^^^
E                Data differs at [np.int64(228), np.int64(14)]:
E                   a&gt; np.float32(1.515448)
E                    ?                 ^^^
E                   b&gt; np.float32(1.5153519)
E                    ?                 ^^^^
E                Data differs at [np.int64(229), np.int64(14)]:
E                   a&gt; np.float32(0.79496676)
E                    ?                 -----
E                   b&gt; np.float32(0.79501164)
E                    ?                +++++
E                ...
E                758988 different pixels found (37.65% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(35), np.int64(2)]:
E                   a&gt; np.float32(4.586735)
E                    ?                  ^
E                   b&gt; np.float32(4.5867195)
E                    ?                  ^^
E                Data differs at [np.int64(36), np.int64(2)]:
E                   a&gt; np.float32(1.7817361)
E                    ?                  ^^
E                   b&gt; np.float32(1.781721)
E                    ?                  ^
E                Data differs at [np.int64(49), np.int64(3)]:
E                   a&gt; np.float32(15.214938)
E                    ?                   ^^
E                   b&gt; np.float32(15.214912)
E                    ?                   ^^
E                Data differs at [np.int64(50), np.int64(3)]:
E                   a&gt; np.float32(12.409804)
E                    ?                    ^
E                   b&gt; np.float32(12.4097805)
E                    ?                  +  ^
E                Data differs at [np.int64(51), np.int64(3)]:
E                   a&gt; np.float32(9.605422)
E                    ?                 ^^^
E                   b&gt; np.float32(9.605397)
E                    ?                 ^^^
E                Data differs at [np.int64(52), np.int64(3)]:
E                   a&gt; np.float32(6.8019633)
E                    ?                  - ^
E                   b&gt; np.float32(6.801939)
E                    ?                   ^
E                Data differs at [np.int64(53), np.int64(3)]:
E                   a&gt; np.float32(3.9985518)
E                    ?                   --
E                   b&gt; np.float32(3.9985275)
E                    ?                  ++
E                Data differs at [np.int64(54), np.int64(3)]:
E                   a&gt; np.float32(1.2027918)
E                    ?                   ^^
E                   b&gt; np.float32(1.2027694)
E                    ?                  + ^
E                Data differs at [np.int64(64), np.int64(4)]:
E                   a&gt; np.float32(23.03286)
E                    ?                   ^
E                   b&gt; np.float32(23.032825)
E                    ?                   ^^
E                Data differs at [np.int64(65), np.int64(4)]:
E                   a&gt; np.float32(20.230196)
E                    ?                   -
E                   b&gt; np.float32(20.230162)
E                    ?                    +
E                ...
E                186060 different pixels found (9.23% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(189), np.int64(705)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(196), np.int64(708)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(963), np.int64(984)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(932), np.int64(987)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(568), np.int64(1045)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(279), np.int64(1283)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(975), np.int64(1439)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                7 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.stis.test_stis.TestSTIS" name="test_nuv_mama" time="2.471"/>
    <testcase classname="tests.stis.test_stis.TestSTIS" name="test_stis_ccd" time="15.018"/>
    <testcase classname="tests.wfc3.test_wfc3.TestWFC3" name="test_uvis_single" time="14.394">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: iacr51ohq_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw0/test_uvis_single0/reference_wfc3_uvis_single.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAF-TLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 0.001, Absolute tolerance: 0.001&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(2933), np.int64(286)]:&#10;        a&gt; np.float32(0.008995539)&#10;        b&gt; np.float32(-0.00045288214)&#10;     Data differs at [np.int64(242), np.int64(1290)]:&#10;        a&gt; np.float32(0.4297761)&#10;        b&gt; np.float32(0.011508944)&#10;     Data differs at [np.int64(3679), np.int64(1985)]:&#10;        a&gt; np.float32(0.0072192014)&#10;         ?                ^ ^^^^&#10;        b&gt; np.float32(-0.0032414855)&#10;         ?            +    ^ ^  +++&#10;     Data differs at [np.int64(3988), np.int64(2952)]:&#10;        a&gt; np.float32(0.016936485)&#10;         ?              ------&#10;        b&gt; np.float32(0.44824585)&#10;         ?               +++++&#10;     Data differs at [np.int64(2783), np.int64(3134)]:&#10;        a&gt; np.float32(0.036387343)&#10;         ?               ^^^  ^^^&#10;        b&gt; np.float32(0.40478778)&#10;         ?              + ^^  ^^&#10;     5 different pixels found (0.00% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(1263), np.int64(84)]:&#10;        a&gt; np.float32(1.7024698)&#10;         ?                ^^^&#10;        b&gt; np.float32(1.7079828)&#10;         ?                ^  ++&#10;     Data differs at [np.int64(1152), np.int64(115)]:&#10;        a&gt; np.float32(2.354933)&#10;         ?               -  ^&#10;        b&gt; np.float32(2.3491673)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(1005), np.int64(138)]:&#10;        a&gt; np.float32(5.108713)&#10;         ?               ^ ^^^&#10;        b&gt; np.float32(5.1155896)&#10;         ?               ^^^ ^^&#10;     Data differs at [np.int64(975), np.int64(140)]:&#10;        a&gt; np.float32(5.034109)&#10;         ?               - - ^&#10;        b&gt; np.float32(5.0407805)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(1718), np.int64(147)]:&#10;        a&gt; np.float32(8.82114)&#10;         ?                ---&#10;        b&gt; np.float32(8.809392)&#10;         ?               ++++&#10;     Data differs at [np.int64(1718), np.int64(148)]:&#10;        a&gt; np.float32(2.2775486)&#10;         ?                --- ^&#10;        b&gt; np.float32(2.26783)&#10;         ?               +  ^&#10;     Data differs at [np.int64(2434), np.int64(150)]:&#10;        a&gt; np.float32(15.016779)&#10;         ?                ^ ---&#10;        b&gt; np.float32(15.000206)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(2319), np.int64(152)]:&#10;        a&gt; np.float32(10.166957)&#10;         ?                 ----&#10;        b&gt; np.float32(10.155186)&#10;         ?                ++++&#10;     Data differs at [np.int64(2194), np.int64(153)]:&#10;        a&gt; np.float32(13.796331)&#10;         ?                ^^ ^^&#10;        b&gt; np.float32(13.78137)&#10;         ?                ^^ ^&#10;     Data differs at [np.int64(2319), np.int64(153)]:&#10;        a&gt; np.float32(9.899693)&#10;         ?               ^^^&#10;        b&gt; np.float32(9.883893)&#10;         ?               ^^^&#10;     ...&#10;     3439 different pixels found (0.02% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(2933), np.int64(286)]:&#10;        a&gt; np.int32(1)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(242), np.int64(1290)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(1)&#10;         ?          ^&#10;     Data differs at [np.int64(3988), np.int64(2952)]:&#10;        a&gt; np.int32(2)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     3 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_wfc3.TestWFC3 object at 0x7f42e85510d0&gt;

    def test_uvis_single(self):
        # Customized tolerances as Linux and Mac would need different truth files.
        self.rtol = 1e-3
        self.atol = 1e-3
        rootname = 'iacr51ohq'
        input_name = '{}_flt.fits'.format(rootname)
        output = '{}_drz.fits'.format(rootname)
        ref_file = 'reference_wfc3_uvis_single.fits'
        runfile = ref_file.replace('.fits','.log')
    
        # Prepare input files.
        input_file = os.path.basename(self.get_input_file('input', input_name))
    
        input_pars = {'output': output, 'runfile':runfile,
                      'build':True, 'in_memory':True,
                      'preserve': False, 'clean':True, 'static':True,
                      'skysub':True, 'skywidth':0.3, 'use_static':False,
                      'sky_bits':None,
                      'driz_separate':False, 'median':False,
                      'blot':False, 'driz_cr':False}
    
        # Update wcs in input file
        driz_input = updatewcs.updatewcs(input_file)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_input, mdriztab=False,
                                  configobj=parObj, **input_pars)
    
        # Compare results
        outputs = [(output, ref_file)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_wfc3.py:77: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_wfc3.TestWFC3 object at 0x7f42e85510d0&gt;
outputs = [('iacr51ohq_drz.fits', 'reference_wfc3_uvis_single.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: iacr51ohq_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw0/test_uvis_single0/reference_wfc3_uvis_single.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAF-TLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 0.001, Absolute tolerance: 0.001
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(2933), np.int64(286)]:
E                   a&gt; np.float32(0.008995539)
E                   b&gt; np.float32(-0.00045288214)
E                Data differs at [np.int64(242), np.int64(1290)]:
E                   a&gt; np.float32(0.4297761)
E                   b&gt; np.float32(0.011508944)
E                Data differs at [np.int64(3679), np.int64(1985)]:
E                   a&gt; np.float32(0.0072192014)
E                    ?                ^ ^^^^
E                   b&gt; np.float32(-0.0032414855)
E                    ?            +    ^ ^  +++
E                Data differs at [np.int64(3988), np.int64(2952)]:
E                   a&gt; np.float32(0.016936485)
E                    ?              ------
E                   b&gt; np.float32(0.44824585)
E                    ?               +++++
E                Data differs at [np.int64(2783), np.int64(3134)]:
E                   a&gt; np.float32(0.036387343)
E                    ?               ^^^  ^^^
E                   b&gt; np.float32(0.40478778)
E                    ?              + ^^  ^^
E                5 different pixels found (0.00% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(1263), np.int64(84)]:
E                   a&gt; np.float32(1.7024698)
E                    ?                ^^^
E                   b&gt; np.float32(1.7079828)
E                    ?                ^  ++
E                Data differs at [np.int64(1152), np.int64(115)]:
E                   a&gt; np.float32(2.354933)
E                    ?               -  ^
E                   b&gt; np.float32(2.3491673)
E                    ?                 ^^^
E                Data differs at [np.int64(1005), np.int64(138)]:
E                   a&gt; np.float32(5.108713)
E                    ?               ^ ^^^
E                   b&gt; np.float32(5.1155896)
E                    ?               ^^^ ^^
E                Data differs at [np.int64(975), np.int64(140)]:
E                   a&gt; np.float32(5.034109)
E                    ?               - - ^
E                   b&gt; np.float32(5.0407805)
E                    ?                 ^^^^
E                Data differs at [np.int64(1718), np.int64(147)]:
E                   a&gt; np.float32(8.82114)
E                    ?                ---
E                   b&gt; np.float32(8.809392)
E                    ?               ++++
E                Data differs at [np.int64(1718), np.int64(148)]:
E                   a&gt; np.float32(2.2775486)
E                    ?                --- ^
E                   b&gt; np.float32(2.26783)
E                    ?               +  ^
E                Data differs at [np.int64(2434), np.int64(150)]:
E                   a&gt; np.float32(15.016779)
E                    ?                ^ ---
E                   b&gt; np.float32(15.000206)
E                    ?                ^^^^
E                Data differs at [np.int64(2319), np.int64(152)]:
E                   a&gt; np.float32(10.166957)
E                    ?                 ----
E                   b&gt; np.float32(10.155186)
E                    ?                ++++
E                Data differs at [np.int64(2194), np.int64(153)]:
E                   a&gt; np.float32(13.796331)
E                    ?                ^^ ^^
E                   b&gt; np.float32(13.78137)
E                    ?                ^^ ^
E                Data differs at [np.int64(2319), np.int64(153)]:
E                   a&gt; np.float32(9.899693)
E                    ?               ^^^
E                   b&gt; np.float32(9.883893)
E                    ?               ^^^
E                ...
E                3439 different pixels found (0.02% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(2933), np.int64(286)]:
E                   a&gt; np.int32(1)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(242), np.int64(1290)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(1)
E                    ?          ^
E                Data differs at [np.int64(3988), np.int64(2952)]:
E                   a&gt; np.int32(2)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                3 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.wfc3.test_vary_perf.TestVaryPerf" name="test_perf[False-3-wfc3_parallel_on-0.1-True]" time="8.607">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfc3_parallel_on_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_3_wfc3_paralle0/reference_wfc3_parallel_on.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(145), np.int64(9)]:&#10;        a&gt; np.float32(8.634045)&#10;         ?                 ^^^&#10;        b&gt; np.float32(8.633741)&#10;         ?                ++ ^&#10;     Data differs at [np.int64(146), np.int64(9)]:&#10;        a&gt; np.float32(9.101629)&#10;         ?                  --&#10;        b&gt; np.float32(9.101926)&#10;         ?                 ++&#10;     Data differs at [np.int64(145), np.int64(10)]:&#10;        a&gt; np.float32(1.0749277)&#10;         ?                  ^ ^&#10;        b&gt; np.float32(1.0749073)&#10;         ?                  ^ ^&#10;     Data differs at [np.int64(146), np.int64(10)]:&#10;        a&gt; np.float32(1.3534267)&#10;         ?                  ^^^&#10;        b&gt; np.float32(1.3534905)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(81), np.int64(11)]:&#10;        a&gt; np.float32(19.906078)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(19.905945)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(82), np.int64(11)]:&#10;        a&gt; np.float32(6.0668597)&#10;         ?                ^^ --&#10;        b&gt; np.float32(6.0670495)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(81), np.int64(12)]:&#10;        a&gt; np.float32(2.196716)&#10;         ?                  ^^&#10;        b&gt; np.float32(2.196742)&#10;         ?                  ^^&#10;     Data differs at [np.int64(82), np.int64(12)]:&#10;        a&gt; np.float32(0.83121413)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.8312565)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(228), np.int64(14)]:&#10;        a&gt; np.float32(1.515448)&#10;         ?                 ^^^&#10;        b&gt; np.float32(1.5153519)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(229), np.int64(14)]:&#10;        a&gt; np.float32(0.79496676)&#10;         ?                 -----&#10;        b&gt; np.float32(0.79501164)&#10;         ?                +++++&#10;     ...&#10;     758988 different pixels found (37.65% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(35), np.int64(2)]:&#10;        a&gt; np.float32(4.586735)&#10;         ?                  ^&#10;        b&gt; np.float32(4.5867195)&#10;         ?                  ^^&#10;     Data differs at [np.int64(36), np.int64(2)]:&#10;        a&gt; np.float32(1.7817361)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.781721)&#10;         ?                  ^&#10;     Data differs at [np.int64(49), np.int64(3)]:&#10;        a&gt; np.float32(15.214938)&#10;         ?                   ^^&#10;        b&gt; np.float32(15.214912)&#10;         ?                   ^^&#10;     Data differs at [np.int64(50), np.int64(3)]:&#10;        a&gt; np.float32(12.409804)&#10;         ?                    ^&#10;        b&gt; np.float32(12.4097805)&#10;         ?                  +  ^&#10;     Data differs at [np.int64(51), np.int64(3)]:&#10;        a&gt; np.float32(9.605422)&#10;         ?                 ^^^&#10;        b&gt; np.float32(9.605397)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(52), np.int64(3)]:&#10;        a&gt; np.float32(6.8019633)&#10;         ?                  - ^&#10;        b&gt; np.float32(6.801939)&#10;         ?                   ^&#10;     Data differs at [np.int64(53), np.int64(3)]:&#10;        a&gt; np.float32(3.9985518)&#10;         ?                   --&#10;        b&gt; np.float32(3.9985275)&#10;         ?                  ++&#10;     Data differs at [np.int64(54), np.int64(3)]:&#10;        a&gt; np.float32(1.2027918)&#10;         ?                   ^^&#10;        b&gt; np.float32(1.2027694)&#10;         ?                  + ^&#10;     Data differs at [np.int64(64), np.int64(4)]:&#10;        a&gt; np.float32(23.03286)&#10;         ?                   ^&#10;        b&gt; np.float32(23.032825)&#10;         ?                   ^^&#10;     Data differs at [np.int64(65), np.int64(4)]:&#10;        a&gt; np.float32(20.230196)&#10;         ?                   -&#10;        b&gt; np.float32(20.230162)&#10;         ?                    +&#10;     ...&#10;     186060 different pixels found (9.23% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(189), np.int64(705)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(196), np.int64(708)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(963), np.int64(984)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(932), np.int64(987)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(568), np.int64(1045)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(279), np.int64(1283)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(975), np.int64(1439)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     7 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873c58d0&gt;
output = 'wfc3_parallel_on', in_memory = False, num_cores = 3, use_static = True
skywidth = 0.1

    def test_perf(self, output, in_memory, num_cores, use_static, skywidth):
    
        # Prepare input files.
        raw_inputs = ["ib6m02d9q_flt.fits", "ib6m02daq_flt.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                      for i in raw_inputs]
    
        # Merge common parameter settings with test-specific settings
        input_pars = {'build':True, 'preserve':False,
                       'clean':True, 'sky_bits':None}
        input_pars['output'] = output
        input_pars['in_memory'] = in_memory
        input_pars['num_cores'] = num_cores
        input_pars['use_static'] = use_static
        input_pars['skywidth'] = skywidth
        run_file = '{}.log'.format(output)
        input_pars['runfile'] = run_file
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs, use_db=False)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=parObj, **input_pars)
    
        # Compare results
        outfile = '{}_drz.fits'.format(output)
        reffile = 'reference_{}.fits'.format(output)
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_vary_perf.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873c58d0&gt;
outputs = [('wfc3_parallel_on_drz.fits', 'reference_wfc3_parallel_on.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfc3_parallel_on_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_False_3_wfc3_paralle0/reference_wfc3_parallel_on.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(145), np.int64(9)]:
E                   a&gt; np.float32(8.634045)
E                    ?                 ^^^
E                   b&gt; np.float32(8.633741)
E                    ?                ++ ^
E                Data differs at [np.int64(146), np.int64(9)]:
E                   a&gt; np.float32(9.101629)
E                    ?                  --
E                   b&gt; np.float32(9.101926)
E                    ?                 ++
E                Data differs at [np.int64(145), np.int64(10)]:
E                   a&gt; np.float32(1.0749277)
E                    ?                  ^ ^
E                   b&gt; np.float32(1.0749073)
E                    ?                  ^ ^
E                Data differs at [np.int64(146), np.int64(10)]:
E                   a&gt; np.float32(1.3534267)
E                    ?                  ^^^
E                   b&gt; np.float32(1.3534905)
E                    ?                  ^^^
E                Data differs at [np.int64(81), np.int64(11)]:
E                   a&gt; np.float32(19.906078)
E                    ?                 ^^^^
E                   b&gt; np.float32(19.905945)
E                    ?                 ^^^^
E                Data differs at [np.int64(82), np.int64(11)]:
E                   a&gt; np.float32(6.0668597)
E                    ?                ^^ --
E                   b&gt; np.float32(6.0670495)
E                    ?                ^^^^
E                Data differs at [np.int64(81), np.int64(12)]:
E                   a&gt; np.float32(2.196716)
E                    ?                  ^^
E                   b&gt; np.float32(2.196742)
E                    ?                  ^^
E                Data differs at [np.int64(82), np.int64(12)]:
E                   a&gt; np.float32(0.83121413)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.8312565)
E                    ?                  ^^^
E                Data differs at [np.int64(228), np.int64(14)]:
E                   a&gt; np.float32(1.515448)
E                    ?                 ^^^
E                   b&gt; np.float32(1.5153519)
E                    ?                 ^^^^
E                Data differs at [np.int64(229), np.int64(14)]:
E                   a&gt; np.float32(0.79496676)
E                    ?                 -----
E                   b&gt; np.float32(0.79501164)
E                    ?                +++++
E                ...
E                758988 different pixels found (37.65% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(35), np.int64(2)]:
E                   a&gt; np.float32(4.586735)
E                    ?                  ^
E                   b&gt; np.float32(4.5867195)
E                    ?                  ^^
E                Data differs at [np.int64(36), np.int64(2)]:
E                   a&gt; np.float32(1.7817361)
E                    ?                  ^^
E                   b&gt; np.float32(1.781721)
E                    ?                  ^
E                Data differs at [np.int64(49), np.int64(3)]:
E                   a&gt; np.float32(15.214938)
E                    ?                   ^^
E                   b&gt; np.float32(15.214912)
E                    ?                   ^^
E                Data differs at [np.int64(50), np.int64(3)]:
E                   a&gt; np.float32(12.409804)
E                    ?                    ^
E                   b&gt; np.float32(12.4097805)
E                    ?                  +  ^
E                Data differs at [np.int64(51), np.int64(3)]:
E                   a&gt; np.float32(9.605422)
E                    ?                 ^^^
E                   b&gt; np.float32(9.605397)
E                    ?                 ^^^
E                Data differs at [np.int64(52), np.int64(3)]:
E                   a&gt; np.float32(6.8019633)
E                    ?                  - ^
E                   b&gt; np.float32(6.801939)
E                    ?                   ^
E                Data differs at [np.int64(53), np.int64(3)]:
E                   a&gt; np.float32(3.9985518)
E                    ?                   --
E                   b&gt; np.float32(3.9985275)
E                    ?                  ++
E                Data differs at [np.int64(54), np.int64(3)]:
E                   a&gt; np.float32(1.2027918)
E                    ?                   ^^
E                   b&gt; np.float32(1.2027694)
E                    ?                  + ^
E                Data differs at [np.int64(64), np.int64(4)]:
E                   a&gt; np.float32(23.03286)
E                    ?                   ^
E                   b&gt; np.float32(23.032825)
E                    ?                   ^^
E                Data differs at [np.int64(65), np.int64(4)]:
E                   a&gt; np.float32(20.230196)
E                    ?                   -
E                   b&gt; np.float32(20.230162)
E                    ?                    +
E                ...
E                186060 different pixels found (9.23% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(189), np.int64(705)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(196), np.int64(708)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(963), np.int64(984)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(932), np.int64(987)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(568), np.int64(1045)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(279), np.int64(1283)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(975), np.int64(1439)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                7 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.wfc3.test_vary_perf.TestVaryPerf" name="test_perf[True-1-wfc3_virtual-0.1-True]" time="8.087">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfc3_virtual_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_True_1_wfc3_virtual_0/reference_wfc3_virtual.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(145), np.int64(9)]:&#10;        a&gt; np.float32(8.634045)&#10;         ?                 ^^^&#10;        b&gt; np.float32(8.633741)&#10;         ?                ++ ^&#10;     Data differs at [np.int64(146), np.int64(9)]:&#10;        a&gt; np.float32(9.101629)&#10;         ?                  --&#10;        b&gt; np.float32(9.101926)&#10;         ?                 ++&#10;     Data differs at [np.int64(145), np.int64(10)]:&#10;        a&gt; np.float32(1.0749277)&#10;         ?                  ^ ^&#10;        b&gt; np.float32(1.0749073)&#10;         ?                  ^ ^&#10;     Data differs at [np.int64(146), np.int64(10)]:&#10;        a&gt; np.float32(1.3534267)&#10;         ?                  ^^^&#10;        b&gt; np.float32(1.3534905)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(81), np.int64(11)]:&#10;        a&gt; np.float32(19.906078)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(19.905945)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(82), np.int64(11)]:&#10;        a&gt; np.float32(6.0668597)&#10;         ?                ^^ --&#10;        b&gt; np.float32(6.0670495)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(81), np.int64(12)]:&#10;        a&gt; np.float32(2.196716)&#10;         ?                  ^^&#10;        b&gt; np.float32(2.196742)&#10;         ?                  ^^&#10;     Data differs at [np.int64(82), np.int64(12)]:&#10;        a&gt; np.float32(0.83121413)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.8312565)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(228), np.int64(14)]:&#10;        a&gt; np.float32(1.515448)&#10;         ?                 ^^^&#10;        b&gt; np.float32(1.5153519)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(229), np.int64(14)]:&#10;        a&gt; np.float32(0.79496676)&#10;         ?                 -----&#10;        b&gt; np.float32(0.79501164)&#10;         ?                +++++&#10;     ...&#10;     758988 different pixels found (37.65% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(35), np.int64(2)]:&#10;        a&gt; np.float32(4.586735)&#10;         ?                  ^&#10;        b&gt; np.float32(4.5867195)&#10;         ?                  ^^&#10;     Data differs at [np.int64(36), np.int64(2)]:&#10;        a&gt; np.float32(1.7817361)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.781721)&#10;         ?                  ^&#10;     Data differs at [np.int64(49), np.int64(3)]:&#10;        a&gt; np.float32(15.214938)&#10;         ?                   ^^&#10;        b&gt; np.float32(15.214912)&#10;         ?                   ^^&#10;     Data differs at [np.int64(50), np.int64(3)]:&#10;        a&gt; np.float32(12.409804)&#10;         ?                    ^&#10;        b&gt; np.float32(12.4097805)&#10;         ?                  +  ^&#10;     Data differs at [np.int64(51), np.int64(3)]:&#10;        a&gt; np.float32(9.605422)&#10;         ?                 ^^^&#10;        b&gt; np.float32(9.605397)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(52), np.int64(3)]:&#10;        a&gt; np.float32(6.8019633)&#10;         ?                  - ^&#10;        b&gt; np.float32(6.801939)&#10;         ?                   ^&#10;     Data differs at [np.int64(53), np.int64(3)]:&#10;        a&gt; np.float32(3.9985518)&#10;         ?                   --&#10;        b&gt; np.float32(3.9985275)&#10;         ?                  ++&#10;     Data differs at [np.int64(54), np.int64(3)]:&#10;        a&gt; np.float32(1.2027918)&#10;         ?                   ^^&#10;        b&gt; np.float32(1.2027694)&#10;         ?                  + ^&#10;     Data differs at [np.int64(64), np.int64(4)]:&#10;        a&gt; np.float32(23.03286)&#10;         ?                   ^&#10;        b&gt; np.float32(23.032825)&#10;         ?                   ^^&#10;     Data differs at [np.int64(65), np.int64(4)]:&#10;        a&gt; np.float32(20.230196)&#10;         ?                   -&#10;        b&gt; np.float32(20.230162)&#10;         ?                    +&#10;     ...&#10;     186060 different pixels found (9.23% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(189), np.int64(705)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(196), np.int64(708)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(963), np.int64(984)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(932), np.int64(987)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(568), np.int64(1045)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(279), np.int64(1283)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(975), np.int64(1439)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     7 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a87331a10&gt;
output = 'wfc3_virtual', in_memory = True, num_cores = 1, use_static = True
skywidth = 0.1

    def test_perf(self, output, in_memory, num_cores, use_static, skywidth):
    
        # Prepare input files.
        raw_inputs = ["ib6m02d9q_flt.fits", "ib6m02daq_flt.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                      for i in raw_inputs]
    
        # Merge common parameter settings with test-specific settings
        input_pars = {'build':True, 'preserve':False,
                       'clean':True, 'sky_bits':None}
        input_pars['output'] = output
        input_pars['in_memory'] = in_memory
        input_pars['num_cores'] = num_cores
        input_pars['use_static'] = use_static
        input_pars['skywidth'] = skywidth
        run_file = '{}.log'.format(output)
        input_pars['runfile'] = run_file
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs, use_db=False)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=parObj, **input_pars)
    
        # Compare results
        outfile = '{}_drz.fits'.format(output)
        reffile = 'reference_{}.fits'.format(output)
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_vary_perf.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a87331a10&gt;
outputs = [('wfc3_virtual_drz.fits', 'reference_wfc3_virtual.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfc3_virtual_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_True_1_wfc3_virtual_0/reference_wfc3_virtual.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(145), np.int64(9)]:
E                   a&gt; np.float32(8.634045)
E                    ?                 ^^^
E                   b&gt; np.float32(8.633741)
E                    ?                ++ ^
E                Data differs at [np.int64(146), np.int64(9)]:
E                   a&gt; np.float32(9.101629)
E                    ?                  --
E                   b&gt; np.float32(9.101926)
E                    ?                 ++
E                Data differs at [np.int64(145), np.int64(10)]:
E                   a&gt; np.float32(1.0749277)
E                    ?                  ^ ^
E                   b&gt; np.float32(1.0749073)
E                    ?                  ^ ^
E                Data differs at [np.int64(146), np.int64(10)]:
E                   a&gt; np.float32(1.3534267)
E                    ?                  ^^^
E                   b&gt; np.float32(1.3534905)
E                    ?                  ^^^
E                Data differs at [np.int64(81), np.int64(11)]:
E                   a&gt; np.float32(19.906078)
E                    ?                 ^^^^
E                   b&gt; np.float32(19.905945)
E                    ?                 ^^^^
E                Data differs at [np.int64(82), np.int64(11)]:
E                   a&gt; np.float32(6.0668597)
E                    ?                ^^ --
E                   b&gt; np.float32(6.0670495)
E                    ?                ^^^^
E                Data differs at [np.int64(81), np.int64(12)]:
E                   a&gt; np.float32(2.196716)
E                    ?                  ^^
E                   b&gt; np.float32(2.196742)
E                    ?                  ^^
E                Data differs at [np.int64(82), np.int64(12)]:
E                   a&gt; np.float32(0.83121413)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.8312565)
E                    ?                  ^^^
E                Data differs at [np.int64(228), np.int64(14)]:
E                   a&gt; np.float32(1.515448)
E                    ?                 ^^^
E                   b&gt; np.float32(1.5153519)
E                    ?                 ^^^^
E                Data differs at [np.int64(229), np.int64(14)]:
E                   a&gt; np.float32(0.79496676)
E                    ?                 -----
E                   b&gt; np.float32(0.79501164)
E                    ?                +++++
E                ...
E                758988 different pixels found (37.65% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(35), np.int64(2)]:
E                   a&gt; np.float32(4.586735)
E                    ?                  ^
E                   b&gt; np.float32(4.5867195)
E                    ?                  ^^
E                Data differs at [np.int64(36), np.int64(2)]:
E                   a&gt; np.float32(1.7817361)
E                    ?                  ^^
E                   b&gt; np.float32(1.781721)
E                    ?                  ^
E                Data differs at [np.int64(49), np.int64(3)]:
E                   a&gt; np.float32(15.214938)
E                    ?                   ^^
E                   b&gt; np.float32(15.214912)
E                    ?                   ^^
E                Data differs at [np.int64(50), np.int64(3)]:
E                   a&gt; np.float32(12.409804)
E                    ?                    ^
E                   b&gt; np.float32(12.4097805)
E                    ?                  +  ^
E                Data differs at [np.int64(51), np.int64(3)]:
E                   a&gt; np.float32(9.605422)
E                    ?                 ^^^
E                   b&gt; np.float32(9.605397)
E                    ?                 ^^^
E                Data differs at [np.int64(52), np.int64(3)]:
E                   a&gt; np.float32(6.8019633)
E                    ?                  - ^
E                   b&gt; np.float32(6.801939)
E                    ?                   ^
E                Data differs at [np.int64(53), np.int64(3)]:
E                   a&gt; np.float32(3.9985518)
E                    ?                   --
E                   b&gt; np.float32(3.9985275)
E                    ?                  ++
E                Data differs at [np.int64(54), np.int64(3)]:
E                   a&gt; np.float32(1.2027918)
E                    ?                   ^^
E                   b&gt; np.float32(1.2027694)
E                    ?                  + ^
E                Data differs at [np.int64(64), np.int64(4)]:
E                   a&gt; np.float32(23.03286)
E                    ?                   ^
E                   b&gt; np.float32(23.032825)
E                    ?                   ^^
E                Data differs at [np.int64(65), np.int64(4)]:
E                   a&gt; np.float32(20.230196)
E                    ?                   -
E                   b&gt; np.float32(20.230162)
E                    ?                    +
E                ...
E                186060 different pixels found (9.23% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(189), np.int64(705)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(196), np.int64(708)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(963), np.int64(984)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(932), np.int64(987)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(568), np.int64(1045)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(279), np.int64(1283)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(975), np.int64(1439)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                7 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.stis.test_stis.TestSTIS" name="test_stis_oiii_ccd" time="7.631"/>
    <testcase classname="tests.wfc3.test_wfc3.TestWFC3" name="test_uvis_asn" time="59.466"/>
    <testcase classname="tests.wfc3.test_vary_perf.TestVaryPerf" name="test_perf[True-3-wfc3_virtual_parallel-0.1-True]" time="7.679">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfc3_virtual_parallel_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_True_3_wfc3_virtual_0/reference_wfc3_virtual_parallel.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(145), np.int64(9)]:&#10;        a&gt; np.float32(8.634045)&#10;         ?                 ^^^&#10;        b&gt; np.float32(8.633741)&#10;         ?                ++ ^&#10;     Data differs at [np.int64(146), np.int64(9)]:&#10;        a&gt; np.float32(9.101629)&#10;         ?                  --&#10;        b&gt; np.float32(9.101926)&#10;         ?                 ++&#10;     Data differs at [np.int64(145), np.int64(10)]:&#10;        a&gt; np.float32(1.0749277)&#10;         ?                  ^ ^&#10;        b&gt; np.float32(1.0749073)&#10;         ?                  ^ ^&#10;     Data differs at [np.int64(146), np.int64(10)]:&#10;        a&gt; np.float32(1.3534267)&#10;         ?                  ^^^&#10;        b&gt; np.float32(1.3534905)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(81), np.int64(11)]:&#10;        a&gt; np.float32(19.906078)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(19.905945)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(82), np.int64(11)]:&#10;        a&gt; np.float32(6.0668597)&#10;         ?                ^^ --&#10;        b&gt; np.float32(6.0670495)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(81), np.int64(12)]:&#10;        a&gt; np.float32(2.196716)&#10;         ?                  ^^&#10;        b&gt; np.float32(2.196742)&#10;         ?                  ^^&#10;     Data differs at [np.int64(82), np.int64(12)]:&#10;        a&gt; np.float32(0.83121413)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.8312565)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(228), np.int64(14)]:&#10;        a&gt; np.float32(1.515448)&#10;         ?                 ^^^&#10;        b&gt; np.float32(1.5153519)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(229), np.int64(14)]:&#10;        a&gt; np.float32(0.79496676)&#10;         ?                 -----&#10;        b&gt; np.float32(0.79501164)&#10;         ?                +++++&#10;     ...&#10;     758988 different pixels found (37.65% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(35), np.int64(2)]:&#10;        a&gt; np.float32(4.586735)&#10;         ?                  ^&#10;        b&gt; np.float32(4.5867195)&#10;         ?                  ^^&#10;     Data differs at [np.int64(36), np.int64(2)]:&#10;        a&gt; np.float32(1.7817361)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.781721)&#10;         ?                  ^&#10;     Data differs at [np.int64(49), np.int64(3)]:&#10;        a&gt; np.float32(15.214938)&#10;         ?                   ^^&#10;        b&gt; np.float32(15.214912)&#10;         ?                   ^^&#10;     Data differs at [np.int64(50), np.int64(3)]:&#10;        a&gt; np.float32(12.409804)&#10;         ?                    ^&#10;        b&gt; np.float32(12.4097805)&#10;         ?                  +  ^&#10;     Data differs at [np.int64(51), np.int64(3)]:&#10;        a&gt; np.float32(9.605422)&#10;         ?                 ^^^&#10;        b&gt; np.float32(9.605397)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(52), np.int64(3)]:&#10;        a&gt; np.float32(6.8019633)&#10;         ?                  - ^&#10;        b&gt; np.float32(6.801939)&#10;         ?                   ^&#10;     Data differs at [np.int64(53), np.int64(3)]:&#10;        a&gt; np.float32(3.9985518)&#10;         ?                   --&#10;        b&gt; np.float32(3.9985275)&#10;         ?                  ++&#10;     Data differs at [np.int64(54), np.int64(3)]:&#10;        a&gt; np.float32(1.2027918)&#10;         ?                   ^^&#10;        b&gt; np.float32(1.2027694)&#10;         ?                  + ^&#10;     Data differs at [np.int64(64), np.int64(4)]:&#10;        a&gt; np.float32(23.03286)&#10;         ?                   ^&#10;        b&gt; np.float32(23.032825)&#10;         ?                   ^^&#10;     Data differs at [np.int64(65), np.int64(4)]:&#10;        a&gt; np.float32(20.230196)&#10;         ?                   -&#10;        b&gt; np.float32(20.230162)&#10;         ?                    +&#10;     ...&#10;     186060 different pixels found (9.23% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(189), np.int64(705)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(196), np.int64(708)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(963), np.int64(984)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(932), np.int64(987)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(568), np.int64(1045)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(279), np.int64(1283)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(975), np.int64(1439)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     7 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873cee90&gt;
output = 'wfc3_virtual_parallel', in_memory = True, num_cores = 3
use_static = True, skywidth = 0.1

    def test_perf(self, output, in_memory, num_cores, use_static, skywidth):
    
        # Prepare input files.
        raw_inputs = ["ib6m02d9q_flt.fits", "ib6m02daq_flt.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                      for i in raw_inputs]
    
        # Merge common parameter settings with test-specific settings
        input_pars = {'build':True, 'preserve':False,
                       'clean':True, 'sky_bits':None}
        input_pars['output'] = output
        input_pars['in_memory'] = in_memory
        input_pars['num_cores'] = num_cores
        input_pars['use_static'] = use_static
        input_pars['skywidth'] = skywidth
        run_file = '{}.log'.format(output)
        input_pars['runfile'] = run_file
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs, use_db=False)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=parObj, **input_pars)
    
        # Compare results
        outfile = '{}_drz.fits'.format(output)
        reffile = 'reference_{}.fits'.format(output)
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_vary_perf.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873cee90&gt;
outputs = [('wfc3_virtual_parallel_drz.fits', 'reference_wfc3_virtual_parallel.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfc3_virtual_parallel_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_True_3_wfc3_virtual_0/reference_wfc3_virtual_parallel.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(145), np.int64(9)]:
E                   a&gt; np.float32(8.634045)
E                    ?                 ^^^
E                   b&gt; np.float32(8.633741)
E                    ?                ++ ^
E                Data differs at [np.int64(146), np.int64(9)]:
E                   a&gt; np.float32(9.101629)
E                    ?                  --
E                   b&gt; np.float32(9.101926)
E                    ?                 ++
E                Data differs at [np.int64(145), np.int64(10)]:
E                   a&gt; np.float32(1.0749277)
E                    ?                  ^ ^
E                   b&gt; np.float32(1.0749073)
E                    ?                  ^ ^
E                Data differs at [np.int64(146), np.int64(10)]:
E                   a&gt; np.float32(1.3534267)
E                    ?                  ^^^
E                   b&gt; np.float32(1.3534905)
E                    ?                  ^^^
E                Data differs at [np.int64(81), np.int64(11)]:
E                   a&gt; np.float32(19.906078)
E                    ?                 ^^^^
E                   b&gt; np.float32(19.905945)
E                    ?                 ^^^^
E                Data differs at [np.int64(82), np.int64(11)]:
E                   a&gt; np.float32(6.0668597)
E                    ?                ^^ --
E                   b&gt; np.float32(6.0670495)
E                    ?                ^^^^
E                Data differs at [np.int64(81), np.int64(12)]:
E                   a&gt; np.float32(2.196716)
E                    ?                  ^^
E                   b&gt; np.float32(2.196742)
E                    ?                  ^^
E                Data differs at [np.int64(82), np.int64(12)]:
E                   a&gt; np.float32(0.83121413)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.8312565)
E                    ?                  ^^^
E                Data differs at [np.int64(228), np.int64(14)]:
E                   a&gt; np.float32(1.515448)
E                    ?                 ^^^
E                   b&gt; np.float32(1.5153519)
E                    ?                 ^^^^
E                Data differs at [np.int64(229), np.int64(14)]:
E                   a&gt; np.float32(0.79496676)
E                    ?                 -----
E                   b&gt; np.float32(0.79501164)
E                    ?                +++++
E                ...
E                758988 different pixels found (37.65% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(35), np.int64(2)]:
E                   a&gt; np.float32(4.586735)
E                    ?                  ^
E                   b&gt; np.float32(4.5867195)
E                    ?                  ^^
E                Data differs at [np.int64(36), np.int64(2)]:
E                   a&gt; np.float32(1.7817361)
E                    ?                  ^^
E                   b&gt; np.float32(1.781721)
E                    ?                  ^
E                Data differs at [np.int64(49), np.int64(3)]:
E                   a&gt; np.float32(15.214938)
E                    ?                   ^^
E                   b&gt; np.float32(15.214912)
E                    ?                   ^^
E                Data differs at [np.int64(50), np.int64(3)]:
E                   a&gt; np.float32(12.409804)
E                    ?                    ^
E                   b&gt; np.float32(12.4097805)
E                    ?                  +  ^
E                Data differs at [np.int64(51), np.int64(3)]:
E                   a&gt; np.float32(9.605422)
E                    ?                 ^^^
E                   b&gt; np.float32(9.605397)
E                    ?                 ^^^
E                Data differs at [np.int64(52), np.int64(3)]:
E                   a&gt; np.float32(6.8019633)
E                    ?                  - ^
E                   b&gt; np.float32(6.801939)
E                    ?                   ^
E                Data differs at [np.int64(53), np.int64(3)]:
E                   a&gt; np.float32(3.9985518)
E                    ?                   --
E                   b&gt; np.float32(3.9985275)
E                    ?                  ++
E                Data differs at [np.int64(54), np.int64(3)]:
E                   a&gt; np.float32(1.2027918)
E                    ?                   ^^
E                   b&gt; np.float32(1.2027694)
E                    ?                  + ^
E                Data differs at [np.int64(64), np.int64(4)]:
E                   a&gt; np.float32(23.03286)
E                    ?                   ^
E                   b&gt; np.float32(23.032825)
E                    ?                   ^^
E                Data differs at [np.int64(65), np.int64(4)]:
E                   a&gt; np.float32(20.230196)
E                    ?                   -
E                   b&gt; np.float32(20.230162)
E                    ?                    +
E                ...
E                186060 different pixels found (9.23% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(189), np.int64(705)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(196), np.int64(708)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(963), np.int64(984)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(932), np.int64(987)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(568), np.int64(1045)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(279), np.int64(1283)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(975), np.int64(1439)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                7 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.wfpc2.test_wfpc2.TestWFPC2" name="test_waiver_single" time="0.000">
      <skipped type="pytest.skip" message="disable until truth files can be updated">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfpc2/test_wfpc2.py:12: disable until truth files can be updated</skipped>
    </testcase>
    <testcase classname="tests.wfpc2.test_wfpc2.TestWFPC2" name="test_waiver_asn" time="0.000">
      <skipped type="pytest.skip" message="disable until truth files can be updated">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfpc2/test_wfpc2.py:54: disable until truth files can be updated</skipped>
    </testcase>
    <testcase classname="tests.wfpc2.test_wfpc2.TestWFPC2" name="test_wfpc2_single" time="5.616">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfpc2_single_mef_drw.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw2/test_wfpc2_single0/reference_single_mef.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAF-TLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(1277), np.int64(9)]:&#10;        a&gt; np.float32(0.07536309)&#10;         ?                  ^^ ^&#10;        b&gt; np.float32(0.075352505)&#10;         ?                  ^^^ ^&#10;     Data differs at [np.int64(1284), np.int64(9)]:&#10;        a&gt; np.float32(0.3860577)&#10;         ?                  - ^&#10;        b&gt; np.float32(0.38607603)&#10;         ?                   ^^^&#10;     Data differs at [np.int64(1277), np.int64(10)]:&#10;        a&gt; np.float32(0.07365699)&#10;         ?                  ^ ^^&#10;        b&gt; np.float32(0.07364642)&#10;         ?                  ^ ^^&#10;     Data differs at [np.int64(1284), np.int64(10)]:&#10;        a&gt; np.float32(0.38897058)&#10;         ?                  ---&#10;        b&gt; np.float32(0.38898882)&#10;         ?                   +++&#10;     Data differs at [np.int64(1283), np.int64(11)]:&#10;        a&gt; np.float32(0.27634892)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.2763605)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(1284), np.int64(11)]:&#10;        a&gt; np.float32(0.1838517)&#10;         ?                  ^^^&#10;        b&gt; np.float32(0.18386628)&#10;         ?                  ^^^^&#10;     Data differs at [np.int64(2502), np.int64(25)]:&#10;        a&gt; np.float32(0.15975663)&#10;         ?                  ^^^^&#10;        b&gt; np.float32(0.1597447)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(2502), np.int64(26)]:&#10;        a&gt; np.float32(0.24743196)&#10;         ?                   - -&#10;        b&gt; np.float32(0.24741739)&#10;         ?                  ++&#10;     Data differs at [np.int64(2504), np.int64(26)]:&#10;        a&gt; np.float32(0.18565741)&#10;         ?                  -  -&#10;        b&gt; np.float32(0.18567184)&#10;         ?                   ++&#10;     Data differs at [np.int64(2504), np.int64(27)]:&#10;        a&gt; np.float32(0.1496419)&#10;         ?                  ^^^&#10;        b&gt; np.float32(0.14965726)&#10;         ?                  ^^^^&#10;     ...&#10;     2662 different pixels found (0.02% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(1688), np.int64(4)]:&#10;        a&gt; np.float32(15.997067)&#10;         ?                 -- ^&#10;        b&gt; np.float32(15.99669)&#10;         ?                  ^^&#10;     Data differs at [np.int64(1689), np.int64(4)]:&#10;        a&gt; np.float32(20.775627)&#10;         ?                  ^^^&#10;        b&gt; np.float32(20.775555)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(1690), np.int64(4)]:&#10;        a&gt; np.float32(20.87373)&#10;         ?                   -&#10;        b&gt; np.float32(20.873657)&#10;         ?                  ++&#10;     Data differs at [np.int64(1691), np.int64(4)]:&#10;        a&gt; np.float32(20.971962)&#10;         ?                  ^^^&#10;        b&gt; np.float32(20.971888)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(1692), np.int64(4)]:&#10;        a&gt; np.float32(21.070135)&#10;         ?                  ^^^&#10;        b&gt; np.float32(21.07006)&#10;         ?                  ^^&#10;     Data differs at [np.int64(1693), np.int64(4)]:&#10;        a&gt; np.float32(21.168287)&#10;         ?                   ^^&#10;        b&gt; np.float32(21.168213)&#10;         ?                   ^^&#10;     Data differs at [np.int64(1694), np.int64(4)]:&#10;        a&gt; np.float32(21.266533)&#10;         ?                   ^^&#10;        b&gt; np.float32(21.266457)&#10;         ?                  + ^&#10;     Data differs at [np.int64(1695), np.int64(4)]:&#10;        a&gt; np.float32(21.364601)&#10;         ?                  ^^^&#10;        b&gt; np.float32(21.364527)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(1696), np.int64(4)]:&#10;        a&gt; np.float32(21.462921)&#10;         ?                  ^^^&#10;        b&gt; np.float32(21.462845)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(1697), np.int64(4)]:&#10;        a&gt; np.float32(21.560907)&#10;         ?                  ^^^&#10;        b&gt; np.float32(21.560831)&#10;         ?                  ^^^&#10;     ...&#10;     237707 different pixels found (2.17% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(237), np.int64(906)]:&#10;        a&gt; np.int32(4)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(1440), np.int64(2220)]:&#10;        a&gt; np.int32(2)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(105), np.int64(2416)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     3 different pixels found (0.00% different).">self = &lt;tests.wfpc2.test_wfpc2.TestWFPC2 object at 0x7f6287dbeb50&gt;

    def test_wfpc2_single(self):
        """ This test confirms that drizzlepac can correcly process single
        WFPC2 exposures.
        """
    
        # Prepare input files.
        raw_inputs = ["u9yq0703m_c0m.fits", "u9yq0703m_c1m.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                  for i in raw_inputs]
    
        output = 'wfpc2_single_mef'
        outfile = '{}_drw.fits'.format(output)
        reffile = 'reference_single_mef.fits'
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs[0], use_db=False)
    
        # run astrodrizzle now...
        adriz_parobj = teal.load('astrodrizzle', defaults=True)
        adriz_parobj['output'] = output
        adriz_parobj['build'] = True
        adriz_parobj['in_memory'] = False
        adriz_parobj['runfile'] = 'wfpc2_single_mef.log'
        adriz_parobj['STATE OF INPUT FILES']['preserve'] = False
        adriz_parobj['STATE OF INPUT FILES']['clean'] = True
        adriz_parobj['STEP 1: STATIC MASK']['static'] = False
        adriz_parobj['STEP 2: SKY SUBTRACTION']['skysub'] = False
        adriz_parobj['STEP 3: DRIZZLE SEPARATE IMAGES']['driz_separate'] = False
        adriz_parobj['STEP 4: CREATE MEDIAN IMAGE']['median'] = False
        adriz_parobj['STEP 5: BLOT BACK THE MEDIAN IMAGE']['blot'] = False
        adriz_parobj['STEP 6: REMOVE COSMIC RAYS WITH DERIV, DRIZ_CR']['driz_cr'] = False
    
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=adriz_parobj)
    
        # Compare results
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfpc2/test_wfpc2.py:128: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfpc2.test_wfpc2.TestWFPC2 object at 0x7f6287dbeb50&gt;
outputs = [('wfpc2_single_mef_drw.fits', 'reference_single_mef.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfpc2_single_mef_drw.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw2/test_wfpc2_single0/reference_single_mef.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAF-TLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(1277), np.int64(9)]:
E                   a&gt; np.float32(0.07536309)
E                    ?                  ^^ ^
E                   b&gt; np.float32(0.075352505)
E                    ?                  ^^^ ^
E                Data differs at [np.int64(1284), np.int64(9)]:
E                   a&gt; np.float32(0.3860577)
E                    ?                  - ^
E                   b&gt; np.float32(0.38607603)
E                    ?                   ^^^
E                Data differs at [np.int64(1277), np.int64(10)]:
E                   a&gt; np.float32(0.07365699)
E                    ?                  ^ ^^
E                   b&gt; np.float32(0.07364642)
E                    ?                  ^ ^^
E                Data differs at [np.int64(1284), np.int64(10)]:
E                   a&gt; np.float32(0.38897058)
E                    ?                  ---
E                   b&gt; np.float32(0.38898882)
E                    ?                   +++
E                Data differs at [np.int64(1283), np.int64(11)]:
E                   a&gt; np.float32(0.27634892)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.2763605)
E                    ?                  ^^^
E                Data differs at [np.int64(1284), np.int64(11)]:
E                   a&gt; np.float32(0.1838517)
E                    ?                  ^^^
E                   b&gt; np.float32(0.18386628)
E                    ?                  ^^^^
E                Data differs at [np.int64(2502), np.int64(25)]:
E                   a&gt; np.float32(0.15975663)
E                    ?                  ^^^^
E                   b&gt; np.float32(0.1597447)
E                    ?                  ^^^
E                Data differs at [np.int64(2502), np.int64(26)]:
E                   a&gt; np.float32(0.24743196)
E                    ?                   - -
E                   b&gt; np.float32(0.24741739)
E                    ?                  ++
E                Data differs at [np.int64(2504), np.int64(26)]:
E                   a&gt; np.float32(0.18565741)
E                    ?                  -  -
E                   b&gt; np.float32(0.18567184)
E                    ?                   ++
E                Data differs at [np.int64(2504), np.int64(27)]:
E                   a&gt; np.float32(0.1496419)
E                    ?                  ^^^
E                   b&gt; np.float32(0.14965726)
E                    ?                  ^^^^
E                ...
E                2662 different pixels found (0.02% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(1688), np.int64(4)]:
E                   a&gt; np.float32(15.997067)
E                    ?                 -- ^
E                   b&gt; np.float32(15.99669)
E                    ?                  ^^
E                Data differs at [np.int64(1689), np.int64(4)]:
E                   a&gt; np.float32(20.775627)
E                    ?                  ^^^
E                   b&gt; np.float32(20.775555)
E                    ?                  ^^^
E                Data differs at [np.int64(1690), np.int64(4)]:
E                   a&gt; np.float32(20.87373)
E                    ?                   -
E                   b&gt; np.float32(20.873657)
E                    ?                  ++
E                Data differs at [np.int64(1691), np.int64(4)]:
E                   a&gt; np.float32(20.971962)
E                    ?                  ^^^
E                   b&gt; np.float32(20.971888)
E                    ?                  ^^^
E                Data differs at [np.int64(1692), np.int64(4)]:
E                   a&gt; np.float32(21.070135)
E                    ?                  ^^^
E                   b&gt; np.float32(21.07006)
E                    ?                  ^^
E                Data differs at [np.int64(1693), np.int64(4)]:
E                   a&gt; np.float32(21.168287)
E                    ?                   ^^
E                   b&gt; np.float32(21.168213)
E                    ?                   ^^
E                Data differs at [np.int64(1694), np.int64(4)]:
E                   a&gt; np.float32(21.266533)
E                    ?                   ^^
E                   b&gt; np.float32(21.266457)
E                    ?                  + ^
E                Data differs at [np.int64(1695), np.int64(4)]:
E                   a&gt; np.float32(21.364601)
E                    ?                  ^^^
E                   b&gt; np.float32(21.364527)
E                    ?                  ^^^
E                Data differs at [np.int64(1696), np.int64(4)]:
E                   a&gt; np.float32(21.462921)
E                    ?                  ^^^
E                   b&gt; np.float32(21.462845)
E                    ?                  ^^^
E                Data differs at [np.int64(1697), np.int64(4)]:
E                   a&gt; np.float32(21.560907)
E                    ?                  ^^^
E                   b&gt; np.float32(21.560831)
E                    ?                  ^^^
E                ...
E                237707 different pixels found (2.17% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(237), np.int64(906)]:
E                   a&gt; np.int32(4)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(1440), np.int64(2220)]:
E                   a&gt; np.int32(2)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(105), np.int64(2416)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                3 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.wfpc2.test_wfpc2.TestWFPC2" name="test_mef_asn" time="28.554">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfpc2_mef_drw.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw2/test_mef_asn0/reference_wfpc2_asn_mef.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAF-TLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 0.0001&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(1286), np.int64(12)]:&#10;        a&gt; np.float32(1.7789153)&#10;         ?                   --&#10;        b&gt; np.float32(1.7787951)&#10;         ?                 + +&#10;     Data differs at [np.int64(1288), np.int64(12)]:&#10;        a&gt; np.float32(2.0126798)&#10;         ?                  ^^^&#10;        b&gt; np.float32(2.0128613)&#10;         ?                 + ^^&#10;     Data differs at [np.int64(1288), np.int64(13)]:&#10;        a&gt; np.float32(1.7748948)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(1.7750406)&#10;         ?                ++ ^^&#10;     Data differs at [np.int64(2972), np.int64(19)]:&#10;        a&gt; np.float32(0.0007368752)&#10;         ?                 ---  ^^&#10;        b&gt; np.float32(0.0008787886)&#10;         ?                   ^^^^^&#10;     Data differs at [np.int64(2971), np.int64(20)]:&#10;        a&gt; np.float32(0.0010283053)&#10;         ?                 -  ^^ -&#10;        b&gt; np.float32(0.0012973895)&#10;         ?                  +++ ^&#10;     Data differs at [np.int64(2972), np.int64(20)]:&#10;        a&gt; np.float32(0.000860097)&#10;         ?                ^^^^^&#10;        b&gt; np.float32(0.0012977055)&#10;         ?                ^^  ++++&#10;     Data differs at [np.int64(2973), np.int64(20)]:&#10;        a&gt; np.float32(0.00017883224)&#10;         ?                 ^^  ^^^^&#10;        b&gt; np.float32(0.0005288879)&#10;         ?                 ^^  ^^^&#10;     Data differs at [np.int64(2971), np.int64(21)]:&#10;        a&gt; np.float32(0.001033082)&#10;         ?                 ^ ^^^^&#10;        b&gt; np.float32(0.0012736446)&#10;         ?                 ^^ ^^^^&#10;     Data differs at [np.int64(2972), np.int64(21)]:&#10;        a&gt; np.float32(0.0008611491)&#10;         ?                ^^   ^^^&#10;        b&gt; np.float32(0.0012613167)&#10;         ?                ^^  + ^^&#10;     Data differs at [np.int64(2973), np.int64(21)]:&#10;        a&gt; np.float32(0.00016665227)&#10;         ?                   ------&#10;        b&gt; np.float32(0.00049197796)&#10;         ?                 ++ ++++&#10;     ...&#10;     1701 different pixels found (0.02% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(1688), np.int64(4)]:&#10;        a&gt; np.float32(31.502224)&#10;         ?               ^^^^^&#10;        b&gt; np.float32(31.499474)&#10;         ?               ^^^^^&#10;     Data differs at [np.int64(1689), np.int64(4)]:&#10;        a&gt; np.float32(41.411472)&#10;         ?                  --&#10;        b&gt; np.float32(41.41125)&#10;         ?                   +&#10;     Data differs at [np.int64(1690), np.int64(4)]:&#10;        a&gt; np.float32(41.607666)&#10;         ?                  ^^^&#10;        b&gt; np.float32(41.607445)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(1691), np.int64(4)]:&#10;        a&gt; np.float32(41.8041)&#10;         ?                 ^^&#10;        b&gt; np.float32(41.803875)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(1692), np.int64(4)]:&#10;        a&gt; np.float32(42.00044)&#10;         ?                  ^^&#10;        b&gt; np.float32(42.000206)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(1693), np.int64(4)]:&#10;        a&gt; np.float32(42.196712)&#10;         ?                  ^^^&#10;        b&gt; np.float32(42.19648)&#10;         ?                  ^^&#10;     Data differs at [np.int64(1694), np.int64(4)]:&#10;        a&gt; np.float32(42.39319)&#10;         ?                 ^^&#10;        b&gt; np.float32(42.39296)&#10;         ?                 ^ +&#10;     Data differs at [np.int64(1695), np.int64(4)]:&#10;        a&gt; np.float32(42.589302)&#10;         ?                  - ^&#10;        b&gt; np.float32(42.589066)&#10;         ?                   ^^&#10;     Data differs at [np.int64(1696), np.int64(4)]:&#10;        a&gt; np.float32(42.785927)&#10;         ?                   --&#10;        b&gt; np.float32(42.78569)&#10;         ?                  +&#10;     Data differs at [np.int64(1697), np.int64(4)]:&#10;        a&gt; np.float32(42.981873)&#10;         ?                  ^^&#10;        b&gt; np.float32(42.98163)&#10;         ?                  ^&#10;     ...&#10;     5292969 different pixels found (48.27% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(2972), np.int64(20)]:&#10;        a&gt; np.int32(2184)&#10;         ?           ---&#10;        b&gt; np.int32(34952)&#10;         ?          ++++&#10;     Data differs at [np.int64(2973), np.int64(20)]:&#10;        a&gt; np.int32(2056)&#10;         ?           ^^^&#10;        b&gt; np.int32(34824)&#10;         ?          +++ ^&#10;     Data differs at [np.int64(2956), np.int64(35)]:&#10;        a&gt; np.int32(34952)&#10;         ?            ---&#10;        b&gt; np.int32(32904)&#10;         ?           +++&#10;     Data differs at [np.int64(2957), np.int64(35)]:&#10;        a&gt; np.int32(34952)&#10;         ?            ---&#10;        b&gt; np.int32(32904)&#10;         ?           +++&#10;     Data differs at [np.int64(201), np.int64(45)]:&#10;        a&gt; np.int32(17412)&#10;         ?             ^^&#10;        b&gt; np.int32(17476)&#10;         ?             ^^&#10;     Data differs at [np.int64(1447), np.int64(45)]:&#10;        a&gt; np.int32(1092)&#10;         ?           ^^^&#10;        b&gt; np.int32(17476)&#10;         ?           ^^^^&#10;     Data differs at [np.int64(3003), np.int64(51)]:&#10;        a&gt; np.int32(34952)&#10;         ?            ---&#10;        b&gt; np.int32(32904)&#10;         ?           +++&#10;     Data differs at [np.int64(3004), np.int64(51)]:&#10;        a&gt; np.int32(34952)&#10;         ?            ---&#10;        b&gt; np.int32(32904)&#10;         ?           +++&#10;     Data differs at [np.int64(1394), np.int64(66)]:&#10;        a&gt; np.int32(17476)&#10;         ?           ^^^^&#10;        b&gt; np.int32(1092)&#10;         ?           ^^^&#10;     Data differs at [np.int64(1394), np.int64(67)]:&#10;        a&gt; np.int32(17472)&#10;         ?           ^^^^&#10;        b&gt; np.int32(1088)&#10;         ?           ^^^&#10;     ...&#10;     634 different pixels found (0.01% different).">self = &lt;tests.wfpc2.test_wfpc2.TestWFPC2 object at 0x7f6287dbfb50&gt;

    def test_mef_asn(self):
        """ This test confirms that drizzlepac can correcly process input
        WFPC2 data stored in Multi-extensions FITS(MEF) format.
        """
    
        # Customized tolerances as Linux and Mac would need different truth files.
        self.rtol = 1e-6
        self.atol = 1e-4
        # Prepare input files.
        raw_inputs = ['u9yq0703m_c0m.fits', 'u9yq0704m_c0m.fits',
                      'u9yq0707m_c0m.fits', 'u9yq0708m_c0m.fits',
                      'u9yq0703m_c1m.fits', 'u9yq0704m_c1m.fits',
                      'u9yq0707m_c1m.fits', 'u9yq0708m_c1m.fits']
        inputs = [os.path.basename(self.get_input_file('input', i))
                  for i in raw_inputs]
    
        output = 'wfpc2_mef'
        outfile = '{}_drw.fits'.format(output)
        reffile = 'reference_wfpc2_asn_mef.fits'
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs[:4], use_db=False)
    
        # run astrodrizzle now...
        adriz_parobj = teal.load('astrodrizzle', defaults=True)
        adriz_parobj['output'] = output
        adriz_parobj['build'] = True
        adriz_parobj['in_memory'] = True
        adriz_parobj['runfile'] = 'wfpc2_asn_mef.log'
        adriz_parobj['STATE OF INPUT FILES']['preserve'] = False
        adriz_parobj['STATE OF INPUT FILES']['clean'] = True
        adriz_parobj['STEP 2: SKY SUBTRACTION']['skysub'] = False
    
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=adriz_parobj)
    
        # Compare results
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfpc2/test_wfpc2.py:167: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfpc2.test_wfpc2.TestWFPC2 object at 0x7f6287dbfb50&gt;
outputs = [('wfpc2_mef_drw.fits', 'reference_wfpc2_asn_mef.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfpc2_mef_drw.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw2/test_mef_asn0/reference_wfpc2_asn_mef.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAF-TLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 0.0001
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(1286), np.int64(12)]:
E                   a&gt; np.float32(1.7789153)
E                    ?                   --
E                   b&gt; np.float32(1.7787951)
E                    ?                 + +
E                Data differs at [np.int64(1288), np.int64(12)]:
E                   a&gt; np.float32(2.0126798)
E                    ?                  ^^^
E                   b&gt; np.float32(2.0128613)
E                    ?                 + ^^
E                Data differs at [np.int64(1288), np.int64(13)]:
E                   a&gt; np.float32(1.7748948)
E                    ?                 ^^^^
E                   b&gt; np.float32(1.7750406)
E                    ?                ++ ^^
E                Data differs at [np.int64(2972), np.int64(19)]:
E                   a&gt; np.float32(0.0007368752)
E                    ?                 ---  ^^
E                   b&gt; np.float32(0.0008787886)
E                    ?                   ^^^^^
E                Data differs at [np.int64(2971), np.int64(20)]:
E                   a&gt; np.float32(0.0010283053)
E                    ?                 -  ^^ -
E                   b&gt; np.float32(0.0012973895)
E                    ?                  +++ ^
E                Data differs at [np.int64(2972), np.int64(20)]:
E                   a&gt; np.float32(0.000860097)
E                    ?                ^^^^^
E                   b&gt; np.float32(0.0012977055)
E                    ?                ^^  ++++
E                Data differs at [np.int64(2973), np.int64(20)]:
E                   a&gt; np.float32(0.00017883224)
E                    ?                 ^^  ^^^^
E                   b&gt; np.float32(0.0005288879)
E                    ?                 ^^  ^^^
E                Data differs at [np.int64(2971), np.int64(21)]:
E                   a&gt; np.float32(0.001033082)
E                    ?                 ^ ^^^^
E                   b&gt; np.float32(0.0012736446)
E                    ?                 ^^ ^^^^
E                Data differs at [np.int64(2972), np.int64(21)]:
E                   a&gt; np.float32(0.0008611491)
E                    ?                ^^   ^^^
E                   b&gt; np.float32(0.0012613167)
E                    ?                ^^  + ^^
E                Data differs at [np.int64(2973), np.int64(21)]:
E                   a&gt; np.float32(0.00016665227)
E                    ?                   ------
E                   b&gt; np.float32(0.00049197796)
E                    ?                 ++ ++++
E                ...
E                1701 different pixels found (0.02% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(1688), np.int64(4)]:
E                   a&gt; np.float32(31.502224)
E                    ?               ^^^^^
E                   b&gt; np.float32(31.499474)
E                    ?               ^^^^^
E                Data differs at [np.int64(1689), np.int64(4)]:
E                   a&gt; np.float32(41.411472)
E                    ?                  --
E                   b&gt; np.float32(41.41125)
E                    ?                   +
E                Data differs at [np.int64(1690), np.int64(4)]:
E                   a&gt; np.float32(41.607666)
E                    ?                  ^^^
E                   b&gt; np.float32(41.607445)
E                    ?                  ^^^
E                Data differs at [np.int64(1691), np.int64(4)]:
E                   a&gt; np.float32(41.8041)
E                    ?                 ^^
E                   b&gt; np.float32(41.803875)
E                    ?                 ^^^^
E                Data differs at [np.int64(1692), np.int64(4)]:
E                   a&gt; np.float32(42.00044)
E                    ?                  ^^
E                   b&gt; np.float32(42.000206)
E                    ?                  ^^^
E                Data differs at [np.int64(1693), np.int64(4)]:
E                   a&gt; np.float32(42.196712)
E                    ?                  ^^^
E                   b&gt; np.float32(42.19648)
E                    ?                  ^^
E                Data differs at [np.int64(1694), np.int64(4)]:
E                   a&gt; np.float32(42.39319)
E                    ?                 ^^
E                   b&gt; np.float32(42.39296)
E                    ?                 ^ +
E                Data differs at [np.int64(1695), np.int64(4)]:
E                   a&gt; np.float32(42.589302)
E                    ?                  - ^
E                   b&gt; np.float32(42.589066)
E                    ?                   ^^
E                Data differs at [np.int64(1696), np.int64(4)]:
E                   a&gt; np.float32(42.785927)
E                    ?                   --
E                   b&gt; np.float32(42.78569)
E                    ?                  +
E                Data differs at [np.int64(1697), np.int64(4)]:
E                   a&gt; np.float32(42.981873)
E                    ?                  ^^
E                   b&gt; np.float32(42.98163)
E                    ?                  ^
E                ...
E                5292969 different pixels found (48.27% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(2972), np.int64(20)]:
E                   a&gt; np.int32(2184)
E                    ?           ---
E                   b&gt; np.int32(34952)
E                    ?          ++++
E                Data differs at [np.int64(2973), np.int64(20)]:
E                   a&gt; np.int32(2056)
E                    ?           ^^^
E                   b&gt; np.int32(34824)
E                    ?          +++ ^
E                Data differs at [np.int64(2956), np.int64(35)]:
E                   a&gt; np.int32(34952)
E                    ?            ---
E                   b&gt; np.int32(32904)
E                    ?           +++
E                Data differs at [np.int64(2957), np.int64(35)]:
E                   a&gt; np.int32(34952)
E                    ?            ---
E                   b&gt; np.int32(32904)
E                    ?           +++
E                Data differs at [np.int64(201), np.int64(45)]:
E                   a&gt; np.int32(17412)
E                    ?             ^^
E                   b&gt; np.int32(17476)
E                    ?             ^^
E                Data differs at [np.int64(1447), np.int64(45)]:
E                   a&gt; np.int32(1092)
E                    ?           ^^^
E                   b&gt; np.int32(17476)
E                    ?           ^^^^
E                Data differs at [np.int64(3003), np.int64(51)]:
E                   a&gt; np.int32(34952)
E                    ?            ---
E                   b&gt; np.int32(32904)
E                    ?           +++
E                Data differs at [np.int64(3004), np.int64(51)]:
E                   a&gt; np.int32(34952)
E                    ?            ---
E                   b&gt; np.int32(32904)
E                    ?           +++
E                Data differs at [np.int64(1394), np.int64(66)]:
E                   a&gt; np.int32(17476)
E                    ?           ^^^^
E                   b&gt; np.int32(1092)
E                    ?           ^^^
E                Data differs at [np.int64(1394), np.int64(67)]:
E                   a&gt; np.int32(17472)
E                    ?           ^^^^
E                   b&gt; np.int32(1088)
E                    ?           ^^^
E                ...
E                634 different pixels found (0.01% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.wfc3.test_vary_perf.TestVaryPerf" name="test_perf[True-None-wfc3_binned_asn-0.3-False]" time="7.679">
      <failure message="AssertionError: &#10;&#10; fitsdiff: 6.1.0&#10; a: wfc3_binned_asn_drz.fits&#10; b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_True_None_wfc3_binne0/reference_wfc3_binned_asn.fits&#10; Keyword(s) not to be compared:&#10;  DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER&#10;  RULEFILE UPWCSVER UPWTIM WCSCDATE&#10; Maximum number of different data values to be reported: 10&#10; Relative tolerance: 1e-06, Absolute tolerance: 1e-05&#10;&#10;Extension HDU 1 (SCI, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(145), np.int64(9)]:&#10;        a&gt; np.float32(8.634045)&#10;         ?                 ^^^&#10;        b&gt; np.float32(8.633741)&#10;         ?                ++ ^&#10;     Data differs at [np.int64(146), np.int64(9)]:&#10;        a&gt; np.float32(9.101629)&#10;         ?                  --&#10;        b&gt; np.float32(9.101926)&#10;         ?                 ++&#10;     Data differs at [np.int64(145), np.int64(10)]:&#10;        a&gt; np.float32(1.0749279)&#10;         ?                  ^ ^&#10;        b&gt; np.float32(1.0749075)&#10;         ?                  ^ ^&#10;     Data differs at [np.int64(146), np.int64(10)]:&#10;        a&gt; np.float32(1.3534267)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.3534907)&#10;         ?                  ^^&#10;     Data differs at [np.int64(81), np.int64(11)]:&#10;        a&gt; np.float32(19.906078)&#10;         ?                 ^^^^&#10;        b&gt; np.float32(19.905945)&#10;         ?                 ^^^^&#10;     Data differs at [np.int64(82), np.int64(11)]:&#10;        a&gt; np.float32(6.0668597)&#10;         ?                ^^ --&#10;        b&gt; np.float32(6.0670495)&#10;         ?                ^^^^&#10;     Data differs at [np.int64(81), np.int64(12)]:&#10;        a&gt; np.float32(2.196716)&#10;         ?                  ^^&#10;        b&gt; np.float32(2.1967423)&#10;         ?                  ^^^&#10;     Data differs at [np.int64(82), np.int64(12)]:&#10;        a&gt; np.float32(0.83121437)&#10;         ?                  ^^^&#10;        b&gt; np.float32(0.8312567)&#10;         ?                  ^^&#10;     Data differs at [np.int64(228), np.int64(14)]:&#10;        a&gt; np.float32(1.515448)&#10;         ?                 ^^^&#10;        b&gt; np.float32(1.515352)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(229), np.int64(14)]:&#10;        a&gt; np.float32(0.7949669)&#10;         ?                ^^^^^&#10;        b&gt; np.float32(0.7950118)&#10;         ?                ^^^^^&#10;     ...&#10;     758940 different pixels found (37.65% different).&#10;&#10;Extension HDU 2 (WHT, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(35), np.int64(2)]:&#10;        a&gt; np.float32(4.586735)&#10;         ?                  ^&#10;        b&gt; np.float32(4.5867195)&#10;         ?                  ^^&#10;     Data differs at [np.int64(36), np.int64(2)]:&#10;        a&gt; np.float32(1.7817361)&#10;         ?                  ^^&#10;        b&gt; np.float32(1.781721)&#10;         ?                  ^&#10;     Data differs at [np.int64(49), np.int64(3)]:&#10;        a&gt; np.float32(15.214938)&#10;         ?                   ^^&#10;        b&gt; np.float32(15.214912)&#10;         ?                   ^^&#10;     Data differs at [np.int64(50), np.int64(3)]:&#10;        a&gt; np.float32(12.409804)&#10;         ?                    ^&#10;        b&gt; np.float32(12.4097805)&#10;         ?                  +  ^&#10;     Data differs at [np.int64(51), np.int64(3)]:&#10;        a&gt; np.float32(9.605422)&#10;         ?                 ^^^&#10;        b&gt; np.float32(9.605397)&#10;         ?                 ^^^&#10;     Data differs at [np.int64(52), np.int64(3)]:&#10;        a&gt; np.float32(6.8019633)&#10;         ?                  - ^&#10;        b&gt; np.float32(6.801939)&#10;         ?                   ^&#10;     Data differs at [np.int64(53), np.int64(3)]:&#10;        a&gt; np.float32(3.9985518)&#10;         ?                   --&#10;        b&gt; np.float32(3.9985275)&#10;         ?                  ++&#10;     Data differs at [np.int64(54), np.int64(3)]:&#10;        a&gt; np.float32(1.2027918)&#10;         ?                   ^^&#10;        b&gt; np.float32(1.2027694)&#10;         ?                  + ^&#10;     Data differs at [np.int64(64), np.int64(4)]:&#10;        a&gt; np.float32(23.03286)&#10;         ?                   ^&#10;        b&gt; np.float32(23.032825)&#10;         ?                   ^^&#10;     Data differs at [np.int64(65), np.int64(4)]:&#10;        a&gt; np.float32(20.230196)&#10;         ?                   -&#10;        b&gt; np.float32(20.230162)&#10;         ?                    +&#10;     ...&#10;     186060 different pixels found (9.23% different).&#10;&#10;Extension HDU 3 (CTX, 1):&#10;&#10;   Data contains differences:&#10;     Data differs at [np.int64(189), np.int64(705)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(0)&#10;         ?          ^&#10;     Data differs at [np.int64(196), np.int64(708)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(963), np.int64(984)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(932), np.int64(987)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(568), np.int64(1045)]:&#10;        a&gt; np.int32(8)&#10;         ?          ^&#10;        b&gt; np.int32(10)&#10;         ?          ^^&#10;     Data differs at [np.int64(279), np.int64(1283)]:&#10;        a&gt; np.int32(10)&#10;         ?          ^^&#10;        b&gt; np.int32(8)&#10;         ?          ^&#10;     Data differs at [np.int64(975), np.int64(1439)]:&#10;        a&gt; np.int32(0)&#10;         ?          ^&#10;        b&gt; np.int32(2)&#10;         ?          ^&#10;     7 different pixels found (0.00% different).">self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873ccd50&gt;
output = 'wfc3_binned_asn', in_memory = True, num_cores = None
use_static = False, skywidth = 0.3

    def test_perf(self, output, in_memory, num_cores, use_static, skywidth):
    
        # Prepare input files.
        raw_inputs = ["ib6m02d9q_flt.fits", "ib6m02daq_flt.fits"]
        inputs = [os.path.basename(self.get_input_file('input', i))
                      for i in raw_inputs]
    
        # Merge common parameter settings with test-specific settings
        input_pars = {'build':True, 'preserve':False,
                       'clean':True, 'sky_bits':None}
        input_pars['output'] = output
        input_pars['in_memory'] = in_memory
        input_pars['num_cores'] = num_cores
        input_pars['use_static'] = use_static
        input_pars['skywidth'] = skywidth
        run_file = '{}.log'.format(output)
        input_pars['runfile'] = run_file
    
        # Update WCS for all inputs
        driz_inputs = updatewcs.updatewcs(inputs, use_db=False)
    
        # run astrodrizzle now...
        parObj = teal.load('astrodrizzle', defaults=True)  # get all default values
        astrodrizzle.AstroDrizzle(driz_inputs, configobj=parObj, **input_pars)
    
        # Compare results
        outfile = '{}_drz.fits'.format(output)
        reffile = 'reference_{}.fits'.format(output)
        outputs = [(outfile, reffile)]
&gt;       self.compare_outputs(outputs)

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/wfc3/test_vary_perf.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.wfc3.test_vary_perf.TestVaryPerf object at 0x7f7a873ccd50&gt;
outputs = [('wfc3_binned_asn_drz.fits', 'reference_wfc3_binned_asn.fits')]
raise_error = True

    def compare_outputs(self, outputs, raise_error=True):
        """
        Compare output with "truth" using appropriate
        diff routine; namely,
            ``fitsdiff`` for FITS file comparisons
            ``unified_diff`` for ASCII products.
    
        Parameters
        ----------
        outputs : list of tuple
            A list of tuples, each containing filename (without path)
            of CALXXX output and truth, in that order.
    
        raise_error : bool
            Raise ``AssertionError`` if difference is found.
    
        Returns
        -------
        report : str
            Report from ``fitsdiff``.
            This is part of error message if ``raise_error=True``.
    
        """
        all_okay = True
        creature_report = ''
        # Create instructions for uploading results to artifactory for use
        # as new comparison/truth files
        testpath, testname = os.path.split(os.path.abspath(os.curdir))
        # organize results by day test was run...could replace with git-hash
        whoami = getpass.getuser() or 'nobody'
        dt = datetime.datetime.now().strftime("%d%b%YT")
        ttime = datetime.datetime.now().strftime("%H_%M_%S")
        user_tag = 'NOT_CI_{}_{}'.format(whoami, ttime)
        build_tag = os.environ.get('BUILD_TAG',  user_tag)
        build_suffix = os.environ.get('BUILD_MATRIX_SUFFIX', 'standalone')
        testdir = "{}_{}_{}".format(testname, build_tag, build_suffix)
        tree = os.path.join(self.results_root, self.input_loc,
                            dt, testdir) + os.sep
    
        updated_outputs = []
        for actual, desired in outputs:
            # Get "truth" image
            s = self.get_data('truth', desired)
            if s is not None:
                desired = s
    
            if actual.endswith('fits'):
                # Working with FITS files...
                fdiff = FITSDiff(actual, desired, rtol=self.rtol, atol=self.atol,
                                 ignore_keywords=self.ignore_keywords)
                creature_report += fdiff.report()
                if not fdiff.identical:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
                if not fdiff.identical and all_okay:
                    all_okay = False
            else:
                # Try ASCII-based diff
                with open(actual) as afile:
                    actual_lines = afile.readlines()
                with open(desired) as dfile:
                    desired_lines = dfile.readlines()
                udiff = unified_diff(actual_lines, desired_lines,
                                     fromfile=actual, tofile=desired)
    
                old_stdout = sys.stdout
                udiffIO = StringIO()
                sys.stdout = udiffIO
                sys.stdout.writelines(udiff)
                sys.stdout = old_stdout
                udiff_report = udiffIO.getvalue()
                creature_report += udiff_report
                if len(udiff_report) &gt; 2 and all_okay:
                    all_okay = False
                if len(udiff_report) &gt; 2:
                    # Only keep track of failed results which need to
                    # be used to replace the truth files (if OK).
                    updated_outputs.append((actual, desired))
    
        if not all_okay:
            # Write out JSON file to enable retention of different results
            new_truths = [os.path.abspath(i[1]) for i in updated_outputs]
            for files in updated_outputs:
                print("Renaming {} as new 'truth' file: {}".format(
                      files[0], files[1]))
                shutil.move(files[0], files[1])
            log_pattern = [os.path.join(os.path.dirname(x), '*.log') for x in new_truths]
            generate_upload_schema(pattern=new_truths + log_pattern,
                           testname=testname,
                           target= tree)
    
        if not all_okay and raise_error:
&gt;           raise AssertionError(os.linesep + creature_report)
E           AssertionError: 
E           
E            fitsdiff: 6.1.0
E            a: wfc3_binned_asn_drz.fits
E            b: /runner/_work/_temp/truth-drizzlepac-CALDP-2025.2.1-1+photutils-py311-linux-x86_64/popen-gw4/test_perf_True_None_wfc3_binne0/reference_wfc3_binned_asn.fits
E            Keyword(s) not to be compared:
E             DATE FILENAME FITSDATE HISTORY IRAFTLM ORIGIN PROD_VER PYWCSVER
E             RULEFILE UPWCSVER UPWTIM WCSCDATE
E            Maximum number of different data values to be reported: 10
E            Relative tolerance: 1e-06, Absolute tolerance: 1e-05
E           
E           Extension HDU 1 (SCI, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(145), np.int64(9)]:
E                   a&gt; np.float32(8.634045)
E                    ?                 ^^^
E                   b&gt; np.float32(8.633741)
E                    ?                ++ ^
E                Data differs at [np.int64(146), np.int64(9)]:
E                   a&gt; np.float32(9.101629)
E                    ?                  --
E                   b&gt; np.float32(9.101926)
E                    ?                 ++
E                Data differs at [np.int64(145), np.int64(10)]:
E                   a&gt; np.float32(1.0749279)
E                    ?                  ^ ^
E                   b&gt; np.float32(1.0749075)
E                    ?                  ^ ^
E                Data differs at [np.int64(146), np.int64(10)]:
E                   a&gt; np.float32(1.3534267)
E                    ?                  ^^
E                   b&gt; np.float32(1.3534907)
E                    ?                  ^^
E                Data differs at [np.int64(81), np.int64(11)]:
E                   a&gt; np.float32(19.906078)
E                    ?                 ^^^^
E                   b&gt; np.float32(19.905945)
E                    ?                 ^^^^
E                Data differs at [np.int64(82), np.int64(11)]:
E                   a&gt; np.float32(6.0668597)
E                    ?                ^^ --
E                   b&gt; np.float32(6.0670495)
E                    ?                ^^^^
E                Data differs at [np.int64(81), np.int64(12)]:
E                   a&gt; np.float32(2.196716)
E                    ?                  ^^
E                   b&gt; np.float32(2.1967423)
E                    ?                  ^^^
E                Data differs at [np.int64(82), np.int64(12)]:
E                   a&gt; np.float32(0.83121437)
E                    ?                  ^^^
E                   b&gt; np.float32(0.8312567)
E                    ?                  ^^
E                Data differs at [np.int64(228), np.int64(14)]:
E                   a&gt; np.float32(1.515448)
E                    ?                 ^^^
E                   b&gt; np.float32(1.515352)
E                    ?                 ^^^
E                Data differs at [np.int64(229), np.int64(14)]:
E                   a&gt; np.float32(0.7949669)
E                    ?                ^^^^^
E                   b&gt; np.float32(0.7950118)
E                    ?                ^^^^^
E                ...
E                758940 different pixels found (37.65% different).
E           
E           Extension HDU 2 (WHT, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(35), np.int64(2)]:
E                   a&gt; np.float32(4.586735)
E                    ?                  ^
E                   b&gt; np.float32(4.5867195)
E                    ?                  ^^
E                Data differs at [np.int64(36), np.int64(2)]:
E                   a&gt; np.float32(1.7817361)
E                    ?                  ^^
E                   b&gt; np.float32(1.781721)
E                    ?                  ^
E                Data differs at [np.int64(49), np.int64(3)]:
E                   a&gt; np.float32(15.214938)
E                    ?                   ^^
E                   b&gt; np.float32(15.214912)
E                    ?                   ^^
E                Data differs at [np.int64(50), np.int64(3)]:
E                   a&gt; np.float32(12.409804)
E                    ?                    ^
E                   b&gt; np.float32(12.4097805)
E                    ?                  +  ^
E                Data differs at [np.int64(51), np.int64(3)]:
E                   a&gt; np.float32(9.605422)
E                    ?                 ^^^
E                   b&gt; np.float32(9.605397)
E                    ?                 ^^^
E                Data differs at [np.int64(52), np.int64(3)]:
E                   a&gt; np.float32(6.8019633)
E                    ?                  - ^
E                   b&gt; np.float32(6.801939)
E                    ?                   ^
E                Data differs at [np.int64(53), np.int64(3)]:
E                   a&gt; np.float32(3.9985518)
E                    ?                   --
E                   b&gt; np.float32(3.9985275)
E                    ?                  ++
E                Data differs at [np.int64(54), np.int64(3)]:
E                   a&gt; np.float32(1.2027918)
E                    ?                   ^^
E                   b&gt; np.float32(1.2027694)
E                    ?                  + ^
E                Data differs at [np.int64(64), np.int64(4)]:
E                   a&gt; np.float32(23.03286)
E                    ?                   ^
E                   b&gt; np.float32(23.032825)
E                    ?                   ^^
E                Data differs at [np.int64(65), np.int64(4)]:
E                   a&gt; np.float32(20.230196)
E                    ?                   -
E                   b&gt; np.float32(20.230162)
E                    ?                    +
E                ...
E                186060 different pixels found (9.23% different).
E           
E           Extension HDU 3 (CTX, 1):
E           
E              Data contains differences:
E                Data differs at [np.int64(189), np.int64(705)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(0)
E                    ?          ^
E                Data differs at [np.int64(196), np.int64(708)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(963), np.int64(984)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(932), np.int64(987)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(568), np.int64(1045)]:
E                   a&gt; np.int32(8)
E                    ?          ^
E                   b&gt; np.int32(10)
E                    ?          ^^
E                Data differs at [np.int64(279), np.int64(1283)]:
E                   a&gt; np.int32(10)
E                    ?          ^^
E                   b&gt; np.int32(8)
E                    ?          ^
E                Data differs at [np.int64(975), np.int64(1439)]:
E                   a&gt; np.int32(0)
E                    ?          ^
E                   b&gt; np.int32(2)
E                    ?          ^
E                7 different pixels found (0.00% different).

/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/resources.py:212: AssertionError</failure>
    </testcase>
    <testcase classname="tests.acs.test_acs_tweak.TestAcsTweak" name="test_tweak" time="54.446"/>
    <testcase classname="tests.hap.test_apriori.TestAcsApriori" name="test_apriori[jb1601020]" time="567.928"/>
    <testcase classname="tests.hap.test_svm_wfc3ir" name="test_svm_manifest_name" time="84.889"/>
    <testcase classname="tests.wfc3.test_wfc3.TestWFC3" name="test_wfc3_ir_saturated" time="7.918"/>
    <testcase classname="tests.hap.test_svm_wfc3ir" name="test_svm_wcs" time="0.008"/>
    <testcase classname="tests.hap.test_svm_wfc3ir" name="test_svm_empty_cats" time="0.373"/>
    <testcase classname="tests.hap.test_svm_wfc3ir" name="test_svm_point_cats" time="0.000">
      <skipped type="pytest.skip" message="Skipping test as missing the 'science commits' for this release - need for RC.">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_wfc3ir.py:187: Skipping test as missing the 'science commits' for this release - need for RC.</skipped>
    </testcase>
    <testcase classname="tests.hap.test_svm_wfc3ir" name="test_svm_segment_cats" time="0.000">
      <skipped type="pytest.skip" message="Skipping test as missing the 'science commits' for this release - need for RC.">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_wfc3ir.py:203: Skipping test as missing the 'science commits' for this release - need for RC.</skipped>
    </testcase>
    <testcase classname="tests.acs.test_acs_narrowband.TestAsnNarrowband" name="test_acs_narrowband" time="45.309"/>
    <testcase classname="tests.acs.test_acs_tweak.TestAcsTweak" name="test_pixsky1" time="9.090"/>
    <testcase classname="tests.hap.test_apriori.TestWFC3Apriori" name="test_apriori[ic0g0l010]" time="235.378"/>
    <testcase classname="tests.acs.test_asn_regress.TestAsnRegress" name="test_hrc_asn" time="5.599"/>
    <testcase classname="tests.hap.test_pipeline.TestSingleton" name="test_astrometric_singleton[iaaua1n4q]" time="18.011"/>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_manifest_name" time="175.879"/>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_wcs_ir" time="0.006"/>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_wcs_ir_all" time="0.018"/>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_wcs_uvis" time="0.004"/>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_wcs_uvis_all" time="0.019"/>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_point_total_cat" time="0.000">
      <skipped type="pytest.skip" message="Modifying tests and cannot reproduce failed result at this time - need for RC.">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_ibqk07.py:223: Modifying tests and cannot reproduce failed result at this time - need for RC.</skipped>
    </testcase>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_segment_total_cat" time="0.000">
      <skipped type="pytest.skip" message="Modifying tests and cannot reproduce failed result at this time - need for RC.">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_ibqk07.py:241: Modifying tests and cannot reproduce failed result at this time - need for RC.</skipped>
    </testcase>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_point_cat_meanmag" time="0.047"/>
    <testcase classname="tests.hap.test_svm_ibqk07" name="test_svm_segment_cat_meanmag" time="0.064"/>
    <testcase classname="tests.hap.test_svm_hrcsbc" name="test_svm_manifest_name" time="265.123"/>
    <testcase classname="tests.hap.test_svm_hrcsbc" name="test_svm_wcs" time="0.015"/>
    <testcase classname="tests.hap.test_svm_hrcsbc" name="test_svm_samewcs" time="0.013"/>
    <testcase classname="tests.hap.test_svm_hrcsbc" name="test_svm_empty_cats" time="4.732"/>
    <testcase classname="tests.hap.test_svm_hrcsbc" name="test_svm_point_total_cat" time="0.000">
      <skipped type="pytest.skip" message="Modifying tests and cannot reproduce failed result at this time - need for RC.">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_hrcsbc.py:206: Modifying tests and cannot reproduce failed result at this time - need for RC.</skipped>
    </testcase>
    <testcase classname="tests.hap.test_svm_hrcsbc" name="test_svm_segment_total_cat" time="0.001">
      <skipped type="pytest.skip" message="Modifying tests and cannot reproduce failed result at this time. - need for RC">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_hrcsbc.py:224: Modifying tests and cannot reproduce failed result at this time. - need for RC</skipped>
    </testcase>
    <testcase classname="tests.hap.test_apriori.TestWFC3Apriori" name="test_apriori[icnw34040]" time="44.748"/>
    <testcase classname="tests.hap.test_svm_j97e06" name="test_svm_manifest_name" time="249.832"/>
    <testcase classname="tests.hap.test_svm_j97e06" name="test_svm_wcs" time="0.007"/>
    <testcase classname="tests.hap.test_svm_j97e06" name="test_svm_point_cat_numsources" time="0.000">
      <skipped type="pytest.skip" message="temporarily skipped">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_j97e06.py:190: temporarily skipped</skipped>
    </testcase>
    <testcase classname="tests.hap.test_svm_j97e06" name="test_svm_segment_cat_numsources" time="0.000">
      <skipped type="pytest.skip" message="temporarily skipped">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_j97e06.py:205: temporarily skipped</skipped>
    </testcase>
    <testcase classname="tests.hap.test_svm_j97e06" name="test_svm_point_cat_meanmag" time="0.125"/>
    <testcase classname="tests.hap.test_svm_j97e06" name="test_svm_segment_cat_meanmag" time="0.189"/>
    <testcase classname="tests.hap.test_svm_je281u" name="test_svm_manifest_name" time="519.998"/>
    <testcase classname="tests.hap.test_svm_je281u" name="test_svm_wcs" time="0.008"/>
    <testcase classname="tests.hap.test_svm_je281u" name="test_svm_cat_sources" time="0.532"/>
    <testcase classname="tests.hap.test_apriori.TestAcsApriori" name="test_apriori[J9I408010]" time="349.230"/>
    <testcase classname="tests.test_imageObject.TestimageObject" name="test_NoFilename" time="0.001">
      <skipped type="pytest.xfail" message="Broken"/>
    </testcase>
    <testcase classname="tests.test_imageObject.TestimageObject" name="test_Attributes" time="0.002">
      <skipped type="pytest.xfail" message="Broken"/>
    </testcase>
    <testcase classname="tests.hap.test_svm_ibyt50" name="test_svm_manifest_name" time="1219.423"/>
    <testcase classname="tests.hap.test_svm_ibyt50" name="test_svm_wcs_ir" time="0.005"/>
    <testcase classname="tests.hap.test_svm_ibyt50" name="test_svm_wcs_ir_all" time="0.013"/>
    <testcase classname="tests.hap.test_svm_ibyt50" name="test_svm_wcs_uvis" time="0.004"/>
    <testcase classname="tests.hap.test_svm_ibyt50" name="test_svm_wcs_uvis_all" time="0.013"/>
    <testcase classname="tests.hap.test_svm_ibyt50" name="test_svm_point_total_cat" time="0.000">
      <skipped type="pytest.skip" message="Skipping test during rapid development of catalogs.">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_ibyt50.py:215: Skipping test during rapid development of catalogs.</skipped>
    </testcase>
    <testcase classname="tests.hap.test_svm_ibyt50" name="test_svm_segment_total_cat" time="0.000">
      <skipped type="pytest.skip" message="Skipping test during rapid development of catalogs.">/runner/_work/datapipeline-workflows/datapipeline-workflows/stasis/CALDP-2025.2.1+photutils/build/sources/drizzlepac/tests/hap/test_svm_ibyt50.py:233: Skipping test during rapid development of catalogs.</skipped>
    </testcase>
  </testsuite>
</testsuites>
