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.
- setiastro/saspro/_generated/build_info.py +2 -2
- setiastro/saspro/accel_installer.py +21 -8
- setiastro/saspro/accel_workers.py +11 -12
- setiastro/saspro/comet_stacking.py +113 -85
- setiastro/saspro/cosmicclarity.py +604 -826
- setiastro/saspro/cosmicclarity_engines/benchmark_engine.py +732 -0
- setiastro/saspro/cosmicclarity_engines/darkstar_engine.py +576 -0
- setiastro/saspro/cosmicclarity_engines/denoise_engine.py +567 -0
- setiastro/saspro/cosmicclarity_engines/satellite_engine.py +620 -0
- setiastro/saspro/cosmicclarity_engines/sharpen_engine.py +587 -0
- setiastro/saspro/cosmicclarity_engines/superres_engine.py +412 -0
- setiastro/saspro/gui/main_window.py +14 -0
- setiastro/saspro/gui/mixins/menu_mixin.py +2 -0
- setiastro/saspro/model_manager.py +324 -0
- setiastro/saspro/model_workers.py +102 -0
- setiastro/saspro/ops/benchmark.py +320 -0
- setiastro/saspro/ops/settings.py +407 -10
- setiastro/saspro/remove_stars.py +424 -442
- setiastro/saspro/resources.py +73 -10
- setiastro/saspro/runtime_torch.py +107 -22
- setiastro/saspro/signature_insert.py +14 -3
- {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/METADATA +2 -1
- {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/RECORD +27 -18
- {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/WHEEL +0 -0
- {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/entry_points.txt +0 -0
- {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/licenses/LICENSE +0 -0
- {setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/licenses/license.txt +0 -0
setiastro/saspro/resources.py
CHANGED
|
@@ -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
|
-
|
|
517
|
-
|
|
557
|
+
|
|
558
|
+
# First try "latest trio" from that index
|
|
559
|
+
if _pip_ok(base + ["torch", "torchvision", "torchaudio"]):
|
|
518
560
|
return True
|
|
519
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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()
|
|
848
|
-
|
|
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):
|
{setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: setiastrosuitepro
|
|
3
|
-
Version: 1.
|
|
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=
|
|
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=
|
|
192
|
-
setiastro/saspro/accel_workers.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
413
|
-
setiastrosuitepro-1.
|
|
414
|
-
setiastrosuitepro-1.
|
|
415
|
-
setiastrosuitepro-1.
|
|
416
|
-
setiastrosuitepro-1.
|
|
417
|
-
setiastrosuitepro-1.
|
|
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,,
|
|
File without changes
|
{setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{setiastrosuitepro-1.7.5.post1.dist-info → setiastrosuitepro-1.8.0.post3.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|