setiastrosuitepro 1.6.0__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 setiastrosuitepro might be problematic. Click here for more details.
- setiastro/__init__.py +2 -0
- setiastro/saspro/__init__.py +20 -0
- setiastro/saspro/__main__.py +784 -0
- setiastro/saspro/_generated/__init__.py +7 -0
- setiastro/saspro/_generated/build_info.py +2 -0
- setiastro/saspro/abe.py +1295 -0
- setiastro/saspro/abe_preset.py +196 -0
- setiastro/saspro/aberration_ai.py +694 -0
- setiastro/saspro/aberration_ai_preset.py +224 -0
- setiastro/saspro/accel_installer.py +218 -0
- setiastro/saspro/accel_workers.py +30 -0
- setiastro/saspro/add_stars.py +621 -0
- setiastro/saspro/astrobin_exporter.py +1007 -0
- setiastro/saspro/astrospike.py +153 -0
- setiastro/saspro/astrospike_python.py +1839 -0
- setiastro/saspro/autostretch.py +196 -0
- setiastro/saspro/backgroundneutral.py +560 -0
- setiastro/saspro/batch_convert.py +325 -0
- setiastro/saspro/batch_renamer.py +519 -0
- setiastro/saspro/blemish_blaster.py +488 -0
- setiastro/saspro/blink_comparator_pro.py +2923 -0
- setiastro/saspro/bundles.py +61 -0
- setiastro/saspro/bundles_dock.py +114 -0
- setiastro/saspro/cheat_sheet.py +168 -0
- setiastro/saspro/clahe.py +342 -0
- setiastro/saspro/comet_stacking.py +1377 -0
- setiastro/saspro/config.py +38 -0
- setiastro/saspro/config_bootstrap.py +40 -0
- setiastro/saspro/config_manager.py +316 -0
- setiastro/saspro/continuum_subtract.py +1617 -0
- setiastro/saspro/convo.py +1397 -0
- setiastro/saspro/convo_preset.py +414 -0
- setiastro/saspro/copyastro.py +187 -0
- setiastro/saspro/cosmicclarity.py +1564 -0
- setiastro/saspro/cosmicclarity_preset.py +407 -0
- setiastro/saspro/crop_dialog_pro.py +948 -0
- setiastro/saspro/crop_preset.py +189 -0
- setiastro/saspro/curve_editor_pro.py +2544 -0
- setiastro/saspro/curves_preset.py +375 -0
- setiastro/saspro/debayer.py +670 -0
- setiastro/saspro/debug_utils.py +29 -0
- setiastro/saspro/dnd_mime.py +35 -0
- setiastro/saspro/doc_manager.py +2634 -0
- setiastro/saspro/exoplanet_detector.py +2166 -0
- setiastro/saspro/file_utils.py +284 -0
- setiastro/saspro/fitsmodifier.py +744 -0
- setiastro/saspro/free_torch_memory.py +48 -0
- setiastro/saspro/frequency_separation.py +1343 -0
- setiastro/saspro/function_bundle.py +1594 -0
- setiastro/saspro/ghs_dialog_pro.py +660 -0
- setiastro/saspro/ghs_preset.py +284 -0
- setiastro/saspro/graxpert.py +634 -0
- setiastro/saspro/graxpert_preset.py +287 -0
- setiastro/saspro/gui/__init__.py +0 -0
- setiastro/saspro/gui/main_window.py +8494 -0
- setiastro/saspro/gui/mixins/__init__.py +33 -0
- setiastro/saspro/gui/mixins/dock_mixin.py +263 -0
- setiastro/saspro/gui/mixins/file_mixin.py +445 -0
- setiastro/saspro/gui/mixins/geometry_mixin.py +403 -0
- setiastro/saspro/gui/mixins/header_mixin.py +441 -0
- setiastro/saspro/gui/mixins/mask_mixin.py +421 -0
- setiastro/saspro/gui/mixins/menu_mixin.py +361 -0
- setiastro/saspro/gui/mixins/theme_mixin.py +367 -0
- setiastro/saspro/gui/mixins/toolbar_mixin.py +1324 -0
- setiastro/saspro/gui/mixins/update_mixin.py +309 -0
- setiastro/saspro/gui/mixins/view_mixin.py +435 -0
- setiastro/saspro/halobgon.py +462 -0
- setiastro/saspro/header_viewer.py +445 -0
- setiastro/saspro/headless_utils.py +88 -0
- setiastro/saspro/histogram.py +753 -0
- setiastro/saspro/history_explorer.py +939 -0
- setiastro/saspro/image_combine.py +414 -0
- setiastro/saspro/image_peeker_pro.py +1596 -0
- setiastro/saspro/imageops/__init__.py +37 -0
- setiastro/saspro/imageops/mdi_snap.py +292 -0
- setiastro/saspro/imageops/scnr.py +36 -0
- setiastro/saspro/imageops/starbasedwhitebalance.py +210 -0
- setiastro/saspro/imageops/stretch.py +244 -0
- setiastro/saspro/isophote.py +1179 -0
- setiastro/saspro/layers.py +208 -0
- setiastro/saspro/layers_dock.py +714 -0
- setiastro/saspro/lazy_imports.py +193 -0
- setiastro/saspro/legacy/__init__.py +2 -0
- setiastro/saspro/legacy/image_manager.py +2226 -0
- setiastro/saspro/legacy/numba_utils.py +3659 -0
- setiastro/saspro/legacy/xisf.py +1071 -0
- setiastro/saspro/linear_fit.py +534 -0
- setiastro/saspro/live_stacking.py +1830 -0
- setiastro/saspro/log_bus.py +5 -0
- setiastro/saspro/logging_config.py +460 -0
- setiastro/saspro/luminancerecombine.py +309 -0
- setiastro/saspro/main_helpers.py +201 -0
- setiastro/saspro/mask_creation.py +928 -0
- setiastro/saspro/masks_core.py +56 -0
- setiastro/saspro/mdi_widgets.py +353 -0
- setiastro/saspro/memory_utils.py +666 -0
- setiastro/saspro/metadata_patcher.py +75 -0
- setiastro/saspro/mfdeconv.py +3826 -0
- setiastro/saspro/mfdeconv_earlystop.py +71 -0
- setiastro/saspro/mfdeconvcudnn.py +3263 -0
- setiastro/saspro/mfdeconvsport.py +2382 -0
- setiastro/saspro/minorbodycatalog.py +567 -0
- setiastro/saspro/morphology.py +382 -0
- setiastro/saspro/multiscale_decomp.py +1290 -0
- setiastro/saspro/nbtorgb_stars.py +531 -0
- setiastro/saspro/numba_utils.py +3044 -0
- setiastro/saspro/numba_warmup.py +141 -0
- setiastro/saspro/ops/__init__.py +9 -0
- setiastro/saspro/ops/command_help_dialog.py +623 -0
- setiastro/saspro/ops/command_runner.py +217 -0
- setiastro/saspro/ops/commands.py +1594 -0
- setiastro/saspro/ops/script_editor.py +1102 -0
- setiastro/saspro/ops/scripts.py +1413 -0
- setiastro/saspro/ops/settings.py +560 -0
- setiastro/saspro/parallel_utils.py +554 -0
- setiastro/saspro/pedestal.py +121 -0
- setiastro/saspro/perfect_palette_picker.py +1053 -0
- setiastro/saspro/pipeline.py +110 -0
- setiastro/saspro/pixelmath.py +1600 -0
- setiastro/saspro/plate_solver.py +2435 -0
- setiastro/saspro/project_io.py +797 -0
- setiastro/saspro/psf_utils.py +136 -0
- setiastro/saspro/psf_viewer.py +549 -0
- setiastro/saspro/pyi_rthook_astroquery.py +95 -0
- setiastro/saspro/remove_green.py +314 -0
- setiastro/saspro/remove_stars.py +1625 -0
- setiastro/saspro/remove_stars_preset.py +404 -0
- setiastro/saspro/resources.py +472 -0
- setiastro/saspro/rgb_combination.py +207 -0
- setiastro/saspro/rgb_extract.py +19 -0
- setiastro/saspro/rgbalign.py +723 -0
- setiastro/saspro/runtime_imports.py +7 -0
- setiastro/saspro/runtime_torch.py +754 -0
- setiastro/saspro/save_options.py +72 -0
- setiastro/saspro/selective_color.py +1552 -0
- setiastro/saspro/sfcc.py +1425 -0
- setiastro/saspro/shortcuts.py +2807 -0
- setiastro/saspro/signature_insert.py +1099 -0
- setiastro/saspro/stacking_suite.py +17712 -0
- setiastro/saspro/star_alignment.py +7420 -0
- setiastro/saspro/star_alignment_preset.py +329 -0
- setiastro/saspro/star_metrics.py +49 -0
- setiastro/saspro/star_spikes.py +681 -0
- setiastro/saspro/star_stretch.py +470 -0
- setiastro/saspro/stat_stretch.py +502 -0
- setiastro/saspro/status_log_dock.py +78 -0
- setiastro/saspro/subwindow.py +3267 -0
- setiastro/saspro/supernovaasteroidhunter.py +1712 -0
- setiastro/saspro/swap_manager.py +99 -0
- setiastro/saspro/torch_backend.py +89 -0
- setiastro/saspro/torch_rejection.py +434 -0
- setiastro/saspro/view_bundle.py +1555 -0
- setiastro/saspro/wavescale_hdr.py +624 -0
- setiastro/saspro/wavescale_hdr_preset.py +100 -0
- setiastro/saspro/wavescalede.py +657 -0
- setiastro/saspro/wavescalede_preset.py +228 -0
- setiastro/saspro/wcs_update.py +374 -0
- setiastro/saspro/whitebalance.py +456 -0
- setiastro/saspro/widgets/__init__.py +48 -0
- setiastro/saspro/widgets/common_utilities.py +305 -0
- setiastro/saspro/widgets/graphics_views.py +122 -0
- setiastro/saspro/widgets/image_utils.py +518 -0
- setiastro/saspro/widgets/preview_dialogs.py +280 -0
- setiastro/saspro/widgets/spinboxes.py +275 -0
- setiastro/saspro/widgets/themed_buttons.py +13 -0
- setiastro/saspro/widgets/wavelet_utils.py +299 -0
- setiastro/saspro/window_shelf.py +185 -0
- setiastro/saspro/xisf.py +1123 -0
- setiastrosuitepro-1.6.0.dist-info/METADATA +266 -0
- setiastrosuitepro-1.6.0.dist-info/RECORD +174 -0
- setiastrosuitepro-1.6.0.dist-info/WHEEL +4 -0
- setiastrosuitepro-1.6.0.dist-info/entry_points.txt +6 -0
- setiastrosuitepro-1.6.0.dist-info/licenses/LICENSE +674 -0
- setiastrosuitepro-1.6.0.dist-info/licenses/license.txt +2580 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Centralized lazy import system for heavy dependencies.
|
|
3
|
+
|
|
4
|
+
This module provides a lazy loading mechanism to defer imports of large
|
|
5
|
+
libraries until they are actually needed, reducing startup time and
|
|
6
|
+
initial memory footprint.
|
|
7
|
+
"""
|
|
8
|
+
import importlib
|
|
9
|
+
import threading
|
|
10
|
+
from typing import Any, Optional
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class LazyModule:
|
|
14
|
+
"""
|
|
15
|
+
Lazy-loading wrapper for a module.
|
|
16
|
+
|
|
17
|
+
Attributes are forwarded to the actual module once it's imported.
|
|
18
|
+
Thread-safe and caches import failures to avoid repeated attempts.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, module_name: str, optional: bool = False):
|
|
22
|
+
"""
|
|
23
|
+
Initialize lazy module wrapper.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
module_name: Full module path (e.g., 'scipy.ndimage')
|
|
27
|
+
optional: If True, returns None on import failure instead of raising
|
|
28
|
+
"""
|
|
29
|
+
self._module_name = module_name
|
|
30
|
+
self._module: Optional[Any] = None
|
|
31
|
+
self._optional = optional
|
|
32
|
+
self._failed = False
|
|
33
|
+
self._lock = threading.Lock()
|
|
34
|
+
|
|
35
|
+
def _import(self):
|
|
36
|
+
"""Import the module if not already imported."""
|
|
37
|
+
if self._module is not None or self._failed:
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
with self._lock:
|
|
41
|
+
# Double-check after acquiring lock
|
|
42
|
+
if self._module is not None or self._failed:
|
|
43
|
+
return
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
self._module = importlib.import_module(self._module_name)
|
|
47
|
+
except Exception as e:
|
|
48
|
+
self._failed = True
|
|
49
|
+
if not self._optional:
|
|
50
|
+
raise ImportError(
|
|
51
|
+
f"Failed to import required module '{self._module_name}': {e}"
|
|
52
|
+
) from e
|
|
53
|
+
|
|
54
|
+
def __getattr__(self, name: str) -> Any:
|
|
55
|
+
"""Forward attribute access to the underlying module."""
|
|
56
|
+
self._import()
|
|
57
|
+
if self._module is None:
|
|
58
|
+
if self._optional:
|
|
59
|
+
return None
|
|
60
|
+
raise AttributeError(
|
|
61
|
+
f"Module '{self._module_name}' not available (import failed)"
|
|
62
|
+
)
|
|
63
|
+
return getattr(self._module, name)
|
|
64
|
+
|
|
65
|
+
def __call__(self, *args, **kwargs):
|
|
66
|
+
"""Allow calling the module itself if it's callable."""
|
|
67
|
+
self._import()
|
|
68
|
+
if self._module is None:
|
|
69
|
+
if self._optional:
|
|
70
|
+
return None
|
|
71
|
+
raise RuntimeError(
|
|
72
|
+
f"Module '{self._module_name}' not available (import failed)"
|
|
73
|
+
)
|
|
74
|
+
return self._module(*args, **kwargs)
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def is_available(self) -> bool:
|
|
78
|
+
"""Check if the module is available without triggering import."""
|
|
79
|
+
if self._module is not None:
|
|
80
|
+
return True
|
|
81
|
+
if self._failed:
|
|
82
|
+
return False
|
|
83
|
+
# Try to import to check availability
|
|
84
|
+
self._import()
|
|
85
|
+
return self._module is not None
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# ============================================================================
|
|
89
|
+
# Lazy importers for heavy dependencies
|
|
90
|
+
# ============================================================================
|
|
91
|
+
|
|
92
|
+
# SciPy modules
|
|
93
|
+
lazy_scipy_ndimage = LazyModule('scipy.ndimage')
|
|
94
|
+
lazy_scipy_signal = LazyModule('scipy.signal')
|
|
95
|
+
lazy_scipy_interpolate = LazyModule('scipy.interpolate')
|
|
96
|
+
lazy_scipy_optimize = LazyModule('scipy.optimize')
|
|
97
|
+
|
|
98
|
+
# OpenCV
|
|
99
|
+
lazy_cv2 = LazyModule('cv2', optional=True)
|
|
100
|
+
|
|
101
|
+
# PyTorch (optional, may not be installed)
|
|
102
|
+
lazy_torch = LazyModule('torch', optional=True)
|
|
103
|
+
|
|
104
|
+
# Astronomy libraries
|
|
105
|
+
lazy_astroalign = LazyModule('astroalign', optional=True)
|
|
106
|
+
lazy_sep = LazyModule('sep', optional=True)
|
|
107
|
+
lazy_reproject = LazyModule('reproject', optional=True)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# ============================================================================
|
|
111
|
+
# Lazy imports for photutils and lightkurve (migrated from main files)
|
|
112
|
+
# ============================================================================
|
|
113
|
+
|
|
114
|
+
_photutils_isophote = None
|
|
115
|
+
_photutils_lock = threading.Lock()
|
|
116
|
+
|
|
117
|
+
def get_photutils_isophote():
|
|
118
|
+
"""Lazy loader for photutils.isophote module."""
|
|
119
|
+
global _photutils_isophote
|
|
120
|
+
|
|
121
|
+
if _photutils_isophote is not None:
|
|
122
|
+
return _photutils_isophote if _photutils_isophote is not False else None
|
|
123
|
+
|
|
124
|
+
with _photutils_lock:
|
|
125
|
+
# Double-check after lock
|
|
126
|
+
if _photutils_isophote is not None:
|
|
127
|
+
return _photutils_isophote if _photutils_isophote is not False else None
|
|
128
|
+
|
|
129
|
+
try:
|
|
130
|
+
from photutils import isophote as _isophote_module
|
|
131
|
+
_photutils_isophote = _isophote_module
|
|
132
|
+
except Exception:
|
|
133
|
+
_photutils_isophote = False # Mark as failed
|
|
134
|
+
|
|
135
|
+
return _photutils_isophote if _photutils_isophote is not False else None
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def get_Ellipse():
|
|
139
|
+
"""Get photutils.isophote.Ellipse, loading lazily."""
|
|
140
|
+
mod = get_photutils_isophote()
|
|
141
|
+
return mod.Ellipse if mod else None
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def get_EllipseGeometry():
|
|
145
|
+
"""Get photutils.isophote.EllipseGeometry, loading lazily."""
|
|
146
|
+
mod = get_photutils_isophote()
|
|
147
|
+
return mod.EllipseGeometry if mod else None
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def get_build_ellipse_model():
|
|
151
|
+
"""Get photutils.isophote.build_ellipse_model, loading lazily."""
|
|
152
|
+
mod = get_photutils_isophote()
|
|
153
|
+
return mod.build_ellipse_model if mod else None
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
_lightkurve_module = None
|
|
157
|
+
_lightkurve_lock = threading.Lock()
|
|
158
|
+
|
|
159
|
+
def get_lightkurve():
|
|
160
|
+
"""Lazy loader for lightkurve module."""
|
|
161
|
+
global _lightkurve_module
|
|
162
|
+
|
|
163
|
+
if _lightkurve_module is not None:
|
|
164
|
+
return _lightkurve_module if _lightkurve_module is not False else None
|
|
165
|
+
|
|
166
|
+
with _lightkurve_lock:
|
|
167
|
+
# Double-check after lock
|
|
168
|
+
if _lightkurve_module is not None:
|
|
169
|
+
return _lightkurve_module if _lightkurve_module is not False else None
|
|
170
|
+
|
|
171
|
+
try:
|
|
172
|
+
import lightkurve as _lk
|
|
173
|
+
_lk.MPLSTYLE = None
|
|
174
|
+
_lightkurve_module = _lk
|
|
175
|
+
except Exception:
|
|
176
|
+
_lightkurve_module = False # Mark as failed
|
|
177
|
+
|
|
178
|
+
return _lightkurve_module if _lightkurve_module is not False else None
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
# ============================================================================
|
|
182
|
+
# Convenience function for reproject.reproject_interp
|
|
183
|
+
# ============================================================================
|
|
184
|
+
|
|
185
|
+
def get_reproject_interp():
|
|
186
|
+
"""Get reproject.reproject_interp function if available."""
|
|
187
|
+
try:
|
|
188
|
+
mod = lazy_reproject
|
|
189
|
+
if mod.is_available:
|
|
190
|
+
return mod.reproject_interp
|
|
191
|
+
except Exception:
|
|
192
|
+
pass
|
|
193
|
+
return None
|