setiastrosuitepro 1.6.4__py3-none-any.whl → 1.7.1.post2__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/images/TextureClarity.svg +56 -0
- setiastro/images/abeicon.svg +16 -0
- setiastro/images/acv_icon.png +0 -0
- setiastro/images/colorwheel.svg +97 -0
- setiastro/images/cosmic.svg +40 -0
- setiastro/images/cosmicsat.svg +24 -0
- setiastro/images/first_quarter.png +0 -0
- setiastro/images/full_moon.png +0 -0
- setiastro/images/graxpert.svg +19 -0
- setiastro/images/last_quarter.png +0 -0
- setiastro/images/linearfit.svg +32 -0
- setiastro/images/narrowbandnormalization.png +0 -0
- setiastro/images/new_moon.png +0 -0
- setiastro/images/pixelmath.svg +42 -0
- setiastro/images/planetarystacker.png +0 -0
- setiastro/images/waning_crescent_1.png +0 -0
- setiastro/images/waning_crescent_2.png +0 -0
- setiastro/images/waning_crescent_3.png +0 -0
- setiastro/images/waning_crescent_4.png +0 -0
- setiastro/images/waning_crescent_5.png +0 -0
- setiastro/images/waning_gibbous_1.png +0 -0
- setiastro/images/waning_gibbous_2.png +0 -0
- setiastro/images/waning_gibbous_3.png +0 -0
- setiastro/images/waning_gibbous_4.png +0 -0
- setiastro/images/waning_gibbous_5.png +0 -0
- setiastro/images/waxing_crescent_1.png +0 -0
- setiastro/images/waxing_crescent_2.png +0 -0
- setiastro/images/waxing_crescent_3.png +0 -0
- setiastro/images/waxing_crescent_4.png +0 -0
- setiastro/images/waxing_crescent_5.png +0 -0
- setiastro/images/waxing_gibbous_1.png +0 -0
- setiastro/images/waxing_gibbous_2.png +0 -0
- setiastro/images/waxing_gibbous_3.png +0 -0
- setiastro/images/waxing_gibbous_4.png +0 -0
- setiastro/images/waxing_gibbous_5.png +0 -0
- setiastro/qml/ResourceMonitor.qml +84 -82
- setiastro/saspro/__main__.py +20 -1
- setiastro/saspro/_generated/build_info.py +2 -2
- setiastro/saspro/abe.py +37 -4
- setiastro/saspro/aberration_ai.py +364 -33
- setiastro/saspro/aberration_ai_preset.py +29 -3
- setiastro/saspro/acv_exporter.py +379 -0
- setiastro/saspro/add_stars.py +33 -6
- setiastro/saspro/astrospike_python.py +45 -3
- setiastro/saspro/backgroundneutral.py +108 -40
- setiastro/saspro/blemish_blaster.py +4 -1
- setiastro/saspro/blink_comparator_pro.py +150 -55
- setiastro/saspro/clahe.py +4 -1
- setiastro/saspro/continuum_subtract.py +4 -1
- setiastro/saspro/convo.py +13 -7
- setiastro/saspro/cosmicclarity.py +129 -18
- setiastro/saspro/crop_dialog_pro.py +123 -7
- setiastro/saspro/curve_editor_pro.py +181 -64
- setiastro/saspro/curves_preset.py +249 -47
- setiastro/saspro/doc_manager.py +245 -15
- setiastro/saspro/exoplanet_detector.py +120 -28
- setiastro/saspro/frequency_separation.py +1158 -204
- setiastro/saspro/ghs_dialog_pro.py +81 -16
- setiastro/saspro/graxpert.py +1 -0
- setiastro/saspro/gui/main_window.py +706 -264
- setiastro/saspro/gui/mixins/dock_mixin.py +245 -24
- setiastro/saspro/gui/mixins/file_mixin.py +35 -16
- setiastro/saspro/gui/mixins/menu_mixin.py +35 -1
- setiastro/saspro/gui/mixins/theme_mixin.py +160 -14
- setiastro/saspro/gui/mixins/toolbar_mixin.py +499 -24
- setiastro/saspro/gui/mixins/update_mixin.py +138 -36
- setiastro/saspro/gui/mixins/view_mixin.py +42 -0
- setiastro/saspro/halobgon.py +4 -0
- setiastro/saspro/histogram.py +184 -8
- setiastro/saspro/image_combine.py +4 -0
- setiastro/saspro/image_peeker_pro.py +4 -0
- setiastro/saspro/imageops/narrowband_normalization.py +816 -0
- setiastro/saspro/imageops/serloader.py +1345 -0
- setiastro/saspro/imageops/starbasedwhitebalance.py +23 -52
- setiastro/saspro/imageops/stretch.py +582 -62
- setiastro/saspro/isophote.py +4 -0
- setiastro/saspro/layers.py +13 -9
- setiastro/saspro/layers_dock.py +183 -3
- setiastro/saspro/legacy/image_manager.py +154 -20
- setiastro/saspro/legacy/numba_utils.py +68 -48
- setiastro/saspro/legacy/xisf.py +240 -98
- setiastro/saspro/live_stacking.py +203 -82
- setiastro/saspro/luminancerecombine.py +228 -27
- setiastro/saspro/mask_creation.py +174 -15
- setiastro/saspro/mfdeconv.py +113 -35
- setiastro/saspro/mfdeconvcudnn.py +119 -70
- setiastro/saspro/mfdeconvsport.py +112 -35
- setiastro/saspro/morphology.py +4 -0
- setiastro/saspro/multiscale_decomp.py +81 -29
- setiastro/saspro/narrowband_normalization.py +1618 -0
- setiastro/saspro/numba_utils.py +72 -57
- setiastro/saspro/ops/commands.py +18 -18
- setiastro/saspro/ops/script_editor.py +10 -2
- setiastro/saspro/ops/scripts.py +122 -0
- setiastro/saspro/perfect_palette_picker.py +37 -3
- setiastro/saspro/plate_solver.py +84 -49
- setiastro/saspro/psf_viewer.py +119 -37
- setiastro/saspro/remove_green.py +1 -1
- setiastro/saspro/resources.py +73 -0
- setiastro/saspro/rgbalign.py +460 -12
- setiastro/saspro/selective_color.py +4 -1
- setiastro/saspro/ser_stack_config.py +82 -0
- setiastro/saspro/ser_stacker.py +2321 -0
- setiastro/saspro/ser_stacker_dialog.py +1838 -0
- setiastro/saspro/ser_tracking.py +206 -0
- setiastro/saspro/serviewer.py +1625 -0
- setiastro/saspro/sfcc.py +662 -216
- setiastro/saspro/shortcuts.py +171 -33
- setiastro/saspro/signature_insert.py +692 -33
- setiastro/saspro/stacking_suite.py +1347 -485
- setiastro/saspro/star_alignment.py +247 -123
- setiastro/saspro/star_spikes.py +4 -0
- setiastro/saspro/star_stretch.py +38 -3
- setiastro/saspro/stat_stretch.py +892 -129
- setiastro/saspro/subwindow.py +787 -363
- setiastro/saspro/supernovaasteroidhunter.py +1 -1
- setiastro/saspro/texture_clarity.py +593 -0
- setiastro/saspro/wavescale_hdr.py +4 -1
- setiastro/saspro/wavescalede.py +4 -1
- setiastro/saspro/whitebalance.py +84 -12
- setiastro/saspro/widgets/common_utilities.py +28 -21
- setiastro/saspro/widgets/resource_monitor.py +209 -111
- setiastro/saspro/widgets/spinboxes.py +10 -13
- setiastro/saspro/wimi.py +27 -656
- setiastro/saspro/wims.py +13 -3
- setiastro/saspro/xisf.py +101 -11
- {setiastrosuitepro-1.6.4.dist-info → setiastrosuitepro-1.7.1.post2.dist-info}/METADATA +4 -2
- {setiastrosuitepro-1.6.4.dist-info → setiastrosuitepro-1.7.1.post2.dist-info}/RECORD +132 -87
- {setiastrosuitepro-1.6.4.dist-info → setiastrosuitepro-1.7.1.post2.dist-info}/WHEEL +0 -0
- {setiastrosuitepro-1.6.4.dist-info → setiastrosuitepro-1.7.1.post2.dist-info}/entry_points.txt +0 -0
- {setiastrosuitepro-1.6.4.dist-info → setiastrosuitepro-1.7.1.post2.dist-info}/licenses/LICENSE +0 -0
- {setiastrosuitepro-1.6.4.dist-info → setiastrosuitepro-1.7.1.post2.dist-info}/licenses/license.txt +0 -0
|
@@ -27,6 +27,10 @@ class GhsDialogPro(QDialog):
|
|
|
27
27
|
self.setWindowFlag(Qt.WindowType.Window, True)
|
|
28
28
|
self.setWindowModality(Qt.WindowModality.NonModal)
|
|
29
29
|
self.setModal(False)
|
|
30
|
+
try:
|
|
31
|
+
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose, True)
|
|
32
|
+
except Exception:
|
|
33
|
+
pass # older PyQt6 versions
|
|
30
34
|
self.doc = document
|
|
31
35
|
self._preview_img = None
|
|
32
36
|
self._full_img = None
|
|
@@ -123,14 +127,16 @@ class GhsDialogPro(QDialog):
|
|
|
123
127
|
main.addLayout(right, 1)
|
|
124
128
|
|
|
125
129
|
# ---------- wiring ----------
|
|
126
|
-
self.
|
|
130
|
+
self._suppress_editor_preview = False
|
|
131
|
+
self.editor.setPreviewCallback(lambda _lut8: self._on_editor_preview())
|
|
127
132
|
self.editor.setSymmetryCallback(self._on_symmetry_pick)
|
|
128
133
|
|
|
129
|
-
self.sA.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
for s in (self.sA, self.sB, self.sG, self.sLP, self.sHP):
|
|
135
|
+
s.valueChanged.connect(self._schedule_rebuild_from_params)
|
|
136
|
+
|
|
137
|
+
# Track dragging so we can “flush” on release
|
|
138
|
+
s.sliderPressed.connect(self._on_any_slider_pressed)
|
|
139
|
+
s.sliderReleased.connect(self._on_any_slider_released)
|
|
134
140
|
self.cmb_ch.currentTextChanged.connect(self._recolor_curve)
|
|
135
141
|
|
|
136
142
|
self.btn_apply.clicked.connect(self._apply)
|
|
@@ -148,6 +154,12 @@ class GhsDialogPro(QDialog):
|
|
|
148
154
|
# start with Fit to Preview (avoids offset issues)
|
|
149
155
|
QTimer.singleShot(0, self._fit)
|
|
150
156
|
|
|
157
|
+
self._rebuild_debounce = QTimer(self)
|
|
158
|
+
self._rebuild_debounce.setSingleShot(True)
|
|
159
|
+
self._rebuild_debounce.setInterval(75) # 50–120ms feels good; 75 is a nice default
|
|
160
|
+
self._rebuild_debounce.timeout.connect(self._rebuild_from_params_now)
|
|
161
|
+
|
|
162
|
+
self._slider_dragging = False
|
|
151
163
|
|
|
152
164
|
# first curve
|
|
153
165
|
self._rebuild_from_params()
|
|
@@ -194,12 +206,53 @@ class GhsDialogPro(QDialog):
|
|
|
194
206
|
self.editor.setSymmetryPoint(u * 360.0, 0.0)
|
|
195
207
|
self._rebuild_from_params()
|
|
196
208
|
|
|
209
|
+
def _on_editor_preview(self):
|
|
210
|
+
if getattr(self, "_suppress_editor_preview", False):
|
|
211
|
+
return
|
|
212
|
+
self._quick_preview()
|
|
213
|
+
|
|
214
|
+
def _on_any_slider_pressed(self):
|
|
215
|
+
self._slider_dragging = True
|
|
216
|
+
|
|
217
|
+
def _on_any_slider_released(self):
|
|
218
|
+
self._slider_dragging = False
|
|
219
|
+
# Flush immediately to final value
|
|
220
|
+
if self._rebuild_debounce.isActive():
|
|
221
|
+
self._rebuild_debounce.stop()
|
|
222
|
+
self._rebuild_from_params_now()
|
|
223
|
+
|
|
224
|
+
def _schedule_rebuild_from_params(self):
|
|
225
|
+
"""
|
|
226
|
+
Called on every valueChanged tick. Updates labels fast, but defers the heavy work.
|
|
227
|
+
"""
|
|
228
|
+
# lightweight label updates (no LUT/preview work here)
|
|
229
|
+
a = self.sA.value() / 50.0
|
|
230
|
+
b = self.sB.value() / 50.0
|
|
231
|
+
g = self.sG.value() / 100.0
|
|
232
|
+
self.labA.setText(f"{a:.2f}")
|
|
233
|
+
self.labB.setText(f"{b:.2f}")
|
|
234
|
+
self.labG.setText(f"{g:.2f}")
|
|
235
|
+
self.labLP.setText(f"{self.sLP.value()/360.0:.2f}")
|
|
236
|
+
self.labHP.setText(f"{self.sHP.value()/360.0:.2f}")
|
|
237
|
+
|
|
238
|
+
# debounce heavy rebuild
|
|
239
|
+
self._rebuild_debounce.start()
|
|
240
|
+
|
|
241
|
+
def _rebuild_from_params(self):
|
|
242
|
+
"""
|
|
243
|
+
Keep existing call sites working (hist pivot, symmetry pick, etc).
|
|
244
|
+
For non-slider callers we generally WANT immediate rebuild.
|
|
245
|
+
"""
|
|
246
|
+
if self._rebuild_debounce.isActive():
|
|
247
|
+
self._rebuild_debounce.stop()
|
|
248
|
+
self._rebuild_from_params_now()
|
|
249
|
+
|
|
197
250
|
|
|
198
251
|
def _on_symmetry_pick(self, u, v):
|
|
199
252
|
self._sym_u = float(u)
|
|
200
253
|
self._rebuild_from_params()
|
|
201
254
|
|
|
202
|
-
def
|
|
255
|
+
def _rebuild_from_params_now(self):
|
|
203
256
|
a = self.sA.value()/50.0
|
|
204
257
|
b = self.sB.value()/50.0
|
|
205
258
|
g = self.sG.value()/100.0
|
|
@@ -267,12 +320,17 @@ class GhsDialogPro(QDialog):
|
|
|
267
320
|
ys = (1.0 - vp) * 360.0
|
|
268
321
|
pts = list(zip(xs.astype(float), ys.astype(float)))
|
|
269
322
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
p.
|
|
323
|
+
self._suppress_editor_preview = True
|
|
324
|
+
try:
|
|
325
|
+
cps_sorted = sorted(self.editor.control_points, key=lambda p: p.scenePos().x())
|
|
326
|
+
for p, (x, y) in zip(cps_sorted, pts):
|
|
327
|
+
p.setPos(x, y)
|
|
328
|
+
|
|
329
|
+
self._recolor_curve()
|
|
330
|
+
self.editor.updateCurve()
|
|
331
|
+
finally:
|
|
332
|
+
self._suppress_editor_preview = False
|
|
273
333
|
|
|
274
|
-
self._recolor_curve()
|
|
275
|
-
self.editor.updateCurve()
|
|
276
334
|
self._quick_preview()
|
|
277
335
|
|
|
278
336
|
|
|
@@ -654,10 +712,17 @@ class GhsDialogPro(QDialog):
|
|
|
654
712
|
|
|
655
713
|
return (m * out + (1.0 - m) * src).astype(np.float32, copy=False)
|
|
656
714
|
|
|
657
|
-
|
|
658
715
|
def _reset(self):
|
|
659
|
-
self.sA
|
|
660
|
-
|
|
716
|
+
for s in (self.sA, self.sB, self.sG, self.sLP, self.sHP):
|
|
717
|
+
s.blockSignals(True)
|
|
718
|
+
try:
|
|
719
|
+
self.sA.setValue(50); self.sB.setValue(50); self.sG.setValue(100)
|
|
720
|
+
self.sLP.setValue(0); self.sHP.setValue(0)
|
|
721
|
+
finally:
|
|
722
|
+
for s in (self.sA, self.sB, self.sG, self.sLP, self.sHP):
|
|
723
|
+
s.blockSignals(False)
|
|
724
|
+
|
|
661
725
|
self._sym_u = 0.5
|
|
662
726
|
self.editor.clearSymmetryLine()
|
|
663
|
-
self._rebuild_from_params()
|
|
727
|
+
self._rebuild_from_params() # immediate
|
|
728
|
+
|