py-ewr 2.3.4__py3-none-any.whl → 2.3.6__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.
- py_ewr/evaluate_EWRs.py +10 -7
- py_ewr/parameter_metadata/ewr2obj.csv +43095 -36563
- py_ewr/parameter_metadata/ewr_calc_config.json +63 -49
- py_ewr/parameter_metadata/parameter_sheet.csv +151 -159
- py_ewr/scenario_handling.py +267 -7
- {py_ewr-2.3.4.dist-info → py_ewr-2.3.6.dist-info}/METADATA +3 -2
- {py_ewr-2.3.4.dist-info → py_ewr-2.3.6.dist-info}/RECORD +10 -10
- {py_ewr-2.3.4.dist-info → py_ewr-2.3.6.dist-info}/LICENSE +0 -0
- {py_ewr-2.3.4.dist-info → py_ewr-2.3.6.dist-info}/WHEEL +0 -0
- {py_ewr-2.3.4.dist-info → py_ewr-2.3.6.dist-info}/top_level.txt +0 -0
py_ewr/scenario_handling.py
CHANGED
|
@@ -326,15 +326,24 @@ def cleaner_standard_timeseries(input_df: pd.DataFrame, ewr_table_path: str = No
|
|
|
326
326
|
df_flow.index.name = 'Date'
|
|
327
327
|
df_level.index.name = 'Date'
|
|
328
328
|
|
|
329
|
+
flow_gauges = data_inputs.get_gauges('flow gauges', ewr_table_path=ewr_table_path)
|
|
330
|
+
level_gauges = data_inputs.get_gauges('level gauges', ewr_table_path=ewr_table_path)
|
|
331
|
+
|
|
332
|
+
report = pd.DataFrame(index = list(set(list(flow_gauges) + list(level_gauges))), columns = ['flow', 'level'])
|
|
333
|
+
report['flow'] = 'N'
|
|
334
|
+
report['level'] = 'N'
|
|
335
|
+
|
|
329
336
|
for gauge in cleaned_df.columns:
|
|
330
337
|
gauge_only = extract_gauge_from_string(gauge)
|
|
331
338
|
if 'flow' in gauge:
|
|
332
339
|
df_flow[gauge_only] = cleaned_df[gauge].copy(deep=True)
|
|
340
|
+
report.at[gauge_only, 'flow'] = 'Y'
|
|
333
341
|
if 'level' in gauge:
|
|
334
342
|
df_level[gauge_only] = cleaned_df[gauge].copy(deep=True)
|
|
343
|
+
report.at[gauge_only, 'level'] = 'Y'
|
|
335
344
|
if not gauge_only:
|
|
336
345
|
log.info('Could not identify gauge in column name:', gauge, ', skipping analysis of data in this column.')
|
|
337
|
-
return df_flow, df_level
|
|
346
|
+
return df_flow, df_level, report
|
|
338
347
|
|
|
339
348
|
def cleaner_netcdf_werp(input_df: pd.DataFrame, stations: dict, ewr_table_path: str) -> pd.DataFrame:
|
|
340
349
|
|
|
@@ -486,7 +495,7 @@ def match_MDBA_nodes(input_df: pd.DataFrame, model_metadata: pd.DataFrame, ewr_t
|
|
|
486
495
|
raise ValueError('No relevant gauges and or measurands found in dataset, the EWR tool cannot evaluate this model output file')
|
|
487
496
|
|
|
488
497
|
# report.to_csv('report_v1.csv')
|
|
489
|
-
return df_flow, df_level
|
|
498
|
+
return df_flow, df_level, report
|
|
490
499
|
|
|
491
500
|
|
|
492
501
|
# def match_MDBA_nodes_old(input_df: pd.DataFrame, model_metadata: pd.DataFrame, ewr_table_path: str) -> tuple:
|
|
@@ -597,7 +606,10 @@ class ScenarioHandler:
|
|
|
597
606
|
|
|
598
607
|
def process_scenarios(self):
|
|
599
608
|
|
|
600
|
-
|
|
609
|
+
if self.model_format != 'All Bigmod':
|
|
610
|
+
scenarios = self._get_file_names(self.scenario_file)
|
|
611
|
+
else:
|
|
612
|
+
scenarios = [self.scenario_file]
|
|
601
613
|
|
|
602
614
|
# Analyse all scenarios for EWRs
|
|
603
615
|
detailed_results = {}
|
|
@@ -608,11 +620,12 @@ class ScenarioHandler:
|
|
|
608
620
|
data, header = unpack_model_file(scenarios[scenario], 'Dy', 'Field')
|
|
609
621
|
data = build_MDBA_columns(data, header)
|
|
610
622
|
df_clean = cleaner_MDBA(data)
|
|
611
|
-
|
|
623
|
+
self.df_clean = df_clean
|
|
624
|
+
df_F, df_L, self.report = match_MDBA_nodes(df_clean, data_inputs.get_MDBA_codes(), self.parameter_sheet)
|
|
612
625
|
|
|
613
626
|
elif self.model_format == 'Standard time-series':
|
|
614
627
|
df = pd.read_csv(scenarios[scenario], index_col = 'Date')
|
|
615
|
-
df_F, df_L = cleaner_standard_timeseries(df, self.parameter_sheet)
|
|
628
|
+
df_F, df_L, self.report = cleaner_standard_timeseries(df, self.parameter_sheet)
|
|
616
629
|
|
|
617
630
|
elif self.model_format == 'Source - NSW (res.csv)':
|
|
618
631
|
data, header = unpack_model_file(scenarios[scenario], 'Date', 'Field')
|
|
@@ -627,7 +640,27 @@ class ScenarioHandler:
|
|
|
627
640
|
elif self.model_format == 'ten thousand year':
|
|
628
641
|
df = pd.read_csv(scenarios[scenario], index_col = 'Date')
|
|
629
642
|
df_F, df_L = cleaner_ten_thousand_year(df, self.parameter_sheet)
|
|
630
|
-
|
|
643
|
+
|
|
644
|
+
elif self.model_format == 'All Bigmod':
|
|
645
|
+
|
|
646
|
+
all_data = []
|
|
647
|
+
for scenario_file in scenario:
|
|
648
|
+
print(scenario_file)
|
|
649
|
+
try:
|
|
650
|
+
data, header = unpack_model_file(scenario_file, 'Dy', 'Field')
|
|
651
|
+
data = build_MDBA_columns(data, header)
|
|
652
|
+
all_data.append(data)
|
|
653
|
+
except Exception:
|
|
654
|
+
print(f"failed on {scenario_file}!!")
|
|
655
|
+
|
|
656
|
+
merged_data = all_data[0]
|
|
657
|
+
for i in range(1, len(all_data)):
|
|
658
|
+
merged_data = merged_data.merge(all_data[i], on=['Dy','Mn','Year'])
|
|
659
|
+
|
|
660
|
+
df_clean = cleaner_MDBA(merged_data)
|
|
661
|
+
self.df_clean = df_clean
|
|
662
|
+
df_F, df_L, self.report = match_MDBA_nodes(df_clean, data_inputs.get_MDBA_codes(), self.parameter_sheet)
|
|
663
|
+
|
|
631
664
|
gauge_results = {}
|
|
632
665
|
gauge_events = {}
|
|
633
666
|
|
|
@@ -637,6 +670,10 @@ class ScenarioHandler:
|
|
|
637
670
|
for gauge in all_locations:
|
|
638
671
|
gauge_results[gauge], gauge_events[gauge] = evaluate_EWRs.calc_sorter(df_F, df_L, gauge,
|
|
639
672
|
EWR_table, calc_config)
|
|
673
|
+
|
|
674
|
+
if self.model_format == 'All Bigmod':
|
|
675
|
+
scenario = scenario_file[-10:-4]
|
|
676
|
+
|
|
640
677
|
detailed_results[scenario] = gauge_results
|
|
641
678
|
detailed_events[scenario] = gauge_events
|
|
642
679
|
self.pu_ewr_statistics = detailed_results
|
|
@@ -808,4 +845,227 @@ class ScenarioHandler:
|
|
|
808
845
|
if not self.pu_ewr_statistics:
|
|
809
846
|
self.process_scenarios()
|
|
810
847
|
|
|
811
|
-
|
|
848
|
+
self.ewr_results = summarise_results.summarise(self.pu_ewr_statistics , self.yearly_events, parameter_sheet_path=self.parameter_sheet)
|
|
849
|
+
|
|
850
|
+
return self.ewr_results
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
def log_analysed_results(self):
|
|
854
|
+
'''
|
|
855
|
+
For each unique ewr/pu/gauge - examines the ewr_results dataframe and if it exists here, then it is set to True in the logging_sheet dataframe.
|
|
856
|
+
Create corresponding column in logging_sheet to log info.
|
|
857
|
+
'''
|
|
858
|
+
results = self.ewr_results[["PlanningUnit", "Gauge", "EwrCode"]].copy()
|
|
859
|
+
results["Analysed?"] = True
|
|
860
|
+
self.logging_sheet = self.logging_sheet.merge(right = results, left_on=["PlanningUnitName", "Primary Gauge", "Code"], right_on=["PlanningUnit", "Gauge", "EwrCode"], how="left")
|
|
861
|
+
self.logging_sheet["Analysed?"] = ~self.logging_sheet["Analysed?"].isna()
|
|
862
|
+
self.logging_sheet["Gauge"] = self.logging_sheet["Gauge_x"].copy()
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
def log_if_node_in_siteID(self):
|
|
866
|
+
'''
|
|
867
|
+
For each node, checks if the node is in the siteid file. Note, this is a preliminary check, as it doesn't reveal if a match in the SITEID was made with model data.
|
|
868
|
+
Create corresponding column in logging_sheet to log info.
|
|
869
|
+
TODO: make work with non 'Bigmod - MDBA' siteid's
|
|
870
|
+
'''
|
|
871
|
+
|
|
872
|
+
if self.model_format == 'Bigmod - MDBA':
|
|
873
|
+
self.site_id_df = data_inputs.get_MDBA_codes()[["AWRC", "SITEID"]]
|
|
874
|
+
elif self.model_format == 'All Bigmod':
|
|
875
|
+
self.site_id_df = data_inputs.get_MDBA_codes()[["AWRC", "SITEID"]]
|
|
876
|
+
elif self.model_format == 'Source - NSW (res.csv)':
|
|
877
|
+
pass
|
|
878
|
+
elif self.model_format == 'Standard time-series':
|
|
879
|
+
self.site_id_df = data_inputs.get_MDBA_codes()[["AWRC", "SITEID"]]
|
|
880
|
+
elif self.model_format == 'IQQM - netcdf':
|
|
881
|
+
pass
|
|
882
|
+
elif self.model_format == 'ten thousand year':
|
|
883
|
+
pass
|
|
884
|
+
|
|
885
|
+
self.logging_sheet["node_in_siteID?"] = self.logging_sheet["Gauge"].isin(self.site_id_df["AWRC"].unique())
|
|
886
|
+
|
|
887
|
+
def log_if_gauge_in_model_file(self):
|
|
888
|
+
'''
|
|
889
|
+
For each gauge, check if is in the list of all gauges corresponding to siteID's in the model file.
|
|
890
|
+
Create corresponding column in logging_sheet to log info.
|
|
891
|
+
'''
|
|
892
|
+
site_id_in_model_file = [n for name in self.df_clean.columns for n in name.split("-")]
|
|
893
|
+
self.site_id_df["IN_MODELFILE"] = self.site_id_df["SITEID"].isin(site_id_in_model_file)
|
|
894
|
+
self.gauges_in_model_file = self.site_id_df[self.site_id_df.IN_MODELFILE]["AWRC"]
|
|
895
|
+
self.logging_sheet["gauge_in_model_file?"] = self.logging_sheet["Gauge"].isin(self.gauges_in_model_file)
|
|
896
|
+
|
|
897
|
+
def log_measurand_info(self):
|
|
898
|
+
'''
|
|
899
|
+
Log if the flow and level data has been read in for each gauge.
|
|
900
|
+
Create corresponding column in logging_sheet to log info.
|
|
901
|
+
'''
|
|
902
|
+
self.logging_sheet.loc[:, "gaugeANDmeasurand_in_model_file? (Yes/No)"] = False
|
|
903
|
+
|
|
904
|
+
for idx, row in self.logging_sheet[["Gauge", "GaugeType"]].drop_duplicates().iterrows():
|
|
905
|
+
|
|
906
|
+
gauge = row["Gauge"]
|
|
907
|
+
gauge_type = row["GaugeType"]
|
|
908
|
+
|
|
909
|
+
if gauge_type == 'F':
|
|
910
|
+
full_gauge_type = 'flow'
|
|
911
|
+
else:
|
|
912
|
+
full_gauge_type = 'level'
|
|
913
|
+
|
|
914
|
+
if gauge in set(self.report.index):
|
|
915
|
+
self.logging_sheet.loc[(self.logging_sheet.Gauge == gauge) & (self.logging_sheet.GaugeType == gauge_type), "gaugeANDmeasurand_in_model_file? (Yes/No)"] = self.report.loc[gauge, full_gauge_type] == 'Y'
|
|
916
|
+
|
|
917
|
+
return self.logging_sheet
|
|
918
|
+
|
|
919
|
+
def log_calc_config_info(self):
|
|
920
|
+
'''
|
|
921
|
+
See if a calc config matches for each gauge/pu/ewr combination.
|
|
922
|
+
TODO: make calc config a function with the option to just return the already calculated values
|
|
923
|
+
'''
|
|
924
|
+
calc_config = data_inputs.get_ewr_calc_config(self.calc_config_path)
|
|
925
|
+
|
|
926
|
+
invalid_calc_configs = []
|
|
927
|
+
ewr_keys_in_parameter_sheet = []
|
|
928
|
+
self.logging_sheet["EWR_key"] = None
|
|
929
|
+
|
|
930
|
+
for gauge in self.logging_sheet['Primary Gauge'].unique():
|
|
931
|
+
|
|
932
|
+
PU_items = self.logging_sheet.groupby(['PlanningUnitID', 'PlanningUnitName']).size().reset_index().drop([0], axis=1)
|
|
933
|
+
gauge_table = self.logging_sheet[self.logging_sheet['Primary Gauge'] == gauge]
|
|
934
|
+
|
|
935
|
+
for PU in set(gauge_table['PlanningUnitID']):
|
|
936
|
+
|
|
937
|
+
PU_table = gauge_table[gauge_table['PlanningUnitID'] == PU]
|
|
938
|
+
EWR_categories = PU_table['FlowLevelVolume'].values
|
|
939
|
+
EWR_codes = PU_table['Code']
|
|
940
|
+
|
|
941
|
+
for cat, EWR in zip(EWR_categories, EWR_codes):
|
|
942
|
+
|
|
943
|
+
## CUSTOM MULTIGAUGE CHECK
|
|
944
|
+
item = self.logging_sheet[(self.logging_sheet['Primary Gauge']==gauge) & (self.logging_sheet['Code']==EWR) & (self.logging_sheet['PlanningUnitID']==PU)]
|
|
945
|
+
item = item.replace({np.nan: None})
|
|
946
|
+
mg = item['Multigauge'].to_list()
|
|
947
|
+
|
|
948
|
+
if not mg[0]:
|
|
949
|
+
gauge_calc_type = 'single'
|
|
950
|
+
elif mg[0] == '':
|
|
951
|
+
gauge_calc_type = 'single'
|
|
952
|
+
else:
|
|
953
|
+
gauge_calc_type = 'multigauge'
|
|
954
|
+
####
|
|
955
|
+
|
|
956
|
+
ewr_key = f'{EWR}-{gauge_calc_type}-{cat}'
|
|
957
|
+
self.logging_sheet.loc[((self.logging_sheet['Primary Gauge']==gauge) & (self.logging_sheet['Code']==EWR) & (self.logging_sheet['PlanningUnitID']==PU)), "EWR_key"] = ewr_key
|
|
958
|
+
function_name = evaluate_EWRs.find_function(ewr_key, calc_config)
|
|
959
|
+
ewr_keys_in_parameter_sheet.append(ewr_key)
|
|
960
|
+
|
|
961
|
+
if function_name == 'unknown':
|
|
962
|
+
invalid_calc_configs.append(ewr_key)
|
|
963
|
+
continue
|
|
964
|
+
handle_function = evaluate_EWRs.get_handle_function(function_name)
|
|
965
|
+
if not handle_function:
|
|
966
|
+
invalid_calc_configs.append(ewr_key)
|
|
967
|
+
continue
|
|
968
|
+
|
|
969
|
+
self.logging_sheet["is_in_calc_config?"] = ~self.logging_sheet["EWR_key"].isin(invalid_calc_configs)
|
|
970
|
+
|
|
971
|
+
def log_siteID_info(self):
|
|
972
|
+
"""
|
|
973
|
+
Add the siteID info to the logging_sheet. Add the siteID of that gauge it matched with, as well as a list of all siteIDs for that gauge that it didn't match with. (i.e. the "spares" not in the model file.)
|
|
974
|
+
"""
|
|
975
|
+
## add the matching siteID info
|
|
976
|
+
spare_siteID_df = self.site_id_df[self.site_id_df.AWRC.isin(self.gauges_in_model_file) & ~self.site_id_df.IN_MODELFILE].astype(str)
|
|
977
|
+
spare_siteID_df = spare_siteID_df.groupby("AWRC").agg({'SITEID': 'sum'})
|
|
978
|
+
# spare_siteID_df = spare_siteID_df.groupby("AWRC").agg({'SITEID': lambda x: list(x)})
|
|
979
|
+
spare_siteID_df = spare_siteID_df.rename(columns={"SITEID": "spare_SITEID"})
|
|
980
|
+
|
|
981
|
+
self.logging_sheet = self.logging_sheet.merge(right = spare_siteID_df, left_on=["Gauge"], right_index=True, how="left")
|
|
982
|
+
|
|
983
|
+
### section to add the used SITEID
|
|
984
|
+
used_siteID_df = self.site_id_df[self.site_id_df.IN_MODELFILE][["AWRC", "SITEID"]]
|
|
985
|
+
used_siteID_df = used_siteID_df.rename(columns={"SITEID": "matched_SITEID"})
|
|
986
|
+
used_siteID_df = used_siteID_df.set_index("AWRC")
|
|
987
|
+
|
|
988
|
+
self.logging_sheet = self.logging_sheet.merge(right = used_siteID_df, left_on=["Gauge"], right_index=True, how="left")
|
|
989
|
+
|
|
990
|
+
# mark spare_SITEID column of those that dont have more than one SITEID to match with as EXACT MATCHES
|
|
991
|
+
self.logging_sheet.loc[~self.logging_sheet.matched_SITEID.isna() & self.logging_sheet.spare_SITEID.isna(), "spare_SITEID"] = "EXACT_MATCH"
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
def create_multi_index(self, logging_sheet):
|
|
995
|
+
|
|
996
|
+
logging_sheet.insert(loc=4, column='Primary Gauge', value=logging_sheet.Gauge.values)
|
|
997
|
+
|
|
998
|
+
## Multigauge
|
|
999
|
+
|
|
1000
|
+
rows_to_duplicate = logging_sheet.loc[(~logging_sheet["Multigauge"].isna()),:]
|
|
1001
|
+
|
|
1002
|
+
for counter, (idx, row) in enumerate(rows_to_duplicate.iterrows()):
|
|
1003
|
+
updated_idx = counter + idx # update idx to account for all inserted rows
|
|
1004
|
+
duplicate_row = logging_sheet.loc[updated_idx, :].copy()
|
|
1005
|
+
duplicate_row["Gauge"] = logging_sheet.loc[updated_idx, "Multigauge"]
|
|
1006
|
+
logging_sheet = pd.DataFrame(np.insert(logging_sheet.values, updated_idx+1, values=duplicate_row.values, axis=0), columns=logging_sheet.columns)
|
|
1007
|
+
|
|
1008
|
+
## Weirpool
|
|
1009
|
+
|
|
1010
|
+
rows_to_duplicate = logging_sheet.loc[(~logging_sheet["WeirpoolGauge"].isna()),:]
|
|
1011
|
+
|
|
1012
|
+
for counter, (idx, row) in enumerate(rows_to_duplicate.iterrows()):
|
|
1013
|
+
updated_idx = counter + idx # update idx to account for all inserted rows
|
|
1014
|
+
duplicate_row = logging_sheet.loc[updated_idx, :].copy()
|
|
1015
|
+
duplicate_row["Gauge"] = logging_sheet.loc[updated_idx, "WeirpoolGauge"]
|
|
1016
|
+
duplicate_row["GaugeType"] = "L"
|
|
1017
|
+
logging_sheet = pd.DataFrame(np.insert(logging_sheet.values, updated_idx+1, values=duplicate_row.values, axis=0), columns=logging_sheet.columns)
|
|
1018
|
+
|
|
1019
|
+
## Barrage Gauges
|
|
1020
|
+
|
|
1021
|
+
barrage_flow_gauges = data_inputs.get_barrage_flow_gauges()
|
|
1022
|
+
barrage_level_gauges = data_inputs.get_barrage_level_gauges()
|
|
1023
|
+
|
|
1024
|
+
## Because all barrage flow gauges have GaugeType flow, and all barrage level gauges have GaugeType level, the logic of the code to copy the GaugeType and modify the gauge name means they can be done at the same time.
|
|
1025
|
+
|
|
1026
|
+
dict_gauges = {**barrage_flow_gauges, **barrage_level_gauges}
|
|
1027
|
+
|
|
1028
|
+
for gauge, gauge_list in dict_gauges.items():
|
|
1029
|
+
|
|
1030
|
+
counter = 0
|
|
1031
|
+
rows_to_duplicate = logging_sheet.loc[(logging_sheet["Primary Gauge"] == gauge),:]
|
|
1032
|
+
|
|
1033
|
+
for idx, row in rows_to_duplicate.iterrows():
|
|
1034
|
+
|
|
1035
|
+
updated_idx = idx + counter # update idx to account for all inserted rows
|
|
1036
|
+
duplicate_row = logging_sheet.loc[updated_idx, :].copy()
|
|
1037
|
+
|
|
1038
|
+
rows_to_insert = pd.DataFrame([duplicate_row] * len(gauge_list))
|
|
1039
|
+
rows_to_insert["Gauge"] = gauge_list
|
|
1040
|
+
|
|
1041
|
+
logging_sheet.drop(index=updated_idx, axis=0, inplace=True)
|
|
1042
|
+
|
|
1043
|
+
logging_sheet = pd.DataFrame(np.insert(logging_sheet.values, updated_idx, values=rows_to_insert.values, axis=0), columns=logging_sheet.columns)
|
|
1044
|
+
|
|
1045
|
+
counter += len(gauge_list) - 1
|
|
1046
|
+
|
|
1047
|
+
return logging_sheet
|
|
1048
|
+
|
|
1049
|
+
def get_logs(self) -> pd.DataFrame:
|
|
1050
|
+
"""
|
|
1051
|
+
Create the logging sheet
|
|
1052
|
+
TODO: ensure that self.get_ewr_results() has been run and if not make it run.
|
|
1053
|
+
"""
|
|
1054
|
+
parameter_sheet = pd.read_csv(self.parameter_sheet)
|
|
1055
|
+
|
|
1056
|
+
self.logging_sheet = parameter_sheet.copy()[["PlanningUnitName", "Code", "Gauge", "GaugeType", 'PlanningUnitID', 'FlowLevelVolume', "Multigauge", "WeirpoolGauge"]]
|
|
1057
|
+
|
|
1058
|
+
self.logging_sheet = self.create_multi_index(self.logging_sheet)
|
|
1059
|
+
|
|
1060
|
+
self.log_analysed_results()
|
|
1061
|
+
self.log_if_node_in_siteID()
|
|
1062
|
+
self.log_if_gauge_in_model_file()
|
|
1063
|
+
self.log_measurand_info()
|
|
1064
|
+
self.log_calc_config_info()
|
|
1065
|
+
self.log_siteID_info()
|
|
1066
|
+
|
|
1067
|
+
self.logging_sheet = self.logging_sheet[["PlanningUnitName", "Code", "Primary Gauge", "Gauge", "GaugeType", "is_in_calc_config?", "node_in_siteID?", "gauge_in_model_file?", "gaugeANDmeasurand_in_model_file? (Yes/No)", "matched_SITEID", "spare_SITEID", "Analysed?"]]
|
|
1068
|
+
|
|
1069
|
+
return self.logging_sheet
|
|
1070
|
+
|
|
1071
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: py_ewr
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.6
|
|
4
4
|
Summary: Environmental Water Requirement calculator
|
|
5
5
|
Home-page: https://github.com/MDBAuth/EWR_tool
|
|
6
6
|
Author: Martin Job
|
|
@@ -43,9 +43,10 @@ Dynamic: summary
|
|
|
43
43
|
[](https://pypi.org/project/py-ewr/)
|
|
44
44
|
[](https://zenodo.org/badge/latestdoi/342122359)
|
|
45
45
|
|
|
46
|
-
### **EWR tool version 2.3.
|
|
46
|
+
### **EWR tool version 2.3.6 README**
|
|
47
47
|
|
|
48
48
|
### **Notes on recent version updates**
|
|
49
|
+
- Including metadata report (this is still being ironed out and tested)
|
|
49
50
|
- CLLMM_c and CLLMM_d ewrs are now able to be calculated without all barrage level gauges being present in the model file.
|
|
50
51
|
- Including draft objective mapping files in the package (see below sub heading **Objective mapping** for more information). Objective mapping has been therefore pulled out of the parameter sheet
|
|
51
52
|
- Including an example parallel processing script for running the EWR tool
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
py_ewr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
py_ewr/data_inputs.py,sha256=oUiEiLY_CmbvqF5GlV-3Yfz_JZ1qZNvta-VEYCzAcso,20124
|
|
3
|
-
py_ewr/evaluate_EWRs.py,sha256=
|
|
3
|
+
py_ewr/evaluate_EWRs.py,sha256=NC6FYWT5jEAEpV3bp5T1CuYUJjnz1bqiamRoKTptpqE,231607
|
|
4
4
|
py_ewr/io.py,sha256=Is0xPAzLx6-ylpTFyYJxMimkNVxxoTxUcknTk6bQbgs,840
|
|
5
5
|
py_ewr/observed_handling.py,sha256=JTSK_2obhqNWJ2QknykywevNMN0fsvGXSejFwUSpMoA,18112
|
|
6
|
-
py_ewr/scenario_handling.py,sha256=
|
|
6
|
+
py_ewr/scenario_handling.py,sha256=G7q2qpRU4xwusUeztDEHkRVdl4vnVaI_EfEchKTRhq0,48878
|
|
7
7
|
py_ewr/summarise_results.py,sha256=rFaAUVR4jIsjeRl4ocPFE2RUoJJBZgZ2wPEBh-dfEsc,31761
|
|
8
8
|
py_ewr/model_metadata/SiteID_MDBA.csv,sha256=orbh3QIRbOkUjCB2hcdpeUvhepnY_3ywldu22s45d5Y,168771
|
|
9
9
|
py_ewr/model_metadata/SiteID_NSW.csv,sha256=UVBxN43Z5KWCvWhQ5Rh6TNEn35q4_sjPxKyHg8wPFws,6805
|
|
10
10
|
py_ewr/model_metadata/iqqm_stations.csv,sha256=vl4CPtPslG5VplSzf_yLZulTrmab-mEBHOfzFtS1kf4,110
|
|
11
|
-
py_ewr/parameter_metadata/ewr2obj.csv,sha256=
|
|
12
|
-
py_ewr/parameter_metadata/ewr_calc_config.json,sha256=
|
|
11
|
+
py_ewr/parameter_metadata/ewr2obj.csv,sha256=qvD-skiQiiMq3YABPUte8OdYGQD5Nesr0UvQMAsXnXU,4509292
|
|
12
|
+
py_ewr/parameter_metadata/ewr_calc_config.json,sha256=XfaJnFrAkGGBY4MRcsO5CH9SJ_K0989C4NAZYIVr_b0,18369
|
|
13
13
|
py_ewr/parameter_metadata/obj2target.csv,sha256=f6kLVyBhXUpGR4b0dzLbBvZbfpn3OxOhaB4aouO6Bvw,1593877
|
|
14
14
|
py_ewr/parameter_metadata/obj2yrtarget.csv,sha256=G8XgdCrOpB0xhp6n7DIS4Vcq69Kpgb1Pum7Ay3a_YPU,54882
|
|
15
|
-
py_ewr/parameter_metadata/parameter_sheet.csv,sha256
|
|
16
|
-
py_ewr-2.3.
|
|
17
|
-
py_ewr-2.3.
|
|
18
|
-
py_ewr-2.3.
|
|
19
|
-
py_ewr-2.3.
|
|
20
|
-
py_ewr-2.3.
|
|
15
|
+
py_ewr/parameter_metadata/parameter_sheet.csv,sha256=-wYjN-5vkYlUCzmsBLIZ1w3BI1RHO1iXMxZAg1inguA,766656
|
|
16
|
+
py_ewr-2.3.6.dist-info/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
|
|
17
|
+
py_ewr-2.3.6.dist-info/METADATA,sha256=mi-YtShE31W-5G0kgY-MpeJLAyKpeG4VwPBd-TAFP5o,12974
|
|
18
|
+
py_ewr-2.3.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
19
|
+
py_ewr-2.3.6.dist-info/top_level.txt,sha256=n3725d-64Cjyb-YMUMV64UAuIflzUh2_UZSxiIbrur4,7
|
|
20
|
+
py_ewr-2.3.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|