hspf 2.1.1__py3-none-any.whl → 2.1.3__py3-none-any.whl
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.
- hspf/bin/WinHSPFLt/ATCoRend.dbf +0 -0
- hspf/bin/WinHSPFLt/ATCoUnits.mdb +0 -0
- hspf/bin/WinHSPFLt/ERROR.FIL +52657 -0
- hspf/bin/WinHSPFLt/LF90.EER +0 -0
- hspf/bin/WinHSPFLt/LF90WIOD.DLL +0 -0
- hspf/bin/WinHSPFLt/MapWinUtility.dll +0 -0
- hspf/bin/WinHSPFLt/StatusMonitor.exe +0 -0
- hspf/bin/WinHSPFLt/hass_ent.dll +0 -0
- hspf/bin/WinHSPFLt/hspfmsg.wdm +0 -0
- hspf/bin/WinHSPFLt/hspfmsg.wdu +1 -0
- hspf/build_warehouse.py +83 -3
- hspf/hbn.py +160 -31
- hspf/helpers.py +3 -2
- hspf/hspfModel.py +47 -8
- hspf/parser/graph.py +2 -1
- hspf/reports.py +323 -131
- hspf/uci.py +16 -5
- hspf/warehouse.py +41 -34
- {hspf-2.1.1.dist-info → hspf-2.1.3.dist-info}/METADATA +1 -1
- {hspf-2.1.1.dist-info → hspf-2.1.3.dist-info}/RECORD +21 -11
- {hspf-2.1.1.dist-info → hspf-2.1.3.dist-info}/WHEEL +0 -0
hspf/uci.py
CHANGED
|
@@ -221,7 +221,7 @@ class UCI():
|
|
|
221
221
|
for line in self.lines:
|
|
222
222
|
the_file.write(line+'\n')
|
|
223
223
|
|
|
224
|
-
def add_parameter_template(self,block,table_name,table_id,parameter,tpl_char = '~'):
|
|
224
|
+
def add_parameter_template(self,block,table_name,table_id,parameter,tpl_char = '~',opnids = None,single_template = True, group_id = ''):
|
|
225
225
|
|
|
226
226
|
table = self.table(block,table_name,0,False).reset_index()
|
|
227
227
|
column_names,dtypes,starts,stops = self.uci[(block,table_name,table_id)]._delimiters()
|
|
@@ -229,20 +229,31 @@ class UCI():
|
|
|
229
229
|
width = stops[column_names.index(parameter)] - starts[column_names.index(parameter)]
|
|
230
230
|
|
|
231
231
|
ids = ~table[parameter].isna() # Handle comment lines in uci
|
|
232
|
+
parameter = parameter.lower()
|
|
233
|
+
if opnids is not None:
|
|
234
|
+
ids = ids & (table['OPNID'].isin(opnids))
|
|
232
235
|
|
|
233
236
|
# Replace paramter name with PEST/PEST++ specification. Note this does not use the HSPF supplemental file so parameters are limited to width of uci file column
|
|
234
|
-
|
|
235
|
-
|
|
237
|
+
if single_template:
|
|
238
|
+
pest_param = group_id + parameter
|
|
239
|
+
template = tpl_char + pest_param + ' '*(width-len(pest_param)-2)+ tpl_char
|
|
240
|
+
pest_param = [pest_param]
|
|
241
|
+
else:
|
|
242
|
+
pest_param = group_id + parameter + table.loc[ids,'OPNID'].astype(str)
|
|
243
|
+
pest_param = pest_param.tolist()
|
|
244
|
+
template = [tpl_char + pest_param + ' '*(width-len(pest_param)-2)+ tpl_char for pest_param in pest_param]
|
|
245
|
+
#template = pest_param.apply(lambda name: tpl_char + name + ' '*(width-len(name)-1)+ tpl_char)
|
|
236
246
|
|
|
237
|
-
table.loc[ids,parameter] =
|
|
247
|
+
table.loc[ids,parameter.upper()] = template
|
|
238
248
|
table = table.set_index('OPNID')
|
|
239
249
|
self.replace_table(table,block,table_name,table_id)
|
|
250
|
+
return list(set(pest_param))
|
|
240
251
|
|
|
241
252
|
def write_tpl(self,tpl_char = '~',new_tpl_path = None):
|
|
242
253
|
if new_tpl_path is None:
|
|
243
254
|
new_tpl_path = self.filepath.parent.joinpath(self.filepath.stem + '.tpl')
|
|
244
255
|
self.merge_lines()
|
|
245
|
-
self.lines.insert(0,tpl_char)
|
|
256
|
+
self.lines.insert(0,'ptf ' + tpl_char)
|
|
246
257
|
self._write(new_tpl_path)
|
|
247
258
|
|
|
248
259
|
def write(self,new_uci_path):
|
hspf/warehouse.py
CHANGED
|
@@ -46,41 +46,48 @@ def create_hspf_model_hierarchy_tables(con: duckdb.DuckDBPyConnection):
|
|
|
46
46
|
-- Level 1: The overall Model (e.g., for a specific basin)
|
|
47
47
|
CREATE TABLE IF NOT EXISTS hspf.models (
|
|
48
48
|
model_pk BIGINT PRIMARY KEY DEFAULT nextval('hspf.model_seq'),
|
|
49
|
-
model_name VARCHAR NOT NULL
|
|
50
|
-
description VARCHAR
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
-- Level 2: A specific Version of a Model
|
|
54
|
-
CREATE TABLE IF NOT EXISTS hspf.model_versions (
|
|
55
|
-
model_version_pk BIGINT PRIMARY KEY DEFAULT nextval('hspf.model_version_seq'),
|
|
56
|
-
model_pk BIGINT NOT NULL REFERENCES hspf.models(model_pk),
|
|
49
|
+
model_name VARCHAR NOT NULL, -- e.g., 'Nemadji River Basin Model'
|
|
57
50
|
version_name VARCHAR NOT NULL, -- e.g., 'v2.1', '2025_Update'
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
51
|
+
--last_extension DATE,
|
|
52
|
+
--last_update DATE,
|
|
53
|
+
--last_calibration DATE,
|
|
54
|
+
description VARCHAR
|
|
55
|
+
-- release_date DATE,
|
|
56
|
+
UNIQUE (model_name, version_name)
|
|
57
|
+
);
|
|
58
|
+
''')
|
|
59
|
+
|
|
60
|
+
# -- Level 2: A specific Version of a Model
|
|
61
|
+
# CREATE TABLE IF NOT EXISTS hspf.model_versions (
|
|
62
|
+
# model_version_pk BIGINT PRIMARY KEY DEFAULT nextval('hspf.model_version_seq'),
|
|
63
|
+
# model_pk BIGINT NOT NULL REFERENCES hspf.models(model_pk),
|
|
64
|
+
# version_name VARCHAR NOT NULL, -- e.g., 'v2.1', '2025_Update'
|
|
65
|
+
# release_date DATE,
|
|
66
|
+
# description VARCHAR,
|
|
67
|
+
# UNIQUE (model_pk, version_name)
|
|
68
|
+
# );
|
|
69
|
+
|
|
70
|
+
# -- Level 3: A Scenario within a Model Version
|
|
71
|
+
# CREATE TABLE IF NOT EXISTS hspf.scenarios (
|
|
72
|
+
# scenario_pk BIGINT PRIMARY KEY DEFAULT nextval('hspf.scenario_seq'),
|
|
73
|
+
# model_version_pk BIGINT NOT NULL REFERENCES hspf.model_versions(model_version_pk),
|
|
74
|
+
# scenario_name VARCHAR NOT NULL, -- e.g., 'Baseline_2020', 'Future_Climate_BMPs'
|
|
75
|
+
# description VARCHAR,
|
|
76
|
+
# UNIQUE (model_version_pk, scenario_name)
|
|
77
|
+
# );
|
|
78
|
+
|
|
79
|
+
# -- Level 4: A single execution (Run) of a Scenario
|
|
80
|
+
# CREATE TABLE IF NOT EXISTS hspf.model_runs (
|
|
81
|
+
# model_run_pk BIGINT PRIMARY KEY DEFAULT nextval('hspf.model_run_seq'),
|
|
82
|
+
# scenario_pk BIGINT NOT NULL REFERENCES hspf.scenarios(scenario_pk),
|
|
83
|
+
# run_id BIGINT,
|
|
84
|
+
# run_name VARCHAR, -- e.g., 'Run_1995-2015', 'Calibration_Run_A'
|
|
85
|
+
# start_year INTEGER,
|
|
86
|
+
# end_year INTEGER,
|
|
87
|
+
# run_timestamp TIMESTAMP DEFAULT current_timestamp,
|
|
88
|
+
# notes VARCHAR
|
|
89
|
+
# );
|
|
90
|
+
# ''')
|
|
84
91
|
|
|
85
92
|
def create_model_run_table(con: duckdb.DuckDBPyConnection):
|
|
86
93
|
"""
|
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
hspf/Masslink_Timeseries.csv,sha256=TOV6PpR0SBI0FaAU1T-qyD2DyGsBFjUWZenvWXiS3wA,4985
|
|
2
2
|
hspf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
hspf/build_warehouse.py,sha256=
|
|
4
|
-
hspf/hbn.py,sha256
|
|
3
|
+
hspf/build_warehouse.py,sha256=y91vNmdt918H5_jx9nxMUVmRG9ORdChYWEqQbbi3YKs,22861
|
|
4
|
+
hspf/hbn.py,sha256=-db1mC8m7MetQGQ8T_UZZW6KkbVwrVkKE4ub9Ji6i9M,24133
|
|
5
5
|
hspf/hbn2.py,sha256=OmuTVDxd0Boyd3GvBgzEfqvP7CTeYIJYPC7EXPgYu30,13190
|
|
6
6
|
hspf/hbn_cy.c,sha256=ZIJwWxyGx8fE5nM1HBd8-zNotmStGZscqXijl3KSRdI,593464
|
|
7
7
|
hspf/hbn_cy.html,sha256=o8wMdvEE547DRXcUHFPgAkkyJ665b6rloGL-qKClaTo,137735
|
|
8
8
|
hspf/hbn_cy.pyx,sha256=T-itpkvHlxHzQHKtJBS-M8_ToLBa1U_ajpV53hh_oI8,4323
|
|
9
|
-
hspf/helpers.py,sha256=
|
|
10
|
-
hspf/hspfModel.py,sha256=
|
|
11
|
-
hspf/reports.py,sha256=
|
|
12
|
-
hspf/uci.py,sha256=
|
|
9
|
+
hspf/helpers.py,sha256=Jv5lSUKVqML8iJOFfBPcA3bgHn9MbFZC4OO-9YHHP_w,3277
|
|
10
|
+
hspf/hspfModel.py,sha256=Dpf0VHWAdQ7N932u6aYzXDzZCPrJbObW38tP0WRkG0E,10682
|
|
11
|
+
hspf/reports.py,sha256=cDhjMFrUAzU7zzoX4VPyCJvgVLObtApEWTkK1vFsKfQ,57304
|
|
12
|
+
hspf/uci.py,sha256=mi5lkt2bZlO0Lq4S7j3uZsLpHhS6dtdOIaO2Vi0ZNn8,34607
|
|
13
13
|
hspf/validations.py,sha256=BcNT0h5QDZW9lHpXk8KuHQvycl8a_4jQ91srwWFodRo,6666
|
|
14
|
-
hspf/warehouse.py,sha256=
|
|
14
|
+
hspf/warehouse.py,sha256=12Scro1a_hK5IvE9FENAMQv9jKWgtMYtAftJZ4p3nTQ,12239
|
|
15
15
|
hspf/wdm.py,sha256=q0hNqsMNrTkxHtKEX0q0wWlIZabXv6UX2HjNCF9WEW4,12734
|
|
16
16
|
hspf/wdmReader.py,sha256=-akKWB9SpUzXvXoQMeHLZNi_u584KaeEOyHB-YolTWM,22848
|
|
17
|
+
hspf/bin/WinHSPFLt/ATCoRend.dbf,sha256=3bHSDSpL__z1syz6nXlhPrPLnmcsaKDSG1xaiESHwpQ,17743
|
|
18
|
+
hspf/bin/WinHSPFLt/ATCoUnits.mdb,sha256=vJMovhTfyY_2hzzeqLdh-UjId1GV_pVPfesp29J2N18,114688
|
|
19
|
+
hspf/bin/WinHSPFLt/ERROR.FIL,sha256=XKxOp21R0aCEd-ofy3UEQ91XH0V8cxgiURp4Z7J8E6M,1523002
|
|
20
|
+
hspf/bin/WinHSPFLt/LF90.EER,sha256=VpQ92SHdRvIm-OxGMKawKn56ij3-6owFXsYHoZN9mVM,41040
|
|
21
|
+
hspf/bin/WinHSPFLt/LF90WIOD.DLL,sha256=loIi_u234J-fbXq_s_ajMEjalyX3cdnFFtsH6Hm48C4,90112
|
|
22
|
+
hspf/bin/WinHSPFLt/MapWinUtility.dll,sha256=oEcJfvQS7zIGHg5HcRHFv105pySy_V1g2LHwC3zy29o,83456
|
|
23
|
+
hspf/bin/WinHSPFLt/StatusMonitor.exe,sha256=euLR4tKiMYoc7by6Rmem4CAk41Jjecsy4sgUOrRZHFA,39424
|
|
17
24
|
hspf/bin/WinHSPFLt/WinHspfLt.exe,sha256=Afs_nJ62r1VnTL2P4XfiRJ1sH2If5DeGTbcCzoqlanE,74752
|
|
25
|
+
hspf/bin/WinHSPFLt/hass_ent.dll,sha256=jvm_xLGSci4Sm1VSIVy8dS2-wgNn1dqkcth3vkm9IG0,4904448
|
|
26
|
+
hspf/bin/WinHSPFLt/hspfmsg.wdm,sha256=cfUDyfYKX7Lsrlnu9kDylQNhD1X5lFWVqmLyXMLD5m0,1392640
|
|
27
|
+
hspf/bin/WinHSPFLt/hspfmsg.wdu,sha256=Zl04zGkVN_1ifjsHmDyHFYUC3q6bojWm-vzXoXgJOv0,63
|
|
18
28
|
hspf/data/HSPFParameterRanges.csv,sha256=PKz1DRIgpsgTEDrVaSHB9SAGMa5yUBRpyZDc9-CKJJo,28357
|
|
19
29
|
hspf/data/LandUseNames_Mappings.csv,sha256=Bb2toZn6FkPfZ6_8SnzIQvXJ03ycwCuc8uyv4cUowNY,75899
|
|
20
30
|
hspf/data/ParseTable.csv,sha256=ExqUaZg_uUPF5XHGLJEk5_jadnDenKjbwqC4d-iNX_M,193609
|
|
@@ -38,8 +48,8 @@ hspf/data/Timeseries Catalog/RCHRES/OXRX.txt,sha256=NWdRFpJ60LsYzCGHjt8Llay3OI8j
|
|
|
38
48
|
hspf/data/Timeseries Catalog/RCHRES/PLANK.txt,sha256=0MAehIrF8leYQt0Po-9h6IiujzoWOlw-ADCV-bPiqs0,3508
|
|
39
49
|
hspf/data/Timeseries Catalog/RCHRES/SEDTRN.txt,sha256=SiTgD4_YWctTgEfhoMymZfv8ay74xzCRdnI005dXjyE,659
|
|
40
50
|
hspf/parser/__init__.py,sha256=2HvprGVCaJ9L-egvTj1MI-bekq5CNjtSBZfrCtQi3fs,92
|
|
41
|
-
hspf/parser/graph.py,sha256=
|
|
51
|
+
hspf/parser/graph.py,sha256=un5B7PiiaG9aWQHFeD1gHZtlWIIUnx4GG_-IER-4SmU,33119
|
|
42
52
|
hspf/parser/parsers.py,sha256=x3othxQogUmGNe_ctCU20atDrRM_B4lEbVJb3EMbwto,20850
|
|
43
|
-
hspf-2.1.
|
|
44
|
-
hspf-2.1.
|
|
45
|
-
hspf-2.1.
|
|
53
|
+
hspf-2.1.3.dist-info/METADATA,sha256=U-tcOOkBzPIgs2oMbnSdXznyT4oTU2lxvnneVSC5vvk,605
|
|
54
|
+
hspf-2.1.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
55
|
+
hspf-2.1.3.dist-info/RECORD,,
|
|
File without changes
|