Skip to content

Benchmark: phenology #480

@github-actions

Description

@github-actions

Benchmark scenario ID: phenology
Benchmark scenario definition: https://github.com/ESA-APEx/apex_algorithms/blob/c35430c72d30c038fe59ee38f627aeafbc83bdbc/algorithm_catalog/vito/phenology/benchmark_scenarios/phenology.json
openEO backend: openeofed.dataspace.copernicus.eu

GitHub Actions workflow run: https://github.com/ESA-APEx/apex_algorithms/actions/runs/24894116026
Workflow artifacts: https://github.com/ESA-APEx/apex_algorithms/actions/runs/24894116026#artifacts

Test start: 2026-04-24 14:14:39.137999+00:00
Test duration: 0:08:13.493050
Test outcome: ❌ failed

Last successful test phase: download-reference
Failure in test phase: compare

Contact Information

Name Organization Contact
Bram Janssen VITO Contact via VITO (VITO Website, GitHub)

Process Graph

{
  "phenology1": {
    "arguments": {
      "spatial_extent": {
        "coordinates": [
          [
            [
              5.179169745059369,
              51.24984286550534
            ],
            [
              5.170016107999743,
              51.25052999567865
            ],
            [
              5.171081610725707,
              51.24861004739975
            ],
            [
              5.178604705735125,
              51.246720335821465
            ],
            [
              5.179169745059369,
              51.24984286550534
            ]
          ]
        ],
        "type": "Polygon"
      },
      "temporal_extent": [
        "2022-05-01",
        "2022-09-30"
      ]
    },
    "namespace": "https://raw.githubusercontent.com/VITObelgium/openeo_algorithm_catalog/refs/heads/main/phenology/openeo_udp/phenology.json",
    "process_id": "phenology"
  },
  "saveresult1": {
    "arguments": {
      "data": {
        "from_node": "phenology1"
      },
      "format": "GTiff",
      "options": {}
    },
    "process_id": "save_result",
    "result": true
  }
}

Error Logs

scenario = BenchmarkScenario(id='phenology', description='Computes phenology metrics based on the Phenolopy implementation on NDV...home/runner/work/apex_algorithms/apex_algorithms/algorithm_catalog/vito/phenology/benchmark_scenarios/phenology.json'))
connection_factory = <function connection_factory.<locals>.get_connection at 0x7fdb04e2e840>
tmp_path = PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0')
track_metric = <function track_metric.<locals>.track at 0x7fdb04e2e980>
track_phase = <apex_algorithm_qa_tools.pytest.pytest_track_metrics._PhaseTracker object at 0x7fdb04e4e3f0>
upload_assets_on_fail = <apex_algorithm_qa_tools.pytest.pytest_upload_assets.upload_assets_on_fail.<locals>._Collector object at 0x7fdb04e33650>
request = <FixtureRequest for <Function test_run_benchmark[phenology]>>

    @pytest.mark.parametrize(
        "scenario",
        [
            # Use scenario id as parameterization id to give nicer test names.
            pytest.param(uc, id=uc.id)
            for uc in get_benchmark_scenarios()
        ],
    )
    def test_run_benchmark(
        scenario: BenchmarkScenario,
        connection_factory,
        tmp_path: Path,
        track_metric,
        track_phase,
        upload_assets_on_fail,
        request,
    ):
        track_metric("scenario_id", scenario.id)

        with track_phase(phase="connect"):
            # Check if a backend override has been provided via cli options.
            override_backend = request.config.getoption("--override-backend")
            backend_filter = request.config.getoption("--backend-filter")
            if backend_filter and not re.match(backend_filter, scenario.backend):
                # TODO apply filter during scenario retrieval, but seems to be hard to retrieve cli param
                pytest.skip(
                    f"skipping scenario {scenario.id} because backend {scenario.backend} does not match filter {backend_filter!r}"
                )
            backend = scenario.backend
            if override_backend:
                _log.info(f"Overriding backend URL with {override_backend!r}")
                backend = override_backend

            connection: openeo.Connection = connection_factory(url=backend)

        report_path = None
        if request.config.getoption("--upload-benchmark-report"):
            report_path = tmp_path / "benchmark_report.json"
            report_path.write_text(json.dumps({
                "scenario_id": scenario.id,
                "scenario_description": scenario.description,
                "scenario_backend": scenario.backend,
                "scenario_source": str(scenario.source) if scenario.source else None,
                "reference_data": scenario.reference_data,
                "reference_options": scenario.reference_options,
            }, indent=2))
            upload_assets_on_fail(report_path)

        def _on_phase_exception(phase: str, exc: Exception):
            if report_path is not None:
                report = json.loads(report_path.read_text())
                report["test_failed"] = True
                report["test_failed_phase"] = phase
                report["test_error_message"] = str(exc)
                report_path.write_text(json.dumps(report, indent=2))
                cwd_report_dir = Path("benchmark_reports")
                cwd_report_dir.mkdir(exist_ok=True)
                (cwd_report_dir / f"{scenario.id}_benchmark_report.json").write_text(
                    json.dumps(report, indent=2)
                )
                report_url = upload_assets_on_fail.get_url(report_path)
                if report_url:
                    exc.add_note(f"Benchmark report: {report_url}")

        track_phase.on_exception = _on_phase_exception

        with track_phase(phase="create-job"):
            # TODO #14 scenario option to use synchronous instead of batch job mode?
            job = connection.create_job(
                process_graph=scenario.process_graph,
                title=f"APEx benchmark {scenario.id}",
                additional=scenario.job_options,
            )
            track_metric("job_id", job.job_id)

            if report_path is not None:
                report = json.loads(report_path.read_text())
                report["job_id"] = job.job_id
                report_path.write_text(json.dumps(report, indent=2))

        with track_phase(phase="run-job"):
            # TODO: monitor timing and progress
            # TODO: separate "job started" and run phases?
            max_minutes = request.config.getoption("--maximum-job-time-in-minutes")
            if max_minutes:
                def _timeout_handler(signum, frame):
                    raise TimeoutError(
                        f"Batch job {job.job_id} exceeded maximum allowed time of {max_minutes} minutes"
                    )

                old_handler = signal.signal(signal.SIGALRM, _timeout_handler)
                signal.alarm(max_minutes * 60)
            try:
                job.start_and_wait()
            finally:
                if max_minutes:
                    signal.alarm(0)
                    signal.signal(signal.SIGALRM, old_handler)

        with track_phase(phase="collect-metadata"):
            collect_metrics_from_job_metadata(job, track_metric=track_metric)

            results = job.get_results()
            collect_metrics_from_results_metadata(results, track_metric=track_metric)

        with track_phase(phase="download-actual"):
            # Download actual results
            actual_dir = tmp_path / "actual"
            paths = results.download_files(target=actual_dir, include_stac_metadata=True)

            # Upload assets on failure
            upload_assets_on_fail(*paths)

        # Pre-compute S3 URLs for actual files (used in error messages and benchmark reports)
        actual_s3_urls = {
            str(p.relative_to(actual_dir)): upload_assets_on_fail.get_url(p)
            for p in sorted(actual_dir.rglob("*")) if p.is_file()
        }
        actual_s3_urls = {k: v for k, v in actual_s3_urls.items() if v is not None}

        with track_phase(phase="download-reference"):
            reference_dir = download_reference_data(
                scenario=scenario, reference_dir=tmp_path / "reference"
            )

        if report_path is not None:
            report = json.loads(report_path.read_text())
            report["actual_files"] = {
                str(p.relative_to(actual_dir)): f"{p.stat().st_size / 1024:.1f} kb"
                for p in sorted(actual_dir.rglob("*")) if p.is_file()
            }
            ref_files = {}
            for p in sorted(reference_dir.rglob("*")):
                if not p.is_file():
                    continue
                rel = p.relative_to(reference_dir)
                size_str = f"{p.stat().st_size / 1024:.1f} kb"
                actual_counterpart = actual_dir / rel
                if not actual_counterpart.exists():
                    size_str += " (missing in actual)"
                elif actual_counterpart.stat().st_size != p.stat().st_size:
                    size_str += f" (actual: {actual_counterpart.stat().st_size / 1024:.1f} kb)"
                ref_files[str(rel)] = size_str
            report["reference_files"] = ref_files
            if actual_s3_urls:
                report["actual_data"] = actual_s3_urls
            report_path.write_text(json.dumps(report, indent=2))
            # Also write to CWD so the report is accessible on Jenkins workspace
            cwd_report_dir = Path("benchmark_reports")
            cwd_report_dir.mkdir(exist_ok=True)
            (cwd_report_dir / f"{scenario.id}_benchmark_report.json").write_text(
                json.dumps(report, indent=2)
            )

        with track_phase(
            phase="compare", describe_exception=analyse_results_comparison_exception
        ):
            # Compare actual results with reference data
            try:
                assert_job_results_allclose(
                    actual=actual_dir,
                    expected=reference_dir,
                    tmp_path=tmp_path,
                    rtol=scenario.reference_options.get("rtol", 1e-3),
                    atol=scenario.reference_options.get("atol", 1),
                    pixel_tolerance=scenario.reference_options.get("pixel_tolerance", 1),
                )
            except AssertionError as e:
                msg = str(e)
                if scenario.reference_data:
                    msg += "\n\nReference data URLs:"
                    for name, url in scenario.reference_data.items():
                        msg += f"\n  {name}: {url}"
                if actual_s3_urls:
                    msg += "\n\nActual data S3 URLs (uploaded on failure):"
                    for name, url in actual_s3_urls.items():
                        msg += f"\n  {name}: {url}"
>               raise AssertionError(msg) from None
E               AssertionError: Issues for file 'openEO_2022-05-02Z.tif':
E               Fraction significantly differing pixels: 1.315884346384022% > 1%
E               band 9: value difference exceeds tolerance (rtol 0.1, atol 1), min:38.0, max: 200.0, mean: 67.03, var: 2720.32
E               band 9: differing pixels: 295/3082 (9.6%), bbox ((651465.0, 5679495.0), (652055.0, 5679945.0)) - 89.4% of the area
E               band 11: value difference exceeds tolerance (rtol 0.1, atol 1), min:50.0, max: 50.0, mean: 50.0, var: 0.0
E               band 11: differing pixels: 29/3082 (0.9%), bbox ((652075.0, 5679515.0), (652095.0, 5679675.0)) - 1.1% of the area
E               band 12: value difference exceeds tolerance (rtol 0.1, atol 1), min:3.0, max: 200.0, mean: 57.81, var: 2551.82
E               band 12: differing pixels: 374/3082 (12.1%), bbox ((651435.0, 5679495.0), (652095.0, 5679945.0)) - 100.0% of the area
E               band 15: value difference exceeds tolerance (rtol 0.1, atol 1), min:1.5383765697479248, max: 2.0433592796325684, mean: 1.82, var: 0.01
E               band 15: differing pixels: 19/1934 (1.0%), bbox ((651695.0, 5679495.0), (652055.0, 5679685.0)) - 23.0% of the area
E               band 16: value difference exceeds tolerance (rtol 0.1, atol 1), min:1.2506359815597534, max: 1.3965463638305664, mean: 1.34, var: 0.0
E               band 16: differing pixels: 13/1934 (0.7%), bbox ((651745.0, 5679685.0), (652035.0, 5679685.0)) - 0.0% of the area
E
E               Reference data URLs:
E                 openEO_2022-05-02Z.tif: https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-22018234335!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/openEO_2022-05-02Z.tif
E                 job-results.json: https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-22018234335!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/job-results.json
E
E               Actual data S3 URLs (uploaded on failure):
E                 job-results.json: https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-24894116026!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/job-results.json
E                 openEO_2022-05-02Z.tif: https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-24894116026!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/openEO_2022-05-02Z.tif

tests/test_benchmarks.py:201: AssertionError
----------------------------- Captured stdout call -----------------------------
0:00:00 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': send 'start'
0:00:20 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': created (progress 0%)
0:00:25 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': created (progress 0%)
0:00:32 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:00:40 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:00:50 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:01:03 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:01:19 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:01:38 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:02:02 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:02:32 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:03:10 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': queued (progress 0%)
0:03:57 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': running (progress N/A)
0:04:56 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': running (progress N/A)
0:05:56 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': running (progress N/A)
0:06:57 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': running (progress N/A)
0:07:57 Job 'cdse-j-26042414144445158c9bfdf8ba0e0c25': finished (progress 100%)
----------------------------- Captured stderr call -----------------------------
Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples.
Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples.
------------------------------ Captured log call -------------------------------
INFO     conftest:conftest.py:145 Connecting to 'openeofed.dataspace.copernicus.eu'
INFO     openeo.config:config.py:193 Loaded openEO client config from sources: []
INFO     conftest:conftest.py:158 Checking for auth_env_var='OPENEO_AUTH_CLIENT_CREDENTIALS_CDSEFED' to drive auth against url='openeofed.dataspace.copernicus.eu'.
INFO     conftest:conftest.py:162 Extracted provider_id='CDSE' client_id='openeo-apex-benchmarks-service-account' from auth_env_var='OPENEO_AUTH_CLIENT_CREDENTIALS_CDSEFED'
INFO     openeo.rest.connection:connection.py:302 Found OIDC providers: ['CDSE']
INFO     openeo.rest.auth.oidc:oidc.py:410 Doing 'client_credentials' token request 'https://identity.dataspace.copernicus.eu/auth/realms/CDSE/protocol/openid-connect/token' with post data fields ['grant_type', 'client_id', 'client_secret', 'scope'] (client_id 'openeo-apex-benchmarks-service-account')
INFO     openeo.rest.connection:connection.py:401 Obtained tokens: ['token_type', 'access_token', 'expires_in', 'id_token', 'scope']
INFO     openeo.rest.job:job.py:436 Downloading Job result asset 'openEO_2022-05-02Z.tif' from https://s3.waw3-1.openeo.v1.dataspace.copernicus.eu/openeo-data-prod-waw4-1/batch_jobs/j-26042414144445158c9bfdf8ba0e0c25/openEO_2022-05-02Z.tif?X-Proxy-Head-As-Get=true&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=47def009f20349fcbedccc9ff356d58e%2F20260424%2Fwaw4-1%2Fs3%2Faws4_request&X-Amz-Date=20260424T142243Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Security-Token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlX2FybiI6ImFybjpvcGVuZW93czppYW06Ojpyb2xlL29wZW5lby1kYXRhLXByb2Qtd2F3NC0xLXdvcmtzcGFjZSIsImluaXRpYWxfaXNzdWVyIjoib3BlbmVvLnByb2Qud2F3My0xLm9wZW5lby1pbnQudjEuZGF0YXNwYWNlLmNvcGVybmljdXMuZXUiLCJodHRwczovL2F3cy5hbWF6b24uY29tL3RhZ3MiOnsicHJpbmNpcGFsX3RhZ3MiOnsiam9iX2lkIjpbImotMjYwNDI0MTQxNDQ0NDUxNThjOWJmZGY4YmEwZTBjMjUiXSwidXNlcl9pZCI6WyI2YTc3ZmNkMS05YzA4LTQ2ZTktYjg3NS01NGZiOTk5YWIyMDAiXX0sInRyYW5zaXRpdmVfdGFnX2tleXMiOlsidXNlcl9pZCIsImpvYl9pZCJdfSwiaXNzIjoic3RzLndhdzMtMS5vcGVuZW8udjEuZGF0YXNwYWNlLmNvcGVybmljdXMuZXUiLCJzdWIiOiJvcGVuZW8tZHJpdmVyIiwiZXhwIjoxNzc3MDgzNzYzLCJuYmYiOjE3NzcwNDA1NjMsImlhdCI6MTc3NzA0MDU2MywianRpIjoiYThkMDA1NmYtZDBhMS00N2QxLTgwYzMtNzlmMzljNTZhODc2IiwiYWNjZXNzX2tleV9pZCI6IjQ3ZGVmMDA5ZjIwMzQ5ZmNiZWRjY2M5ZmYzNTZkNThlIn0.h1GULyTGJ-MAgGiIuvhJIzSLOnP_lx_YL25q0jIJnnfS9VsKxErt5eR3P6wp8gTZb4m4NRp25ecgls9nfP4-0NMeI-Grtp4KTsIrFnxrdD_VJEtH3Ulsy-DyXayBQaWEPFtUZTQvtiycWx0G8-TnVYZluVEYPMevTSjKcmVRHpYcXEgEqr-GWSCC6n-uE6pbQxtlLtbHw5m7ByD1Ze6ZH44Y0wAcjNwyn5mkEQe8Wi3L1GAG8r7gFJCi4n6fw1RrC8to6PYZIQVzYhhlobeu3mYmGItf-1ZdKDfcjZhFUcMBZBxcI1FKg0-IwLhtE3c_eXYa_0LsbJaRkvwAz-2c4A&X-Amz-Signature=3d6cbd6ddc6441689ba59072473b3579cfc2ca74c8709b58e3a25f652b4987fb to /home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/actual/openEO_2022-05-02Z.tif
INFO     apex_algorithm_qa_tools.scenarios:util.py:345 Downloading reference data for scenario.id='phenology' to reference_dir=PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/reference'): start 2026-04-24 14:22:47.294968
INFO     apex_algorithm_qa_tools.scenarios:util.py:345 Downloading source='https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-22018234335!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/openEO_2022-05-02Z.tif' to path=PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/reference/openEO_2022-05-02Z.tif'): start 2026-04-24 14:22:47.295305
INFO     apex_algorithm_qa_tools.scenarios:util.py:351 Downloading source='https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-22018234335!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/openEO_2022-05-02Z.tif' to path=PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/reference/openEO_2022-05-02Z.tif'): end 2026-04-24 14:22:48.511884, elapsed 0:00:01.216579
INFO     apex_algorithm_qa_tools.scenarios:util.py:345 Downloading source='https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-22018234335!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/job-results.json' to path=PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/reference/job-results.json'): start 2026-04-24 14:22:48.512294
INFO     apex_algorithm_qa_tools.scenarios:util.py:351 Downloading source='https://s3.waw3-1.cloudferro.com/apex-benchmarks/gh-22018234335!tests_test_benchmarks.py__test_run_benchmark_phenology_!actual/job-results.json' to path=PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/reference/job-results.json'): end 2026-04-24 14:22:49.603452, elapsed 0:00:01.091158
INFO     apex_algorithm_qa_tools.scenarios:util.py:351 Downloading reference data for scenario.id='phenology' to reference_dir=PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/reference'): end 2026-04-24 14:22:49.603646, elapsed 0:00:02.308678
INFO     openeo.testing.results:results.py:423 Comparing job results: PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/actual') vs PosixPath('/home/runner/work/apex_algorithms/apex_algorithms/qa/benchmarks/tmp_path_root/test_run_benchmark_phenology_0/reference')
WARNING  rasterio._env:__init__.py:367 CPLE_AppDefined in openEO_2022-05-02Z.tif: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples.
WARNING  rasterio._env:__init__.py:367 CPLE_AppDefined in openEO_2022-05-02Z.tif: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples.
WARNING  openeo.testing.results:results.py:172 Difference (ascii art) for band 9:
┌───────────────────────────────────────────────────────────────────┐
│                          Y                                        │
│                          (                                        │
│                          (                                        │
│                          (                                        │
│                                                                   │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          <                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          i                                        │
│                          >                                        │
│   JY J1 ( 1((  < << i>><<<                                        │
│                           k<<>>< <>>$$ >>>k >>> >i>>>>>>>>>><>    │
│                           $$      k  $k  <k< >> >>>>>>>>><>><>    │
│                            >kk i>k k>  < < <>>>>><>>>><>>>>>>$    │
│                                     << <kk<>>>>><<<><i<<<<<>>>    │
│                                   kkk <<>i<>>>>kkk<<>i<<<<i>>>    │
│                            $         >k<  <<>><><>$<k<<k>>>k>>    │
│                                       kkk$ << <<<<< ><<><>ii $    │
│                                          kkk< << >>>>>i>><><i     │
│                                             k$   <  >>>>> ik      │
│                                      $         >kkk>>>>i> >>>>    │
│                                                    >k  >i>> >     │
│                                                      >>k < i>     │
│                                                         >>i<      │
│                                                            <      │
│                                        $         $                │
│                                  <                                │
│                                   k     kk        $               │
│                               >   k                               │
│                           >   >                                   │
└───────────────────────────────────────────────────────────────────┘
WARNING  openeo.testing.results:results.py:172 Difference (ascii art) for band 11:
┌───────────────────────────────────────────────────────────────────┐
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                 $$│
│                                                                 $$│
│                                                                  $│
│                                                                  $│
│                                                                  $│
│                                                                 $ │
│                                                                 $$│
│                                                                 $$│
│                                                                $$$│
│                                                                 $$│
│                                                                 $$│
│                                                                $$ │
│                                                                $$ │
│                                                                 $$│
│                                                                 $$│
│                                                                  $│
│                                                                  $│
│                                                                   │
│                                                                   │
└───────────────────────────────────────────────────────────────────┘
WARNING  openeo.testing.results:results.py:172 Difference (ascii art) for band 12:
┌───────────────────────────────────────────────────────────────────┐
│                          Y                                        │
│                          (                                        │
│                          (                                        │
│                          (                                        │
│                          `                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          <                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          >                                        │
│                          i                                        │
│                          >                                        │
│^^ JY^J1"("1((^^<^<< i>><<< . .``  .... . .  ` .```  ``````````    │
│                           k<<>>< <>>$$.>>>k.>>>.>i>>>>>>>>>><>  ++│
│                           $$  ..  k  $k  <k<.>>.>>>>>>>>><>><>  ++│
│                            >kk i>k k>. < < <>>>>><>>>><>>>>>>$   +│
│                                 .   << <kk<>>>>><<<><i<<<<<>>>   +│
│                                   kkk <<>i<>>>>kkk<<>i<<<<i>>>   +│
│                            $         >k<  <<>><><>$<k<<k>>>k>>  + │
│                                       kkk$ << <<<<<.><<><>ii $  ++│
│                                          kkk< << >>>>>i>><><i   ++│
│                                             k$   <  >>>>> ik   +++│
│                                 .    $         >kkk>>>>i>.>>>>  ++│
│                                                    >k  >i>> >   ++│
│                                                      >>k < i>  ++ │
│                                                         >>i<   ++ │
│                                       `                    <    ++│
│                                  .     $         $  `           ++│
│                                  <                               +│
│                                   k     kk        $              +│
│                               >   k             .                 │
│                           >   >                                   │
└───────────────────────────────────────────────────────────────────┘
WARNING  openeo.testing.results:results.py:172 Difference (ascii art) for band 15:
┌───────────────────────────────────────────────────────────────────┐
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                          $    o*            *  ***  *** ***o a    │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                 B%8               │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                           w                                       │
└───────────────────────────────────────────────────────────────────┘
WARNING  openeo.testing.results:results.py:172 Difference (ascii art) for band 16:
┌───────────────────────────────────────────────────────────────────┐
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                               W&            B  $@@  @@@ 8&8#      │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
│                                                                   │
└───────────────────────────────────────────────────────────────────┘

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions