ngiab-data-preprocess 4.0.4__tar.gz → 4.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/PKG-INFO +3 -2
  2. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/create_realization.py +23 -3
  3. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/gpkg_utils.py +19 -1
  4. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/subset.py +8 -3
  5. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/templates/index.html +4 -4
  6. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_cli/__main__.py +9 -2
  7. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_preprocess.egg-info/PKG-INFO +3 -2
  8. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/pyproject.toml +1 -1
  9. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/.github/workflows/build_only.yml +0 -0
  10. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/.github/workflows/publish.yml +0 -0
  11. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/.gitignore +0 -0
  12. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/LICENSE +0 -0
  13. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/README.md +0 -0
  14. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/map.html +0 -0
  15. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/dataset_utils.py +0 -0
  16. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/datasets.py +0 -0
  17. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/file_paths.py +0 -0
  18. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/forcings.py +0 -0
  19. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/graph_utils.py +0 -0
  20. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_processing/s3fs_utils.py +0 -0
  21. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/cfe-nowpm-realization-template.json +0 -0
  22. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/cfe-template.ini +0 -0
  23. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/em-catchment-template.yml +0 -0
  24. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/em-config.yml +0 -0
  25. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/em-realization-template.json +0 -0
  26. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/forcing_template.nc +0 -0
  27. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/ngen-routing-template.yaml +0 -0
  28. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/noah-owp-modular-init.namelist.input +0 -0
  29. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/source_validation.py +0 -0
  30. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/template.sql +0 -0
  31. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/data_sources/triggers.sql +0 -0
  32. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/__init__.py +0 -0
  33. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/__main__.py +0 -0
  34. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/css/console.css +0 -0
  35. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/css/main.css +0 -0
  36. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/css/toggle.css +0 -0
  37. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/js/console.js +0 -0
  38. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/js/data_processing.js +0 -0
  39. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/js/main.js +0 -0
  40. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/resources/dark-style.json +0 -0
  41. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/resources/light-style.json +0 -0
  42. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/resources/loading.gif +0 -0
  43. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/static/resources/screenshot.jpg +0 -0
  44. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/map_app/views.py +0 -0
  45. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_cli/arguments.py +0 -0
  46. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_cli/custom_logging.py +0 -0
  47. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_cli/forcing_cli.py +0 -0
  48. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_preprocess.egg-info/SOURCES.txt +0 -0
  49. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_preprocess.egg-info/dependency_links.txt +0 -0
  50. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_preprocess.egg-info/entry_points.txt +0 -0
  51. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_preprocess.egg-info/requires.txt +0 -0
  52. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/modules/ngiab_data_preprocess.egg-info/top_level.txt +0 -0
  53. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/output/.gitkeep +0 -0
  54. {ngiab_data_preprocess-4.0.4 → ngiab_data_preprocess-4.1.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: ngiab_data_preprocess
3
- Version: 4.0.4
3
+ Version: 4.1.0
4
4
  Summary: Graphical Tools for creating Next Gen Water model input data.
5
5
  Author-email: Josh Cunningham <jcunningham8@ua.edu>
6
6
  Project-URL: Homepage, https://github.com/CIROH-UA/NGIAB_data_preprocess
@@ -37,6 +37,7 @@ Provides-Extra: eval
37
37
  Requires-Dist: ngiab_eval; extra == "eval"
38
38
  Provides-Extra: plot
39
39
  Requires-Dist: ngiab_eval[plot]; extra == "plot"
40
+ Dynamic: license-file
40
41
 
41
42
  # NGIAB Data Preprocess
42
43
 
@@ -4,6 +4,7 @@ import sqlite3
4
4
  from datetime import datetime
5
5
  from pathlib import Path
6
6
  import shutil
7
+ import requests
7
8
 
8
9
  import pandas
9
10
  import s3fs
@@ -309,18 +310,37 @@ def create_em_realization(cat_id: str, start_time: datetime, end_time: datetime)
309
310
  create_partitions(paths)
310
311
 
311
312
 
312
- def create_realization(cat_id: str, start_time: datetime, end_time: datetime, use_nwm_gw: bool = False):
313
+ def create_realization(
314
+ cat_id: str,
315
+ start_time: datetime,
316
+ end_time: datetime,
317
+ use_nwm_gw: bool = False,
318
+ gage_id: str = None,
319
+ ):
313
320
  paths = file_paths(cat_id)
314
321
 
315
- # get approximate groundwater levels from nwm output
316
322
  template_path = paths.template_cfe_nowpm_realization_config
317
-
323
+
324
+ if gage_id is not None:
325
+ # try and download s3:communityhydrofabric/hydrofabrics/community/gage_parameters/gage_id
326
+ # if it doesn't exist, use the default
327
+ try:
328
+ url = f"https://communityhydrofabric.s3.us-east-1.amazonaws.com/hydrofabrics/community/gage_parameters/{gage_id}.json"
329
+
330
+ new_template = requests.get(url).json()
331
+ template_path = paths.config_dir / "calibrated_params.json"
332
+ with open(template_path, "w") as f:
333
+ json.dump(new_template, f)
334
+ except Exception as e:
335
+ logger.warning(f"Failed to download gage parameters")
336
+
318
337
  conf_df = get_model_attributes(paths.geopackage_path)
319
338
 
320
339
  if use_nwm_gw:
321
340
  gw_levels = get_approximate_gw_storage(paths, start_time)
322
341
  else:
323
342
  gw_levels = dict()
343
+
324
344
  make_cfe_config(conf_df, paths, gw_levels)
325
345
 
326
346
  make_noahowp_config(paths.config_dir, conf_df, start_time, end_time)
@@ -317,15 +317,33 @@ def subset_table_by_vpu(table: str, vpu: str, hydrofabric: Path, subset_gpkg_nam
317
317
  sql_query = f"SELECT * FROM '{table}' WHERE vpuid IN ({','.join(vpus)})"
318
318
  contents = source_db.execute(sql_query).fetchall()
319
319
 
320
+ if table == "network":
321
+ # Look for the network entry that has a toid not in the flowpath or nexus tables
322
+ network_toids = [x[2] for x in contents]
323
+ print(f"Network toids: {len(network_toids)}")
324
+ sql = "SELECT id FROM flowpaths"
325
+ flowpath_ids = [x[0] for x in dest_db.execute(sql).fetchall()]
326
+ print(f"Flowpath ids: {len(flowpath_ids)}")
327
+ sql = "SELECT id FROM nexus"
328
+ nexus_ids = [x[0] for x in dest_db.execute(sql).fetchall()]
329
+ print(f"Nexus ids: {len(nexus_ids)}")
330
+ bad_ids = set(network_toids) - set(flowpath_ids + nexus_ids)
331
+ print(bad_ids)
332
+ print(f"Removing {len(bad_ids)} network entries that are not in flowpaths or nexuses")
333
+ # id column is second after fid
334
+ contents = [x for x in contents if x[1] not in bad_ids]
335
+
320
336
  insert_data(dest_db, table, contents)
321
337
 
338
+
322
339
  if table in get_feature_tables(file_paths.conus_hydrofabric):
323
340
  fids = [str(x[0]) for x in contents]
324
341
  copy_rTree_tables(table, fids, source_db, dest_db)
325
342
 
326
343
  dest_db.commit()
327
344
  source_db.close()
328
- dest_db.close()
345
+ dest_db.close()
346
+
329
347
 
330
348
  def subset_table(table: str, ids: List[str], hydrofabric: Path, subset_gpkg_name: Path) -> None:
331
349
  """
@@ -22,13 +22,16 @@ subset_tables = [
22
22
  "flowpath-attributes-ml",
23
23
  "flowpaths",
24
24
  "hydrolocations",
25
- "network",
26
25
  "nexus",
27
26
  "pois", # requires flowpaths
28
27
  "lakes", # requires pois
28
+ "network",
29
29
  ]
30
30
 
31
- def create_subset_gpkg(ids: Union[List[str],str], hydrofabric: Path, output_gpkg_path: Path, is_vpu: bool = False) -> Path:
31
+
32
+ def create_subset_gpkg(
33
+ ids: Union[List[str], str], hydrofabric: Path, output_gpkg_path: Path, is_vpu: bool = False
34
+ ) -> Path:
32
35
  # ids is a list of nexus and wb ids, or a single vpu id
33
36
  if not isinstance(ids, list):
34
37
  ids = [ids]
@@ -42,12 +45,13 @@ def create_subset_gpkg(ids: Union[List[str],str], hydrofabric: Path, output_gpkg
42
45
  for table in subset_tables:
43
46
  if is_vpu:
44
47
  subset_table_by_vpu(table, ids[0], hydrofabric, output_gpkg_path)
45
- else:
48
+ else:
46
49
  subset_table(table, ids, hydrofabric, output_gpkg_path)
47
50
 
48
51
  add_triggers_to_gpkg(output_gpkg_path)
49
52
  update_geopackage_metadata(output_gpkg_path)
50
53
 
54
+
51
55
  def subset_vpu(vpu_id: str, output_gpkg_path: Path, hydrofabric: Path = file_paths.conus_hydrofabric):
52
56
 
53
57
  if output_gpkg_path.exists():
@@ -77,6 +81,7 @@ def subset(
77
81
  logger.info(f"Subset complete for {len(upstream_ids)} features (catchments + nexuses)")
78
82
  logger.debug(f"Subset complete for {upstream_ids} catchments")
79
83
 
84
+
80
85
  def move_files_to_config_dir(subset_output_dir: str) -> None:
81
86
  config_dir = subset_output_dir / "config"
82
87
  config_dir.mkdir(parents=True, exist_ok=True)
@@ -10,9 +10,9 @@
10
10
  <link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
11
11
  <link rel="stylesheet" href="{{ url_for('static', filename='css/toggle.css') }}">
12
12
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
13
- <script src="https://unpkg.com/maplibre-gl@^4.7.1/dist/maplibre-gl.js"></script>
14
- <script src="https://unpkg.com/pmtiles@3.0.6/dist/pmtiles.js"></script>
15
- <link href="https://unpkg.com/maplibre-gl@^4.7.1/dist/maplibre-gl.css" rel="stylesheet" />
13
+ <script src="https://unpkg.com/maplibre-gl@^5.2.0/dist/maplibre-gl.js"></script>
14
+ <script src="https://unpkg.com/pmtiles@latest/dist/pmtiles.js"></script>
15
+ <link href="https://unpkg.com/maplibre-gl@^5.2.0/dist/maplibre-gl.css" rel="stylesheet" />
16
16
  </head>
17
17
 
18
18
  <body>
@@ -130,4 +130,4 @@
130
130
 
131
131
  </body>
132
132
 
133
- </html>
133
+ </html>
@@ -169,13 +169,20 @@ def main() -> None:
169
169
 
170
170
  if args.realization:
171
171
  logging.info(f"Creating realization from {args.start_date} to {args.end_date}...")
172
+ gage_id = None
173
+ if args.gage:
174
+ gage_id = args.input_feature
172
175
  if args.empirical_model:
173
176
  create_em_realization(
174
177
  output_folder, start_time=args.start_date, end_time=args.end_date
175
178
  )
176
179
  else:
177
180
  create_realization(
178
- output_folder, start_time=args.start_date, end_time=args.end_date, use_nwm_gw=args.nwm_gw
181
+ output_folder,
182
+ start_time=args.start_date,
183
+ end_time=args.end_date,
184
+ use_nwm_gw=args.nwm_gw,
185
+ gage_id=gage_id,
179
186
  )
180
187
  logging.info("Realization creation complete.")
181
188
 
@@ -198,7 +205,7 @@ def main() -> None:
198
205
  except:
199
206
  logging.error("Docker is not running, please start Docker and try again.")
200
207
  try:
201
- #command = f'docker run --rm -it -v "{str(paths.subset_dir)}:/ngen/ngen/data" joshcu/ngiab /ngen/ngen/data/ auto {num_partitions} local'
208
+ # command = f'docker run --rm -it -v "{str(paths.subset_dir)}:/ngen/ngen/data" joshcu/ngiab /ngen/ngen/data/ auto {num_partitions} local'
202
209
  command = f'docker run --rm -it -v "{str(paths.subset_dir)}:/ngen/ngen/data" awiciroh/ciroh-ngen-image:latest /ngen/ngen/data/ auto {num_partitions} local'
203
210
  subprocess.run(command, shell=True)
204
211
  logging.info("Next Gen run complete.")
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: ngiab_data_preprocess
3
- Version: 4.0.4
3
+ Version: 4.1.0
4
4
  Summary: Graphical Tools for creating Next Gen Water model input data.
5
5
  Author-email: Josh Cunningham <jcunningham8@ua.edu>
6
6
  Project-URL: Homepage, https://github.com/CIROH-UA/NGIAB_data_preprocess
@@ -37,6 +37,7 @@ Provides-Extra: eval
37
37
  Requires-Dist: ngiab_eval; extra == "eval"
38
38
  Provides-Extra: plot
39
39
  Requires-Dist: ngiab_eval[plot]; extra == "plot"
40
+ Dynamic: license-file
40
41
 
41
42
  # NGIAB Data Preprocess
42
43
 
@@ -12,7 +12,7 @@ exclude = ["tests*"]
12
12
 
13
13
  [project]
14
14
  name = "ngiab_data_preprocess"
15
- version = "v4.0.4"
15
+ version = "v4.1.0"
16
16
  authors = [{ name = "Josh Cunningham", email = "jcunningham8@ua.edu" }]
17
17
  description = "Graphical Tools for creating Next Gen Water model input data."
18
18
  readme = "README.md"