mpcaHydro 2.0.1__tar.gz → 2.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,6 @@
1
1
  # pixi environments
2
2
  .pixi
3
3
  *.pyc
4
+ *.whl
5
+ *.gz
6
+ /.vscode
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mpcaHydro
3
- Version: 2.0.1
3
+ Version: 2.0.2
4
4
  Summary: Python package for downloading MPCA hydrology data
5
5
  Project-URL: Homepage, https://github.com/mfratkin1/mpcaHydro
6
6
  Author-email: Mulu Fratkin <michael.fratkin@state.mn.us>
@@ -10,6 +10,7 @@ Keywords: Hydrology,MPCA
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: Programming Language :: Python
12
12
  Requires-Python: >=3.8
13
+ Requires-Dist: duckdb
13
14
  Requires-Dist: pandas
14
15
  Requires-Dist: pathlib
15
16
  Requires-Dist: requests
@@ -5,11 +5,12 @@ build-backend = "hatchling.build"
5
5
  [project]
6
6
  name = "mpcaHydro"
7
7
  urls = { "Homepage" = "https://github.com/mfratkin1/mpcaHydro" } # ? Add this!
8
- version = "2.0.1"
8
+ version = "2.0.2"
9
9
  dependencies = [
10
10
  "pandas",
11
11
  "requests",
12
- "pathlib"
12
+ "pathlib",
13
+ "duckdb"
13
14
  ]
14
15
  requires-python = ">=3.8"
15
16
  authors = [
@@ -9,7 +9,7 @@ import pandas as pd
9
9
  #from abc import abstractmethod
10
10
  from pathlib import Path
11
11
  from mpcaHydro import etlWISKI, etlSWD#, etlEQUIS
12
-
12
+ import duckdb
13
13
 
14
14
  #
15
15
  '''
@@ -69,12 +69,59 @@ def are_lists_identical(nested_list):
69
69
  # Compare all sublists to the first one
70
70
  return all(sublist == sorted_sublists[0] for sublist in sorted_sublists)
71
71
 
72
+ def construct_database(folderpath):
73
+ folderpath = Path(folderpath)
74
+ db_path = folderpath.joinpath('observations.duckdb').as_posix()
75
+ with duckdb.connect(db_path) as con:
76
+ con.execute("DROP TABLE IF EXISTS observations")
77
+ datafiles = folderpath.joinpath('*.csv').as_posix()
78
+ query = '''
79
+ CREATE TABLE observations AS SELECT *
80
+ FROM
81
+ read_csv_auto(?,
82
+ union_by_name = true);
83
+
84
+ '''
85
+ con.execute(query,[datafiles])
86
+
87
+
88
+
72
89
  class dataManager():
73
90
 
74
91
  def __init__(self,folderpath):
75
92
 
76
93
  self.data = {}
77
94
  self.folderpath = Path(folderpath)
95
+ self.db_path = self.folderpath.joinpath('observations.duckdb')
96
+
97
+
98
+ def constituent_summary(self,constituents = None):
99
+ with duckdb.connect(self.db_path) as con:
100
+ if constituents is None:
101
+ constituents = con.query('''
102
+ SELECT DISTINCT
103
+ constituent
104
+ FROM observations''').to_df()['constituent'].to_list()
105
+
106
+ query = '''
107
+ SELECT
108
+ station_id,
109
+ source,
110
+ constituent,
111
+ COUNT(*) AS sample_count,
112
+ year(MIN(datetime)) AS start_date,
113
+ year(MAX(datetime)) AS end_date
114
+ FROM
115
+ observations
116
+ WHERE
117
+ constituent in (SELECT UNNEST(?))
118
+ GROUP BY
119
+ constituent,station_id,source
120
+ ORDER BY
121
+ constituent,sample_count;'''
122
+
123
+ df = con.execute(query,[constituents]).fetch_df()
124
+ return df
78
125
 
79
126
  def get_wiski_stations(self):
80
127
  return list(WISKI_EQUIS_XREF['WISKI_STATION_NO'].unique())
@@ -108,6 +155,17 @@ class dataManager():
108
155
  return []
109
156
  else:
110
157
  return wiski_ids
158
+
159
+ def equis_wiski_alias(self,equis_station_id):
160
+ wiski_ids = list(set(WISKI_EQUIS_XREF.loc[WISKI_EQUIS_XREF['WISKI_EQUIS_ID'] == equis_station_id,'WISKI_STATION_NO'].to_list()))
161
+ wiski_ids = [wiski_id for wiski_id in wiski_ids if not pd.isna(wiski_id)]
162
+ if len(wiski_ids) == 0:
163
+ return []
164
+ elif len(wiski_ids) > 1:
165
+ print(f'Too Many WISKI Stations for {equis_station_id}')
166
+ raise
167
+ else:
168
+ return wiski_ids[0]
111
169
 
112
170
  def _equis_wiski_associations(self,equis_station_ids):
113
171
  wiski_stations = [self.equis_wiski_associations(equis_station_id) for equis_station_id in equis_station_ids]
@@ -115,6 +173,25 @@ class dataManager():
115
173
  return wiski_stations[0]
116
174
  else:
117
175
  return []
176
+
177
+ def _stations_by_wid(self,wid_no,station_origin):
178
+ if station_origin in ['wiski','wplmn']:
179
+ station_col = 'WISKI_STATION_NO'
180
+ elif station_origin in ['equis','swd']:
181
+ station_col = 'EQUIS_STATION_ID'
182
+ else:
183
+ raise
184
+
185
+ return list(WISKI_EQUIS_XREF.loc[WISKI_EQUIS_XREF['WID'] == wid_no,station_col].unique())
186
+
187
+
188
+ def download_stations_by_wid(self, wid_no,station_origin, folderpath = None, overwrite = False):
189
+
190
+ station_ids = self._station_by_wid(wid_no,station_origin)
191
+
192
+ if not station_ids.empty:
193
+ for _, row in station_ids.iterrows():
194
+ self.download_station_data(row['station_id'],station_origin, folderpath, overwrite)
118
195
 
119
196
  def _download_station_data(self,station_id,station_origin,overwrite=False):
120
197
  assert(station_origin in ['wiski','equis','swd','wplmn'])
@@ -232,7 +309,7 @@ class dataManager():
232
309
  def get_data(self,station_id,constituent,agg_period = 'D'):
233
310
  return self._get_data([station_id],constituent,agg_period)
234
311
 
235
- def _get_data(self,station_ids,constituent,agg_period = 'D'):
312
+ def _get_data(self,station_ids,constituent,agg_period = 'D',tz_offset = '-6'):
236
313
  '''
237
314
 
238
315
  Returns the processed observational data associated with the calibration specific id.
@@ -287,7 +364,10 @@ class dataManager():
287
364
  df['data_format'] = dfsub['data_format'].iloc[0]
288
365
  df['source'] = dfsub['source'].iloc[0]
289
366
 
290
-
367
+
368
+ # convert to desired timzone before stripping timezone information.
369
+ #df.index.tz_convert('UTC-06:00').tz_localize(None)
370
+ df.index = df.index.tz_localize(None)
291
371
  return df['value'].to_frame().dropna()
292
372
 
293
373
 
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Tue Oct 10 14:13:23 2023
4
+
5
+ @author: mfratki
6
+ """
7
+
8
+ import pandas as pd
9
+ import requests
10
+ import zipfile
11
+ import io
12
+ # import geopandas as gpd
13
+
14
+
15
+ CONSITUENT_MAP = {'Water Temp. (C)': 'WT',
16
+ 'Discharge (cfs)': 'Q',
17
+ 'DO (mg/L)': 'DO'
18
+ }
19
+
20
+ # def download(station_no):
21
+ # # save_path = Path(save_path)
22
+ # # file_path = save_path.joinpath('csg.csv')
23
+
24
+ # station = station_no[1:]
25
+ # df = pd.read_csv(f'https://maps2.dnr.state.mn.us/cgi-bin/csg.cgi?mode=dump_hydro_data_as_csv&site={station}&startdate=1996-1-1&enddate=2050-1-1')
26
+ # df = pd.read_csv(f'https://apps.dnr.state.mn.us/csg/api/v1/download?callback=json&ids=66050001&vars=262')
27
+ # df['station_id'] = station_no
28
+
29
+ # return df
30
+
31
+ def download(station_no):
32
+ station = station_no[1:]
33
+ url = f'https://apps.dnr.state.mn.us/csg/api/v1/download?ids={station}&vars=262'
34
+ response = requests.get(url)
35
+ with zipfile.ZipFile(io.BytesIO(response.content)) as zip_ref:
36
+ df = pd.read_csv(zip_ref.open(zip_ref.namelist()[0]))
37
+ df['station_id'] = station_no
38
+
39
+ return df
40
+
41
+
42
+ # def process(df):
43
+ #
44
+ # df.set_index('Timestamp',inplace=True)
45
+ # value_variables = [column for column in df.columns if (column not in ['Site','Timestamp','station_no']) & ~(column.endswith('Quality'))]
46
+
47
+ # test = df[value_variables].resample(rule='1H', kind='interval').mean().dropna()
48
+ # df = df['Value'].resample(rule='1H', kind='interval').mean().to_frame()
49
+
50
+ def transform(data):
51
+ data.rename(columns = {'tstamp': 'datetime',
52
+ 'var_name': 'variable',
53
+ 'station_no': 'station_id'}, inplace = True)
54
+
55
+ data['unit'] = data['variable'].map({'Water Temp. (C)' : 'C',
56
+ 'Discharge (cfs)' : 'cfs',
57
+ 'DO (mg/L)' : 'mg/L'})
58
+
59
+ data['constituent'] = data['variable'].map({'Water Temp. (C)' : 'WT',
60
+ 'Discharge (cfs)' : 'Q',
61
+ 'DO (mg/L)' : 'DO'})
62
+
63
+ data['datetime'] = pd.to_datetime(data['datetime'])
64
+ data.set_index('datetime',drop=True,inplace=True)
65
+ data.index = data.index.tz_localize('UTC-06:00')
66
+ data.dropna(subset = 'value',inplace=True)
67
+ data['source'] = 'csg'
68
+ return data
69
+
70
+
71
+
72
+
73
+
74
+ def load(data,file_path):
75
+
76
+ data.to_csv(file_path)
77
+
78
+
79
+
80
+
@@ -14,16 +14,25 @@ import pandas as pd
14
14
 
15
15
 
16
16
  CONSTITUENT_MAP = {'Total suspended solids':'TSS',
17
+ 'Total solids': 'TSS',
18
+ 'Solids, Suspended' : 'TSS',
19
+ 'Solids, Total Suspended' : 'TSS',
17
20
  'Residue - nonfilterable (TSS)': 'TSS',
18
21
  'Kjeldahl nitrogen as N': 'TKN',
22
+ 'Inorganic nitrogen (nitrate and nitrate) as N': 'N',
19
23
  'Nitrogen, Total Kjeldahl (TKN) as N': 'TKN',
20
24
  'Nitrate + Nitrite Nitrogen, Total as N': 'N',
21
25
  'Nitrate/Nitrite as N (N+N) as N': 'N',
22
26
  'Nutrient-nitrogen as N': 'N',
27
+ 'Nitrate/Nitrite as N': 'N',
23
28
  'Phosphorus, Total as P as P':'TP',
29
+ 'Phosphorus, Total as P' : 'TP',
24
30
  'Phosphorus as P': 'TP',
31
+ 'Total Phosphorus as P': 'TP',
32
+ 'Orthophosphate as P': 'OP',
25
33
  'Carbonaceous biochemical oxygen demand, standard conditions': 'BOD',
26
34
  'Chemical oxygen demand':'BOD',
35
+ 'Biochemical oxygen demand, standard conditions': 'BOD',
27
36
  'Chlorophyll a, corrected for pheophytin':'CHLA',
28
37
  'Chlorophyll-A':'CHLA',
29
38
  'Chlorophyll-a, Pheophytin Corrected':'CHLA',
@@ -145,7 +154,7 @@ def transform(df):
145
154
  df.set_index('datetime',drop=True,inplace=True)
146
155
  df.index = df.index.tz_localize('UTC-06:00')
147
156
 
148
- df.index = df.index.round('H').round('H')
157
+ df.index = df.index.round('h').round('h')
149
158
  df = df.reset_index()
150
159
  df = df.groupby(['datetime','variable','unit','station_id','station_name','constituent','data_format','data_type','source']).mean()
151
160
  df = df.reset_index()
@@ -1,7 +0,0 @@
1
- [distutils]
2
- index-servers =
3
- pypi
4
-
5
- [pypi]
6
- username = __token__
7
- password = pypi-AgEIcHlwaS5vcmcCJGE1NGVkNGI2LWQyNzgtNDM3ZS1iZTA3LTRjZGM1NTk3ZjZkNgACKlszLCJjMzNhYzJlMC1lM2NmLTQ0NDctOGM3Yi02ZWI3MWQ2Y2Q5NjkiXQAABiCOl7zzoDVYgRaDy2Goc9n0jIb2gpqi1TaiZoYohELG8A
mpcahydro-2.0.1/pixi.lock DELETED
@@ -1,626 +0,0 @@
1
- version: 6
2
- environments:
3
- default:
4
- channels:
5
- - url: https://conda.anaconda.org/conda-forge/
6
- packages:
7
- win-64:
8
- - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_3.conda
9
- - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda
10
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.6.15-h4c7d964_0.conda
11
- - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.6.15-pyhd8ed1ab_0.conda
12
- - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda
13
- - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda
14
- - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda
15
- - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
16
- - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
17
- - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda
18
- - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda
19
- - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-32_h641d27c_mkl.conda
20
- - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-32_h5e41251_mkl.conda
21
- - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.0-he0c23c2_0.conda
22
- - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda
23
- - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda
24
- - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-h135ad9c_1.conda
25
- - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-32_h1aa476e_mkl.conda
26
- - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda
27
- - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda
28
- - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.50.2-hf5d6505_0.conda
29
- - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda
30
- - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.13.8-h442d1da_0.conda
31
- - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
32
- - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda
33
- - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.3.1-py313ha14762d_0.conda
34
- - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.5.1-h725018a_0.conda
35
- - conda: https://conda.anaconda.org/conda-forge/win-64/pandas-2.3.0-py313hf91d08e_0.conda
36
- - conda: https://conda.anaconda.org/conda-forge/noarch/pathlib-1.0.1-py_1.tar.bz2
37
- - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
38
- - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda
39
- - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.5-h7de537c_102_cp313.conda
40
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
41
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda
42
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda
43
- - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda
44
- - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda
45
- - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda
46
- - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda
47
- - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda
48
- - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
49
- - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda
50
- - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda
51
- - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_26.conda
52
- - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_26.conda
53
- - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
54
- - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py313ha7868ed_2.conda
55
- packages:
56
- - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_3.conda
57
- sha256: 152e1f4bb8076b4f37a70e80dcd457a50e14e0bd5501351cd0fc602c5ef782a5
58
- md5: a25f98cfd4eb1ac26325c1869f11edf5
59
- depends:
60
- - python >=3.13,<3.14.0a0
61
- - python_abi 3.13.* *_cp313
62
- - ucrt >=10.0.20348.0
63
- - vc >=14.2,<15
64
- - vc14_runtime >=14.29.30139
65
- constrains:
66
- - libbrotlicommon 1.1.0 h2466b09_3
67
- license: MIT
68
- license_family: MIT
69
- size: 321652
70
- timestamp: 1749231335599
71
- - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda
72
- sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b
73
- md5: 276e7ffe9ffe39688abc665ef0f45596
74
- depends:
75
- - ucrt >=10.0.20348.0
76
- - vc >=14.2,<15
77
- - vc14_runtime >=14.29.30139
78
- license: bzip2-1.0.6
79
- license_family: BSD
80
- size: 54927
81
- timestamp: 1720974860185
82
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.6.15-h4c7d964_0.conda
83
- sha256: 065241ba03ef3ee8200084c075cbff50955a7e711765395ff34876dbc51a6bb9
84
- md5: b01649832f7bc7ff94f8df8bd2ee6457
85
- depends:
86
- - __win
87
- license: ISC
88
- size: 151351
89
- timestamp: 1749990170707
90
- - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.6.15-pyhd8ed1ab_0.conda
91
- sha256: d71c85835813072cd6d7ce4b24be34215cd90c104785b15a5d58f4cd0cb50778
92
- md5: 781d068df0cc2407d4db0ecfbb29225b
93
- depends:
94
- - python >=3.9
95
- license: ISC
96
- size: 155377
97
- timestamp: 1749972291158
98
- - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda
99
- sha256: b19f581fe423858f1f477c52e10978be324c55ebf2e418308d30d013f4a476ff
100
- md5: 519a29d7ac273f8c165efc0af099da42
101
- depends:
102
- - pycparser
103
- - python >=3.13.0rc1,<3.14.0a0
104
- - python_abi 3.13.* *_cp313
105
- - ucrt >=10.0.20348.0
106
- - vc >=14.2,<15
107
- - vc14_runtime >=14.29.30139
108
- license: MIT
109
- license_family: MIT
110
- size: 291828
111
- timestamp: 1725561211547
112
- - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.2-pyhd8ed1ab_0.conda
113
- sha256: 535ae5dcda8022e31c6dc063eb344c80804c537a5a04afba43a845fa6fa130f5
114
- md5: 40fe4284b8b5835a9073a645139f35af
115
- depends:
116
- - python >=3.9
117
- license: MIT
118
- license_family: MIT
119
- size: 50481
120
- timestamp: 1746214981991
121
- - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda
122
- sha256: 0aa1cdc67a9fe75ea95b5644b734a756200d6ec9d0dff66530aec3d1c1e9df75
123
- md5: b4754fb1bdcb70c8fd54f918301582c6
124
- depends:
125
- - hpack >=4.1,<5
126
- - hyperframe >=6.1,<7
127
- - python >=3.9
128
- license: MIT
129
- license_family: MIT
130
- size: 53888
131
- timestamp: 1738578623567
132
- - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
133
- sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba
134
- md5: 0a802cb9888dd14eeefc611f05c40b6e
135
- depends:
136
- - python >=3.9
137
- license: MIT
138
- license_family: MIT
139
- size: 30731
140
- timestamp: 1737618390337
141
- - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
142
- sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8
143
- md5: 8e6923fc12f1fe8f8c4e5c9f343256ac
144
- depends:
145
- - python >=3.9
146
- license: MIT
147
- license_family: MIT
148
- size: 17397
149
- timestamp: 1737618427549
150
- - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda
151
- sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87
152
- md5: 39a4f67be3286c86d696df570b1201b7
153
- depends:
154
- - python >=3.9
155
- license: BSD-3-Clause
156
- license_family: BSD
157
- size: 49765
158
- timestamp: 1733211921194
159
- - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda
160
- sha256: 0fd2b0b84c854029041b0ede8f4c2369242ee92acc0092f8407b1fe9238a8209
161
- md5: 2d89243bfb53652c182a7c73182cce4f
162
- license: LicenseRef-IntelSimplifiedSoftwareOct2022
163
- license_family: Proprietary
164
- size: 1852356
165
- timestamp: 1723739573141
166
- - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-32_h641d27c_mkl.conda
167
- build_number: 32
168
- sha256: 809d78b096e70fed7ebb17c867dd5dde2f9f4ed8564967a6e10c65b3513b0c31
169
- md5: 49b36a01450e96c516bbc5486d4a0ea0
170
- depends:
171
- - mkl 2024.2.2 h66d3029_15
172
- constrains:
173
- - libcblas 3.9.0 32*_mkl
174
- - liblapack 3.9.0 32*_mkl
175
- - liblapacke 3.9.0 32*_mkl
176
- - blas 2.132 mkl
177
- license: BSD-3-Clause
178
- license_family: BSD
179
- size: 3735390
180
- timestamp: 1750389080409
181
- - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-32_h5e41251_mkl.conda
182
- build_number: 32
183
- sha256: d0f81145ae795592f3f3b5d7ff641c1019a99d6b308bfaf2a4cc5ba24b067bb0
184
- md5: 054b9b4b48296e4413cf93e6ece7b27d
185
- depends:
186
- - libblas 3.9.0 32_h641d27c_mkl
187
- constrains:
188
- - liblapack 3.9.0 32*_mkl
189
- - liblapacke 3.9.0 32*_mkl
190
- - blas 2.132 mkl
191
- license: BSD-3-Clause
192
- license_family: BSD
193
- size: 3735392
194
- timestamp: 1750389122586
195
- - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.0-he0c23c2_0.conda
196
- sha256: 1a227c094a4e06bd54e8c2f3ec40c17ff99dcf3037d812294f842210aa66dbeb
197
- md5: b6f5352fdb525662f4169a0431d2dd7a
198
- depends:
199
- - ucrt >=10.0.20348.0
200
- - vc >=14.2,<15
201
- - vc14_runtime >=14.29.30139
202
- constrains:
203
- - expat 2.7.0.*
204
- license: MIT
205
- license_family: MIT
206
- size: 140896
207
- timestamp: 1743432122520
208
- - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda
209
- sha256: d3b0b8812eab553d3464bbd68204f007f1ebadf96ce30eb0cbc5159f72e353f5
210
- md5: 85d8fa5e55ed8f93f874b3b23ed54ec6
211
- depends:
212
- - ucrt >=10.0.20348.0
213
- - vc >=14.2,<15
214
- - vc14_runtime >=14.29.30139
215
- license: MIT
216
- license_family: MIT
217
- size: 44978
218
- timestamp: 1743435053850
219
- - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda
220
- sha256: 850e255997f538d5fb6ed651321141155a33bb781d43d326fc4ff62114dd2842
221
- md5: b87a0ac5ab6495d8225db5dc72dd21cd
222
- depends:
223
- - libwinpthread >=12.0.0.r4.gg4f2fc60ca
224
- - libxml2 >=2.13.4,<2.14.0a0
225
- - ucrt >=10.0.20348.0
226
- - vc >=14.2,<15
227
- - vc14_runtime >=14.29.30139
228
- license: BSD-3-Clause
229
- license_family: BSD
230
- size: 2390021
231
- timestamp: 1731375651179
232
- - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-h135ad9c_1.conda
233
- sha256: ea5ed2b362b6dbc4ba7188eb4eaf576146e3dfc6f4395e9f0db76ad77465f786
234
- md5: 21fc5dba2cbcd8e5e26ff976a312122c
235
- depends:
236
- - ucrt >=10.0.20348.0
237
- - vc >=14.2,<15
238
- - vc14_runtime >=14.29.30139
239
- license: LGPL-2.1-only
240
- size: 638142
241
- timestamp: 1740128665984
242
- - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-32_h1aa476e_mkl.conda
243
- build_number: 32
244
- sha256: 5629e592137114b24bfdea71e1c4b6bee11379631409ed91dfe2f83b32a8b298
245
- md5: 1652285573db93afc3ba9b3b9356e3d3
246
- depends:
247
- - libblas 3.9.0 32_h641d27c_mkl
248
- constrains:
249
- - libcblas 3.9.0 32*_mkl
250
- - liblapacke 3.9.0 32*_mkl
251
- - blas 2.132 mkl
252
- license: BSD-3-Clause
253
- license_family: BSD
254
- size: 3735534
255
- timestamp: 1750389164366
256
- - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda
257
- sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc
258
- md5: c15148b2e18da456f5108ccb5e411446
259
- depends:
260
- - ucrt >=10.0.20348.0
261
- - vc >=14.2,<15
262
- - vc14_runtime >=14.29.30139
263
- constrains:
264
- - xz 5.8.1.*
265
- license: 0BSD
266
- size: 104935
267
- timestamp: 1749230611612
268
- - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda
269
- sha256: fc529fc82c7caf51202cc5cec5bb1c2e8d90edbac6d0a4602c966366efe3c7bf
270
- md5: 74860100b2029e2523cf480804c76b9b
271
- depends:
272
- - ucrt >=10.0.20348.0
273
- - vc >=14.2,<15
274
- - vc14_runtime >=14.29.30139
275
- license: BSD-2-Clause
276
- license_family: BSD
277
- size: 88657
278
- timestamp: 1723861474602
279
- - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.50.2-hf5d6505_0.conda
280
- sha256: d136ecf423f83208156daa6a8c1de461a7e9780e8e4423c23c7e136be3c2ff0a
281
- md5: e1e6cac409e95538acdc3d33a0f34d6a
282
- depends:
283
- - ucrt >=10.0.20348.0
284
- - vc >=14.3,<15
285
- - vc14_runtime >=14.44.35208
286
- license: Unlicense
287
- size: 1285981
288
- timestamp: 1751135695346
289
- - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda
290
- sha256: 373f2973b8a358528b22be5e8d84322c165b4c5577d24d94fd67ad1bb0a0f261
291
- md5: 08bfa5da6e242025304b206d152479ef
292
- depends:
293
- - ucrt
294
- constrains:
295
- - pthreads-win32 <0.0a0
296
- - msys2-conda-epoch <0.0a0
297
- license: MIT AND BSD-3-Clause-Clear
298
- size: 35794
299
- timestamp: 1737099561703
300
- - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.13.8-h442d1da_0.conda
301
- sha256: 473b8a53c8df714d676ab41711551c8d250f8d799f2db5cb7cb2b177a0ce13f6
302
- md5: 833c2dbc1a5020007b520b044c713ed3
303
- depends:
304
- - libiconv >=1.18,<2.0a0
305
- - libzlib >=1.3.1,<2.0a0
306
- - ucrt >=10.0.20348.0
307
- - vc >=14.2,<15
308
- - vc14_runtime >=14.29.30139
309
- license: MIT
310
- license_family: MIT
311
- size: 1513627
312
- timestamp: 1746634633560
313
- - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
314
- sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402
315
- md5: 41fbfac52c601159df6c01f875de31b9
316
- depends:
317
- - ucrt >=10.0.20348.0
318
- - vc >=14.2,<15
319
- - vc14_runtime >=14.29.30139
320
- constrains:
321
- - zlib 1.3.1 *_2
322
- license: Zlib
323
- license_family: Other
324
- size: 55476
325
- timestamp: 1727963768015
326
- - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda
327
- sha256: 20e52b0389586d0b914a49cd286c5ccc9c47949bed60ca6df004d1d295f2edbd
328
- md5: 302dff2807f2927b3e9e0d19d60121de
329
- depends:
330
- - intel-openmp 2024.*
331
- - tbb 2021.*
332
- license: LicenseRef-IntelSimplifiedSoftwareOct2022
333
- license_family: Proprietary
334
- size: 103106385
335
- timestamp: 1730232843711
336
- - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.3.1-py313ha14762d_0.conda
337
- sha256: 4a07411ed54fda72f2bc800130f1f0d520591aa78eba5c5f39d092810a6e908e
338
- md5: 7d719836eecd25d2cf2bfb44c3c1be2c
339
- depends:
340
- - libblas >=3.9.0,<4.0a0
341
- - libcblas >=3.9.0,<4.0a0
342
- - liblapack >=3.9.0,<4.0a0
343
- - python >=3.13,<3.14.0a0
344
- - python_abi 3.13.* *_cp313
345
- - ucrt >=10.0.20348.0
346
- - vc >=14.3,<15
347
- - vc14_runtime >=14.44.35208
348
- constrains:
349
- - numpy-base <0a0
350
- license: BSD-3-Clause
351
- license_family: BSD
352
- size: 7302895
353
- timestamp: 1751342919937
354
- - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.5.1-h725018a_0.conda
355
- sha256: 2b2eb73b0661ff1aed55576a3d38614852b5d857c2fa9205ac115820c523306c
356
- md5: d124fc2fd7070177b5e2450627f8fc1a
357
- depends:
358
- - ca-certificates
359
- - ucrt >=10.0.20348.0
360
- - vc >=14.3,<15
361
- - vc14_runtime >=14.44.35208
362
- license: Apache-2.0
363
- license_family: Apache
364
- size: 9327033
365
- timestamp: 1751392489008
366
- - conda: https://conda.anaconda.org/conda-forge/win-64/pandas-2.3.0-py313hf91d08e_0.conda
367
- sha256: 2dac0e788df070dfb12e7f3630386973b0bb9730d04b7f774c519e3f3f1db21f
368
- md5: 06f537fc2102679d5c1567cf2d38391d
369
- depends:
370
- - numpy >=1.21,<3
371
- - numpy >=1.22.4
372
- - python >=3.13,<3.14.0a0
373
- - python-dateutil >=2.8.2
374
- - python-tzdata >=2022.7
375
- - python_abi 3.13.* *_cp313
376
- - pytz >=2020.1
377
- - ucrt >=10.0.20348.0
378
- - vc >=14.2,<15
379
- - vc14_runtime >=14.29.30139
380
- constrains:
381
- - pytables >=3.8.0
382
- - scipy >=1.10.0
383
- - xlsxwriter >=3.0.5
384
- - sqlalchemy >=2.0.0
385
- - tzdata >=2022.7
386
- - python-calamine >=0.1.7
387
- - pyqt5 >=5.15.9
388
- - s3fs >=2022.11.0
389
- - zstandard >=0.19.0
390
- - qtpy >=2.3.0
391
- - matplotlib >=3.6.3
392
- - xlrd >=2.0.1
393
- - odfpy >=1.4.1
394
- - pyxlsb >=1.0.10
395
- - pandas-gbq >=0.19.0
396
- - fastparquet >=2022.12.0
397
- - openpyxl >=3.1.0
398
- - tabulate >=0.9.0
399
- - gcsfs >=2022.11.0
400
- - bottleneck >=1.3.6
401
- - numexpr >=2.8.4
402
- - pyarrow >=10.0.1
403
- - beautifulsoup4 >=4.11.2
404
- - pyreadstat >=1.2.0
405
- - lxml >=4.9.2
406
- - xarray >=2022.12.0
407
- - html5lib >=1.1
408
- - numba >=0.56.4
409
- - fsspec >=2022.11.0
410
- - psycopg2 >=2.9.6
411
- - blosc >=1.21.3
412
- license: BSD-3-Clause
413
- license_family: BSD
414
- size: 13929307
415
- timestamp: 1749100343118
416
- - conda: https://conda.anaconda.org/conda-forge/noarch/pathlib-1.0.1-py_1.tar.bz2
417
- sha256: ab8c9402ef7d8e8b23b66f27a5e9eafd63d3193c6531a62b4ae9b8a949f356e7
418
- md5: 930df2b5ca63ffdd1dd5f8b235f344a2
419
- depends:
420
- - python
421
- license: MIT
422
- license_family: MIT
423
- size: 14998
424
- timestamp: 1531194126420
425
- - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
426
- sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6
427
- md5: 12c566707c80111f9799308d9e265aef
428
- depends:
429
- - python >=3.9
430
- - python
431
- license: BSD-3-Clause
432
- license_family: BSD
433
- size: 110100
434
- timestamp: 1733195786147
435
- - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda
436
- sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca
437
- md5: e2fd202833c4a981ce8a65974fe4abd1
438
- depends:
439
- - __win
440
- - python >=3.9
441
- - win_inet_pton
442
- license: BSD-3-Clause
443
- license_family: BSD
444
- size: 21784
445
- timestamp: 1733217448189
446
- - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.5-h7de537c_102_cp313.conda
447
- build_number: 102
448
- sha256: 3de2b9f89b220cb779f6947cf87b328f73d54eed4f7e75a3f9337caeb4443910
449
- md5: a9a4658f751155c819d6cd4c47f0a4d2
450
- depends:
451
- - bzip2 >=1.0.8,<2.0a0
452
- - libexpat >=2.7.0,<3.0a0
453
- - libffi >=3.4.6,<3.5.0a0
454
- - liblzma >=5.8.1,<6.0a0
455
- - libmpdec >=4.0.0,<5.0a0
456
- - libsqlite >=3.50.1,<4.0a0
457
- - libzlib >=1.3.1,<2.0a0
458
- - openssl >=3.5.0,<4.0a0
459
- - python_abi 3.13.* *_cp313
460
- - tk >=8.6.13,<8.7.0a0
461
- - tzdata
462
- - ucrt >=10.0.20348.0
463
- - vc >=14.2,<15
464
- - vc14_runtime >=14.29.30139
465
- license: Python-2.0
466
- size: 16825621
467
- timestamp: 1750062318985
468
- python_site_packages_path: Lib/site-packages
469
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
470
- sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664
471
- md5: 5b8d21249ff20967101ffa321cab24e8
472
- depends:
473
- - python >=3.9
474
- - six >=1.5
475
- - python
476
- license: Apache-2.0
477
- license_family: APACHE
478
- size: 233310
479
- timestamp: 1751104122689
480
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda
481
- sha256: e8392a8044d56ad017c08fec2b0eb10ae3d1235ac967d0aab8bd7b41c4a5eaf0
482
- md5: 88476ae6ebd24f39261e0854ac244f33
483
- depends:
484
- - python >=3.9
485
- license: Apache-2.0
486
- license_family: APACHE
487
- size: 144160
488
- timestamp: 1742745254292
489
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda
490
- build_number: 7
491
- sha256: 0595134584589064f56e67d3de1d8fcbb673a972946bce25fb593fb092fdcd97
492
- md5: e84b44e6300f1703cb25d29120c5b1d8
493
- constrains:
494
- - python 3.13.* *_cp313
495
- license: BSD-3-Clause
496
- license_family: BSD
497
- size: 6988
498
- timestamp: 1745258852285
499
- - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda
500
- sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0
501
- md5: bc8e3267d44011051f2eb14d22fb0960
502
- depends:
503
- - python >=3.9
504
- license: MIT
505
- license_family: MIT
506
- size: 189015
507
- timestamp: 1742920947249
508
- - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.4-pyhd8ed1ab_0.conda
509
- sha256: 9866aaf7a13c6cfbe665ec7b330647a0fb10a81e6f9b8fee33642232a1920e18
510
- md5: f6082eae112814f1447b56a5e1f6ed05
511
- depends:
512
- - certifi >=2017.4.17
513
- - charset-normalizer >=2,<4
514
- - idna >=2.5,<4
515
- - python >=3.9
516
- - urllib3 >=1.21.1,<3
517
- constrains:
518
- - chardet >=3.0.2,<6
519
- license: Apache-2.0
520
- license_family: APACHE
521
- size: 59407
522
- timestamp: 1749498221996
523
- - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda
524
- sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db
525
- md5: a451d576819089b0d672f18768be0f65
526
- depends:
527
- - python >=3.9
528
- license: MIT
529
- license_family: MIT
530
- size: 16385
531
- timestamp: 1733381032766
532
- - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda
533
- sha256: 03cc5442046485b03dd1120d0f49d35a7e522930a2ab82f275e938e17b07b302
534
- md5: 9190dd0a23d925f7602f9628b3aed511
535
- depends:
536
- - libhwloc >=2.11.2,<2.11.3.0a0
537
- - ucrt >=10.0.20348.0
538
- - vc >=14.2,<15
539
- - vc14_runtime >=14.29.30139
540
- license: Apache-2.0
541
- license_family: APACHE
542
- size: 151460
543
- timestamp: 1732982860332
544
- - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda
545
- sha256: e3614b0eb4abcc70d98eae159db59d9b4059ed743ef402081151a948dce95896
546
- md5: ebd0e761de9aa879a51d22cc721bd095
547
- depends:
548
- - ucrt >=10.0.20348.0
549
- - vc >=14.2,<15
550
- - vc14_runtime >=14.29.30139
551
- license: TCL
552
- license_family: BSD
553
- size: 3466348
554
- timestamp: 1748388121356
555
- - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
556
- sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192
557
- md5: 4222072737ccff51314b5ece9c7d6f5a
558
- license: LicenseRef-Public-Domain
559
- size: 122968
560
- timestamp: 1742727099393
561
- - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda
562
- sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450
563
- md5: 6797b005cd0f439c4c5c9ac565783700
564
- constrains:
565
- - vs2015_runtime >=14.29.30037
566
- license: LicenseRef-MicrosoftWindowsSDK10
567
- size: 559710
568
- timestamp: 1728377334097
569
- - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda
570
- sha256: 4fb9789154bd666ca74e428d973df81087a697dbb987775bc3198d2215f240f8
571
- md5: 436c165519e140cb08d246a4472a9d6a
572
- depends:
573
- - brotli-python >=1.0.9
574
- - h2 >=4,<5
575
- - pysocks >=1.5.6,<2.0,!=1.5.7
576
- - python >=3.9
577
- - zstandard >=0.18.0
578
- license: MIT
579
- license_family: MIT
580
- size: 101735
581
- timestamp: 1750271478254
582
- - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_26.conda
583
- sha256: b388d88e04aa0257df4c1d28f8d85d985ad07c1e5645aa62335673c98704c4c6
584
- md5: 18b6bf6f878501547786f7bf8052a34d
585
- depends:
586
- - vc14_runtime >=14.44.35208
587
- track_features:
588
- - vc14
589
- license: BSD-3-Clause
590
- license_family: BSD
591
- size: 17914
592
- timestamp: 1750371462857
593
- - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_26.conda
594
- sha256: 7bad6e25a7c836d99011aee59dcf600b7f849a6fa5caa05a406255527e80a703
595
- md5: 14d65350d3f5c8ff163dc4f76d6e2830
596
- depends:
597
- - ucrt >=10.0.20348.0
598
- constrains:
599
- - vs2015_runtime 14.44.35208.* *_26
600
- license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
601
- license_family: Proprietary
602
- size: 756109
603
- timestamp: 1750371459116
604
- - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
605
- sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f
606
- md5: 46e441ba871f524e2b067929da3051c2
607
- depends:
608
- - __win
609
- - python >=3.9
610
- license: LicenseRef-Public-Domain
611
- size: 9555
612
- timestamp: 1733130678956
613
- - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py313ha7868ed_2.conda
614
- sha256: b7bfe264fe3810b1abfe7f80c0f21f470d7cc730ada7ce3b3d08a90cb871999c
615
- md5: b4d967b4d695a2ba8554738b3649d754
616
- depends:
617
- - cffi >=1.11
618
- - python >=3.13,<3.14.0a0
619
- - python_abi 3.13.* *_cp313
620
- - ucrt >=10.0.20348.0
621
- - vc >=14.2,<15
622
- - vc14_runtime >=14.29.30139
623
- license: BSD-3-Clause
624
- license_family: BSD
625
- size: 449871
626
- timestamp: 1745870298072
mpcahydro-2.0.1/pixi.toml DELETED
@@ -1,35 +0,0 @@
1
- [workspace]
2
- preview = ["pixi-build"]
3
- channels = ["conda-forge"]
4
- name = "mpcaHydro"
5
- platforms = ["win-64"]
6
- version = "0.1.0"
7
-
8
- [tasks]
9
- build-wheel = "python -m build --wheel"
10
-
11
- [dependencies]
12
- pandas = ">=2.3.0,<3"
13
- requests = ">=2.32.4,<3"
14
- pathlib = ">=1.0.1,<2"
15
-
16
- [package]
17
- name = "mpcaHydro"
18
- version = "0.1.0"
19
-
20
- [package.build]
21
- backend = { name = "pixi-build-python", version = "0.1.*" }
22
- channels = [
23
- "https://prefix.dev/pixi-build-backends",
24
- "https://prefix.dev/conda-forge",
25
- ]
26
-
27
-
28
- [package.host-dependencies]
29
- hatchling = "1.26.*"
30
-
31
- [package.run-dependencies]
32
- requests = "*"
33
- pandas = "*"
34
- pathlib = "*"
35
-
@@ -1,88 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- Created on Tue Oct 10 14:13:23 2023
4
-
5
- @author: mfratki
6
- """
7
-
8
- import pandas as pd
9
- # import geopandas as gpd
10
-
11
-
12
- CONSITUENT_MAP = {'Water Temp. (C)': 'WT',
13
- 'Discharge (cfs)': 'Q',
14
- 'DO (mg/L)': 'DO'
15
- }
16
-
17
- def download(station_no):
18
- # save_path = Path(save_path)
19
- # file_path = save_path.joinpath('csg.csv')
20
-
21
- station = station_no[1:]
22
- df = pd.read_csv(f'https://maps2.dnr.state.mn.us/cgi-bin/csg.cgi?mode=dump_hydro_data_as_csv&site={station}&startdate=1996-1-1&enddate=2050-1-1')
23
- df['station_id'] = station_no
24
-
25
- return df
26
-
27
-
28
-
29
- # def process(df):
30
- # df['Timestamp'] = pd.to_datetime(df['Timestamp'])
31
- # df.set_index('Timestamp',inplace=True)
32
- # value_variables = [column for column in df.columns if (column not in ['Site','Timestamp','station_no']) & ~(column.endswith('Quality'))]
33
-
34
- # test = df[value_variables].resample(rule='1H', kind='interval').mean().dropna()
35
- # df = df['Value'].resample(rule='1H', kind='interval').mean().to_frame()
36
-
37
- def transform(data):
38
-
39
-
40
- data['Timestamp'] = pd.to_datetime(data['Timestamp'])
41
- data['Timestamp'].dt.tz_localize('UTC')
42
-
43
- id_columns = ['Timestamp','station_id']
44
- quality_columns = ['Water Temp. (C) Quality',
45
- 'Discharge (cfs) Quality',
46
- 'DO (mg/L) Quality']
47
-
48
- value_columns = ['Water Temp. (C)',
49
- 'Discharge (cfs)',
50
- 'DO (mg/L)']
51
-
52
- value_columns = [column for column in data.columns if column in value_columns]
53
- quality_columns = [column for column in data.columns if column in quality_columns]
54
-
55
-
56
-
57
- data_melt = pd.melt(data,col_level=0,id_vars = id_columns,value_vars = value_columns)
58
- data_melt['Quality'] = pd.melt(data,col_level=0,id_vars = id_columns,value_vars = quality_columns)['value']
59
-
60
- data_melt.rename(columns = {'Timestamp': 'datetime',
61
- 'Value': 'value',
62
- 'stationparameter_name': 'variable',
63
- 'station_no': 'station_id',
64
- 'Quality' : 'quality'},inplace = True)
65
-
66
- data_melt['unit'] = data_melt['variable'].map({'Water Temp. (C)' : 'C',
67
- 'Discharge (cfs)' : 'cfs',
68
- 'DO (mg/L)' : 'mg/L'})
69
-
70
- data_melt['constituent'] = data_melt['variable'].map({'Water Temp. (C)' : 'WT',
71
- 'Discharge (cfs)' : 'Q',
72
- 'DO (mg/L)' : 'DO'})
73
-
74
- data_melt.dropna(subset = 'value',inplace=True)
75
- data['source'] = 'csg'
76
- return data_melt
77
-
78
-
79
-
80
-
81
-
82
- def load(data,file_path):
83
-
84
- data.to_csv(file_path)
85
-
86
-
87
-
88
-
File without changes
File without changes
File without changes