setiastrosuitepro 1.6.9__tar.gz → 1.6.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of setiastrosuitepro might be problematic. Click here for more details.

Files changed (400) hide show
  1. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/PKG-INFO +1 -1
  2. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/pyproject.toml +1 -1
  3. setiastrosuitepro-1.6.10/src/setiastro/images/abeicon.svg +16 -0
  4. setiastrosuitepro-1.6.10/src/setiastro/images/cosmic.svg +40 -0
  5. setiastrosuitepro-1.6.10/src/setiastro/images/cosmicsat.svg +24 -0
  6. setiastrosuitepro-1.6.10/src/setiastro/images/graxpert.svg +19 -0
  7. setiastrosuitepro-1.6.10/src/setiastro/images/linearfit.svg +32 -0
  8. setiastrosuitepro-1.6.10/src/setiastro/images/pixelmath.svg +42 -0
  9. setiastrosuitepro-1.6.10/src/setiastro/saspro/_generated/build_info.py +3 -0
  10. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/add_stars.py +29 -5
  11. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/cosmicclarity.py +125 -18
  12. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/main_window.py +19 -12
  13. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/theme_mixin.py +160 -14
  14. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/imageops/stretch.py +0 -2
  15. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/layers.py +13 -9
  16. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/layers_dock.py +183 -3
  17. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/stacking_suite.py +523 -316
  18. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/stat_stretch.py +348 -116
  19. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/subwindow.py +146 -21
  20. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/resource_monitor.py +7 -7
  21. setiastrosuitepro-1.6.9/src/setiastro/saspro/_generated/build_info.py +0 -3
  22. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/LICENSE +0 -0
  23. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/README.md +0 -0
  24. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/license.txt +0 -0
  25. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/__init__.py +0 -0
  26. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/SASP_data.fits +0 -0
  27. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/List_of_Galaxies_with_Distances_Gly.csv +0 -0
  28. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/astrobin_filters.csv +0 -0
  29. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/astrobin_filters_page1_local.csv +0 -0
  30. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/cali2.csv +0 -0
  31. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/cali2color.csv +0 -0
  32. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/celestial_catalog - original.csv +0 -0
  33. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/celestial_catalog.csv +0 -0
  34. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/detected_stars.csv +0 -0
  35. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/fits_header_data.csv +0 -0
  36. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/test.csv +0 -0
  37. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/data/catalogs/updated_celestial_catalog.csv +0 -0
  38. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/Astro_Spikes.png +0 -0
  39. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/Background_startup.jpg +0 -0
  40. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/HRDiagram.png +0 -0
  41. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/LExtract.png +0 -0
  42. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/LInsert.png +0 -0
  43. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/Oxygenation-atm-2.svg.png +0 -0
  44. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/RGB080604.png +0 -0
  45. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/abeicon.png +0 -0
  46. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/aberration.png +0 -0
  47. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/acv_icon.png +0 -0
  48. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/andromedatry.png +0 -0
  49. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/andromedatry_satellited.png +0 -0
  50. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/annotated.png +0 -0
  51. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/aperture.png +0 -0
  52. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/astrosuite.ico +0 -0
  53. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/astrosuite.png +0 -0
  54. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/astrosuitepro.icns +0 -0
  55. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/astrosuitepro.ico +0 -0
  56. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/astrosuitepro.png +0 -0
  57. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/background.png +0 -0
  58. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/background2.png +0 -0
  59. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/benchmark.png +0 -0
  60. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/big_moon_stabilizer_timeline.png +0 -0
  61. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/big_moon_stabilizer_timeline_clean.png +0 -0
  62. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/blaster.png +0 -0
  63. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/blink.png +0 -0
  64. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/clahe.png +0 -0
  65. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/collage.png +0 -0
  66. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/colorwheel.png +0 -0
  67. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/contsub.png +0 -0
  68. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/convo.png +0 -0
  69. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/copyslot.png +0 -0
  70. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/cosmic.png +0 -0
  71. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/cosmicsat.png +0 -0
  72. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/crop1.png +0 -0
  73. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/cropicon.png +0 -0
  74. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/curves.png +0 -0
  75. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/cvs.png +0 -0
  76. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/debayer.png +0 -0
  77. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/denoise_cnn_custom.png +0 -0
  78. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/denoise_cnn_graph.png +0 -0
  79. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/disk.png +0 -0
  80. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/dse.png +0 -0
  81. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/exoicon.png +0 -0
  82. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/eye.png +0 -0
  83. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/first_quarter.png +0 -0
  84. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/fliphorizontal.png +0 -0
  85. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/flipvertical.png +0 -0
  86. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/font.png +0 -0
  87. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/freqsep.png +0 -0
  88. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/full_moon.png +0 -0
  89. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/functionbundle.png +0 -0
  90. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/graxpert.png +0 -0
  91. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/green.png +0 -0
  92. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/gridicon.png +0 -0
  93. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/halo.png +0 -0
  94. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/hdr.png +0 -0
  95. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/histogram.png +0 -0
  96. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/hubble.png +0 -0
  97. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/imagecombine.png +0 -0
  98. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/invert.png +0 -0
  99. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/isophote.png +0 -0
  100. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/isophote_demo_figure.png +0 -0
  101. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/isophote_demo_image.png +0 -0
  102. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/isophote_demo_model.png +0 -0
  103. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/isophote_demo_residual.png +0 -0
  104. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/jwstpupil.png +0 -0
  105. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/last_quarter.png +0 -0
  106. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/linearfit.png +0 -0
  107. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/livestacking.png +0 -0
  108. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/mask.png +0 -0
  109. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/maskapply.png +0 -0
  110. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/maskcreate.png +0 -0
  111. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/maskremove.png +0 -0
  112. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/morpho.png +0 -0
  113. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/mosaic.png +0 -0
  114. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/multiscale_decomp.png +0 -0
  115. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/nbtorgb.png +0 -0
  116. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/neutral.png +0 -0
  117. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/new_moon.png +0 -0
  118. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/nuke.png +0 -0
  119. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/openfile.png +0 -0
  120. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/pedestal.png +0 -0
  121. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/pen.png +0 -0
  122. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/pixelmath.png +0 -0
  123. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/platesolve.png +0 -0
  124. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/ppp.png +0 -0
  125. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/pro.png +0 -0
  126. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/project.png +0 -0
  127. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/psf.png +0 -0
  128. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/redo.png +0 -0
  129. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/redoicon.png +0 -0
  130. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rescale.png +0 -0
  131. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rgbalign.png +0 -0
  132. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rgbcombo.png +0 -0
  133. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rgbextract.png +0 -0
  134. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rotate180.png +0 -0
  135. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rotatearbitrary.png +0 -0
  136. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rotateclockwise.png +0 -0
  137. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/rotatecounterclockwise.png +0 -0
  138. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/satellite.png +0 -0
  139. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/script.png +0 -0
  140. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/selectivecolor.png +0 -0
  141. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/simbad.png +0 -0
  142. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot0.png +0 -0
  143. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot1.png +0 -0
  144. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot2.png +0 -0
  145. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot3.png +0 -0
  146. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot4.png +0 -0
  147. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot5.png +0 -0
  148. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot6.png +0 -0
  149. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot7.png +0 -0
  150. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot8.png +0 -0
  151. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/slot9.png +0 -0
  152. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/spcc.png +0 -0
  153. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/spin_precession_vs_lunar_distance.png +0 -0
  154. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/spinner.gif +0 -0
  155. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/stacking.png +0 -0
  156. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/staradd.png +0 -0
  157. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/staralign.png +0 -0
  158. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/starnet.png +0 -0
  159. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/starregistration.png +0 -0
  160. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/starspike.png +0 -0
  161. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/starstretch.png +0 -0
  162. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/statstretch.png +0 -0
  163. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/supernova.png +0 -0
  164. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/uhs.png +0 -0
  165. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/undoicon.png +0 -0
  166. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/upscale.png +0 -0
  167. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/viewbundle.png +0 -0
  168. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_crescent_1.png +0 -0
  169. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_crescent_2.png +0 -0
  170. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_crescent_3.png +0 -0
  171. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_crescent_4.png +0 -0
  172. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_crescent_5.png +0 -0
  173. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_gibbous_1.png +0 -0
  174. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_gibbous_2.png +0 -0
  175. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_gibbous_3.png +0 -0
  176. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_gibbous_4.png +0 -0
  177. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waning_gibbous_5.png +0 -0
  178. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_crescent_1.png +0 -0
  179. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_crescent_2.png +0 -0
  180. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_crescent_3.png +0 -0
  181. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_crescent_4.png +0 -0
  182. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_crescent_5.png +0 -0
  183. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_gibbous_1.png +0 -0
  184. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_gibbous_2.png +0 -0
  185. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_gibbous_3.png +0 -0
  186. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_gibbous_4.png +0 -0
  187. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/waxing_gibbous_5.png +0 -0
  188. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/whitebalance.png +0 -0
  189. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/wimi_icon_256x256.png +0 -0
  190. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/wimilogo.png +0 -0
  191. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/wims.png +0 -0
  192. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/wrench_icon.png +0 -0
  193. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/images/xisfliberator.png +0 -0
  194. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/qml/ResourceMonitor.qml +0 -0
  195. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/__init__.py +0 -0
  196. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/__main__.py +0 -0
  197. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/_generated/__init__.py +0 -0
  198. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/abe.py +0 -0
  199. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/abe_preset.py +0 -0
  200. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/aberration_ai.py +0 -0
  201. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/aberration_ai_preset.py +0 -0
  202. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/accel_installer.py +0 -0
  203. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/accel_workers.py +0 -0
  204. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/acv_exporter.py +0 -0
  205. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/astrobin_exporter.py +0 -0
  206. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/astrospike.py +0 -0
  207. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/astrospike_python.py +0 -0
  208. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/autostretch.py +0 -0
  209. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/backgroundneutral.py +0 -0
  210. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/batch_convert.py +0 -0
  211. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/batch_renamer.py +0 -0
  212. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/blemish_blaster.py +0 -0
  213. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/blink_comparator_pro.py +0 -0
  214. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/bundles.py +0 -0
  215. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/bundles_dock.py +0 -0
  216. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/cheat_sheet.py +0 -0
  217. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/clahe.py +0 -0
  218. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/comet_stacking.py +0 -0
  219. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/common_tr.py +0 -0
  220. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/config.py +0 -0
  221. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/config_bootstrap.py +0 -0
  222. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/config_manager.py +0 -0
  223. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/continuum_subtract.py +0 -0
  224. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/convo.py +0 -0
  225. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/convo_preset.py +0 -0
  226. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/copyastro.py +0 -0
  227. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/cosmicclarity_preset.py +0 -0
  228. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/crop_dialog_pro.py +0 -0
  229. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/crop_preset.py +0 -0
  230. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/curve_editor_pro.py +0 -0
  231. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/curves_preset.py +0 -0
  232. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/debayer.py +0 -0
  233. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/debug_utils.py +0 -0
  234. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/dnd_mime.py +0 -0
  235. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/doc_manager.py +0 -0
  236. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/exoplanet_detector.py +0 -0
  237. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/file_utils.py +0 -0
  238. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/fitsmodifier.py +0 -0
  239. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/fix_bom.py +0 -0
  240. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/free_torch_memory.py +0 -0
  241. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/frequency_separation.py +0 -0
  242. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/function_bundle.py +0 -0
  243. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/generate_translations.py +0 -0
  244. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ghs_dialog_pro.py +0 -0
  245. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ghs_preset.py +0 -0
  246. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/graxpert.py +0 -0
  247. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/graxpert_preset.py +0 -0
  248. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/__init__.py +0 -0
  249. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/__init__.py +0 -0
  250. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/dock_mixin.py +0 -0
  251. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/file_mixin.py +0 -0
  252. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/geometry_mixin.py +0 -0
  253. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/header_mixin.py +0 -0
  254. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/mask_mixin.py +0 -0
  255. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/menu_mixin.py +0 -0
  256. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/toolbar_mixin.py +0 -0
  257. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/update_mixin.py +0 -0
  258. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/mixins/view_mixin.py +0 -0
  259. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/gui/statistics_dialog.py +0 -0
  260. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/halobgon.py +0 -0
  261. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/header_viewer.py +0 -0
  262. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/headless_utils.py +0 -0
  263. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/histogram.py +0 -0
  264. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/history_explorer.py +0 -0
  265. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/i18n.py +0 -0
  266. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/image_combine.py +0 -0
  267. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/image_peeker_pro.py +0 -0
  268. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/imageops/__init__.py +0 -0
  269. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/imageops/mdi_snap.py +0 -0
  270. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/imageops/scnr.py +0 -0
  271. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/imageops/starbasedwhitebalance.py +0 -0
  272. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/isophote.py +0 -0
  273. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/lazy_imports.py +0 -0
  274. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/legacy/__init__.py +0 -0
  275. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/legacy/image_manager.py +0 -0
  276. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/legacy/numba_utils.py +0 -0
  277. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/legacy/xisf.py +0 -0
  278. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/linear_fit.py +0 -0
  279. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/live_stacking.py +0 -0
  280. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/log_bus.py +0 -0
  281. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/logging_config.py +0 -0
  282. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/luminancerecombine.py +0 -0
  283. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/main_helpers.py +0 -0
  284. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/mask_creation.py +0 -0
  285. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/masks_core.py +0 -0
  286. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/mdi_widgets.py +0 -0
  287. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/memory_utils.py +0 -0
  288. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/metadata_patcher.py +0 -0
  289. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/mfdeconv.py +0 -0
  290. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/mfdeconv_earlystop.py +0 -0
  291. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/mfdeconvcudnn.py +0 -0
  292. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/mfdeconvsport.py +0 -0
  293. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/minorbodycatalog.py +0 -0
  294. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/morphology.py +0 -0
  295. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/multiscale_decomp.py +0 -0
  296. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/nbtorgb_stars.py +0 -0
  297. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/numba_utils.py +0 -0
  298. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/numba_warmup.py +0 -0
  299. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ops/__init__.py +0 -0
  300. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ops/command_help_dialog.py +0 -0
  301. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ops/command_runner.py +0 -0
  302. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ops/commands.py +0 -0
  303. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ops/script_editor.py +0 -0
  304. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ops/scripts.py +0 -0
  305. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/ops/settings.py +0 -0
  306. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/parallel_utils.py +0 -0
  307. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/pedestal.py +0 -0
  308. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/perfect_palette_picker.py +0 -0
  309. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/pipeline.py +0 -0
  310. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/pixelmath.py +0 -0
  311. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/plate_solver.py +0 -0
  312. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/project_io.py +0 -0
  313. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/psf_utils.py +0 -0
  314. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/psf_viewer.py +0 -0
  315. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/pyi_rthook_astroquery.py +0 -0
  316. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/remove_green.py +0 -0
  317. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/remove_stars.py +0 -0
  318. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/remove_stars_preset.py +0 -0
  319. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/resources.py +0 -0
  320. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/rgb_combination.py +0 -0
  321. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/rgb_extract.py +0 -0
  322. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/rgbalign.py +0 -0
  323. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/runtime_imports.py +0 -0
  324. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/runtime_torch.py +0 -0
  325. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/save_options.py +0 -0
  326. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/selective_color.py +0 -0
  327. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/sfcc.py +0 -0
  328. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/shortcuts.py +0 -0
  329. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/signature_insert.py +0 -0
  330. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/star_alignment.py +0 -0
  331. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/star_alignment_preset.py +0 -0
  332. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/star_metrics.py +0 -0
  333. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/star_spikes.py +0 -0
  334. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/star_stretch.py +0 -0
  335. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/status_log_dock.py +0 -0
  336. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/supernovaasteroidhunter.py +0 -0
  337. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/swap_manager.py +0 -0
  338. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/torch_backend.py +0 -0
  339. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/torch_rejection.py +0 -0
  340. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/all_source_strings.json +0 -0
  341. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/ar_translations.py +0 -0
  342. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/de_translations.py +0 -0
  343. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/es_translations.py +0 -0
  344. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/fr_translations.py +0 -0
  345. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/hi_translations.py +0 -0
  346. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/integrate_translations.py +0 -0
  347. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/it_translations.py +0 -0
  348. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/ja_translations.py +0 -0
  349. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/pt_translations.py +0 -0
  350. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/ru_translations.py +0 -0
  351. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_ar.qm +0 -0
  352. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_ar.ts +0 -0
  353. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_de.qm +0 -0
  354. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_de.ts +0 -0
  355. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_es.qm +0 -0
  356. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_es.ts +0 -0
  357. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_fr.qm +0 -0
  358. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_fr.ts +0 -0
  359. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_hi.qm +0 -0
  360. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_hi.ts +0 -0
  361. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_it.qm +0 -0
  362. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_it.ts +0 -0
  363. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_ja.qm +0 -0
  364. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_ja.ts +0 -0
  365. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_pt.qm +0 -0
  366. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_pt.ts +0 -0
  367. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_ru.qm +0 -0
  368. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_ru.ts +0 -0
  369. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_sw.qm +0 -0
  370. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_sw.ts +0 -0
  371. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_uk.qm +0 -0
  372. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_uk.ts +0 -0
  373. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_zh.qm +0 -0
  374. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/saspro_zh.ts +0 -0
  375. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/sw_translations.py +0 -0
  376. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/uk_translations.py +0 -0
  377. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/translations/zh_translations.py +0 -0
  378. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/versioning.py +0 -0
  379. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/view_bundle.py +0 -0
  380. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/wavescale_hdr.py +0 -0
  381. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/wavescale_hdr_preset.py +0 -0
  382. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/wavescalede.py +0 -0
  383. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/wavescalede_preset.py +0 -0
  384. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/wcs_update.py +0 -0
  385. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/whitebalance.py +0 -0
  386. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/__init__.py +0 -0
  387. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/common_utilities.py +0 -0
  388. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/graphics_views.py +0 -0
  389. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/image_utils.py +0 -0
  390. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/minigame/game.js +0 -0
  391. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/minigame/index.html +0 -0
  392. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/minigame/style.css +0 -0
  393. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/preview_dialogs.py +0 -0
  394. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/spinboxes.py +0 -0
  395. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/themed_buttons.py +0 -0
  396. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/widgets/wavelet_utils.py +0 -0
  397. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/wimi.py +0 -0
  398. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/wims.py +0 -0
  399. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/window_shelf.py +0 -0
  400. {setiastrosuitepro-1.6.9 → setiastrosuitepro-1.6.10}/src/setiastro/saspro/xisf.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: setiastrosuitepro
3
- Version: 1.6.9
3
+ Version: 1.6.10
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "setiastrosuitepro"
3
- version = "1.6.9"
3
+ version = "1.6.10"
4
4
  description = "Seti Astro Suite Pro - Advanced astrophotography toolkit for image calibration, stacking, registration, photometry, and visualization"
5
5
  authors = ["Franklin Marek <info@setiastro.com>"]
6
6
  readme = "README.md"
@@ -0,0 +1,16 @@
1
+ <svg width="300" height="300" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Sfondo sfumato -->
3
+ <defs>
4
+ <linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%">
5
+ <stop offset="0%" style="stop-color:white;stop-opacity:1" />
6
+ <stop offset="40%" style="stop-color:#cccccc;stop-opacity:1" />
7
+ <stop offset="100%" style="stop-color:#4a0000;stop-opacity:1" />
8
+ </linearGradient>
9
+ </defs>
10
+ <rect width="300" height="300" fill="url(#bgGradient)" />
11
+
12
+ <!-- Lettere -->
13
+ <text x="20" y="110" font-family="Arial, sans-serif" font-weight="bold" font-size="140" fill="#ff0000">A</text>
14
+ <text x="100" y="220" font-family="Arial, sans-serif" font-weight="bold" font-size="140" fill="#00ff00">B</text>
15
+ <text x="185" y="295" font-family="Arial, sans-serif" font-weight="bold" font-size="140" fill="#0000ff">E</text>
16
+ </svg>
@@ -0,0 +1,40 @@
1
+ <svg width="400" height="400" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Sfondo Tondo Blu Scuro -->
3
+ <circle cx="200" cy="200" r="190" fill="#2C3278" />
4
+
5
+ <!-- Scia/Onda inferiore (Swoosh) -->
6
+ <!-- Swoosh grande viola scuro -->
7
+ <path d="M80,260
8
+ Q110,360 200,340
9
+ Q280,320 320,220
10
+ L335,230
11
+ Q300,340 200,360
12
+ Q100,380 70,280 Z"
13
+ fill="#534FB1" opacity="0.9" />
14
+
15
+ <!-- Swoosh piccola interna (più chiara) -->
16
+ <path d="M120,290 Q160,330 220,310"
17
+ fill="none" stroke="#686CCF" stroke-width="12" stroke-linecap="round" />
18
+
19
+ <!-- Stella Principale Bianca -->
20
+ <!-- Uso curve di Bezier per ottenere l'effetto "pizzicato" esatto -->
21
+ <path d="M200,50
22
+ C215,160 215,160 350,200
23
+ C215,240 215,240 200,350
24
+ C185,240 185,240 50,200
25
+ C185,160 185,160 200,50 Z"
26
+ fill="#FFFFFF" />
27
+
28
+ <!-- Elementi decorativi -->
29
+
30
+ <!-- Stella piccola a destra (inclinata) -->
31
+ <path d="M280,110 C290,105 290,105 300,100 C290,95 290,95 280,90 C270,95 270,95 260,100 C270,105 270,105 280,110 Z"
32
+ fill="#FFFFFF" transform="rotate(-15, 280, 100)" />
33
+
34
+ <!-- Pallini a sinistra -->
35
+ <!-- Pallino bianco in alto -->
36
+ <circle cx="140" cy="85" r="5" fill="#FFFFFF" />
37
+ <!-- Pallino blu scuro in basso -->
38
+ <circle cx="90" cy="140" r="7" fill="#4C54A0" />
39
+
40
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg width="300" height="300" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Sfondo quadrato arrotondato -->
3
+ <rect x="20" y="20" width="260" height="260" rx="40" fill="#293375" />
4
+
5
+ <!-- Silhouette Satellite -->
6
+ <g transform="translate(150,150) rotate(-45)">
7
+ <!-- Pannelli solari -->
8
+ <rect x="-90" y="-30" width="60" height="60" fill="#0c1236" />
9
+ <rect x="30" y="-30" width="60" height="60" fill="#0c1236" />
10
+ <!-- Corpo centrale -->
11
+ <rect x="-30" y="-50" width="60" height="100" rx="10" fill="#0c1236" />
12
+ <!-- Antenna -->
13
+ <line x1="0" y1="-50" x2="0" y2="-100" stroke="#f0f0f0" stroke-width="10" stroke-linecap="round"/>
14
+ <!-- Raggio inferiore -->
15
+ <path d="M-10,50 L-20,150 L20,150 L10,50 Z" fill="#f0f0f0" opacity="0.9"/>
16
+ </g>
17
+
18
+ <!-- Segnale di divieto (X rossa) -->
19
+ <circle cx="230" cy="230" r="60" fill="#e84545" />
20
+ <g stroke="white" stroke-width="15" stroke-linecap="round">
21
+ <line x1="210" y1="210" x2="250" y2="250" />
22
+ <line x1="250" y1="210" x2="210" y2="250" />
23
+ </g>
24
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg width="300" height="240" viewBox="0 0 300 240" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Sfondo gradiente radiale -->
3
+ <defs>
4
+ <radialGradient id="gradGX" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
5
+ <stop offset="0%" style="stop-color:#f0f0f0;stop-opacity:1" />
6
+ <stop offset="70%" style="stop-color:#d0d0d0;stop-opacity:1" />
7
+ <stop offset="100%" style="stop-color:#ffffff;stop-opacity:0" />
8
+ </radialGradient>
9
+ <filter id="blurEffect">
10
+ <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
11
+ </filter>
12
+ </defs>
13
+
14
+ <!-- Ellisse di sfondo sfocata -->
15
+ <ellipse cx="150" cy="120" rx="130" ry="100" fill="url(#gradGX)" filter="url(#blurEffect)" />
16
+
17
+ <!-- Testo GX -->
18
+ <text x="150" y="180" font-family="Arial, sans-serif" font-weight="bold" font-size="160" text-anchor="middle" fill="black">GX</text>
19
+ </svg>
@@ -0,0 +1,32 @@
1
+ <svg width="500" height="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Bordo quadrato arrotondato -->
3
+ <rect x="20" y="20" width="460" height="460" rx="80" fill="white" stroke="black" stroke-width="25" />
4
+
5
+ <!-- Assi Cartesiani -->
6
+ <g stroke="black" stroke-width="25" stroke-linecap="round" stroke-linejoin="round" fill="none">
7
+ <!-- Asse Y e X -->
8
+ <path d="M80,100 L80,420 L420,420" />
9
+ <!-- Frecce -->
10
+ <path d="M50,130 L80,90 L110,130" /> <!-- Freccia Y -->
11
+ <path d="M390,390 L430,420 L390,450" /> <!-- Freccia X -->
12
+ </g>
13
+
14
+ <!-- Punti Dati (Scatter Plot) -->
15
+ <g fill="#ff3333">
16
+ <circle cx="160" cy="220" r="20" />
17
+ <circle cx="200" cy="230" r="20" />
18
+ <circle cx="160" cy="260" r="20" />
19
+ <circle cx="220" cy="230" r="20" />
20
+ <circle cx="270" cy="300" r="20" />
21
+ <circle cx="320" cy="300" r="20" />
22
+ <circle cx="240" cy="350" r="20" />
23
+ <circle cx="330" cy="260" r="20" />
24
+ <circle cx="360" cy="220" r="20" />
25
+ <circle cx="300" cy="150" r="20" />
26
+ <circle cx="370" cy="80" r="20" />
27
+ <circle cx="450" cy="120" r="20" />
28
+ </g>
29
+
30
+ <!-- Linea di Regressione (Best Fit) -->
31
+ <line x1="130" y1="370" x2="420" y2="100" stroke="#2d72b5" stroke-width="30" stroke-linecap="round" />
32
+ </svg>
@@ -0,0 +1,42 @@
1
+ <svg width="500" height="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
2
+
3
+ <!-- Quadrato Alto Sinistra (Giallo / Più) -->
4
+ <g transform="translate(10, 10)">
5
+ <rect width="230" height="230" fill="#fec035" />
6
+ <!-- Effetto ombra diagonale -->
7
+ <path d="M230,0 L230,230 L115,230 Z" fill="#fab005" opacity="0.4" />
8
+ <!-- Simbolo + -->
9
+ <rect x="95" y="45" width="40" height="140" rx="10" fill="white" />
10
+ <rect x="45" y="95" width="140" height="40" rx="10" fill="white" />
11
+ </g>
12
+
13
+ <!-- Quadrato Alto Destra (Rosso / Meno) -->
14
+ <g transform="translate(260, 10)">
15
+ <rect width="230" height="230" fill="#f15654" />
16
+ <path d="M230,0 L230,230 L115,230 Z" fill="#d04442" opacity="0.4" />
17
+ <!-- Simbolo - -->
18
+ <rect x="45" y="95" width="140" height="30" rx="10" fill="white" />
19
+ </g>
20
+
21
+ <!-- Quadrato Basso Sinistra (Verde / Per) -->
22
+ <g transform="translate(10, 260)">
23
+ <rect width="230" height="230" fill="#5cba63" />
24
+ <path d="M230,0 L230,230 L115,230 Z" fill="#4fa555" opacity="0.4" />
25
+ <!-- Simbolo X (Ruotato +) -->
26
+ <g transform="translate(115, 115) rotate(45)">
27
+ <rect x="-20" y="-70" width="40" height="140" rx="10" fill="white" />
28
+ <rect x="-70" y="-20" width="140" height="40" rx="10" fill="white" />
29
+ </g>
30
+ </g>
31
+
32
+ <!-- Quadrato Basso Destra (Blu / Diviso) -->
33
+ <g transform="translate(260, 260)">
34
+ <rect width="230" height="230" fill="#427bc9" />
35
+ <path d="M230,0 L230,230 L115,230 Z" fill="#3664a3" opacity="0.4" />
36
+ <!-- Simbolo Diviso -->
37
+ <rect x="45" y="95" width="140" height="30" rx="10" fill="white" />
38
+ <circle cx="115" cy="55" r="15" fill="white" />
39
+ <circle cx="115" cy="175" r="15" fill="white" />
40
+ </g>
41
+
42
+ </svg>
@@ -0,0 +1,3 @@
1
+ # Auto-generated at build time. Do not edit.
2
+ BUILD_TIMESTAMP = "2026-01-04T16:49:01Z"
3
+ APP_VERSION = "1.6.10"
@@ -578,10 +578,9 @@ class AddStarsDialog(QDialog):
578
578
 
579
579
  # Emit (target_doc, blended_image)
580
580
  self.stars_added.emit(target_doc, self.blended_image.astype(np.float32, copy=False))
581
- # Dialog stays open so user can apply to other images
582
- # Refresh combo boxes for next operation
583
- self._populate_doc_combos()
584
-
581
+ # Close UI after apply
582
+ self.accept() # or: self.close()
583
+ return
585
584
 
586
585
  # Ensure initial fit once shown
587
586
  def showEvent(self, ev):
@@ -606,7 +605,32 @@ def add_stars(main):
606
605
 
607
606
  dlg = AddStarsDialog(main, parent=main)
608
607
  dlg.stars_added.connect(lambda target, arr: _apply_to_doc(main, target, arr))
609
- dlg.exec()
608
+
609
+ # IMPORTANT: keep a strong reference (non-modal show)
610
+ if not hasattr(main, "_tool_dialogs"):
611
+ main._tool_dialogs = []
612
+ main._tool_dialogs.append(dlg)
613
+
614
+ # When the dialog closes, drop the reference
615
+ def _cleanup(_=None, d=dlg):
616
+ try:
617
+ if hasattr(main, "_tool_dialogs") and d in main._tool_dialogs:
618
+ main._tool_dialogs.remove(d)
619
+ except Exception:
620
+ pass
621
+
622
+ try:
623
+ dlg.finished.connect(_cleanup) # QDialog signal
624
+ except Exception:
625
+ pass
626
+ try:
627
+ dlg.destroyed.connect(_cleanup) # QObject signal (extra safety)
628
+ except Exception:
629
+ pass
630
+
631
+ dlg.show()
632
+ dlg.raise_()
633
+ dlg.activateWindow()
610
634
 
611
635
 
612
636
  def _apply_to_doc(main, doc, arr: np.ndarray):
@@ -228,21 +228,116 @@ class WaitForFileWorker(QThread):
228
228
  fileFound = pyqtSignal(str)
229
229
  cancelled = pyqtSignal()
230
230
  error = pyqtSignal(str)
231
- def __init__(self, glob_pat: str, timeout_sec=1800, parent=None):
231
+
232
+ def __init__(
233
+ self,
234
+ glob_pat: str,
235
+ timeout_sec: int = 1800,
236
+ parent=None,
237
+ *,
238
+ poll_ms: int = 200,
239
+ stable_polls: int = 6, # 6 * 200ms = ~1.2s of stability
240
+ stable_timeout_sec: int = 120, # extra time after first detection
241
+ ):
232
242
  super().__init__(parent)
233
243
  self._glob = glob_pat
234
- self._timeout = timeout_sec
244
+ self._timeout = int(timeout_sec)
245
+ self._poll_ms = int(poll_ms)
246
+ self._stable_polls = int(stable_polls)
247
+ self._stable_timeout = int(stable_timeout_sec)
235
248
  self._running = True
249
+
250
+ def stop(self):
251
+ self._running = False
252
+
253
+ def _best_candidate(self, paths: list[str]) -> str | None:
254
+ if not paths:
255
+ return None
256
+ # prefer biggest file; tie-break by newest mtime
257
+ def key(p):
258
+ try:
259
+ st = os.stat(p)
260
+ return (st.st_size, st.st_mtime)
261
+ except Exception:
262
+ return (-1, -1)
263
+ paths.sort(key=key, reverse=True)
264
+ return paths[0]
265
+
266
+ def _is_stable_and_readable(self, path: str) -> bool:
267
+ """
268
+ Consider stable when size+mtime unchanged for N polls in a row AND file is readable.
269
+ Handles slow writers + Windows "file still locked" issues.
270
+ """
271
+ stable = 0
272
+ last = None
273
+
274
+ t0 = time.monotonic()
275
+ while self._running and (time.monotonic() - t0) < self._stable_timeout:
276
+ try:
277
+ st = os.stat(path)
278
+ cur = (st.st_size, st.st_mtime)
279
+ if st.st_size <= 0:
280
+ stable = 0
281
+ last = cur
282
+ elif cur == last:
283
+ stable += 1
284
+ else:
285
+ stable = 0
286
+ last = cur
287
+
288
+ if stable >= self._stable_polls:
289
+ # extra “is it readable?” check (important on Windows)
290
+ try:
291
+ with open(path, "rb") as f:
292
+ f.read(64)
293
+ return True
294
+ except PermissionError:
295
+ # still locked by writer, keep waiting
296
+ stable = 0
297
+ except Exception:
298
+ # transient weirdness: keep waiting, don’t declare failure yet
299
+ stable = 0
300
+
301
+ except FileNotFoundError:
302
+ stable = 0
303
+ last = None
304
+ except Exception:
305
+ # don't crash the worker for stat weirdness
306
+ stable = 0
307
+
308
+ time.sleep(self._poll_ms / 1000.0)
309
+
310
+ return False
311
+
236
312
  def run(self):
237
- start = time.time()
238
- while self._running and (time.time() - start < self._timeout):
239
- m = glob.glob(self._glob)
240
- if m:
241
- self.fileFound.emit(m[0]); return
242
- time.sleep(1)
243
- if self._running: self.error.emit("Output file not found within timeout.")
244
- else: self.cancelled.emit()
245
- def stop(self): self._running = False
313
+ t_start = time.monotonic()
314
+ seen_first_candidate_at = None
315
+
316
+ while self._running and (time.monotonic() - t_start) < self._timeout:
317
+ matches = glob.glob(self._glob)
318
+ cand = self._best_candidate(matches)
319
+
320
+ if cand:
321
+ if seen_first_candidate_at is None:
322
+ seen_first_candidate_at = time.monotonic()
323
+
324
+ if self._is_stable_and_readable(cand):
325
+ self.fileFound.emit(cand)
326
+ return
327
+
328
+ # If we've been seeing candidates for a while but none stabilize,
329
+ # keep looping until global timeout. (This is common on slow disks.)
330
+
331
+ time.sleep(self._poll_ms / 1000.0)
332
+
333
+ if not self._running:
334
+ self.cancelled.emit()
335
+ else:
336
+ extra = ""
337
+ if seen_first_candidate_at is not None:
338
+ extra = " (output appeared but never stabilized)"
339
+ self.error.emit("Output file not found within timeout." + extra)
340
+
246
341
 
247
342
 
248
343
  # =============================================================================
@@ -556,6 +651,12 @@ class CosmicClarityDialogPro(QDialog):
556
651
  QMessageBox.critical(self, "Cosmic Clarity", f"Executable not found:\n{exe_path}")
557
652
  return
558
653
 
654
+ # ✅ compute base early (we need it for purge + glob)
655
+ base = self._base_name()
656
+
657
+ # ✅ purge any stale outputs for THIS base name (avoids matching old files)
658
+ _purge_cc_io(self.cosmic_root, clear_input=False, clear_output=True, prefix=base)
659
+
559
660
  # Build args (SASv2 flags mirrored)
560
661
  args = []
561
662
  if mode == "sharpen":
@@ -599,7 +700,7 @@ class CosmicClarityDialogPro(QDialog):
599
700
 
600
701
  # Wait for output file
601
702
  base = self._base_name()
602
- out_glob = os.path.join(self.cosmic_root, "output", f"{base}{suffix}.*")
703
+ out_glob = os.path.join(self.cosmic_root, "output", f"{base}*{suffix}*.*")
603
704
  self._wait = WaitDialog(f"Cosmic Clarity – {mode.title()}", self)
604
705
  self._wait.cancelled.connect(self._cancel_all)
605
706
  self._wait.show()
@@ -615,19 +716,25 @@ class CosmicClarityDialogPro(QDialog):
615
716
 
616
717
  def _read_proc_output(self, proc: QProcess, which="main"):
617
718
  out = proc.readAllStandardOutput().data().decode("utf-8", errors="replace")
618
- if not self._wait: return
719
+ if not self._wait:
720
+ return
721
+
619
722
  for line in out.splitlines():
620
723
  line = line.strip()
621
- if not line: continue
724
+ if not line:
725
+ continue
726
+
622
727
  if line.startswith("Progress:"):
623
728
  try:
624
- pct = float(line.split()[1].replace("%",""))
729
+ pct = float(line.split()[1].replace("%", ""))
625
730
  self._wait.set_progress(int(pct))
626
731
  except Exception:
627
732
  pass
628
- else:
629
- self._wait.append_output(line)
630
- print(f"[CC] {line}")
733
+ continue # <- skip echo
734
+
735
+ # non-progress lines: keep showing + printing
736
+ self._wait.append_output(line)
737
+ print(f"[CC] {line}")
631
738
 
632
739
  def _on_proc_finished(self, mode, suffix, code, status):
633
740
  if code != 0:
@@ -8006,7 +8006,8 @@ class AstroSuiteProMainWindow(
8006
8006
  # We target ~60% of the viewport height, clamped to sane bounds.
8007
8007
  # -------------------------------------------------------------------------
8008
8008
  vp = self.mdi.viewport()
8009
- area = vp.rect() if vp else self.mdi.rect()
8009
+ # Use viewport geometry in MDI coordinates (NOT viewport-local rect)
8010
+ area = vp.geometry() if vp else self.mdi.contentsRect()
8010
8011
 
8011
8012
  # Determine aspect ratio
8012
8013
  img_w = img_h = None
@@ -8049,7 +8050,7 @@ class AstroSuiteProMainWindow(
8049
8050
  # Smart Cascade: Position relative to the *currently active* window
8050
8051
  # (before we make the new one active).
8051
8052
  # -------------------------------------------------------------------------
8052
- new_x, new_y = 0, 0
8053
+ new_x, new_y = area.left(), area.top()
8053
8054
 
8054
8055
  # Get dominant/active window *before* we activate the new one
8055
8056
  active = self.mdi.activeSubWindow()
@@ -8072,15 +8073,13 @@ class AstroSuiteProMainWindow(
8072
8073
  except Exception:
8073
8074
  pass
8074
8075
 
8075
- # Bounds check: don't let it drift completely off-screen
8076
- # (allow valid title bar to be visible at least)
8077
- if (new_x + target_w > area.width() + 50) or (new_y + 50 > area.height()):
8078
- new_x = 0
8079
- new_y = 0
8080
-
8081
- # Clamp to 0 if negative for some reason
8082
- new_x = max(0, new_x)
8083
- new_y = max(0, new_y)
8076
+ # Bounds check: keep titlebar visible and stay inside viewport
8077
+ if (new_x + target_w > area.right() - 10) or (new_y + 40 > area.bottom() - 10):
8078
+ new_x = area.left()
8079
+ new_y = area.top()
8080
+
8081
+ new_x = max(area.left(), new_x)
8082
+ new_y = max(area.top(), new_y)
8084
8083
 
8085
8084
  sw.move(new_x, new_y)
8086
8085
 
@@ -8175,6 +8174,11 @@ class AstroSuiteProMainWindow(
8175
8174
  except Exception:
8176
8175
  pass
8177
8176
 
8177
+ try:
8178
+ self._fix_mdi_titlebar_emboss("#dcdcdc" if self._theme_mode()=="dark" else "#f0f0f0")
8179
+ except Exception:
8180
+ pass
8181
+
8178
8182
  # -- 11) If this is the first window and it's an image, mimic "Cascade Views"
8179
8183
  try:
8180
8184
  if first_window and not is_table:
@@ -8614,7 +8618,10 @@ class AstroSuiteProMainWindow(
8614
8618
  self._refresh_mask_action_states()
8615
8619
  except Exception:
8616
8620
  pass
8617
-
8621
+ try:
8622
+ self._fix_mdi_titlebar_emboss("#dcdcdc" if self._theme_mode()=="dark" else "#f0f0f0")
8623
+ except Exception:
8624
+ pass
8618
8625
 
8619
8626
  def _sync_docman_active(self, doc):
8620
8627
  dm = self.doc_manager