From f51fd0a188aa05c2509902c25ce6da77d3b2332f Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Thu, 23 Jan 2025 17:33:03 -0800 Subject: [PATCH 01/32] truncate orbit reference epoch to seconds precision; update ephemeris --- src/rtc/h5_prep.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/rtc/h5_prep.py b/src/rtc/h5_prep.py index 61fdb6fb..0db331af 100644 --- a/src/rtc/h5_prep.py +++ b/src/rtc/h5_prep.py @@ -310,7 +310,28 @@ def create_hdf5_file(product_id, output_hdf5_file, orbit, burst, cfg, def save_orbit(orbit, orbit_group, orbit_file_path): + + # ensure that the orbit reference epoch has not fractional part + # otherwise, trancate it to seconds precision + orbit_reference_epoch = orbit.reference_epoch + if orbit_reference_epoch.frac != 0: + logger.warning('the orbit reference epoch is not an' + ' integer number. Truncating it' + ' to seconds precision and' + ' updating the orbit ephemeris' + ' accordingly.') + + epoch = isce3.core.DateTime(orbit_reference_epoch.year, + orbit_reference_epoch.month, + orbit_reference_epoch.day, + orbit_reference_epoch.hour, + orbit_reference_epoch.minute, + orbit_reference_epoch.second) + + orbit.update_reference_epoch(epoch) + orbit.save_to_h5(orbit_group) + # Add description attributes. orbit_group["time"].attrs["description"] = np.string_( "Time vector record. This" From 9abd98f7ae3f4d78a6fc149ec65d02b6e2ed14aa Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Thu, 23 Jan 2025 17:35:37 -0800 Subject: [PATCH 02/32] replace `np.string_` with `np.bytes_` --- src/rtc/h5_prep.py | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/rtc/h5_prep.py b/src/rtc/h5_prep.py index 0db331af..7fb9a3c5 100644 --- a/src/rtc/h5_prep.py +++ b/src/rtc/h5_prep.py @@ -181,7 +181,7 @@ def save_hdf5_file(hdf5_obj, output_hdf5_file, clip_max, del hdf5_obj[h5_ds] pol_list_s2 = np.array(pol_list, dtype='S2') dset = hdf5_obj.create_dataset(h5_ds, data=pol_list_s2) - dset.attrs['description'] = np.string_( + dset.attrs['description'] = np.bytes_( 'List of processed polarization layers') # save geogrid coordinates @@ -284,11 +284,11 @@ def create_hdf5_file(product_id, output_hdf5_file, orbit, burst, cfg, ''' hdf5_obj = h5py.File(output_hdf5_file, 'w') - hdf5_obj.attrs['Conventions'] = np.string_("CF-1.8") - hdf5_obj.attrs["contact"] = np.string_("operasds@jpl.nasa.gov") - hdf5_obj.attrs["institution"] = np.string_("NASA JPL") - hdf5_obj.attrs["project"] = np.string_("OPERA") - hdf5_obj.attrs["reference_document"] = np.string_( + hdf5_obj.attrs['Conventions'] = np.bytes_("CF-1.8") + hdf5_obj.attrs["contact"] = np.bytes_("operasds@jpl.nasa.gov") + hdf5_obj.attrs["institution"] = np.bytes_("NASA JPL") + hdf5_obj.attrs["project"] = np.bytes_("OPERA") + hdf5_obj.attrs["reference_document"] = np.bytes_( "Product Specification Document for the OPERA Radiometric" " Terrain-Corrected SAR Backscatter from Sentinel-1," " JPL D-108758, Rev. Working Version 1, Aug 31, 2023") @@ -296,9 +296,9 @@ def create_hdf5_file(product_id, output_hdf5_file, orbit, burst, cfg, # product type product_type = cfg.groups.primary_executable.product_type if product_type == STATIC_LAYERS_PRODUCT_TYPE: - hdf5_obj.attrs["title"] = np.string_("OPERA RTC-S1-STATIC Product") + hdf5_obj.attrs["title"] = np.bytes_("OPERA RTC-S1-STATIC Product") else: - hdf5_obj.attrs["title"] = np.string_("OPERA RTC-S1 Product") + hdf5_obj.attrs["title"] = np.bytes_("OPERA RTC-S1 Product") populate_metadata_group(product_id, hdf5_obj, burst, cfg, processing_datetime, is_mosaic) @@ -333,21 +333,21 @@ def save_orbit(orbit, orbit_group, orbit_file_path): orbit.save_to_h5(orbit_group) # Add description attributes. - orbit_group["time"].attrs["description"] = np.string_( + orbit_group["time"].attrs["description"] = np.bytes_( "Time vector record. This" " record contains the time corresponding to position, velocity," " acceleration records") - orbit_group["position"].attrs["description"] = np.string_( + orbit_group["position"].attrs["description"] = np.bytes_( "Position vector" " record. This record contains the platform position data with" " respect to WGS84 G1762 reference frame") - orbit_group["velocity"].attrs["description"] = np.string_( + orbit_group["velocity"].attrs["description"] = np.bytes_( "Velocity vector" " record. This record contains the platform velocity data with" " respect to WGS84 G1762 reference frame") orbit_group.create_dataset( 'referenceEpoch', - data=np.string_(orbit.reference_epoch.isoformat())) + data=np.bytes_(orbit.reference_epoch.isoformat())) # Orbit source/type orbit_type = 'Undefined' @@ -371,8 +371,8 @@ def save_orbit(orbit, orbit_group, orbit_file_path): orbit_type = '; '.join(orbit_type_list) d = orbit_group.require_dataset("orbitType", (), "S64", - data=np.string_(orbit_type)) - d.attrs["description"] = np.string_( + data=np.bytes_(orbit_type)) + d.attrs["description"] = np.bytes_( "Type of orbit file used in processing") @@ -1307,11 +1307,11 @@ def populate_metadata_group(product_id: str, continue if isinstance(data, str): dset = h5py_obj.create_dataset( - path_dataset_in_h5, data=np.string_(data)) + path_dataset_in_h5, data=np.bytes_(data)) else: dset = h5py_obj.create_dataset(path_dataset_in_h5, data=data) - dset.attrs['description'] = np.string_(description) + dset.attrs['description'] = np.bytes_(description) def save_hdf5_dataset(ds_filename, h5py_obj, root_path, @@ -1388,18 +1388,18 @@ def save_hdf5_dataset(ds_filename, h5py_obj, root_path, dset = h5py_obj.create_dataset(h5_ds, data=data) dset.dims[0].attach_scale(yds) dset.dims[1].attach_scale(xds) - dset.attrs['grid_mapping'] = np.string_("projection") + dset.attrs['grid_mapping'] = np.bytes_("projection") if standard_name is not None: - dset.attrs['standard_name'] = np.string_(standard_name) + dset.attrs['standard_name'] = np.bytes_(standard_name) if long_name is not None: - dset.attrs['long_name'] = np.string_(long_name) + dset.attrs['long_name'] = np.bytes_(long_name) - dset.attrs['description'] = np.string_(description) + dset.attrs['description'] = np.bytes_(description) if units is not None: - dset.attrs['units'] = np.string_(units) + dset.attrs['units'] = np.bytes_(units) if fill_value is not None: dset.attrs.create('_FillValue', data=fill_value) From 079e3db79f08eec9bf70b94836baa030bafcf712 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Mon, 27 Jan 2025 15:18:32 -0800 Subject: [PATCH 03/32] fix the assignment of the `orbitType` in the metadata --- src/rtc/h5_prep.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/rtc/h5_prep.py b/src/rtc/h5_prep.py index 7fb9a3c5..520fad45 100644 --- a/src/rtc/h5_prep.py +++ b/src/rtc/h5_prep.py @@ -370,8 +370,11 @@ def save_orbit(orbit, orbit_group, orbit_file_path): orbit_type_list.append(orbit_type_individual) orbit_type = '; '.join(orbit_type_list) - d = orbit_group.require_dataset("orbitType", (), "S64", - data=np.bytes_(orbit_type)) + if 'orbitType' in orbit_group: + del orbit_group['orbitType'] + d = orbit_group.create_dataset("orbitType", + data=np.bytes_(orbit_type)) + d.attrs["description"] = np.bytes_( "Type of orbit file used in processing") From 41110f02471a34631d38b1b4a1c85700eec67d5d Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Mon, 27 Jan 2025 17:27:27 -0800 Subject: [PATCH 04/32] remove option to change the geogrid upsampling --- src/rtc/defaults/rtc_s1.yaml | 3 --- src/rtc/defaults/rtc_s1_static.yaml | 3 --- src/rtc/rtc_s1_single_job.py | 5 +++-- src/rtc/runconfig.py | 3 --- src/rtc/schemas/rtc_s1.yaml | 3 --- tests/runconfigs/s1b_los_angeles.yaml | 3 --- 6 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/rtc/defaults/rtc_s1.yaml b/src/rtc/defaults/rtc_s1.yaml index fd3e2a6b..6a4fb8f7 100644 --- a/src/rtc/defaults/rtc_s1.yaml +++ b/src/rtc/defaults/rtc_s1.yaml @@ -197,9 +197,6 @@ runconfig: # OPTIONAL - Choices: "single_block", "geogrid", "geogrid_and_radargrid", and "auto" (default) memory_mode: - # OPTIONAL - Processing upsampling factor applied to input geogrid - geogrid_upsampling: 1 - # Save the incidence angle save_incidence_angle: False diff --git a/src/rtc/defaults/rtc_s1_static.yaml b/src/rtc/defaults/rtc_s1_static.yaml index 001b44cf..f917ca8d 100644 --- a/src/rtc/defaults/rtc_s1_static.yaml +++ b/src/rtc/defaults/rtc_s1_static.yaml @@ -198,9 +198,6 @@ runconfig: # OPTIONAL - Choices: "single_block", "geogrid", "geogrid_and_radargrid", and "auto" (default) memory_mode: - # OPTIONAL - Processing upsampling factor applied to input geogrid - geogrid_upsampling: 1 - # Save the incidence angle save_incidence_angle: True diff --git a/src/rtc/rtc_s1_single_job.py b/src/rtc/rtc_s1_single_job.py index 098514f1..06718c1c 100755 --- a/src/rtc/rtc_s1_single_job.py +++ b/src/rtc/rtc_s1_single_job.py @@ -1214,7 +1214,6 @@ def run_single_job(cfg: RunConfig): cfg.groups.processing.correction_lut_range_spacing_in_meters memory_mode = geocode_namespace.memory_mode - geogrid_upsampling = geocode_namespace.geogrid_upsampling shadow_dilation_size = geocode_namespace.shadow_dilation_size abs_cal_factor = geocode_namespace.abs_rad_cal clip_max = geocode_namespace.clip_max @@ -1323,7 +1322,7 @@ def run_single_job(cfg: RunConfig): logger.info('Save layers:') logger.info(f' {layer_names_dict[LAYER_NAME_LAYOVER_SHADOW_MASK]}:' - f' {save_rtc_anf}') + f' {save_mask}') logger.info(f' RTC area normalization factor: {save_rtc_anf}') logger.info(f' RTC area normalization factor Gamma0 to Beta0:' f' {save_rtc_anf_gamma0_to_sigma0}') @@ -1803,6 +1802,8 @@ def run_single_job(cfg: RunConfig): geo_obj.geogrid(geogrid.start_x, geogrid.start_y, geogrid.spacing_x, geogrid.spacing_y, geogrid.width, geogrid.length, geogrid.epsg) + + geogrid_upsampling = 1 geo_obj.geocode(radar_grid=radar_grid, input_raster=rdr_burst_raster, diff --git a/src/rtc/runconfig.py b/src/rtc/runconfig.py index c2a6b67e..507b09fc 100644 --- a/src/rtc/runconfig.py +++ b/src/rtc/runconfig.py @@ -39,9 +39,6 @@ def load_parameters(cfg): if geocode_namespace.clip_min is None: geocode_namespace.clip_min = np.nan - if geocode_namespace.geogrid_upsampling is None: - geocode_namespace.geogrid_upsampling = 1.0 - if geocode_namespace.memory_mode == 'single_block': geocode_namespace.memory_mode = \ isce3.core.GeocodeMemoryMode.SingleBlock diff --git a/src/rtc/schemas/rtc_s1.yaml b/src/rtc/schemas/rtc_s1.yaml index 9c2798d4..0ef54563 100644 --- a/src/rtc/schemas/rtc_s1.yaml +++ b/src/rtc/schemas/rtc_s1.yaml @@ -223,9 +223,6 @@ geocoding_options: # Memory mode memory_mode: enum('auto', 'single_block', 'geogrid', 'geogrid_and_radargrid', required=False) - # Processing upsampling factor on top of the input geogrid - geogrid_upsampling: int(required=False) - # Save the incidence angle save_incidence_angle: bool(required=False) diff --git a/tests/runconfigs/s1b_los_angeles.yaml b/tests/runconfigs/s1b_los_angeles.yaml index 4f230615..f4062608 100644 --- a/tests/runconfigs/s1b_los_angeles.yaml +++ b/tests/runconfigs/s1b_los_angeles.yaml @@ -138,9 +138,6 @@ runconfig: # OPTIONAL - Choices: "single_block", "geogrid", "geogrid_radargrid", and "auto" (default) memory_mode: auto - # OPTIONAL - Processing upsampling factor applied to input geogrid - geogrid_upsampling: 1 - # Save the incidence angle save_incidence_angle: False From 5057b7c696acc7f9527d4479388f3c54fcfb1232 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Tue, 28 Jan 2025 13:24:36 -0800 Subject: [PATCH 05/32] update dependency requirements --- Docker/requirements.txt | 9 ++++++--- ...1b_los_angeles.yaml => s1b_los_angeles_mask_off.yaml} | 0 2 files changed, 6 insertions(+), 3 deletions(-) rename tests/runconfigs/{s1b_los_angeles.yaml => s1b_los_angeles_mask_off.yaml} (100%) diff --git a/Docker/requirements.txt b/Docker/requirements.txt index 2bc9ee0f..4d7ec4d2 100644 --- a/Docker/requirements.txt +++ b/Docker/requirements.txt @@ -1,4 +1,4 @@ -python>=3.9,<3.10 +python cmake>=3.18 eigen>=3.3 fftw>=3.3 @@ -16,9 +16,12 @@ pyre>=1.11.2 pytest cython ruamel.yaml -scipy!=1.10.0 +scipy setuptools shapely yamale backoff -isce3==0.15.0 \ No newline at end of file +isce3 +libnetcdf +libgdal-hdf5 +libgdal-netcdf diff --git a/tests/runconfigs/s1b_los_angeles.yaml b/tests/runconfigs/s1b_los_angeles_mask_off.yaml similarity index 100% rename from tests/runconfigs/s1b_los_angeles.yaml rename to tests/runconfigs/s1b_los_angeles_mask_off.yaml From 3df8d67ee0f7a4284a5960bd2e0fc9db58d44fc5 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Tue, 28 Jan 2025 13:28:29 -0800 Subject: [PATCH 06/32] add fill value for byte datasets; handle multiband rasters --- src/rtc/h5_prep.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/rtc/h5_prep.py b/src/rtc/h5_prep.py index 520fad45..26636d03 100644 --- a/src/rtc/h5_prep.py +++ b/src/rtc/h5_prep.py @@ -1355,7 +1355,11 @@ def save_hdf5_dataset(ds_filename, h5py_obj, root_path, logger.warning(f'WARNING Cannot open raster file: {ds_filename}') return - ds_name = layer_hdf5_dict[layer_name] + if isinstance(layer_name, str): + ds_name = layer_hdf5_dict[layer_name] + else: + ds_name = [layer_hdf5_dict[l] for l in layer_name] + if long_name is not None: description = long_name else: @@ -1410,6 +1414,8 @@ def save_hdf5_dataset(ds_filename, h5py_obj, root_path, dset.attrs.create('_FillValue', data=np.nan + 1j * np.nan) elif 'float' in gdal.GetDataTypeName(raster.datatype()).lower(): dset.attrs.create('_FillValue', data=np.nan) + elif 'byte' in gdal.GetDataTypeName(raster.datatype()).lower(): + dset.attrs.create('_FillValue', data=255) if stats_vector is not None: stats_obj = stats_vector[band] From ec04095162611c62a85f48db1d78e066f31ff864 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Tue, 28 Jan 2025 13:30:05 -0800 Subject: [PATCH 07/32] fix logic to save the layover/shadow mask --- src/rtc/rtc_s1.py | 23 +++++++++++------------ src/rtc/rtc_s1_single_job.py | 10 +++++----- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/rtc/rtc_s1.py b/src/rtc/rtc_s1.py index 1714146e..14b908fe 100755 --- a/src/rtc/rtc_s1.py +++ b/src/rtc/rtc_s1.py @@ -769,22 +769,21 @@ def run_parallel(cfg: RunConfig, logfile_path, flag_logger_full_format): if flag_layover_shadow_mask_is_temporary: temp_files_list.append(layover_shadow_mask_file) - layover_shadow_mask_file = None else: burst_output_file_list.append(layover_shadow_mask_file) logger.info(f'file saved: {layover_shadow_mask_file}') - # Take the layover shadow mask from HDF5 file if not exists - if save_secondary_layers_as_hdf5: - layover_shadow_mask_file = ( - f'NETCDF:{burst_hdf5_in_output}:' - f'{DATA_BASE_GROUP}/' - f'{layer_hdf5_dict[LAYER_NAME_LAYOVER_SHADOW_MASK]}') - - if save_mask: - output_metadata_dict[ - LAYER_NAME_LAYOVER_SHADOW_MASK][1].append( - layover_shadow_mask_file) + # Take the layover shadow mask from HDF5 file if not exists + if save_secondary_layers_as_hdf5: + layover_shadow_mask_file = ( + f'NETCDF:{burst_hdf5_in_output}:' + f'{DATA_BASE_GROUP}/' + f'{layer_hdf5_dict[LAYER_NAME_LAYOVER_SHADOW_MASK]}') + + if save_mask: + output_metadata_dict[ + LAYER_NAME_LAYOVER_SHADOW_MASK][1].append( + layover_shadow_mask_file) if not save_mask: layover_shadow_mask_file = None diff --git a/src/rtc/rtc_s1_single_job.py b/src/rtc/rtc_s1_single_job.py index 06718c1c..60af24c7 100755 --- a/src/rtc/rtc_s1_single_job.py +++ b/src/rtc/rtc_s1_single_job.py @@ -1718,9 +1718,10 @@ def run_single_job(cfg: RunConfig): else: burst_output_file_list.append(layover_shadow_mask_file) logger.info(f'file saved: {layover_shadow_mask_file}') - if save_mask: - output_metadata_dict[LAYER_NAME_LAYOVER_SHADOW_MASK][1].append( - layover_shadow_mask_file) + + if save_mask: + output_metadata_dict[LAYER_NAME_LAYOVER_SHADOW_MASK][1].append( + layover_shadow_mask_file) if not save_mask: layover_shadow_mask_file = None @@ -1849,8 +1850,7 @@ def run_single_job(cfg: RunConfig): if product_type != STATIC_LAYERS_PRODUCT_TYPE: output_imagery_list.append(geo_burst_filename) - if (flag_process and save_mask and - not save_secondary_layers_as_hdf5): + if flag_process and save_mask: set_mask_fill_value_and_ctable(layover_shadow_mask_file, geo_burst_filename) From 2937604b62d3572e517c01580be8863c6fc7e12d Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Tue, 28 Jan 2025 13:30:31 -0800 Subject: [PATCH 08/32] improve unit tests --- .../runconfigs/s1b_los_angeles_mask_off.yaml | 6 +- .../s1b_los_angeles_mask_off_h5.yaml | 211 ++++++++++++++++++ tests/runconfigs/s1b_los_angeles_mask_on.yaml | 211 ++++++++++++++++++ .../s1b_los_angeles_mask_on_h5.yaml | 211 ++++++++++++++++++ tests/test_rtc_s1_workflow.py | 32 +-- 5 files changed, 645 insertions(+), 26 deletions(-) create mode 100644 tests/runconfigs/s1b_los_angeles_mask_off_h5.yaml create mode 100644 tests/runconfigs/s1b_los_angeles_mask_on.yaml create mode 100644 tests/runconfigs/s1b_los_angeles_mask_on_h5.yaml diff --git a/tests/runconfigs/s1b_los_angeles_mask_off.yaml b/tests/runconfigs/s1b_los_angeles_mask_off.yaml index f4062608..b1aa9cbd 100644 --- a/tests/runconfigs/s1b_los_angeles_mask_off.yaml +++ b/tests/runconfigs/s1b_los_angeles_mask_off.yaml @@ -59,7 +59,7 @@ runconfig: # Optional. Save secondary layers (e.g., inc. angle) within # the HDF5 file - save_secondary_layers_as_hdf5: True + save_secondary_layers_as_hdf5: False # Save RTC-S1 metadata in the HDF5 format # Optional for `output_imagery_format` equal to 'ENVI', 'GTiff', or @@ -118,7 +118,7 @@ runconfig: input_terrain_radiometry: beta0 # OPTIONAL - Minimum RTC area factor in dB - rtc_min_value_db: + rtc_min_value_db: -30 # RTC DEM upsampling dem_upsampling: 1 @@ -142,7 +142,7 @@ runconfig: save_incidence_angle: False # Save the local-incidence angle - save_local_inc_angle: False + save_local_inc_angle: True # Save the projection angle save_projection_angle: False diff --git a/tests/runconfigs/s1b_los_angeles_mask_off_h5.yaml b/tests/runconfigs/s1b_los_angeles_mask_off_h5.yaml new file mode 100644 index 00000000..8729891c --- /dev/null +++ b/tests/runconfigs/s1b_los_angeles_mask_off_h5.yaml @@ -0,0 +1,211 @@ +runconfig: + name: rtc_s1_workflow_default + + groups: + primary_executable: + product_type: RTC_S1 + + pge_name_group: + pge_name: RTC_S1_PGE + + input_file_group: + # Required. List of SAFE files (min=1) + safe_file_path: [data/s1b_los_angeles/input_dir/S1B_IW_SLC__1SDV_20200926T135152_20200926T135219_023547_02CBCC_F988-CROPPED.zip] + + # Required. List of orbit (EOF) files (min=1) + orbit_file_path: [data/s1b_los_angeles/input_dir/S1B_OPER_AUX_PREORB_OPOD_20200926T111139_V20200926T095426_20200926T162926.EOF] + + # Optional. Burst ID to process (empty for all bursts) + # burst_id: [t069_147173_iw1, t069_147174_iw1] + burst_id: [t071_151225_iw1, t071_151226_iw1] + + dynamic_ancillary_file_group: + # Digital elevation model + dem_file: data/s1b_los_angeles/input_dir/dem.tif + + # Digital elevation model description + dem_file_description: + + static_ancillary_file_group: + + # burst database sqlite file + burst_database_file: + + product_group: + processing_type: 'CUSTOM' + + # Directory where PGE will place results + product_path: . + + # Directory where SAS writes temporary data + scratch_path: data/s1b_los_angeles/scratch_dir + + # If option `save_bursts` is set, output bursts are saved to: + # {output_dir}/{burst_id}/{product_id}{suffix}.{ext} + # If option `save_mosaics` is set, output mosaics are saved to: + # {output_dir}/{product_id}{suffix}.{ext} + # If the field `product_id`` is left empty, the prefix "rtc_product" + # will be used instead. + # `suffix` is only used when there are multiple output files. + # `ext` is determined by geocoding_options.output_imagery_format. + output_dir: data/s1b_los_angeles/output_dir + product_id: OPERA_L2_RTC-S1_071-151230-IW2_20200926T135152Z_20230125T134122Z_S1B_30 + + save_bursts: True + save_mosaics: True + output_imagery_format: HDF5 + output_imagery_compression: ZSTD + output_imagery_nbits: 16 + + # Optional. Save secondary layers (e.g., inc. angle) within + # the HDF5 file + save_secondary_layers_as_hdf5: True + + # Save RTC-S1 metadata in the HDF5 format + # Optional for `output_imagery_format` equal to 'ENVI', 'GTiff', or + # 'COG', and enabled by default for `output_imagery_format` equal + # to 'HDF5' or 'NETCDF' or `save_secondary_layers_as_hdf5` is True + save_metadata: True + + processing: + + # Check if ancillary input cover entirely output products + check_ancillary_inputs_coverage: True + + polarization: co-pol + + # Options to run geo2rdr + geo2rdr: + threshold: 1.0e-8 + numiter: 25 + + # Options to run rdr2geo + rdr2geo: + threshold: 1.0e-7 + numiter: 25 + + # Apply absolute radiometric correction + apply_absolute_radiometric_correction: True + + # Apply thermal noise correction + apply_thermal_noise_correction: True + + # OPTIONAL - Apply RTC + apply_rtc: True + + # Apply bistatic delay correction + apply_bistatic_delay_correction: True + + # Apply static tropospheric delay correction + apply_static_tropospheric_delay_correction: True + + # OPTIONAL - to control behavior of RTC module + # (only applicable if geocode.apply_rtc is True) + rtc: + # OPTIONAL - Choices: + # "gamma0" (default) + # "sigma0" + output_type: gamma0 + + # OPTIONAL - Choices: + # "bilinear_distribution" (default) + # "area_projection" + algorithm_type: area_projection + + # OPTIONAL - Choices: + # "beta0" (default) + # "sigma0" + input_terrain_radiometry: beta0 + + # OPTIONAL - Minimum RTC area factor in dB + rtc_min_value_db: -30 + + # RTC DEM upsampling + dem_upsampling: 1 + + # OPTIONAL - Mechanism to specify output posting and DEM + geocoding: + + # OPTIONAL - Apply valid-samples sub-swath masking + apply_valid_samples_sub_swath_masking: True + + # OPTIONAL - Apply shadow masking + apply_shadow_masking: False + + # OPTIONAL - + algorithm_type: area_projection + + # OPTIONAL - Choices: "single_block", "geogrid", "geogrid_radargrid", and "auto" (default) + memory_mode: auto + + # Save the incidence angle + save_incidence_angle: False + + # Save the local-incidence angle + save_local_inc_angle: True + + # Save the projection angle + save_projection_angle: False + + # Save the RTC ANF compuated with the projection angle method + save_rtc_anf_projection_angle: False + + # Save the range slope angle + save_range_slope: False + + # Save the number of looks used to compute RTC-S1 + save_nlooks: True + + # Save the RTC area normalization factor (ANF) used to generate + # the RTC product + save_rtc_anf: True + + # Save the RTC area normalization factor (ANF) gamma0 to sigma0 + save_rtc_anf_gamma0_to_sigma0: False + + # Save interpolated DEM used to compute RTC-S1 + save_dem: False + + # Save layover shadow mask + save_mask: False + + # OPTIONAL - Absolute radiometric correction + abs_rad_cal: 1 + + # OPTIONAL - Clip values above threshold + clip_max: + + # OPTIONAL - Clip values below threshold + clip_min: + + # OPTIONAL - Double sampling of the radar-grid + # input sampling in the range direction + upsample_radargrid: False + + bursts_geogrid: + output_epsg: + x_posting: 300 + y_posting: 300 + x_snap: 300 + y_snap: 300 + top_left: + x: + y: + bottom_right: + x: + y: + + + mosaicking: + mosaic_geogrid: + output_epsg: + x_posting: 300 + y_posting: 300 + x_snap: 300 + y_snap: 300 + top_left: + x: + y: + bottom_right: + x: + y: diff --git a/tests/runconfigs/s1b_los_angeles_mask_on.yaml b/tests/runconfigs/s1b_los_angeles_mask_on.yaml new file mode 100644 index 00000000..bf790a4e --- /dev/null +++ b/tests/runconfigs/s1b_los_angeles_mask_on.yaml @@ -0,0 +1,211 @@ +runconfig: + name: rtc_s1_workflow_default + + groups: + primary_executable: + product_type: RTC_S1 + + pge_name_group: + pge_name: RTC_S1_PGE + + input_file_group: + # Required. List of SAFE files (min=1) + safe_file_path: [data/s1b_los_angeles/input_dir/S1B_IW_SLC__1SDV_20200926T135152_20200926T135219_023547_02CBCC_F988-CROPPED.zip] + + # Required. List of orbit (EOF) files (min=1) + orbit_file_path: [data/s1b_los_angeles/input_dir/S1B_OPER_AUX_PREORB_OPOD_20200926T111139_V20200926T095426_20200926T162926.EOF] + + # Optional. Burst ID to process (empty for all bursts) + # burst_id: [t069_147173_iw1, t069_147174_iw1] + burst_id: [t071_151225_iw1, t071_151226_iw1] + + dynamic_ancillary_file_group: + # Digital elevation model + dem_file: data/s1b_los_angeles/input_dir/dem.tif + + # Digital elevation model description + dem_file_description: + + static_ancillary_file_group: + + # burst database sqlite file + burst_database_file: + + product_group: + processing_type: 'CUSTOM' + + # Directory where PGE will place results + product_path: . + + # Directory where SAS writes temporary data + scratch_path: data/s1b_los_angeles/scratch_dir + + # If option `save_bursts` is set, output bursts are saved to: + # {output_dir}/{burst_id}/{product_id}{suffix}.{ext} + # If option `save_mosaics` is set, output mosaics are saved to: + # {output_dir}/{product_id}{suffix}.{ext} + # If the field `product_id`` is left empty, the prefix "rtc_product" + # will be used instead. + # `suffix` is only used when there are multiple output files. + # `ext` is determined by geocoding_options.output_imagery_format. + output_dir: data/s1b_los_angeles/output_dir + product_id: OPERA_L2_RTC-S1_071-151230-IW2_20200926T135152Z_20230125T134122Z_S1B_30 + + save_bursts: True + save_mosaics: True + output_imagery_format: COG + output_imagery_compression: ZSTD + output_imagery_nbits: 16 + + # Optional. Save secondary layers (e.g., inc. angle) within + # the HDF5 file + save_secondary_layers_as_hdf5: False + + # Save RTC-S1 metadata in the HDF5 format + # Optional for `output_imagery_format` equal to 'ENVI', 'GTiff', or + # 'COG', and enabled by default for `output_imagery_format` equal + # to 'HDF5' or 'NETCDF' or `save_secondary_layers_as_hdf5` is True + save_metadata: True + + processing: + + # Check if ancillary input cover entirely output products + check_ancillary_inputs_coverage: True + + polarization: co-pol + + # Options to run geo2rdr + geo2rdr: + threshold: 1.0e-8 + numiter: 25 + + # Options to run rdr2geo + rdr2geo: + threshold: 1.0e-7 + numiter: 25 + + # Apply absolute radiometric correction + apply_absolute_radiometric_correction: True + + # Apply thermal noise correction + apply_thermal_noise_correction: True + + # OPTIONAL - Apply RTC + apply_rtc: True + + # Apply bistatic delay correction + apply_bistatic_delay_correction: True + + # Apply static tropospheric delay correction + apply_static_tropospheric_delay_correction: True + + # OPTIONAL - to control behavior of RTC module + # (only applicable if geocode.apply_rtc is True) + rtc: + # OPTIONAL - Choices: + # "gamma0" (default) + # "sigma0" + output_type: gamma0 + + # OPTIONAL - Choices: + # "bilinear_distribution" (default) + # "area_projection" + algorithm_type: area_projection + + # OPTIONAL - Choices: + # "beta0" (default) + # "sigma0" + input_terrain_radiometry: beta0 + + # OPTIONAL - Minimum RTC area factor in dB + rtc_min_value_db: -30 + + # RTC DEM upsampling + dem_upsampling: 1 + + # OPTIONAL - Mechanism to specify output posting and DEM + geocoding: + + # OPTIONAL - Apply valid-samples sub-swath masking + apply_valid_samples_sub_swath_masking: True + + # OPTIONAL - Apply shadow masking + apply_shadow_masking: False + + # OPTIONAL - + algorithm_type: area_projection + + # OPTIONAL - Choices: "single_block", "geogrid", "geogrid_radargrid", and "auto" (default) + memory_mode: auto + + # Save the incidence angle + save_incidence_angle: False + + # Save the local-incidence angle + save_local_inc_angle: True + + # Save the projection angle + save_projection_angle: False + + # Save the RTC ANF compuated with the projection angle method + save_rtc_anf_projection_angle: False + + # Save the range slope angle + save_range_slope: False + + # Save the number of looks used to compute RTC-S1 + save_nlooks: True + + # Save the RTC area normalization factor (ANF) used to generate + # the RTC product + save_rtc_anf: True + + # Save the RTC area normalization factor (ANF) gamma0 to sigma0 + save_rtc_anf_gamma0_to_sigma0: False + + # Save interpolated DEM used to compute RTC-S1 + save_dem: False + + # Save layover shadow mask + save_mask: True + + # OPTIONAL - Absolute radiometric correction + abs_rad_cal: 1 + + # OPTIONAL - Clip values above threshold + clip_max: + + # OPTIONAL - Clip values below threshold + clip_min: + + # OPTIONAL - Double sampling of the radar-grid + # input sampling in the range direction + upsample_radargrid: False + + bursts_geogrid: + output_epsg: + x_posting: 300 + y_posting: 300 + x_snap: 300 + y_snap: 300 + top_left: + x: + y: + bottom_right: + x: + y: + + + mosaicking: + mosaic_geogrid: + output_epsg: + x_posting: 300 + y_posting: 300 + x_snap: 300 + y_snap: 300 + top_left: + x: + y: + bottom_right: + x: + y: diff --git a/tests/runconfigs/s1b_los_angeles_mask_on_h5.yaml b/tests/runconfigs/s1b_los_angeles_mask_on_h5.yaml new file mode 100644 index 00000000..115c0491 --- /dev/null +++ b/tests/runconfigs/s1b_los_angeles_mask_on_h5.yaml @@ -0,0 +1,211 @@ +runconfig: + name: rtc_s1_workflow_default + + groups: + primary_executable: + product_type: RTC_S1 + + pge_name_group: + pge_name: RTC_S1_PGE + + input_file_group: + # Required. List of SAFE files (min=1) + safe_file_path: [data/s1b_los_angeles/input_dir/S1B_IW_SLC__1SDV_20200926T135152_20200926T135219_023547_02CBCC_F988-CROPPED.zip] + + # Required. List of orbit (EOF) files (min=1) + orbit_file_path: [data/s1b_los_angeles/input_dir/S1B_OPER_AUX_PREORB_OPOD_20200926T111139_V20200926T095426_20200926T162926.EOF] + + # Optional. Burst ID to process (empty for all bursts) + # burst_id: [t069_147173_iw1, t069_147174_iw1] + burst_id: [t071_151225_iw1, t071_151226_iw1] + + dynamic_ancillary_file_group: + # Digital elevation model + dem_file: data/s1b_los_angeles/input_dir/dem.tif + + # Digital elevation model description + dem_file_description: + + static_ancillary_file_group: + + # burst database sqlite file + burst_database_file: + + product_group: + processing_type: 'CUSTOM' + + # Directory where PGE will place results + product_path: . + + # Directory where SAS writes temporary data + scratch_path: data/s1b_los_angeles/scratch_dir + + # If option `save_bursts` is set, output bursts are saved to: + # {output_dir}/{burst_id}/{product_id}{suffix}.{ext} + # If option `save_mosaics` is set, output mosaics are saved to: + # {output_dir}/{product_id}{suffix}.{ext} + # If the field `product_id`` is left empty, the prefix "rtc_product" + # will be used instead. + # `suffix` is only used when there are multiple output files. + # `ext` is determined by geocoding_options.output_imagery_format. + output_dir: data/s1b_los_angeles/output_dir + product_id: OPERA_L2_RTC-S1_071-151230-IW2_20200926T135152Z_20230125T134122Z_S1B_30 + + save_bursts: True + save_mosaics: True + output_imagery_format: HDF5 + output_imagery_compression: ZSTD + output_imagery_nbits: 16 + + # Optional. Save secondary layers (e.g., inc. angle) within + # the HDF5 file + save_secondary_layers_as_hdf5: True + + # Save RTC-S1 metadata in the HDF5 format + # Optional for `output_imagery_format` equal to 'ENVI', 'GTiff', or + # 'COG', and enabled by default for `output_imagery_format` equal + # to 'HDF5' or 'NETCDF' or `save_secondary_layers_as_hdf5` is True + save_metadata: True + + processing: + + # Check if ancillary input cover entirely output products + check_ancillary_inputs_coverage: True + + polarization: co-pol + + # Options to run geo2rdr + geo2rdr: + threshold: 1.0e-8 + numiter: 25 + + # Options to run rdr2geo + rdr2geo: + threshold: 1.0e-7 + numiter: 25 + + # Apply absolute radiometric correction + apply_absolute_radiometric_correction: True + + # Apply thermal noise correction + apply_thermal_noise_correction: True + + # OPTIONAL - Apply RTC + apply_rtc: True + + # Apply bistatic delay correction + apply_bistatic_delay_correction: True + + # Apply static tropospheric delay correction + apply_static_tropospheric_delay_correction: True + + # OPTIONAL - to control behavior of RTC module + # (only applicable if geocode.apply_rtc is True) + rtc: + # OPTIONAL - Choices: + # "gamma0" (default) + # "sigma0" + output_type: gamma0 + + # OPTIONAL - Choices: + # "bilinear_distribution" (default) + # "area_projection" + algorithm_type: area_projection + + # OPTIONAL - Choices: + # "beta0" (default) + # "sigma0" + input_terrain_radiometry: beta0 + + # OPTIONAL - Minimum RTC area factor in dB + rtc_min_value_db: -30 + + # RTC DEM upsampling + dem_upsampling: 1 + + # OPTIONAL - Mechanism to specify output posting and DEM + geocoding: + + # OPTIONAL - Apply valid-samples sub-swath masking + apply_valid_samples_sub_swath_masking: True + + # OPTIONAL - Apply shadow masking + apply_shadow_masking: False + + # OPTIONAL - + algorithm_type: area_projection + + # OPTIONAL - Choices: "single_block", "geogrid", "geogrid_radargrid", and "auto" (default) + memory_mode: auto + + # Save the incidence angle + save_incidence_angle: False + + # Save the local-incidence angle + save_local_inc_angle: True + + # Save the projection angle + save_projection_angle: False + + # Save the RTC ANF compuated with the projection angle method + save_rtc_anf_projection_angle: False + + # Save the range slope angle + save_range_slope: False + + # Save the number of looks used to compute RTC-S1 + save_nlooks: True + + # Save the RTC area normalization factor (ANF) used to generate + # the RTC product + save_rtc_anf: True + + # Save the RTC area normalization factor (ANF) gamma0 to sigma0 + save_rtc_anf_gamma0_to_sigma0: False + + # Save interpolated DEM used to compute RTC-S1 + save_dem: False + + # Save layover shadow mask + save_mask: True + + # OPTIONAL - Absolute radiometric correction + abs_rad_cal: 1 + + # OPTIONAL - Clip values above threshold + clip_max: + + # OPTIONAL - Clip values below threshold + clip_min: + + # OPTIONAL - Double sampling of the radar-grid + # input sampling in the range direction + upsample_radargrid: False + + bursts_geogrid: + output_epsg: + x_posting: 300 + y_posting: 300 + x_snap: 300 + y_snap: 300 + top_left: + x: + y: + bottom_right: + x: + y: + + + mosaicking: + mosaic_geogrid: + output_epsg: + x_posting: 300 + y_posting: 300 + x_snap: 300 + y_snap: 300 + top_left: + x: + y: + bottom_right: + x: + y: diff --git a/tests/test_rtc_s1_workflow.py b/tests/test_rtc_s1_workflow.py index a0c8aac9..02095c69 100644 --- a/tests/test_rtc_s1_workflow.py +++ b/tests/test_rtc_s1_workflow.py @@ -123,7 +123,7 @@ def _check_results(output_dir, product_prefix, save_imagery_as_hdf5, else: # assert that the following secondary layers are present: - ds_list = ['number_of_looks', 'rtc_area_normalization_factor', + ds_list = ['number_of_looks', 'rtc_anf_gamma0_to_beta0', # 'rtc_area_normalization_factor_gamma0_to_sigma0', 'local_incidence_angle'] for ds_name in ds_list: @@ -154,11 +154,9 @@ def test_workflow(): tests_dir = os.path.dirname(__file__) dataset_dir = os.path.join(test_data_directory, dataset_name) - user_runconfig_file = os.path.join(tests_dir, 'runconfigs', - 's1b_los_angeles.yaml') + if FLAG_ALWAYS_DOWNLOAD or not os.path.isdir(dataset_dir): + - if (FLAG_ALWAYS_DOWNLOAD or not os.path.isdir(dataset_dir) or - not os.path.isfile(user_runconfig_file)): print(f'Test dataset {dataset_name} not found. Downloading' f' file {dataset_url}.') @@ -179,32 +177,20 @@ def test_workflow(): full_log_formatting = False create_logger(log_file, full_log_formatting) - # Get a runconfig dict from command line argumens - runconfig_path = os.path.join(tests_dir, 'runconfigs', - 's1b_los_angeles.yaml') + for runconfig_mode in ['mask_off', 'mask_on', + 'mask_off_h5', 'mask_on_h5']: - # for output_imagery_format in ['COG', 'HDF5']: - for output_imagery_format in ['COG']: + # Get a runconfig dict from command line argumens + runconfig_path = os.path.join( + tests_dir, 'runconfigs', + f's1b_los_angeles_{runconfig_mode}.yaml') cfg = RunConfig.load_from_yaml(runconfig_path) - cfg.groups.product_group.output_imagery_format = output_imagery_format output_dir_single_job, product_prefix, save_imagery_as_hdf5, \ save_secondary_layers_as_hdf5, save_metadata, \ hdf5_file_extension, imagery_extension = _load_cfg_parameters(cfg) - # Testing creation of secondary layers: - # - # The YAML file above (`runconfig_path`) is only set to create the - # `numberOfLooks` and `rtcAreaNormalizationFactorGamma0ToBeta0`. Here, - # we also force the creation of `layoverShadowMask` and - # `localIncidenceAngle` and will test if they are present in the - # output files. We also assert that layers not set to be created, - # such as `incidenceAngle`, are indeed not created - - cfg.groups.processing.geocoding.save_mask = True - cfg.groups.processing.geocoding.save_local_inc_angle = True - # Run geocode burst workflow (single job) run_single_job(cfg) From b6627c759c65e6a0da6188b1475fd0d7016a2d41 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Mon, 28 Apr 2025 11:58:29 -0700 Subject: [PATCH 09/32] bump software version to v1.0.4 --- Docker/Dockerfile | 2 +- build_docker_image.sh | 2 +- src/rtc/version.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 5e5a4edf..bb4242e3 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -2,7 +2,7 @@ FROM oraclelinux:8 LABEL author="OPERA ADT" \ description="RTC cal/val release R4" \ - version="1.0.3-final" + version="1.0.4-final" RUN yum -y update &&\ yum -y install curl &&\ diff --git a/build_docker_image.sh b/build_docker_image.sh index 5f749d64..aee9a3fe 100755 --- a/build_docker_image.sh +++ b/build_docker_image.sh @@ -2,7 +2,7 @@ REPO=opera IMAGE=rtc -TAG=final_1.0.3 +TAG=final_1.0.4 echo "IMAGE is $REPO/$IMAGE:$TAG" diff --git a/src/rtc/version.py b/src/rtc/version.py index 0c2831a5..2f1fca82 100644 --- a/src/rtc/version.py +++ b/src/rtc/version.py @@ -1 +1 @@ -VERSION='1.0.3' +VERSION='1.0.4' From d6ea2b794a885a1afc59656983d560fe539c209e Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 1 May 2025 17:38:57 -0700 Subject: [PATCH 10/32] update isce3 (0.24.3) and s1reader(0.2.5) --- .github/workflows/test.yml | 4 +- Docker/Dockerfile | 11 +- Docker/environment.yml | 4 +- Docker/lockfile.lock | 257 ++++++++++++++++--------------------- Docker/requirements.txt | 4 +- build_docker_image.sh | 2 +- pkgs-explicit.txt | 120 +++++++++++++++++ src/rtc/version.py | 2 +- 8 files changed, 244 insertions(+), 160 deletions(-) create mode 100644 pkgs-explicit.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index af3776a7..b52611f9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,10 +50,10 @@ jobs: - name: Install S1-Reader run: | curl -sSL \ - https://github.com/opera-adt/s1-reader/archive/refs/tags/v0.2.2.tar.gz \ + https://github.com/opera-adt/s1-reader/archive/refs/tags/v0.2.5.tar.gz \ -o s1_reader_src.tar.gz \ && tar -xvf s1_reader_src.tar.gz \ - && ln -s s1-reader-0.2.2 s1-reader \ + && ln -s s1-reader-0.2.5 s1-reader \ && rm s1_reader_src.tar.gz \ && python -m pip install ./s1-reader diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 5e5a4edf..99717150 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -1,8 +1,11 @@ -FROM oraclelinux:8 +ARG repository=cae-artifactory.jpl.nasa.gov:16003/gov/nasa/jpl/iems/sds/infrastructure/base/jplsds-oraclelinux +ARG tag=8.10.250401 +ARG digest=sha256:e37c210f26cfe7660808e536937fcf6ac359b3ec5713211e46519d7a35973a57 +FROM ${repository}:${tag}@${digest} LABEL author="OPERA ADT" \ description="RTC cal/val release R4" \ - version="1.0.3-final" + version="1.0.4-final" RUN yum -y update &&\ yum -y install curl &&\ @@ -37,9 +40,9 @@ SHELL ["conda", "run", "-n", "RTC", "/bin/bash", "-c"] WORKDIR /home/rtc_user/OPERA # installing OPERA s1-reader -RUN curl -sSL https://github.com/isce-framework/s1-reader/archive/refs/tags/v0.2.4.tar.gz -o s1_reader_src.tar.gz &&\ +RUN curl -sSL https://github.com/isce-framework/s1-reader/archive/refs/tags/v0.2.5.tar.gz -o s1_reader_src.tar.gz &&\ tar -xvf s1_reader_src.tar.gz &&\ - ln -s s1-reader-0.2.4 s1-reader &&\ + ln -s s1-reader-0.2.5 s1-reader &&\ rm s1_reader_src.tar.gz &&\ python -m pip install ./s1-reader diff --git a/Docker/environment.yml b/Docker/environment.yml index df58c973..d5232747 100644 --- a/Docker/environment.yml +++ b/Docker/environment.yml @@ -4,12 +4,12 @@ channels: dependencies: - python>=3.9,<3.10 - gdal>=3.0 - - s1reader>=0.2.4 + - s1reader>=0.2.5 - numpy>=1.20 - pybind11>=2.5 - pyre>=1.11.2 - scipy!=1.10.0 - - isce3==0.15.0 + - isce3==0.24.4 # Workaround for the issue with `libabseil` (09/11/2023) - libabseil=20230125.3 \ No newline at end of file diff --git a/Docker/lockfile.lock b/Docker/lockfile.lock index 4485a4cd..aa711c39 100644 --- a/Docker/lockfile.lock +++ b/Docker/lockfile.lock @@ -1,159 +1,120 @@ # This file may be used to create an environment using: # $ conda create --name --file # platform: linux-64 +# created-by: conda 24.9.0 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda -https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda -https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.conda -https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda -https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda +https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda +https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda -https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hc118613_108.conda -https://conda.anaconda.org/conda-forge/linux-64/freexl-1.0.6-h166bdaf_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda -https://conda.anaconda.org/conda-forge/linux-64/gtest-1.14.0-h00ab1b0_1.conda -https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/json-c-0.17-h7ab15ed_0.conda +https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h86f0d12_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.5-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda +https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libaec-1.0.6-hcb278e6_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda -https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda -https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda -https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda -https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda -https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda +https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda -https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda -https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda -https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda -https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda -https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.78.0-h2c5509c_4.conda -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.6.2-h039dbb9_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-18_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-18_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda -https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda -https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda +https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h00ab1b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gmock-1.16.0-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_4.conda +https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.9-h05a5f5f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-3.13.3-hf636f53_101_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.49.1-h9eae976_2.conda +https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda +https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda -https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h37653c0_1015.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda -https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py39hed45dcc_0.conda -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py39h6183b62_0.conda -https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda -https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pybind11-global-2.11.1-py39h7633fee_0.conda -https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_0.conda -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py39h72bdee0_1.conda -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda -https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda -https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.12-py313h5dec8f5_0.conda +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda +https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda +https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h4bc477f_1.conda +https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda +https://conda.anaconda.org/conda-forge/noarch/pip-25.1-pyh145f28c_0.conda +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py313h536fd9c_1.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda +https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda -https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.0-hbdc6101_0.conda -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.2-nompi_h4f84152_100.conda -https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.0.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda -https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/postgresql-15.4-h8972f4a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pybind11-2.11.1-py39h7633fee_0.conda -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.32-py39hd1e30aa_0.conda -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_2.conda -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.4-hac6953d_3.conda -https://conda.anaconda.org/conda-forge/noarch/yamale-4.0.4-pyh6c4a22f_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-h22adcc9_11.conda -https://conda.anaconda.org/conda-forge/linux-64/h5py-3.9.0-nompi_py39h87cadad_102.conda -https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.0.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.1-hcd42e92_5.conda -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda -https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.0.1-h15f6e67_28.conda -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/poppler-23.08.0-hd18248d_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.1-py39ha0dfafb_2.conda -https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h84d19f0_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.7.1-h880a63b_9.conda -https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.7.1-py39h41b90d8_9.conda -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py39h6183b62_0.conda -https://conda.anaconda.org/conda-forge/linux-64/isce3-0.15.0-py39h431996e_0.conda - +https://conda.anaconda.org/conda-forge/linux-64/cmake-4.0.1-h74e3db0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.0-h0054346_1.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.10-py313h536fd9c_0.conda +https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda +https://conda.anaconda.org/conda-forge/linux-64/lxml-5.4.0-py313h73548e6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py313h17eae1a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.1-py313hcd509b5_1.conda +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py313hff19e9a_100.conda +https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-hc58de80_6.conda +https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py313hdc5ddd6_4.conda +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py313h86fcf2b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py313h576e190_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py313h0c0c96a_6.conda +https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py313ha9de4fe_3.conda +https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.3-py313cuda118h1234567_5_cuda.conda diff --git a/Docker/requirements.txt b/Docker/requirements.txt index 2bc9ee0f..739e4952 100644 --- a/Docker/requirements.txt +++ b/Docker/requirements.txt @@ -1,4 +1,4 @@ -python>=3.9,<3.10 +python cmake>=3.18 eigen>=3.3 fftw>=3.3 @@ -21,4 +21,4 @@ setuptools shapely yamale backoff -isce3==0.15.0 \ No newline at end of file +isce3==0.24.3 \ No newline at end of file diff --git a/build_docker_image.sh b/build_docker_image.sh index 5f749d64..aee9a3fe 100755 --- a/build_docker_image.sh +++ b/build_docker_image.sh @@ -2,7 +2,7 @@ REPO=opera IMAGE=rtc -TAG=final_1.0.3 +TAG=final_1.0.4 echo "IMAGE is $REPO/$IMAGE:$TAG" diff --git a/pkgs-explicit.txt b/pkgs-explicit.txt new file mode 100644 index 00000000..aa711c39 --- /dev/null +++ b/pkgs-explicit.txt @@ -0,0 +1,120 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +# created-by: conda 24.9.0 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda +https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda +https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h86f0d12_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.5-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda +https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda +https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda +https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda +https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h00ab1b0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gmock-1.16.0-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_4.conda +https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.9-h05a5f5f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-3.13.3-hf636f53_101_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.49.1-h9eae976_2.conda +https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda +https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.12-py313h5dec8f5_0.conda +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda +https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda +https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h4bc477f_1.conda +https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda +https://conda.anaconda.org/conda-forge/noarch/pip-25.1-pyh145f28c_0.conda +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py313h536fd9c_1.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda +https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda +https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cmake-4.0.1-h74e3db0_0.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.0-h0054346_1.conda +https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda +https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.10-py313h536fd9c_0.conda +https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda +https://conda.anaconda.org/conda-forge/linux-64/lxml-5.4.0-py313h73548e6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py313h17eae1a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.1-py313hcd509b5_1.conda +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py313hff19e9a_100.conda +https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-hc58de80_6.conda +https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py313hdc5ddd6_4.conda +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py313h86fcf2b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py313h576e190_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py313h0c0c96a_6.conda +https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py313ha9de4fe_3.conda +https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.3-py313cuda118h1234567_5_cuda.conda diff --git a/src/rtc/version.py b/src/rtc/version.py index 0c2831a5..2f1fca82 100644 --- a/src/rtc/version.py +++ b/src/rtc/version.py @@ -1 +1 @@ -VERSION='1.0.3' +VERSION='1.0.4' From d92318a93fb1fb163f5f5f1e1bc18df469db06c3 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 1 May 2025 17:41:27 -0700 Subject: [PATCH 11/32] remove --- pkgs-explicit.txt | 120 ---------------------------------------------- 1 file changed, 120 deletions(-) delete mode 100644 pkgs-explicit.txt diff --git a/pkgs-explicit.txt b/pkgs-explicit.txt deleted file mode 100644 index aa711c39..00000000 --- a/pkgs-explicit.txt +++ /dev/null @@ -1,120 +0,0 @@ -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: linux-64 -# created-by: conda 24.9.0 -@EXPLICIT -https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda -https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda -https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda -https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda -https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda -https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda -https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h86f0d12_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda -https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda -https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.5-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda -https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda -https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda -https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda -https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda -https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda -https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda -https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda -https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda -https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h00ab1b0_0.conda -https://conda.anaconda.org/conda-forge/linux-64/gmock-1.16.0-ha770c72_0.conda -https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_4.conda -https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.9-h05a5f5f_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda -https://conda.anaconda.org/conda-forge/linux-64/python-3.13.3-hf636f53_101_cp313.conda -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.49.1-h9eae976_2.conda -https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda -https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.12-py313h5dec8f5_0.conda -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda -https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda -https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h4bc477f_1.conda -https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda -https://conda.anaconda.org/conda-forge/noarch/pip-25.1-pyh145f28c_0.conda -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py313h536fd9c_1.conda -https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda -https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda -https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cmake-4.0.1-h74e3db0_0.conda -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.0-h0054346_1.conda -https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda -https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.10-py313h536fd9c_0.conda -https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda -https://conda.anaconda.org/conda-forge/linux-64/lxml-5.4.0-py313h73548e6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py313h17eae1a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.1-py313hcd509b5_1.conda -https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py313hff19e9a_100.conda -https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-hc58de80_6.conda -https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py313hdc5ddd6_4.conda -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py313h86fcf2b_0.conda -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py313h576e190_0.conda -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py313h0c0c96a_6.conda -https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py313ha9de4fe_3.conda -https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.3-py313cuda118h1234567_5_cuda.conda From 54c45fe68bf8d7195b1b2cdaa92556c6df8b7273 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 1 May 2025 19:54:44 -0700 Subject: [PATCH 12/32] fix test --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bfe67b15..f98a8c9e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -41,10 +41,11 @@ jobs: # Set the conda environment up using Mamba and install dependencies - name: Setup Environment - uses: mamba-org/setup-micromamba@main + uses: mamba-org/setup-micromamba@v2 with: environment-file: ${{ matrix.env-file.file }} environment-name: RTC + generate-run-shell: false # Install the S1-Reader OPERA-ADT project. - name: Install S1-Reader From 9e6c1e9972e691e297bcd99c1d39be5f0298bf27 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 1 May 2025 20:02:01 -0700 Subject: [PATCH 13/32] revert base image for test --- Docker/Dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 99717150..c7b6d9f7 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -1,8 +1,8 @@ -ARG repository=cae-artifactory.jpl.nasa.gov:16003/gov/nasa/jpl/iems/sds/infrastructure/base/jplsds-oraclelinux -ARG tag=8.10.250401 -ARG digest=sha256:e37c210f26cfe7660808e536937fcf6ac359b3ec5713211e46519d7a35973a57 -FROM ${repository}:${tag}@${digest} - +# ARG repository=cae-artifactory.jpl.nasa.gov:16003/gov/nasa/jpl/iems/sds/infrastructure/base/jplsds-oraclelinux +# ARG tag=8.10.250401 +# ARG digest=sha256:e37c210f26cfe7660808e536937fcf6ac359b3ec5713211e46519d7a35973a57 +# FROM ${repository}:${tag}@${digest} +FROM oraclelinux:8 LABEL author="OPERA ADT" \ description="RTC cal/val release R4" \ version="1.0.4-final" From e70c24e376dccbdc100608e1ddb8df844c9301f2 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Mon, 5 May 2025 12:19:41 -0700 Subject: [PATCH 14/32] test --- .github/workflows/test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f98a8c9e..4814ef4d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -45,7 +45,10 @@ jobs: with: environment-file: ${{ matrix.env-file.file }} environment-name: RTC - generate-run-shell: false + init-shell: bash # let the action touch ~/.bash_profile + log-level: debug # shows solver problems early + + # generate-run-shell: false # Install the S1-Reader OPERA-ADT project. - name: Install S1-Reader From 74befc5a99e9e2130105d245b4e1a30ee4b35703 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Mon, 5 May 2025 17:33:06 -0700 Subject: [PATCH 15/32] update isce3 --- Docker/lockfile.lock | 4 ++-- Docker/requirements.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Docker/lockfile.lock b/Docker/lockfile.lock index aa711c39..e711cbc1 100644 --- a/Docker/lockfile.lock +++ b/Docker/lockfile.lock @@ -28,7 +28,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda -https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.5-hb9d3cd8_0.conda https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda @@ -117,4 +117,4 @@ https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py313h86fcf2b_0.con https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py313h576e190_0.conda https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py313h0c0c96a_6.conda https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py313ha9de4fe_3.conda -https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.3-py313cuda118h1234567_5_cuda.conda +https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py313cuda118h1234567_5_cuda.conda diff --git a/Docker/requirements.txt b/Docker/requirements.txt index 739e4952..3c0b6dcc 100644 --- a/Docker/requirements.txt +++ b/Docker/requirements.txt @@ -21,4 +21,4 @@ setuptools shapely yamale backoff -isce3==0.24.3 \ No newline at end of file +isce3==0.24.4 \ No newline at end of file From e8084e0d886337367e32cb8cfd495896c4e5c4fd Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Mon, 5 May 2025 18:20:36 -0700 Subject: [PATCH 16/32] test docker --- Docker/Dockerfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index c7b6d9f7..25c78a49 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -1,8 +1,9 @@ -# ARG repository=cae-artifactory.jpl.nasa.gov:16003/gov/nasa/jpl/iems/sds/infrastructure/base/jplsds-oraclelinux -# ARG tag=8.10.250401 +ARG repository=cae-artifactory.jpl.nasa.gov:16003/gov/nasa/jpl/iems/sds/infrastructure/base/jplsds-oraclelinux +ARG tag=8.10.250401 # ARG digest=sha256:e37c210f26cfe7660808e536937fcf6ac359b3ec5713211e46519d7a35973a57 -# FROM ${repository}:${tag}@${digest} -FROM oraclelinux:8 +FROM ${repository}:${tag} +#@${digest} +# FROM oraclelinux:8 LABEL author="OPERA ADT" \ description="RTC cal/val release R4" \ version="1.0.4-final" From f5a4bd9e49a5306a684db61ee741d3e383df2838 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Fri, 16 May 2025 18:29:11 -0700 Subject: [PATCH 17/32] set `epsg_out` when calling Rdr2Geo --- src/rtc/rtc_s1_single_job.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rtc/rtc_s1_single_job.py b/src/rtc/rtc_s1_single_job.py index 098514f1..626f6774 100755 --- a/src/rtc/rtc_s1_single_job.py +++ b/src/rtc/rtc_s1_single_job.py @@ -915,6 +915,7 @@ def compute_layover_shadow_mask(radar_grid: isce3.product.RadarGridParameters, orbit, ellipsoid, grid_doppler, + epsg_out=dem_raster.get_epsg(), threshold=threshold_rdr2geo, numiter=numiter_rdr2geo, extraiter=extraiter_rdr2geo, From 5f21d527d0ffb1018076c01daf84784532939a82 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Mon, 19 May 2025 10:44:23 -0700 Subject: [PATCH 18/32] ensure that the to compute the layover/shadow mask matches the DEM's EPSG code --- src/rtc/h5_prep.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/rtc/h5_prep.py b/src/rtc/h5_prep.py index 61fdb6fb..7aa8f08c 100644 --- a/src/rtc/h5_prep.py +++ b/src/rtc/h5_prep.py @@ -181,7 +181,7 @@ def save_hdf5_file(hdf5_obj, output_hdf5_file, clip_max, del hdf5_obj[h5_ds] pol_list_s2 = np.array(pol_list, dtype='S2') dset = hdf5_obj.create_dataset(h5_ds, data=pol_list_s2) - dset.attrs['description'] = np.string_( + dset.attrs['description'] = np.bytes_( 'List of processed polarization layers') # save geogrid coordinates @@ -284,11 +284,11 @@ def create_hdf5_file(product_id, output_hdf5_file, orbit, burst, cfg, ''' hdf5_obj = h5py.File(output_hdf5_file, 'w') - hdf5_obj.attrs['Conventions'] = np.string_("CF-1.8") - hdf5_obj.attrs["contact"] = np.string_("operasds@jpl.nasa.gov") - hdf5_obj.attrs["institution"] = np.string_("NASA JPL") - hdf5_obj.attrs["project"] = np.string_("OPERA") - hdf5_obj.attrs["reference_document"] = np.string_( + hdf5_obj.attrs['Conventions'] = np.bytes_("CF-1.8") + hdf5_obj.attrs["contact"] = np.bytes_("operasds@jpl.nasa.gov") + hdf5_obj.attrs["institution"] = np.bytes_("NASA JPL") + hdf5_obj.attrs["project"] = np.bytes_("OPERA") + hdf5_obj.attrs["reference_document"] = np.bytes_( "Product Specification Document for the OPERA Radiometric" " Terrain-Corrected SAR Backscatter from Sentinel-1," " JPL D-108758, Rev. Working Version 1, Aug 31, 2023") @@ -296,9 +296,9 @@ def create_hdf5_file(product_id, output_hdf5_file, orbit, burst, cfg, # product type product_type = cfg.groups.primary_executable.product_type if product_type == STATIC_LAYERS_PRODUCT_TYPE: - hdf5_obj.attrs["title"] = np.string_("OPERA RTC-S1-STATIC Product") + hdf5_obj.attrs["title"] = np.bytes_("OPERA RTC-S1-STATIC Product") else: - hdf5_obj.attrs["title"] = np.string_("OPERA RTC-S1 Product") + hdf5_obj.attrs["title"] = np.bytes_("OPERA RTC-S1 Product") populate_metadata_group(product_id, hdf5_obj, burst, cfg, processing_datetime, is_mosaic) @@ -310,23 +310,24 @@ def create_hdf5_file(product_id, output_hdf5_file, orbit, burst, cfg, def save_orbit(orbit, orbit_group, orbit_file_path): + return orbit.save_to_h5(orbit_group) # Add description attributes. - orbit_group["time"].attrs["description"] = np.string_( + orbit_group["time"].attrs["description"] = np.bytes_( "Time vector record. This" " record contains the time corresponding to position, velocity," " acceleration records") - orbit_group["position"].attrs["description"] = np.string_( + orbit_group["position"].attrs["description"] = np.bytes_( "Position vector" " record. This record contains the platform position data with" " respect to WGS84 G1762 reference frame") - orbit_group["velocity"].attrs["description"] = np.string_( + orbit_group["velocity"].attrs["description"] = np.bytes_( "Velocity vector" " record. This record contains the platform velocity data with" " respect to WGS84 G1762 reference frame") orbit_group.create_dataset( 'referenceEpoch', - data=np.string_(orbit.reference_epoch.isoformat())) + data=np.bytes_(orbit.reference_epoch.isoformat())) # Orbit source/type orbit_type = 'Undefined' @@ -350,8 +351,8 @@ def save_orbit(orbit, orbit_group, orbit_file_path): orbit_type = '; '.join(orbit_type_list) d = orbit_group.require_dataset("orbitType", (), "S64", - data=np.string_(orbit_type)) - d.attrs["description"] = np.string_( + data=np.bytes_(orbit_type)) + d.attrs["description"] = np.bytes_( "Type of orbit file used in processing") @@ -1286,11 +1287,11 @@ def populate_metadata_group(product_id: str, continue if isinstance(data, str): dset = h5py_obj.create_dataset( - path_dataset_in_h5, data=np.string_(data)) + path_dataset_in_h5, data=np.bytes_(data)) else: dset = h5py_obj.create_dataset(path_dataset_in_h5, data=data) - dset.attrs['description'] = np.string_(description) + dset.attrs['description'] = np.bytes_(description) def save_hdf5_dataset(ds_filename, h5py_obj, root_path, @@ -1367,18 +1368,18 @@ def save_hdf5_dataset(ds_filename, h5py_obj, root_path, dset = h5py_obj.create_dataset(h5_ds, data=data) dset.dims[0].attach_scale(yds) dset.dims[1].attach_scale(xds) - dset.attrs['grid_mapping'] = np.string_("projection") + dset.attrs['grid_mapping'] = np.bytes_("projection") if standard_name is not None: - dset.attrs['standard_name'] = np.string_(standard_name) + dset.attrs['standard_name'] = np.bytes_(standard_name) if long_name is not None: - dset.attrs['long_name'] = np.string_(long_name) + dset.attrs['long_name'] = np.bytes_(long_name) - dset.attrs['description'] = np.string_(description) + dset.attrs['description'] = np.bytes_(description) if units is not None: - dset.attrs['units'] = np.string_(units) + dset.attrs['units'] = np.bytes_(units) if fill_value is not None: dset.attrs.create('_FillValue', data=fill_value) From 0aeb6248906de76910b65557c1c24fbc0a121cd4 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Wed, 21 May 2025 16:00:53 -0700 Subject: [PATCH 19/32] update base image --- Docker/Dockerfile | 13 +++++++------ build_docker_image.sh | 12 ++++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 25c78a49..262ab605 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -1,9 +1,10 @@ -ARG repository=cae-artifactory.jpl.nasa.gov:16003/gov/nasa/jpl/iems/sds/infrastructure/base/jplsds-oraclelinux -ARG tag=8.10.250401 -# ARG digest=sha256:e37c210f26cfe7660808e536937fcf6ac359b3ec5713211e46519d7a35973a57 -FROM ${repository}:${tag} -#@${digest} -# FROM oraclelinux:8 +ARG BASE_IMAGE=oraclelinux:8.8 + +FROM ${BASE_IMAGE} + +# ARG is out of scope here unless re-declared +ARG BASE_IMAGE + LABEL author="OPERA ADT" \ description="RTC cal/val release R4" \ version="1.0.4-final" diff --git a/build_docker_image.sh b/build_docker_image.sh index aee9a3fe..1a063daa 100755 --- a/build_docker_image.sh +++ b/build_docker_image.sh @@ -4,6 +4,15 @@ REPO=opera IMAGE=rtc TAG=final_1.0.4 +docker_build_args=(--rm --force-rm --network host -t $REPO/$IMAGE:$TAG -f docker/Dockerfile) + +if [ $# -eq 0 ]; then + echo "Base image was not specified. Using the default image specified in the Dockerfile." +else + echo "Using $1 as the base image." + docker_build_args+=(--build-arg BASE_IMAGE=$1) +fi + echo "IMAGE is $REPO/$IMAGE:$TAG" # fail on any non-zero exit codes @@ -13,8 +22,7 @@ set -ex python3 setup.py sdist # build image -docker build --rm --force-rm --network host -t $REPO/$IMAGE:$TAG -f Docker/Dockerfile . - +docker build "${docker_build_args[@]}" . # run tests - to be worked on when the RTC test module is in place #docker run --rm -u "$(id -u):$(id -g)" -v "$PWD:/mnt" -w /mnt -it --network host "${IMAGE}:$t" pytest /mnt/tests/ From 4fa88d85cfbd9bc44357106b08d65ffdad4361f4 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Wed, 21 May 2025 16:32:16 -0700 Subject: [PATCH 20/32] replace sh with bash --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4814ef4d..8f1fd7d6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -104,4 +104,4 @@ jobs: # Build the image. - name: Build docker image run: | - sh build_docker_image.sh + bash build_docker_image.sh From 4d822ada820a957f63e065c4be2285224cd9ae6f Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Wed, 21 May 2025 16:37:30 -0700 Subject: [PATCH 21/32] fix bugs --- build_docker_image.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_docker_image.sh b/build_docker_image.sh index 1a063daa..0092cbc2 100755 --- a/build_docker_image.sh +++ b/build_docker_image.sh @@ -4,7 +4,7 @@ REPO=opera IMAGE=rtc TAG=final_1.0.4 -docker_build_args=(--rm --force-rm --network host -t $REPO/$IMAGE:$TAG -f docker/Dockerfile) +docker_build_args=(--rm --force-rm --network host -t $REPO/$IMAGE:$TAG -f Docker/Dockerfile) if [ $# -eq 0 ]; then echo "Base image was not specified. Using the default image specified in the Dockerfile." From 278e28477690a3df728f1e72a517cc172853dff2 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Wed, 21 May 2025 17:06:33 -0700 Subject: [PATCH 22/32] revert the lockfile --- Docker/lockfile.lock | 256 +++++++++++++++++++++++++------------------ 1 file changed, 147 insertions(+), 109 deletions(-) diff --git a/Docker/lockfile.lock b/Docker/lockfile.lock index e711cbc1..7016ade7 100644 --- a/Docker/lockfile.lock +++ b/Docker/lockfile.lock @@ -1,120 +1,158 @@ # This file may be used to create an environment using: # $ conda create --name --file # platform: linux-64 -# created-by: conda 24.9.0 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda -https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_4.conda -https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda -https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda -https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda +https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.conda +https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda -https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/json-c-0.18-h6688a6e_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h86f0d12_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hf1ad2bd_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-h8f9b012_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda -https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.0-h7b32b05_1.conda -https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.5-hb9d3cd8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda -https://conda.anaconda.org/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda -https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/gtest-1.16.0-h84d6215_0.conda +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hc118613_108.conda +https://conda.anaconda.org/conda-forge/linux-64/freexl-1.0.6-h166bdaf_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda +https://conda.anaconda.org/conda-forge/linux-64/gtest-1.14.0-h00ab1b0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/json-c-0.17-h7ab15ed_0.conda https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.47-h943b412_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.49.1-hee588c1_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_2.conda +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.0.6-hcb278e6_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda -https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda -https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda -https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda +https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda -https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda -https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h00ab1b0_0.conda -https://conda.anaconda.org/conda-forge/linux-64/gmock-1.16.0-ha770c72_0.conda -https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.29-pthreads_h94d23a6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_4.conda -https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.9-h05a5f5f_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda -https://conda.anaconda.org/conda-forge/linux-64/python-3.13.3-hf636f53_101_cp313.conda -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.49.1-h9eae976_2.conda -https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda -https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda +https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda +https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.78.0-h2c5509c_4.conda +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.6.2-h039dbb9_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-18_linux64_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-18_linux64_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda +https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda +https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_0.conda https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.12-py313h5dec8f5_0.conda -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hf1063bd_110.conda -https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h9dce30a_2.conda -https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-31_h59b9bed_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.13.0-h332b0f4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-hf539b9f_1021.conda -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.7-h4bc477f_1.conda -https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda -https://conda.anaconda.org/conda-forge/noarch/pip-25.1-pyh145f28c_0.conda -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/noarch/pybind11-global-2.13.6-pyh415d2e4_2.conda -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py313h536fd9c_1.conda -https://conda.anaconda.org/conda-forge/noarch/setuptools-80.1.0-pyhff2d567_0.conda -https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-h988505b_2.conda +https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda +https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h37653c0_1015.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py39hed45dcc_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py39h6183b62_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda +https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pybind11-global-2.11.1-py39h7633fee_0.conda +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py39h72bdee0_1.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda +https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cmake-4.0.1-h74e3db0_0.conda -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_109.conda -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.7-h75ea233_4.conda -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-31_he106b2a_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-31_h7ac8fdf_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.0-h0054346_1.conda -https://conda.anaconda.org/conda-forge/noarch/pybind11-2.13.6-pyh1ec8472_2.conda -https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.5-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.10-py313h536fd9c_0.conda -https://conda.anaconda.org/conda-forge/noarch/yamale-5.3.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.4-h239500f_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda -https://conda.anaconda.org/conda-forge/linux-64/lxml-5.4.0-py313h73548e6_0.conda -https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.5-py313h17eae1a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.1-py313hcd509b5_1.conda -https://conda.anaconda.org/conda-forge/linux-64/h5py-3.13.0-nompi_py313hff19e9a_100.conda -https://conda.anaconda.org/conda-forge/linux-64/libgdal-core-3.10.3-hc58de80_6.conda -https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.5-py313hdc5ddd6_4.conda -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py313h86fcf2b_0.conda -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.0-py313h576e190_0.conda -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.10.3-py313h0c0c96a_6.conda -https://conda.anaconda.org/conda-forge/linux-64/pysolid-0.3.3-py313ha9de4fe_3.conda -https://conda.anaconda.org/conda-forge/linux-64/isce3-0.24.4-py313cuda118h1234567_5_cuda.conda +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda +https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.0-hbdc6101_0.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.2-nompi_h4f84152_100.conda +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda +https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/postgresql-15.4-h8972f4a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pybind11-2.11.1-py39h7633fee_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.32-py39hd1e30aa_0.conda +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_2.conda +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.4-hac6953d_3.conda +https://conda.anaconda.org/conda-forge/noarch/yamale-4.0.4-pyh6c4a22f_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-h22adcc9_11.conda +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.9.0-nompi_py39h87cadad_102.conda +https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.0.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.1-hcd42e92_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda +https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.0.1-h15f6e67_28.conda +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/poppler-23.08.0-hd18248d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyre-1.12.1-py39ha0dfafb_2.conda +https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h84d19f0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.7.1-h880a63b_9.conda +https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda +https://conda.anaconda.org/conda-forge/linux-64/gdal-3.7.1-py39h41b90d8_9.conda +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py39h6183b62_0.conda +https://conda.anaconda.org/conda-forge/linux-64/isce3-0.15.0-py39h431996e_0.conda \ No newline at end of file From 836e3f404a6b8719a962a2e674c1e0767f686111 Mon Sep 17 00:00:00 2001 From: "Gustavo H. X. Shiroma" Date: Wed, 21 May 2025 17:57:42 -0700 Subject: [PATCH 23/32] revert changes to h5_prep.py --- src/rtc/h5_prep.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rtc/h5_prep.py b/src/rtc/h5_prep.py index a236dbb0..8cee659c 100644 --- a/src/rtc/h5_prep.py +++ b/src/rtc/h5_prep.py @@ -320,6 +320,7 @@ def create_hdf5_file(product_id, output_hdf5_file, orbit, burst, cfg, def save_orbit(orbit, orbit_group, orbit_file_path): + # ensure that the orbit reference epoch has not fractional part # otherwise, trancate it to seconds precision orbit_reference_epoch = orbit.reference_epoch From fd8c79ba18c5d1aa82a25730daf7c07471fa2206 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 01:54:18 -0700 Subject: [PATCH 24/32] disable pytest for s1reader --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8f1fd7d6..32869eb6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -65,10 +65,10 @@ jobs: - name: Install Project run: python -m pip install . - # Test the project. - - name: Test Project - run: | - pytest -vrpP + # # Test the project. + # - name: Test Project + # run: | + # pytest -vrpP build_docker: From 4848d3cb6f987580671a90b104d0bceb483d0206 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 18:33:19 -0700 Subject: [PATCH 25/32] run CI only for RTC --- .github/workflows/test.yml | 6 +++--- Docker/environment.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 32869eb6..6dfabe02 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,9 +66,9 @@ jobs: run: python -m pip install . # # Test the project. - # - name: Test Project - # run: | - # pytest -vrpP + - name: Test Project + run: | + pytest -vrpP tests/ build_docker: diff --git a/Docker/environment.yml b/Docker/environment.yml index d5232747..2bcd2d90 100644 --- a/Docker/environment.yml +++ b/Docker/environment.yml @@ -1,6 +1,7 @@ name: rtc_s1_sas_final channels: - conda-forge + - nodefault dependencies: - python>=3.9,<3.10 - gdal>=3.0 @@ -8,8 +9,7 @@ dependencies: - numpy>=1.20 - pybind11>=2.5 - pyre>=1.11.2 - - scipy!=1.10.0 - - isce3==0.24.4 + - isce3==0.15.0 # Workaround for the issue with `libabseil` (09/11/2023) - - libabseil=20230125.3 \ No newline at end of file + - libabseil=20230125.3 From 76da2429782f38d7461357ba633e50e93fcc1f71 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 18:46:55 -0700 Subject: [PATCH 26/32] refine the ci test --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6dfabe02..67464202 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,6 +47,7 @@ jobs: environment-name: RTC init-shell: bash # let the action touch ~/.bash_profile log-level: debug # shows solver problems early + remove-run-shell: false # avoid ENOENT # generate-run-shell: false @@ -59,7 +60,7 @@ jobs: && tar -xvf s1_reader_src.tar.gz \ && ln -s s1-reader-0.2.5 s1-reader \ && rm s1_reader_src.tar.gz \ - && python -m pip install ./s1-reader + && python -m pip install -e ./s1-reader # Setup the project - name: Install Project From 18a7ade832f7a1ecb4414c4e3153330ceaa2ba3c Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 18:56:58 -0700 Subject: [PATCH 27/32] refine the ci test --- .github/workflows/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 67464202..94f48d21 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,8 +47,7 @@ jobs: environment-name: RTC init-shell: bash # let the action touch ~/.bash_profile log-level: debug # shows solver problems early - remove-run-shell: false # avoid ENOENT - + post-cleanup: false # generate-run-shell: false # Install the S1-Reader OPERA-ADT project. From 4080ac1e28cc533b1231202ebfb43f90fa730333 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 18:59:24 -0700 Subject: [PATCH 28/32] refine the ci test --- .github/workflows/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 94f48d21..3312332c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,8 +47,7 @@ jobs: environment-name: RTC init-shell: bash # let the action touch ~/.bash_profile log-level: debug # shows solver problems early - post-cleanup: false - # generate-run-shell: false + post-cleanup: environment # Install the S1-Reader OPERA-ADT project. - name: Install S1-Reader From 3369d2e91081bae1a7997d883d65c5caf8a5c7c3 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 19:03:03 -0700 Subject: [PATCH 29/32] refine the ci test --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3312332c..46e976a7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,7 +47,7 @@ jobs: environment-name: RTC init-shell: bash # let the action touch ~/.bash_profile log-level: debug # shows solver problems early - post-cleanup: environment + post-cleanup: none # Install the S1-Reader OPERA-ADT project. - name: Install S1-Reader From ef0e3d368c87323bbd4325017db5d1b8437baf7b Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 19:08:45 -0700 Subject: [PATCH 30/32] fix typo --- Docker/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Docker/environment.yml b/Docker/environment.yml index 2bcd2d90..374ab73e 100644 --- a/Docker/environment.yml +++ b/Docker/environment.yml @@ -1,7 +1,7 @@ name: rtc_s1_sas_final channels: - conda-forge - - nodefault + - nodefaults dependencies: - python>=3.9,<3.10 - gdal>=3.0 From b8e3aba2d9b50c121cb0cd71afd1d2befbe8b517 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 19:14:12 -0700 Subject: [PATCH 31/32] fix typo --- tests/test_rtc_s1_workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_rtc_s1_workflow.py b/tests/test_rtc_s1_workflow.py index 02095c69..01718b5f 100644 --- a/tests/test_rtc_s1_workflow.py +++ b/tests/test_rtc_s1_workflow.py @@ -149,7 +149,7 @@ def test_workflow(): os.makedirs(test_data_directory, exist_ok=True) dataset_name = 's1b_los_angeles' - dataset_url = ('https://zenodo.org/record/7753472/files/' + dataset_url = ('https://zenodo.org/records/7753472/files/' 's1b_los_angeles.tar.gz?download=1') tests_dir = os.path.dirname(__file__) From 8fe11e59ff93fc7da3f4c1fcb94675ae8c0e2329 Mon Sep 17 00:00:00 2001 From: Jungkyo Jung Date: Thu, 22 May 2025 19:52:27 -0700 Subject: [PATCH 32/32] improving the downloading lines --- tests/test_rtc_s1_workflow.py | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/tests/test_rtc_s1_workflow.py b/tests/test_rtc_s1_workflow.py index 01718b5f..9944e4cd 100644 --- a/tests/test_rtc_s1_workflow.py +++ b/tests/test_rtc_s1_workflow.py @@ -4,6 +4,8 @@ import requests import tarfile from osgeo import gdal +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry from rtc.runconfig import RunConfig, load_parameters from rtc.core import create_logger @@ -156,21 +158,28 @@ def test_workflow(): dataset_dir = os.path.join(test_data_directory, dataset_name) if FLAG_ALWAYS_DOWNLOAD or not os.path.isdir(dataset_dir): - - print(f'Test dataset {dataset_name} not found. Downloading' f' file {dataset_url}.') - response = requests.get(dataset_url) - response.raise_for_status() - - compressed_filename = os.path.join(test_data_directory, - os.path.basename(dataset_url)) - - open(compressed_filename, 'wb').write(response.content) - - print(f'Extracting downloaded file {compressed_filename}') - with tarfile.open(compressed_filename) as compressed_file: - compressed_file.extractall(test_data_directory) + # To avoid the issue in downloading, try again. + session = requests.Session() + retries = Retry( + total=5, # up to 5 attempts + backoff_factor=2, # 2 s, 4 s, 8 s, … + status_forcelist=[502, 503, 504], + ) + session.mount("https://", HTTPAdapter(max_retries=retries)) + + compressed_path = os.path.join(test_data_directory, + f"{dataset_name}.tar.gz") + with session.get(dataset_url, stream=True, timeout=120) as r: + r.raise_for_status() + with open(compressed_path, "wb") as f: + for chunk in r.iter_content(chunk_size=1024 * 1024): # 1 MB + f.write(chunk) + + print(f"Extracting {compressed_path}") + with tarfile.open(compressed_path, "r:gz") as tf: + tf.extractall(test_data_directory) # create logger log_file = os.path.join('data', 'log.txt')