pypromice 1.4.3__py3-none-any.whl → 1.5.0__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.
Potentially problematic release.
This version of pypromice might be problematic. Click here for more details.
- pypromice/postprocess/bufr_utilities.py +2 -1
- pypromice/process/L1toL2.py +43 -34
- pypromice/process/L2toL3.py +221 -221
- pypromice/process/aws.py +1 -39
- pypromice/process/join_l3.py +3 -3
- pypromice/process/resample.py +6 -5
- pypromice/process/value_clipping.py +15 -14
- pypromice/process/write.py +21 -37
- pypromice/resources/variable_aliases_GC-Net.csv +2 -2
- pypromice/resources/variables.csv +33 -33
- pypromice/tx/payload_formats.csv +1 -0
- pypromice/utilities/dependency_graph.py +101 -0
- {pypromice-1.4.3.dist-info → pypromice-1.5.0.dist-info}/METADATA +7 -7
- {pypromice-1.4.3.dist-info → pypromice-1.5.0.dist-info}/RECORD +18 -17
- {pypromice-1.4.3.dist-info → pypromice-1.5.0.dist-info}/WHEEL +1 -1
- {pypromice-1.4.3.dist-info → pypromice-1.5.0.dist-info}/LICENSE.txt +0 -0
- {pypromice-1.4.3.dist-info → pypromice-1.5.0.dist-info}/entry_points.txt +0 -0
- {pypromice-1.4.3.dist-info → pypromice-1.5.0.dist-info}/top_level.txt +0 -0
pypromice/process/aws.py
CHANGED
|
@@ -94,7 +94,7 @@ class AWS(object):
|
|
|
94
94
|
formats = {dataset.attrs["format"].lower() for dataset in self.L0}
|
|
95
95
|
if "raw" in formats:
|
|
96
96
|
self.format = "raw"
|
|
97
|
-
elif "
|
|
97
|
+
elif "stm" in formats:
|
|
98
98
|
self.format = "STM"
|
|
99
99
|
elif "tx" in formats:
|
|
100
100
|
self.format = "tx"
|
|
@@ -123,22 +123,6 @@ class AWS(object):
|
|
|
123
123
|
self.getL2()
|
|
124
124
|
self.getL3()
|
|
125
125
|
|
|
126
|
-
def writeL2(self, outpath):
|
|
127
|
-
"""Write L2 data to .csv and .nc file"""
|
|
128
|
-
if os.path.isdir(outpath):
|
|
129
|
-
self.writeArr(self.L2, outpath)
|
|
130
|
-
else:
|
|
131
|
-
logger.info(f"Outpath f{outpath} does not exist. Unable to save to file")
|
|
132
|
-
pass
|
|
133
|
-
|
|
134
|
-
def writeL3(self, outpath):
|
|
135
|
-
"""Write L3 data to .csv and .nc file"""
|
|
136
|
-
if os.path.isdir(outpath):
|
|
137
|
-
self.writeArr(self.L3, outpath)
|
|
138
|
-
else:
|
|
139
|
-
logger.info(f"Outpath f{outpath} does not exist. Unable to save to file")
|
|
140
|
-
pass
|
|
141
|
-
|
|
142
126
|
def getL1(self):
|
|
143
127
|
"""Perform L0 to L1 data processing"""
|
|
144
128
|
logger.info("Level 1 processing...")
|
|
@@ -164,28 +148,6 @@ class AWS(object):
|
|
|
164
148
|
logger.info("Level 3 processing...")
|
|
165
149
|
self.L3 = toL3(self.L2, data_adjustments_dir=self.data_issues_repository / "adjustments")
|
|
166
150
|
|
|
167
|
-
def writeArr(self, dataset, outpath, t=None):
|
|
168
|
-
"""Write L3 data to .nc and .csv hourly and daily files
|
|
169
|
-
|
|
170
|
-
Parameters
|
|
171
|
-
----------
|
|
172
|
-
dataset : xarray.Dataset
|
|
173
|
-
Dataset to write to file
|
|
174
|
-
outpath : str
|
|
175
|
-
Output directory
|
|
176
|
-
t : str
|
|
177
|
-
Resampling string. This is automatically defined based
|
|
178
|
-
on the data type if not given. The default is None.
|
|
179
|
-
"""
|
|
180
|
-
if t is not None:
|
|
181
|
-
write.prepare_and_write(dataset, outpath, self.vars, self.meta, t)
|
|
182
|
-
else:
|
|
183
|
-
f = [l.attrs["format"] for l in self.L0]
|
|
184
|
-
if "raw" in f or "STM" in f:
|
|
185
|
-
write.prepare_and_write(dataset, outpath, self.vars, self.meta, "10min")
|
|
186
|
-
else:
|
|
187
|
-
write.prepare_and_write(dataset, outpath, self.vars, self.meta, "60min")
|
|
188
|
-
|
|
189
151
|
def loadConfig(self, config_file, inpath):
|
|
190
152
|
"""Load configuration from .toml file
|
|
191
153
|
|
pypromice/process/join_l3.py
CHANGED
|
@@ -538,9 +538,9 @@ def join_l3(config_folder, site, folder_l3, folder_gcnet, outpath, variables, me
|
|
|
538
538
|
v = pypromice.resources.load_variables(variables)
|
|
539
539
|
m = pypromice.resources.load_metadata(metadata)
|
|
540
540
|
if outpath is not None:
|
|
541
|
-
prepare_and_write(l3_merged, outpath, v, m, "60min")
|
|
542
|
-
prepare_and_write(l3_merged, outpath, v, m, "1D")
|
|
543
|
-
prepare_and_write(l3_merged, outpath, v, m, "M")
|
|
541
|
+
prepare_and_write(l3_merged, outpath, v, m, "60min", nc_compression=True)
|
|
542
|
+
prepare_and_write(l3_merged, outpath, v, m, "1D", nc_compression=True)
|
|
543
|
+
prepare_and_write(l3_merged, outpath, v, m, "M", nc_compression=True)
|
|
544
544
|
return l3_merged, sorted_list_station_data
|
|
545
545
|
|
|
546
546
|
|
pypromice/process/resample.py
CHANGED
|
@@ -51,12 +51,13 @@ def resample_dataset(ds_h, t):
|
|
|
51
51
|
# taking the 10 min data and using it as instantaneous values:
|
|
52
52
|
is_10_minutes_timestamp = (ds_h.time.diff(dim='time') / np.timedelta64(1, 's') == 600)
|
|
53
53
|
if (t == '60min') and is_10_minutes_timestamp.any():
|
|
54
|
-
cols_to_update = ['p_i', 't_i', 'rh_i', '
|
|
54
|
+
cols_to_update = ['p_i', 't_i', 'rh_i', 'rh_i_wrt_ice_or_water', 'wspd_i', 'wdir_i','wspd_x_i','wspd_y_i']
|
|
55
|
+
cols_origin = ['p_u', 't_u', 'rh_u', 'rh_u_wrt_ice_or_water', 'wspd_u', 'wdir_u','wspd_x_u','wspd_y_u']
|
|
55
56
|
timestamp_10min = ds_h.time.where(is_10_minutes_timestamp, drop=True).to_index()
|
|
56
57
|
timestamp_round_hour = df_d.index
|
|
57
58
|
timestamp_to_update = timestamp_round_hour.intersection(timestamp_10min)
|
|
58
59
|
|
|
59
|
-
for col in cols_to_update:
|
|
60
|
+
for col, col_org in zip(cols_to_update, cols_origin):
|
|
60
61
|
if col not in df_d.columns:
|
|
61
62
|
df_d[col] = np.nan
|
|
62
63
|
else:
|
|
@@ -67,7 +68,7 @@ def resample_dataset(ds_h, t):
|
|
|
67
68
|
timestamp_to_update = timestamp_to_update[missing_instantaneous]
|
|
68
69
|
df_d.loc[timestamp_to_update, col] = ds_h.reindex(
|
|
69
70
|
time= timestamp_to_update
|
|
70
|
-
)[
|
|
71
|
+
)[col_org].values
|
|
71
72
|
if col == 'p_i':
|
|
72
73
|
df_d.loc[timestamp_to_update, col] = df_d.loc[timestamp_to_update, col].values-1000
|
|
73
74
|
|
|
@@ -95,8 +96,8 @@ def resample_dataset(ds_h, t):
|
|
|
95
96
|
|
|
96
97
|
df_d[var] = (p_vap.to_series().resample(t).mean() \
|
|
97
98
|
/ es_wtr.to_series().resample(t).mean())*100
|
|
98
|
-
if var+'
|
|
99
|
-
df_d[var+'
|
|
99
|
+
if var+'_wrt_ice_or_water' in df_d.keys():
|
|
100
|
+
df_d[var+'_wrt_ice_or_water'] = (p_vap.to_series().resample(t).mean() \
|
|
100
101
|
/ es_cor.to_series().resample(t).mean())*100
|
|
101
102
|
|
|
102
103
|
# passing each variable attribute to the ressample dataset
|
|
@@ -2,6 +2,8 @@ import numpy as np
|
|
|
2
2
|
import pandas
|
|
3
3
|
import xarray
|
|
4
4
|
|
|
5
|
+
from pypromice.utilities.dependency_graph import DependencyGraph
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
def clip_values(
|
|
7
9
|
ds: xarray.Dataset,
|
|
@@ -9,8 +11,6 @@ def clip_values(
|
|
|
9
11
|
):
|
|
10
12
|
"""
|
|
11
13
|
Clip values in dataset to defined "hi" and "lo" variables from dataframe.
|
|
12
|
-
There is a special treatment here for rh_u and rh_l variables, where values
|
|
13
|
-
are clipped and not assigned to NaN. This is for replication purposes
|
|
14
14
|
|
|
15
15
|
Parameters
|
|
16
16
|
----------
|
|
@@ -27,9 +27,15 @@ def clip_values(
|
|
|
27
27
|
cols = ["lo", "hi", "OOL"]
|
|
28
28
|
assert set(cols) <= set(var_configurations.columns)
|
|
29
29
|
|
|
30
|
-
variable_limits = var_configurations[cols].
|
|
31
|
-
|
|
30
|
+
variable_limits = var_configurations[cols].assign(
|
|
31
|
+
dependents=lambda df: df.OOL.fillna("").str.split(),
|
|
32
|
+
# Find the closure of dependents using the DependencyGraph class
|
|
33
|
+
dependents_closure=lambda df: DependencyGraph.from_child_mapping(
|
|
34
|
+
df.dependents
|
|
35
|
+
).child_closure_mapping(),
|
|
36
|
+
)
|
|
32
37
|
|
|
38
|
+
for var, row in variable_limits.iterrows():
|
|
33
39
|
if var not in list(ds.variables):
|
|
34
40
|
continue
|
|
35
41
|
|
|
@@ -38,15 +44,10 @@ def clip_values(
|
|
|
38
44
|
if ~np.isnan(row.hi):
|
|
39
45
|
ds[var] = ds[var].where(ds[var] <= row.hi)
|
|
40
46
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
else:
|
|
47
|
-
if ~np.isnan(row.lo):
|
|
48
|
-
ds[var] = ds[var].where(ds[var] >= row.lo)
|
|
49
|
-
if ~np.isnan(row.hi):
|
|
50
|
-
ds[var] = ds[var].where(ds[var] <= row.hi)
|
|
47
|
+
# Flag dependents as NaN if parent is NaN
|
|
48
|
+
for o in row.dependents_closure:
|
|
49
|
+
if o not in list(ds.variables):
|
|
50
|
+
continue
|
|
51
|
+
ds[o] = ds[o].where(ds[var].notnull())
|
|
51
52
|
|
|
52
53
|
return ds
|
pypromice/process/write.py
CHANGED
|
@@ -17,7 +17,13 @@ logger = logging.getLogger(__name__)
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def prepare_and_write(
|
|
20
|
-
dataset,
|
|
20
|
+
dataset,
|
|
21
|
+
output_path: Path | str,
|
|
22
|
+
vars_df=None,
|
|
23
|
+
meta_dict=None,
|
|
24
|
+
time="60min",
|
|
25
|
+
resample=True,
|
|
26
|
+
nc_compression:bool=False,
|
|
21
27
|
):
|
|
22
28
|
"""Prepare data with resampling, formating and metadata population; then
|
|
23
29
|
write data to .nc and .csv hourly and daily files
|
|
@@ -100,14 +106,14 @@ def prepare_and_write(
|
|
|
100
106
|
elif t == 86400:
|
|
101
107
|
# removing instantaneous values from daily and monthly files
|
|
102
108
|
for v in col_names:
|
|
103
|
-
if
|
|
109
|
+
if v in ['p_i', 't_i', 'rh_i', 'wspd_i', 'wdir_i', 'wspd_x_i', 'wspd_y_i']:
|
|
104
110
|
col_names.remove(v)
|
|
105
111
|
out_csv = output_dir / f"{name}_day.csv"
|
|
106
112
|
out_nc = output_dir / f"{name}_day.nc"
|
|
107
113
|
else:
|
|
108
114
|
# removing instantaneous values from daily and monthly files
|
|
109
115
|
for v in col_names:
|
|
110
|
-
if
|
|
116
|
+
if v in ['p_i', 't_i', 'rh_i', 'wspd_i', 'wdir_i', 'wspd_x_i', 'wspd_y_i']:
|
|
111
117
|
col_names.remove(v)
|
|
112
118
|
out_csv = output_dir / f"{name}_month.csv"
|
|
113
119
|
out_nc = output_dir / f"{name}_month.nc"
|
|
@@ -117,40 +123,11 @@ def prepare_and_write(
|
|
|
117
123
|
writeCSV(out_csv, d2, col_names)
|
|
118
124
|
|
|
119
125
|
# Write to netcdf file
|
|
120
|
-
writeNC(out_nc, d2, col_names)
|
|
126
|
+
writeNC(out_nc, d2, col_names, compression=nc_compression)
|
|
121
127
|
logger.info(f"Written to {out_csv}")
|
|
122
128
|
logger.info(f"Written to {out_nc}")
|
|
123
129
|
|
|
124
130
|
|
|
125
|
-
def writeAll(outpath, station_id, l3_h, l3_d, l3_m, csv_order=None):
|
|
126
|
-
"""Write L3 hourly, daily and monthly datasets to .nc and .csv
|
|
127
|
-
files
|
|
128
|
-
|
|
129
|
-
Parameters
|
|
130
|
-
----------
|
|
131
|
-
outpath : str
|
|
132
|
-
Output file path
|
|
133
|
-
station_id : str
|
|
134
|
-
Station name
|
|
135
|
-
l3_h : xr.Dataset
|
|
136
|
-
L3 hourly data
|
|
137
|
-
l3_d : xr.Dataset
|
|
138
|
-
L3 daily data
|
|
139
|
-
l3_m : xr.Dataset
|
|
140
|
-
L3 monthly data
|
|
141
|
-
csv_order : list, optional
|
|
142
|
-
List order of variables
|
|
143
|
-
"""
|
|
144
|
-
if not os.path.isdir(outpath):
|
|
145
|
-
os.mkdir(outpath)
|
|
146
|
-
outfile_h = os.path.join(outpath, station_id + "_hour")
|
|
147
|
-
outfile_d = os.path.join(outpath, station_id + "_day")
|
|
148
|
-
outfile_m = os.path.join(outpath, station_id + "_month")
|
|
149
|
-
for o, l in zip([outfile_h, outfile_d, outfile_m], [l3_h, l3_d, l3_m]):
|
|
150
|
-
writeCSV(o + ".csv", l, csv_order)
|
|
151
|
-
writeNC(o + ".nc", l)
|
|
152
|
-
|
|
153
|
-
|
|
154
131
|
def writeCSV(outfile, Lx, csv_order):
|
|
155
132
|
"""Write data product to CSV file
|
|
156
133
|
|
|
@@ -170,8 +147,8 @@ def writeCSV(outfile, Lx, csv_order):
|
|
|
170
147
|
Lcsv.to_csv(outfile)
|
|
171
148
|
|
|
172
149
|
|
|
173
|
-
def writeNC(outfile, Lx, col_names=None):
|
|
174
|
-
"""Write data product to NetCDF file
|
|
150
|
+
def writeNC(outfile, Lx, col_names=None, compression=False):
|
|
151
|
+
"""Write data product to NetCDF file with compression
|
|
175
152
|
|
|
176
153
|
Parameters
|
|
177
154
|
----------
|
|
@@ -187,7 +164,14 @@ def writeNC(outfile, Lx, col_names=None):
|
|
|
187
164
|
else:
|
|
188
165
|
names = list(Lx.keys())
|
|
189
166
|
|
|
190
|
-
|
|
167
|
+
encoding = {var: dict() for var in names}
|
|
168
|
+
|
|
169
|
+
if compression:
|
|
170
|
+
comp = dict(zlib=True, complevel=4)
|
|
171
|
+
for var in names:
|
|
172
|
+
encoding[var].update(comp)
|
|
173
|
+
|
|
174
|
+
Lx[names].to_netcdf(outfile, mode="w", format="NETCDF4", compute=True, encoding=encoding)
|
|
191
175
|
|
|
192
176
|
|
|
193
177
|
def getColNames(vars_df, ds, remove_nan_fields=False):
|
|
@@ -484,7 +468,7 @@ def reformat_time(dataset):
|
|
|
484
468
|
return dataset
|
|
485
469
|
|
|
486
470
|
|
|
487
|
-
def reformat_lon(dataset, exempt=["UWN", "Roof_GEUS", "Roof_PROMICE"]):
|
|
471
|
+
def reformat_lon(dataset, exempt=["UWN", "Roof_GEUS", "Roof_PROMICE", "ORO"]):
|
|
488
472
|
"""Switch gps_lon to negative values (degrees_east). We do this here, and
|
|
489
473
|
NOT in addMeta, otherwise we switch back to positive when calling getMeta
|
|
490
474
|
in joinL2"""
|
|
@@ -1,53 +1,53 @@
|
|
|
1
1
|
field,standard_name,long_name,units,coverage_content_type,coordinates,instantaneous_hourly,where_to_find,lo,hi,OOL,station_type,L0,L2,L3,max_decimals
|
|
2
2
|
time,time,Time,yyyy-mm-dd HH:MM:SS,physicalMeasurement,time,,,,,,all,1,1,1,
|
|
3
3
|
rec,record,Record,-,referenceInformation,time,,L0 or L2,,,,all,1,1,0,0
|
|
4
|
-
p_u,air_pressure,Air pressure (upper boom),hPa,physicalMeasurement,time,FALSE,,650,1100,
|
|
5
|
-
p_l,air_pressure,Air pressure (lower boom),hPa,physicalMeasurement,time,FALSE,,650,1100,
|
|
6
|
-
t_u,air_temperature,Air temperature (upper boom),degrees_C,physicalMeasurement,time,FALSE,,-80,40,
|
|
7
|
-
t_l,air_temperature,Air temperature (lower boom),degrees_C,physicalMeasurement,time,FALSE,,-80,40,
|
|
8
|
-
rh_u,relative_humidity,Relative humidity (upper boom),%,physicalMeasurement,time,FALSE,,0,100,
|
|
9
|
-
|
|
10
|
-
qh_u,specific_humidity,Specific humidity (upper boom),kg/kg,modelResult,time,FALSE,L2 or later,0,100
|
|
11
|
-
rh_l,relative_humidity,Relative humidity (lower boom),%,physicalMeasurement,time,FALSE,,0,100,
|
|
12
|
-
|
|
4
|
+
p_u,air_pressure,Air pressure (upper boom),hPa,physicalMeasurement,time,FALSE,,650,1100,"",all,1,1,1,4
|
|
5
|
+
p_l,air_pressure,Air pressure (lower boom),hPa,physicalMeasurement,time,FALSE,,650,1100,"",two-boom,1,1,1,4
|
|
6
|
+
t_u,air_temperature,Air temperature (upper boom),degrees_C,physicalMeasurement,time,FALSE,,-80,40,"",all,1,1,1,4
|
|
7
|
+
t_l,air_temperature,Air temperature (lower boom),degrees_C,physicalMeasurement,time,FALSE,,-80,40,"",two-boom,1,1,1,4
|
|
8
|
+
rh_u,relative_humidity,Relative humidity (upper boom),%,physicalMeasurement,time,FALSE,,0,100,"",all,1,1,1,4
|
|
9
|
+
rh_u_wrt_ice_or_water,relative_humidity_with_respect_to_ice_or_water,Relative humidity (upper boom) with respect to saturation over ice in subfreezing conditions and over water otherwise,%,modelResult,time,FALSE,L2 or later,0,150,"",all,0,1,1,4
|
|
10
|
+
qh_u,specific_humidity,Specific humidity (upper boom),kg/kg,modelResult,time,FALSE,L2 or later,0,100,"",all,0,1,1,4
|
|
11
|
+
rh_l,relative_humidity,Relative humidity (lower boom),%,physicalMeasurement,time,FALSE,,0,100,"",two-boom,1,1,1,4
|
|
12
|
+
rh_l_wrt_ice_or_water,relative_humidity_with_respect_to_ice_or_water,Relative humidity (lower boom) with respect to saturation over ice in subfreezing conditions and over water otherwise,%,modelResult,time,FALSE,L2 or later,0,150,"",two-boom,0,1,1,4
|
|
13
13
|
qh_l,specific_humidity,Specific humidity (lower boom),kg/kg,modelResult,time,FALSE,L2 or later,0,100,,two-boom,0,1,1,4
|
|
14
|
-
wspd_u,wind_speed,Wind speed (upper boom),m s-1,physicalMeasurement,time,FALSE,,0,100,
|
|
15
|
-
wspd_l,wind_speed,Wind speed (lower boom),m s-1,physicalMeasurement,time,FALSE,,0,100,
|
|
14
|
+
wspd_u,wind_speed,Wind speed (upper boom),m s-1,physicalMeasurement,time,FALSE,,0,100,wdir_u wspd_x_u wspd_y_u,all,1,1,1,4
|
|
15
|
+
wspd_l,wind_speed,Wind speed (lower boom),m s-1,physicalMeasurement,time,FALSE,,0,100,wdir_l wspd_x_l wspd_y_l,two-boom,1,1,1,4
|
|
16
16
|
wdir_u,wind_from_direction,Wind from direction (upper boom),degrees,physicalMeasurement,time,FALSE,,1,360,wspd_x_u wspd_y_u,all,1,1,1,4
|
|
17
17
|
wdir_std_u,wind_from_direction_standard_deviation,Wind from direction (standard deviation),degrees,qualityInformation,time,FALSE,L0 or L2,,,,one-boom,1,1,0,4
|
|
18
18
|
wdir_l,wind_from_direction,Wind from direction (lower boom),degrees,physicalMeasurement,time,FALSE,,1,360,wspd_x_l wspd_y_l,two-boom,1,1,1,4
|
|
19
|
-
wspd_x_u,wind_speed_from_x_direction,Wind speed from x direction (upper boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,
|
|
20
|
-
wspd_y_u,wind_speed_from_y_direction,Wind speed from y direction (upper boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,
|
|
21
|
-
wspd_x_l,wind_speed_from_x_direction,Wind speed from x direction (lower boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,
|
|
22
|
-
wspd_y_l,wind_speed_from_y_direction,Wind speed from y direction (lower boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,
|
|
23
|
-
dsr,surface_downwelling_shortwave_flux,Downwelling shortwave radiation,W m-2,physicalMeasurement,time,FALSE,,-10,1500,
|
|
19
|
+
wspd_x_u,wind_speed_from_x_direction,Wind speed from x direction (upper boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,"",all,0,1,1,4
|
|
20
|
+
wspd_y_u,wind_speed_from_y_direction,Wind speed from y direction (upper boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,"",all,0,1,1,4
|
|
21
|
+
wspd_x_l,wind_speed_from_x_direction,Wind speed from x direction (lower boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,"",two-boom,0,1,1,4
|
|
22
|
+
wspd_y_l,wind_speed_from_y_direction,Wind speed from y direction (lower boom),m s-1,modelResult,time,FALSE,L0 or L2,-100,100,"",two-boom,0,1,1,4
|
|
23
|
+
dsr,surface_downwelling_shortwave_flux,Downwelling shortwave radiation,W m-2,physicalMeasurement,time,FALSE,,-10,1500,"",all,1,1,1,4
|
|
24
24
|
dsr_cor,surface_downwelling_shortwave_flux_corrected,Downwelling shortwave radiation - corrected,W m-2,modelResult,time,FALSE,L2 or later,,,,all,0,1,1,4
|
|
25
|
-
usr,surface_upwelling_shortwave_flux,Upwelling shortwave radiation,W m-2,physicalMeasurement,time,FALSE,,-10,1000,
|
|
25
|
+
usr,surface_upwelling_shortwave_flux,Upwelling shortwave radiation,W m-2,physicalMeasurement,time,FALSE,,-10,1000,"",all,1,1,1,4
|
|
26
26
|
usr_cor,surface_upwelling_shortwave_flux_corrected,Upwelling shortwave radiation - corrected,W m-2,modelResult,time,FALSE,L2 or later,0,1000,,all,0,1,1,4
|
|
27
27
|
albedo,surface_albedo,Albedo,-,modelResult,time,FALSE,L2 or later,,,,all,0,1,1,4
|
|
28
|
-
dlr,surface_downwelling_longwave_flux,Downwelling longwave radiation,W m-2,physicalMeasurement,time,FALSE,,50,500,
|
|
29
|
-
ulr,surface_upwelling_longwave_flux,Upwelling longwave radiation,W m-2,physicalMeasurement,time,FALSE,,50,500,
|
|
28
|
+
dlr,surface_downwelling_longwave_flux,Downwelling longwave radiation,W m-2,physicalMeasurement,time,FALSE,,50,500,"",all,1,1,1,4
|
|
29
|
+
ulr,surface_upwelling_longwave_flux,Upwelling longwave radiation,W m-2,physicalMeasurement,time,FALSE,,50,500,"",all,1,1,1,4
|
|
30
30
|
cc,cloud_area_fraction,Cloud cover,%,modelResult,time,FALSE,L2 or later,,,,all,0,1,1,4
|
|
31
|
-
t_surf,surface_temperature,Surface temperature,C,modelResult,time,FALSE,L2 or later,-80,40,
|
|
31
|
+
t_surf,surface_temperature,Surface temperature,C,modelResult,time,FALSE,L2 or later,-80,40,"",all,0,1,1,4
|
|
32
32
|
dlhf_u,surface_downward_latent_heat_flux,Latent heat flux (upper boom),W m-2,modelResult,time,FALSE,L3 or later,,,,all,0,0,1,4
|
|
33
33
|
dlhf_l,surface_downward_latent_heat_flux,Latent heat flux (lower boom),W m-2,modelResult,time,FALSE,L3 or later,,,,two-boom,0,0,1,4
|
|
34
34
|
dshf_u,surface_downward_sensible_heat_flux,Sensible heat flux (upper boom),W m-2,modelResult,time,FALSE,L3 or later,,,,all,0,0,1,4
|
|
35
35
|
dshf_l,surface_downward_sensible_heat_flux,Sensible heat flux (lower boom),W m-2,modelResult,time,FALSE,L3 or later,,,,two-boom,0,0,1,4
|
|
36
|
-
z_boom_u,distance_to_surface_from_boom,Upper boom height,m,physicalMeasurement,time,TRUE,,0.3,10,
|
|
36
|
+
z_boom_u,distance_to_surface_from_boom,Upper boom height,m,physicalMeasurement,time,TRUE,,0.3,10,"",all,1,1,1,4
|
|
37
37
|
z_boom_q_u,distance_to_surface_from_boom_quality,Upper boom height (quality),-,qualityInformation,time,TRUE,L0 or L2,,,,all,1,1,0,4
|
|
38
|
-
z_boom_l,distance_to_surface_from_boom,Lower boom height,m,physicalMeasurement,time,TRUE,,0.3,5,
|
|
38
|
+
z_boom_l,distance_to_surface_from_boom,Lower boom height,m,physicalMeasurement,time,TRUE,,0.3,5,"",two-boom,1,1,1,4
|
|
39
39
|
z_boom_q_l,distance_to_surface_from_boom_quality,Lower boom height (quality),-,qualityInformation,time,TRUE,L0 or L2,,,,two-boom,1,1,0,4
|
|
40
40
|
z_stake,distance_to_surface_from_stake_assembly,Stake height,m,physicalMeasurement,time,TRUE,,0.3,8,,one-boom,1,1,1,4
|
|
41
41
|
z_stake_q,distance_to_surface_from_stake_assembly_quality,Stake height (quality),-,qualityInformation,time,TRUE,L0 or L2,,,,one-boom,1,1,0,4
|
|
42
|
-
z_pt,depth_of_pressure_transducer_in_ice,Depth of pressure transducer in ice,m,physicalMeasurement,time,FALSE,,0,30,
|
|
42
|
+
z_pt,depth_of_pressure_transducer_in_ice,Depth of pressure transducer in ice,m,physicalMeasurement,time,FALSE,,0,30,"",one-boom,1,1,1,4
|
|
43
43
|
z_pt_cor,depth_of_pressure_transducer_in_ice_corrected,Depth of pressure transducer in ice - corrected,m,modelResult,time,FALSE,L2 or later,0,30,,one-boom,0,1,1,4
|
|
44
44
|
z_surf_combined,height_of_surface_combined,"Surface height combined from multiple sensors, relative to ice surface height at installation",m,modelResult,time,FALSE,L3,,,,all,0,0,1,4
|
|
45
45
|
z_ice_surf,height_of_ice_surface,"Ice surface height, relative to ice surface height at installation and calculated from pt_cor and z_stake",m,modelResult,time,FALSE,L3,,,,one-boom,0,0,1,4
|
|
46
46
|
snow_height,height_of_snow,"Snow surface height, relative to ice surface",m,modelResult,time,FALSE,L3,0,,,one-boom,0,0,1,4
|
|
47
|
-
precip_u,precipitation,Precipitation (upper boom) (cumulative solid & liquid),mm,physicalMeasurement,time,TRUE,,0,,
|
|
47
|
+
precip_u,precipitation,Precipitation (upper boom) (cumulative solid & liquid),mm,physicalMeasurement,time,TRUE,,0,,"",all,1,1,1,4
|
|
48
48
|
precip_u_cor,precipitation_corrected,Precipitation (upper boom) (cumulative solid & liquid) – corrected,mm,modelResult,time,TRUE,L2 or later,0,,,all,0,1,1,4
|
|
49
49
|
precip_u_rate,precipitation_rate,Precipitation rate (upper boom) (cumulative solid & liquid) – corrected,mm,modelResult,time,TRUE,L2 or later,0,,,all,0,1,1,4
|
|
50
|
-
precip_l,precipitation,Precipitation (lower boom) (cumulative solid & liquid),mm,physicalMeasurement,time,TRUE,,0,,
|
|
50
|
+
precip_l,precipitation,Precipitation (lower boom) (cumulative solid & liquid),mm,physicalMeasurement,time,TRUE,,0,,"",two-boom,1,1,1,4
|
|
51
51
|
precip_l_cor,precipitation_corrected,Precipitation (lower boom) (cumulative solid & liquid) – corrected,mm,modelResult,time,TRUE,L2 or later,0,,,two-boom,0,1,1,4
|
|
52
52
|
precip_l_rate,precipitation_rate,Precipitation rate (lower boom) (cumulative solid & liquid) – corrected,mm,modelResult,time,TRUE,L2 or later,0,,,two-boom,0,1,1,4
|
|
53
53
|
t_i_1,ice_temperature_at_t1,Ice temperature at sensor 1,degrees_C,physicalMeasurement,time,FALSE,,-80,1,,all,1,1,1,4
|
|
@@ -73,8 +73,8 @@ d_t_i_9,depth_of_thermistor_9,Depth of thermistor 9,m,modelResult,time,FALSE,L3,
|
|
|
73
73
|
d_t_i_10,depth_of_thermistor_10,Depth of thermistor 10,m,modelResult,time,FALSE,L3,-10,100,,two-boom,0,0,1,4
|
|
74
74
|
d_t_i_11,depth_of_thermistor_11,Depth of thermistor 11,m,modelResult,time,FALSE,L3,-10,100,,two-boom,0,0,1,4
|
|
75
75
|
t_i_10m,10m_subsurface_temperature,10 m subsurface temperature,degrees_C,modelResult,time,FALSE,L3,-70,0,,all,0,0,1,4
|
|
76
|
-
tilt_x,platform_view_angle_x,Tilt to east,degrees,physicalMeasurement,time,FALSE,,-30,30,
|
|
77
|
-
tilt_y,platform_view_angle_y,Tilt to north,degrees,physicalMeasurement,time,FALSE,,-30,30,
|
|
76
|
+
tilt_x,platform_view_angle_x,Tilt to east,degrees,physicalMeasurement,time,FALSE,,-30,30,"",all,1,1,1,4
|
|
77
|
+
tilt_y,platform_view_angle_y,Tilt to north,degrees,physicalMeasurement,time,FALSE,,-30,30,"",all,1,1,1,4
|
|
78
78
|
rot,platform_azimuth_angle,Station rotation from true North,degrees,physicalMeasurement,time,FALSE,,0,360,,all,1,1,1,2
|
|
79
79
|
gps_lat,gps_latitude,Latitude,degrees_north,physicalMeasurement,time,TRUE,,50,83,,all,1,1,1,6
|
|
80
80
|
gps_lon,gps_longitude,Longitude,degrees_east,physicalMeasurement,time,TRUE,,5,70,,all,1,1,1,6
|
|
@@ -93,14 +93,14 @@ batt_v_ini,,,-,physicalMeasurement,time,TRUE,L0 or L2,0,30,,,1,1,0,2
|
|
|
93
93
|
batt_v_ss,battery_voltage_at_sample_start,Battery voltage (sample start),V,physicalMeasurement,time,TRUE,L0 or L2,0,30,,,1,1,0,2
|
|
94
94
|
fan_dc_u,fan_current,Fan current (upper boom),mA,physicalMeasurement,time,TRUE,L0 or L2,0,200,,all,1,1,0,2
|
|
95
95
|
fan_dc_l,fan_current,Fan current (lower boom),mA,physicalMeasurement,time,TRUE,,0,200,,two-boom,1,1,0,2
|
|
96
|
-
freq_vw,frequency_of_precipitation_wire_vibration,Frequency of vibrating wire in precipitation gauge,Hz,physicalMeasurement,time,TRUE,L0 or L2,0,10000,
|
|
96
|
+
freq_vw,frequency_of_precipitation_wire_vibration,Frequency of vibrating wire in precipitation gauge,Hz,physicalMeasurement,time,TRUE,L0 or L2,0,10000,"",,1,1,0,
|
|
97
97
|
t_log,temperature_of_logger,Logger temperature,degrees_C,physicalMeasurement,time,TRUE,,-80,40,,one-boom,1,1,0,4
|
|
98
|
-
t_rad,temperature_of_radiation_sensor,Radiation sensor temperature,degrees_C,physicalMeasurement,time,FALSE,,-80,40,
|
|
98
|
+
t_rad,temperature_of_radiation_sensor,Radiation sensor temperature,degrees_C,physicalMeasurement,time,FALSE,,-80,40,"",all,1,1,1,4
|
|
99
99
|
p_i,air_pressure,Air pressure (instantaneous) minus 1000,hPa,physicalMeasurement,time,TRUE,,-350,100,,all,1,1,1,4
|
|
100
100
|
t_i,air_temperature,Air temperature (instantaneous),degrees_C,physicalMeasurement,time,TRUE,,-80,40,,all,1,1,1,4
|
|
101
|
-
rh_i,relative_humidity,Relative humidity (instantaneous),%,physicalMeasurement,time,TRUE,,0,150,
|
|
102
|
-
|
|
101
|
+
rh_i,relative_humidity,Relative humidity (instantaneous),%,physicalMeasurement,time,TRUE,,0,150,"",all,1,1,1,4
|
|
102
|
+
rh_i_wrt_ice_or_water,relative_humidity_with_respect_to_ice_or_water,Relative humidity (instantaneous) with respect to saturation over ice in subfreezing conditions and over water otherwise,%,modelResult,time,TRUE,L2 or later,0,100,,all,0,1,1,4
|
|
103
103
|
wspd_i,wind_speed,Wind speed (instantaneous),m s-1,physicalMeasurement,time,TRUE,,0,100,wdir_i wspd_x_i wspd_y_i,all,1,1,1,4
|
|
104
104
|
wdir_i,wind_from_direction,Wind from direction (instantaneous),degrees,physicalMeasurement,time,TRUE,,1,360,wspd_x_i wspd_y_i,all,1,1,1,4
|
|
105
|
-
wspd_x_i,wind_speed_from_x_direction,Wind speed from x direction (instantaneous),m s-1,modelResult,time,TRUE,L2 or later,-100,100,
|
|
106
|
-
wspd_y_i,wind_speed_from_y_direction,Wind speed from y direction (instantaneous),m s-1,modelResult,time,TRUE,L2 or later,-100,100,
|
|
105
|
+
wspd_x_i,wind_speed_from_x_direction,Wind speed from x direction (instantaneous),m s-1,modelResult,time,TRUE,L2 or later,-100,100,"",all,0,1,1,4
|
|
106
|
+
wspd_y_i,wind_speed_from_y_direction,Wind speed from y direction (instantaneous),m s-1,modelResult,time,TRUE,L2 or later,-100,100,"",all,0,1,1,4
|
pypromice/tx/payload_formats.csv
CHANGED
|
@@ -67,6 +67,7 @@ type,expected_values,format,description,flags,notes
|
|
|
67
67
|
90,48, tfffffffffffffffffffffffffffffffffgnefffffffffff,THE GC-NET VERSION!,don’t use,GC-NET stations
|
|
68
68
|
90,48,tfffffffffffffffffffffffffffffffffgnefffffffffff,THE GC-NET VERSION!,,GC-NET stations
|
|
69
69
|
95,46,tfffffffffffffffffffffffffffffffgnefffffffffff,THE GC-NET VERSION!,,GC-NET stations
|
|
70
|
+
115,47,tfffffffffffffffffffffffffffffffffgneffffffffff,PREMAS version,,PREMAS stations
|
|
70
71
|
220,29,tfffffffffffffffffffffffnefff,ZAMG Freya 2015 summer message,,ZAMG Freya aws
|
|
71
72
|
221,0,,,,ZAMG Freya aws
|
|
72
73
|
222,29,tfffffffffffffffffffffffnefff,ZAMG Freya 2015 winter message,,ZAMG Freya aws
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
from typing import Mapping, Set, MutableMapping, Optional
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"DependencyNode",
|
|
7
|
+
"DependencyGraph",
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@attr.define
|
|
12
|
+
class DependencyNode:
|
|
13
|
+
name: str = attr.field()
|
|
14
|
+
parents: Set["DependencyNode"] = attr.field(factory=set)
|
|
15
|
+
children: Set["DependencyNode"] = attr.field(factory=set)
|
|
16
|
+
|
|
17
|
+
def add_child(self, child: "DependencyNode"):
|
|
18
|
+
self.children.add(child)
|
|
19
|
+
child.parents.add(self)
|
|
20
|
+
|
|
21
|
+
def get_children_closure(self, closure: Optional[Set[str]] = None) -> Set[str]:
|
|
22
|
+
is_root = closure is None
|
|
23
|
+
if closure is None:
|
|
24
|
+
closure = set()
|
|
25
|
+
if self.name in closure:
|
|
26
|
+
return closure
|
|
27
|
+
closure.add(self.name)
|
|
28
|
+
for child in self.children:
|
|
29
|
+
closure |= child.get_children_closure(closure)
|
|
30
|
+
|
|
31
|
+
if is_root:
|
|
32
|
+
closure.remove(self.name)
|
|
33
|
+
return closure
|
|
34
|
+
|
|
35
|
+
def get_parents_closure(self, closure: Optional[Set[str]] = None) -> Set[str]:
|
|
36
|
+
is_root = closure is None
|
|
37
|
+
if closure is None:
|
|
38
|
+
closure = set()
|
|
39
|
+
if self.name in closure:
|
|
40
|
+
return closure
|
|
41
|
+
closure.add(self.name)
|
|
42
|
+
for parent in self.parents:
|
|
43
|
+
closure |= parent.get_parents_closure(closure)
|
|
44
|
+
|
|
45
|
+
if is_root:
|
|
46
|
+
closure.remove(self.name)
|
|
47
|
+
return closure
|
|
48
|
+
|
|
49
|
+
def __hash__(self):
|
|
50
|
+
return hash(self.name)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@attr.define
|
|
54
|
+
class DependencyGraph:
|
|
55
|
+
nodes: MutableMapping[str, DependencyNode] = attr.field(factory=dict)
|
|
56
|
+
|
|
57
|
+
def add_node(self, name: str) -> DependencyNode:
|
|
58
|
+
if name not in self.nodes:
|
|
59
|
+
self.nodes[name] = DependencyNode(name)
|
|
60
|
+
return self.nodes[name]
|
|
61
|
+
|
|
62
|
+
def add_edge(self, parent: str, child: str):
|
|
63
|
+
parent_node = self.add_node(parent)
|
|
64
|
+
child_node = self.add_node(child)
|
|
65
|
+
parent_node.add_child(child_node)
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_child_mapping(cls, mapping: Mapping[str, Set[str]]) -> "DependencyGraph":
|
|
69
|
+
graph = cls()
|
|
70
|
+
for var, children in mapping.items():
|
|
71
|
+
graph.add_node(var)
|
|
72
|
+
for child in children:
|
|
73
|
+
graph.add_edge(var, child)
|
|
74
|
+
return graph
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def from_parent_mapping(cls, mapping: Mapping[str, Set[str]]) -> "DependencyGraph":
|
|
78
|
+
graph = cls()
|
|
79
|
+
for var, parents in mapping.items():
|
|
80
|
+
graph.add_node(var)
|
|
81
|
+
for parent in parents:
|
|
82
|
+
graph.add_edge(parent, var)
|
|
83
|
+
return graph
|
|
84
|
+
|
|
85
|
+
def child_mapping(self) -> Mapping[str, Set[str]]:
|
|
86
|
+
return {
|
|
87
|
+
node.name: {child.name for child in node.children}
|
|
88
|
+
for node in self.nodes.values()
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
def child_closure_mapping(self) -> Mapping[str, Set[str]]:
|
|
92
|
+
return {node.name: node.get_children_closure() for node in self.nodes.values()}
|
|
93
|
+
|
|
94
|
+
def parent_mapping(self) -> Mapping[str, Set[str]]:
|
|
95
|
+
return {
|
|
96
|
+
node.name: {parent.name for parent in node.parents}
|
|
97
|
+
for node in self.nodes.values()
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
def parent_closure_mapping(self) -> Mapping[str, Set[str]]:
|
|
101
|
+
return {node.name: node.get_parents_closure() for node in self.nodes.values()}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pypromice
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0
|
|
4
4
|
Summary: PROMICE/GC-Net data processing toolbox
|
|
5
5
|
Home-page: https://github.com/GEUS-Glaciology-and-Climate/pypromice
|
|
6
6
|
Author: GEUS Glaciology and Climate
|
|
@@ -18,16 +18,16 @@ Classifier: Operating System :: OS Independent
|
|
|
18
18
|
Requires-Python: >=3.10
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE.txt
|
|
21
|
-
Requires-Dist: numpy
|
|
22
|
-
Requires-Dist: pandas
|
|
23
|
-
Requires-Dist: xarray
|
|
21
|
+
Requires-Dist: numpy~=1.23
|
|
22
|
+
Requires-Dist: pandas>=1.5.0
|
|
23
|
+
Requires-Dist: xarray>=2022.6.0
|
|
24
24
|
Requires-Dist: toml
|
|
25
|
-
Requires-Dist: scipy
|
|
25
|
+
Requires-Dist: scipy>=1.9.0
|
|
26
26
|
Requires-Dist: Bottleneck
|
|
27
27
|
Requires-Dist: netcdf4
|
|
28
|
-
Requires-Dist: pyDataverse
|
|
28
|
+
Requires-Dist: pyDataverse==0.3.1
|
|
29
29
|
Requires-Dist: eccodes
|
|
30
|
-
Requires-Dist: scikit-learn
|
|
30
|
+
Requires-Dist: scikit-learn>=1.1.0
|
|
31
31
|
|
|
32
32
|
# pypromice
|
|
33
33
|
[](https://badge.fury.io/py/pypromice) [](https://anaconda.org/conda-forge/pypromice) [](https://anaconda.org/conda-forge/pypromice) [](https://www.doi.org/10.22008/FK2/3TSBF0) [](https://doi.org/10.21105/joss.05298) [](https://pypromice.readthedocs.io/en/latest/?badge=latest)
|
|
@@ -5,26 +5,26 @@ pypromice/get/get.py,sha256=8tdIbvdeXCpRWU7KmcKGIP9ZPdqIry3MjtJp9krumvo,7705
|
|
|
5
5
|
pypromice/get/get_promice_data.py,sha256=bluNCaP50iRlWBzdEOXLrSPepOQdGB7SeQLkTWiqK4c,1806
|
|
6
6
|
pypromice/postprocess/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
pypromice/postprocess/bufr_to_csv.py,sha256=ntTJZhfBRYPbLn2u9GzO5PFCkg9DIypUZONYEs2XrqA,507
|
|
8
|
-
pypromice/postprocess/bufr_utilities.py,sha256=
|
|
8
|
+
pypromice/postprocess/bufr_utilities.py,sha256=O1vnpKipUC6nMPmSrPvWECJocjdsB9FAb2ILXD8b8fs,21264
|
|
9
9
|
pypromice/postprocess/create_bufr_files.py,sha256=GizmNAW_v54MkvelPVzqIklBNHWH6nTRQC2qOo5amys,5657
|
|
10
10
|
pypromice/postprocess/get_bufr.py,sha256=98BZ7tTbmvvrVAzhxJ8LgHib3w7Q3S_x757pCubHToU,16693
|
|
11
11
|
pypromice/postprocess/make_metadata_csv.py,sha256=lUw8fZC6dzG10IePZ4d7eZIrTbquHYCDuppYP4r_dF0,9776
|
|
12
12
|
pypromice/postprocess/positions_seed.csv,sha256=0kVCQ8UfEALdeXNYCddmwxpseRqLRudbFStqp_bZRBw,224
|
|
13
13
|
pypromice/postprocess/real_time_utilities.py,sha256=2GZUua5R8ocp-TnIjEA4ig8lC4TlI3SkiimzLxoHXFE,9476
|
|
14
14
|
pypromice/process/L0toL1.py,sha256=aQmVEXhtRisHNrJuPGIg7NA4hjjmV9jUBu1DClRIGzs,23175
|
|
15
|
-
pypromice/process/L1toL2.py,sha256=
|
|
16
|
-
pypromice/process/L2toL3.py,sha256=
|
|
15
|
+
pypromice/process/L1toL2.py,sha256=PM6lToL-WXbZk5p2m90XCxY9S_RNNV1QUB3klZlQDzc,30832
|
|
16
|
+
pypromice/process/L2toL3.py,sha256=XqnUGKO17ADJkTOn0p8TESeCAKQGtPXpFadNfF52g6E,61378
|
|
17
17
|
pypromice/process/__init__.py,sha256=xvd0I-9nIyVw4M4qjgkQ5vXYpNuKcVSkIVIROQsZDo0,147
|
|
18
|
-
pypromice/process/aws.py,sha256=
|
|
18
|
+
pypromice/process/aws.py,sha256=5N4rLptO23Ic9mgyR5K8NhtNmGPa9xb9Cu7SgzAgoi8,7561
|
|
19
19
|
pypromice/process/get_l2.py,sha256=ALXJCMJ8qgg0_dEKx-dV5TQ9IAJnLLLGPUxlr5QVfpk,3076
|
|
20
20
|
pypromice/process/get_l2tol3.py,sha256=4Qu2d5rT25H2dObyCc70ivtJg3vw6WA-hzI-kRD6ybQ,4544
|
|
21
21
|
pypromice/process/join_l2.py,sha256=ifjuhFR9scVvZt3xuy-ELp-iRchxV1dEK9qJ4UNh5bE,4567
|
|
22
|
-
pypromice/process/join_l3.py,sha256=
|
|
22
|
+
pypromice/process/join_l3.py,sha256=F90uvcy85iSl6GWxyj6C3K4j2eAoQvhQB8XqOXpShvo,20221
|
|
23
23
|
pypromice/process/load.py,sha256=iaFvJeaDanAA60caVj4BWupZpqgQNj3CiNU4csz9FdU,4585
|
|
24
|
-
pypromice/process/resample.py,sha256=
|
|
24
|
+
pypromice/process/resample.py,sha256=VhcQ0UD5LkqFPHlwEFmwYIz3kLkUfvxTenxYadmCsSE,7301
|
|
25
25
|
pypromice/process/utilities.py,sha256=1pqSaF3bIbvRNtOjb25mbegHfuW9MY4KpCBDVXWyML8,1773
|
|
26
|
-
pypromice/process/value_clipping.py,sha256=
|
|
27
|
-
pypromice/process/write.py,sha256=
|
|
26
|
+
pypromice/process/value_clipping.py,sha256=_pTAxogsqfkjwBQslGyyE3jZzhYY6_Wp-g5ZPHcudMc,1506
|
|
27
|
+
pypromice/process/write.py,sha256=ZpA9NAgtnzJIbnjEiJ0sOtsE0J1haHASbjHqzMvBDJE,15818
|
|
28
28
|
pypromice/qc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
29
|
pypromice/qc/github_data_issues.py,sha256=gbbF62oMMWbXiLnsrs60vXbwfAqSUP113plhidVeqCU,13353
|
|
30
30
|
pypromice/qc/persistence.py,sha256=2ruS5w_QXt8730jwh6dwN1F3h7MGKFYStfO3T0YmmCY,6582
|
|
@@ -34,19 +34,20 @@ pypromice/qc/percentiles/outlier_detector.py,sha256=5_458aMm9MAubfYv7oIz1Lp9ME6S
|
|
|
34
34
|
pypromice/qc/percentiles/thresholds.csv,sha256=KTQcYsg2VCZmR-Rf1Zzx1Jn-ZmR5yPPWWXYZ0Z03PDQ,9516
|
|
35
35
|
pypromice/resources/__init__.py,sha256=MpKmvV11R4tcqmyvJpXQt-_It3oRI0WEIQNbMST--4w,907
|
|
36
36
|
pypromice/resources/file_attributes.csv,sha256=NFqfg6u0PmPzY2bqE2bp646E4LUiPLqvzhyxDauXoPU,7014
|
|
37
|
-
pypromice/resources/variable_aliases_GC-Net.csv,sha256=
|
|
38
|
-
pypromice/resources/variables.csv,sha256=
|
|
37
|
+
pypromice/resources/variable_aliases_GC-Net.csv,sha256=v881RUTozleq-f7q7sVT3fqidcBH7t-kVUqDnjtbDm8,993
|
|
38
|
+
pypromice/resources/variables.csv,sha256=cW8JbQMb5rlge9I3EjbWuKACg3nvbVmbd84W3ouFJdI,13282
|
|
39
39
|
pypromice/tx/__init__.py,sha256=-62bhHWJGfzFh5JwHcLqRj2jcGzmqzYOLWByhO706YY,30
|
|
40
40
|
pypromice/tx/get_l0tx.py,sha256=b34-96KGshTyTN2tBFaAIBl7oZZzbRB_JR7sXtDNfXA,6957
|
|
41
41
|
pypromice/tx/get_msg.py,sha256=OGS60OHjy4Wf8JExTfOdK-9xhjFdjhuChxoTSPe_MjI,3417
|
|
42
|
-
pypromice/tx/payload_formats.csv,sha256=
|
|
42
|
+
pypromice/tx/payload_formats.csv,sha256=A46-XcYdpe9-gzmADylP2UVizLi_UphF-BPT5u3Lyn8,7903
|
|
43
43
|
pypromice/tx/payload_types.csv,sha256=C1-xCmHytAqqAzgzPwBLWqabzWu6s6tKAd8AjVd935s,457
|
|
44
44
|
pypromice/tx/tx.py,sha256=mghUjwGqUKe_4JWuAEgWMyH4ME2QRufeMPPHoL72R08,34267
|
|
45
45
|
pypromice/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
+
pypromice/utilities/dependency_graph.py,sha256=bqoXasC8pg5ipjBd6rqDhfHwIq11t2_cFlNT72ncw4w,3135
|
|
46
47
|
pypromice/utilities/git.py,sha256=7EUGjDs_VZucrckakXKyZEclDAZ_mKIxhTWzhopCIxM,1785
|
|
47
|
-
pypromice-1.
|
|
48
|
-
pypromice-1.
|
|
49
|
-
pypromice-1.
|
|
50
|
-
pypromice-1.
|
|
51
|
-
pypromice-1.
|
|
52
|
-
pypromice-1.
|
|
48
|
+
pypromice-1.5.0.dist-info/LICENSE.txt,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
|
|
49
|
+
pypromice-1.5.0.dist-info/METADATA,sha256=EJQZp4E1oGs0OyC39bwzG2wQdrfx5xH3RK8twy_b3iQ,4756
|
|
50
|
+
pypromice-1.5.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
51
|
+
pypromice-1.5.0.dist-info/entry_points.txt,sha256=ufX1npmY3nqMPtSVRKVxn3MhG9IyFHD5FjPZQcELVXo,618
|
|
52
|
+
pypromice-1.5.0.dist-info/top_level.txt,sha256=cBdfwgSbWDQq3a07nKRjrfmLC7jdaYXs98GG58HpTks,10
|
|
53
|
+
pypromice-1.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|