pypromice 1.4.4__py3-none-any.whl → 1.5.1__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/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 "STM" in formats:
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
 
@@ -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
 
@@ -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', 'rh_i_cor', 'wspd_i', 'wdir_i','wspd_x_i','wspd_y_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
- )[col.replace('_i','_u')].values
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+'_cor' in df_d.keys():
99
- df_d[var+'_cor'] = (p_vap.to_series().resample(t).mean() \
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
@@ -11,8 +11,6 @@ def clip_values(
11
11
  ):
12
12
  """
13
13
  Clip values in dataset to defined "hi" and "lo" variables from dataframe.
14
- There is a special treatment here for rh_u and rh_l variables, where values
15
- are clipped and not assigned to NaN. This is for replication purposes
16
14
 
17
15
  Parameters
18
16
  ----------
@@ -17,7 +17,13 @@ logger = logging.getLogger(__name__)
17
17
 
18
18
 
19
19
  def prepare_and_write(
20
- dataset, output_path: Path | str, vars_df=None, meta_dict=None, time="60min", resample=True
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 ("_i" in v) and ("_i_" not in v):
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 ("_i" in v) and ("_i_" not in v):
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
- Lx[names].to_netcdf(outfile, mode="w", format="NETCDF4", compute=True)
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"""
@@ -5,19 +5,19 @@ p_l,
5
5
  t_u,TA2
6
6
  t_l,TA1
7
7
  rh_u,RH2
8
- rh_u_cor,RH2_cor
8
+ rh_u_wrt_ice_or_water,RH2_cor
9
9
  qh_u,Q2
10
10
  rh_l,RH1
11
- rh_l_cor,RH1_cor
11
+ rh_l_wrt_ice_or_water,RH1_cor
12
12
  qh_l,Q1
13
13
  wspd_u,VW2
14
14
  wspd_l,VW1
15
15
  wdir_u,DW2
16
16
  wdir_l,DW1
17
- dsr,
18
- dsr_cor,ISWR
19
- usr,
20
- usr_cor,OSWR
17
+ dsr,ISWR
18
+ dsr_cor,
19
+ usr,OSWR
20
+ usr_cor,
21
21
  albedo,Alb
22
22
  dlr,
23
23
  ulr,
@@ -6,10 +6,10 @@ p_l,air_pressure,Air pressure (lower boom),hPa,physicalMeasurement,time,FALSE,,6
6
6
  t_u,air_temperature,Air temperature (upper boom),degrees_C,physicalMeasurement,time,FALSE,,-80,40,"",all,1,1,1,4
7
7
  t_l,air_temperature,Air temperature (lower boom),degrees_C,physicalMeasurement,time,FALSE,,-80,40,"",two-boom,1,1,1,4
8
8
  rh_u,relative_humidity,Relative humidity (upper boom),%,physicalMeasurement,time,FALSE,,0,100,"",all,1,1,1,4
9
- rh_u_cor,relative_humidity_corrected,Relative humidity (upper boom) - corrected,%,modelResult,time,FALSE,L2 or later,0,150,"",all,0,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
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
11
  rh_l,relative_humidity,Relative humidity (lower boom),%,physicalMeasurement,time,FALSE,,0,100,"",two-boom,1,1,1,4
12
- rh_l_cor,relative_humidity_corrected,Relative humidity (lower boom) - corrected,%,modelResult,time,FALSE,L2 or later,0,150,"",two-boom,0,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
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
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
@@ -99,7 +99,7 @@ t_rad,temperature_of_radiation_sensor,Radiation sensor temperature,degrees_C,phy
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
101
  rh_i,relative_humidity,Relative humidity (instantaneous),%,physicalMeasurement,time,TRUE,,0,150,"",all,1,1,1,4
102
- rh_i_cor,relative_humidity_corrected,Relative humidity (instantaneous) corrected,%,modelResult,time,TRUE,L2 or later,0,100,,all,0,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
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
@@ -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
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pypromice
3
- Version: 1.4.4
3
+ Version: 1.5.1
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,26 @@ 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 ~=1.23
22
- Requires-Dist: pandas >=1.5.0
23
- Requires-Dist: xarray >=2022.6.0
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 >=1.9.0
25
+ Requires-Dist: scipy>=1.9.0
26
26
  Requires-Dist: Bottleneck
27
27
  Requires-Dist: netcdf4
28
- Requires-Dist: pyDataverse ==0.3.1
28
+ Requires-Dist: pyDataverse==0.3.1
29
29
  Requires-Dist: eccodes
30
- Requires-Dist: scikit-learn >=1.1.0
30
+ Requires-Dist: scikit-learn>=1.1.0
31
+ Dynamic: author
32
+ Dynamic: classifier
33
+ Dynamic: description
34
+ Dynamic: description-content-type
35
+ Dynamic: home-page
36
+ Dynamic: keywords
37
+ Dynamic: project-url
38
+ Dynamic: requires-dist
39
+ Dynamic: requires-python
40
+ Dynamic: summary
31
41
 
32
42
  # pypromice
33
43
  [![PyPI version](https://badge.fury.io/py/pypromice.svg)](https://badge.fury.io/py/pypromice) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/pypromice/badges/version.svg)](https://anaconda.org/conda-forge/pypromice) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/pypromice/badges/platforms.svg)](https://anaconda.org/conda-forge/pypromice) [![](<https://img.shields.io/badge/Dataverse DOI-10.22008/FK2/3TSBF0-orange>)](https://www.doi.org/10.22008/FK2/3TSBF0) [![DOI](https://joss.theoj.org/papers/10.21105/joss.05298/status.svg)](https://doi.org/10.21105/joss.05298) [![Documentation Status](https://readthedocs.org/projects/pypromice/badge/?version=latest)](https://pypromice.readthedocs.io/en/latest/?badge=latest)
@@ -12,19 +12,19 @@ pypromice/postprocess/make_metadata_csv.py,sha256=lUw8fZC6dzG10IePZ4d7eZIrTbquHY
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=p9TTnYHBbdQT--bNMOq3jE2xhxjXWC7Rff141SCvHow,30597
16
- pypromice/process/L2toL3.py,sha256=xJXEHqfgWtKj5DxmuFq2F_Ynj0gMEpBxw3-RKpcnfUs,62311
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=SLVfJ4VMY6F3DGzlAQXvgHqdQnqppYZofSU2VEUeRkQ,8960
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=nLLQbX0vuuvHET8r33ZAt5g1dtIk3foUJ9RZkwkEwE4,20158
22
+ pypromice/process/join_l3.py,sha256=F90uvcy85iSl6GWxyj6C3K4j2eAoQvhQB8XqOXpShvo,20221
23
23
  pypromice/process/load.py,sha256=iaFvJeaDanAA60caVj4BWupZpqgQNj3CiNU4csz9FdU,4585
24
- pypromice/process/resample.py,sha256=x0t9CE4YnwYMrn6wDRArhrQHqHOIJpYpTrgEcARUppo,7138
24
+ pypromice/process/resample.py,sha256=VhcQ0UD5LkqFPHlwEFmwYIz3kLkUfvxTenxYadmCsSE,7301
25
25
  pypromice/process/utilities.py,sha256=1pqSaF3bIbvRNtOjb25mbegHfuW9MY4KpCBDVXWyML8,1773
26
- pypromice/process/value_clipping.py,sha256=JMA-g5rIsDHrMIme4klBxkr1tpP-CRx9TL7z6MEn4l8,1660
27
- pypromice/process/write.py,sha256=fRCCK4g_W07M4EEsJErdTSN2Pldr9SLgqM2w_rsp2ZQ,16257
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,20 +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=Z4-S9wThgWxwZTgeIWjjAoAP2Rnuu5kdY4m3aAqnMIM,967
38
- pypromice/resources/variables.csv,sha256=nJ79FyjRmirW6nK2pWH2Q0-Y3o0I0vPqKdec2d-LYBk,12963
37
+ pypromice/resources/variable_aliases_GC-Net.csv,sha256=ts10e0AI1Fz_TtEj8qdRFIZBTkE8pt_VtJGp5hSBUBI,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=tzTTNuvmVwlwd7z3aF8A2dhjKNQ4lVumpnNBs3e3YeQ,7816
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
46
  pypromice/utilities/dependency_graph.py,sha256=bqoXasC8pg5ipjBd6rqDhfHwIq11t2_cFlNT72ncw4w,3135
47
47
  pypromice/utilities/git.py,sha256=7EUGjDs_VZucrckakXKyZEclDAZ_mKIxhTWzhopCIxM,1785
48
- pypromice-1.4.4.dist-info/LICENSE.txt,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
49
- pypromice-1.4.4.dist-info/METADATA,sha256=_EMflWdsf6JPEuUUB0ozQEAWKpDukoMQt6378Fmue6c,4762
50
- pypromice-1.4.4.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
51
- pypromice-1.4.4.dist-info/entry_points.txt,sha256=ufX1npmY3nqMPtSVRKVxn3MhG9IyFHD5FjPZQcELVXo,618
52
- pypromice-1.4.4.dist-info/top_level.txt,sha256=cBdfwgSbWDQq3a07nKRjrfmLC7jdaYXs98GG58HpTks,10
53
- pypromice-1.4.4.dist-info/RECORD,,
48
+ pypromice-1.5.1.dist-info/LICENSE.txt,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
49
+ pypromice-1.5.1.dist-info/METADATA,sha256=Pk2LL4EmF_PBWe5VSaNo5uWyVINQO2FA68DKf6Xzyl0,4970
50
+ pypromice-1.5.1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
51
+ pypromice-1.5.1.dist-info/entry_points.txt,sha256=ufX1npmY3nqMPtSVRKVxn3MhG9IyFHD5FjPZQcELVXo,618
52
+ pypromice-1.5.1.dist-info/top_level.txt,sha256=cBdfwgSbWDQq3a07nKRjrfmLC7jdaYXs98GG58HpTks,10
53
+ pypromice-1.5.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5