PyThea 1.0.0__tar.gz → 1.1.0__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.
- {pythea-1.0.0 → pythea-1.1.0}/CHANGELOG.md +12 -0
- {pythea-1.0.0 → pythea-1.1.0}/PKG-INFO +19 -8
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/_version.py +2 -2
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/Parker_spirals/utils.py +1 -1
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/hek/utils.py +67 -37
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/modules.py +1 -1
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/aia/utils.py +4 -3
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_extension_utils.py +2 -2
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/PKG-INFO +19 -8
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/requires.txt +3 -3
- {pythea-1.0.0 → pythea-1.1.0}/environment.yml +4 -4
- {pythea-1.0.0 → pythea-1.1.0}/requirements.txt +3 -3
- {pythea-1.0.0 → pythea-1.1.0}/setup.cfg +1 -2
- {pythea-1.0.0 → pythea-1.1.0}/setup.py +3 -3
- {pythea-1.0.0 → pythea-1.1.0}/.readthedocs.yaml +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/LICENSE.md +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/MANIFEST.in +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/PyThea_app.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/callbacks.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/app_styles.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/config_sliders.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/selected_bodies.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/selected_imagers.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/data/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/data/sample_data.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/LICENSE_gcs_python.md +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/Parker_spirals/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/buttons.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/hek/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/geometrical_models.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/pythea_cli.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/aia/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/lasco/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/lasco/utils.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/stereo/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/stereo/utils.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/map/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/map/maputils.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/Pythea_test.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/__init__.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/conftest.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/figure_hashes.json +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_figures.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_geometrical_models.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_imports.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_remote_clients.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_utils.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/utils.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/utils_database.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea/version.py +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/.DS_Store +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/SOURCES.txt +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/dependency_links.txt +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/entry_points.txt +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/not-zip-safe +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/top_level.txt +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/README.md +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/README_pypi.md +0 -0
- {pythea-1.0.0 → pythea-1.1.0}/pyproject.toml +0 -0
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# v1.1.0 (12-Feb-2025)
|
|
2
|
+
|
|
3
|
+
## Minor Changes
|
|
4
|
+
- Updates the dependencies for sunpy>6.0
|
|
5
|
+
- Improves the utility of HEK events retrieval
|
|
6
|
+
|
|
7
|
+
## Bug Fixes
|
|
8
|
+
- Fixes a flakes8 error for using bare except
|
|
9
|
+
- Fixes get_horizons_coord passing id_type
|
|
10
|
+
- Fixes a bug when no flare or AR data returned from HEK in the app
|
|
11
|
+
- Removes AIA fix_observer_location as it is no longer needed
|
|
12
|
+
|
|
1
13
|
# v1.0.0 (19-Nov-2024)
|
|
2
14
|
|
|
3
15
|
## Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: PyThea
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
5
5
|
Home-page: https://github.com/AthKouloumvakos/PyThea
|
|
6
6
|
Author: Athanasios Kouloumvakos
|
|
@@ -10,25 +10,25 @@ Keywords: science,solar physics,solar,sun,shock waves
|
|
|
10
10
|
Platform: any
|
|
11
11
|
Classifier: Programming Language :: Python
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Development Status :: 4 - Beta
|
|
16
16
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Intended Audience :: Science/Research
|
|
19
19
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
20
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10, <3.12
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE.md
|
|
23
|
-
Requires-Dist: numpy
|
|
23
|
+
Requires-Dist: numpy
|
|
24
24
|
Requires-Dist: pandas
|
|
25
25
|
Requires-Dist: scipy
|
|
26
26
|
Requires-Dist: aiapy
|
|
27
|
-
Requires-Dist: astropy
|
|
27
|
+
Requires-Dist: astropy
|
|
28
28
|
Requires-Dist: astroquery
|
|
29
29
|
Requires-Dist: jplephem
|
|
30
30
|
Requires-Dist: numexpr
|
|
31
|
-
Requires-Dist: sunpy==
|
|
31
|
+
Requires-Dist: sunpy==6.0.4
|
|
32
32
|
Requires-Dist: sunpy_soar
|
|
33
33
|
Requires-Dist: parfive==2.1.0
|
|
34
34
|
Requires-Dist: pooch
|
|
@@ -44,6 +44,17 @@ Requires-Dist: pyvista
|
|
|
44
44
|
Requires-Dist: pytest-astropy
|
|
45
45
|
Requires-Dist: pytest-sugar
|
|
46
46
|
Requires-Dist: pytest-mpl
|
|
47
|
+
Dynamic: author
|
|
48
|
+
Dynamic: author-email
|
|
49
|
+
Dynamic: classifier
|
|
50
|
+
Dynamic: description
|
|
51
|
+
Dynamic: description-content-type
|
|
52
|
+
Dynamic: home-page
|
|
53
|
+
Dynamic: keywords
|
|
54
|
+
Dynamic: license
|
|
55
|
+
Dynamic: requires-dist
|
|
56
|
+
Dynamic: requires-python
|
|
57
|
+
Dynamic: summary
|
|
47
58
|
|
|
48
59
|
# PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
49
60
|
|
|
@@ -25,7 +25,7 @@ def plot_parker_spiral(axis, map, bodies, sw_speed=350 * (u.km / u.second)):
|
|
|
25
25
|
None
|
|
26
26
|
"""
|
|
27
27
|
for body in bodies:
|
|
28
|
-
pos = get_horizons_coord(bodies_dict[body][0], map.date_average
|
|
28
|
+
pos = get_horizons_coord(bodies_dict[body][0], map.date_average)
|
|
29
29
|
pos = pos.transform_to(frames.HeliographicCarrington(observer='Earth', obstime=map.date_average))
|
|
30
30
|
|
|
31
31
|
spiral_coord = Parker_spirals.spiral(pos, sw_speed[body], map.date_average)
|
|
@@ -8,8 +8,67 @@ from sunpy.net import hek
|
|
|
8
8
|
from sunpy.physics.differential_rotation import solar_rotate_coordinate
|
|
9
9
|
from sunpy.time import parse_time
|
|
10
10
|
|
|
11
|
+
hek_client = hek.HEKClient()
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
def get_hek_active_regions(date, time_range):
|
|
15
|
+
start_time = date + TimeDelta(time_range[0] * u.hour)
|
|
16
|
+
end_time = date + TimeDelta(time_range[1] * u.hour)
|
|
17
|
+
|
|
18
|
+
responses = hek_client.search(a.Time(start_time, end_time),
|
|
19
|
+
a.hek.AR, a.hek.FRM.Name == 'HMI SHARP')
|
|
20
|
+
|
|
21
|
+
if str(responses) == '<No columns>':
|
|
22
|
+
return []
|
|
23
|
+
|
|
24
|
+
responses.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime'])
|
|
25
|
+
indx = [i for i, x in enumerate(responses['ar_noaanum']) if x is None]
|
|
26
|
+
responses.remove_rows(indx)
|
|
27
|
+
responses = responses[['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime']]
|
|
28
|
+
dates = Time(responses['event_starttime'])
|
|
29
|
+
time_diff = np.abs(dates - date)
|
|
30
|
+
time_diff_seconds = np.array([td.sec for td in time_diff])
|
|
31
|
+
if len(np.unique(time_diff_seconds)) > 1:
|
|
32
|
+
responses.remove_rows(np.where(time_diff_seconds == np.max(time_diff_seconds)))
|
|
33
|
+
|
|
34
|
+
responses_ = hek_client.search(a.Time(start_time, end_time),
|
|
35
|
+
a.hek.AR, a.hek.FRM.Name == 'NOAA SWPC Observer')
|
|
36
|
+
responses_.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y'])
|
|
37
|
+
|
|
38
|
+
responses['ar_mcintoshcls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
39
|
+
responses['ar_mtwilsoncls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
40
|
+
|
|
41
|
+
for rn, clm, clw in zip(responses_['ar_noaanum'], responses_['ar_mcintoshcls'], responses_['ar_mtwilsoncls']):
|
|
42
|
+
i = np.argwhere(responses['ar_noaanum'] == rn)
|
|
43
|
+
responses['ar_mcintoshcls'][i] = clm
|
|
44
|
+
responses['ar_mtwilsoncls'][i] = clw
|
|
45
|
+
|
|
46
|
+
return responses
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def get_hek_coronal_holes(start_time, end_time):
|
|
50
|
+
|
|
51
|
+
responses = hek_client.search(a.Time(start_time, end_time),
|
|
52
|
+
a.hek.CH, a.hek.FRM.Name == 'SPoCA')
|
|
53
|
+
return responses
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def get_hek_flares(start_time, end_time):
|
|
57
|
+
# TODO: Merge this with get_hek_flare from PyThea utils.
|
|
58
|
+
responses = hek_client.search(a.Time(start_time, end_time),
|
|
59
|
+
a.hek.FL, a.hek.FRM.Name == 'SWPC')
|
|
60
|
+
|
|
61
|
+
if str(responses) == '<No columns>':
|
|
62
|
+
return []
|
|
63
|
+
|
|
64
|
+
responses.keep_columns(['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum'])
|
|
65
|
+
responses.remove_rows(np.where((responses['hgs_x'] == 0) & (responses['hgs_y'] == 0)))
|
|
66
|
+
responses = responses[['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum']]
|
|
67
|
+
|
|
68
|
+
return responses
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def plot_hek(axis, date, mode, time_range=[-2, 2], hek_responses=None):
|
|
13
72
|
"""
|
|
14
73
|
Plots HEK (Heliophysics Event Knowledgebase) events on a given axis.
|
|
15
74
|
|
|
@@ -34,37 +93,13 @@ def plot_hek(axis, map, mode, time_range=[-2, 2], hek_responses=None):
|
|
|
34
93
|
responses: list
|
|
35
94
|
The list of HEK event responses.
|
|
36
95
|
"""
|
|
37
|
-
|
|
38
|
-
start_time =
|
|
39
|
-
end_time =
|
|
96
|
+
|
|
97
|
+
start_time = date + TimeDelta(time_range[0] * u.hour)
|
|
98
|
+
end_time = date + TimeDelta(time_range[1] * u.hour)
|
|
40
99
|
|
|
41
100
|
if mode == 'Active Regions':
|
|
42
101
|
if hek_responses is None or not hek_responses['Active Regions']:
|
|
43
|
-
responses =
|
|
44
|
-
a.hek.AR, a.hek.FRM.Name == 'HMI SHARP')
|
|
45
|
-
|
|
46
|
-
responses.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime'])
|
|
47
|
-
indx = [i for i, x in enumerate(responses['ar_noaanum']) if x is None]
|
|
48
|
-
responses.remove_rows(indx)
|
|
49
|
-
responses = responses[['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y', 'event_starttime']]
|
|
50
|
-
dates = Time(responses['event_starttime'])
|
|
51
|
-
time_diff = np.abs(dates - map.date_average)
|
|
52
|
-
time_diff_seconds = np.array([td.sec for td in time_diff])
|
|
53
|
-
if len(np.unique(time_diff_seconds)) > 1:
|
|
54
|
-
responses.remove_rows(np.where(time_diff_seconds == np.max(time_diff_seconds)))
|
|
55
|
-
|
|
56
|
-
responses_ = hek_client.search(a.Time(start_time, end_time),
|
|
57
|
-
a.hek.AR, a.hek.FRM.Name == 'NOAA SWPC Observer')
|
|
58
|
-
responses_.keep_columns(['ar_noaanum', 'ar_mcintoshcls', 'ar_mtwilsoncls', 'hgs_x', 'hgs_y'])
|
|
59
|
-
|
|
60
|
-
responses['ar_mcintoshcls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
61
|
-
responses['ar_mtwilsoncls'] = np.full(responses['ar_noaanum'].shape[0], None)
|
|
62
|
-
|
|
63
|
-
for rn, clm, clw in zip(responses_['ar_noaanum'], responses_['ar_mcintoshcls'], responses_['ar_mtwilsoncls']):
|
|
64
|
-
i = np.argwhere(responses['ar_noaanum'] == rn)
|
|
65
|
-
responses['ar_mcintoshcls'][i] = clm
|
|
66
|
-
responses['ar_mtwilsoncls'][i] = clw
|
|
67
|
-
print(responses)
|
|
102
|
+
responses = get_hek_active_regions(date, time_range)
|
|
68
103
|
else:
|
|
69
104
|
responses = hek_responses['Active Regions']
|
|
70
105
|
|
|
@@ -78,8 +113,7 @@ def plot_hek(axis, map, mode, time_range=[-2, 2], hek_responses=None):
|
|
|
78
113
|
horizontalalignment='center', verticalalignment='center')
|
|
79
114
|
elif mode == 'Coronal Holes':
|
|
80
115
|
if hek_responses is None or not hek_responses['Coronal Holes']:
|
|
81
|
-
responses =
|
|
82
|
-
a.hek.CH, a.hek.FRM.Name == 'SPoCA')
|
|
116
|
+
responses = get_hek_coronal_holes(start_time, end_time)
|
|
83
117
|
else:
|
|
84
118
|
responses = hek_responses['Coronal Holes']
|
|
85
119
|
|
|
@@ -92,15 +126,11 @@ def plot_hek(axis, map, mode, time_range=[-2, 2], hek_responses=None):
|
|
|
92
126
|
[(float(v[0]), float(v[1])) * u.arcsec for v in p3],
|
|
93
127
|
obstime=ch_date, observer='earth',
|
|
94
128
|
frame=frames.Helioprojective)
|
|
95
|
-
rotated_ch_boundary = solar_rotate_coordinate(ch_boundary, time=
|
|
129
|
+
rotated_ch_boundary = solar_rotate_coordinate(ch_boundary, time=date)
|
|
96
130
|
axis.plot_coord(rotated_ch_boundary, color='c')
|
|
97
131
|
elif mode == 'Flares':
|
|
98
132
|
if hek_responses is None or not hek_responses['Flares']:
|
|
99
|
-
responses =
|
|
100
|
-
a.hek.FL, a.hek.FRM.Name == 'SWPC')
|
|
101
|
-
responses.keep_columns(['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum'])
|
|
102
|
-
responses.remove_rows(np.where((responses['hgs_x'] == 0) & (responses['hgs_y'] == 0)))
|
|
103
|
-
responses = responses[['event_starttime', 'event_peaktime', 'fl_goescls', 'hgs_x', 'hgs_y', 'ar_noaanum']]
|
|
133
|
+
responses = get_hek_flares(start_time, end_time)
|
|
104
134
|
else:
|
|
105
135
|
responses = hek_responses['Flares']
|
|
106
136
|
|
|
@@ -352,7 +352,7 @@ def figure_streamlit(st, running_map, image_mode, imager, model):
|
|
|
352
352
|
if 'hek_responses' not in st.session_state:
|
|
353
353
|
st.session_state.hek_responses = {'Active Regions': [], 'Coronal Holes': [], 'Flares': []}
|
|
354
354
|
for mode in st.session_state.hek_list:
|
|
355
|
-
st.session_state.hek_responses[mode] = plot_hek(axis, running_map, mode,
|
|
355
|
+
st.session_state.hek_responses[mode] = plot_hek(axis, running_map.date_average, mode,
|
|
356
356
|
st.session_state.imaging_time_range,
|
|
357
357
|
hek_responses=st.session_state.hek_responses)
|
|
358
358
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import warnings
|
|
2
2
|
from astropy.time import TimeDelta
|
|
3
|
-
from aiapy.calibrate import
|
|
3
|
+
from aiapy.calibrate import update_pointing
|
|
4
4
|
|
|
5
5
|
__all__ = ['prep_aia']
|
|
6
6
|
|
|
@@ -8,10 +8,11 @@ __all__ = ['prep_aia']
|
|
|
8
8
|
def prep_aia(map_sequence):
|
|
9
9
|
try:
|
|
10
10
|
map_sequence = [update_pointing(tmap) for tmap in map_sequence]
|
|
11
|
-
except:
|
|
11
|
+
except Exception:
|
|
12
12
|
warnings.warn('Prepare AIA maps failed, script proceeded without update_pointing. Check connection with JSOC.', UserWarning)
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
# AIAMap already fixes the .observer_coordinate property with HAE, therefore, the following is removed.
|
|
15
|
+
# map_sequence = [fix_observer_location(tmap) for tmap in map_sequence]
|
|
15
16
|
|
|
16
17
|
for map_ in map_sequence:
|
|
17
18
|
map_.meta['DATE-AVG'] = (map_.date + TimeDelta(map_.meta['exptime']/2, format='sec')).value
|
|
@@ -19,7 +19,7 @@ def test_parker_spiral():
|
|
|
19
19
|
time = '2022-01-01T00:00:00'
|
|
20
20
|
body = bodies_dict['Earth'][0]
|
|
21
21
|
|
|
22
|
-
pos = get_horizons_coord(body, time
|
|
22
|
+
pos = get_horizons_coord(body, time)
|
|
23
23
|
pos = pos.transform_to(frames.HeliographicCarrington(observer='Earth', obstime=time))
|
|
24
24
|
|
|
25
25
|
spiral_coord = Parker_spirals.spiral(pos, 350 * (u.km/u.second), time)
|
|
@@ -43,7 +43,7 @@ def test_footpoint():
|
|
|
43
43
|
time = '2022-01-01T00:00:00'
|
|
44
44
|
body = bodies_dict['Earth'][0]
|
|
45
45
|
|
|
46
|
-
pos = get_horizons_coord(body, time
|
|
46
|
+
pos = get_horizons_coord(body, time)
|
|
47
47
|
pos = pos.transform_to(frames.HeliographicCarrington(observer='Earth', obstime=time))
|
|
48
48
|
|
|
49
49
|
footpoint_coord = Parker_spirals.footpoint(pos, 350 * (u.km/u.second), time)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: PyThea
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
5
5
|
Home-page: https://github.com/AthKouloumvakos/PyThea
|
|
6
6
|
Author: Athanasios Kouloumvakos
|
|
@@ -10,25 +10,25 @@ Keywords: science,solar physics,solar,sun,shock waves
|
|
|
10
10
|
Platform: any
|
|
11
11
|
Classifier: Programming Language :: Python
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Development Status :: 4 - Beta
|
|
16
16
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Intended Audience :: Science/Research
|
|
19
19
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
20
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10, <3.12
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE.md
|
|
23
|
-
Requires-Dist: numpy
|
|
23
|
+
Requires-Dist: numpy
|
|
24
24
|
Requires-Dist: pandas
|
|
25
25
|
Requires-Dist: scipy
|
|
26
26
|
Requires-Dist: aiapy
|
|
27
|
-
Requires-Dist: astropy
|
|
27
|
+
Requires-Dist: astropy
|
|
28
28
|
Requires-Dist: astroquery
|
|
29
29
|
Requires-Dist: jplephem
|
|
30
30
|
Requires-Dist: numexpr
|
|
31
|
-
Requires-Dist: sunpy==
|
|
31
|
+
Requires-Dist: sunpy==6.0.4
|
|
32
32
|
Requires-Dist: sunpy_soar
|
|
33
33
|
Requires-Dist: parfive==2.1.0
|
|
34
34
|
Requires-Dist: pooch
|
|
@@ -44,6 +44,17 @@ Requires-Dist: pyvista
|
|
|
44
44
|
Requires-Dist: pytest-astropy
|
|
45
45
|
Requires-Dist: pytest-sugar
|
|
46
46
|
Requires-Dist: pytest-mpl
|
|
47
|
+
Dynamic: author
|
|
48
|
+
Dynamic: author-email
|
|
49
|
+
Dynamic: classifier
|
|
50
|
+
Dynamic: description
|
|
51
|
+
Dynamic: description-content-type
|
|
52
|
+
Dynamic: home-page
|
|
53
|
+
Dynamic: keywords
|
|
54
|
+
Dynamic: license
|
|
55
|
+
Dynamic: requires-dist
|
|
56
|
+
Dynamic: requires-python
|
|
57
|
+
Dynamic: summary
|
|
47
58
|
|
|
48
59
|
# PyThea: A software package to reconstruct the 3D structure of CMEs and shock waves
|
|
49
60
|
|
|
@@ -5,16 +5,16 @@ channels:
|
|
|
5
5
|
- defaults
|
|
6
6
|
|
|
7
7
|
dependencies:
|
|
8
|
-
- python=3.
|
|
9
|
-
- numpy
|
|
8
|
+
- python=3.10
|
|
9
|
+
- numpy
|
|
10
10
|
- pandas
|
|
11
11
|
- scipy
|
|
12
12
|
- matplotlib
|
|
13
13
|
- aiapy
|
|
14
|
-
- astropy
|
|
14
|
+
- astropy
|
|
15
15
|
- astroquery
|
|
16
16
|
- numexpr
|
|
17
|
-
- sunpy=
|
|
17
|
+
- sunpy=6.0.4
|
|
18
18
|
- parfive=2.1.0 # The issue with streamlit and asyncio is resolved (see #13). Keep this for a while to make sure everything works smoothly.
|
|
19
19
|
- streamlit
|
|
20
20
|
- seaborn
|
|
@@ -9,9 +9,8 @@ classifiers =
|
|
|
9
9
|
Operating System :: OS Independent
|
|
10
10
|
Programming Language :: Python
|
|
11
11
|
Programming Language :: Python :: 3
|
|
12
|
-
Programming Language :: Python :: 3.8
|
|
13
|
-
Programming Language :: Python :: 3.9
|
|
14
12
|
Programming Language :: Python :: 3.10
|
|
13
|
+
Programming Language :: Python :: 3.11
|
|
15
14
|
Topic :: Scientific/Engineering :: Physics
|
|
16
15
|
|
|
17
16
|
[options]
|
|
@@ -37,8 +37,8 @@ setup(
|
|
|
37
37
|
classifiers=[
|
|
38
38
|
'Programming Language :: Python',
|
|
39
39
|
'Programming Language :: Python :: 3',
|
|
40
|
-
'Programming Language :: Python :: 3.
|
|
41
|
-
'Programming Language :: Python :: 3.
|
|
40
|
+
'Programming Language :: Python :: 3.10',
|
|
41
|
+
'Programming Language :: Python :: 3.11',
|
|
42
42
|
'Development Status :: 4 - Beta',
|
|
43
43
|
'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
|
|
44
44
|
'Operating System :: OS Independent',
|
|
@@ -46,7 +46,7 @@ setup(
|
|
|
46
46
|
'Topic :: Scientific/Engineering :: Physics',
|
|
47
47
|
],
|
|
48
48
|
|
|
49
|
-
python_requires='>=3.
|
|
49
|
+
python_requires='>=3.10, <3.12',
|
|
50
50
|
install_requires=requirements,
|
|
51
51
|
|
|
52
52
|
packages=find_packages(),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|