seppy 0.1.17__py3-none-any.whl → 0.1.19__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 seppy might be problematic. Click here for more details.
- seppy/__init__.py +3 -6
- seppy/_version.py +21 -0
- seppy/loader/psp.py +5 -5
- seppy/loader/soho.py +4 -4
- seppy/loader/stereo.py +2 -0
- seppy/loader/wind.py +1 -1
- seppy/tests/__init__.py +0 -1
- seppy/tests/test_loader.py +17 -8
- seppy/tests/test_time_shift_analysis.ipynb +286 -0
- seppy/tests/tsa_org.png +0 -0
- seppy/tools/__init__.py +15 -16
- seppy/version.py +15 -6
- {seppy-0.1.17.dist-info → seppy-0.1.19.dist-info}/METADATA +41 -12
- {seppy-0.1.17.dist-info → seppy-0.1.19.dist-info}/RECORD +17 -14
- {seppy-0.1.17.dist-info → seppy-0.1.19.dist-info}/WHEEL +1 -1
- seppy-0.1.19.dist-info/licenses/LICENSE.rst +29 -0
- seppy-0.1.17.dist-info/LICENSE.rst +0 -25
- {seppy-0.1.17.dist-info → seppy-0.1.19.dist-info}/top_level.txt +0 -0
seppy/__init__.py
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
# Licensed under a 3-clause BSD style license - see LICENSE.rst
|
|
2
1
|
|
|
3
|
-
from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
except DistributionNotFound:
|
|
7
|
-
pass # package is not installed
|
|
2
|
+
from .version import version as __version__
|
|
3
|
+
|
|
4
|
+
# __all__ = [] # defines which functions, variables etc. will be loaded when running "from pyonset import *"
|
seppy/_version.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
|
|
5
|
+
|
|
6
|
+
TYPE_CHECKING = False
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from typing import Tuple
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
11
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
12
|
+
else:
|
|
13
|
+
VERSION_TUPLE = object
|
|
14
|
+
|
|
15
|
+
version: str
|
|
16
|
+
__version__: str
|
|
17
|
+
__version_tuple__: VERSION_TUPLE
|
|
18
|
+
version_tuple: VERSION_TUPLE
|
|
19
|
+
|
|
20
|
+
__version__ = version = '0.1.19'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 1, 19)
|
seppy/loader/psp.py
CHANGED
|
@@ -386,7 +386,7 @@ def calc_av_en_flux_PSP_EPIHI(df, energies, en_channel, species, instrument, vie
|
|
|
386
386
|
df : pd.DataFrame DataFrame containing HET data
|
|
387
387
|
DataFrame containing PSP data
|
|
388
388
|
energies : dict
|
|
389
|
-
Energy dict returned from
|
|
389
|
+
Energy dict returned from psp_load
|
|
390
390
|
en_channel : int or list
|
|
391
391
|
energy channel number(s) to be used
|
|
392
392
|
species : string
|
|
@@ -410,8 +410,8 @@ def calc_av_en_flux_PSP_EPIHI(df, energies, en_channel, species, instrument, vie
|
|
|
410
410
|
flux_key = 'H_Flux'
|
|
411
411
|
en_str = energies[f'{species_str}_ENERGY_LABL']
|
|
412
412
|
if type(en_channel) == list:
|
|
413
|
-
energy_low = en_str[en_channel[0]][0].split('-')[0]
|
|
414
|
-
energy_up = en_str[en_channel[-1]][0].split('-')[-1]
|
|
413
|
+
energy_low = en_str[en_channel[0]].flat[0].split('-')[0]
|
|
414
|
+
energy_up = en_str[en_channel[-1]].flat[0].split('-')[-1]
|
|
415
415
|
en_channel_string = energy_low + '-' + energy_up
|
|
416
416
|
|
|
417
417
|
DE = energies[f'{species_str}_ENERGY_DELTAPLUS']+energies[f'{species_str}_ENERGY_DELTAMINUS']
|
|
@@ -435,7 +435,7 @@ def calc_av_en_flux_PSP_EPIHI(df, energies, en_channel, species, instrument, vie
|
|
|
435
435
|
flux_out = pd.DataFrame({'flux': df[f'{viewing.upper()}_{flux_key}_{en_channel}']}, index=df.index)
|
|
436
436
|
else:
|
|
437
437
|
flux_out = pd.DataFrame({'flux': df[f'{viewing.upper()}_{flux_key}_{en_channel}']}, index=df.index)
|
|
438
|
-
en_channel_string = en_str[en_channel][0]
|
|
438
|
+
en_channel_string = en_str[en_channel].flat[0]
|
|
439
439
|
# replace multiple whitespaces with single ones
|
|
440
440
|
en_channel_string = ' '.join(en_channel_string.split())
|
|
441
441
|
return flux_out, en_channel_string
|
|
@@ -453,7 +453,7 @@ def calc_av_en_flux_PSP_EPILO(df, en_dict, en_channel, species, mode, chan, view
|
|
|
453
453
|
df : pd.DataFrame DataFrame containing HET data
|
|
454
454
|
DataFrame containing PSP data
|
|
455
455
|
energies : dict
|
|
456
|
-
Energy dict returned from
|
|
456
|
+
Energy dict returned from psp_load
|
|
457
457
|
en_channel : int or list
|
|
458
458
|
energy channel number(s) to be used
|
|
459
459
|
species : string
|
seppy/loader/soho.py
CHANGED
|
@@ -39,13 +39,13 @@ def _get_metadata(dataset, path_to_cdf):
|
|
|
39
39
|
if dataset=='SOHO_ERNE-LED_L2-1MIN':
|
|
40
40
|
alpha = 'A'
|
|
41
41
|
m = 'L'
|
|
42
|
-
metadata = {'He_E_label': cdf.varget('He_E_label')
|
|
42
|
+
metadata = {'He_E_label': cdf.varget('He_E_label').flatten(),
|
|
43
43
|
'He_energy': cdf.varget('He_energy'),
|
|
44
44
|
'He_energy_delta': cdf.varget('He_energy_delta'),
|
|
45
45
|
f'{alpha}{m}_LABL': cdf.varattsget(f'{alpha}{m}')['LABLAXIS'],
|
|
46
46
|
f'{alpha}{m}_UNITS': cdf.varattsget(f'{alpha}{m}')['UNITS'],
|
|
47
47
|
f'{alpha}{m}_FILLVAL': cdf.varattsget(f'{alpha}{m}')['FILLVAL'],
|
|
48
|
-
'P_E_label': cdf.varget('P_E_label')
|
|
48
|
+
'P_E_label': cdf.varget('P_E_label').flatten(),
|
|
49
49
|
'P_energy': cdf.varget('P_energy'),
|
|
50
50
|
'P_energy_delta': cdf.varget('P_energy_delta'),
|
|
51
51
|
f'P{m}_LABL': cdf.varattsget(f'P{m}')['LABLAXIS'],
|
|
@@ -53,14 +53,14 @@ def _get_metadata(dataset, path_to_cdf):
|
|
|
53
53
|
f'P{m}_FILLVAL': cdf.varattsget(f'P{m}')['FILLVAL'],
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
channels_dict_df_He = pd.DataFrame(cdf.varget('He_E_label')
|
|
56
|
+
channels_dict_df_He = pd.DataFrame(cdf.varget('He_E_label').flatten(), columns=['ch_strings'])
|
|
57
57
|
channels_dict_df_He['lower_E'] = cdf.varget("He_energy")-cdf.varget("He_energy_delta")
|
|
58
58
|
channels_dict_df_He['upper_E'] = cdf.varget("He_energy")+cdf.varget("He_energy_delta")
|
|
59
59
|
channels_dict_df_He['DE'] = cdf.varget("He_energy_delta")
|
|
60
60
|
# channels_dict_df_He['mean_E'] = np.sqrt(channels_dict_df_He['upper_E'] * channels_dict_df_He['lower_E'])
|
|
61
61
|
channels_dict_df_He['mean_E'] = cdf.varget("He_energy")
|
|
62
62
|
|
|
63
|
-
channels_dict_df_p = pd.DataFrame(cdf.varget('P_E_label')
|
|
63
|
+
channels_dict_df_p = pd.DataFrame(cdf.varget('P_E_label').flatten(), columns=['ch_strings'])
|
|
64
64
|
channels_dict_df_p['lower_E'] = cdf.varget("P_energy")-cdf.varget("P_energy_delta")
|
|
65
65
|
channels_dict_df_p['upper_E'] = cdf.varget("P_energy")+cdf.varget("P_energy_delta")
|
|
66
66
|
channels_dict_df_p['DE'] = cdf.varget("P_energy_delta")
|
seppy/loader/stereo.py
CHANGED
|
@@ -504,6 +504,8 @@ def calc_av_en_flux_HET(df, channels_dict_df, avg_channels, species):
|
|
|
504
504
|
avg_channels : list of int, optional
|
|
505
505
|
averaging channels m to n if [m, n] is provided (both integers), by default None
|
|
506
506
|
"""
|
|
507
|
+
if type(avg_channels) is int:
|
|
508
|
+
avg_channels = [avg_channels]
|
|
507
509
|
# calculation of total delta-E for averaging multiple channels:
|
|
508
510
|
if len(avg_channels) > 1:
|
|
509
511
|
DE_total = channels_dict_df.loc[avg_channels[0]:avg_channels[-1]]['DE'].sum()
|
seppy/loader/wind.py
CHANGED
|
@@ -34,7 +34,7 @@ def _download_metafile(dataset, path=None):
|
|
|
34
34
|
downloaded_file = pooch.retrieve(url=url, known_hash=None, fname=fname, path=path, progressbar=True)
|
|
35
35
|
except ModuleNotFoundError:
|
|
36
36
|
downloaded_file = pooch.retrieve(url=url, known_hash=None, fname=fname, path=path, progressbar=False)
|
|
37
|
-
|
|
37
|
+
#
|
|
38
38
|
return downloaded_file
|
|
39
39
|
|
|
40
40
|
|
seppy/tests/__init__.py
CHANGED
seppy/tests/test_loader.py
CHANGED
|
@@ -14,7 +14,7 @@ def test_psp_load_online():
|
|
|
14
14
|
enddate="2021/06/01", path=None, resample="1min")
|
|
15
15
|
assert isinstance(df, pd.DataFrame)
|
|
16
16
|
assert df.shape == (48, 136)
|
|
17
|
-
assert meta['H_ENERGY_LABL'][0]
|
|
17
|
+
assert meta['H_ENERGY_LABL'].flatten()[0] == ' 6.7 - 8.0 MeV'
|
|
18
18
|
# Check that fillvals are replaced by NaN
|
|
19
19
|
assert np.sum(np.isnan(df['B_H_Uncertainty_14'])) == 48
|
|
20
20
|
#
|
|
@@ -71,6 +71,15 @@ def test_soho_ephin_load_offline():
|
|
|
71
71
|
assert np.sum(np.isnan(df['E1300'])) == 444
|
|
72
72
|
|
|
73
73
|
|
|
74
|
+
def test_soho_erne_load_online():
|
|
75
|
+
df, meta = soho_load(dataset='SOHO_ERNE-HED_L2-1MIN', startdate="2021/04/16", enddate="2021/04/17",
|
|
76
|
+
path=None, resample="1min", pos_timestamp='center')
|
|
77
|
+
assert isinstance(df, pd.DataFrame)
|
|
78
|
+
assert df.shape == (1145, 41)
|
|
79
|
+
assert meta['channels_dict_df_p']['ch_strings'].iloc[9] == '100 - 130 MeV'
|
|
80
|
+
assert df['PHC_9'].sum() == 1295.0
|
|
81
|
+
|
|
82
|
+
|
|
74
83
|
def test_solo_mag_load_online():
|
|
75
84
|
df = mag_load("2021/07/12", "2021/07/13", level='l2', data_type='normal-1-minute', frame='rtn', path=None)
|
|
76
85
|
assert isinstance(df, pd.DataFrame)
|
|
@@ -93,7 +102,7 @@ def test_stereo_het_load_online():
|
|
|
93
102
|
path=None, resample="1min", pos_timestamp='center')
|
|
94
103
|
assert isinstance(df, pd.DataFrame)
|
|
95
104
|
assert df.shape == (1440, 28)
|
|
96
|
-
assert meta['Proton_Bins_Text'][0]
|
|
105
|
+
assert meta['Proton_Bins_Text'].flatten()[0] == '13.6 - 15.1 MeV '
|
|
97
106
|
assert np.sum(np.isnan(df['Electron_Flux_0'])) == 0
|
|
98
107
|
|
|
99
108
|
|
|
@@ -105,7 +114,7 @@ def test_stereo_het_load_offline():
|
|
|
105
114
|
path=path, resample="1min", pos_timestamp=None)
|
|
106
115
|
assert isinstance(df, pd.DataFrame)
|
|
107
116
|
assert df.shape == (1440, 28)
|
|
108
|
-
assert meta['Proton_Bins_Text'][0]
|
|
117
|
+
assert meta['Proton_Bins_Text'].flatten()[0] == '13.6 - 15.1 MeV '
|
|
109
118
|
assert np.sum(np.isnan(df['Electron_Flux_0'])) == 0
|
|
110
119
|
|
|
111
120
|
|
|
@@ -134,16 +143,16 @@ def test_stereo_sept_load_offline():
|
|
|
134
143
|
|
|
135
144
|
def test_wind3dp_load_online():
|
|
136
145
|
df, meta = wind3dp_load(dataset="WI_SFPD_3DP",
|
|
137
|
-
startdate="2021/04/
|
|
138
|
-
enddate="2021/04/
|
|
146
|
+
startdate="2021/04/15",
|
|
147
|
+
enddate="2021/04/17",
|
|
139
148
|
resample='1min',
|
|
140
149
|
multi_index=True,
|
|
141
150
|
path=None)
|
|
142
151
|
assert isinstance(df, pd.DataFrame)
|
|
143
152
|
assert df.shape == (2880, 76)
|
|
144
|
-
assert meta['FLUX_LABELS'][0]
|
|
153
|
+
assert meta['FLUX_LABELS'].flatten()[0] == 'ElecNoFlux_Ch1_Often~27keV '
|
|
145
154
|
# Check that fillvals are replaced by NaN
|
|
146
|
-
assert np.sum(np.isnan(df['FLUX_E0', 'FLUX_E0_P0'])) ==
|
|
155
|
+
assert np.sum(np.isnan(df['FLUX_E0', 'FLUX_E0_P0'])) == 129
|
|
147
156
|
|
|
148
157
|
|
|
149
158
|
def test_wind3dp_load_offline():
|
|
@@ -158,6 +167,6 @@ def test_wind3dp_load_offline():
|
|
|
158
167
|
path=path)
|
|
159
168
|
assert isinstance(df, pd.DataFrame)
|
|
160
169
|
assert df.shape == (897, 15)
|
|
161
|
-
assert meta['FLUX_LABELS'][0]
|
|
170
|
+
assert meta['FLUX_LABELS'].flatten()[0] == 'ElecNoFlux_Ch1_Often~27keV '
|
|
162
171
|
# Check that fillvals are replaced by NaN
|
|
163
172
|
assert np.sum(np.isnan(df['FLUX_0'])) == 352
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"id": "dff1322b",
|
|
6
|
+
"metadata": {},
|
|
7
|
+
"source": [
|
|
8
|
+
"# Visual time shift analysis\n",
|
|
9
|
+
"\n",
|
|
10
|
+
"<div class=\"alert alert-block alert-success\">\n",
|
|
11
|
+
"<b>Please refer to the following paper for more information and cite it if you use this tool in your publication:</b><br><br>\n",
|
|
12
|
+
"Palmroos, C., Gieseler, J., Dresing N., Morosan D. E., Asvestari E., Yli-Laurila A., Price D. J., Valkila S., Vainio R. (2022).\n",
|
|
13
|
+
"Solar energetic particle time series analysis with Python. <i>Front. Astronomy Space Sci.</i> 9. <a href=\"https://doi.org/10.3389/fspas.2022.1073578\">doi:10.3389/fspas.2022.1073578</a>\n",
|
|
14
|
+
"</div>"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"cell_type": "code",
|
|
19
|
+
"execution_count": 1,
|
|
20
|
+
"id": "5e05e989",
|
|
21
|
+
"metadata": {},
|
|
22
|
+
"outputs": [],
|
|
23
|
+
"source": [
|
|
24
|
+
"# add parent-parent dir to path so that seppy can be imported from there\n",
|
|
25
|
+
"import sys \n",
|
|
26
|
+
"sys.path.append('../../')"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"cell_type": "markdown",
|
|
31
|
+
"id": "0eb22e28",
|
|
32
|
+
"metadata": {},
|
|
33
|
+
"source": [
|
|
34
|
+
"#### First import the necessary library"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"cell_type": "code",
|
|
39
|
+
"execution_count": 2,
|
|
40
|
+
"id": "2a6f4f3b",
|
|
41
|
+
"metadata": {},
|
|
42
|
+
"outputs": [],
|
|
43
|
+
"source": [
|
|
44
|
+
"from seppy.tools import Event\n",
|
|
45
|
+
"import seppy.tools.widgets as w\n",
|
|
46
|
+
"import datetime, os"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"cell_type": "markdown",
|
|
51
|
+
"id": "9b30a708",
|
|
52
|
+
"metadata": {},
|
|
53
|
+
"source": [
|
|
54
|
+
"#### Choose spacecraft, sensor, viewing direction and particle species from the drop-down menu:"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"cell_type": "code",
|
|
59
|
+
"execution_count": 3,
|
|
60
|
+
"id": "f0f78c1e",
|
|
61
|
+
"metadata": {},
|
|
62
|
+
"outputs": [
|
|
63
|
+
{
|
|
64
|
+
"data": {
|
|
65
|
+
"application/vnd.jupyter.widget-view+json": {
|
|
66
|
+
"model_id": "4e18dbfeecb545ce9937822840229059",
|
|
67
|
+
"version_major": 2,
|
|
68
|
+
"version_minor": 0
|
|
69
|
+
},
|
|
70
|
+
"text/plain": [
|
|
71
|
+
"Dropdown(description='Spacecraft:', options=('PSP', 'SOHO', 'Solar Orbiter', 'STEREO-A', 'STEREO-B', 'Wind'), …"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
"metadata": {},
|
|
75
|
+
"output_type": "display_data"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"data": {
|
|
79
|
+
"application/vnd.jupyter.widget-view+json": {
|
|
80
|
+
"model_id": "e4d208c9d56247589e2f6d6e7cdce78c",
|
|
81
|
+
"version_major": 2,
|
|
82
|
+
"version_minor": 0
|
|
83
|
+
},
|
|
84
|
+
"text/plain": [
|
|
85
|
+
"Dropdown(description='Sensor:', options=('isois-epihi', 'isois-epilo'), value='isois-epihi')"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"metadata": {},
|
|
89
|
+
"output_type": "display_data"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"data": {
|
|
93
|
+
"application/vnd.jupyter.widget-view+json": {
|
|
94
|
+
"model_id": "879e5a4a10fa4cbdaf5b80623ebff13e",
|
|
95
|
+
"version_major": 2,
|
|
96
|
+
"version_minor": 0
|
|
97
|
+
},
|
|
98
|
+
"text/plain": [
|
|
99
|
+
"Dropdown(description='Viewing:', options=('A', 'B'), value='A')"
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"metadata": {},
|
|
103
|
+
"output_type": "display_data"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"data": {
|
|
107
|
+
"application/vnd.jupyter.widget-view+json": {
|
|
108
|
+
"model_id": "8b70ac3184b04b1e9f9cbc2291682e66",
|
|
109
|
+
"version_major": 2,
|
|
110
|
+
"version_minor": 0
|
|
111
|
+
},
|
|
112
|
+
"text/plain": [
|
|
113
|
+
"Dropdown(description='Species:', options=('protons', 'electrons'), value='protons')"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
"metadata": {},
|
|
117
|
+
"output_type": "display_data"
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"source": [
|
|
121
|
+
"display(w.spacecraft_drop, w.sensor_drop, w.view_drop, w.species_drop)"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"cell_type": "code",
|
|
126
|
+
"execution_count": 4,
|
|
127
|
+
"id": "cab4dfae",
|
|
128
|
+
"metadata": {},
|
|
129
|
+
"outputs": [],
|
|
130
|
+
"source": [
|
|
131
|
+
"# overwrite GUI returns for testing\n",
|
|
132
|
+
"w.spacecraft_drop.value = 'SOHO'\n",
|
|
133
|
+
"w.sensor_drop.value = 'ERNE-HED'\n",
|
|
134
|
+
"w.view_drop.value = None\n",
|
|
135
|
+
"w.species_drop.value = 'protons'"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"cell_type": "markdown",
|
|
140
|
+
"id": "f72fd6b5",
|
|
141
|
+
"metadata": {},
|
|
142
|
+
"source": [
|
|
143
|
+
"#### Set the data path and date range to load data:"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"cell_type": "code",
|
|
148
|
+
"execution_count": 5,
|
|
149
|
+
"id": "c8b4570e",
|
|
150
|
+
"metadata": {},
|
|
151
|
+
"outputs": [],
|
|
152
|
+
"source": [
|
|
153
|
+
"# The path to where data is located / to be downloaded (by default the current directory)\n",
|
|
154
|
+
"data_path = f\"{os.getcwd()}/data/\"\n",
|
|
155
|
+
"\n",
|
|
156
|
+
"# Format of date: year, month, day\n",
|
|
157
|
+
"startdate = datetime.date(2024, 5, 10)\n",
|
|
158
|
+
"enddate = datetime.date(2024, 5, 11)\n",
|
|
159
|
+
"\n",
|
|
160
|
+
"# Set the averaging period, or leave to None to not resample data\n",
|
|
161
|
+
"# averaging should be a pandas-compatible string, e.g. '1h', '2min', '15s'\n",
|
|
162
|
+
"averaging = '1min' #\"1min\""
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"cell_type": "code",
|
|
167
|
+
"execution_count": 6,
|
|
168
|
+
"id": "b9184561",
|
|
169
|
+
"metadata": {},
|
|
170
|
+
"outputs": [],
|
|
171
|
+
"source": [
|
|
172
|
+
"# Get event data:\n",
|
|
173
|
+
"Event_class = Event(spacecraft=w.spacecraft_drop.value, sensor=w.sensor_drop.value, \n",
|
|
174
|
+
" data_level='l2', species = w.species_drop.value, viewing=w.view_drop.value,\n",
|
|
175
|
+
" start_date=startdate, end_date=enddate, \n",
|
|
176
|
+
" data_path=data_path)"
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"cell_type": "code",
|
|
181
|
+
"execution_count": 7,
|
|
182
|
+
"id": "af9b46b3",
|
|
183
|
+
"metadata": {},
|
|
184
|
+
"outputs": [],
|
|
185
|
+
"source": [
|
|
186
|
+
"# Select the channels to be plotted (first, last, step), end-exclusively (use None to choose all)\n",
|
|
187
|
+
"channels = (2, 8, 1) #(1, 11, 2)"
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"cell_type": "code",
|
|
192
|
+
"execution_count": null,
|
|
193
|
+
"id": "3820516e",
|
|
194
|
+
"metadata": {},
|
|
195
|
+
"outputs": [],
|
|
196
|
+
"source": [
|
|
197
|
+
"%matplotlib widget\n",
|
|
198
|
+
"Event_class.tsa_plot(w.view_drop.value, selection=channels, resample=averaging)"
|
|
199
|
+
]
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"cell_type": "markdown",
|
|
203
|
+
"id": "fb9dd2f1",
|
|
204
|
+
"metadata": {},
|
|
205
|
+
"source": [
|
|
206
|
+
"#### Saving the figure is done in the plot window, by hovering mouse to the left side of the plot and clicking \"Download plot\""
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"cell_type": "code",
|
|
211
|
+
"execution_count": 9,
|
|
212
|
+
"id": "a17ff153",
|
|
213
|
+
"metadata": {},
|
|
214
|
+
"outputs": [],
|
|
215
|
+
"source": [
|
|
216
|
+
"import matplotlib.pyplot as plt\n",
|
|
217
|
+
"plt.savefig('tsa_test.png')"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"cell_type": "markdown",
|
|
222
|
+
"id": "fbc35c0b",
|
|
223
|
+
"metadata": {},
|
|
224
|
+
"source": [
|
|
225
|
+
"---\n",
|
|
226
|
+
"## FAQ / Problems <a class=\"anchor\" id=\"faq\"></a>\n",
|
|
227
|
+
"\n",
|
|
228
|
+
"- **I get some error about missing data, or that the data is broken, or something I don't understand.**\n",
|
|
229
|
+
"\n",
|
|
230
|
+
"Most times such a problem originates in an incomplete download of the corresponding data file. The easiest approach to solve that problem is to delete the file and run the code again to re-download it. \n",
|
|
231
|
+
"To do this, first check if a `path` has been provided. If `path` has *not* been defined (or as `None`), the standard `path` for SunPy downloads should have been used. You can obtain it by running the following code cell:\n"
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"cell_type": "code",
|
|
236
|
+
"execution_count": 2,
|
|
237
|
+
"id": "5a98af1b",
|
|
238
|
+
"metadata": {},
|
|
239
|
+
"outputs": [
|
|
240
|
+
{
|
|
241
|
+
"data": {
|
|
242
|
+
"text/plain": [
|
|
243
|
+
"'/home/gieseler/sunpy/data'"
|
|
244
|
+
]
|
|
245
|
+
},
|
|
246
|
+
"execution_count": 2,
|
|
247
|
+
"metadata": {},
|
|
248
|
+
"output_type": "execute_result"
|
|
249
|
+
}
|
|
250
|
+
],
|
|
251
|
+
"source": [
|
|
252
|
+
"import sunpy \n",
|
|
253
|
+
"sunpy.config.get('downloads', 'download_dir')"
|
|
254
|
+
]
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"cell_type": "markdown",
|
|
258
|
+
"id": "4ebec703",
|
|
259
|
+
"metadata": {},
|
|
260
|
+
"source": [
|
|
261
|
+
"Open the corresponding directory in your file browser and look for the corresponding data file. Usually it's easiest to order the files by modification date, so that the latest modified file (which usually should be the culprit) comes first. Then delete the corresponding file(s), and run the code again."
|
|
262
|
+
]
|
|
263
|
+
}
|
|
264
|
+
],
|
|
265
|
+
"metadata": {
|
|
266
|
+
"kernelspec": {
|
|
267
|
+
"display_name": "Python 3 (ipykernel)",
|
|
268
|
+
"language": "python",
|
|
269
|
+
"name": "python3"
|
|
270
|
+
},
|
|
271
|
+
"language_info": {
|
|
272
|
+
"codemirror_mode": {
|
|
273
|
+
"name": "ipython",
|
|
274
|
+
"version": 3
|
|
275
|
+
},
|
|
276
|
+
"file_extension": ".py",
|
|
277
|
+
"mimetype": "text/x-python",
|
|
278
|
+
"name": "python",
|
|
279
|
+
"nbconvert_exporter": "python",
|
|
280
|
+
"pygments_lexer": "ipython3",
|
|
281
|
+
"version": "3.12.5"
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
"nbformat": 4,
|
|
285
|
+
"nbformat_minor": 5
|
|
286
|
+
}
|
seppy/tests/tsa_org.png
ADDED
|
Binary file
|
seppy/tools/__init__.py
CHANGED
|
@@ -675,9 +675,9 @@ class Event:
|
|
|
675
675
|
|
|
676
676
|
# An IndexError here is caused by invalid channel choice
|
|
677
677
|
try:
|
|
678
|
-
en_channel_string = en_str[en_channel[0]][0].split()[0] + ' - '\
|
|
679
|
-
+ en_str[en_channel[-1]][0].split()[2] + ' ' +\
|
|
680
|
-
en_str[en_channel[-1]][0].split()[3]
|
|
678
|
+
en_channel_string = en_str[en_channel[0]].flat[0].split()[0] + ' - '\
|
|
679
|
+
+ en_str[en_channel[-1]].flat[0].split()[2] + ' ' +\
|
|
680
|
+
en_str[en_channel[-1]].flat[0].split()[3]
|
|
681
681
|
|
|
682
682
|
except IndexError:
|
|
683
683
|
raise Exception(f"{en_channel} is an invalid channel or a combination of channels!")
|
|
@@ -781,9 +781,9 @@ class Event:
|
|
|
781
781
|
|
|
782
782
|
# An IndexError here is caused by invalid channel choice
|
|
783
783
|
try:
|
|
784
|
-
en_channel_string = en_str[en_channel[0]][0].split()[0] + ' - '\
|
|
785
|
-
+ en_str[en_channel[-1]][0].split()[2] + ' '\
|
|
786
|
-
+ en_str[en_channel[-1]][0].split()[3]
|
|
784
|
+
en_channel_string = en_str[en_channel[0]].flat[0].split()[0] + ' - '\
|
|
785
|
+
+ en_str[en_channel[-1]].flat[0].split()[2] + ' '\
|
|
786
|
+
+ en_str[en_channel[-1]].flat[0].split()[3]
|
|
787
787
|
|
|
788
788
|
except IndexError:
|
|
789
789
|
raise Exception(f"{en_channel} is an invalid channel or a combination of channels!")
|
|
@@ -1782,7 +1782,7 @@ class Event:
|
|
|
1782
1782
|
ax[DYN_SPEC_INDX].yaxis.set_major_formatter(ScalarFormatter(useMathText=False))
|
|
1783
1783
|
|
|
1784
1784
|
# gets rid of minor ticks and labels
|
|
1785
|
-
ax[DYN_SPEC_INDX].yaxis.
|
|
1785
|
+
ax[DYN_SPEC_INDX].yaxis.minorticks_off()
|
|
1786
1786
|
ax[DYN_SPEC_INDX].yaxis.set_tick_params(length=12., width=2.0, which='major')
|
|
1787
1787
|
|
|
1788
1788
|
# x-axis settings
|
|
@@ -1898,7 +1898,7 @@ class Event:
|
|
|
1898
1898
|
ax[DYN_SPEC_INDX].set_ylabel(f"Energy [{y_unit}]")
|
|
1899
1899
|
|
|
1900
1900
|
# Introduce minor ticks back
|
|
1901
|
-
ax[DYN_SPEC_INDX].yaxis.set_tick_params(length=8., width=1.2, which='minor'
|
|
1901
|
+
ax[DYN_SPEC_INDX].yaxis.set_tick_params(length=8., width=1.2, which='minor')
|
|
1902
1902
|
|
|
1903
1903
|
fig.set_size_inches((27, 18))
|
|
1904
1904
|
|
|
@@ -2061,7 +2061,7 @@ class Event:
|
|
|
2061
2061
|
shift_coefficients = [METERS_PER_AU/v for v in particle_speeds]
|
|
2062
2062
|
|
|
2063
2063
|
stepsize = 0.05
|
|
2064
|
-
min_slider_val, max_slider_val = 0.0,
|
|
2064
|
+
min_slider_val, max_slider_val = 0.0, 10
|
|
2065
2065
|
|
|
2066
2066
|
# Only the selected channels will be plotted
|
|
2067
2067
|
if selection is not None:
|
|
@@ -2276,8 +2276,8 @@ class Event:
|
|
|
2276
2276
|
p_identifier = "Ion_Bins_Text" if self.sensor == "ept" else "H_Bins_Text" if self.sensor == "het" else "Bins_Text"
|
|
2277
2277
|
energy_ranges = energy_dict[p_identifier]
|
|
2278
2278
|
|
|
2279
|
-
# Each element in the list is also a list with len==1, so fix that
|
|
2280
|
-
energy_ranges =
|
|
2279
|
+
# Each element in the list is also a list with len==1 for cdflib < 1.3.3, so fix that
|
|
2280
|
+
energy_ranges = energy_ranges.flatten()
|
|
2281
2281
|
|
|
2282
2282
|
if self.spacecraft[:2] == "st":
|
|
2283
2283
|
|
|
@@ -2299,8 +2299,8 @@ class Event:
|
|
|
2299
2299
|
else:
|
|
2300
2300
|
energy_ranges = energy_dict["Proton_Bins_Text"]
|
|
2301
2301
|
|
|
2302
|
-
# Each element in the list is also a list with len==1, so fix that
|
|
2303
|
-
energy_ranges =
|
|
2302
|
+
# Each element in the list is also a list with len==1 for cdflib < 1.3.3, so fix that
|
|
2303
|
+
energy_ranges = energy_ranges.flatten()
|
|
2304
2304
|
|
|
2305
2305
|
if self.spacecraft == "soho":
|
|
2306
2306
|
if self.sensor.lower() == "erne":
|
|
@@ -2322,9 +2322,8 @@ class Event:
|
|
|
2322
2322
|
if self.species == 'p':
|
|
2323
2323
|
energy_ranges = energy_dict["H_ENERGY_LABL"]
|
|
2324
2324
|
|
|
2325
|
-
#
|
|
2326
|
-
|
|
2327
|
-
energy_ranges = [element[0] for element in energy_ranges]
|
|
2325
|
+
# Each element in the list is also a list with len==1 for cdflib < 1.3.3, so fix that
|
|
2326
|
+
energy_ranges = energy_ranges.flatten()
|
|
2328
2327
|
|
|
2329
2328
|
if self.sensor == "isois-epilo":
|
|
2330
2329
|
# The metadata of ISOIS-EPILO comes in a bit of complex form, so some handling is required
|
seppy/version.py
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
#
|
|
1
|
+
# NOTE: First try _dev.scm_version if it exists and setuptools_scm is installed
|
|
2
|
+
# This file is not included in wheels/tarballs, so otherwise it will
|
|
3
|
+
# fall back on the generated _version module.
|
|
4
4
|
try:
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
try:
|
|
6
|
+
from ._dev.scm_version import version
|
|
7
|
+
except ImportError:
|
|
8
|
+
from ._version import version
|
|
7
9
|
except Exception:
|
|
8
|
-
|
|
10
|
+
import warnings
|
|
11
|
+
|
|
12
|
+
warnings.warn(
|
|
13
|
+
f'could not determine {__name__.split(".")[0]} package version; this indicates a broken installation'
|
|
14
|
+
)
|
|
15
|
+
del warnings
|
|
16
|
+
|
|
17
|
+
version = '0.1.19'
|
|
@@ -1,28 +1,54 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: seppy
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.19
|
|
4
4
|
Summary: SEPpy
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Author-email: Jan Gieseler <jan.gieseler@utu.fi>
|
|
6
|
+
License: Copyright (c) 2022, Jan Gieseler
|
|
7
|
+
All rights reserved.
|
|
8
|
+
|
|
9
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
10
|
+
are permitted provided that the following conditions are met:
|
|
11
|
+
|
|
12
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
13
|
+
list of conditions and the following disclaimer.
|
|
14
|
+
* Redistributions in binary form must reproduce the above copyright notice, this
|
|
15
|
+
list of conditions and the following disclaimer in the documentation and/or
|
|
16
|
+
other materials provided with the distribution.
|
|
17
|
+
* Neither the name of SEPpy nor the names of its contributors may be
|
|
18
|
+
used to endorse or promote products derived from this software without
|
|
19
|
+
specific prior written permission.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
22
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
23
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
24
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
25
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
26
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
27
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
28
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
29
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
30
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
|
|
32
|
+
Project-URL: repository, https://github.com/serpentine-h2020/SEPpy
|
|
9
33
|
Classifier: Intended Audience :: Science/Research
|
|
10
34
|
Classifier: License :: OSI Approved :: BSD License
|
|
11
35
|
Classifier: Natural Language :: English
|
|
12
36
|
Classifier: Operating System :: OS Independent
|
|
13
37
|
Classifier: Programming Language :: Python
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
15
38
|
Classifier: Programming Language :: Python :: 3.9
|
|
16
39
|
Classifier: Programming Language :: Python :: 3.10
|
|
17
40
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
41
|
Classifier: Programming Language :: Python :: 3.12
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
43
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
20
|
-
Requires-Python: >=3.
|
|
21
|
-
|
|
44
|
+
Requires-Python: >=3.9
|
|
45
|
+
Description-Content-Type: text/x-rst
|
|
46
|
+
License-File: LICENSE.rst
|
|
22
47
|
Requires-Dist: astropy
|
|
23
48
|
Requires-Dist: astroquery
|
|
24
49
|
Requires-Dist: bs4
|
|
25
50
|
Requires-Dist: cdflib
|
|
51
|
+
Requires-Dist: ipympl
|
|
26
52
|
Requires-Dist: ipywidgets
|
|
27
53
|
Requires-Dist: matplotlib
|
|
28
54
|
Requires-Dist: mpl-animators>=1.0.0
|
|
@@ -32,7 +58,6 @@ Requires-Dist: pooch
|
|
|
32
58
|
Requires-Dist: requests
|
|
33
59
|
Requires-Dist: solo-epd-loader
|
|
34
60
|
Requires-Dist: sunpy>=4.1.0
|
|
35
|
-
Provides-Extra: all
|
|
36
61
|
Provides-Extra: test
|
|
37
62
|
Requires-Dist: pytest; extra == "test"
|
|
38
63
|
Requires-Dist: pytest-doctestplus; extra == "test"
|
|
@@ -40,11 +65,12 @@ Requires-Dist: pytest-cov; extra == "test"
|
|
|
40
65
|
Provides-Extra: docs
|
|
41
66
|
Requires-Dist: sphinx; extra == "docs"
|
|
42
67
|
Requires-Dist: sphinx-automodapi; extra == "docs"
|
|
68
|
+
Dynamic: license-file
|
|
43
69
|
|
|
44
70
|
seppy
|
|
45
71
|
=====
|
|
46
72
|
|
|
47
|
-
|pypi Version| |python version| |pytest| |codecov| |zenodo doi|
|
|
73
|
+
|pypi Version| |python version| |pytest| |codecov| |repostatus| |zenodo doi|
|
|
48
74
|
|
|
49
75
|
.. |pypi Version| image:: https://img.shields.io/pypi/v/seppy?style=flat&logo=pypi
|
|
50
76
|
:target: https://pypi.org/project/seppy/
|
|
@@ -54,6 +80,9 @@ seppy
|
|
|
54
80
|
.. |pytest| image:: https://github.com/serpentine-h2020/SEPpy/actions/workflows/pytest.yml/badge.svg?branch=main
|
|
55
81
|
.. |codecov| image:: https://codecov.io/gh/serpentine-h2020/SEPpy/branch/main/graph/badge.svg?token=FYELM4Y7DF
|
|
56
82
|
:target: https://codecov.io/gh/serpentine-h2020/SEPpy
|
|
83
|
+
.. |repostatus| image:: https://www.repostatus.org/badges/latest/active.svg
|
|
84
|
+
:alt: Project Status: Active – The project has reached a stable, usable state and is being actively developed.
|
|
85
|
+
:target: https://www.repostatus.org/#active
|
|
57
86
|
|
|
58
87
|
*This package is in development status! Intended for internal use only, as the syntax is in a floating state and the documentation is incomplete.*
|
|
59
88
|
|
|
@@ -77,7 +106,7 @@ This software is provided "as is", with no guarantee. It is no official data sou
|
|
|
77
106
|
Installation
|
|
78
107
|
------------
|
|
79
108
|
|
|
80
|
-
seppy requires python >= 3.
|
|
109
|
+
seppy requires python >= 3.9.
|
|
81
110
|
|
|
82
111
|
It can be installed from `PyPI <https://pypi.org/project/seppy/>`_ using:
|
|
83
112
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
seppy/__init__.py,sha256=
|
|
2
|
-
seppy/
|
|
1
|
+
seppy/__init__.py,sha256=hk6JGncma6FHC5b8g5ZelvpsF1Jo-3Pz_3MneUcNWMg,156
|
|
2
|
+
seppy/_version.py,sha256=-W-i-_6L24OJ73VmeltYID1xpUrwRUNYxZXkfU86ff0,513
|
|
3
|
+
seppy/version.py,sha256=W_Fwi9aljZivAB9ddpA8HGKIrlvM1KDHRMxWdOz5ANo,532
|
|
3
4
|
seppy/data/test/20230719_side0.csv,sha256=0htTQcdQydRc92bkO26lxK8tDRSeN6uov13VfsqmUFQ,72368
|
|
4
5
|
seppy/data/test/20230719_side1.csv,sha256=iHCfHmOIltJatncWpns_zq3ym_-2yRu0twmDvQDbmJw,72368
|
|
5
6
|
seppy/data/test/20230719_side2.csv,sha256=eYyEQX5fNDO4E57KwKN3bHs6u5-lHaAhIHt-3f20Urg,72368
|
|
@@ -10,20 +11,22 @@ seppy/data/test/solo_l2_mag-rtn-normal-1-minute_20210712_v01.cdf,sha256=Tc_-3YQM
|
|
|
10
11
|
seppy/data/test/sta_l1_het_20211028_v01.cdf,sha256=429TIPXSQI5heQVNqyRYLF7HUDZPByzk-xYf9IzSJ0U,215082
|
|
11
12
|
seppy/data/test/wi_sfsp_3dp_00000000_v01.cdf,sha256=ifAM0FiB2tepHmlpsqbotJMyQqSB3bwpPcKD6VhukFA,30939
|
|
12
13
|
seppy/data/test/wi_sfsp_3dp_20200213_v01.cdf,sha256=UiKcBPcWZkh3KIBigoZubTJ3Fw90E8p7XhbA9uW6VWk,67008
|
|
13
|
-
seppy/loader/psp.py,sha256=
|
|
14
|
-
seppy/loader/soho.py,sha256=
|
|
14
|
+
seppy/loader/psp.py,sha256=dsFWF6OPPHSFqqiZwEL7_Y9pDQ6xUgg5biIGB1vsjh4,31546
|
|
15
|
+
seppy/loader/soho.py,sha256=e6SzUD_WxUiaAMlWQcTGVvdER4Wv9rI-PtCCEoUHVRw,20290
|
|
15
16
|
seppy/loader/solo.py,sha256=Nst2ZJU2yH5NHsB6M_69ryVfzt978hbmqhxaHZJREVg,3054
|
|
16
|
-
seppy/loader/stereo.py,sha256=
|
|
17
|
-
seppy/loader/wind.py,sha256=
|
|
18
|
-
seppy/tests/__init__.py,sha256=
|
|
19
|
-
seppy/tests/test_loader.py,sha256=
|
|
17
|
+
seppy/loader/stereo.py,sha256=C0NM3xxzYS27Z6MbYJLRNM_sxw-5Ypx7QS2aoWt4Bco,24655
|
|
18
|
+
seppy/loader/wind.py,sha256=LC-pbjbhpgTowsR20mflk35ebb2lOZClMyJ94aZ-ecQ,18987
|
|
19
|
+
seppy/tests/__init__.py,sha256=W9JYSayCPwoTmtRpjYCkKnnbPQqpf26ANqXe52YASmk,44
|
|
20
|
+
seppy/tests/test_loader.py,sha256=0C9OmjQk9Br9kLzVdrMtDWJH-N4tD6AfiQIiQSDrc1k,8211
|
|
21
|
+
seppy/tests/test_time_shift_analysis.ipynb,sha256=4DIKqqRI_AdburzP9RnMwdOAvZovpgON2TJscDABIco,7904
|
|
20
22
|
seppy/tests/test_tools.py,sha256=LQPekw-ddse88OYu-LWChFcJPT2SwGS7uEG1tKRLVok,31539
|
|
21
|
-
seppy/
|
|
23
|
+
seppy/tests/tsa_org.png,sha256=80xrGx1unP1iXGLhPsKHHqMLrg2qhivsGh532hBVCqM,138501
|
|
24
|
+
seppy/tools/__init__.py,sha256=nX_GL22ej9XLP6vHkKK_Ste8DtvVkusMEwHbO_wxvvQ,116011
|
|
22
25
|
seppy/tools/swaves.py,sha256=OcohPXLko0ik9FLyYMVkYxI75W4XzOKvQ2Ylnwi-wlQ,3139
|
|
23
26
|
seppy/tools/widgets.py,sha256=atQj9vvus0UgrUV6vlPcTdjpaidnERUevOp6FUmGLSI,6820
|
|
24
27
|
seppy/util/__init__.py,sha256=RMMeH37L75wwQPHb_-_-2Rk7lzlDtBC2K6lkWKtxAMg,15253
|
|
25
|
-
seppy-0.1.
|
|
26
|
-
seppy-0.1.
|
|
27
|
-
seppy-0.1.
|
|
28
|
-
seppy-0.1.
|
|
29
|
-
seppy-0.1.
|
|
28
|
+
seppy-0.1.19.dist-info/licenses/LICENSE.rst,sha256=O5RzTapB1HKcaagHaoNKHBvjkzU6Kh1Ax6HZ_9Q4-kI,1520
|
|
29
|
+
seppy-0.1.19.dist-info/METADATA,sha256=XHzp0Yfd0vzAuFfsySxyz7rXSo96fTv2ldRfuY75mHc,6372
|
|
30
|
+
seppy-0.1.19.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
31
|
+
seppy-0.1.19.dist-info/top_level.txt,sha256=G2Op1GREPmbCX81isNhYY_7ZZyLWLIm-MJC04J4Fgc4,6
|
|
32
|
+
seppy-0.1.19.dist-info/RECORD,,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022, Jan Gieseler
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
|
8
|
+
|
|
9
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
17
|
+
contributors may be used to endorse or promote products derived from
|
|
18
|
+
this software without specific prior written permission.
|
|
19
|
+
|
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
23
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
26
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
27
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
28
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
Copyright (c) 2022, Jan Gieseler
|
|
2
|
-
All rights reserved.
|
|
3
|
-
|
|
4
|
-
Redistribution and use in source and binary forms, with or without modification,
|
|
5
|
-
are permitted provided that the following conditions are met:
|
|
6
|
-
|
|
7
|
-
* Redistributions of source code must retain the above copyright notice, this
|
|
8
|
-
list of conditions and the following disclaimer.
|
|
9
|
-
* Redistributions in binary form must reproduce the above copyright notice, this
|
|
10
|
-
list of conditions and the following disclaimer in the documentation and/or
|
|
11
|
-
other materials provided with the distribution.
|
|
12
|
-
* Neither the name of SEPpy nor the names of its contributors may be
|
|
13
|
-
used to endorse or promote products derived from this software without
|
|
14
|
-
specific prior written permission.
|
|
15
|
-
|
|
16
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
17
|
-
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
18
|
-
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
19
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
20
|
-
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
21
|
-
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
22
|
-
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
23
|
-
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
24
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
25
|
-
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
File without changes
|