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.
Files changed (65) hide show
  1. {pythea-1.0.0 → pythea-1.1.0}/CHANGELOG.md +12 -0
  2. {pythea-1.0.0 → pythea-1.1.0}/PKG-INFO +19 -8
  3. {pythea-1.0.0 → pythea-1.1.0}/PyThea/_version.py +2 -2
  4. {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/Parker_spirals/utils.py +1 -1
  5. {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/hek/utils.py +67 -37
  6. {pythea-1.0.0 → pythea-1.1.0}/PyThea/modules.py +1 -1
  7. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/aia/utils.py +4 -3
  8. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_extension_utils.py +2 -2
  9. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/PKG-INFO +19 -8
  10. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/requires.txt +3 -3
  11. {pythea-1.0.0 → pythea-1.1.0}/environment.yml +4 -4
  12. {pythea-1.0.0 → pythea-1.1.0}/requirements.txt +3 -3
  13. {pythea-1.0.0 → pythea-1.1.0}/setup.cfg +1 -2
  14. {pythea-1.0.0 → pythea-1.1.0}/setup.py +3 -3
  15. {pythea-1.0.0 → pythea-1.1.0}/.readthedocs.yaml +0 -0
  16. {pythea-1.0.0 → pythea-1.1.0}/LICENSE.md +0 -0
  17. {pythea-1.0.0 → pythea-1.1.0}/MANIFEST.in +0 -0
  18. {pythea-1.0.0 → pythea-1.1.0}/PyThea/PyThea_app.py +0 -0
  19. {pythea-1.0.0 → pythea-1.1.0}/PyThea/__init__.py +0 -0
  20. {pythea-1.0.0 → pythea-1.1.0}/PyThea/callbacks.py +0 -0
  21. {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/__init__.py +0 -0
  22. {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/app_styles.py +0 -0
  23. {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/config_sliders.py +0 -0
  24. {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/selected_bodies.py +0 -0
  25. {pythea-1.0.0 → pythea-1.1.0}/PyThea/config/selected_imagers.py +0 -0
  26. {pythea-1.0.0 → pythea-1.1.0}/PyThea/data/__init__.py +0 -0
  27. {pythea-1.0.0 → pythea-1.1.0}/PyThea/data/sample_data.py +0 -0
  28. {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/LICENSE_gcs_python.md +0 -0
  29. {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/Parker_spirals/__init__.py +0 -0
  30. {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/__init__.py +0 -0
  31. {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/buttons.py +0 -0
  32. {pythea-1.0.0 → pythea-1.1.0}/PyThea/extensions/hek/__init__.py +0 -0
  33. {pythea-1.0.0 → pythea-1.1.0}/PyThea/geometrical_models.py +0 -0
  34. {pythea-1.0.0 → pythea-1.1.0}/PyThea/pythea_cli.py +0 -0
  35. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/__init__.py +0 -0
  36. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/__init__.py +0 -0
  37. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/__init__.py +0 -0
  38. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/aia/__init__.py +0 -0
  39. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/lasco/__init__.py +0 -0
  40. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/lasco/utils.py +0 -0
  41. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/stereo/__init__.py +0 -0
  42. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/extern/sunkit_instruments/stereo/utils.py +0 -0
  43. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/map/__init__.py +0 -0
  44. {pythea-1.0.0 → pythea-1.1.0}/PyThea/sunpy_dev/map/maputils.py +0 -0
  45. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/Pythea_test.py +0 -0
  46. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/__init__.py +0 -0
  47. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/conftest.py +0 -0
  48. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/figure_hashes.json +0 -0
  49. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_figures.py +0 -0
  50. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_geometrical_models.py +0 -0
  51. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_imports.py +0 -0
  52. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_remote_clients.py +0 -0
  53. {pythea-1.0.0 → pythea-1.1.0}/PyThea/test/test_utils.py +0 -0
  54. {pythea-1.0.0 → pythea-1.1.0}/PyThea/utils.py +0 -0
  55. {pythea-1.0.0 → pythea-1.1.0}/PyThea/utils_database.py +0 -0
  56. {pythea-1.0.0 → pythea-1.1.0}/PyThea/version.py +0 -0
  57. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/.DS_Store +0 -0
  58. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/SOURCES.txt +0 -0
  59. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/dependency_links.txt +0 -0
  60. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/entry_points.txt +0 -0
  61. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/not-zip-safe +0 -0
  62. {pythea-1.0.0 → pythea-1.1.0}/PyThea.egg-info/top_level.txt +0 -0
  63. {pythea-1.0.0 → pythea-1.1.0}/README.md +0 -0
  64. {pythea-1.0.0 → pythea-1.1.0}/README_pypi.md +0 -0
  65. {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
1
+ Metadata-Version: 2.2
2
2
  Name: PyThea
3
- Version: 1.0.0
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.8
14
- Classifier: Programming Language :: Python :: 3.9
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.8, <3.11
20
+ Requires-Python: >=3.10, <3.12
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE.md
23
- Requires-Dist: numpy==1.26.4
23
+ Requires-Dist: numpy
24
24
  Requires-Dist: pandas
25
25
  Requires-Dist: scipy
26
26
  Requires-Dist: aiapy
27
- Requires-Dist: astropy==6.0.0
27
+ Requires-Dist: astropy
28
28
  Requires-Dist: astroquery
29
29
  Requires-Dist: jplephem
30
30
  Requires-Dist: numexpr
31
- Requires-Dist: sunpy==5.1.2
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
 
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.0.0'
16
- __version_tuple__ = version_tuple = (1, 0, 0)
15
+ __version__ = version = '1.1.0'
16
+ __version_tuple__ = version_tuple = (1, 1, 0)
@@ -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, 'id')
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
- def plot_hek(axis, map, mode, time_range=[-2, 2], hek_responses=None):
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
- hek_client = hek.HEKClient()
38
- start_time = map.date_average + TimeDelta(time_range[0] * u.hour)
39
- end_time = map.date_average + TimeDelta(time_range[1] * u.hour)
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 = hek_client.search(a.Time(start_time, end_time),
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 = hek_client.search(a.Time(start_time, end_time),
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=map.date_average)
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 = hek_client.search(a.Time(start_time, end_time),
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 fix_observer_location, update_pointing
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
- map_sequence = [fix_observer_location(tmap) for tmap in map_sequence]
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, 'id')
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, 'id')
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
1
+ Metadata-Version: 2.2
2
2
  Name: PyThea
3
- Version: 1.0.0
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.8
14
- Classifier: Programming Language :: Python :: 3.9
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.8, <3.11
20
+ Requires-Python: >=3.10, <3.12
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE.md
23
- Requires-Dist: numpy==1.26.4
23
+ Requires-Dist: numpy
24
24
  Requires-Dist: pandas
25
25
  Requires-Dist: scipy
26
26
  Requires-Dist: aiapy
27
- Requires-Dist: astropy==6.0.0
27
+ Requires-Dist: astropy
28
28
  Requires-Dist: astroquery
29
29
  Requires-Dist: jplephem
30
30
  Requires-Dist: numexpr
31
- Requires-Dist: sunpy==5.1.2
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
 
@@ -1,12 +1,12 @@
1
- numpy==1.26.4
1
+ numpy
2
2
  pandas
3
3
  scipy
4
4
  aiapy
5
- astropy==6.0.0
5
+ astropy
6
6
  astroquery
7
7
  jplephem
8
8
  numexpr
9
- sunpy==5.1.2
9
+ sunpy==6.0.4
10
10
  sunpy_soar
11
11
  parfive==2.1.0
12
12
  pooch
@@ -5,16 +5,16 @@ channels:
5
5
  - defaults
6
6
 
7
7
  dependencies:
8
- - python=3.9
9
- - numpy=1.26.4
8
+ - python=3.10
9
+ - numpy
10
10
  - pandas
11
11
  - scipy
12
12
  - matplotlib
13
13
  - aiapy
14
- - astropy=6.0.0
14
+ - astropy
15
15
  - astroquery
16
16
  - numexpr
17
- - sunpy=5.1.2
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
@@ -1,12 +1,12 @@
1
- numpy==1.26.4
1
+ numpy
2
2
  pandas
3
3
  scipy
4
4
  aiapy
5
- astropy==6.0.0
5
+ astropy
6
6
  astroquery
7
7
  jplephem
8
8
  numexpr
9
- sunpy==5.1.2
9
+ sunpy==6.0.4
10
10
  sunpy_soar
11
11
  parfive==2.1.0
12
12
  pooch
@@ -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.8',
41
- 'Programming Language :: Python :: 3.9',
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.8, <3.11',
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