pyadps 0.3.3b0__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.
@@ -0,0 +1,339 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Created on Tue Aug 11 12:56:44 2020
5
+
6
+ @author: amol
7
+ """
8
+
9
+ import time
10
+
11
+ import netCDF4 as nc4
12
+ import numpy as np
13
+ import pandas as pd
14
+ import streamlit as st
15
+ from netCDF4 import date2num
16
+
17
+ from pyadps.utils import readrdi as rd
18
+
19
+
20
+ def pd2nctime(time, t0="hours since 2000-01-01"):
21
+ """
22
+ Function to convert pandas datetime format to netcdf datetime format.
23
+ """
24
+ dti = pd.DatetimeIndex(time)
25
+ pydt = dti.to_pydatetime()
26
+ nctime = date2num(pydt, t0)
27
+ return nctime
28
+
29
+
30
+ def flead_ncatt(fl_obj, ncfile_id, ens=0):
31
+ """
32
+ Adds global attributes to netcdf file. All variables from Fixed Leader
33
+ are appended for a given ensemble.
34
+
35
+ Parameters
36
+ ----------
37
+ fl_obj : TYPE, FixedLeader Object
38
+ DESCRIPTION.
39
+ ncfile_id : TYPE
40
+ DESCRIPTION.
41
+ ens : TYPE, INTEGER optional
42
+ DESCRIPTION. The default is 0.
43
+
44
+ Returns
45
+ -------
46
+ None.
47
+
48
+ """
49
+
50
+ ncfile_id.history = "Created " + time.ctime(time.time())
51
+ for key, value in fl_obj.fleader.items():
52
+ format_key = key.replace(" ", "_")
53
+ setattr(ncfile_id, format_key, format(value[ens], "d"))
54
+
55
+ for key, value in fl_obj.system_configuration(ens).items():
56
+ format_key = key.replace(" ", "_")
57
+ setattr(ncfile_id, format_key, format(value))
58
+
59
+ for key, value in fl_obj.ex_coord_trans(ens).items():
60
+ format_key = key.replace(" ", "_")
61
+ setattr(ncfile_id, format_key, format(value))
62
+
63
+ for field in ["source", "avail"]:
64
+ for key, value in fl_obj.ez_sensor(ens, field).items():
65
+ format_key = key.replace(" ", "_")
66
+ format_key = format_key + "_" + field.capitalize()
67
+ setattr(ncfile_id, format_key, format(value))
68
+
69
+
70
+ def rawnc(
71
+ infile,
72
+ outfile,
73
+ time,
74
+ axis_option=None,
75
+ attributes=None,
76
+ t0="hours since 2000-01-01",
77
+ ):
78
+ """
79
+ rawnc is a function to create netcdf file. Stores 3-D data types like
80
+ velocity, echo, correlation, and percent good.
81
+
82
+ Args:
83
+ infile (string): Input file path including filename
84
+ outfile (string): Output file path including filename
85
+
86
+ Returns
87
+ -------
88
+ None.
89
+
90
+ """
91
+
92
+ outnc = nc4.Dataset(outfile, "w", format="NETCDF4")
93
+
94
+ flead = rd.FixedLeader(infile)
95
+ cell_list = flead.fleader["Cells"]
96
+ beam_list = flead.fleader["Beams"]
97
+
98
+ # Dimensions
99
+ # Define the primary axis based on axis_option
100
+ if axis_option == "ensemble":
101
+ outnc.createDimension("ensemble", None)
102
+ primary_axis = "ensemble"
103
+ ensemble = outnc.createVariable("ensemble", "i4", ("ensemble",))
104
+ ensemble.axis = "T"
105
+ elif axis_option == "time":
106
+ tsize = len(time)
107
+ outnc.createDimension("time", tsize)
108
+ primary_axis = "time"
109
+ time_var = outnc.createVariable("time", "i4", ("time",))
110
+ time_var.axis = "T"
111
+ time_var.units = t0
112
+ time_var.long_name = "time"
113
+
114
+ # Convert time_data to numerical format
115
+ nctime = pd2nctime(time, t0)
116
+ time_var[:] = nctime
117
+
118
+ else:
119
+ raise ValueError(f"Invalid axis_option: {axis_option}.")
120
+
121
+ outnc.createDimension("cell", max(cell_list))
122
+ outnc.createDimension("beam", max(beam_list))
123
+
124
+ # Variables
125
+ # Dimension Variables
126
+ cell = outnc.createVariable("cell", "i2", ("cell",))
127
+ cell.axis = "Z"
128
+ beam = outnc.createVariable("beam", "i2", ("beam",))
129
+ beam.axis = "X"
130
+
131
+ # Variables
132
+
133
+ # Data
134
+ cell[:] = np.arange(1, max(cell_list) + 1, 1)
135
+ beam[:] = np.arange(1, max(beam_list) + 1, 1)
136
+
137
+ varlist = rd.FileHeader(infile).data_types(1)
138
+ varlist.remove("Fixed Leader")
139
+ varlist.remove("Variable Leader")
140
+
141
+ varid = [0] * len(varlist)
142
+
143
+ for i, item in enumerate(varlist):
144
+ if item == "Velocity":
145
+ varid[i] = outnc.createVariable(
146
+ item, "i2", (primary_axis, "cell", "beam"), fill_value=-32768
147
+ )
148
+ # varid[i].missing_value = -32768
149
+ vel = getattr(rd, item)
150
+ var = vel(infile).data
151
+ # var = rd.variables(infile, item)
152
+
153
+ else:
154
+ # Unsigned integers might be assigned for future netcdf versions
155
+ format_item = item.replace(" ", "") # For percent good
156
+ varid[i] = outnc.createVariable(
157
+ format_item, "i2", (primary_axis, "cell", "beam")
158
+ )
159
+ datatype = getattr(rd, format_item)
160
+ var = np.array(datatype(infile).data, dtype="int16")
161
+ # var = np.array(rd.variables(infile, item), dtype="int16")
162
+
163
+ vshape = var.T.shape
164
+ if i == 0:
165
+ if primary_axis == "ensemble":
166
+ ensemble[:] = np.arange(1, vshape[0] + 1, 1)
167
+
168
+ varid[i][0 : vshape[0], 0 : vshape[1], 0 : vshape[2]] = var.T
169
+
170
+ # Add global attributes if provided
171
+ if attributes:
172
+ for key, value in attributes.items():
173
+ setattr(
174
+ outnc, key, str(value)
175
+ ) # Convert to string to store in NetCDF metadata
176
+
177
+ # outnc.history = "Created " + time.ctime(time.time())
178
+ flead_ncatt(flead, outnc)
179
+
180
+ outnc.close()
181
+
182
+
183
+ def vlead_nc(
184
+ infile,
185
+ outfile,
186
+ time,
187
+ axis_option=None,
188
+ attributes=None,
189
+ t0="hours since 2000-01-01",
190
+ ):
191
+ """
192
+ Function to create ncfile containing Variable Leader.
193
+
194
+ Args:
195
+ infile (string): Input file path including filename
196
+ outfile (string): Output file path including filename
197
+ """
198
+ outnc = nc4.Dataset(outfile, "w", format="NETCDF4")
199
+
200
+ # Dimensions
201
+ # Define the primary axis based on axis_option
202
+ if axis_option == "ensemble":
203
+ outnc.createDimension("ensemble", None)
204
+ primary_axis = "ensemble"
205
+ ensemble = outnc.createVariable("ensemble", "i4", ("ensemble",))
206
+ ensemble.axis = "T"
207
+ elif axis_option == "time":
208
+ tsize = len(time)
209
+ outnc.createDimension("time", tsize)
210
+ primary_axis = "time"
211
+ time_var = outnc.createVariable("time", "i4", ("time",))
212
+ time_var.axis = "T"
213
+ time_var.units = t0
214
+ time_var.long_name = "time"
215
+
216
+ # Convert time_data to numerical format
217
+ nctime = pd2nctime(time, t0)
218
+ time_var[:] = nctime
219
+
220
+ else:
221
+ raise ValueError(f"Invalid axis_option: {axis_option}.")
222
+
223
+ # Variables
224
+
225
+ vlead = rd.VariableLeader(infile)
226
+ vdict = vlead.vleader
227
+ varid = [0] * len(vdict)
228
+
229
+ i = 0
230
+
231
+ for key, values in vdict.items():
232
+ format_item = key.replace(" ", "_")
233
+ varid[i] = outnc.createVariable(
234
+ format_item, "i4", primary_axis, fill_value=-32768
235
+ )
236
+ var = values
237
+ vshape = var.shape
238
+ if i == 0:
239
+ if primary_axis == "ensemble":
240
+ ensemble[:] = np.arange(1, vshape[0] + 1, 1)
241
+
242
+ varid[i][0 : vshape[0]] = var
243
+ i += 1
244
+
245
+ # Add global attributes if provided
246
+ if attributes:
247
+ for key, value in attributes.items():
248
+ setattr(outnc, key, str(value)) # Store attributes as strings
249
+
250
+ outnc.close()
251
+
252
+
253
+ def finalnc(
254
+ outfile, depth, final_mask, time, data, t0="hours since 2000-01-01", attributes=None
255
+ ):
256
+ """
257
+ Function to create the processed NetCDF file.
258
+
259
+ Args:
260
+ outfile (string): Output file path
261
+ depth (numpy array): Contains the depth values (negative for depth)
262
+ time (pandas array): Time axis in Pandas datetime format
263
+ data (numpy array): Velocity (beam, depth, time)
264
+ t0 (string): Time unit and origin
265
+ """
266
+ fill = -32768
267
+
268
+ # Change velocity to cm/s
269
+ data = data.astype(np.float64)
270
+ data[data > fill] /= 10
271
+
272
+ # Change depth to positive
273
+ # depth = abs(depth)
274
+
275
+ # Reverse the arrays if depth in descending order
276
+ if np.all(depth[:-1] >= depth[1:]):
277
+ depth = depth[::-1]
278
+ data = data[:, ::-1, :]
279
+ final_mask = final_mask[::-1, :]
280
+
281
+ ncfile = nc4.Dataset(outfile, mode="w", format="NETCDF4")
282
+ # Check if depth is scalar or array
283
+ if np.isscalar(depth):
284
+ zsize = 1 # Handle scalar depth
285
+ else:
286
+ zsize = len(depth) # Handle array depth
287
+ tsize = len(time)
288
+ ncfile.createDimension("depth", zsize)
289
+ ncfile.createDimension("time", tsize)
290
+
291
+ z = ncfile.createVariable("depth", np.float32, ("depth"))
292
+ z.units = "m"
293
+ z.long_name = "depth"
294
+ z.positive = "down"
295
+
296
+ t = ncfile.createVariable("time", np.float32, ("time"))
297
+ t.units = t0
298
+ t.long_name = "time"
299
+
300
+ # Create 2D variables
301
+ uvel = ncfile.createVariable("u", np.float32, ("time", "depth"), fill_value=fill)
302
+ uvel.units = "cm/s"
303
+ uvel.long_name = "zonal_velocity"
304
+
305
+ vvel = ncfile.createVariable("v", np.float32, ("time", "depth"), fill_value=fill)
306
+ vvel.units = "cm/s"
307
+ vvel.long_name = "meridional_velocity"
308
+
309
+ wvel = ncfile.createVariable("w", np.float32, ("time", "depth"), fill_value=fill)
310
+ wvel.units = "cm/s"
311
+ wvel.long_name = "vertical_velocity"
312
+
313
+ evel = ncfile.createVariable(
314
+ "err", np.float32, ("time", "depth"), fill_value=-32768
315
+ )
316
+ evel.units = "cm/s"
317
+ evel.long_name = "error_velocity"
318
+
319
+ mvel = ncfile.createVariable("mask", np.float32, ("time", "depth"), fill_value=fill)
320
+ mvel.long_name = "Velocity Mask (1: bad value, 0: good value)"
321
+
322
+ nctime = pd2nctime(time, t0)
323
+ # write data
324
+ z[:] = depth
325
+ t[:] = nctime
326
+ uvel[:, :] = data[0, :, :].T
327
+ vvel[:, :] = data[1, :, :].T
328
+ wvel[:, :] = data[2, :, :].T
329
+ evel[:, :] = data[3, :, :].T
330
+ mvel[:, :] = final_mask.T
331
+
332
+ # Add global attributes if provided
333
+ if attributes:
334
+ for key, value in attributes.items():
335
+ setattr(ncfile, key, str(value)) # Store attributes as strings
336
+
337
+ ncfile.mask_applied = "True"
338
+
339
+ ncfile.close()
@@ -0,0 +1,8 @@
1
+ The MIT License (MIT)
2
+ Copyright © 2024 <copyright holders>
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5
+
6
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
+
8
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,172 @@
1
+ Metadata-Version: 2.3
2
+ Name: pyadps
3
+ Version: 0.3.3b0
4
+ Summary: A Python package for ADCP data processing
5
+ Home-page: https://example.com
6
+ License: MIT
7
+ Keywords: adcp,data-processing,oceanography
8
+ Author: P. Amol
9
+ Author-email: prakashamol@gmail.com
10
+ Requires-Python: >=3.12,<4.0.0
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Provides-Extra: tests
17
+ Requires-Dist: cmake (>=3.30.2)
18
+ Requires-Dist: matplotlib (>=3.8.4)
19
+ Requires-Dist: meson (>=1.4.1)
20
+ Requires-Dist: netCDF4 (>=1.7.1)
21
+ Requires-Dist: numpy (>=1.26.4)
22
+ Requires-Dist: pandas (>=2.2.2)
23
+ Requires-Dist: plotly (>=5.22.0)
24
+ Requires-Dist: plotly-resampler (>=0.10.0)
25
+ Requires-Dist: pygeomag (>=1.1.0,<2.0.0)
26
+ Requires-Dist: scipy (>=1.14.0)
27
+ Requires-Dist: streamlit (>=1.36.0)
28
+ Project-URL: Documentation, https://example.com/docs
29
+ Project-URL: Repository, https://github.com/p-amol/pyadps
30
+ Description-Content-Type: text/markdown
31
+
32
+ # pyadps
33
+
34
+ `pyadps` is a Python package for processing moored Acoustic Doppler
35
+ Current Profiler (ADCP) data. It provides various functionalities
36
+ such as data reading, quality control tests, NetCDF file creation,
37
+ and visualization.
38
+
39
+ This software offers both a graphical interface (`Streamlit`) for
40
+ those new to Python and direct Python package access for experienced
41
+ users. Please note that `pyadps` is primarily designed for Teledyne
42
+ RDI workhorse ADCPs. Other company's ADCP files are not compatible,
43
+ and while some other RDI models may work, they might require additional
44
+ considerations.
45
+
46
+ - Documentation: <https://pyadps.readthedocs.io>
47
+ - Source code: <https://github.com/p-amol/pyadps>
48
+ - Bug reports: <https://github.com/p-amol/pyadps/issues>
49
+
50
+ ## Table of Contents
51
+
52
+ - [Installation](#installation)
53
+ - [Quick Start](#quick-start)
54
+ - [License](#license)
55
+
56
+ ## Installation
57
+
58
+ We recommend installing the package within a virtual environment.
59
+ At present, the package is compatible exclusively with Python version 3.12.
60
+ You can create a Python environment using tools like `venv` or `conda`.
61
+ Below are instructions for both methods.
62
+
63
+ ### 1. Using `venv` (Built-in Python Tool)
64
+
65
+ #### Step 1: Install Python version 3.12 (if not already installed)
66
+
67
+ Ensure you have Python installed. You can download the latest version from [python.org](https://www.python.org/downloads/).
68
+
69
+ #### Step 2: Create a Virtual Environment
70
+
71
+ - Open your terminal or command prompt.
72
+ - Navigate to your project folder:
73
+
74
+ ```bash
75
+ cd /path/to/your/project
76
+ ```
77
+
78
+ - Run the following command to create a virtual environment
79
+ (replace adpsenv with your preferred environment name):
80
+
81
+ ```bash
82
+ python -m venv adpsenv
83
+ ```
84
+
85
+ #### Step 3: Activate the Environment
86
+
87
+ - On Windows:
88
+
89
+ ```bash
90
+ adpsenv\Scripts\activate
91
+ ```
92
+
93
+ - On macOS/Linux:
94
+
95
+ ```bash
96
+ source adpsenv/bin/activate
97
+ ```
98
+
99
+ You’ll see the environment name in your terminal prompt
100
+ indicating the environment is active.
101
+
102
+ #### Step 4: Install Dependencies
103
+
104
+ Now you can install packages like this:
105
+
106
+ ```bash
107
+ pip install pyadps
108
+ ```
109
+
110
+ #### Step 5: Deactivate the Environment
111
+
112
+ When you’re done working in the environment, deactivate it by running:
113
+
114
+ ```bash
115
+ deactivate
116
+ ```
117
+
118
+ ### 2. Using `conda` (Anaconda/Miniconda)
119
+
120
+ #### Step 1: Install Conda
121
+
122
+ First, you need to have Conda installed on your system. You can either install:
123
+
124
+ - [Anaconda (Full Distribution)](https://www.anaconda.com/products/individual)
125
+ - [Miniconda (Lightweight Version)](https://docs.conda.io/en/latest/miniconda.html)
126
+
127
+ #### Step 2: Create a Conda Environment with Python 3.12
128
+
129
+ Once Conda is installed, open a terminal or command prompt and run
130
+ the following to create a new environment (replace `adpsenv` with
131
+ your preferred environment name):
132
+
133
+ ```bash
134
+ conda create --name adpsenv python=3.12
135
+ ```
136
+
137
+ #### Step 3: Activate the Conda Environment
138
+
139
+ ```bash
140
+ conda activate adpsenv
141
+ ```
142
+
143
+ #### Step 4: Install pyadps Dependencies
144
+
145
+ You can install packages with pip inside Conda environments.
146
+
147
+ ```bash
148
+ pip install pyadps
149
+ ```
150
+
151
+ #### Step 5: Deactivate the Conda Environment
152
+
153
+ When done working in the environment, deactivate the environment by running:
154
+
155
+ ```bash
156
+ conda deactivate
157
+ ```
158
+
159
+ ## Quick Start
160
+
161
+ ### Streamlit web interface
162
+
163
+ Open a terminal or command prompt, activate the environment, and run the command.
164
+
165
+ ```bash
166
+ run-pyadps
167
+ ```
168
+
169
+ ## License
170
+
171
+ This project is licensed under the MIT License. See the LICENSE file for details.
172
+
@@ -0,0 +1,33 @@
1
+ pyadps/Home_Page.py,sha256=gC0eFMtn85U_A4KcVlCEzXkB6a_J0WD3vpK691Kmyw8,1180
2
+ pyadps/__init__.py,sha256=bNCm6_WIhiwvaUeOZhRkyLZyzzUKfSH80Fslg0JPJyk,232
3
+ pyadps/__main__.py,sha256=cIFUayxPnKl00oIR99L6IUEvc8trW7dijtfBQCAen5c,356
4
+ pyadps/pages/01_Read_File.py,sha256=MaBtdMrd1m6aox8O7IxVdMeoS5kYEiaossop_U3w6I8,14324
5
+ pyadps/pages/02_View_Raw_Data.py,sha256=AhT7gvDbcMRPf-WIBzTQ0o-nn9_q7NH6plTlpMtgzaY,6170
6
+ pyadps/pages/03_Download_Raw_File.py,sha256=3887Lj5h1IZTHFpPfc0fYT7oJ2qdMJtJj6X6fmHT9zw,9524
7
+ pyadps/pages/04_Sensor_Health.py,sha256=XQ7oTZ9LCrKDclVZPKQVsBtyDShdyHZfVhzCTRGZY0g,33905
8
+ pyadps/pages/05_QC_Test.py,sha256=W_YmczApToAt9px-W8F7IGcpmwo7-HVuGl9N7dzAQ9U,16054
9
+ pyadps/pages/06_Profile_Test.py,sha256=S_AhDv9mdoJOoVy1Qj4EI3VZT9pHSIrohgoaCLs75A0,34725
10
+ pyadps/pages/07_Velocity_Test.py,sha256=Sc9Ge8b_OSjwYX8r_VtJ0-3iMC9DfrDapmdFvuj5nT0,23007
11
+ pyadps/pages/08_Write_File.py,sha256=pXa1qUPegQ8nnZ9e65oE7GkuMPJ23TPM5956HlLN_PM,21540
12
+ pyadps/pages/09_Auto_process.py,sha256=gOvLEfwAPxe9v-W8DASKSuNQzB5BjHLnPkwUgOufwdI,1776
13
+ pyadps/pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ pyadps/utils/__init__.py,sha256=nCqRp-OT_1BC7RnL3ARUIldlw9sWyr1XqQvQid-B4ts,407
15
+ pyadps/utils/autoprocess.py,sha256=QBwu-CeQUmKn0B6usHthW0v78TeFLxC7k6s0ZPEZAuo,19507
16
+ pyadps/utils/metadata/config.ini,sha256=TC7htzGwUukIXt_u3JR5ycyvOoDj_JxWgGY6khjNeck,2154
17
+ pyadps/utils/metadata/demo.000,sha256=qxB3sgjABrpv4DNXkwjpbSxk5sc4UwAI8kgQX0--PM8,234468
18
+ pyadps/utils/metadata/flmeta.json,sha256=diIB9nht_0uw9YJNSFGdZYGzeVbR-07zIZS9Nf4VPSE,14245
19
+ pyadps/utils/metadata/vlmeta.json,sha256=_dkQlGkkUvpAIM7S6kEUenSaiCpOrwXg8n1aU3dDF3s,22535
20
+ pyadps/utils/plotgen.py,sha256=wF9Cj0oKeCSEYyPJxWdadJT8aiavE7HXEQJm6cDiBBY,26277
21
+ pyadps/utils/profile_test.py,sha256=kcqdFigL2wQwMRrKyfNzfGIYcFwRj1_945lEpIio6pQ,20173
22
+ pyadps/utils/pyreadrdi.py,sha256=P1UTDrglgbYn3XQGUTsqNPynDGE-zp4cI_TW8yfOlic,35090
23
+ pyadps/utils/readrdi.py,sha256=2v5N1SsBigj4Rnj0BCYwJ4x0p5eYdShKd0d236iA7oM,50006
24
+ pyadps/utils/script.py,sha256=uqKnKW1O5IiCNeQnaXy99R0Xf5uh5i3ALNxxZlmYrlE,6358
25
+ pyadps/utils/sensor_health.py,sha256=aHRaU4kMJZ9dGmYypKpCCgq-owWoNjvcl1I_9I7dG68,3973
26
+ pyadps/utils/signal_quality.py,sha256=ab0Sr0oPFxkFWBjuGbl_IZNQEnfi_mXPyHmVzaGSOBU,16239
27
+ pyadps/utils/velocity_test.py,sha256=-95NKLQJ8Ni8etdxhDHxsfMF4MdRWcXL9fgLgWy7Kn0,6112
28
+ pyadps/utils/writenc.py,sha256=H5rH2dfUECLukql5zNymAwEtMib8-PJo3y5e3_NIRsk,9754
29
+ pyadps-0.3.3b0.dist-info/LICENSE,sha256=sfY_7DzQF5FxnO2T6ek74dfm5uBmwEp1oEg_WlzNsb8,1092
30
+ pyadps-0.3.3b0.dist-info/METADATA,sha256=aZcklDAtDWnLK67oROVB4mQHiBrdyiUq6dfcT9XmTlw,4463
31
+ pyadps-0.3.3b0.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
32
+ pyadps-0.3.3b0.dist-info/entry_points.txt,sha256=-oZhbbJq8Q29uNVh5SmzOLp9OeFM9VUzHVxovfI4LXA,126
33
+ pyadps-0.3.3b0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: poetry-core 2.0.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ run-auto=pyadps.utils.autoprocess:main
3
+ run-pyadps=pyadps.__main__:main
4
+ run-script=pyadps.utils.script:main
5
+