setiastrosuitepro 1.7.5.post1__py3-none-any.whl → 1.8.0.post3__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.

Files changed (27) hide show
  1. setiastro/saspro/_generated/build_info.py +2 -2
  2. setiastro/saspro/accel_installer.py +21 -8
  3. setiastro/saspro/accel_workers.py +11 -12
  4. setiastro/saspro/comet_stacking.py +113 -85
  5. setiastro/saspro/cosmicclarity.py +604 -826
  6. setiastro/saspro/cosmicclarity_engines/benchmark_engine.py +732 -0
  7. setiastro/saspro/cosmicclarity_engines/darkstar_engine.py +576 -0
  8. setiastro/saspro/cosmicclarity_engines/denoise_engine.py +567 -0
  9. setiastro/saspro/cosmicclarity_engines/satellite_engine.py +620 -0
  10. setiastro/saspro/cosmicclarity_engines/sharpen_engine.py +587 -0
  11. setiastro/saspro/cosmicclarity_engines/superres_engine.py +412 -0
  12. setiastro/saspro/gui/main_window.py +14 -0
  13. setiastro/saspro/gui/mixins/menu_mixin.py +2 -0
  14. setiastro/saspro/model_manager.py +324 -0
  15. setiastro/saspro/model_workers.py +102 -0
  16. setiastro/saspro/ops/benchmark.py +320 -0
  17. setiastro/saspro/ops/settings.py +407 -10
  18. setiastro/saspro/remove_stars.py +424 -442
  19. setiastro/saspro/resources.py +73 -10
  20. setiastro/saspro/runtime_torch.py +107 -22
  21. setiastro/saspro/signature_insert.py +14 -3
  22. {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/METADATA +2 -1
  23. {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/RECORD +27 -18
  24. {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/WHEEL +0 -0
  25. {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/entry_points.txt +0 -0
  26. {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/licenses/LICENSE +0 -0
  27. {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/licenses/license.txt +0 -0
@@ -15,6 +15,7 @@ from __future__ import annotations
15
15
  import os
16
16
  import sys
17
17
  from functools import lru_cache
18
+ from pathlib import Path
18
19
 
19
20
 
20
21
  def _get_base_path() -> str:
@@ -340,16 +341,6 @@ class Icons:
340
341
  FUNCTION_BUNDLES = property(lambda self: _resource_path('functionbundle.png'))
341
342
  VIEW_BUNDLES = property(lambda self: _resource_path('viewbundle.png'))
342
343
 
343
-
344
- class Resources:
345
- """
346
- Centralized data resource paths.
347
- """
348
- SASP_DATA = property(lambda self: _resource_path('data/SASP_data.fits'))
349
- ASTROBIN_FILTERS_CSV = property(lambda self: _resource_path('data/catalogs/astrobin_filters.csv'))
350
- SPINNER_GIF = property(lambda self: _resource_path('spinner.gif'))
351
-
352
-
353
344
  # Singleton instances for easy access
354
345
  _icons_instance = None
355
346
  _resources_instance = None
@@ -557,6 +548,78 @@ def _init_legacy_paths():
557
548
  'planetprojection_path': get_icon_path('3dplanet.png'),
558
549
  }
559
550
 
551
+ class Resources:
552
+ """
553
+ Centralized data resource paths.
554
+ """
555
+ SASP_DATA = property(lambda self: _resource_path('data/SASP_data.fits'))
556
+ ASTROBIN_FILTERS_CSV = property(lambda self: _resource_path('data/catalogs/astrobin_filters.csv'))
557
+ SPINNER_GIF = property(lambda self: _resource_path('spinner.gif'))
558
+
559
+ # --- Models root ---
560
+ MODELS_DIR = property(lambda self: get_models_dir())
561
+
562
+ # --- Cosmic Clarity Sharpen ---
563
+ CC_STELLAR_SHARP_PTH = property(lambda self: model_path('deep_sharp_stellar_cnn_AI3_5s.pth'))
564
+ CC_STELLAR_SHARP_ONNX = property(lambda self: model_path('deep_sharp_stellar_cnn_AI3_5s.onnx'))
565
+
566
+ CC_NS1_PTH = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_1AI3_5s.pth'))
567
+ CC_NS1_ONNX = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_1AI3_5s.onnx'))
568
+
569
+ CC_NS2_PTH = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_2AI3_5s.pth'))
570
+ CC_NS2_ONNX = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_2AI3_5s.onnx'))
571
+ CC_NS4_PTH = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_4AI3_5s.pth'))
572
+ CC_NS4_ONNX = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_4AI3_5s.onnx'))
573
+
574
+ CC_NS8_PTH = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_8AI3_5s.pth'))
575
+ CC_NS8_ONNX = property(lambda self: model_path('deep_nonstellar_sharp_cnn_radius_8AI3_5s.onnx'))
576
+
577
+ CC_DENOISE_PTH = property(lambda self: model_path('deep_denoise_cnn_AI3_6.pth'))
578
+ CC_DENOISE_ONNX = property(lambda self: model_path('deep_denoise_cnn_AI3_6.onnx'))
579
+
580
+ # --- Super Resolution ---
581
+ CC_SUPERRES_2X_PTH = property(lambda self: model_path('superres_2x.pth'))
582
+ CC_SUPERRES_2X_ONNX = property(lambda self: model_path('superres_2x.onnx'))
583
+ CC_SUPERRES_3X_PTH = property(lambda self: model_path('superres_3x.pth'))
584
+ CC_SUPERRES_3X_ONNX = property(lambda self: model_path('superres_3x.onnx'))
585
+
586
+ CC_SUPERRES_4X_PTH = property(lambda self: model_path('superres_4x.pth'))
587
+ CC_SUPERRES_4X_ONNX = property(lambda self: model_path('superres_4x.onnx'))
588
+
589
+ # --- Dark Star (Star Removal) ---
590
+ CC_DARKSTAR_MONO_PTH = property(lambda self: model_path('darkstar_v2.1.pth'))
591
+ CC_DARKSTAR_MONO_ONNX = property(lambda self: model_path('darkstar_v2.1.onnx'))
592
+ CC_DARKSTAR_COLOR_PTH = property(lambda self: model_path('darkstar_v2.1c.pth'))
593
+ CC_DARKSTAR_COLOR_ONNX = property(lambda self: model_path('darkstar_v2.1c.onnx'))
594
+
595
+ # --- Cosmic Clarity Satellite Removal ---
596
+ CC_SAT_DETECT1_PTH = property(lambda self: model_path('satellite_trail_detector_AI3.5.pth'))
597
+ CC_SAT_DETECT1_ONNX = property(lambda self: model_path('satellite_trail_detector_AI3.5.onnx'))
598
+ CC_SAT_DETECT2_PTH = property(lambda self: model_path('satellite_trail_detector_mobilenetv2.5.pth'))
599
+ CC_SAT_DETECT2_ONNX = property(lambda self: model_path('satellite_trail_detector_mobilenetv2.5.onnx'))
600
+
601
+ CC_SAT_REMOVE_PTH = property(lambda self: model_path('satelliteremovalAI3.5.pth'))
602
+ CC_SAT_REMOVE_ONNX = property(lambda self: model_path('satelliteremovalAI3.5.onnx'))
603
+
604
+ @lru_cache(maxsize=8)
605
+ def get_models_dir() -> str:
606
+ # Prefer user-installed models
607
+ try:
608
+ from setiastro.saspro.model_manager import models_root
609
+ p = Path(models_root())
610
+ if p.is_dir():
611
+ if any(p.rglob("*.pth")) or any(p.rglob("*.onnx")):
612
+ return str(p)
613
+ except Exception:
614
+ pass
615
+
616
+ # Fallback to packaged (dev/frozen) path
617
+ return _resource_path('data/models')
618
+
619
+ def model_path(filename: str) -> str:
620
+ base = Path(get_models_dir())
621
+ path = base / filename
622
+ return str(path)
560
623
 
561
624
  # Export all legacy paths as module-level variables
562
625
  _legacy = _init_legacy_paths()
@@ -172,6 +172,24 @@ def _purge_bad_torch_from_sysmodules(status_cb=print) -> None:
172
172
  except Exception:
173
173
  pass
174
174
 
175
+ def _torch_stack_sanity_check(status_cb=print) -> None:
176
+ """
177
+ Ensure torch imports sanely AND torchvision/torchaudio are importable.
178
+ (Satellite engine requires torchvision; we install torchaudio too for safety.)
179
+ """
180
+ _torch_sanity_check(status_cb=status_cb)
181
+
182
+ try:
183
+ import torchvision # noqa
184
+ except Exception as e:
185
+ raise RuntimeError(f"torchvision import failed: {e}") from e
186
+
187
+ try:
188
+ import torchaudio # noqa
189
+ except Exception as e:
190
+ raise RuntimeError(f"torchaudio import failed: {e}") from e
191
+
192
+
175
193
  def _torch_sanity_check(status_cb=print):
176
194
  try:
177
195
  import torch
@@ -459,7 +477,8 @@ except Exception as e:
459
477
  return bool(data.get("has_xpu")), data.get("err")
460
478
 
461
479
 
462
- def _install_torch(venv_python: Path, prefer_cuda: bool, prefer_xpu: bool, status_cb=print):
480
+ def _install_torch(venv_python: Path, prefer_cuda: bool, prefer_xpu: bool, prefer_dml: bool, status_cb=print):
481
+
463
482
  """
464
483
  Install torch into the per-user venv with best-effort backend detection:
465
484
  • macOS arm64 → PyPI (MPS)
@@ -476,14 +495,6 @@ def _install_torch(venv_python: Path, prefer_cuda: bool, prefer_xpu: bool, statu
476
495
  return subprocess.run([str(venv_python), "-m", "pip", *args],
477
496
  stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, env=e)
478
497
 
479
- def _pip_ok(cmd: list[str]) -> bool:
480
- r = _pip(*cmd)
481
- if r.returncode != 0:
482
- # surface tail of pip log for the UI
483
- tail = (r.stdout or "").strip()
484
- status_cb(tail[-4000:])
485
- return r.returncode == 0
486
-
487
498
  def _pyver() -> tuple[int, int]:
488
499
  code = "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"
489
500
  out = subprocess.check_output([str(venv_python), "-c", code], text=True).strip()
@@ -494,6 +505,36 @@ def _install_torch(venv_python: Path, prefer_cuda: bool, prefer_xpu: bool, statu
494
505
  machine = _plat.machine().lower()
495
506
  py_major, py_minor = _pyver()
496
507
 
508
+ def _pip_ok(cmd: list[str]) -> bool:
509
+ r = _pip(*cmd)
510
+ if r.returncode != 0:
511
+ tail = (r.stdout or "").strip()
512
+ status_cb(tail[-4000:])
513
+ return r.returncode == 0
514
+
515
+ # NEW: DirectML FIRST (Windows, non-NVIDIA)
516
+ if sysname == "Windows" and prefer_dml:
517
+ status_cb("Installing PyTorch with DirectML (torch-directml)…")
518
+
519
+ # Clean slate helps resolver if something already got partially installed
520
+ _pip_ok(["uninstall", "-y", "torch", "torchvision", "torchaudio", "torch-directml"])
521
+
522
+ if not _pip_ok(["install", "--prefer-binary", "--no-cache-dir", "torch-directml"]):
523
+ raise RuntimeError("Failed to install torch-directml.")
524
+
525
+ # You still need torchvision/torchaudio for your app; let pip resolve compatible versions.
526
+ _pip_ok(["install", "--prefer-binary", "--no-cache-dir", "torchvision", "torchaudio"])
527
+
528
+ # Verify import + device creation
529
+ code = "import torch, torch_directml; d=torch_directml.device(); x=torch.tensor([1]).to(d); y=torch.tensor([2]).to(d); print(int((x+y).item()))"
530
+ r = subprocess.run([str(venv_python), "-c", code], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
531
+ if r.returncode != 0 or "3" not in (r.stdout or ""):
532
+ status_cb((r.stdout or "")[-2000:])
533
+ raise RuntimeError("torch-directml installed, but DirectML verification failed.")
534
+
535
+ status_cb("Installed DirectML backend successfully.")
536
+ return
537
+
497
538
  if sysname == "Darwin" and ("arm64" in machine or "aarch64" in machine):
498
539
  if py_minor >= 13:
499
540
  raise RuntimeError(
@@ -513,13 +554,16 @@ def _install_torch(venv_python: Path, prefer_cuda: bool, prefer_xpu: bool, statu
513
554
  base = ["install", "--prefer-binary", "--no-cache-dir"]
514
555
  if index_url:
515
556
  base += ["--index-url", index_url]
516
- # latest for that index first
517
- if _pip_ok(base + ["torch"]):
557
+
558
+ # First try "latest trio" from that index
559
+ if _pip_ok(base + ["torch", "torchvision", "torchaudio"]):
518
560
  return True
519
- # walk the ladder
561
+
562
+ # Walk the ladder: pin all three to the same version family
520
563
  for v in versions:
521
- if _pip_ok(base + [f"torch=={v}"]):
564
+ if _pip_ok(base + [f"torch=={v}", f"torchvision=={v}", f"torchaudio=={v}"]):
522
565
  return True
566
+
523
567
  return False
524
568
 
525
569
  # macOS Apple Silicon → MPS wheels on PyPI
@@ -587,7 +631,7 @@ def _install_torch(venv_python: Path, prefer_cuda: bool, prefer_xpu: bool, statu
587
631
  # Public entry points
588
632
  # ──────────────────────────────────────────────────────────────────────────────
589
633
 
590
- def import_torch(prefer_cuda: bool = True, prefer_xpu: bool = False, status_cb=print):
634
+ def import_torch(prefer_cuda: bool = True, prefer_xpu: bool = False, prefer_dml: bool = False, status_cb=print):
591
635
  """
592
636
  Ensure a per-user venv exists with torch installed; return the imported module.
593
637
  Hardened against shadow imports, broken wheels, concurrent installs, and partial markers.
@@ -596,10 +640,12 @@ def import_torch(prefer_cuda: bool = True, prefer_xpu: bool = False, status_cb=p
596
640
  _ban_shadow_torch_paths(status_cb=status_cb)
597
641
  _purge_bad_torch_from_sysmodules(status_cb=status_cb)
598
642
 
643
+ add_runtime_to_sys_path(status_cb=lambda *_: None)
644
+
599
645
  # Fast path: if torch already importable and sane, use it
600
646
  try:
601
647
  import torch # noqa
602
- _torch_sanity_check(status_cb=status_cb)
648
+ _torch_stack_sanity_check(status_cb=status_cb)
603
649
  return torch
604
650
  except Exception:
605
651
  pass
@@ -621,7 +667,7 @@ def import_torch(prefer_cuda: bool = True, prefer_xpu: bool = False, status_cb=p
621
667
  with _install_lock(rt):
622
668
  # Re-check inside lock in case another process finished
623
669
  if not marker.exists():
624
- _install_torch(vp, prefer_cuda=prefer_cuda, prefer_xpu=prefer_xpu, status_cb=status_cb)
670
+ _install_torch(vp, prefer_cuda=prefer_cuda, prefer_xpu=prefer_xpu, prefer_dml=prefer_dml, status_cb=status_cb)
625
671
  except Exception as e:
626
672
  if _is_access_denied(e):
627
673
  raise OSError(_access_denied_msg(rt)) from e
@@ -638,13 +684,28 @@ def import_torch(prefer_cuda: bool = True, prefer_xpu: bool = False, status_cb=p
638
684
  status_cb("Detected broken/shadowed Torch import → attempting clean repair…")
639
685
  except Exception:
640
686
  pass
641
- subprocess.run([str(vp), "-m", "pip", "uninstall", "-y", "torch"], check=False)
687
+
688
+ # remove marker so future launches don't skip install
689
+ try:
690
+ marker.unlink()
691
+ except Exception:
692
+ pass
693
+
694
+ subprocess.run([str(vp), "-m", "pip", "uninstall", "-y",
695
+ "torch", "torchvision", "torchaudio"], check=False)
642
696
  subprocess.run([str(vp), "-m", "pip", "cache", "purge"], check=False)
643
697
  with _install_lock(rt):
644
- _install_torch(vp, prefer_cuda=prefer_cuda, prefer_xpu=prefer_xpu, status_cb=status_cb)
698
+ _install_torch(
699
+ vp,
700
+ prefer_cuda=prefer_cuda,
701
+ prefer_xpu=prefer_xpu,
702
+ prefer_dml=prefer_dml,
703
+ status_cb=status_cb,
704
+ )
645
705
  importlib.invalidate_caches()
646
706
  _demote_shadow_torch_paths(status_cb=status_cb)
647
707
 
708
+
648
709
  try:
649
710
  _ensure_numpy(vp, status_cb=status_cb)
650
711
  except Exception:
@@ -652,21 +713,45 @@ def import_torch(prefer_cuda: bool = True, prefer_xpu: bool = False, status_cb=p
652
713
 
653
714
  try:
654
715
  import torch # noqa
655
- _torch_sanity_check(status_cb=status_cb)
716
+ _torch_stack_sanity_check(status_cb=status_cb)
656
717
  # write/update marker only when sane
657
718
  if not marker.exists():
658
719
  pyver = f"{sys.version_info.major}.{sys.version_info.minor}"
659
- marker.write_text(json.dumps({"installed": True, "python": pyver, "when": int(time.time())}), encoding="utf-8")
720
+ try:
721
+ import torch, torchvision, torchaudio
722
+ marker.write_text(json.dumps({
723
+ "installed": True,
724
+ "python": pyver,
725
+ "when": int(time.time()),
726
+ "torch": getattr(torch, "__version__", None),
727
+ "torchvision": getattr(torchvision, "__version__", None),
728
+ "torchaudio": getattr(torchaudio, "__version__", None),
729
+ }), encoding="utf-8")
730
+ except Exception:
731
+ marker.write_text(json.dumps({"installed": True, "python": pyver, "when": int(time.time())}), encoding="utf-8")
732
+
660
733
  return torch
661
734
  except Exception:
662
735
  _force_repair()
663
736
  _purge_bad_torch_from_sysmodules(status_cb=status_cb)
664
737
  _ban_shadow_torch_paths(status_cb=status_cb)
665
738
  import torch # retry
666
- _torch_sanity_check(status_cb=status_cb)
739
+ _torch_stack_sanity_check(status_cb=status_cb)
667
740
  if not marker.exists():
668
741
  pyver = f"{sys.version_info.major}.{sys.version_info.minor}"
669
- marker.write_text(json.dumps({"installed": True, "python": pyver, "when": int(time.time())}), encoding="utf-8")
742
+ try:
743
+ import torch, torchvision, torchaudio
744
+ marker.write_text(json.dumps({
745
+ "installed": True,
746
+ "python": pyver,
747
+ "when": int(time.time()),
748
+ "torch": getattr(torch, "__version__", None),
749
+ "torchvision": getattr(torchvision, "__version__", None),
750
+ "torchaudio": getattr(torchaudio, "__version__", None),
751
+ }), encoding="utf-8")
752
+ except Exception:
753
+ marker.write_text(json.dumps({"installed": True, "python": pyver, "when": int(time.time())}), encoding="utf-8")
754
+
670
755
  return torch
671
756
 
672
757
  def _find_system_python_cmd() -> list[str]:
@@ -11,7 +11,7 @@ from PyQt6.QtWidgets import (
11
11
  QDialog, QVBoxLayout, QHBoxLayout, QGridLayout, QGroupBox, QLabel, QPushButton,
12
12
  QSlider, QCheckBox, QColorDialog, QComboBox, QFileDialog, QInputDialog, QMenu,
13
13
  QMessageBox, QWidget, QGraphicsView, QGraphicsScene, QGraphicsItem,QFontComboBox, QGraphicsTextItem,
14
- QGraphicsPixmapItem, QGraphicsEllipseItem, QGraphicsRectItem, QSpinBox
14
+ QGraphicsPixmapItem, QGraphicsEllipseItem, QGraphicsRectItem, QSpinBox, QScrollArea
15
15
  )
16
16
  from setiastro.saspro.widgets.themed_buttons import themed_toolbtn
17
17
 
@@ -844,8 +844,19 @@ class SignatureInsertDialogPro(QDialog):
844
844
  row_commit.addStretch(1)
845
845
  col.addLayout(row_commit)
846
846
 
847
- left = QWidget(); left.setLayout(col)
848
- root.addWidget(left, 0)
847
+ left = QWidget()
848
+ left.setLayout(col)
849
+
850
+ scroll = QScrollArea(self)
851
+ scroll.setWidgetResizable(True)
852
+ scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
853
+ scroll.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded)
854
+ scroll.setWidget(left)
855
+
856
+ # Optional: make it feel less “webby”
857
+ scroll.setFrameShape(QScrollArea.Shape.NoFrame)
858
+
859
+ root.addWidget(scroll, 0) # instead of root.addWidget(left, 0)
849
860
  root.addWidget(self.view, 1)
850
861
 
851
862
  def _tech_active_doc(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: setiastrosuitepro
3
- Version: 1.7.5.post1
3
+ Version: 1.8.0.post3
4
4
  Summary: Seti Astro Suite Pro - Advanced astrophotography toolkit for image calibration, stacking, registration, photometry, and visualization
5
5
  License: GPL-3.0
6
6
  License-File: LICENSE
@@ -43,6 +43,7 @@ Requires-Dist: pandas
43
43
  Requires-Dist: photutils
44
44
  Requires-Dist: plotly
45
45
  Requires-Dist: psutil
46
+ Requires-Dist: py-cpuinfo
46
47
  Requires-Dist: pyqtgraph
47
48
  Requires-Dist: pytz
48
49
  Requires-Dist: pywavelets
@@ -183,13 +183,13 @@ setiastro/qml/ResourceMonitor.qml,sha256=k9_qXKAZLi8vj-5BffJTJu_UkRnxunZKn53Hthd
183
183
  setiastro/saspro/__init__.py,sha256=6o8orhytzBWyJWBdG37xPcT6IVPZOG8d22FBVzn0Kac,902
184
184
  setiastro/saspro/__main__.py,sha256=_zAHsw4SNWYzMXlswBuiMGgTUGYrU5p5-dsxhQ3_GWk,40789
185
185
  setiastro/saspro/_generated/__init__.py,sha256=HbruQfKNbbVL4kh_t4oVG3UeUieaW8MUaqIcDCmnTvA,197
186
- setiastro/saspro/_generated/build_info.py,sha256=05WXuNKXhrTskHfLfuo-I6cQRkffHcmX6SOeqDMBgSU,117
186
+ setiastro/saspro/_generated/build_info.py,sha256=Ea9A6Yep3gVopO0qLFUmZn_oycwXYxuHkWFtp77YMsA,117
187
187
  setiastro/saspro/abe.py,sha256=l6o0klT-TqJppzEjCBb9isyIvtuf_UsuMZV8JvqbgPI,59779
188
188
  setiastro/saspro/abe_preset.py,sha256=u9t16yTb9v98tLjhvh496Fsp3Z-dNiBSs5itnAaJwh8,7750
189
189
  setiastro/saspro/aberration_ai.py,sha256=8LtDu_KuqvL-W0MTUIJq9KguMjJPiUEQjMUibY16H-4,41673
190
190
  setiastro/saspro/aberration_ai_preset.py,sha256=nxtjo0qQYEML_8AzemMXtLNSdWf2FhMzPO9xELjlZ0U,9747
191
- setiastro/saspro/accel_installer.py,sha256=OSt66m7hrENHTx92Ib4xDyD3xy6X_TU4XeMbizBqRq4,9483
192
- setiastro/saspro/accel_workers.py,sha256=efFvyg6v0AkMF4liVcVqooHWEHhk-c2J9rRx6XAJGv4,1141
191
+ setiastro/saspro/accel_installer.py,sha256=ehJqYFGMxToOPxmEaVj2SWCIYzMJJP75Kf1wvONiFzI,9905
192
+ setiastro/saspro/accel_workers.py,sha256=rEHAft2xCMlxJ8-MISjMBhRMx9VGLoZT25-xNxEmi9U,1098
193
193
  setiastro/saspro/acv_exporter.py,sha256=em1SJDXStP_Exv7hQZCSqBBcXc-7AF0UOA0iLX4-BIM,14911
194
194
  setiastro/saspro/add_stars.py,sha256=7rYunF4Khj67zDP2dcCmcNdNx0lYtWCFace9q5gz2_g,25415
195
195
  setiastro/saspro/astrobin_exporter.py,sha256=-MZFoUVVZ3FItTbwoqoLzuOsrR3R5RQ7zf4CGC9GTr8,47455
@@ -206,7 +206,7 @@ setiastro/saspro/bundles_dock.py,sha256=IEAJEOEEe7V4NvsmClMygTf55LXN3SkV4e23K1er
206
206
  setiastro/saspro/cheat_sheet.py,sha256=0bLmwY3GBWGcb4M7BBYzzrB_03XfqvZWAhQ2cBPavQ8,7852
207
207
  setiastro/saspro/clahe.py,sha256=o2cmgYhYS_Z3vo-RR_iw8iZd_7JpelNnub7LvIkFMNA,15259
208
208
  setiastro/saspro/clone_stamp.py,sha256=wPICwRoRXtvKgnmtg-06y_kfoF8-n4KD0ZdsO4nO1Nc,28455
209
- setiastro/saspro/comet_stacking.py,sha256=68aBVCmthgGQcYMZkZ850DAIBlHaMUOFX6bhUenY6Uk,59485
209
+ setiastro/saspro/comet_stacking.py,sha256=NFOj5SvzuZ4hr3MABAuM7TCahpN78S0VqaiKdq0NzEo,59129
210
210
  setiastro/saspro/common_tr.py,sha256=cYFLFP2d8cwXk_phdYbAdVovEOK-7niBCdrUrXCKn-Q,3581
211
211
  setiastro/saspro/config.py,sha256=FhvWG-efVdzuEPef-eOezem-YaFgnGNCl86XmkruGYE,1319
212
212
  setiastro/saspro/config_bootstrap.py,sha256=5em6r29-PA0nnX7M20NGAteQZ_8ecilGsbPRYF_4yIo,1236
@@ -215,7 +215,13 @@ setiastro/saspro/continuum_subtract.py,sha256=o4pptQdRra4oMlSaEmY_qlFdJmtCyzcW2p
215
215
  setiastro/saspro/convo.py,sha256=pAczsoS7g596mk1eI4XmVvd1EAoTZVdj12qRzFIISjg,67708
216
216
  setiastro/saspro/convo_preset.py,sha256=31Fzk6ssA3lHuM5vehYOpFNVdIyRNNpL78Ts69ivWKk,20013
217
217
  setiastro/saspro/copyastro.py,sha256=ImDMrus4_LqdEXozMQMiM6SjpF0Yd3D-TzMJ2ggFrNc,7322
218
- setiastro/saspro/cosmicclarity.py,sha256=S8RsI_beDadvgImkB7fXS83FQbL6svsmZPDfEu3-M4c,72594
218
+ setiastro/saspro/cosmicclarity.py,sha256=f-puwADkEdONV0-7KyC9wg43i3lbEXR3ZVHRxBkBYEE,60814
219
+ setiastro/saspro/cosmicclarity_engines/benchmark_engine.py,sha256=NgGefkc6tGO_6eOgG6yDZyrgj4el8fYyNKulu4UAS_U,27161
220
+ setiastro/saspro/cosmicclarity_engines/darkstar_engine.py,sha256=ZstBHr8sA1p2WHg3kZyacjCi0m-agPHzIDIG8gGqT_U,21221
221
+ setiastro/saspro/cosmicclarity_engines/denoise_engine.py,sha256=KAYyhFbFd4iiwiR5lTvmi6xc9j6YTQnwJe-xD-r9n7s,22081
222
+ setiastro/saspro/cosmicclarity_engines/satellite_engine.py,sha256=900oiGhlgtjXMXjLpM9RUVPTLZI7Ov7IJvSzVh1mcOU,22787
223
+ setiastro/saspro/cosmicclarity_engines/sharpen_engine.py,sha256=Skxrj_WV3SDUps_Qmw-qa_QDr2xqP-NQk6zsquZFIuA,21423
224
+ setiastro/saspro/cosmicclarity_engines/superres_engine.py,sha256=_grEK68rTeWJ1lrcLexcczqpcPOnsy9ZlGMNC4LqQtA,16499
219
225
  setiastro/saspro/cosmicclarity_preset.py,sha256=1nUTzC3nFe79pyWTBvNyvUL-MfTWC4SbOUvgJHA80v8,17853
220
226
  setiastro/saspro/crop_dialog_pro.py,sha256=Cv0A_XGIZPYdZknygL9_JcY0thEYklQVPMMxcHLavtA,45645
221
227
  setiastro/saspro/crop_preset.py,sha256=ubN3BZUt5okwe4qOYScJCQv0YV8PewVciCLUDo4pGOk,7033
@@ -238,14 +244,14 @@ setiastro/saspro/ghs_preset.py,sha256=Zw3MJH5rEz7nqLdlmRBm3vYXgyopoupyDGAhM-PRXq
238
244
  setiastro/saspro/graxpert.py,sha256=XSLeBhlAY2DkYUw93j2OEOuPLOPfzWYcT5Dz3JhhpW8,22579
239
245
  setiastro/saspro/graxpert_preset.py,sha256=ESds2NPMPfsBHWNBfyYZ1rFpQxZ9gPOtxwz8enHfFfc,10719
240
246
  setiastro/saspro/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
- setiastro/saspro/gui/main_window.py,sha256=ImF8JUE8PAjj1IHBgpyWq4pVFdbQ2G2WompGpUMfR5E,375703
247
+ setiastro/saspro/gui/main_window.py,sha256=cZ7CI8wpZ2KnSF5YTM3IW6IcY-y2b8e7DXirRzl65Tc,376128
242
248
  setiastro/saspro/gui/mixins/__init__.py,sha256=ubdTIri0xoRs6MwDnEaVsAHbMxuPqz0CZcYcue3Mkcc,836
243
249
  setiastro/saspro/gui/mixins/dock_mixin.py,sha256=C6IWKM-uP2ekqO7ozVQQcTnEgAkUL_OaRZbncIdrh8g,23893
244
250
  setiastro/saspro/gui/mixins/file_mixin.py,sha256=p6gKJrDTKovK4YzowDQy1Z5nNsspQe7B9ICRXvCUvxc,17893
245
251
  setiastro/saspro/gui/mixins/geometry_mixin.py,sha256=x-HyLXGFhEs8SJuXT8EF6tS3XJaH8IhAP-ZFJ2BS2Lw,19038
246
252
  setiastro/saspro/gui/mixins/header_mixin.py,sha256=kfZUJviB61c8NBXFB3MVBEcRPX_36ZV8tUZNJkDmMJ0,17253
247
253
  setiastro/saspro/gui/mixins/mask_mixin.py,sha256=hrC5jLWxUZgQiYUXp7nvECo2uiarK7_HKgawG4HGB9w,15711
248
- setiastro/saspro/gui/mixins/menu_mixin.py,sha256=syal2SUpmR2LkjYaKZqSELmUoGQ27fsqxXwacKl8Zso,16797
254
+ setiastro/saspro/gui/mixins/menu_mixin.py,sha256=bIEhPiplLdEH9N5U1vqDbAvcikr302uhiFuDbLKCWzA,16909
249
255
  setiastro/saspro/gui/mixins/theme_mixin.py,sha256=td6hYnZn17lXlFxQOXgK7-qfKo6CIJACF8_zrULlEkc,20740
250
256
  setiastro/saspro/gui/mixins/toolbar_mixin.py,sha256=LF-obbMkRtz69_NmBsyDPvcOBZlLKN94O15Kw1I0V80,92814
251
257
  setiastro/saspro/gui/mixins/update_mixin.py,sha256=rq7J0Pcn_gO8UehCGVtcSvf-MDbmeGf796h0JBGr0sM,16545
@@ -290,6 +296,8 @@ setiastro/saspro/mfdeconv_earlystop.py,sha256=JCY9RV6jMtwcOxUnb9HzJHem5ygYXXiRr2
290
296
  setiastro/saspro/mfdeconvcudnn.py,sha256=Y8ThkwOs-CZdF_53N6Wu2naDQ1VIa055oGtlgo129Qk,129008
291
297
  setiastro/saspro/mfdeconvsport.py,sha256=UcDV3FP5wDIhFsOnDlLVywtk_RDrpKVOjWbJNOL-Cdk,95323
292
298
  setiastro/saspro/minorbodycatalog.py,sha256=PaOwy1T_ApEfPyGZFUD4qB1n7jyK6kuw1FjBhP2HCTw,19662
299
+ setiastro/saspro/model_manager.py,sha256=s9tOUNeinsAaGiADEspkwENsrPhQ6u2K0mjhTPkXMeE,10248
300
+ setiastro/saspro/model_workers.py,sha256=G8xKC9L5pdc_L75_4S9us0fRVjeAAZbmQqXorFwtcSs,4001
293
301
  setiastro/saspro/morphology.py,sha256=WdxA3yLdMCLsAQoRY6qmP3LB5jjZNzliFBhuNkGN_o8,16695
294
302
  setiastro/saspro/multiscale_decomp.py,sha256=GQ6iTFcTDxj0WvnO0bQjTz8G4Wli9Dl9bQNeEcBpxBw,66724
295
303
  setiastro/saspro/narrowband_normalization.py,sha256=mVzf8JJVZREbsai63GspR41iH3WnwGrYu0pywczfIi0,64036
@@ -297,12 +305,13 @@ setiastro/saspro/nbtorgb_stars.py,sha256=uteG7X0g2nC9bIJwb_1TfdQP1xUY_jCI_hbiAyg
297
305
  setiastro/saspro/numba_utils.py,sha256=0umQ5y5wPNXLLA_wzrFdHKNe9G2XIfpTVlUKJqJb2Ng,142240
298
306
  setiastro/saspro/numba_warmup.py,sha256=6ZbZ2Ss4VrioLnMUcyRQyY2KR1fmRBqzyoUwxuvIyh4,5268
299
307
  setiastro/saspro/ops/__init__.py,sha256=-GivNKsFxX46qeVUWnFVmzcCpQffT9RuWHmyUjfqvDQ,268
308
+ setiastro/saspro/ops/benchmark.py,sha256=Sszgs-e7GPNZW9LBvR_0XWfqUpjj3p5oKXeQwgBSWNg,10658
300
309
  setiastro/saspro/ops/command_help_dialog.py,sha256=p4E9r0aMplQTTq7tZLScksAIPxmMWUmmnTQ0O_CY9aE,23061
301
310
  setiastro/saspro/ops/command_runner.py,sha256=teyrnOVJcd2IVxIPhh-ud4Q8MrBMxzSNR3QQe_2K-hk,7512
302
311
  setiastro/saspro/ops/commands.py,sha256=RoB99R3wN9j-K25QoJf5ir-CU35lL_d2veLFmfIXRMQ,54246
303
312
  setiastro/saspro/ops/script_editor.py,sha256=ygWNzPJ3LxsQyTMgfvAHC9MuGnE8IXsRNKu19mLPYKY,40986
304
313
  setiastro/saspro/ops/scripts.py,sha256=5BOnirSUia0NDg-keBy0HgfrElqcRIUNV-89FfYks8o,55817
305
- setiastro/saspro/ops/settings.py,sha256=PchWiMEIZcKiZWo-aaE4FcFyHEoftieDOL1yRmVMPQg,29799
314
+ setiastro/saspro/ops/settings.py,sha256=5fsKFoOy-x9gC8LMN7Pa5SAsg9RLSRp1RzUQzEyKCmU,46829
306
315
  setiastro/saspro/parallel_utils.py,sha256=GoPhypMsp3k8dffv4129CjLU-xDqpu9wnhHI463RR6U,15931
307
316
  setiastro/saspro/pedestal.py,sha256=WkwNaY0Qp1XP6KFtb6tnnKMhg71R5WEhVOdwWwJFmJ8,4014
308
317
  setiastro/saspro/perfect_palette_picker.py,sha256=wJSTQQZgFm-baEBRopfF4Aw6vtvTmfL4_FZcd1q31vs,46937
@@ -315,14 +324,14 @@ setiastro/saspro/psf_utils.py,sha256=K3R4BjUzsopLRuLTbPlm8lBw3-x9twNWG4bK-4phDM4
315
324
  setiastro/saspro/psf_viewer.py,sha256=gaQhzLIhk0i5aRXREzWeieaD5VY22wOJx-ehbfaETuc,22952
316
325
  setiastro/saspro/pyi_rthook_astroquery.py,sha256=Omt8U0gMI3efw3y-GUUJtBYUylwT1OMn0285QW3kRzE,3993
317
326
  setiastro/saspro/remove_green.py,sha256=bd_4xLe-tEYPncOSVUHh-fVIrPWG6K0ESKgAygrwj_M,12082
318
- setiastro/saspro/remove_stars.py,sha256=tv61y58xdm5g5Gu5T3I7jUqSmVVguJ9BWOKBy_X8ub8,60967
327
+ setiastro/saspro/remove_stars.py,sha256=PxOBJLsztODBRjbqM1HqQzIT9z7YovsEOfIo8netboU,58424
319
328
  setiastro/saspro/remove_stars_preset.py,sha256=HcR50bRXqiJSx4jMyle389g8b6SIulXHxgSysk07vdk,19195
320
- setiastro/saspro/resources.py,sha256=6C5XA5MvoKfGOY84xcO1QhI2fUSk9OqnHHEkTuugbWI,27698
329
+ setiastro/saspro/resources.py,sha256=4WGJwgBax3VUcs0bkCmN7RkGOnX1m37j37C9NIbMIz4,31164
321
330
  setiastro/saspro/rgb_combination.py,sha256=8MKlxsbn5Pmiq3Vh28fMVYgYG4EIsvOYrwSJisJGyds,8765
322
331
  setiastro/saspro/rgb_extract.py,sha256=FZRA2qac8LR2u-jNcQP-1xFeiOYVBo06-Q3Xl0KAlZM,624
323
332
  setiastro/saspro/rgbalign.py,sha256=XwBDj5t_zj9Uh-PaX1SNlzix9PftnQBIoTMtRPvYK80,46528
324
333
  setiastro/saspro/runtime_imports.py,sha256=tgIHH10cdAEbCTOmcs7retQhAww2dEc_3mKrv_m8W9s,206
325
- setiastro/saspro/runtime_torch.py,sha256=IEVqD8jgn6la8t3R9ngZ2egSGMAC_tr1im3R8BnvXTQ,33497
334
+ setiastro/saspro/runtime_torch.py,sha256=MihPpfIoTioPOMWzp525tzzPmzPbRNPuADBFnOVMYDs,37041
326
335
  setiastro/saspro/save_options.py,sha256=wUvuZBCDcQFDXF846njBd_4xoSRa2Ih1-I8Hf5ZTLbk,3648
327
336
  setiastro/saspro/selective_color.py,sha256=hx-9X4jeso797ifoBmwp9hNagPW4cvNPs9-T0JLHce0,64804
328
337
  setiastro/saspro/ser_stack_config.py,sha256=OMQHnRysXMW2l05PGLlwu1JxEBAcdUpBOEnFvn9jXP0,4921
@@ -332,7 +341,7 @@ setiastro/saspro/ser_tracking.py,sha256=HU5F2ZAekjBsKu-nYQVqbx3FukUqGYTkTK6J9n0t
332
341
  setiastro/saspro/serviewer.py,sha256=QvPtJky2IzrywXaOYjeSZSNY0I64TSrzfgH7vRgGk7M,68763
333
342
  setiastro/saspro/sfcc.py,sha256=4wgXqH-E0OoSl_Ox4tMoExUHSnjosx2EnjjKeOXyZgo,89133
334
343
  setiastro/saspro/shortcuts.py,sha256=QvFBXN_S8jqEwaP9m4pJMLVqzBmxo5HrjWhVCV9etQg,138256
335
- setiastro/saspro/signature_insert.py,sha256=pWDxUO1Rxm27_fHSo2Y99bdOD2iG9q4AUjGR20x6TiA,70401
344
+ setiastro/saspro/signature_insert.py,sha256=2bIAayZfprVtutq4iQDf6xhPSpW52lJTRP5IEHrHZY0,70851
336
345
  setiastro/saspro/stacking_suite.py,sha256=z3aTP10RfXjxilbzLAFBtJ37aPL3ZAKDOrxdVIASmdk,895924
337
346
  setiastro/saspro/star_alignment.py,sha256=lRpDFvDKsMluu2P_kotQ9OumlnGtEWwGE7Gm-ZYccm8,326894
338
347
  setiastro/saspro/star_alignment_preset.py,sha256=1QLRRUsVGr3-iX4kKvV9s-NuDRJVnRQat8qdTIs1nao,13164
@@ -409,9 +418,9 @@ setiastro/saspro/wimi.py,sha256=CNo833Pur9P-A1DUSntlAaQWekf6gzWIvetOMvLDrOw,3146
409
418
  setiastro/saspro/wims.py,sha256=HDfVI3Ckf5OJEJLH8NI36pFc2USZnETpb4UDIvweNX4,27450
410
419
  setiastro/saspro/window_shelf.py,sha256=hpId8uRPq7-UZ3dWW5YzH_v4TchQokGFoPGM8dyaIZA,9448
411
420
  setiastro/saspro/xisf.py,sha256=Ah1CXDAohN__ej1Lq7LPU8vGLnDz8fluLQTGE71aUoc,52669
412
- setiastrosuitepro-1.7.5.post1.dist-info/entry_points.txt,sha256=g7cHWhUSiIP7mkyByG9JXGWWlHKeVC2vL7zvB9U-vEU,236
413
- setiastrosuitepro-1.7.5.post1.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
414
- setiastrosuitepro-1.7.5.post1.dist-info/licenses/license.txt,sha256=KCwYZ9VpVwmzjelDq1BzzWqpBvt9nbbapa-woz47hfQ,123930
415
- setiastrosuitepro-1.7.5.post1.dist-info/METADATA,sha256=-drTlx3V1woZS9yNTvmVFOoJukIVfNd5X_PnRpKlRv8,9925
416
- setiastrosuitepro-1.7.5.post1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
417
- setiastrosuitepro-1.7.5.post1.dist-info/RECORD,,
421
+ setiastrosuitepro-1.8.0.post3.dist-info/entry_points.txt,sha256=g7cHWhUSiIP7mkyByG9JXGWWlHKeVC2vL7zvB9U-vEU,236
422
+ setiastrosuitepro-1.8.0.post3.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
423
+ setiastrosuitepro-1.8.0.post3.dist-info/licenses/license.txt,sha256=KCwYZ9VpVwmzjelDq1BzzWqpBvt9nbbapa-woz47hfQ,123930
424
+ setiastrosuitepro-1.8.0.post3.dist-info/METADATA,sha256=nFMXeZwcWAhjm7tIq5a7CuhyoAVcO9GFkTyFtoPaEbY,9951
425
+ setiastrosuitepro-1.8.0.post3.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
426
+ setiastrosuitepro-1.8.0.post3.dist-info/RECORD,,