wavespectra 4.4.1__tar.gz → 4.4.3__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.
Files changed (74) hide show
  1. wavespectra-4.4.3/PKG-INFO +400 -0
  2. wavespectra-4.4.3/README.rst +320 -0
  3. {wavespectra-4.4.1 → wavespectra-4.4.3}/pyproject.toml +25 -2
  4. {wavespectra-4.4.1 → wavespectra-4.4.3}/tests/test_cli.py +3 -3
  5. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/__init__.py +1 -1
  6. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/construct/frequency.py +1 -1
  7. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/npstats.py +1 -1
  8. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/swan.py +6 -3
  9. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/utils.py +3 -3
  10. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/awac.py +9 -12
  11. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/datawell.py +1 -1
  12. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/ndbc_ascii.py +6 -1
  13. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/obscape.py +0 -2
  14. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/specarray.py +2 -2
  15. wavespectra-4.4.3/wavespectra.egg-info/PKG-INFO +400 -0
  16. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra.egg-info/requires.txt +1 -1
  17. wavespectra-4.4.1/PKG-INFO +0 -277
  18. wavespectra-4.4.1/README.rst +0 -197
  19. wavespectra-4.4.1/wavespectra.egg-info/PKG-INFO +0 -277
  20. {wavespectra-4.4.1 → wavespectra-4.4.3}/AUTHORS.rst +0 -0
  21. {wavespectra-4.4.1 → wavespectra-4.4.3}/LICENSE.txt +0 -0
  22. {wavespectra-4.4.1 → wavespectra-4.4.3}/setup.cfg +0 -0
  23. {wavespectra-4.4.1 → wavespectra-4.4.3}/setup.py +0 -0
  24. {wavespectra-4.4.1 → wavespectra-4.4.3}/tests/test_cookiecutter_template.py +0 -0
  25. {wavespectra-4.4.1 → wavespectra-4.4.3}/tests/test_partition.py +0 -0
  26. {wavespectra-4.4.1 → wavespectra-4.4.3}/tests/test_specarray.py +0 -0
  27. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/cli.py +0 -0
  28. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/construct/__init__.py +0 -0
  29. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/construct/direction.py +0 -0
  30. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/__init__.py +0 -0
  31. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/attributes.py +0 -0
  32. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/attributes.yml +0 -0
  33. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/fitting.py +0 -0
  34. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/select.py +0 -0
  35. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/core/xrstats.py +0 -0
  36. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/__init__.py +0 -0
  37. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/dataset.py +0 -0
  38. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/era5.py +0 -0
  39. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/funwave.py +0 -0
  40. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/json.py +0 -0
  41. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/ncswan.py +0 -0
  42. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/ndbc.py +0 -0
  43. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/netcdf.py +0 -0
  44. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/octopus.py +0 -0
  45. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/spotter.py +0 -0
  46. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/swan.py +0 -0
  47. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/triaxys.py +0 -0
  48. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/wavespectra.py +0 -0
  49. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/ww3.py +0 -0
  50. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/ww3_station.py +0 -0
  51. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/wwm.py +0 -0
  52. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/input/xwaves.py +0 -0
  53. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/__init__.py +0 -0
  54. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/funwave.py +0 -0
  55. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/json.py +0 -0
  56. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/netcdf.py +0 -0
  57. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/octopus.py +0 -0
  58. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/orcaflex.py +0 -0
  59. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/swan.py +0 -0
  60. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/ww3.py +0 -0
  61. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/output/ww3.yml +0 -0
  62. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/partition/__init__.py +0 -0
  63. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/partition/hanson_and_phillips_2001.py +0 -0
  64. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/partition/partition.py +0 -0
  65. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/partition/specpart/specpart.c +0 -0
  66. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/partition/specpart/specpart.h +0 -0
  67. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/partition/specpart/specpart_wrap.c +0 -0
  68. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/partition/tracking.py +0 -0
  69. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/plot.py +0 -0
  70. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra/specdataset.py +0 -0
  71. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra.egg-info/SOURCES.txt +0 -0
  72. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra.egg-info/dependency_links.txt +0 -0
  73. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra.egg-info/entry_points.txt +0 -0
  74. {wavespectra-4.4.1 → wavespectra-4.4.3}/wavespectra.egg-info/top_level.txt +0 -0
@@ -0,0 +1,400 @@
1
+ Metadata-Version: 2.4
2
+ Name: wavespectra
3
+ Version: 4.4.3
4
+ Summary: Library for ocean wave spectra
5
+ Author-email: Wavespectra Developers <r.guedes@oceanum.science>
6
+ Maintainer-email: Rafael Guedes <r.guedes@oceanum.science>, Tom Durrant <t.durrant@oceanum.science>
7
+ License: Copyright (c) 2018 MetOcean Solutions Ltd
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+ Project-URL: Documentation, https://wavespectra.readthedocs.io/en/latest/
27
+ Project-URL: Source, https://github.com/wavespectra/wavespectra
28
+ Project-URL: Tracker, https://github.com/wavespectra/wavespectra/issues
29
+ Project-URL: Changelog, https://github.com/wavespectra/wavespectra/blob/master/HISTORY.rst
30
+ Keywords: wave,spectra,ocean,xarray,statistics,analysis
31
+ Classifier: Development Status :: 5 - Production/Stable
32
+ Classifier: Intended Audience :: Science/Research
33
+ Classifier: License :: OSI Approved :: MIT License
34
+ Classifier: Natural Language :: English
35
+ Classifier: Operating System :: OS Independent
36
+ Classifier: Topic :: Scientific/Engineering
37
+ Classifier: Topic :: Scientific/Engineering :: Physics
38
+ Classifier: Topic :: Scientific/Engineering :: Visualization
39
+ Classifier: Programming Language :: Python :: 3
40
+ Classifier: Programming Language :: Python :: 3.9
41
+ Classifier: Programming Language :: Python :: 3.10
42
+ Classifier: Programming Language :: Python :: 3.11
43
+ Classifier: Programming Language :: Python :: 3.12
44
+ Classifier: Programming Language :: Python :: 3.13
45
+ Requires-Python: >=3.9
46
+ Description-Content-Type: text/x-rst
47
+ License-File: LICENSE.txt
48
+ License-File: AUTHORS.rst
49
+ Requires-Dist: click
50
+ Requires-Dist: dask
51
+ Requires-Dist: matplotlib
52
+ Requires-Dist: python-dateutil
53
+ Requires-Dist: pyyaml
54
+ Requires-Dist: sortedcontainers
55
+ Requires-Dist: scipy
56
+ Requires-Dist: xarray
57
+ Provides-Extra: test
58
+ Requires-Dist: pytest; extra == "test"
59
+ Requires-Dist: tox; extra == "test"
60
+ Requires-Dist: ruff; extra == "test"
61
+ Provides-Extra: extra
62
+ Requires-Dist: fsspec; extra == "extra"
63
+ Requires-Dist: gcsfs; extra == "extra"
64
+ Requires-Dist: h5netcdf; extra == "extra"
65
+ Requires-Dist: netCDF4; extra == "extra"
66
+ Requires-Dist: tbump; extra == "extra"
67
+ Requires-Dist: zarr; extra == "extra"
68
+ Provides-Extra: docs
69
+ Requires-Dist: cmocean; extra == "docs"
70
+ Requires-Dist: ipython; extra == "docs"
71
+ Requires-Dist: pickleshare; extra == "docs"
72
+ Requires-Dist: pydata_sphinx_theme; extra == "docs"
73
+ Requires-Dist: sphinxcontrib-programoutput; extra == "docs"
74
+ Requires-Dist: sphinx-book-theme; extra == "docs"
75
+ Requires-Dist: sphinx; extra == "docs"
76
+ Requires-Dist: sphinx-autobuild; extra == "docs"
77
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
78
+ Requires-Dist: sphinx-gallery; extra == "docs"
79
+ Dynamic: license-file
80
+
81
+ ===========
82
+ wavespectra
83
+ ===========
84
+
85
+ .. image:: https://deepwiki.com/badge.svg
86
+ :target: https://deepwiki.com/wavespectra/wavespectra
87
+ :alt: Ask DeepWiki
88
+
89
+ .. image:: https://zenodo.org/badge/205463939.svg
90
+ :target: https://zenodo.org/badge/latestdoi/205463939
91
+ :alt: DOI
92
+
93
+ .. image:: https://img.shields.io/github/actions/workflow/status/wavespectra/wavespectra/python-publish.yml
94
+ :target: https://github.com/wavespectra/wavespectra/actions
95
+ :alt: Build Status
96
+
97
+ .. image:: https://coveralls.io/repos/github/wavespectra/wavespectra/badge.svg?branch=master
98
+ :target: https://coveralls.io/github/wavespectra/wavespectra?branch=master
99
+ :alt: Coverage
100
+
101
+ .. image:: https://readthedocs.org/projects/wavespectra/badge/?version=latest
102
+ :target: https://wavespectra.readthedocs.io/en/latest/
103
+ :alt: Documentation
104
+
105
+ .. image:: https://img.shields.io/pypi/v/wavespectra.svg
106
+ :target: https://pypi.org/project/wavespectra/
107
+ :alt: PyPI
108
+
109
+ .. image:: https://img.shields.io/pypi/dm/wavespectra
110
+ :target: https://pypistats.org/packages/wavespectra
111
+ :alt: Downloads
112
+
113
+ .. image:: https://anaconda.org/conda-forge/wavespectra/badges/version.svg
114
+ :target: https://anaconda.org/conda-forge/wavespectra
115
+ :alt: Conda
116
+
117
+ .. image:: https://img.shields.io/pypi/pyversions/wavespectra
118
+ :target: https://pypi.org/project/wavespectra/
119
+ :alt: Python
120
+
121
+ **Python library for ocean wave spectral data analysis and processing**
122
+
123
+ Wavespectra is a powerful, open-source Python library built on top of `xarray`_ for working with ocean wave spectral data. It provides comprehensive tools for reading, analysing, manipulating, and visualising wave spectra from various sources including numerical models and buoy observations.
124
+
125
+ .. _xarray: https://xarray.pydata.org/
126
+
127
+ Key Features
128
+ ============
129
+
130
+ - **Unified Data Model**: Built on xarray with standardised conventions for wave spectral data
131
+ - **Extensive I/O Support**: Read/write 15+ formats including WW3, SWAN, ERA5, NDBC, and more
132
+ - **Rich Analysis Tools**: 60+ methods for wave parameter calculation and spectral transformations
133
+ - **Spectral Partitioning**: Separate wind sea and swell using multiple algorithms (PTM1-5, watershed, wave age)
134
+ - **Spectral Construction**: Create synthetic spectra using parametric forms (JONSWAP, TMA, Gaussian, Pierson-Moskowitz)
135
+ - **Flexible Visualisation**: Polar spectral plots with matplotlib integration
136
+ - **High Performance**: Leverages dask for efficient processing of large datasets
137
+ - **Extensible**: Plugin architecture for custom readers and analysis methods
138
+
139
+ Quick Start
140
+ ===========
141
+
142
+ Installation
143
+ ------------
144
+
145
+ Install from PyPI:
146
+
147
+ .. code-block:: console
148
+
149
+ # Basic installation
150
+ $ pip install wavespectra
151
+
152
+ # Full installation with all optional dependencies
153
+ $ pip install wavespectra[extra]
154
+
155
+ Or from conda-forge:
156
+
157
+ .. code-block:: console
158
+
159
+ $ conda install -c conda-forge wavespectra
160
+
161
+ Basic Usage
162
+ -----------
163
+
164
+ .. code-block:: python
165
+
166
+ import xarray as xr
167
+ from wavespectra import read_swan
168
+
169
+ # Read wave spectra from various formats
170
+ dset = read_swan("spectra.swn") # SWAN format
171
+ # dset = xr.open_dataset("era5.nc", engine="era5") # ERA5 reanalysis
172
+ # dset = xr.open_dataset("ww3.nc", engine="ww3") # WAVEWATCH III
173
+
174
+ # Calculate wave parameters
175
+ hs = dset.spec.hs() # Significant wave height
176
+ tp = dset.spec.tp() # Peak period
177
+ dm = dset.spec.dm() # Mean direction
178
+ dspr = dset.spec.dspr() # Directional spreading
179
+
180
+ # Multiple parameters at once
181
+ stats = dset.spec.stats(["hs", "tp", "dm", "dspr"])
182
+
183
+ # Spectral transformations
184
+ spectrum_1d = dset.spec.oned() # Convert to 1D
185
+ subset = dset.spec.split(fmin=0.05, fmax=0.5) # Frequency subset
186
+ rotated = dset.spec.rotate(angle=15) # Rotate directions
187
+ interpolated = dset.spec.interp(freq=new_freq) # Interpolate
188
+
189
+ # Visualisation
190
+ dset.spec.plot(kind="contourf", figsize=(8, 6)) # Polar plot
191
+
192
+ Working with Different Data Sources
193
+ -----------------------------------
194
+
195
+ .. code-block:: python
196
+
197
+ # Numerical model outputs
198
+ ww3_data = xr.open_dataset("ww3_output.nc", engine="ww3")
199
+ swan_data = read_swan("swan_output.swn")
200
+ era5_data = xr.open_dataset("era5_waves.nc", engine="era5")
201
+
202
+ # Buoy observations
203
+ ndbc_data = xr.open_dataset("ndbc_data.nc", engine="ndbc")
204
+ triaxys_data = xr.open_dataset("triaxys.nc", engine="triaxys")
205
+
206
+ # All use the same analysis interface
207
+ for dataset in [ww3_data, swan_data, era5_data]:
208
+ hs = dataset.spec.hs()
209
+ tp = dataset.spec.tp()
210
+
211
+ Advanced Analysis
212
+ -----------------
213
+
214
+ Spectral Partitioning
215
+ ~~~~~~~~~~~~~~~~~~~~~
216
+
217
+ Separate spectra into wind sea and swell components using various methods:
218
+
219
+ .. code-block:: python
220
+
221
+ # PTM1: Watershed partitioning with wind sea identification
222
+ partitions = dset.spec.partition.ptm1(
223
+ wspd=dset.wspd, wdir=dset.wdir, dpt=dset.dpt, swells=2
224
+ )
225
+
226
+ # PTM3: Simple ordering by wave height (no wind/depth needed)
227
+ partitions = dset.spec.partition.ptm3(parts=3)
228
+
229
+ # PTM4: Wave age criterion to separate wind sea from swell
230
+ partitions = dset.spec.partition.ptm4(
231
+ wspd=dset.wspd, wdir=dset.wdir, dpt=dset.dpt, agefac=1.7
232
+ )
233
+
234
+ # PTM1_TRACK: Track partitions from unique wave systems over time
235
+ # Useful for following the evolution of individual swell events
236
+ partitions = dset.spec.partition.ptm1_track(
237
+ wspd=dset.wspd, wdir=dset.wdir, dpt=dset.dpt, swells=2
238
+ )
239
+
240
+ Spectral Construction
241
+ ~~~~~~~~~~~~~~~~~~~~~
242
+
243
+ Create synthetic spectra from parametric forms:
244
+
245
+ .. code-block:: python
246
+
247
+ from wavespectra.construct.frequency import jonswap, tma, gaussian
248
+ from wavespectra.construct.direction import cartwright
249
+ from wavespectra.construct import construct_partition
250
+
251
+ # Create JONSWAP spectrum for developing seas
252
+ freq = np.arange(0.03, 0.4, 0.01)
253
+ spectrum = jonswap(freq=freq, hs=2.5, fp=0.1, gamma=3.3)
254
+
255
+ # Create TMA spectrum for finite depth
256
+ spectrum_shallow = tma(freq=freq, hs=2.0, fp=0.1, dep=15)
257
+
258
+ # Create 2D spectrum by combining frequency and directional components
259
+ dir = np.arange(0, 360, 10)
260
+ spectrum_2d = jonswap(freq=freq, hs=2.5, fp=0.1) * cartwright(dir=dir, dm=270, dspr=30)
261
+
262
+ # Or use construct_partition for a complete 2D spectrum
263
+ spectrum_2d = construct_partition(
264
+ freq_name="jonswap",
265
+ dir_name="cartwright",
266
+ freq_kwargs={"freq": freq, "hs": 2.5, "fp": 0.1, "gamma": 3.3},
267
+ dir_kwargs={"dir": dir, "dm": 270, "dspr": 30}
268
+ )
269
+
270
+ Spectral Fitting
271
+ ~~~~~~~~~~~~~~~~
272
+
273
+ .. code-block:: python
274
+
275
+ # Fit parametric forms to existing spectra
276
+ jonswap_params = dset.spec.fit_jonswap() # Fit JONSWAP spectrum
277
+
278
+ Wave Physics
279
+ ~~~~~~~~~~~~
280
+
281
+ .. code-block:: python
282
+
283
+ # Calculate wave physics parameters
284
+ celerity = dset.spec.celerity(depth=50) # Wave speed
285
+ wavelength = dset.spec.wavelen(depth=50) # Wavelength
286
+ stokes_drift = dset.spec.uss() # Stokes drift
287
+
288
+
289
+ Data Requirements
290
+ =================
291
+
292
+ Wavespectra expects xarray objects with specific coordinate and variable naming:
293
+
294
+ **Required coordinates:**
295
+
296
+ - ``freq``: Wave frequency in Hz
297
+ - ``dir``: Wave direction in degrees (for 2D spectra)
298
+
299
+ **Required variables:**
300
+
301
+ - ``efth``: Wave energy density in m²/Hz/degree (2D) or m²/Hz (1D)
302
+
303
+ **Optional variables:**
304
+
305
+ - ``wspd``: Wind speed in m/s
306
+ - ``wdir``: Wind direction in degrees
307
+ - ``dpt``: Water depth in metres
308
+
309
+ Supported Formats
310
+ =================
311
+
312
+ Input and Output Formats
313
+ ------------------------
314
+
315
+ - **Wave Models**: WAVEWATCH III, SWAN, WWM, FUNWAVE, OrcaFlex
316
+ - **Reanalysis**: ERA5, ERA-Interim, ECMWF
317
+ - **Observations**: NDBC, TRIAXYS, Spotter, Octopus, AWAC
318
+ - **Generic**: NetCDF, JSON, CSV
319
+
320
+ Documentation
321
+ =============
322
+
323
+ Full documentation is available at `wavespectra.readthedocs.io`_
324
+
325
+ - `Installation Guide`_
326
+ - `Quick Start Tutorial`_
327
+ - `Spectral Construction`_
328
+ - `API Reference`_
329
+ - `Example Gallery`_
330
+
331
+ .. _wavespectra.readthedocs.io: https://wavespectra.readthedocs.io/en/latest/
332
+ .. _Installation Guide: https://wavespectra.readthedocs.io/en/latest/install.html
333
+ .. _Quick Start Tutorial: https://wavespectra.readthedocs.io/en/latest/quickstart.html
334
+ .. _Spectral Construction: https://wavespectra.readthedocs.io/en/latest/construction.html
335
+ .. _API Reference: https://wavespectra.readthedocs.io/en/latest/api.html
336
+ .. _Example Gallery: https://wavespectra.readthedocs.io/en/latest/gallery.html
337
+
338
+ Development
339
+ ===========
340
+
341
+ Contributing
342
+ ------------
343
+
344
+ We welcome contributions! Please see our `Contributing Guide`_ for details.
345
+
346
+ .. _Contributing Guide: https://wavespectra.readthedocs.io/en/latest/contributing.html
347
+
348
+ Development Installation
349
+ ------------------------
350
+
351
+ .. code-block:: console
352
+
353
+ $ git clone https://github.com/wavespectra/wavespectra.git
354
+ $ cd wavespectra
355
+ $ pip install -e .[extra,test,docs]
356
+
357
+ Running Tests
358
+ -------------
359
+
360
+ .. code-block:: console
361
+
362
+ $ pytest tests
363
+
364
+ Building Documentation
365
+ ----------------------
366
+
367
+ .. code-block:: console
368
+
369
+ $ make docs
370
+
371
+ Citation
372
+ ========
373
+
374
+ If you use wavespectra in your research, please cite:
375
+
376
+ .. code-block:: bibtex
377
+
378
+ @software{wavespectra,
379
+ author = {Guedes, Rafael and Durrant, Tom and de Bruin, Ruben and Perez, Jorge and Iannucci, Matthew and Delaux, Sebastien and Harrington, John and others},
380
+ title = {wavespectra: Python library for ocean wave spectral data},
381
+ url = {https://github.com/wavespectra/wavespectra},
382
+ doi = {10.5281/zenodo.15238968}
383
+ }
384
+
385
+ Licence
386
+ =======
387
+
388
+ This project is licenced under the MIT Licence - see the `LICENSE`_ file for details.
389
+
390
+ .. _LICENSE: LICENSE.txt
391
+
392
+ Support
393
+ =======
394
+
395
+ - **Documentation**: `wavespectra.readthedocs.io`_
396
+ - **Issues**: `GitHub Issues`_
397
+ - **Discussions**: `GitHub Discussions`_
398
+
399
+ .. _GitHub Issues: https://github.com/wavespectra/wavespectra/issues
400
+ .. _GitHub Discussions: https://github.com/wavespectra/wavespectra/discussions