From 4b2762d1578068938584c8e05b75cce050369f71 Mon Sep 17 00:00:00 2001 From: MattLuck-NOAA Date: Fri, 5 Jan 2024 10:31:16 -0700 Subject: [PATCH 1/3] v4.4.8.3 Fix erroneous branch inundation in levee-protected areas (#1059) --- docs/CHANGELOG.md | 14 ++++ src/delineate_hydros_and_produce_HAND.sh | 1 + src/mask_dem.py | 89 +++++++++++++++++------- 3 files changed, 80 insertions(+), 24 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 45689b40b..7fb3bd956 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,20 @@ All notable changes to this project will be documented in this file. We follow the [Semantic Versioning 2.0.0](http://semver.org/) format. +## v4.4.8.3 - 2024-01-05 - [PR#1059](https://github.com/NOAA-OWP/inundation-mapping/pull/1059) + +Fixes erroneous branch inundation in levee-protected areas. + +Levees disrupt the natural hydrology and can create large catchments that contain low-lying areas in levee-protected areas that are subject to being inundated in the REM (HAND) grid. However, these low-lying areas are hydrologically disconnected from the stream associated with the catchment and can be erroneously inundated. Branch inundation in levee-protected areas is now confined to the catchment for the levelpath. + +### Changes + +- `src/` + - `delineate_hydros_and_produce_HAND.sh`: Adds input argument for catchments. + - `mask_dem.py`: Adds DEM masking for areas of levee-protected areas that are not in the levelpath catchment. + +

+ ## v4.4.8.2 - 2023-12-12 - [PR#1052](https://github.com/NOAA-OWP/inundation-mapping/pull/1052) The alpha test for v4.4.8.1 came back with a large degradation in skill and we noticed that the global manning's roughness file was changed in v4.4.7.1 - likely in error. diff --git a/src/delineate_hydros_and_produce_HAND.sh b/src/delineate_hydros_and_produce_HAND.sh index 2b04da494..c8c469858 100755 --- a/src/delineate_hydros_and_produce_HAND.sh +++ b/src/delineate_hydros_and_produce_HAND.sh @@ -23,6 +23,7 @@ if [ "$mask_leveed_area_toggle" = "True" ] && [ -f $tempHucDataDir/LeveeProtecte python3 $srcDir/mask_dem.py \ -dem $tempCurrentBranchDataDir/dem_meters_$current_branch_id.tif \ -nld $tempHucDataDir/LeveeProtectedAreas_subset.gpkg \ + -catchments $z_arg \ -out $tempCurrentBranchDataDir/dem_meters_$current_branch_id.tif \ -b $branch_id_attribute \ -i $current_branch_id \ diff --git a/src/mask_dem.py b/src/mask_dem.py index a303eb0c2..bf8897ec7 100755 --- a/src/mask_dem.py +++ b/src/mask_dem.py @@ -5,6 +5,7 @@ import fiona import geopandas as gpd +import numpy as np import pandas as pd import rasterio as rio from rasterio.mask import mask @@ -14,6 +15,7 @@ def mask_dem( dem_filename: str, nld_filename: str, levee_id_attribute: str, + catchments_filename: str, out_dem_filename: str, branch_id_attribute: str, branch_id: int, @@ -22,7 +24,8 @@ def mask_dem( ): """ Masks levee-protected areas from DEM in branch 0 or if the level path is associated with a levee - (determined in src/associate_levelpaths_with_levees.py). + (determined in src/associate_levelpaths_with_levees.py). Also masks parts of levee-protected areas + through which level paths flow that are not in the level path catchment. Parameters ---------- @@ -41,35 +44,39 @@ def mask_dem( branch_zero_id: int Branch 0 ID number levee_levelpaths: str - Path to levee-levelpath association file. + Path to levee-levelpath association file (generated by src/associate_levelpaths_with_levees.py) """ - # Rasterize if branch zero - if branch_id == branch_zero_id: - with rio.open(dem_filename) as dem, fiona.open(nld_filename) as leveed: - dem_profile = dem.profile.copy() + assert os.path.exists(dem_filename), f"DEM file {dem_filename} does not exist" + assert os.path.exists(nld_filename), f"NLD file {nld_filename} does not exist" + assert os.path.exists(catchments_filename), f"Catchments file {catchments_filename} does not exist" - geoms = [feature["geometry"] for feature in leveed] + dem_masked = None - # Mask out levee-protected areas from DEM - out_dem_masked, _ = mask(dem, geoms, invert=True) + with rio.open(dem_filename) as dem: + dem_profile = dem.profile.copy() + nodata = dem.nodata - with rio.open(out_dem_filename, "w", **dem_profile, BIGTIFF='YES') as dest: - dest.write(out_dem_masked[0, :, :], indexes=1) + if branch_id == branch_zero_id: + # Mask if branch zero + with fiona.open(nld_filename) as leveed: + geoms = [feature["geometry"] for feature in leveed] - elif os.path.exists(levee_levelpaths): - levee_levelpaths = pd.read_csv(levee_levelpaths) + if len(geoms) > 0: + dem_masked, _ = mask(dem, geoms, invert=True) - # Select levees associated with branch - levee_levelpaths = levee_levelpaths[levee_levelpaths[branch_id_attribute] == branch_id] + elif os.path.exists(levee_levelpaths): + # Mask levee-protected areas protected against level path + levee_levelpaths = pd.read_csv(levee_levelpaths) - # Get levee IDs - levelpath_levees = list(levee_levelpaths[levee_id_attribute]) + # Select levees associated with branch + levee_levelpaths = levee_levelpaths[levee_levelpaths[branch_id_attribute] == branch_id] - if len(levelpath_levees) > 0: - with rio.open(dem_filename) as dem: + # Get levee IDs + levelpath_levees = list(levee_levelpaths[levee_id_attribute]) + + if len(levelpath_levees) > 0: leveed = gpd.read_file(nld_filename) - dem_profile = dem.profile.copy() # Get geometries of levee protected areas associated with levelpath geoms = [ @@ -78,11 +85,40 @@ def mask_dem( if feature[levee_id_attribute] in levelpath_levees ] - # Mask out levee-protected areas from DEM - out_dem_masked, _ = mask(dem, geoms, invert=True) + if len(geoms) > 0: + dem_masked, _ = mask(dem, geoms, invert=True) + + # Mask levee-protected areas not protected against level path + catchments = gpd.read_file(catchments_filename) + leveed = gpd.read_file(nld_filename) + + leveed_area_catchments = gpd.overlay(catchments, leveed, how="union") + + # Select levee catchments not associated with level path + levee_catchments_to_mask = leveed_area_catchments.loc[ + ~leveed_area_catchments[levee_id_attribute].isna() & leveed_area_catchments['ID'].isna(), : + ] + + geoms = [feature["geometry"] for i, feature in levee_catchments_to_mask.iterrows()] + + levee_catchments_masked = None + if len(geoms) > 0: + levee_catchments_masked, _ = mask(dem, geoms, invert=True) + out_masked = None + if dem_masked is None: + if levee_catchments_masked is not None: + out_masked = levee_catchments_masked + + else: + if levee_catchments_masked is None: + out_masked = dem_masked + else: + out_masked = np.where(levee_catchments_masked == nodata, nodata, dem_masked) + + if out_masked is not None: with rio.open(out_dem_filename, "w", **dem_profile, BIGTIFF='YES') as dest: - dest.write(out_dem_masked[0, :, :], indexes=1) + dest.write(out_masked[0, :, :], indexes=1) if __name__ == '__main__': @@ -91,8 +127,13 @@ def mask_dem( parser.add_argument( '-nld', '--nld-filename', help='NLD levee-protected areas filename', required=True, type=str ) + parser.add_argument( + '-catchments', '--catchments-filename', help='NWM catchments filename', required=True, type=str + ) parser.add_argument('-l', '--levee-id-attribute', help='Levee ID attribute name', required=True, type=str) - parser.add_argument('-out', '--out-dem-filename', help='out DEM filename', required=True, type=str) + parser.add_argument( + '-out', '--out-dem-filename', help='DEM filename to be written', required=True, type=str + ) parser.add_argument( '-b', '--branch-id-attribute', help='Branch ID attribute name', required=True, type=str ) From 5478554f1ab4988d2c1330c5ebc6c6fc9d6d5b46 Mon Sep 17 00:00:00 2001 From: MattLuck-NOAA Date: Fri, 12 Jan 2024 10:44:35 -0700 Subject: [PATCH 2/3] v4.4.8.4 Tool to evaluate crosswalk accuracy (#1061) --- Dockerfile | 1 + docs/CHANGELOG.md | 22 ++ fim_pipeline.sh | 1 + fim_post_processing.sh | 2 +- fim_pre_processing.sh | 5 + src/add_crosswalk.py | 6 +- src/delineate_hydros_and_produce_HAND.sh | 17 +- tools/evaluate_crosswalk.py | 291 +++++++++++++++++++++++ 8 files changed, 342 insertions(+), 3 deletions(-) create mode 100644 tools/evaluate_crosswalk.py diff --git a/Dockerfile b/Dockerfile index 512e726dd..dd579c65e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -54,6 +54,7 @@ ARG depDir=/dependencies ENV inputsDir=$dataDir/inputs ENV outputsDir=/outputs ENV srcDir=$projectDir/src +ENV toolsDir=$projectDir/tools ENV workDir=/fim_temp ENV taudemDir=$depDir/taudem/bin ENV taudemDir2=$depDir/taudem_accelerated_flowDirections/taudem/build/bin diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7fb3bd956..e514eb23c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,28 @@ All notable changes to this project will be documented in this file. We follow the [Semantic Versioning 2.0.0](http://semver.org/) format. +## v4.4.8.4 - 2024-01-12 - [PR#1061](https://github.com/NOAA-OWP/inundation-mapping/pull/1061) + +Adds a post-processing tool to compare crosswalked (conflated) `feature_id`s between NWM stream network to DEM-derived reaches. The tool is run if the `-x` flag is added to `fim_pipeline.sh`. Results are computed for branch 0 and saved in a summary file in the HUC output folder. + +### Additions + +- `tools/evaluate_crosswalk.py`: evaluates crosswalk accuracy using two methods: + - intersections: the number of intersections between streamlines + - network (or tree): compares the feature_ids of the immediate upstream segments + +### Changes + +- `Dockerfile`: added `toolsDir` environment variable +- `fim_pipeline.sh`: added `-x` flag to run crosswalk evaluation tool +- `fim_post_processing.sh`: changed hardcoded `/foss_fim/tools` to `toolsDir` environment variable +- `fim_pre_processing.sh`: added `evaluateCrosswalk` environment variable +- `src/` + - `add_crosswalk.py`: fix bug + - `delineate_hydros_and_produce_HAND.sh`: added a call to `verify_crosswalk.py` if evaluateCrosswalk is True. + +

+ ## v4.4.8.3 - 2024-01-05 - [PR#1059](https://github.com/NOAA-OWP/inundation-mapping/pull/1059) Fixes erroneous branch inundation in levee-protected areas. diff --git a/fim_pipeline.sh b/fim_pipeline.sh index 8523d21ef..4e1e76159 100755 --- a/fim_pipeline.sh +++ b/fim_pipeline.sh @@ -48,6 +48,7 @@ usage() will be skipped. -isaws : If this param is included, AWS objects will be used where possible - Note: This feature is not yet implemented. + -x : If this param is included, the crosswalk will be evaluated. Running 'fim_pipeline.sh' is a quicker process than running all three scripts independently; however, diff --git a/fim_post_processing.sh b/fim_post_processing.sh index f8266c94d..4ebb7b5fa 100755 --- a/fim_post_processing.sh +++ b/fim_post_processing.sh @@ -210,7 +210,7 @@ echo echo -e $startDiv"Combining crosswalk tables" # aggregate outputs Tstart -python3 /foss_fim/tools/combine_crosswalk_tables.py \ +python3 $toolsDir/combine_crosswalk_tables.py \ -d $outputDestDir \ -o $outputDestDir/crosswalk_table.csv Tcount diff --git a/fim_pre_processing.sh b/fim_pre_processing.sh index 61eb3ef1a..cff84fa23 100755 --- a/fim_pre_processing.sh +++ b/fim_pre_processing.sh @@ -101,6 +101,9 @@ in -isaws) isAWS=1 ;; + -x) + evaluateCrosswalk=1 + ;; *) ;; esac shift @@ -129,6 +132,7 @@ if [ "$jobBranchLimit" = "" ]; then jobBranchLimit=1; fi if [ -z "$overwrite" ]; then overwrite=0; fi if [ -z "$skipcal" ]; then skipcal=0; fi if [ -z "$isAWS" ]; then isAWS=0; fi +if [ -z "$evaluateCrosswalk" ]; then evaluateCrosswalk=0; fi # validate and set defaults for the deny lists if [ "$deny_unit_list" = "" ] @@ -234,6 +238,7 @@ echo "export deny_branch_zero_list=$deny_branch_zero_list" >> $args_file echo "export has_deny_branch_zero_override=$has_deny_branch_zero_override" >> $args_file echo "export isAWS=$isAWS" >> $args_file echo "export skipcal=$skipcal" >> $args_file +echo "export evaluateCrosswalk=$evaluateCrosswalk" >> $args_file echo "--- Pre-processing is complete" diff --git a/src/add_crosswalk.py b/src/add_crosswalk.py index fd7c8c450..b10453f61 100755 --- a/src/add_crosswalk.py +++ b/src/add_crosswalk.py @@ -258,7 +258,11 @@ def add_crosswalk( else: update_id = output_flows.loc[output_flows.HydroID == short_id]['HydroID'].item() - str_order = output_flows.loc[output_flows.HydroID == short_id]['order_'].item() + output_order = output_flows.loc[output_flows.HydroID == short_id]['order_'] + if len(output_order) == 1: + str_order = output_order.item() + else: + str_order = output_order.max() sml_segs = pd.concat( [ sml_segs, diff --git a/src/delineate_hydros_and_produce_HAND.sh b/src/delineate_hydros_and_produce_HAND.sh index c8c469858..b97d1912d 100755 --- a/src/delineate_hydros_and_produce_HAND.sh +++ b/src/delineate_hydros_and_produce_HAND.sh @@ -17,7 +17,7 @@ T_total_start ## MASK LEVEE-PROTECTED AREAS FROM DEM ## if [ "$mask_leveed_area_toggle" = "True" ] && [ -f $tempHucDataDir/LeveeProtectedAreas_subset.gpkg ]; then - echo -e $startDiv"Mask levee-protected areas from DEM (*Overwrite dem_meters.tif output) $hucNumber $branch_zero_id" + echo -e $startDiv"Mask levee-protected areas from DEM (*Overwrite dem_meters.tif output) $hucNumber $current_branch_id" date -u Tstart python3 $srcDir/mask_dem.py \ @@ -303,3 +303,18 @@ python3 $srcDir/add_crosswalk.py \ -e $min_catchment_area \ -g $min_stream_length Tcount + +## EVALUATE CROSSWALK ## +if [ "$current_branch_id" = "$branch_zero_id" ] && [ "$evaluateCrosswalk" = "1" ] ; then + echo -e $startDiv"Evaluate crosswalk $hucNumber $current_branch_id" + date -u + Tstart + python3 $toolsDir/evaluate_crosswalk.py \ + -a $tempCurrentBranchDataDir/demDerived_reaches_split_filtered_addedAttributes_crosswalked_$current_branch_id.gpkg \ + -b $b_arg \ + -c $tempHucDataDir/crosswalk_evaluation_$current_branch_id.csv \ + -d $tempHucDataDir/nwm_headwater_points_subset.gpkg \ + -u $hucNumber \ + -z $current_branch_id + Tcount +fi diff --git a/tools/evaluate_crosswalk.py b/tools/evaluate_crosswalk.py new file mode 100644 index 000000000..0051c3600 --- /dev/null +++ b/tools/evaluate_crosswalk.py @@ -0,0 +1,291 @@ +#!/usr/bin/env python3 + +import argparse + +import geopandas as gpd +import numpy as np +import pandas as pd + + +def evaluate_crosswalk( + input_flows_fileName: str, + input_nwmflows_fileName: str, + input_nwm_headwaters_fileName: str, + output_table_fileName: str, + huc: str, + branch: str, +): + """ + Tool to check the accuracy of crosswalked attributes using two methods: counting the number of intersections between two stream representations and network, which checks the upstream and downstream connectivity of each stream segment. + + Parameters + ---------- + input_flows_fileName : str + Path to DEM derived streams + input_nwmflows_fileName : str + Path to subset NWM burnlines + input_nwm_headwaters_fileName : str + Path to subset NWM headwaters + output_table_fileName : str + Path to output table filename + huc : str + HUC ID + branch : str + Branch ID + + Returns + ------- + results : pandas.DataFrame + + Usage + ----- + python evaluate_crosswalk.py -a -b -d -c -u -z + """ + + intersections_results = _evaluate_crosswalk_intersections(input_flows_fileName, input_nwmflows_fileName) + + intersections_correct = intersections_results['crosswalk'].sum() + intersections_total = len(intersections_results) + intersections_summary = intersections_correct / intersections_total + + network_results = _evaluate_crosswalk_network( + input_flows_fileName, input_nwmflows_fileName, input_nwm_headwaters_fileName + ) + + network_results = network_results[network_results['status'] >= 0] + network_correct = len(network_results[network_results['status'] == 0]) + network_total = len(network_results) + network_summary = network_correct / network_total + + results = pd.DataFrame( + data={ + 'huc': [huc, huc], + 'branch': [branch, branch], + 'method': ['intersections', 'network'], + 'correct': [intersections_correct, network_correct], + 'total': [intersections_total, network_total], + 'proportion': [intersections_summary, network_summary], + } + ) + + results.to_csv(output_table_fileName, index=False) + + return results + + +def _evaluate_crosswalk_intersections(input_flows_fileName: str, input_nwmflows_fileName: str): + """ + Computes the number of intersections between the NWM and DEM-derived flowlines + + Parameters + ---------- + input_flows_fileName : str + Path to DEM derived streams + input_nwmflows_fileName : str + Path to subset NWM burnlines + + Returns + ------- + pandas.DataFrame + """ + + # Crosswalk check + # fh.vprint('Checking for crosswalks between NWM and DEM-derived flowlines', verbose) + + flows = gpd.read_file(input_flows_fileName) + nwm_streams = gpd.read_file(input_nwmflows_fileName) + + # Compute the number of intersections between the NWM and DEM-derived flowlines + streams = nwm_streams + xwalks = [] + intersects = flows.sjoin(streams) + + for idx in intersects.index: + flows_idx = intersects.loc[intersects.index == idx, 'HydroID'].unique() + + if isinstance(intersects.loc[idx, 'ID'], np.int64): + streams_idxs = [intersects.loc[idx, 'ID']] + else: + streams_idxs = intersects.loc[idx, 'ID'].unique() + + for flows_id in flows_idx: + for streams_idx in streams_idxs: + intersect = gpd.overlay( + flows[flows['HydroID'] == flows_id], + nwm_streams[nwm_streams['ID'] == streams_idx], + keep_geom_type=False, + ) + + if len(intersect) == 0: + intersect_points = 0 + feature_id = flows.loc[flows['HydroID'] == flows_id, 'feature_id'] + elif intersect.geometry[0].geom_type == 'Point': + intersect_points = 1 + feature_id = flows.loc[flows['HydroID'] == flows_id, 'feature_id'] + else: + intersect_points = len(intersect.geometry[0].geoms) + feature_id = int(flows.loc[flows['HydroID'] == flows_id, 'feature_id'].iloc[0]) + + xwalks.append([flows_id, feature_id, streams_idx, intersect_points]) + + # Get the maximum number of intersections for each flowline + xwalks = pd.DataFrame(xwalks, columns=['HydroID', 'feature_id', 'ID', 'intersect_points']) + xwalks['feature_id'] = xwalks['feature_id'].astype(int) + + xwalks['match'] = xwalks['feature_id'] == xwalks['ID'] + + xwalks_groupby = xwalks[['HydroID', 'intersect_points']].groupby('HydroID').max() + + xwalks = xwalks.merge(xwalks_groupby, on='HydroID', how='left') + xwalks['max'] = xwalks['intersect_points_x'] == xwalks['intersect_points_y'] + + xwalks['crosswalk'] = xwalks['match'] == xwalks['max'] + + return xwalks + + +def _evaluate_crosswalk_network( + input_flows_fileName: str, input_nwmflows_fileName: str, input_nwm_headwaters_fileName: str +): + """ + Compares the upstream and downstream connectivity of each stream segment + + Parameters + ---------- + input_flows_fileName : str + Path to DEM derived streams + input_nwmflows_fileName : str + Path to subset NWM burnlines + input_nwm_headwaters_fileName : str + Path to subset NWM headwaters + output_table_fileName : str + Path to output table filename + + Returns + ------- + pandas.DataFrame + """ + + # Check for crosswalks between NWM and DEM-derived flowlines + # fh.vprint('Checking for crosswalks between NWM and DEM-derived flowlines', verbose) + + flows = gpd.read_file(input_flows_fileName) + flows['HydroID'] = flows['HydroID'].astype(int) + nwm_streams = gpd.read_file(input_nwmflows_fileName) + nwm_streams = nwm_streams.rename(columns={'ID': 'feature_id'}) + nwm_headwaters = gpd.read_file(input_nwm_headwaters_fileName) + + streams_outlets = nwm_streams.loc[~nwm_streams.to.isin(nwm_streams.feature_id), 'feature_id'] + flows_outlets = flows.loc[~flows['NextDownID'].isin(flows['HydroID']), 'HydroID'] + + nwm_streams_headwaters_list = ~nwm_streams['feature_id'].isin(nwm_streams['to']) + # flows_headwaters_list = ~flows['LINKNO'].isin(flows['DSLINKNO']) + flows_headwaters_list = ~flows['HydroID'].isin(flows['NextDownID']) + + nwm_streams_headwaters = nwm_streams[nwm_streams_headwaters_list] + flows_headwaters = flows[flows_headwaters_list] + + # Map headwater points to DEM-derived reaches + flows_headwaters = flows_headwaters.sjoin_nearest(nwm_headwaters) + flows_headwaters = flows_headwaters[['HydroID', 'ID']] + nwm_streams_headwaters = nwm_streams_headwaters.sjoin_nearest(nwm_headwaters) + nwm_streams_headwaters = nwm_streams_headwaters[['feature_id', 'ID']] + + def _hydroid_to_feature_id(df, hydroid, hydroid_attr, feature_id_attr): + return df.loc[df[hydroid_attr] == hydroid, feature_id_attr] + + def _get_upstream_data(data, data_headwaters, data_dict, hydroid, hydroid_attr, nextdownid_attr): + # Find upstream segments + data_dict[hydroid] = list(data.loc[data[nextdownid_attr] == hydroid, hydroid_attr].values) + + for hydroid in data_dict[hydroid]: + if hydroid in data_headwaters[hydroid_attr].values: + data_dict[hydroid] = data_headwaters.loc[ + data_headwaters[hydroid_attr] == hydroid, 'ID' + ].values[0] + else: + data_dict = _get_upstream_data( + data, data_headwaters, data_dict, hydroid, hydroid_attr, nextdownid_attr + ) + + return data_dict + + flows_dict = dict() + streams_dict = dict() + + # Compare hash tables + for hydroid in flows_outlets: + flows_dict = _get_upstream_data(flows, flows_headwaters, flows_dict, hydroid, 'HydroID', 'NextDownID') + + for feature_id in streams_outlets: + streams_dict = _get_upstream_data( + nwm_streams, nwm_streams_headwaters, streams_dict, feature_id, 'feature_id', 'to' + ) + + results = [] + for flow in flows_dict: + fid = _hydroid_to_feature_id(flows, flow, 'HydroID', 'feature_id').iloc[0] + upstream_hid = flows_dict[flow] + + upstream_fids = [] + nwm_fids = streams_dict[fid] + out_list = [flow, fid, upstream_fids, nwm_fids] + + if not isinstance(upstream_hid, np.int64): + if len(upstream_hid) > 0: + for i in upstream_hid: + # Find upstream feature_id(s) + temp_fid = int(_hydroid_to_feature_id(flows, i, 'HydroID', 'feature_id').iloc[0]) + + if isinstance(temp_fid, list): + upstream_fids.append(temp_fid[0]) + else: + upstream_fids.append(temp_fid) + + out_list = [flow, fid, upstream_fids, nwm_fids] + if isinstance(nwm_fids, np.int64): + nwm_fids = [nwm_fids] + + if fid in upstream_fids: + # Skip duplicate feature_ids + out_list.append(-1) + elif set(upstream_fids) == set(nwm_fids): + # 0: Crosswalk is correct + out_list.append(0) + else: + # 1: Crosswalk is incorrect + out_list.append(1) + else: + # 2: Crosswalk is empty + out_list.append(2) + else: + # 3: if upstream is a headwater point + out_list.append(3) + + results.append(out_list) + + results = pd.DataFrame( + data=results, columns=['HydroID', 'feature_id', 'upstream_fids', 'upstream_nwm_fids', 'status'] + ) + + return results + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Tool to check crosswalk accuracy') + parser.add_argument('-a', '--input-flows-fileName', help='DEM derived streams', type=str, required=True) + parser.add_argument( + '-b', '--input-nwmflows-fileName', help='Subset NWM burnlines', type=str, required=True + ) + parser.add_argument( + '-d', '--input-nwm-headwaters-fileName', help='Subset NWM headwaters', type=str, required=True + ) + parser.add_argument( + '-c', '--output-table-fileName', help='Output table filename', type=str, required=True + ) + parser.add_argument('-u', '--huc', help='HUC ID', type=str, required=True) + parser.add_argument('-z', '--branch', help='Branch ID', type=str, required=True) + + args = vars(parser.parse_args()) + + evaluate_crosswalk(**args) From e7a6b7956322892bbc6a6953b233bde610c6bf5f Mon Sep 17 00:00:00 2001 From: MattLuck-NOAA Date: Fri, 12 Jan 2024 10:55:12 -0700 Subject: [PATCH 3/3] v4.4.9.0 Upgrade base Docker image to GDAL v3.8.0 (#1058) --- Dockerfile | 17 +- Pipfile | 3 +- Pipfile.lock | 1111 ++++++++++------------ docs/CHANGELOG.md | 18 + src/accumulate_headwaters.py | 102 ++ src/delineate_hydros_and_produce_HAND.sh | 15 +- 6 files changed, 660 insertions(+), 606 deletions(-) create mode 100644 src/accumulate_headwaters.py diff --git a/Dockerfile b/Dockerfile index dd579c65e..70f7d336f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ## Temporary image to build the libraries and only save the needed artifacts -FROM ghcr.io/osgeo/gdal:ubuntu-full-3.4.3 AS builder +FROM ghcr.io/osgeo/gdal:ubuntu-full-3.8.0 AS builder WORKDIR /opt/builder ARG dataDir=/data ARG projectDir=/foss_fim @@ -15,7 +15,7 @@ RUN git clone https://github.com/dtarb/taudem.git RUN git clone https://github.com/fernandoa123/cybergis-toolkit.git taudem_accelerated_flowDirections RUN apt-get update --fix-missing && apt-get install -y cmake mpich \ - libgtest-dev libboost-test-dev libnetcdf-dev openjdk-17-jdk && rm -rf /var/lib/apt/lists/* + libgtest-dev libboost-test-dev libnetcdf-dev && rm -rf /var/lib/apt/lists/* ## Compile Main taudem repo ## RUN mkdir -p taudem/bin @@ -36,18 +36,13 @@ RUN mkdir -p $taudemDir RUN mkdir -p $taudemDir2 ## Move needed binaries to the next stage of the image -RUN cd taudem/bin && mv -t $taudemDir flowdircond aread8 threshold streamnet gagewatershed catchhydrogeo dinfdistdown +RUN cd taudem/bin && mv -t $taudemDir flowdircond streamnet gagewatershed catchhydrogeo dinfdistdown RUN cd taudem_accelerated_flowDirections/taudem/build/bin && mv -t $taudemDir2 d8flowdir dinfflowdir - - ############################################################################################### - - - # Base Image that has GDAL, PROJ, etc -FROM ghcr.io/osgeo/gdal:ubuntu-full-3.4.3 +FROM ghcr.io/osgeo/gdal:ubuntu-full-3.8.0 ARG dataDir=/data ENV projectDir=/foss_fim ARG depDir=/dependencies @@ -72,7 +67,7 @@ RUN mkdir -p $depDir COPY --from=builder $depDir $depDir RUN apt update --fix-missing -RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt install -y p7zip-full python3-pip time mpich=3.3.2-2build1 parallel=20161222-1.1 libgeos-dev=3.8.0-1build1 expect=5.45.4-2build1 tmux rsync tzdata openjdk-17-jdk +RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt install -y p7zip-full python3-pip time mpich parallel libgeos-dev expect tmux rsync tzdata RUN apt auto-remove @@ -107,7 +102,7 @@ RUN pip3 install pipenv==2022.4.8 && PIP_NO_CACHE_DIR=off pipenv install --syste # We download and unzip it to the same file folder that pip deployed the whitebox library. # Whitebox also attempts to always download a folder called testdata regardless of use. # We added an empty folder to fake out whitebox_tools.py so it doesn't try to download the folder -RUN wbox_path=/usr/local/lib/python3.8/dist-packages/whitebox/ && \ +RUN wbox_path=/usr/local/lib/python3.10/dist-packages/whitebox/ && \ wget -P $wbox_path https://www.whiteboxgeo.com/WBT_Linux/WhiteboxTools_linux_musl.zip && \ unzip -o $wbox_path/WhiteboxTools_linux_musl.zip -d $wbox_path && \ cp $wbox_path/WBT/whitebox_tools $wbox_path && \ diff --git a/Pipfile b/Pipfile index beace0056..043b69288 100644 --- a/Pipfile +++ b/Pipfile @@ -43,6 +43,7 @@ flake8-pyproject = "==1.2.3" pre-commit = "==3.3.3" isort = "==5.12.0" urllib3 = "==1.26.18" +pyflwdir = "*" [requires] -python_version = "3.8" +python_version = "3.10" diff --git a/Pipfile.lock b/Pipfile.lock index a0e867a67..b38946cc9 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "05bec99d8be9c133d86cc5a13bbb8dd751b89eaa4368df49170d3527a84bb127" + "sha256": "b0e64fe05b2fb6310dcb5e41cb0d131e77067c5bb3c54db67c9f46a14e705d42" }, "pipfile-spec": 6, "requires": { - "python_version": "3.8" + "python_version": "3.10" }, "sources": [ { @@ -29,7 +29,7 @@ "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad", "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6" ], - "markers": "python_version >= '3.7' and python_version < '4'", + "markers": "python_version >= '3.7' and python_version < '4.0'", "version": "==22.1.0" }, "aiosqlite": { @@ -42,11 +42,11 @@ }, "anyio": { "hashes": [ - "sha256:56a415fbc462291813a94528a779597226619c8e78af7de0507333f700011e5f", - "sha256:5a0bec7085176715be77df87fc66d6c9d70626bd752fcc85f57cdbee5b3760da" + "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee", + "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f" ], "markers": "python_version >= '3.8'", - "version": "==4.1.0" + "version": "==4.2.0" }, "appdirs": { "hashes": [ @@ -115,25 +115,18 @@ }, "babel": { "hashes": [ - "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900", - "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed" + "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363", + "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287" ], "markers": "python_version >= '3.7'", - "version": "==2.13.1" - }, - "backcall": { - "hashes": [ - "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", - "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" - ], - "version": "==0.2.0" + "version": "==2.14.0" }, "beautifulsoup4": { "hashes": [ "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da", "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a" ], - "markers": "python_full_version >= '3.6.0'", + "markers": "python_version >= '3.6'", "version": "==4.12.2" }, "black": { @@ -196,7 +189,7 @@ "sha256:f206e6a01a8167b441bf886ff022eb20e0f085b09300f49f3018f566c14d918a", "sha256:f465b8ab54ecde6b8654672a50a4c3699aafd8e2de0dfcd84ed53f8a34c1734a" ], - "markers": "python_version >= '3.8' and python_version < '4'", + "markers": "python_version >= '3.8' and python_version < '4.0'", "version": "==2.0.0" }, "boto3": { @@ -529,7 +522,7 @@ "sha256:a4bc13d623356b373c2c27c53dbd9c68cae5d526270bfa71f6c6fa69669c6b27", "sha256:c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4.0'", "version": "==0.7.2" }, "cloudpickle": { @@ -566,61 +559,53 @@ }, "contourpy": { "hashes": [ - "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6", - "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33", - "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8", - "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d", - "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d", - "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c", - "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf", - "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e", - "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e", - "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163", - "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532", - "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2", - "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8", - "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1", - "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b", - "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9", - "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916", - "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23", - "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb", - "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a", - "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e", - "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442", - "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684", - "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34", - "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d", - "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d", - "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9", - "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45", - "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718", - "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab", - "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3", - "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae", - "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb", - "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5", - "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba", - "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0", - "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217", - "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887", - "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887", - "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62", - "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431", - "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b", - "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce", - "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b", - "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f", - "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85", - "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e", - "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7", - "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251", - "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970", - "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0", - "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7" - ], - "markers": "python_version >= '3.8'", - "version": "==1.1.1" + "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8", + "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956", + "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5", + "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063", + "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286", + "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a", + "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686", + "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9", + "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f", + "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4", + "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e", + "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0", + "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e", + "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488", + "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399", + "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431", + "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779", + "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9", + "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab", + "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0", + "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd", + "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e", + "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc", + "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6", + "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316", + "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808", + "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0", + "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f", + "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843", + "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9", + "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95", + "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9", + "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de", + "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4", + "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4", + "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa", + "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8", + "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776", + "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41", + "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108", + "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e", + "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8", + "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727", + "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a" + ], + "markers": "python_version >= '3.9'", + "version": "==1.2.0" }, "cycler": { "hashes": [ @@ -632,67 +617,60 @@ }, "cython": { "hashes": [ - "sha256:035cb6930a8534f865a3f4616543f78bd27e4de9c3e117b2826e395085ffc4c0", - "sha256:039877e57dc10abf0d30d2de2c7476f0881d8ecef1f29bdeed1a6a06a8d89141", - "sha256:048fe89c2c753c24e1a7a05496907173dab17e238c8dc3c7cad90b3679b0d846", - "sha256:05c4efd36879ff8020af00407e4c14246b894558ea41dc6486f60dd71601fc67", - "sha256:063220a6dc0909b576ef068c7e2acf5c608d64423a6d231aacb72d06352cd95b", - "sha256:0759868b4a4d103578375e031e89abd578c26774d957ee4f591764ef8003b363", - "sha256:077d9a61e6042174dabf68b8e92c0a80f5aff529439ed314aa6e6a233af80b95", - "sha256:0a9206b0720f0cad3e70c018722f6d10e81b32e65477e14ffedd3fbfadfaddca", - "sha256:0d9fcfc09d67218fce114fe9fd97bba4f9d56add0f775c588d8c626ed47f1aef", - "sha256:0f31d02b831d0fa9bf099b1b714b5a8252eabd8db34b7d33c48e7e808a2dabf9", - "sha256:115e76fbe9288119526b66963f614042222d1587f1ba5ddb90088215a3d2a25a", - "sha256:13491f1bfcf020fd02751c4a55294aa8957e21b7ecd2542b0521a7aa50c58bb2", - "sha256:2ad4eb2608661d63fb57c674dafb9955f5141d748d4579c7722c1a3c6b86a0c2", - "sha256:2c4d4d92182002b2878adb3329de1ccb7f3f7571d3586f92602e790bfeab45d0", - "sha256:2d6bb318ddce8b978c81cf78caf8b3836db84f6235d721952685e87871f506e4", - "sha256:34059c3ea6e342ba388cd9774a61761bb4200ca18bd475de65c9cc70ef4e0204", - "sha256:3679a6693456f5f7ccca9ab2a91408e99ee257e145024fe380da7c78a07e98b6", - "sha256:39318348db488a2f24e7c84e08bdc82f2624853c0fea8b475ea0b70b27176492", - "sha256:3cffbba1888f795de2103e6fb1482c8ea8d457e638fa813e090fe747f9e549bb", - "sha256:452679284c15a7d5a88bff675e1dd660349360f0665aea50be2d98b7650925f8", - "sha256:45277bb54c35b11bcdd6cf0f56eb950eb280b67146db0cb57853fb6334c6d11d", - "sha256:45aaceb082ad89365f2f783a40db42359591ad55914fb298841196edf88afdc5", - "sha256:485f8a3087392e2287e2869adc0385b439f69b9cfbd262fdf39b00417690c988", - "sha256:4db9eea298e982aee7ba12b3432c66eb2e91bb2f5d026bbd57c35698ea0f557f", - "sha256:4faf17ea6e8fc3065a862d4b24be84048fd58ed7abe59aa2f9141446a7a72335", - "sha256:4fbc8f62b8d50f9a2eef99927a9dcb8d0a42e5a801ab14c2e4aeab622c88f54b", - "sha256:530a474a79fa6c2127bb7e3ba00857b1f26a563615863f17b7434331aa3fe404", - "sha256:5742ef31e1e2c9a4824ef6b05af0f4949047a6f73af1d4b238ce12935174aede", - "sha256:57b44f789794d74c1feddae054dd045b9f601bdffd7288e069b4ca7ed607ec61", - "sha256:6ac1cf1f2ed01656b33618352f7e42bf75d027425b83cc96cfe13ce4b6cba5de", - "sha256:75206369504fc442c10a86ecf57b91592dca744e4592af22a47e9a774d53dd10", - "sha256:77f4d001fb7a03a68b53be20571acd17452d1dda7907d9c325dff0cc704b1ef9", - "sha256:808f56d4cd0511723b787c341f3cc995fd72893e608102268298c188f4a4f2e7", - "sha256:93502f45948ae8d7f874ba4c113b50cb6fb4ee664caa82e1ddc398500ee0ffb3", - "sha256:9c016b3e859b41cf4ce1b8107f364ad5a83c086f75ea4d8d3990b24691f626a1", - "sha256:a1cab30c11880f38a27911b569ea38b0bd67fcf32f8a8a8519b613c70562dae2", - "sha256:a90f9c7b6635967eacafebe439d518b7dc720aaaf19cb9553f5aad03c13296f4", - "sha256:a95ed0e6f481462a3ff2be4c2e4ffffc5d00fc3884d4ccd1fe5b702d4938ec09", - "sha256:a993002fe28c840dc29805fde7341c775b7878b311b85f21560fdebf220c247b", - "sha256:abb2362783521bd9a22fe69b2141abab4db97237665a36a034b161ddee5b3e72", - "sha256:ada4852db0e33dbdd1425322db081d22b9725cb9f5eba42885467b4e2c4f2ac0", - "sha256:b37f4b0d983316242b4b9241ecbbe55220aa92af93ff04626441fe0ea90a54f9", - "sha256:b77f2b45535bcf3741592fa03183558bd42198b872c1584b896fa0ba5f2ac68d", - "sha256:b94f58e05e69e1a43da551c8f532e9fad057df1641f0f8ae8f103d4ede5a80fe", - "sha256:ba3f7b433c1721a43674c0889d5fad746bf608416c8f849343859e6d4d3a7113", - "sha256:c18e125537a96e76c8c34201e5a9aad8625e3d872dd26a63155573462e54e185", - "sha256:c95bd21d87b08c88fe5296381a5f39cd979a775bf1a1d7379a6ff87c703e510b", - "sha256:d0d9431101f600d5a557d55989658cbfd02b7c0dcd1e4675dac8ad7e0da8ea5b", - "sha256:d9d17a6ceb301c5dbd3820e62c1b10a4ad3a6eea3e07e7afaf736b5f490c2e32", - "sha256:db21997270e943aee9cb7694112d24a4702fbe1977fbe53b3cb4db3d02be73d9", - "sha256:dd9cab3b862bec2b110886aedb11765e9deda363c4c7ab5ea205f3d8f143c411", - "sha256:dee39967168d6326ea2df56ad215a4d5049aa52f44cd5aad45bfb63d5b4fb9e5", - "sha256:e3e011fa2ae9e953fe1ab8394329a21bdb54357c7fe509bcfb02b88bc15bffbb", - "sha256:ebc901131057c115a8868e14c1df6e56b9190df774b72664c03ebd858296bb81", - "sha256:f18c13d5ed6fde5efd3b1c039f6a34296d1a0409bb00fbf45bec6f9bcf63ddf5", - "sha256:f687539ead9fbc17f499e33ee20c1dc41598f70ad95edb4990c576447cec9d23", - "sha256:f6fcfef825edb44cf3c6ba2c091ad76a83da62ac9c79553e80e0c2a1f75eda2e", - "sha256:fcfd2255458a5779dbab813550695331d541b24f0ef831ace83f04f9516ddf26" + "sha256:01b94304aab87496e81d1f546e71abf57b430b39be4269df1cd7da9928d70b5b", + "sha256:0c636c9ab92c7838231a1ba769e519d953af8294612f3f772a54d3a5250ff23f", + "sha256:0d8a98c7d86ac4d05b251c39faf49423780381aab55fbf2e147f6e006a34a58a", + "sha256:13211b67b29f6ed8e87c137496c73d93aff0330d97940b4fbed72eae37a4a2a0", + "sha256:133057ac45b6fa7fe5d7baada9d3545d09339432f75c0545f556e8c6fecc2932", + "sha256:167b3f3894dcc697cefefac1d198304fae8eb4d5860a7b8bc2459d572e838470", + "sha256:225f8bba6428b8d711ca2d6c738d2e3a4667f6a2ae40f8a7a5256f69f6a3600e", + "sha256:22d2a684122dfb531853d57c8c85c1d5d44be709e12466dca99fa6aee7d8054f", + "sha256:23ceac5315fe899c229e874328742154e331fa41337bb03f6f5264636c351c9e", + "sha256:2c67105f2c6ccf5b3adbcfaecf3c5c9fa8940f9f97955c9ad7d2542151d97d93", + "sha256:30eb2d2938b9195e2c82951713429aff3ad1be9f104437d1536a04eb0cb3dc0e", + "sha256:34d51709e10ad6213b4bf094af7be7ff82bab43216b3c92a07d05b451deeca79", + "sha256:3a83e04fde663b84905f3a20213a4333d13a07b79434300704b70dc552761f8b", + "sha256:3f02c7240abab48d59f0d5fef7064f18f01a2a204616165fa6367a8abf5a8832", + "sha256:45319d2471f4dbf19893ca53785a421107266e18b8cccd2054fce1e3f72a85f1", + "sha256:4e8bf00ec1dd1d92e9ae74d2e6891f087a939e1dfb40c9c7fa5d8d6a26c94f5a", + "sha256:51e8164b1270625ff101e95c3c1c234421520c07a0a3a20ded9e9431d98afce7", + "sha256:539ad5a21141e6420035cf616bcba48d999bf878839e52692f97fc7e2f16265c", + "sha256:55f93d3822bc196b37a8bdfa4ec6a35232a399e97f2baa714bd5ed8ea9b0ce68", + "sha256:5e3a038332973b12e72236e8884dc99601a840334c2c46cfbbb5851cb94166eb", + "sha256:612d83fd1eb5aaa5401a755c1f1aafacd9dab404cd350b90d5f404c98b33e4b3", + "sha256:6a1859af761977530df2cd5c36e31d54e8d6708ad2c4656e7125c482364dc216", + "sha256:79868ec74e4907a8a6e63effe13547c6157f196a162920b1de066da5849ffb8e", + "sha256:79f20c61114c7948cf1214585066406cef4b54a9b935160980e0b6e70ada3a69", + "sha256:7c8d579d13cb81abe704c8b0908d122b81d6e2623265a19c4a6a7377f440debb", + "sha256:812b193c26553f1f375d4f1c50f805c227b24ed2d595bc9cdaf78c992ecc64a4", + "sha256:816f5285d596062c7ef22790de7d75354b58d4417a9fc64cba914aeeb900db0b", + "sha256:82f27a0134fc6bb46032ca5f728d8af984f3be94a3cb01cb70ff1224e551b9cf", + "sha256:848a28ea49166454c3bff927e5a47629eecf1aa755d6fb3290569cba0fc93766", + "sha256:861cf254bf5836d47c2aee86aa75dd93d3de00ccd1b077c3c7a2bb22cba358e7", + "sha256:8ad7c2303a338b2c0b6c6c68f101a6768725934538756096cf3388a5c07a7525", + "sha256:8ea936cf5931297ba07bce121388c4c6266c1b63a9f4d648ae16c92ff090204b", + "sha256:931aade65f77cf59f2a702ac1f549a4836ce221107c740502cbad18d6d8e9511", + "sha256:936ec37b261b226d7404eff23a9aad284098338150d42a53d6a9af12b18d3892", + "sha256:9fcd9a18ee3ac7f460e0841954feb495102ffbdbec0e6c78562f3495cda000dd", + "sha256:b1853bc34ced5ff6473e881fcf6de29da83262552c8f268a0df53b49c2b89e2c", + "sha256:b227643d8a40b68554dc7d37fcd03fc97b4fb0bd2614aeb5f2e07ab244642d36", + "sha256:b65abca78aa5ebc8675c8480b9a53006f6efea9910ad099cf32c9fb5617ef251", + "sha256:b9d0dae6dccd349b8ccf197c10ef2d05c711ca36a649c7eddbab1de2c90b63a1", + "sha256:cd6ae43ef2e596c9a88dbf2a8895be2e32cc2f5bc3c8ba2e7753b69068fc0b2d", + "sha256:e13abb14843397b76d0472c7d33cd260d5f262ab05cc27ed423317e645e29643", + "sha256:e1bdf8a107fdf9e174991aa87a0be7504f60de1ec6bfb1ccfb30e33acac818a0", + "sha256:e34b4b08d795ccca920fa26b099558f4f1e4e3f794e4ba8d3433c5bc2454d50a", + "sha256:e3c0e19bb41de6be9d8afc85795159ca16296be81a586cd9588be0400d44a855", + "sha256:ef5bb0268bfe5992da3ef9292463a5a895ed8700b134ed2c00008d5471b3ba6e", + "sha256:f2602a5c97a3d618b3b847514204ef3349fb414c59e1126c0c2c708d2c5680f8", + "sha256:f3845c4506e0d207c5e268fb02813928f3a1e135de954a379f165ef0d581da47", + "sha256:f674be92673e87dd8ee7cfe553d5960ec4effc5ab15063b9a5e265a51585a31a", + "sha256:f6d8ff62ad55dc0393686438eac4b457a916e4d1118a0b550746bb52b4c756cc", + "sha256:fb299acf3a578573c190c858d49e0cf9d75f4bc49c3f24c5a63804997ef09213", + "sha256:fed25959e4025870fdde5f895fcb126196d22affd4f4fad85a2823e0dddc85b0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==3.0.5" + "version": "==3.0.7" }, "dask": { "hashes": [ @@ -704,17 +682,11 @@ }, "datashader": { "hashes": [ - "sha256:9539529379287d69c10e9ab4e0b2900e1a16004d6ff06de0d84aa62c4833b1bb", - "sha256:9af96d76bc7011c60b4e76177e283efe20e060278ecd81ce7005a4d80a4dc69e" + "sha256:a2cb0f839067bf29cf6cc9c07a1dad35f0e4aed3768387056fcbac8748087bfa", + "sha256:ed4c111957578dcb3fcff972d954f77586dafd71a7345fd5cd069d9fb050d0d1" ], - "markers": "python_version >= '3.8'", - "version": "==0.15.2" - }, - "datashape": { - "hashes": [ - "sha256:2356ea690c3cf003c1468a243a9063144235de45b080b3652de4f3d44e57d783" - ], - "version": "==0.5.2" + "markers": "python_version >= '3.9'", + "version": "==0.16.0" }, "debugpy": { "hashes": [ @@ -758,10 +730,10 @@ }, "distlib": { "hashes": [ - "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", - "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" + "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784", + "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64" ], - "version": "==0.3.7" + "version": "==0.3.8" }, "entrypoints": { "hashes": [ @@ -852,51 +824,51 @@ }, "fonttools": { "hashes": [ - "sha256:05d7c4d2c95b9490e669f3cb83918799bf1c838619ac6d3bad9ea017cfc63f2e", - "sha256:0f412954275e594f7a51c16f3b3edd850acb0d842fefc33856b63a17e18499a5", - "sha256:22ea8aa7b3712450b42b044702bd3a64fd118006bad09a6f94bd1b227088492e", - "sha256:2db63941fee3122e31a21dd0f5b2138ce9906b661a85b63622421d3654a74ae2", - "sha256:2e91e19b583961979e2e5a701269d3cfc07418963bee717f8160b0a24332826b", - "sha256:31b38528f25bc662401e6ffae14b3eb7f1e820892fd80369a37155e3b636a2f4", - "sha256:3d29509f6e05e8d725db59c2d8c076223d793e4e35773040be6632a0349f2f97", - "sha256:46c79af80a835410874683b5779b6c1ec1d5a285e11c45b5193e79dd691eb111", - "sha256:4e90dd81b6e0d97ebfe52c0d12a17a9ef7f305d6bfbb93081265057d6092f252", - "sha256:50d25893885e80a5955186791eed5579f1e75921751539cc1dc3ffd1160b48cf", - "sha256:518a945dbfe337744bfff31423c1430303b8813c5275dffb0f2577f0734a1189", - "sha256:54efed22b2799a85475e6840e907c402ba49892c614565dc770aa97a53621b2b", - "sha256:58af428746fa73a2edcbf26aff33ac4ef3c11c8d75bb200eaea2f7e888d2de4e", - "sha256:59b6ad83cce067d10f4790c037a5904424f45bebb5e7be2eb2db90402f288267", - "sha256:63a3112f753baef8c6ac2f5f574bb9ac8001b86c8c0c0380039db47a7f512d20", - "sha256:66bc6efd829382f7a7e6cf33c2fb32b13edc8a239eb15f32acbf197dce7a0165", - "sha256:6999e80a125b0cd8e068d0210b63323f17338038c2ecd2e11b9209ec430fe7f2", - "sha256:6d16d9634ff1e5cea2cf4a8cbda9026f766e4b5f30b48f8180f0e99133d3abfc", - "sha256:84f308b7a8d28208d54315d11d35f9888d6d607673dd4d42d60b463682ee0400", - "sha256:9ee8692e23028564c13d924004495f284df8ac016a19f17a87251210e1f1f928", - "sha256:a3da036b016c975c2d8c69005bdc4d5d16266f948a7fab950244e0f58301996a", - "sha256:a7aec7f5d14dfcd71fb3ebc299b3f000c21fdc4043079101777ed2042ba5b7c5", - "sha256:a8a1fa9a718de0bc026979c93e1e9b55c5efde60d76f91561fd713387573817d", - "sha256:a8b99713d3a0d0e876b6aecfaada5e7dc9fe979fcd90ef9fa0ba1d9b9aed03f2", - "sha256:b63da598d9cbc52e2381f922da0e94d60c0429f92207bd3fb04d112fc82ea7cb", - "sha256:b6e6aa2d066f8dafd06d8d0799b4944b5d5a1f015dd52ac01bdf2895ebe169a0", - "sha256:b99fe8ef4093f672d00841569d2d05691e50334d79f4d9c15c1265d76d5580d2", - "sha256:b9beb0fa6ff3ea808ad4a6962d68ac0f140ddab080957b20d9e268e4d67fb335", - "sha256:b9eab7f9837fdaa2a10a524fbcc2ec24bf60637c044b6e4a59c3f835b90f0fae", - "sha256:bca49da868e8bde569ef36f0cc1b6de21d56bf9c3be185c503b629c19a185287", - "sha256:c05064f95aacdfc06f21e55096c964b2228d942b8675fa26995a2551f6329d2d", - "sha256:c2de1fb18198acd400c45ffe2aef5420c8d55fde903e91cba705596099550f3b", - "sha256:c794de4086f06ae609b71ac944ec7deb09f34ecf73316fddc041087dd24bba39", - "sha256:d4fa4f4bc8fd86579b8cdbe5e948f35d82c0eda0091c399d009b2a5a6b61c040", - "sha256:dab3d00d27b1a79ae4d4a240e8ceea8af0ff049fd45f05adb4f860d93744110d", - "sha256:dbac86d83d96099890e731cc2af97976ff2c98f4ba432fccde657c5653a32f1c", - "sha256:df40daa6c03b98652ffe8110ae014fe695437f6e1cb5a07e16ea37f40e73ac86", - "sha256:e1cd1c6bb097e774d68402499ff66185190baaa2629ae2f18515a2c50b93db0c", - "sha256:e8ff7d19a6804bfd561cfcec9b4200dd1788e28f7de4be70189801530c47c1b3", - "sha256:eb01c49c8aa035d5346f46630209923d4927ed15c2493db38d31da9f811eb70d", - "sha256:f53526668beccdb3409c6055a4ffe50987a7f05af6436fa55d61f5e7bd450219", - "sha256:f611c97678604e302b725f71626edea113a5745a7fb557c958b39edb6add87d5" + "sha256:084511482dd265bce6dca24c509894062f0117e4e6869384d853f46c0e6d43be", + "sha256:1193fb090061efa2f9e2d8d743ae9850c77b66746a3b32792324cdce65784154", + "sha256:174995f7b057e799355b393e97f4f93ef1f2197cbfa945e988d49b2a09ecbce8", + "sha256:253bb46bab970e8aae254cebf2ae3db98a4ef6bd034707aa68a239027d2b198d", + "sha256:2a78dba8c2a1e9d53a0fb5382979f024200dc86adc46a56cbb668a2249862fda", + "sha256:2d2404107626f97a221dc1a65b05396d2bb2ce38e435f64f26ed2369f68675d9", + "sha256:40bdbe90b33897d9cc4a39f8e415b0fcdeae4c40a99374b8a4982f127ff5c767", + "sha256:495369c660e0c27233e3c572269cbe520f7f4978be675f990f4005937337d391", + "sha256:4a9a51745c0439516d947480d4d884fa18bd1458e05b829e482b9269afa655bc", + "sha256:511482df31cfea9f697930f61520f6541185fa5eeba2fa760fe72e8eee5af88b", + "sha256:52c82df66201f3a90db438d9d7b337c7c98139de598d0728fb99dab9fd0495ca", + "sha256:562681188c62c024fe2c611b32e08b8de2afa00c0c4e72bed47c47c318e16d5c", + "sha256:59a6c8b71a245800e923cb684a2dc0eac19c56493e2f896218fcf2571ed28984", + "sha256:5dde0eab40faaa5476133123f6a622a1cc3ac9b7af45d65690870620323308b4", + "sha256:61df4dee5d38ab65b26da8efd62d859a1eef7a34dcbc331299a28e24d04c59a7", + "sha256:62d8ddb058b8e87018e5dc26f3258e2c30daad4c87262dfeb0e2617dd84750e6", + "sha256:66c92ec7f95fd9732550ebedefcd190a8d81beaa97e89d523a0d17198a8bda4d", + "sha256:843509ae9b93db5aaf1a6302085e30bddc1111d31e11d724584818f5b698f500", + "sha256:854421e328d47d70aa5abceacbe8eef231961b162c71cbe7ff3f47e235e2e5c5", + "sha256:97620c4af36e4c849e52661492e31dc36916df12571cb900d16960ab8e92a980", + "sha256:9acfa1cdc479e0dde528b61423855913d949a7f7fe09e276228298fef4589540", + "sha256:a77a60315c33393b2bd29d538d1ef026060a63d3a49a9233b779261bad9c3f71", + "sha256:b4fabb8cc9422efae1a925160083fdcbab8fdc96a8483441eb7457235df625bd", + "sha256:bf1810635c00f7c45d93085611c995fc130009cec5abdc35b327156aa191f982", + "sha256:c01f409be619a9a0f5590389e37ccb58b47264939f0e8d58bfa1f3ba07d22671", + "sha256:c59227d7ba5b232281c26ae04fac2c73a79ad0e236bca5c44aae904a18f14faf", + "sha256:c75e19971209fbbce891ebfd1b10c37320a5a28e8d438861c21d35305aedb81c", + "sha256:ce0e2c88c8c985b7b9a7efcd06511fb0a1fe3ddd9a6cd2895ef1dbf9059719d7", + "sha256:d6477ba902dd2d7adda7f0fd3bfaeb92885d45993c9e1928c9f28fc3961415f7", + "sha256:d986b66ff722ef675b7ee22fbe5947a41f60a61a4da15579d5e276d897fbc7fa", + "sha256:dd23848f877c3754f53a4903fb7a593ed100924f9b4bff7d5a4e2e8a7001ae11", + "sha256:e3f4d61f3a8195eac784f1d0c16c0a3105382c1b9a74d99ac4ba421da39a8826", + "sha256:e6b968543fde4119231c12c2a953dcf83349590ca631ba8216a8edf9cd4d36a9", + "sha256:e77bdf52185bdaf63d39f3e1ac3212e6cfa3ab07d509b94557a8902ce9c13c82", + "sha256:e79f1a3970d25f692bbb8c8c2637e621a66c0d60c109ab48d4a160f50856deff", + "sha256:e7a0a8848726956e9d9fb18c977a279013daadf0cbb6725d2015a6dd57527992", + "sha256:e869da810ae35afb3019baa0d0306cdbab4760a54909c89ad8904fa629991812", + "sha256:e8acf6dd0434b211b3bd30d572d9e019831aae17a54016629fa8224783b22df8", + "sha256:e8fa20748de55d0021f83754b371432dca0439e02847962fc4c42a0e444c2d78", + "sha256:ea592e6a09b71cb7a7661dd93ac0b877a6228e2d677ebacbad0a4d118494c86d", + "sha256:ec13a10715eef0e031858c1c23bfaee6cba02b97558e4a7bfa089dba4a8c2ebf", + "sha256:f4da089f6dfdb822293bde576916492cd708c37c2501c3651adde39804630538" ], "markers": "python_version >= '3.8'", - "version": "==4.44.0" + "version": "==4.47.0" }, "fqdn": { "hashes": [ @@ -907,19 +879,19 @@ }, "fsspec": { "hashes": [ - "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5", - "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529" + "sha256:8548d39e8810b59c38014934f6b31e57f40c1b20f911f4cc2b85389c7e9bf0cb", + "sha256:d800d87f72189a745fa3d6b033b9dc4a34ad069f60ca60b943a63599f5501960" ], "markers": "python_version >= '3.8'", - "version": "==2023.10.0" + "version": "==2023.12.2" }, "geocube": { "hashes": [ - "sha256:35d446f61e8ce97d0bcc3c692d003b355df19d7f59c8cd8bd61d2f9e3c7f72c8", - "sha256:b50ee83e4dcf465ccc54e62abe0e6458a26e8faf1e7b15b27604f936781c8a04" + "sha256:43c88cd5dd18f9df9561e642b4840e4bd061ccc8a3e8c419378f6707384213d0", + "sha256:5404060d6dcc8d3f251b453588667c6d5e5e60d07793011851f8bc129f779db0" ], - "markers": "python_version >= '3.8'", - "version": "==0.3.3" + "markers": "python_version >= '3.9'", + "version": "==0.4.2" }, "geographiclib": { "hashes": [ @@ -939,11 +911,11 @@ }, "geopy": { "hashes": [ - "sha256:a59392bf17adb486b25dbdd71fbed27733bdf24a2dac588047a619de56695e36", - "sha256:d2639a46d0ce4c091e9688b750ba94348a14b898a1e55c68f4b4a07e7d1afa20" + "sha256:50283d8e7ad07d89be5cb027338c6365a32044df3ae2556ad3f52f4840b3d0d1", + "sha256:ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7" ], "markers": "python_version >= '3.7'", - "version": "==2.4.0" + "version": "==2.4.1" }, "gval": { "hashes": [ @@ -955,11 +927,11 @@ }, "identify": { "hashes": [ - "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75", - "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d" + "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d", + "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34" ], "markers": "python_version >= '3.8'", - "version": "==2.5.31" + "version": "==2.5.33" }, "idna": { "hashes": [ @@ -974,17 +946,9 @@ "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7", "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67" ], - "markers": "python_version < '3.9'", + "markers": "python_version >= '3.8'", "version": "==7.0.0" }, - "importlib-resources": { - "hashes": [ - "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a", - "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" - ], - "markers": "python_version < '3.10'", - "version": "==6.1.1" - }, "inflate64": { "hashes": [ "sha256:022ca1cc928e7365a05f7371ff06af143c6c667144965e2cf9a9236a2ae1c291", @@ -1054,11 +1018,11 @@ }, "ipykernel": { "hashes": [ - "sha256:3ba3dc97424b87b31bb46586b5167b3161b32d7820b9201a9e698c71e271602c", - "sha256:553856658eb8430bbe9653ea041a41bff63e9606fc4628873fc92a6cf3abd404" + "sha256:7d5d594b6690654b4d299edba5e872dc17bb7396a8d0609c97cb7b8a1c605de6", + "sha256:dab88b47f112f9f7df62236511023c9bdeef67abc73af7c652e4ce4441601686" ], "markers": "python_version >= '3.8'", - "version": "==6.26.0" + "version": "==6.27.1" }, "ipympl": { "hashes": [ @@ -1070,11 +1034,11 @@ }, "ipython": { "hashes": [ - "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363", - "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c" + "sha256:2f55d59370f59d0d2b2212109fe0e6035cfea436b1c0e6150ad2244746272ec5", + "sha256:ac4da4ecf0042fb4e0ce57c60430c2db3c719fa8bdf92f8631d6bd8a5785d1f0" ], - "markers": "python_version >= '3.8'", - "version": "==8.12.3" + "markers": "python_version >= '3.10'", + "version": "==8.19.0" }, "ipython-genutils": { "hashes": [ @@ -1116,11 +1080,12 @@ }, "jinja2": { "hashes": [ - "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", - "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", + "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" ], + "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==3.1.2" + "version": "==3.1.3" }, "jmespath": { "hashes": [ @@ -1198,11 +1163,11 @@ }, "jupyter-core": { "hashes": [ - "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3", - "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805" + "sha256:1553311a97ccd12936037f36b9ab4d6ae8ceea6ad2d5c90d94a909e752178e40", + "sha256:220dfb00c45f0d780ce132bb7976b58263f81a3ada6e90a9b6823785a424f739" ], "markers": "python_version >= '3.8'", - "version": "==5.5.0" + "version": "==5.5.1" }, "jupyter-events": { "hashes": [ @@ -1214,28 +1179,27 @@ }, "jupyter-server": { "hashes": [ - "sha256:0c548151b54bcb516ca466ec628f7f021545be137d01b5467877e87f6fff4374", - "sha256:0c99f9367b0f24141e527544522430176613f9249849be80504c6d2b955004bb" + "sha256:dc77b7dcc5fc0547acba2b2844f01798008667201eea27c6319ff9257d700a6d", + "sha256:fd030dd7be1ca572e4598203f718df6630c12bd28a599d7f1791c4d7938e1010" ], - "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.11.2" + "version": "==2.12.1" }, "jupyter-server-fileid": { "hashes": [ - "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8", - "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0" + "sha256:7486bca3acf9bbaab7ce5127f9f64d2df58f5d2de377609fb833291a7217a6a2", + "sha256:76dd05a45b78c7ec0cba0be98ece289984c6bcfc1ca2da216d42930e506a4d68" ], "markers": "python_version >= '3.7'", - "version": "==0.9.0" + "version": "==0.9.1" }, "jupyter-server-terminals": { "hashes": [ - "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d", - "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36" + "sha256:2fc0692c883bfd891f4fba0c4b4a684a37234b0ba472f2e97ed0a3888f46e1e4", + "sha256:ebcd68c9afbf98a480a533e6f3266354336e645536953b7abcc7bdeebc0154a3" ], "markers": "python_version >= '3.8'", - "version": "==0.4.4" + "version": "==0.5.0" }, "jupyter-server-ydoc": { "hashes": [ @@ -1271,11 +1235,11 @@ }, "jupyterlab-server": { "hashes": [ - "sha256:77c2f1f282d610f95e496e20d5bf1d2a7706826dfb7b18f3378ae2870d272fb7", - "sha256:c9f67a98b295c5dee87f41551b0558374e45d449f3edca153dd722140630dcb2" + "sha256:5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf", + "sha256:bd0ec7a99ebcedc8bcff939ef86e52c378e44c2707e053fcd81d046ce979ee63" ], "markers": "python_version >= '3.8'", - "version": "==2.25.0" + "version": "==2.25.2" }, "jupyterlab-widgets": { "hashes": [ @@ -1711,16 +1675,16 @@ "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e", "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15" ], - "markers": "python_full_version >= '3.8.0'", + "markers": "python_version >= '3.8'", "version": "==0.9.0" }, "nbconvert": { "hashes": [ - "sha256:5b6c848194d270cc55fb691169202620d7b52a12fec259508d142ecbe4219310", - "sha256:b1564bd89f69a74cd6398b0362da94db07aafb991b7857216a766204a71612c0" + "sha256:2dc8267dbdfeedce2dcd34c9e3f1b51af18f43cb105549d1c5a18189ec23ba85", + "sha256:3c50eb2d326478cc90b8759cf2ab9dde3d892c6537cd6a5bc0991db8ef734bcc" ], "markers": "python_version >= '3.8'", - "version": "==7.12.0" + "version": "==7.13.1" }, "nbformat": { "hashes": [ @@ -1831,39 +1795,38 @@ }, "numexpr": { "hashes": [ - "sha256:15469dc722b5ceb92324ec8635411355ebc702303db901ae8cc87f47c5e3a124", - "sha256:18b1804923cfa3be7bbb45187d01c0540c8f6df4928c22a0f786e15568e9ebc5", - "sha256:1967c16f61c27df1cdc43ba3c0ba30346157048dd420b4259832276144d0f64e", - "sha256:211804ec25a9f6d188eadf4198dd1a92b2f61d7d20993c6c7706139bc4199c5b", - "sha256:27782177a0081bd0aab229be5d37674e7f0ab4264ef576697323dd047432a4cd", - "sha256:31cf610c952eec57081171f0b4427f9bed2395ec70ec432bbf45d260c5c0cdeb", - "sha256:38b8b90967026bbc36c7aa6e8ca3b8906e1990914fd21f446e2a043f4ee3bc06", - "sha256:47b45da5aa25600081a649f5e8b2aa640e35db3703f4631f34bb1f2f86d1b5b4", - "sha256:6336f8dba3f456e41a4ffc3c97eb63d89c73589ff6e1707141224b930263260d", - "sha256:681812e2e71ff1ba9145fac42d03f51ddf6ba911259aa83041323f68e7458002", - "sha256:6d7003497d82ef19458dce380b36a99343b96a3bd5773465c2d898bf8f5a38f9", - "sha256:6e884687da8af5955dc9beb6a12d469675c90b8fb38b6c93668c989cfc2cd982", - "sha256:80acbfefb68bd92e708e09f0a02b29e04d388b9ae72f9fcd57988aca172a7833", - "sha256:84979bf14143351c2db8d9dd7fef8aca027c66ad9df9cb5e75c93bf5f7b5a338", - "sha256:8564186aad5a2c88d597ebc79b8171b52fd33e9b085013e1ff2208f7e4b387e3", - "sha256:8e3e6f1588d6c03877cb3b3dcc3096482da9d330013b886b29cb9586af5af3eb", - "sha256:95b9da613761e4fc79748535b2a1f58cada22500e22713ae7d9571fa88d1c2e2", - "sha256:95c09e814b0d6549de98b5ded7cdf7d954d934bb6b505432ff82e83a6d330bda", - "sha256:9ef7e8aaa84fce3aba2e65f243d14a9f8cc92aafd5d90d67283815febfe43eeb", - "sha256:aa0f661f5f4872fd7350cc9895f5d2594794b2a7e7f1961649a351724c64acc9", - "sha256:b5f96c89aa0b1f13685ec32fa3d71028db0b5981bfd99a0bbc271035949136b3", - "sha256:c48221b6a85494a7be5a022899764e58259af585dff031cecab337277278cc93", - "sha256:c8f37f7a6af3bdd61f2efd1cafcc083a9525ab0aaf5dc641e7ec8fc0ae2d3aa1", - "sha256:d126938c2c3784673c9c58d94e00b1570aa65517d9c33662234d442fc9fb5795", - "sha256:d36528a33aa9c23743b3ea686e57526a4f71e7128a1be66210e1511b09c4e4e9", - "sha256:d6a88d71c166e86b98d34701285d23e3e89d548d9f5ae3f4b60919ac7151949f", - "sha256:dee04d72307c09599f786b9231acffb10df7d7a74b2ce3681d74a574880d13ce", - "sha256:e640bc0eaf1b59f3dde52bc02bbfda98e62f9950202b0584deba28baf9f36bbb", - "sha256:e93d64cd20940b726477c3cb64926e683d31b778a1e18f9079a5088fd0d8e7c8", - "sha256:ef6e8896457a60a539cb6ba27da78315a9bb31edb246829b25b5b0304bfcee91" - ], - "markers": "python_version >= '3.7'", - "version": "==2.8.6" + "sha256:0d7bfc8b77d8a7b04cd64ae42b62b3bf824a8c751ca235692bfd5231c6e90127", + "sha256:12146521b1730073859a20454e75004e38cd0cb61333e763c58ef5171e101eb2", + "sha256:121b049b6909787111daf92919c052c4fd87b5691172e8f19f702b96f20aaafa", + "sha256:17104051f0bd83fd350212e268d8b48017d5eff522b09b573fdbcc560c5e7ab3", + "sha256:22ccd67c0fbeae091f2c577f5b9c8046de6631d46b1cbe22aad46a08d2b42c2d", + "sha256:290f91c7ba7772abaf7107f3cc0601d93d6a3f21c13ee3da93f1b8a9ca3e8d39", + "sha256:296dc1f79d386166dec3bdb45f51caba29ffd8dc91db15447108c04d3001d921", + "sha256:2ae264c35fa67cd510191ab8144f131fddd0f1d13413af710913ea6fc0c6aa61", + "sha256:307b49fd15ef2ca292f381e67759e5b477410341f2f499a377234f1b42f529a6", + "sha256:399cb914b41c4027ba88a18f6b8ccfc3af5c32bc3b1758403a7c44c72530618a", + "sha256:3f168b4b42d4cb120fe1993676dcf74b77a3e8e45b58855566da037cfd938ca3", + "sha256:47c05007cd1c553515492c1a78b5477eaaba9cadc5d7b795d49f7aae53ccdf68", + "sha256:4d83a542d9deefb050e389aacaddea0f09d68ec617dd37e45b9a7cfbcba6d729", + "sha256:4f01d71db6fdb97a68def5407e2dbd748eaea9d98929db08816de40aa4ae3084", + "sha256:5a92f230dd9d6c42803f855970e93677b44290b6dad15cb6796fd85edee171ce", + "sha256:6459dc6ed6abcdeab3cd3667c79f29e4a0f0a02c29ad71ee5cff065e880ee9ef", + "sha256:76f0f010f9c6318bae213b21c5c0e381c2fc9c9ecb8b35f99f5030e7ac96c9ce", + "sha256:7badc50efbb2f1c8b78cd68089031e0fd29cbafa6a9e6d730533f22d88168406", + "sha256:85c9f79e346c26aa0d425ecfc9e5de7184567d5e48d0bdb02d468bb927e92525", + "sha256:925927cd1f610593e7783d8f2e12e3d800d5928601e077e4910e2b50bde624b6", + "sha256:a82d710145b0fbaec919dde9c90ed9df1e6785625cc36d1c71f3a53112b66fc5", + "sha256:aab17d65751c039d13ed9d49c9a7517b130ef488c1885c4666af9b5c6ad59520", + "sha256:b4649c1dcf9b0c2ae0a7b767dbbbde4e05ee68480c1ba7f06fc7963f1f73acf4", + "sha256:bf8c517bbbb82c07c23c17f9d52b4c9f86601f57d48e87c0cbda24af5907f4dd", + "sha256:ccef9b09432d59229c2a737882e55de7906006452003323e107576f264cec373", + "sha256:cd07793b074cc38e478637cbe738dff7d8eb92b5cf8ffaacff0c4f0bca5270a0", + "sha256:dbac846f713b4c82333e6af0814ebea0b4e74dfb2649e76c58953fd4862322dd", + "sha256:e76ce4d25372f46170cf7eb1ff14ed5d9c69a0b162a405063cbe481bafe3af34", + "sha256:f031ac4e70f9ad867543bfbde8452e9d1a14f0525346b4b8bd4e5c0f1380a11c" + ], + "markers": "python_version >= '3.9'", + "version": "==2.8.8" }, "numpy": { "hashes": [ @@ -1897,14 +1860,15 @@ "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135" ], "index": "pypi", - "markers": "python_version >= '3.8'", "version": "==1.23.5" }, "numpy-groupies": { "hashes": [ - "sha256:fd50026552280ca717722f17d4231390667505bb572de564de1362b40487d34a" + "sha256:24a574ecdd58c0d669749b67ec31dab971d27e04037b402bbc4f6bedaa2623bc", + "sha256:f920c4ded899f5975d94fc63d634e7c89622056bbab8cc98a44d4320a0ae8a12" ], - "version": "==0.9.22" + "markers": "python_version >= '3.9'", + "version": "==0.10.2" }, "odc-geo": { "hashes": [ @@ -1979,11 +1943,11 @@ }, "param": { "hashes": [ - "sha256:0153a06fb0049fab73132d7faf4c468d44ad77ee00d531702b0bf222c069f9b6", - "sha256:19823383b0dac5a794152b85336cb4c6b0d0ef61a2b1eb7cd272aae141be0117" + "sha256:4bfc94c0e4127626fa833e30c71c91ea73e7675b80c26dbdd4a6e5a8f6dc46db", + "sha256:7943a04607822efd46e96e1827dc5fa929a2fc3b1fe9fc7b7dca7d17a8031a5b" ], "markers": "python_version >= '3.8'", - "version": "==2.0.0" + "version": "==2.0.1" }, "parso": { "hashes": [ @@ -2003,26 +1967,19 @@ }, "pathspec": { "hashes": [ - "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", - "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" + "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", + "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" ], - "markers": "python_version >= '3.7'", - "version": "==0.11.2" + "markers": "python_version >= '3.8'", + "version": "==0.12.1" }, "pexpect": { "hashes": [ - "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", - "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", + "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" ], "markers": "sys_platform != 'win32'", - "version": "==4.8.0" - }, - "pickleshare": { - "hashes": [ - "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", - "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" - ], - "version": "==0.7.5" + "version": "==4.9.0" }, "pillow": { "hashes": [ @@ -2084,14 +2041,6 @@ "markers": "python_version >= '3.8'", "version": "==10.1.0" }, - "pkgutil-resolve-name": { - "hashes": [ - "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", - "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" - ], - "markers": "python_version < '3.9'", - "version": "==1.3.10" - }, "platformdirs": { "hashes": [ "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380", @@ -2126,33 +2075,33 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", - "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" + "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d", + "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6" ], "markers": "python_version >= '3.7'", - "version": "==3.0.39" + "version": "==3.0.43" }, "psutil": { "hashes": [ - "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28", - "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017", - "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602", - "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac", - "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a", - "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9", - "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4", - "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c", - "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c", - "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c", - "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a", - "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c", - "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57", - "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a", - "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d", - "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa" + "sha256:032f4f2c909818c86cea4fe2cc407f1c0f0cde8e6c6d702b28b8ce0c0d143340", + "sha256:0bd41bf2d1463dfa535942b2a8f0e958acf6607ac0be52265ab31f7923bcd5e6", + "sha256:1132704b876e58d277168cd729d64750633d5ff0183acf5b3c986b8466cd0284", + "sha256:1d4bc4a0148fdd7fd8f38e0498639ae128e64538faa507df25a20f8f7fb2341c", + "sha256:3c4747a3e2ead1589e647e64aad601981f01b68f9398ddf94d01e3dc0d1e57c7", + "sha256:3f02134e82cfb5d089fddf20bb2e03fd5cd52395321d1c8458a9e58500ff417c", + "sha256:44969859757f4d8f2a9bd5b76eba8c3099a2c8cf3992ff62144061e39ba8568e", + "sha256:4c03362e280d06bbbfcd52f29acd79c733e0af33d707c54255d21029b8b32ba6", + "sha256:5794944462509e49d4d458f4dbfb92c47539e7d8d15c796f141f474010084056", + "sha256:b27f8fdb190c8c03914f908a4555159327d7481dac2f01008d483137ef3311a9", + "sha256:c727ca5a9b2dd5193b8644b9f0c883d54f1248310023b5ad3e92036c5e2ada68", + "sha256:e469990e28f1ad738f65a42dcfc17adaed9d0f325d55047593cb9033a0ab63df", + "sha256:ea36cc62e69a13ec52b2f625c27527f6e4479bca2b340b7a452af55b34fcbe2e", + "sha256:f37f87e4d73b79e6c5e749440c3113b81d1ee7d26f21c19c47371ddea834f414", + "sha256:fe361f743cb3389b8efda21980d93eb55c1f1e3898269bc9a2a1d0bb7b1f6508", + "sha256:fe8b7f07948f1304497ce4f4684881250cd859b16d06a1dc4d7941eeb6233bfe" ], "markers": "sys_platform != 'cygwin'", - "version": "==5.9.6" + "version": "==5.9.7" }, "psycopg2-binary": { "hashes": [ @@ -2292,7 +2241,6 @@ "sha256:fada8396bc739d958d0b81d291cfd201126ed5e7913cb73de6bc606befc30226" ], "index": "pypi", - "markers": "python_version >= '3.8'", "version": "==14.0.1" }, "pybcj": { @@ -2359,41 +2307,42 @@ }, "pycryptodomex": { "hashes": [ - "sha256:09c9401dc06fb3d94cb1ec23b4ea067a25d1f4c6b7b118ff5631d0b5daaab3cc", - "sha256:0b2f1982c5bc311f0aab8c293524b861b485d76f7c9ab2c3ac9a25b6f7655975", - "sha256:136b284e9246b4ccf4f752d435c80f2c44fc2321c198505de1d43a95a3453b3c", - "sha256:1789d89f61f70a4cd5483d4dfa8df7032efab1118f8b9894faae03c967707865", - "sha256:2126bc54beccbede6eade00e647106b4f4c21e5201d2b0a73e9e816a01c50905", - "sha256:258c4233a3fe5a6341780306a36c6fb072ef38ce676a6d41eec3e591347919e8", - "sha256:263de9a96d2fcbc9f5bd3a279f14ea0d5f072adb68ebd324987576ec25da084d", - "sha256:50cb18d4dd87571006fd2447ccec85e6cec0136632a550aa29226ba075c80644", - "sha256:5b883e1439ab63af976656446fb4839d566bb096f15fc3c06b5a99cde4927188", - "sha256:5d73e9fa3fe830e7b6b42afc49d8329b07a049a47d12e0ef9225f2fd220f19b2", - "sha256:61056a1fd3254f6f863de94c233b30dd33bc02f8c935b2000269705f1eeeffa4", - "sha256:67c8eb79ab33d0fbcb56842992298ddb56eb6505a72369c20f60bc1d2b6fb002", - "sha256:6e45bb4635b3c4e0a00ca9df75ef6295838c85c2ac44ad882410cb631ed1eeaa", - "sha256:7cb51096a6a8d400724104db8a7e4f2206041a1f23e58924aa3d8d96bcb48338", - "sha256:800a2b05cfb83654df80266692f7092eeefe2a314fa7901dcefab255934faeec", - "sha256:8df69e41f7e7015a90b94d1096ec3d8e0182e73449487306709ec27379fff761", - "sha256:917033016ecc23c8933205585a0ab73e20020fdf671b7cd1be788a5c4039840b", - "sha256:a12144d785518f6491ad334c75ccdc6ad52ea49230b4237f319dbb7cef26f464", - "sha256:a3866d68e2fc345162b1b9b83ef80686acfe5cec0d134337f3b03950a0a8bf56", - "sha256:a588a1cb7781da9d5e1c84affd98c32aff9c89771eac8eaa659d2760666f7139", - "sha256:a77b79852175064c822b047fee7cf5a1f434f06ad075cc9986aa1c19a0c53eb0", - "sha256:af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6", - "sha256:b801216c48c0886742abf286a9a6b117e248ca144d8ceec1f931ce2dd0c9cb40", - "sha256:bfb040b5dda1dff1e197d2ef71927bd6b8bfcb9793bc4dfe0bb6df1e691eaacb", - "sha256:c01678aee8ac0c1a461cbc38ad496f953f9efcb1fa19f5637cbeba7544792a53", - "sha256:c74eb1f73f788facece7979ce91594dc177e1a9b5d5e3e64697dd58299e5cb4d", - "sha256:c9a68a2f7bd091ccea54ad3be3e9d65eded813e6d79fdf4cc3604e26cdd6384f", - "sha256:d4dd3b381ff5a5907a3eb98f5f6d32c64d319a840278ceea1dcfcc65063856f3", - "sha256:e8e5ecbd4da4157889fce8ba49da74764dd86c891410bfd6b24969fa46edda51", - "sha256:eb2fc0ec241bf5e5ef56c8fbec4a2634d631e4c4f616a59b567947a0f35ad83c", - "sha256:edbe083c299835de7e02c8aa0885cb904a75087d35e7bab75ebe5ed336e8c3e2", - "sha256:ff64fd720def623bf64d8776f8d0deada1cc1bf1ec3c1f9d6f5bb5bd098d034f" + "sha256:011e859026ecbd15b8e720e8992361186e582cf726c50bde6ff8c0c05e820ddf", + "sha256:0b42e2743893f386dfb58fe24a4c8be5305c3d1c825d5f23d9e63fd0700d1110", + "sha256:0b7154aff2272962355f8941fd514104a88cb29db2d8f43a29af900d6398eb1c", + "sha256:0bc4b7bfaac56e6dfd62044847443a3d110c7abea7fcb0d68c1aea64ed3a6697", + "sha256:10c2eed4efdfa084b602ab922e699a0a2ba82053baebfc8afcaf27489def7955", + "sha256:1c04cfff163c05d033bf28e3c4429d8222796738c7b6c1638b9d7090b904611e", + "sha256:23707238b024b36c35dd3428f5af6c1f0c5ef54c21e387a2063633717699b8b2", + "sha256:371bbe0be17b4dd8cc0c2f378d75ea33f00d5a39884c09a672016ac40145a5fa", + "sha256:39eb1f82ac3ba3e39d866f38e480e8fa53fcdd22260340f05f54a8188d47d510", + "sha256:3f3c58971784fba0e014bc3f8aed1197b86719631e1b597d36d7354be5598312", + "sha256:5ca98de2e5ac100e57a7116309723360e8f799f722509e376dc396cdf65eec9c", + "sha256:62f51a63d73153482729904381dd2de86800b0733a8814ee8f072fa73e5c92fb", + "sha256:76414d39df6b45bcc4f38cf1ba2031e0f4b8e99d1ba3c2eee31ffe1b9f039733", + "sha256:8dffe067d5fff14dba4d18ff7d459cc2a47576d82dafbff13a8f1199c3353e41", + "sha256:96000b837bcd8e3bf86b419924a056c978e45027281e4318650c81c25a3ef6cc", + "sha256:9919a1edd2a83c4dfb69f1d8a4c0c5efde7147ef15b07775633372b80c90b5d8", + "sha256:aab7941c2ff53eb63cb26252770e4f14386d79ce07baeffbf98a1323c1646545", + "sha256:ac562e239d98cfef763866c0aee4586affb0d58c592202f06c87241af99db241", + "sha256:ae75eea2e908383fd4c659fdcfe9621a72869e3e3ee73904227e93b7f7b80b54", + "sha256:b5c336dc698650283ad06f8c0237a984087d0af9f403ff21d633507335628156", + "sha256:beb5f0664f49b6093da179ee8e27c1d670779f50b9ece0886ce491bb8bd63728", + "sha256:c1ae2fb8d5d6771670436dcc889b293e363c97647a6d31c21eebc12b7b760010", + "sha256:c9332b04bf3f838327087b028f690f4ddb9341eb014a0221e79b9c19a77f7555", + "sha256:c9cb88ed323be1aa642b3c17cd5caa1a03c3a8fbad092d48ecefe88e328ffae3", + "sha256:d45d0d35a238d838b872598fa865bbfb31aaef9aeeda77c68b04ef79f9a469dc", + "sha256:d7a77391fd351ff1bdf8475558ddc6e92950218cb905419ee14aa02f370f1054", + "sha256:de5a43901e47e7a6938490fc5de3074f6e35c8b481a75b227c0d24d6099bd41d", + "sha256:e94a7e986b117b72e9472f8eafdd81748dafff30815401f9760f759f1debe9ef", + "sha256:ed3bdda44cc05dd13eee697ab9bea6928531bb7b218e68e66d0d3eb2ebab043e", + "sha256:f24f49fc6bd706d87048654d6be6c7c967d6836d4879e3a7c439275fab9948ad", + "sha256:f8a97b1acd36e9ce9d4067d94a8be99c458f0eb8070828639302a95cfcf0770b", + "sha256:f8b3d9e7c17c1ffc1fa5b11c0bbab8a5df3de8596bb32ad30281b21e5ede4bf5" ], + "index": "pypi", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==3.19.0" + "version": "==3.19.1" }, "pyct": { "hashes": [ @@ -2453,6 +2402,14 @@ "markers": "python_version >= '3.6'", "version": "==3.0.1" }, + "pyflwdir": { + "hashes": [ + "sha256:07f5499e976e3b45ea5750869dc6c3b85a77aa674ac73c45f7da0a2e9f7e66db", + "sha256:be059dcade8bde51102e7e832903e76bec391b8bb460ca571895f511f4c18e4d" + ], + "index": "pypi", + "version": "==0.5.8" + }, "pygments": { "hashes": [ "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", @@ -2901,11 +2858,11 @@ }, "qtconsole": { "hashes": [ - "sha256:6b6bcf8f834c6df1579a3e6623c8531b85d3e723997cee3a1156296df14716c8", - "sha256:ea8b4a07d7dc915a1b1238fbfe2c9aea570640402557b64615e09a4bc60df47c" + "sha256:8c75fa3e9b4ed884880ff7cea90a1b67451219279ec33deaee1d59e3df1a5d2b", + "sha256:a0e806c6951db9490628e4df80caec9669b65149c7ba40f9bf033c025a5b56bc" ], "markers": "python_version >= '3.8'", - "version": "==5.5.0" + "version": "==5.5.1" }, "qtpy": { "hashes": [ @@ -2948,11 +2905,11 @@ }, "referencing": { "hashes": [ - "sha256:81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec", - "sha256:c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d" + "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161", + "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99" ], "markers": "python_version >= '3.8'", - "version": "==0.31.1" + "version": "==0.32.0" }, "requests": { "hashes": [ @@ -3007,116 +2964,116 @@ }, "rioxarray": { "hashes": [ - "sha256:0cad24ad2c3c5ee181a0cfad2b8c2152a609b7eb118a3430034aec171e9cf14f", - "sha256:56eef711d9817d3c729c1a267c940e7dff66bfc874a0b24ed3604ea2f958dfb2" + "sha256:d2a8429a5b6405913c7b6f515ef2992b05139c96eb39a2dc1c9f475ce0848c9c", + "sha256:d7c0b2efc21075f77fe04302b916a995320004695f3c31e4f06d9ab40acd4498" ], - "markers": "python_version >= '3.8'", - "version": "==0.13.4" + "markers": "python_version >= '3.9'", + "version": "==0.15.0" }, "rpds-py": { "hashes": [ - "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276", - "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f", - "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60", - "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0", - "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d", - "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3", - "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2", - "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9", - "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb", - "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b", - "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a", - "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d", - "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1", - "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7", - "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9", - "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4", - "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53", - "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea", - "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66", - "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190", - "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3", - "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12", - "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824", - "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27", - "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e", - "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8", - "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8", - "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914", - "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211", - "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab", - "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468", - "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3", - "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff", - "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c", - "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d", - "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e", - "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a", - "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e", - "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a", - "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0", - "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1", - "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3", - "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42", - "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452", - "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198", - "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa", - "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b", - "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4", - "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1", - "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad", - "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c", - "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381", - "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0", - "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2", - "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3", - "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31", - "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74", - "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6", - "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff", - "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b", - "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca", - "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd", - "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a", - "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568", - "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1", - "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c", - "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad", - "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7", - "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d", - "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658", - "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1", - "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64", - "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815", - "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1", - "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac", - "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07", - "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e", - "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee", - "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45", - "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc", - "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41", - "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2", - "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083", - "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e", - "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266", - "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141", - "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b", - "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933", - "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21", - "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0", - "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7", - "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc", - "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba", - "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a", - "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57", - "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2", - "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007", - "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f", - "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f" + "sha256:02744236ac1895d7be837878e707a5c35fb8edc5137602f253b63623d7ad5c8c", + "sha256:03f9c5875515820633bd7709a25c3e60c1ea9ad1c5d4030ce8a8c203309c36fd", + "sha256:044f6f46d62444800402851afa3c3ae50141f12013060c1a3a0677e013310d6d", + "sha256:07a2e1d78d382f7181789713cdf0c16edbad4fe14fe1d115526cb6f0eef0daa3", + "sha256:082e0e55d73690ffb4da4352d1b5bbe1b5c6034eb9dc8c91aa2a3ee15f70d3e2", + "sha256:13152dfe7d7c27c40df8b99ac6aab12b978b546716e99f67e8a67a1d441acbc3", + "sha256:13716e53627ad97babf72ac9e01cf9a7d4af2f75dd5ed7b323a7a9520e948282", + "sha256:13ff62d3561a23c17341b4afc78e8fcfd799ab67c0b1ca32091d71383a98ba4b", + "sha256:1607cda6129f815493a3c184492acb5ae4aa6ed61d3a1b3663aa9824ed26f7ac", + "sha256:164fcee32f15d04d61568c9cb0d919e37ff3195919cd604039ff3053ada0461b", + "sha256:1c24e30d720c0009b6fb2e1905b025da56103c70a8b31b99138e4ed1c2a6c5b0", + "sha256:1e6fcd0a0f62f2997107f758bb372397b8d5fd5f39cc6dcb86f7cb98a2172d6c", + "sha256:1fd0f0b1ccd7d537b858a56355a250108df692102e08aa2036e1a094fd78b2dc", + "sha256:2181e86d4e1cdf49a7320cb72a36c45efcb7670d0a88f09fd2d3a7967c0540fd", + "sha256:2974e6dff38afafd5ccf8f41cb8fc94600b3f4fd9b0a98f6ece6e2219e3158d5", + "sha256:2dccc623725d0b298f557d869a68496a2fd2a9e9c41107f234fa5f7a37d278ac", + "sha256:2df3d07a16a3bef0917b28cd564778fbb31f3ffa5b5e33584470e2d1b0f248f0", + "sha256:2e7e5633577b3bd56bf3af2ef6ae3778bbafb83743989d57f0e7edbf6c0980e4", + "sha256:2ee066a64f0d2ba45391cac15b3a70dcb549e968a117bd0500634754cfe0e5fc", + "sha256:2f1f295a5c28cfa74a7d48c95acc1c8a7acd49d7d9072040d4b694fe11cd7166", + "sha256:2faa97212b0dc465afeedf49045cdd077f97be1188285e646a9f689cb5dfff9e", + "sha256:30479a9f1fce47df56b07460b520f49fa2115ec2926d3b1303c85c81f8401ed1", + "sha256:337a8653fb11d2fbe7157c961cc78cb3c161d98cf44410ace9a3dc2db4fad882", + "sha256:3423007fc0661827e06f8a185a3792c73dda41f30f3421562f210cf0c9e49569", + "sha256:373b76eeb79e8c14f6d82cb1d4d5293f9e4059baec6c1b16dca7ad13b6131b39", + "sha256:3b79c63d29101cbaa53a517683557bb550462394fb91044cc5998dd2acff7340", + "sha256:3bbc89ce2a219662ea142f0abcf8d43f04a41d5b1880be17a794c39f0d609cb0", + "sha256:3c11bc5814554b018f6c5d6ae0969e43766f81e995000b53a5d8c8057055e886", + "sha256:3cd61e759c4075510052d1eca5cddbd297fe1164efec14ef1fce3f09b974dfe4", + "sha256:3d40fb3ca22e3d40f494d577441b263026a3bd8c97ae6ce89b2d3c4b39ac9581", + "sha256:3db0c998c92b909d7c90b66c965590d4f3cd86157176a6cf14aa1f867b77b889", + "sha256:422b0901878a31ef167435c5ad46560362891816a76cc0d150683f3868a6f0d1", + "sha256:46b4f3d47d1033db569173be62365fbf7808c2bd3fb742314d251f130d90d44c", + "sha256:485fbdd23becb822804ed05622907ee5c8e8a5f43f6f43894a45f463b2217045", + "sha256:53304cc14b1d94487d70086e1cb0cb4c29ec6da994d58ae84a4d7e78c6a6d04d", + "sha256:5595c80dd03d7e6c6afb73f3594bf3379a7d79fa57164b591d012d4b71d6ac4c", + "sha256:56b51ba29a18e5f5810224bcf00747ad931c0716e3c09a76b4a1edd3d4aba71f", + "sha256:580182fa5b269c2981e9ce9764367cb4edc81982ce289208d4607c203f44ffde", + "sha256:5e99d6510c8557510c220b865d966b105464740dcbebf9b79ecd4fbab30a13d9", + "sha256:5eb05b654a41e0f81ab27a7c3e88b6590425eb3e934e1d533ecec5dc88a6ffff", + "sha256:62b292fff4739c6be89e6a0240c02bda5a9066a339d90ab191cf66e9fdbdc193", + "sha256:6a5122b17a4faf5d7a6d91fa67b479736c0cacc7afe791ddebb7163a8550b799", + "sha256:6a8ff8e809da81363bffca2b965cb6e4bf6056b495fc3f078467d1f8266fe27f", + "sha256:6c43e1b89099279cc03eb1c725c5de12af6edcd2f78e2f8a022569efa639ada3", + "sha256:709dc11af2f74ba89c68b1592368c6edcbccdb0a06ba77eb28c8fe08bb6997da", + "sha256:7e072f5da38d6428ba1fc1115d3cc0dae895df671cb04c70c019985e8c7606be", + "sha256:813a65f95bfcb7c8f2a70dd6add9b51e9accc3bdb3e03d0ff7a9e6a2d3e174bf", + "sha256:86c01299942b0f4b5b5f28c8701689181ad2eab852e65417172dbdd6c5b3ccc8", + "sha256:893e38d0f4319dfa70c0f36381a37cc418985c87b11d9784365b1fff4fa6973b", + "sha256:8a5f574b92b3ee7d254e56d56e37ec0e1416acb1ae357c4956d76a1788dc58fb", + "sha256:8b9650f92251fdef843e74fc252cdfd6e3c700157ad686eeb0c6d7fdb2d11652", + "sha256:8ec464f20fe803ae00419bd1610934e3bda963aeba1e6181dfc9033dc7e8940c", + "sha256:8f333bfe782a2d05a67cfaa0cc9cd68b36b39ee6acfe099f980541ed973a7093", + "sha256:8ffdeb7dbd0160d4e391e1f857477e4762d00aa2199c294eb95dfb9451aa1d9f", + "sha256:911e600e798374c0d86235e7ef19109cf865d1336942d398ff313375a25a93ba", + "sha256:9235be95662559141934fced8197de6fee8c58870f36756b0584424b6d708393", + "sha256:938518a11780b39998179d07f31a4a468888123f9b00463842cd40f98191f4d3", + "sha256:93c18a1696a8e0388ed84b024fe1a188a26ba999b61d1d9a371318cb89885a8c", + "sha256:97532802f14d383f37d603a56e226909f825a83ff298dc1b6697de00d2243999", + "sha256:98ee201a52a7f65608e5494518932e1473fd43535f12cade0a1b4ab32737fe28", + "sha256:9d2ae79f31da5143e020a8d4fc74e1f0cbcb8011bdf97453c140aa616db51406", + "sha256:9d38494a8d21c246c535b41ecdb2d562c4b933cf3d68de03e8bc43a0d41be652", + "sha256:9d41ebb471a6f064c0d1c873c4f7dded733d16ca5db7d551fb04ff3805d87802", + "sha256:9e09d017e3f4d9bd7d17a30d3f59e4d6d9ba2d2ced280eec2425e84112cf623f", + "sha256:a6945c2d61c42bb7e818677f43638675b8c1c43e858b67a96df3eb2426a86c9d", + "sha256:a72e00826a2b032dda3eb25aa3e3579c6d6773d22d8446089a57a123481cc46c", + "sha256:aa1e626c524d2c7972c0f3a8a575d654a3a9c008370dc2a97e46abd0eaa749b9", + "sha256:ab095edf1d840a6a6a4307e1a5b907a299a94e7b90e75436ee770b8c35d22a25", + "sha256:ac2ac84a4950d627d84b61f082eba61314373cfab4b3c264b62efab02ababe83", + "sha256:ac7187bee72384b9cfedf09a29a3b2b6e8815cc64c095cdc8b5e6aec81e9fd5f", + "sha256:ae9d83a81b09ce3a817e2cbb23aabc07f86a3abc664c613cd283ce7a03541e95", + "sha256:afeabb382c1256a7477b739820bce7fe782bb807d82927102cee73e79b41b38b", + "sha256:b2a4cd924d0e2f4b1a68034abe4cadc73d69ad5f4cf02db6481c0d4d749f548f", + "sha256:b414ef79f1f06fb90b5165db8aef77512c1a5e3ed1b4807da8476b7e2c853283", + "sha256:b4ecbba7efd82bd2a4bb88aab7f984eb5470991c1347bdd1f35fb34ea28dba6e", + "sha256:b61d5096e75fd71018b25da50b82dd70ec39b5e15bb2134daf7eb7bbbc103644", + "sha256:b629db53fe17e6ce478a969d30bd1d0e8b53238c46e3a9c9db39e8b65a9ef973", + "sha256:b70b45a40ad0798b69748b34d508259ef2bdc84fb2aad4048bc7c9cafb68ddb3", + "sha256:b88c3ab98556bc351b36d6208a6089de8c8db14a7f6e1f57f82a334bd2c18f0b", + "sha256:baf744e5f9d5ee6531deea443be78b36ed1cd36c65a0b95ea4e8d69fa0102268", + "sha256:bbc7421cbd28b4316d1d017db338039a7943f945c6f2bb15e1439b14b5682d28", + "sha256:c31272c674f725dfe0f343d73b0abe8c878c646967ec1c6106122faae1efc15b", + "sha256:c51a899792ee2c696072791e56b2020caff58b275abecbc9ae0cb71af0645c95", + "sha256:c61e42b4ceb9759727045765e87d51c1bb9f89987aca1fcc8a040232138cad1c", + "sha256:c7cd0841a586b7105513a7c8c3d5c276f3adc762a072d81ef7fae80632afad1e", + "sha256:c827a931c6b57f50f1bb5de400dcfb00bad8117e3753e80b96adb72d9d811514", + "sha256:d2aa3ca9552f83b0b4fa6ca8c6ce08da6580f37e3e0ab7afac73a1cfdc230c0e", + "sha256:d46ee458452727a147d7897bb33886981ae1235775e05decae5d5d07f537695a", + "sha256:d64a657de7aae8db2da60dc0c9e4638a0c3893b4d60101fd564a3362b2bfeb34", + "sha256:d800a8e2ac62db1b9ea5d6d1724f1a93c53907ca061de4d05ed94e8dfa79050c", + "sha256:d9d7ebcd11ea76ba0feaae98485cd8e31467c3d7985210fab46983278214736b", + "sha256:dd7d3608589072f63078b4063a6c536af832e76b0b3885f1bfe9e892abe6c207", + "sha256:ec19e823b4ccd87bd69e990879acbce9e961fc7aebe150156b8f4418d4b27b7f", + "sha256:ee40206d1d6e95eaa2b7b919195e3689a5cf6ded730632de7f187f35a1b6052c", + "sha256:f138f550b83554f5b344d6be35d3ed59348510edc3cb96f75309db6e9bfe8210", + "sha256:f3e6e2e502c4043c52a99316d89dc49f416acda5b0c6886e0dd8ea7bb35859e8", + "sha256:fb10bb720348fe1647a94eb605accb9ef6a9b1875d8845f9e763d9d71a706387", + "sha256:fc066395e6332da1e7525d605b4c96055669f8336600bef8ac569d5226a7c76f", + "sha256:fc33267d58dfbb2361baed52668c5d8c15d24bc0372cecbb79fed77339b55e0d" ], "markers": "python_version >= '3.8'", - "version": "==0.13.2" + "version": "==0.15.2" }, "rtree": { "hashes": [ @@ -3222,11 +3179,11 @@ }, "setuptools": { "hashes": [ - "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", - "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" + "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2", + "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6" ], "markers": "python_version >= '3.8'", - "version": "==68.2.2" + "version": "==69.0.2" }, "shapely": { "hashes": [ @@ -3526,11 +3483,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", - "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" + "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", + "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" ], - "markers": "python_version < '3.10'", - "version": "==4.8.0" + "markers": "python_version >= '3.8'", + "version": "==4.9.0" }, "typing-inspect": { "hashes": [ @@ -3564,18 +3521,18 @@ }, "virtualenv": { "hashes": [ - "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af", - "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381" + "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3", + "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b" ], "markers": "python_version >= '3.7'", - "version": "==20.24.6" + "version": "==20.25.0" }, "wcwidth": { "hashes": [ - "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223", - "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8" + "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02", + "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c" ], - "version": "==0.2.9" + "version": "==0.2.12" }, "webcolors": { "hashes": [ @@ -3617,84 +3574,79 @@ }, "wrapt": { "hashes": [ - "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", - "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", - "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", - "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", - "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", - "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", - "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", - "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", - "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", - "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", - "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", - "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", - "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", - "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", - "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", - "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", - "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", - "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", - "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", - "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", - "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", - "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", - "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", - "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", - "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", - "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", - "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", - "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", - "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", - "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", - "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", - "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", - "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", - "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", - "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", - "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", - "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", - "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", - "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", - "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", - "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", - "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", - "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", - "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", - "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", - "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", - "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", - "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", - "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", - "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", - "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", - "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", - "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", - "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", - "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", - "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", - "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", - "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", - "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", - "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", - "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", - "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", - "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", - "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", - "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", - "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", - "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", - "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", - "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", - "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", - "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", - "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", - "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", - "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", - "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" + "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc", + "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", + "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09", + "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e", + "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca", + "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0", + "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", + "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487", + "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40", + "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", + "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060", + "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202", + "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41", + "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", + "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", + "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", + "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", + "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362", + "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00", + "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", + "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", + "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267", + "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956", + "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966", + "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1", + "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228", + "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72", + "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d", + "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292", + "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0", + "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0", + "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", + "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c", + "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5", + "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f", + "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", + "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", + "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", + "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593", + "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39", + "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389", + "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf", + "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf", + "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89", + "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c", + "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", + "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f", + "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440", + "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465", + "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136", + "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b", + "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", + "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3", + "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8", + "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6", + "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e", + "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", + "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c", + "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e", + "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", + "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2", + "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020", + "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", + "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d", + "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", + "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", + "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", + "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d", + "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", + "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.15.0" + "markers": "python_version >= '3.6'", + "version": "==1.16.0" }, "xarray": { "hashes": [ @@ -3849,11 +3801,11 @@ }, "ipython": { "hashes": [ - "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363", - "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c" + "sha256:2f55d59370f59d0d2b2212109fe0e6035cfea436b1c0e6150ad2244746272ec5", + "sha256:ac4da4ecf0042fb4e0ce57c60430c2db3c719fa8bdf92f8631d6bd8a5785d1f0" ], - "markers": "python_version >= '3.8'", - "version": "==8.12.3" + "markers": "python_version >= '3.10'", + "version": "==8.19.0" }, "jedi": { "hashes": [ @@ -3881,11 +3833,11 @@ }, "pexpect": { "hashes": [ - "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", - "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", + "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" ], "markers": "sys_platform != 'win32'", - "version": "==4.8.0" + "version": "==4.9.0" }, "pickleshare": { "hashes": [ @@ -3896,17 +3848,18 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", - "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" + "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d", + "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6" ], "markers": "python_version >= '3.7'", - "version": "==3.0.39" + "version": "==3.0.43" }, "ptyprocess": { "hashes": [ "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" ], + "markers": "os_name != 'nt'", "version": "==0.7.0" }, "pure-eval": { @@ -3918,11 +3871,11 @@ }, "pygments": { "hashes": [ - "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", - "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" + "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", + "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" ], "markers": "python_version >= '3.7'", - "version": "==2.16.1" + "version": "==2.17.2" }, "six": { "hashes": [ @@ -3941,26 +3894,18 @@ }, "traitlets": { "hashes": [ - "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5", - "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619" + "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33", + "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772" ], "markers": "python_version >= '3.8'", - "version": "==5.13.0" - }, - "typing-extensions": { - "hashes": [ - "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", - "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" - ], - "markers": "python_version < '3.10'", - "version": "==4.8.0" + "version": "==5.14.0" }, "wcwidth": { "hashes": [ - "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223", - "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8" + "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02", + "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c" ], - "version": "==0.2.9" + "version": "==0.2.12" } } } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e514eb23c..be5e9c1be 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,22 @@ All notable changes to this project will be documented in this file. We follow the [Semantic Versioning 2.0.0](http://semver.org/) format. +## v4.4.9.0 - 2024-01-12 - [PR#1058](https://github.com/NOAA-OWP/inundation-mapping/pull/1058) + +Upgrades base Docker image to GDAL v3.8.0. In order to upgrade past GDAL v.3.4.3 (see #1029), TauDEM's `aread8` was replaced with a module from the `pyflwdir` Python package. + +### Additions + +- `src/accumulate_headwaters.py`: Uses `pyflwdir` to accumulate headwaters and threshold and create stream pixels. + +### Changes + +- `Dockerfile`: Upgrade GDAL from v.3.4.3 to v.3.8.0; remove JDK 17 and TauDEM `aread8` and `threshold`. +- `Pipfile` and `Pipfile.lock`: Add `pyflwdir`, `pycryptodomex` and upgrade Python version. +- `src/delineate_hydros_and_produce_HAND.sh`: Add `src/accumulate_headwaters.py` and remove TauDEM `aread8` and `threshold` + +

+ ## v4.4.8.4 - 2024-01-12 - [PR#1061](https://github.com/NOAA-OWP/inundation-mapping/pull/1061) Adds a post-processing tool to compare crosswalked (conflated) `feature_id`s between NWM stream network to DEM-derived reaches. The tool is run if the `-x` flag is added to `fim_pipeline.sh`. Results are computed for branch 0 and saved in a summary file in the HUC output folder. @@ -37,6 +53,7 @@ Levees disrupt the natural hydrology and can create large catchments that contai

+ ## v4.4.8.2 - 2023-12-12 - [PR#1052](https://github.com/NOAA-OWP/inundation-mapping/pull/1052) The alpha test for v4.4.8.1 came back with a large degradation in skill and we noticed that the global manning's roughness file was changed in v4.4.7.1 - likely in error. @@ -47,6 +64,7 @@ The alpha test for v4.4.8.1 came back with a large degradation in skill and we n

+ ## v4.4.8.1 - 2023-12-08 - [PR#1047](https://github.com/NOAA-OWP/inundation-mapping/pull/1047) Upgrades JDK to v.17.0.9 in Docker image to address security vulnerabilities. diff --git a/src/accumulate_headwaters.py b/src/accumulate_headwaters.py new file mode 100644 index 000000000..4dcb6fb4d --- /dev/null +++ b/src/accumulate_headwaters.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 + +import argparse +import os + +import numpy as np +import pyflwdir +import rasterio as rio + + +def accumulate_flow( + flow_direction_filename, + headwaters_filename, + flow_accumulation_filename, + stream_pixel_filename, + flow_accumulation_threshold, +): + """ + Accumulate headwaters along the flow direction and threshold accumulations to produce stream pixels. + + Parameters + ---------- + flow_direction_filename : str + Flow direction filename + headwaters_filename : str + Headwaters filename + flow_accumulation_filename : str + Flow accumulation filename + stream_pixel_filename : str + Stream pixel filename + flow_accumulation_threshold : str + """ + + assert os.path.isfile(flow_direction_filename), 'Flow direction raster does not exist.' + + # Read the flow direction raster + with rio.open(flow_direction_filename) as src: + data = src.read(1) + nodata = src.nodata + profile = src.profile + # transform = src.transform + # crs = src.crs + # latlon = crs.to_epsg() == 4326 + + # Convert the TauDEM flow direction raster to a pyflwdir flow direction array + temp = data.copy() + + temp[data == 1] = 1 + temp[data == 2] = 128 + temp[data == 3] = 64 + temp[data == 4] = 32 + temp[data == 5] = 16 + temp[data == 6] = 8 + temp[data == 7] = 4 + temp[data == 8] = 2 + temp[data == nodata] = 247 + + temp = temp.astype(np.uint8) + + flw = pyflwdir.from_array(temp, ftype='d8') + + # Read the flow direction raster + with rio.open(headwaters_filename) as src: + headwaters = src.read(1) + nodata = src.nodata + + flowaccum = flw.accuflux(headwaters, nodata=nodata, direction='up') + + stream = np.where(flowaccum > 0, flow_accumulation_threshold, 0) + + # Write the flow accumulation raster + profile.update(dtype=flowaccum.dtype) + with rio.open(flow_accumulation_filename, 'w', **profile) as dst, rio.open( + stream_pixel_filename, 'w', **profile + ) as dst2: + dst.write(flowaccum, 1) + dst2.write(stream, 1) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument( + '-fd', '--flow-direction-filename', help='Flow direction filename', required=True, type=str + ) + parser.add_argument('-wg', '--headwaters-filename', help='Headwaters filename', required=True, type=str) + parser.add_argument( + '-fa', '--flow-accumulation-filename', help='Flow accumulation filename', required=True, type=str + ) + parser.add_argument( + '-stream', '--stream-pixel-filename', help='Stream pixel filename', required=True, type=str + ) + parser.add_argument( + '-thresh', + '--flow-accumulation-threshold', + help='Flow accumulation threshold', + required=True, + type=float, + ) + + args = parser.parse_args() + + accumulate_flow(**vars(args)) diff --git a/src/delineate_hydros_and_produce_HAND.sh b/src/delineate_hydros_and_produce_HAND.sh index b97d1912d..b69aa339a 100755 --- a/src/delineate_hydros_and_produce_HAND.sh +++ b/src/delineate_hydros_and_produce_HAND.sh @@ -37,18 +37,11 @@ fi echo -e $startDiv"D8 Flow Accumulations $hucNumber $current_branch_id" date -u Tstart -$taudemDir/aread8 -p $tempCurrentBranchDataDir/flowdir_d8_burned_filled_$current_branch_id.tif \ - -ad8 $tempCurrentBranchDataDir/flowaccum_d8_burned_filled_$current_branch_id.tif \ +python3 $srcDir/accumulate_headwaters.py \ + -fd $tempCurrentBranchDataDir/flowdir_d8_burned_filled_$current_branch_id.tif \ + -fa $tempCurrentBranchDataDir/flowaccum_d8_burned_filled_$current_branch_id.tif \ -wg $tempCurrentBranchDataDir/headwaters_$current_branch_id.tif \ - -nc -Tcount - -# THRESHOLD ACCUMULATIONS ## -echo -e $startDiv"Threshold Accumulations $hucNumber $current_branch_id" -date -u -Tstart -$taudemDir/threshold -ssa $tempCurrentBranchDataDir/flowaccum_d8_burned_filled_$current_branch_id.tif \ - -src $tempCurrentBranchDataDir/demDerived_streamPixels_$current_branch_id.tif \ + -stream $tempCurrentBranchDataDir/demDerived_streamPixels_$current_branch_id.tif \ -thresh 1 Tcount