setiastrosuitepro 1.6.7__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (394) hide show
  1. setiastro/__init__.py +2 -0
  2. setiastro/data/SASP_data.fits +0 -0
  3. setiastro/data/catalogs/List_of_Galaxies_with_Distances_Gly.csv +488 -0
  4. setiastro/data/catalogs/astrobin_filters.csv +890 -0
  5. setiastro/data/catalogs/astrobin_filters_page1_local.csv +51 -0
  6. setiastro/data/catalogs/cali2.csv +63 -0
  7. setiastro/data/catalogs/cali2color.csv +65 -0
  8. setiastro/data/catalogs/celestial_catalog - original.csv +16471 -0
  9. setiastro/data/catalogs/celestial_catalog.csv +24031 -0
  10. setiastro/data/catalogs/detected_stars.csv +24784 -0
  11. setiastro/data/catalogs/fits_header_data.csv +46 -0
  12. setiastro/data/catalogs/test.csv +8 -0
  13. setiastro/data/catalogs/updated_celestial_catalog.csv +16471 -0
  14. setiastro/images/Astro_Spikes.png +0 -0
  15. setiastro/images/Background_startup.jpg +0 -0
  16. setiastro/images/HRDiagram.png +0 -0
  17. setiastro/images/LExtract.png +0 -0
  18. setiastro/images/LInsert.png +0 -0
  19. setiastro/images/Oxygenation-atm-2.svg.png +0 -0
  20. setiastro/images/RGB080604.png +0 -0
  21. setiastro/images/abeicon.png +0 -0
  22. setiastro/images/aberration.png +0 -0
  23. setiastro/images/acv_icon.png +0 -0
  24. setiastro/images/andromedatry.png +0 -0
  25. setiastro/images/andromedatry_satellited.png +0 -0
  26. setiastro/images/annotated.png +0 -0
  27. setiastro/images/aperture.png +0 -0
  28. setiastro/images/astrosuite.ico +0 -0
  29. setiastro/images/astrosuite.png +0 -0
  30. setiastro/images/astrosuitepro.icns +0 -0
  31. setiastro/images/astrosuitepro.ico +0 -0
  32. setiastro/images/astrosuitepro.png +0 -0
  33. setiastro/images/background.png +0 -0
  34. setiastro/images/background2.png +0 -0
  35. setiastro/images/benchmark.png +0 -0
  36. setiastro/images/big_moon_stabilizer_timeline.png +0 -0
  37. setiastro/images/big_moon_stabilizer_timeline_clean.png +0 -0
  38. setiastro/images/blaster.png +0 -0
  39. setiastro/images/blink.png +0 -0
  40. setiastro/images/clahe.png +0 -0
  41. setiastro/images/collage.png +0 -0
  42. setiastro/images/colorwheel.png +0 -0
  43. setiastro/images/contsub.png +0 -0
  44. setiastro/images/convo.png +0 -0
  45. setiastro/images/copyslot.png +0 -0
  46. setiastro/images/cosmic.png +0 -0
  47. setiastro/images/cosmicsat.png +0 -0
  48. setiastro/images/crop1.png +0 -0
  49. setiastro/images/cropicon.png +0 -0
  50. setiastro/images/curves.png +0 -0
  51. setiastro/images/cvs.png +0 -0
  52. setiastro/images/debayer.png +0 -0
  53. setiastro/images/denoise_cnn_custom.png +0 -0
  54. setiastro/images/denoise_cnn_graph.png +0 -0
  55. setiastro/images/disk.png +0 -0
  56. setiastro/images/dse.png +0 -0
  57. setiastro/images/exoicon.png +0 -0
  58. setiastro/images/eye.png +0 -0
  59. setiastro/images/first_quarter.png +0 -0
  60. setiastro/images/fliphorizontal.png +0 -0
  61. setiastro/images/flipvertical.png +0 -0
  62. setiastro/images/font.png +0 -0
  63. setiastro/images/freqsep.png +0 -0
  64. setiastro/images/full_moon.png +0 -0
  65. setiastro/images/functionbundle.png +0 -0
  66. setiastro/images/graxpert.png +0 -0
  67. setiastro/images/green.png +0 -0
  68. setiastro/images/gridicon.png +0 -0
  69. setiastro/images/halo.png +0 -0
  70. setiastro/images/hdr.png +0 -0
  71. setiastro/images/histogram.png +0 -0
  72. setiastro/images/hubble.png +0 -0
  73. setiastro/images/imagecombine.png +0 -0
  74. setiastro/images/invert.png +0 -0
  75. setiastro/images/isophote.png +0 -0
  76. setiastro/images/isophote_demo_figure.png +0 -0
  77. setiastro/images/isophote_demo_image.png +0 -0
  78. setiastro/images/isophote_demo_model.png +0 -0
  79. setiastro/images/isophote_demo_residual.png +0 -0
  80. setiastro/images/jwstpupil.png +0 -0
  81. setiastro/images/last_quarter.png +0 -0
  82. setiastro/images/linearfit.png +0 -0
  83. setiastro/images/livestacking.png +0 -0
  84. setiastro/images/mask.png +0 -0
  85. setiastro/images/maskapply.png +0 -0
  86. setiastro/images/maskcreate.png +0 -0
  87. setiastro/images/maskremove.png +0 -0
  88. setiastro/images/morpho.png +0 -0
  89. setiastro/images/mosaic.png +0 -0
  90. setiastro/images/multiscale_decomp.png +0 -0
  91. setiastro/images/nbtorgb.png +0 -0
  92. setiastro/images/neutral.png +0 -0
  93. setiastro/images/new_moon.png +0 -0
  94. setiastro/images/nuke.png +0 -0
  95. setiastro/images/openfile.png +0 -0
  96. setiastro/images/pedestal.png +0 -0
  97. setiastro/images/pen.png +0 -0
  98. setiastro/images/pixelmath.png +0 -0
  99. setiastro/images/platesolve.png +0 -0
  100. setiastro/images/ppp.png +0 -0
  101. setiastro/images/pro.png +0 -0
  102. setiastro/images/project.png +0 -0
  103. setiastro/images/psf.png +0 -0
  104. setiastro/images/redo.png +0 -0
  105. setiastro/images/redoicon.png +0 -0
  106. setiastro/images/rescale.png +0 -0
  107. setiastro/images/rgbalign.png +0 -0
  108. setiastro/images/rgbcombo.png +0 -0
  109. setiastro/images/rgbextract.png +0 -0
  110. setiastro/images/rotate180.png +0 -0
  111. setiastro/images/rotatearbitrary.png +0 -0
  112. setiastro/images/rotateclockwise.png +0 -0
  113. setiastro/images/rotatecounterclockwise.png +0 -0
  114. setiastro/images/satellite.png +0 -0
  115. setiastro/images/script.png +0 -0
  116. setiastro/images/selectivecolor.png +0 -0
  117. setiastro/images/simbad.png +0 -0
  118. setiastro/images/slot0.png +0 -0
  119. setiastro/images/slot1.png +0 -0
  120. setiastro/images/slot2.png +0 -0
  121. setiastro/images/slot3.png +0 -0
  122. setiastro/images/slot4.png +0 -0
  123. setiastro/images/slot5.png +0 -0
  124. setiastro/images/slot6.png +0 -0
  125. setiastro/images/slot7.png +0 -0
  126. setiastro/images/slot8.png +0 -0
  127. setiastro/images/slot9.png +0 -0
  128. setiastro/images/spcc.png +0 -0
  129. setiastro/images/spin_precession_vs_lunar_distance.png +0 -0
  130. setiastro/images/spinner.gif +0 -0
  131. setiastro/images/stacking.png +0 -0
  132. setiastro/images/staradd.png +0 -0
  133. setiastro/images/staralign.png +0 -0
  134. setiastro/images/starnet.png +0 -0
  135. setiastro/images/starregistration.png +0 -0
  136. setiastro/images/starspike.png +0 -0
  137. setiastro/images/starstretch.png +0 -0
  138. setiastro/images/statstretch.png +0 -0
  139. setiastro/images/supernova.png +0 -0
  140. setiastro/images/uhs.png +0 -0
  141. setiastro/images/undoicon.png +0 -0
  142. setiastro/images/upscale.png +0 -0
  143. setiastro/images/viewbundle.png +0 -0
  144. setiastro/images/waning_crescent_1.png +0 -0
  145. setiastro/images/waning_crescent_2.png +0 -0
  146. setiastro/images/waning_crescent_3.png +0 -0
  147. setiastro/images/waning_crescent_4.png +0 -0
  148. setiastro/images/waning_crescent_5.png +0 -0
  149. setiastro/images/waning_gibbous_1.png +0 -0
  150. setiastro/images/waning_gibbous_2.png +0 -0
  151. setiastro/images/waning_gibbous_3.png +0 -0
  152. setiastro/images/waning_gibbous_4.png +0 -0
  153. setiastro/images/waning_gibbous_5.png +0 -0
  154. setiastro/images/waxing_crescent_1.png +0 -0
  155. setiastro/images/waxing_crescent_2.png +0 -0
  156. setiastro/images/waxing_crescent_3.png +0 -0
  157. setiastro/images/waxing_crescent_4.png +0 -0
  158. setiastro/images/waxing_crescent_5.png +0 -0
  159. setiastro/images/waxing_gibbous_1.png +0 -0
  160. setiastro/images/waxing_gibbous_2.png +0 -0
  161. setiastro/images/waxing_gibbous_3.png +0 -0
  162. setiastro/images/waxing_gibbous_4.png +0 -0
  163. setiastro/images/waxing_gibbous_5.png +0 -0
  164. setiastro/images/whitebalance.png +0 -0
  165. setiastro/images/wimi_icon_256x256.png +0 -0
  166. setiastro/images/wimilogo.png +0 -0
  167. setiastro/images/wims.png +0 -0
  168. setiastro/images/wrench_icon.png +0 -0
  169. setiastro/images/xisfliberator.png +0 -0
  170. setiastro/qml/ResourceMonitor.qml +128 -0
  171. setiastro/saspro/__init__.py +20 -0
  172. setiastro/saspro/__main__.py +964 -0
  173. setiastro/saspro/_generated/__init__.py +7 -0
  174. setiastro/saspro/_generated/build_info.py +3 -0
  175. setiastro/saspro/abe.py +1379 -0
  176. setiastro/saspro/abe_preset.py +196 -0
  177. setiastro/saspro/aberration_ai.py +910 -0
  178. setiastro/saspro/aberration_ai_preset.py +224 -0
  179. setiastro/saspro/accel_installer.py +218 -0
  180. setiastro/saspro/accel_workers.py +30 -0
  181. setiastro/saspro/acv_exporter.py +379 -0
  182. setiastro/saspro/add_stars.py +627 -0
  183. setiastro/saspro/astrobin_exporter.py +1010 -0
  184. setiastro/saspro/astrospike.py +153 -0
  185. setiastro/saspro/astrospike_python.py +1841 -0
  186. setiastro/saspro/autostretch.py +198 -0
  187. setiastro/saspro/backgroundneutral.py +639 -0
  188. setiastro/saspro/batch_convert.py +328 -0
  189. setiastro/saspro/batch_renamer.py +522 -0
  190. setiastro/saspro/blemish_blaster.py +494 -0
  191. setiastro/saspro/blink_comparator_pro.py +3149 -0
  192. setiastro/saspro/bundles.py +61 -0
  193. setiastro/saspro/bundles_dock.py +114 -0
  194. setiastro/saspro/cheat_sheet.py +213 -0
  195. setiastro/saspro/clahe.py +371 -0
  196. setiastro/saspro/comet_stacking.py +1442 -0
  197. setiastro/saspro/common_tr.py +107 -0
  198. setiastro/saspro/config.py +38 -0
  199. setiastro/saspro/config_bootstrap.py +40 -0
  200. setiastro/saspro/config_manager.py +316 -0
  201. setiastro/saspro/continuum_subtract.py +1620 -0
  202. setiastro/saspro/convo.py +1403 -0
  203. setiastro/saspro/convo_preset.py +414 -0
  204. setiastro/saspro/copyastro.py +190 -0
  205. setiastro/saspro/cosmicclarity.py +1593 -0
  206. setiastro/saspro/cosmicclarity_preset.py +407 -0
  207. setiastro/saspro/crop_dialog_pro.py +1005 -0
  208. setiastro/saspro/crop_preset.py +189 -0
  209. setiastro/saspro/curve_editor_pro.py +2608 -0
  210. setiastro/saspro/curves_preset.py +375 -0
  211. setiastro/saspro/debayer.py +673 -0
  212. setiastro/saspro/debug_utils.py +29 -0
  213. setiastro/saspro/dnd_mime.py +35 -0
  214. setiastro/saspro/doc_manager.py +2727 -0
  215. setiastro/saspro/exoplanet_detector.py +2258 -0
  216. setiastro/saspro/file_utils.py +284 -0
  217. setiastro/saspro/fitsmodifier.py +748 -0
  218. setiastro/saspro/fix_bom.py +32 -0
  219. setiastro/saspro/free_torch_memory.py +48 -0
  220. setiastro/saspro/frequency_separation.py +1352 -0
  221. setiastro/saspro/function_bundle.py +1596 -0
  222. setiastro/saspro/generate_translations.py +3092 -0
  223. setiastro/saspro/ghs_dialog_pro.py +728 -0
  224. setiastro/saspro/ghs_preset.py +284 -0
  225. setiastro/saspro/graxpert.py +638 -0
  226. setiastro/saspro/graxpert_preset.py +287 -0
  227. setiastro/saspro/gui/__init__.py +0 -0
  228. setiastro/saspro/gui/main_window.py +8928 -0
  229. setiastro/saspro/gui/mixins/__init__.py +33 -0
  230. setiastro/saspro/gui/mixins/dock_mixin.py +375 -0
  231. setiastro/saspro/gui/mixins/file_mixin.py +450 -0
  232. setiastro/saspro/gui/mixins/geometry_mixin.py +503 -0
  233. setiastro/saspro/gui/mixins/header_mixin.py +441 -0
  234. setiastro/saspro/gui/mixins/mask_mixin.py +421 -0
  235. setiastro/saspro/gui/mixins/menu_mixin.py +391 -0
  236. setiastro/saspro/gui/mixins/theme_mixin.py +367 -0
  237. setiastro/saspro/gui/mixins/toolbar_mixin.py +1824 -0
  238. setiastro/saspro/gui/mixins/update_mixin.py +323 -0
  239. setiastro/saspro/gui/mixins/view_mixin.py +477 -0
  240. setiastro/saspro/gui/statistics_dialog.py +47 -0
  241. setiastro/saspro/halobgon.py +492 -0
  242. setiastro/saspro/header_viewer.py +448 -0
  243. setiastro/saspro/headless_utils.py +88 -0
  244. setiastro/saspro/histogram.py +760 -0
  245. setiastro/saspro/history_explorer.py +941 -0
  246. setiastro/saspro/i18n.py +168 -0
  247. setiastro/saspro/image_combine.py +421 -0
  248. setiastro/saspro/image_peeker_pro.py +1608 -0
  249. setiastro/saspro/imageops/__init__.py +37 -0
  250. setiastro/saspro/imageops/mdi_snap.py +292 -0
  251. setiastro/saspro/imageops/scnr.py +36 -0
  252. setiastro/saspro/imageops/starbasedwhitebalance.py +210 -0
  253. setiastro/saspro/imageops/stretch.py +236 -0
  254. setiastro/saspro/isophote.py +1186 -0
  255. setiastro/saspro/layers.py +208 -0
  256. setiastro/saspro/layers_dock.py +714 -0
  257. setiastro/saspro/lazy_imports.py +193 -0
  258. setiastro/saspro/legacy/__init__.py +2 -0
  259. setiastro/saspro/legacy/image_manager.py +2360 -0
  260. setiastro/saspro/legacy/numba_utils.py +3676 -0
  261. setiastro/saspro/legacy/xisf.py +1213 -0
  262. setiastro/saspro/linear_fit.py +537 -0
  263. setiastro/saspro/live_stacking.py +1854 -0
  264. setiastro/saspro/log_bus.py +5 -0
  265. setiastro/saspro/logging_config.py +460 -0
  266. setiastro/saspro/luminancerecombine.py +510 -0
  267. setiastro/saspro/main_helpers.py +201 -0
  268. setiastro/saspro/mask_creation.py +1090 -0
  269. setiastro/saspro/masks_core.py +56 -0
  270. setiastro/saspro/mdi_widgets.py +353 -0
  271. setiastro/saspro/memory_utils.py +666 -0
  272. setiastro/saspro/metadata_patcher.py +75 -0
  273. setiastro/saspro/mfdeconv.py +3909 -0
  274. setiastro/saspro/mfdeconv_earlystop.py +71 -0
  275. setiastro/saspro/mfdeconvcudnn.py +3312 -0
  276. setiastro/saspro/mfdeconvsport.py +2459 -0
  277. setiastro/saspro/minorbodycatalog.py +567 -0
  278. setiastro/saspro/morphology.py +411 -0
  279. setiastro/saspro/multiscale_decomp.py +1751 -0
  280. setiastro/saspro/nbtorgb_stars.py +541 -0
  281. setiastro/saspro/numba_utils.py +3145 -0
  282. setiastro/saspro/numba_warmup.py +141 -0
  283. setiastro/saspro/ops/__init__.py +9 -0
  284. setiastro/saspro/ops/command_help_dialog.py +623 -0
  285. setiastro/saspro/ops/command_runner.py +217 -0
  286. setiastro/saspro/ops/commands.py +1594 -0
  287. setiastro/saspro/ops/script_editor.py +1105 -0
  288. setiastro/saspro/ops/scripts.py +1476 -0
  289. setiastro/saspro/ops/settings.py +637 -0
  290. setiastro/saspro/parallel_utils.py +554 -0
  291. setiastro/saspro/pedestal.py +121 -0
  292. setiastro/saspro/perfect_palette_picker.py +1105 -0
  293. setiastro/saspro/pipeline.py +110 -0
  294. setiastro/saspro/pixelmath.py +1604 -0
  295. setiastro/saspro/plate_solver.py +2480 -0
  296. setiastro/saspro/project_io.py +797 -0
  297. setiastro/saspro/psf_utils.py +136 -0
  298. setiastro/saspro/psf_viewer.py +631 -0
  299. setiastro/saspro/pyi_rthook_astroquery.py +95 -0
  300. setiastro/saspro/remove_green.py +331 -0
  301. setiastro/saspro/remove_stars.py +1599 -0
  302. setiastro/saspro/remove_stars_preset.py +446 -0
  303. setiastro/saspro/resources.py +570 -0
  304. setiastro/saspro/rgb_combination.py +208 -0
  305. setiastro/saspro/rgb_extract.py +19 -0
  306. setiastro/saspro/rgbalign.py +727 -0
  307. setiastro/saspro/runtime_imports.py +7 -0
  308. setiastro/saspro/runtime_torch.py +754 -0
  309. setiastro/saspro/save_options.py +73 -0
  310. setiastro/saspro/selective_color.py +1614 -0
  311. setiastro/saspro/sfcc.py +1530 -0
  312. setiastro/saspro/shortcuts.py +3125 -0
  313. setiastro/saspro/signature_insert.py +1106 -0
  314. setiastro/saspro/stacking_suite.py +19069 -0
  315. setiastro/saspro/star_alignment.py +7383 -0
  316. setiastro/saspro/star_alignment_preset.py +329 -0
  317. setiastro/saspro/star_metrics.py +49 -0
  318. setiastro/saspro/star_spikes.py +769 -0
  319. setiastro/saspro/star_stretch.py +542 -0
  320. setiastro/saspro/stat_stretch.py +554 -0
  321. setiastro/saspro/status_log_dock.py +78 -0
  322. setiastro/saspro/subwindow.py +3523 -0
  323. setiastro/saspro/supernovaasteroidhunter.py +1719 -0
  324. setiastro/saspro/swap_manager.py +134 -0
  325. setiastro/saspro/torch_backend.py +89 -0
  326. setiastro/saspro/torch_rejection.py +434 -0
  327. setiastro/saspro/translations/all_source_strings.json +4726 -0
  328. setiastro/saspro/translations/ar_translations.py +4096 -0
  329. setiastro/saspro/translations/de_translations.py +3728 -0
  330. setiastro/saspro/translations/es_translations.py +4169 -0
  331. setiastro/saspro/translations/fr_translations.py +4090 -0
  332. setiastro/saspro/translations/hi_translations.py +3803 -0
  333. setiastro/saspro/translations/integrate_translations.py +271 -0
  334. setiastro/saspro/translations/it_translations.py +4728 -0
  335. setiastro/saspro/translations/ja_translations.py +3834 -0
  336. setiastro/saspro/translations/pt_translations.py +3847 -0
  337. setiastro/saspro/translations/ru_translations.py +3082 -0
  338. setiastro/saspro/translations/saspro_ar.qm +0 -0
  339. setiastro/saspro/translations/saspro_ar.ts +16019 -0
  340. setiastro/saspro/translations/saspro_de.qm +0 -0
  341. setiastro/saspro/translations/saspro_de.ts +14548 -0
  342. setiastro/saspro/translations/saspro_es.qm +0 -0
  343. setiastro/saspro/translations/saspro_es.ts +16202 -0
  344. setiastro/saspro/translations/saspro_fr.qm +0 -0
  345. setiastro/saspro/translations/saspro_fr.ts +15870 -0
  346. setiastro/saspro/translations/saspro_hi.qm +0 -0
  347. setiastro/saspro/translations/saspro_hi.ts +14855 -0
  348. setiastro/saspro/translations/saspro_it.qm +0 -0
  349. setiastro/saspro/translations/saspro_it.ts +19046 -0
  350. setiastro/saspro/translations/saspro_ja.qm +0 -0
  351. setiastro/saspro/translations/saspro_ja.ts +14980 -0
  352. setiastro/saspro/translations/saspro_pt.qm +0 -0
  353. setiastro/saspro/translations/saspro_pt.ts +15024 -0
  354. setiastro/saspro/translations/saspro_ru.qm +0 -0
  355. setiastro/saspro/translations/saspro_ru.ts +11835 -0
  356. setiastro/saspro/translations/saspro_sw.qm +0 -0
  357. setiastro/saspro/translations/saspro_sw.ts +15237 -0
  358. setiastro/saspro/translations/saspro_uk.qm +0 -0
  359. setiastro/saspro/translations/saspro_uk.ts +15248 -0
  360. setiastro/saspro/translations/saspro_zh.qm +0 -0
  361. setiastro/saspro/translations/saspro_zh.ts +15289 -0
  362. setiastro/saspro/translations/sw_translations.py +3897 -0
  363. setiastro/saspro/translations/uk_translations.py +3929 -0
  364. setiastro/saspro/translations/zh_translations.py +3910 -0
  365. setiastro/saspro/versioning.py +77 -0
  366. setiastro/saspro/view_bundle.py +1558 -0
  367. setiastro/saspro/wavescale_hdr.py +648 -0
  368. setiastro/saspro/wavescale_hdr_preset.py +101 -0
  369. setiastro/saspro/wavescalede.py +683 -0
  370. setiastro/saspro/wavescalede_preset.py +230 -0
  371. setiastro/saspro/wcs_update.py +374 -0
  372. setiastro/saspro/whitebalance.py +540 -0
  373. setiastro/saspro/widgets/__init__.py +48 -0
  374. setiastro/saspro/widgets/common_utilities.py +306 -0
  375. setiastro/saspro/widgets/graphics_views.py +122 -0
  376. setiastro/saspro/widgets/image_utils.py +518 -0
  377. setiastro/saspro/widgets/minigame/game.js +991 -0
  378. setiastro/saspro/widgets/minigame/index.html +53 -0
  379. setiastro/saspro/widgets/minigame/style.css +241 -0
  380. setiastro/saspro/widgets/preview_dialogs.py +280 -0
  381. setiastro/saspro/widgets/resource_monitor.py +313 -0
  382. setiastro/saspro/widgets/spinboxes.py +290 -0
  383. setiastro/saspro/widgets/themed_buttons.py +13 -0
  384. setiastro/saspro/widgets/wavelet_utils.py +331 -0
  385. setiastro/saspro/wimi.py +7367 -0
  386. setiastro/saspro/wims.py +588 -0
  387. setiastro/saspro/window_shelf.py +185 -0
  388. setiastro/saspro/xisf.py +1213 -0
  389. setiastrosuitepro-1.6.7.dist-info/METADATA +279 -0
  390. setiastrosuitepro-1.6.7.dist-info/RECORD +394 -0
  391. setiastrosuitepro-1.6.7.dist-info/WHEEL +4 -0
  392. setiastrosuitepro-1.6.7.dist-info/entry_points.txt +6 -0
  393. setiastrosuitepro-1.6.7.dist-info/licenses/LICENSE +674 -0
  394. setiastrosuitepro-1.6.7.dist-info/licenses/license.txt +2580 -0
@@ -0,0 +1,570 @@
1
+ # pro/resources.py
2
+ """
3
+ Centralized resource paths for Seti Astro Suite Pro.
4
+
5
+ This module provides a single source of truth for all icon and resource paths,
6
+ handling both PyInstaller frozen builds and development environments.
7
+
8
+ Usage:
9
+ from setiastro.saspro.resources import Icons, Resources
10
+
11
+ icon = QIcon(Icons.WRENCH)
12
+ data_path = Resources.SASP_DATA
13
+ """
14
+ from __future__ import annotations
15
+ import os
16
+ import sys
17
+ from functools import lru_cache
18
+
19
+
20
+ def _get_base_path() -> str:
21
+ """Get base path for resources (PyInstaller, installed package, or development)."""
22
+ if hasattr(sys, '_MEIPASS'):
23
+ return sys._MEIPASS
24
+
25
+ # First, check if we're running from source (setiastrosuitepro.py exists)
26
+ # This takes priority when running the script directly from source
27
+ try:
28
+ # Check if we can find it via __main__ module (most reliable)
29
+ if '__main__' in sys.modules:
30
+ main_module = sys.modules['__main__']
31
+ if hasattr(main_module, '__file__') and main_module.__file__:
32
+ main_file = main_module.__file__
33
+ main_dir = os.path.dirname(os.path.abspath(main_file))
34
+
35
+ # Case 1: Running setiastrosuitepro.py directly
36
+ if os.path.basename(main_file) == 'setiastrosuitepro.py':
37
+ images_dir = os.path.join(main_dir, 'images')
38
+ if os.path.exists(images_dir):
39
+ return main_dir
40
+
41
+ # Case 2: Running as module (python -m setiastro.saspro)
42
+ # __main__.py is at src/setiastro/saspro/__main__.py
43
+ # Need to go up 4 levels to reach project root
44
+ if os.path.basename(main_file) == '__main__.py':
45
+ # Walk up from __main__.py to find project root with images/
46
+ search_dir = main_dir
47
+ for _ in range(6): # Don't go too far up
48
+ images_dir = os.path.join(search_dir, 'images')
49
+ if os.path.exists(images_dir):
50
+ return search_dir
51
+ parent = os.path.dirname(search_dir)
52
+ if parent == search_dir: # Reached filesystem root
53
+ break
54
+ search_dir = parent
55
+
56
+ # Check current working directory for setiastrosuitepro.py
57
+ # This handles the case where user runs: python setiastrosuitepro.py
58
+ cwd = os.getcwd()
59
+ main_script = os.path.join(cwd, 'setiastrosuitepro.py')
60
+ if os.path.exists(main_script):
61
+ images_dir = os.path.join(cwd, 'images')
62
+ if os.path.exists(images_dir):
63
+ return cwd
64
+
65
+ # Also check parent directories (in case we're in a subdirectory)
66
+ # Walk up from current file location looking for images/ directory
67
+ current_file = os.path.abspath(__file__)
68
+ search_dir = os.path.dirname(current_file)
69
+ for _ in range(6): # Don't go too far up
70
+ images_dir = os.path.join(search_dir, 'images')
71
+ if os.path.exists(images_dir):
72
+ return search_dir
73
+ parent = os.path.dirname(search_dir)
74
+ if parent == search_dir: # Reached filesystem root
75
+ break
76
+ search_dir = parent
77
+ except Exception:
78
+ pass
79
+
80
+ # Development: resources are in package directory (src/setiastro/images/)
81
+ # File is at: src/setiastro/saspro/resources.py
82
+ # Check if images/ exists in the setiastro package directory
83
+ current_file = os.path.abspath(__file__)
84
+ # Go up from resources.py -> saspro -> setiastro (package directory)
85
+ package_dir = os.path.dirname(os.path.dirname(current_file))
86
+ images_dir = os.path.join(package_dir, 'images')
87
+ if os.path.exists(images_dir):
88
+ return package_dir
89
+
90
+ # Fallback: try project root (for backward compatibility)
91
+ # Go up from resources.py -> saspro -> setiastro -> src -> project root
92
+ base = os.path.dirname(os.path.dirname(package_dir))
93
+ images_dir = os.path.join(base, 'images')
94
+ if os.path.exists(images_dir):
95
+ return base
96
+
97
+ # Fallback: try going up one more level (in case structure is different)
98
+ base = os.path.dirname(base)
99
+ if os.path.exists(os.path.join(base, 'images')):
100
+ return base
101
+
102
+ # Check if we're in an installed package (last resort)
103
+ # When installed via pip, the package is in site-packages
104
+ try:
105
+ import setiastro
106
+ package_dir = os.path.dirname(os.path.abspath(setiastro.__file__))
107
+ # Check if images/ exists at package root level (for pip-installed packages)
108
+ # The images/ directory should be at the same level as setiastro/ in site-packages
109
+ package_parent = os.path.dirname(package_dir)
110
+ images_dir = os.path.join(package_parent, 'images')
111
+ if os.path.exists(images_dir):
112
+ return package_parent
113
+
114
+ # Also check if images/ is inside the package directory
115
+ images_in_package = os.path.join(package_dir, 'images')
116
+ if os.path.exists(images_in_package):
117
+ return package_dir
118
+ except (ImportError, AttributeError):
119
+ pass
120
+
121
+ # Last resort: return the calculated path anyway
122
+ return os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(current_file))))
123
+
124
+
125
+ def _resource_path(filename: str) -> str:
126
+ base = _get_base_path()
127
+ fn = filename
128
+
129
+ is_img = fn.lower().endswith(('.png','.ico','.gif','.icns','.svg','.jpg','.jpeg','.bmp'))
130
+ if is_img:
131
+ candidates = [
132
+ os.path.join(base, 'images', fn),
133
+ os.path.join(base, 'setiastro', 'images', fn),
134
+ os.path.join(base, 'setiastro', 'saspro', 'images', fn),
135
+ ]
136
+ for p in candidates:
137
+ if os.path.exists(p):
138
+ return p
139
+
140
+ # data / other files
141
+ candidates = [
142
+ os.path.join(base, fn),
143
+ os.path.join(base, 'setiastro', fn),
144
+ os.path.join(base, 'setiastro', 'saspro', fn),
145
+ ]
146
+ for p in candidates:
147
+ if os.path.exists(p):
148
+ return p
149
+
150
+ return os.path.join(base, fn)
151
+
152
+
153
+ class Icons:
154
+ """
155
+ Centralized icon paths.
156
+
157
+ All paths are computed lazily and cached.
158
+ Access via class attributes: Icons.WRENCH, Icons.HISTOGRAM, etc.
159
+ """
160
+
161
+ # Application
162
+ APP = property(lambda self: _resource_path('astrosuitepro.png'))
163
+ APP_ICO = property(lambda self: _resource_path('astrosuitepro.ico'))
164
+ BACKGROUND = property(lambda self: _resource_path('background.png'))
165
+
166
+ # Processing tools
167
+ GREEN = property(lambda self: _resource_path('green.png'))
168
+ NEUTRAL = property(lambda self: _resource_path('neutral.png'))
169
+ WHITE_BALANCE = property(lambda self: _resource_path('whitebalance.png'))
170
+ MORPHOLOGY = property(lambda self: _resource_path('morpho.png'))
171
+ CLAHE = property(lambda self: _resource_path('clahe.png'))
172
+ HDR = property(lambda self: _resource_path('hdr.png'))
173
+ INVERT = property(lambda self: _resource_path('invert.png'))
174
+
175
+ # Star operations
176
+ STARNET = property(lambda self: _resource_path('starnet.png'))
177
+ STAR_ADD = property(lambda self: _resource_path('staradd.png'))
178
+ STAR_ALIGN = property(lambda self: _resource_path('staralign.png'))
179
+ STAR_REGISTRATION = property(lambda self: _resource_path('starregistration.png'))
180
+ STAR_SPIKE = property(lambda self: _resource_path('starspike.png'))
181
+ ASTRO_SPIKE = property(lambda self: _resource_path('Astro_Spikes.png'))
182
+ STAR_STRETCH = property(lambda self: _resource_path('starstretch.png'))
183
+
184
+ # Luminance
185
+ L_EXTRACT = property(lambda self: _resource_path('LExtract.png'))
186
+ L_INSERT = property(lambda self: _resource_path('LInsert.png'))
187
+
188
+ # Slots (0-9)
189
+ SLOT_0 = property(lambda self: _resource_path('slot0.png'))
190
+ SLOT_1 = property(lambda self: _resource_path('slot1.png'))
191
+ SLOT_2 = property(lambda self: _resource_path('slot2.png'))
192
+ SLOT_3 = property(lambda self: _resource_path('slot3.png'))
193
+ SLOT_4 = property(lambda self: _resource_path('slot4.png'))
194
+ SLOT_5 = property(lambda self: _resource_path('slot5.png'))
195
+ SLOT_6 = property(lambda self: _resource_path('slot6.png'))
196
+ SLOT_7 = property(lambda self: _resource_path('slot7.png'))
197
+ SLOT_8 = property(lambda self: _resource_path('slot8.png'))
198
+ SLOT_9 = property(lambda self: _resource_path('slot9.png'))
199
+
200
+ # RGB operations
201
+ RGB_COMBO = property(lambda self: _resource_path('rgbcombo.png'))
202
+ RGB_EXTRACT = property(lambda self: _resource_path('rgbextract.png'))
203
+ RGB_ALIGN = property(lambda self: _resource_path('rgbalign.png'))
204
+ COPY_SLOT = property(lambda self: _resource_path('copyslot.png'))
205
+
206
+ # External tools
207
+ GRAXPERT = property(lambda self: _resource_path('graxpert.png'))
208
+ COSMIC = property(lambda self: _resource_path('cosmic.png'))
209
+ COSMIC_SAT = property(lambda self: _resource_path('cosmicsat.png'))
210
+
211
+ # Image operations
212
+ CROP = property(lambda self: _resource_path('cropicon.png'))
213
+ OPEN_FILE = property(lambda self: _resource_path('openfile.png'))
214
+ ABE = property(lambda self: _resource_path('abeicon.png'))
215
+ BLASTER = property(lambda self: _resource_path('blaster.png'))
216
+
217
+ # Undo/Redo
218
+ UNDO = property(lambda self: _resource_path('undoicon.png'))
219
+ REDO = property(lambda self: _resource_path('redoicon.png'))
220
+
221
+ # Transformations
222
+ FLIP_HORIZONTAL = property(lambda self: _resource_path('fliphorizontal.png'))
223
+ FLIP_VERTICAL = property(lambda self: _resource_path('flipvertical.png'))
224
+ ROTATE_CW = property(lambda self: _resource_path('rotateclockwise.png'))
225
+ ROTATE_CCW = property(lambda self: _resource_path('rotatecounterclockwise.png'))
226
+ ROTATE_180 = property(lambda self: _resource_path('rotate180.png'))
227
+ ROTATE_ANY = property(lambda self: _resource_path('rotatearbitrary.png'))
228
+ RESCALE = property(lambda self: _resource_path('rescale.png'))
229
+
230
+ # Masks
231
+ MASK_CREATE = property(lambda self: _resource_path('maskcreate.png'))
232
+ MASK_APPLY = property(lambda self: _resource_path('maskapply.png'))
233
+ MASK_REMOVE = property(lambda self: _resource_path('maskremove.png'))
234
+
235
+ # Analysis
236
+ PIXEL_MATH = property(lambda self: _resource_path('pixelmath.png'))
237
+ HISTOGRAM = property(lambda self: _resource_path('histogram.png'))
238
+ MOSAIC = property(lambda self: _resource_path('mosaic.png'))
239
+ PLATE_SOLVE = property(lambda self: _resource_path('platesolve.png'))
240
+ PSF = property(lambda self: _resource_path('psf.png'))
241
+ ISOPHOTE = property(lambda self: _resource_path('isophote.png'))
242
+
243
+ # Stacking
244
+ STACKING = property(lambda self: _resource_path('stacking.png'))
245
+ LIVE_STACKING = property(lambda self: _resource_path('livestacking.png'))
246
+ IMAGE_COMBINE = property(lambda self: _resource_path('imagecombine.png'))
247
+
248
+ # Moon phase (WIMS)
249
+ MOON_NEW = property(lambda self: _resource_path('new_moon.png'))
250
+ MOON_WAXING_CRES_1 = property(lambda self: _resource_path('waxing_crescent_1.png'))
251
+ MOON_WAXING_CRES_2 = property(lambda self: _resource_path('waxing_crescent_2.png'))
252
+ MOON_WAXING_CRES_3 = property(lambda self: _resource_path('waxing_crescent_3.png'))
253
+ MOON_WAXING_CRES_4 = property(lambda self: _resource_path('waxing_crescent_4.png'))
254
+ MOON_WAXING_CRES_5 = property(lambda self: _resource_path('waxing_crescent_5.png'))
255
+
256
+ MOON_FIRST_QUARTER = property(lambda self: _resource_path('first_quarter.png'))
257
+
258
+ MOON_WAXING_GIB_1 = property(lambda self: _resource_path('waxing_gibbous_1.png'))
259
+ MOON_WAXING_GIB_2 = property(lambda self: _resource_path('waxing_gibbous_2.png'))
260
+ MOON_WAXING_GIB_3 = property(lambda self: _resource_path('waxing_gibbous_3.png'))
261
+ MOON_WAXING_GIB_4 = property(lambda self: _resource_path('waxing_gibbous_4.png'))
262
+ MOON_WAXING_GIB_5 = property(lambda self: _resource_path('waxing_gibbous_5.png'))
263
+
264
+ MOON_FULL = property(lambda self: _resource_path('full_moon.png'))
265
+
266
+ MOON_WANING_GIB_1 = property(lambda self: _resource_path('waning_gibbous_1.png'))
267
+ MOON_WANING_GIB_2 = property(lambda self: _resource_path('waning_gibbous_2.png'))
268
+ MOON_WANING_GIB_3 = property(lambda self: _resource_path('waning_gibbous_3.png'))
269
+ MOON_WANING_GIB_4 = property(lambda self: _resource_path('waning_gibbous_4.png'))
270
+ MOON_WANING_GIB_5 = property(lambda self: _resource_path('waning_gibbous_5.png'))
271
+
272
+ MOON_LAST_QUARTER = property(lambda self: _resource_path('last_quarter.png'))
273
+
274
+ MOON_WANING_CRES_1 = property(lambda self: _resource_path('waning_crescent_1.png'))
275
+ MOON_WANING_CRES_2 = property(lambda self: _resource_path('waning_crescent_2.png'))
276
+ MOON_WANING_CRES_3 = property(lambda self: _resource_path('waning_crescent_3.png'))
277
+ MOON_WANING_CRES_4 = property(lambda self: _resource_path('waning_crescent_4.png'))
278
+ MOON_WANING_CRES_5 = property(lambda self: _resource_path('waning_crescent_5.png'))
279
+
280
+
281
+ # Special features
282
+ SUPERNOVA = property(lambda self: _resource_path('supernova.png'))
283
+ PEDESTAL = property(lambda self: _resource_path('pedestal.png'))
284
+ APERTURE = property(lambda self: _resource_path('aperture.png'))
285
+ JWST_PUPIL = property(lambda self: _resource_path('jwstpupil.png'))
286
+ SIGNATURE = property(lambda self: _resource_path('pen.png'))
287
+ HR_DIAGRAM = property(lambda self: _resource_path('HRDiagram.png'))
288
+ EXOPLANET = property(lambda self: _resource_path('exoicon.png'))
289
+
290
+ # Deconvolution & filters
291
+ CONVO = property(lambda self: _resource_path('convo.png'))
292
+ FREQ_SEP = property(lambda self: _resource_path('freqsep.png'))
293
+ MULTISCALE_DECOMP = property(lambda self: _resource_path('multiscale_decomp.png'))
294
+ CONT_SUB = property(lambda self: _resource_path('contsub.png'))
295
+ HALO = property(lambda self: _resource_path('halo.png'))
296
+ ABERRATION = property(lambda self: _resource_path('aberration.png'))
297
+
298
+ # Color
299
+ SPCC = property(lambda self: _resource_path('spcc.png'))
300
+ DSE = property(lambda self: _resource_path('dse.png'))
301
+ COLOR_WHEEL = property(lambda self: _resource_path('colorwheel.png'))
302
+ SELECTIVE_COLOR = property(lambda self: _resource_path('selectivecolor.png'))
303
+ NB_TO_RGB = property(lambda self: _resource_path('nbtorgb.png'))
304
+
305
+ # Stretching
306
+ STAT_STRETCH = property(lambda self: _resource_path('statstretch.png'))
307
+ CURVES = property(lambda self: _resource_path('curves.png'))
308
+ UHS = property(lambda self: _resource_path('uhs.png'))
309
+
310
+ # UI elements
311
+ WRENCH = property(lambda self: _resource_path('wrench_icon.png'))
312
+ EYE = property(lambda self: _resource_path('eye.png'))
313
+ DISK = property(lambda self: _resource_path('disk.png'))
314
+ NUKE = property(lambda self: _resource_path('nuke.png'))
315
+ GRID = property(lambda self: _resource_path('gridicon.png'))
316
+ FONT = property(lambda self: _resource_path('font.png'))
317
+ CSV = property(lambda self: _resource_path('cvs.png'))
318
+ PPP = property(lambda self: _resource_path('ppp.png'))
319
+ SCRIPT = property(lambda self: _resource_path('script.png'))
320
+ ACV = property(lambda self: _resource_path('acv_icon.png'))
321
+
322
+ # Blink & comparison
323
+ BLINK = property(lambda self: _resource_path('blink.png'))
324
+ HUBBLE = property(lambda self: _resource_path('hubble.png'))
325
+ COLLAGE = property(lambda self: _resource_path('collage.png'))
326
+ ANNOTATED = property(lambda self: _resource_path('annotated.png'))
327
+
328
+ # WIMS/WIMI
329
+ WIMS = property(lambda self: _resource_path('wims.png'))
330
+ WIMI = property(lambda self: _resource_path('wimi_icon_256x256.png'))
331
+
332
+ # Other
333
+ LINEAR_FIT = property(lambda self: _resource_path('linearfit.png'))
334
+ DEBAYER = property(lambda self: _resource_path('debayer.png'))
335
+ FUNCTION_BUNDLES = property(lambda self: _resource_path('functionbundle.png'))
336
+ VIEW_BUNDLES = property(lambda self: _resource_path('viewbundle.png'))
337
+
338
+
339
+ class Resources:
340
+ """
341
+ Centralized data resource paths.
342
+ """
343
+ SASP_DATA = property(lambda self: _resource_path('data/SASP_data.fits'))
344
+ ASTROBIN_FILTERS_CSV = property(lambda self: _resource_path('data/catalogs/astrobin_filters.csv'))
345
+ SPINNER_GIF = property(lambda self: _resource_path('spinner.gif'))
346
+
347
+
348
+ # Singleton instances for easy access
349
+ _icons_instance = None
350
+ _resources_instance = None
351
+
352
+
353
+ def get_icons() -> Icons:
354
+ """Get the Icons singleton instance."""
355
+ global _icons_instance
356
+ if _icons_instance is None:
357
+ _icons_instance = Icons()
358
+ return _icons_instance
359
+
360
+
361
+ def get_resources() -> Resources:
362
+ """Get the Resources singleton instance."""
363
+ global _resources_instance
364
+ if _resources_instance is None:
365
+ _resources_instance = Resources()
366
+ return _resources_instance
367
+
368
+
369
+ # Convenience functions for direct path access
370
+ @lru_cache(maxsize=128)
371
+ def get_icon_path(name: str) -> str:
372
+ """
373
+ Get icon path by name.
374
+
375
+ Args:
376
+ name: Icon filename (with or without extension)
377
+
378
+ Returns:
379
+ Full path to icon file
380
+
381
+ Example:
382
+ path = get_icon_path('wrench_icon.png')
383
+ path = get_icon_path('histogram') # .png added automatically
384
+ """
385
+ if not name.endswith(('.png', '.ico', '.gif', '.svg')):
386
+ name = f"{name}.png"
387
+ return _resource_path(name)
388
+
389
+
390
+ @lru_cache(maxsize=32)
391
+ def get_data_path(name: str) -> str:
392
+ """
393
+ Get data file path by name.
394
+
395
+ Args:
396
+ name: Data filename
397
+
398
+ Returns:
399
+ Full path to data file
400
+ """
401
+ return _resource_path(name)
402
+
403
+
404
+ # Legacy compatibility: export paths as module-level variables
405
+ # These match the original variable names in setiastrosuitepro.py
406
+ def _init_legacy_paths():
407
+ """Initialize legacy path variables for backward compatibility."""
408
+ return {
409
+ 'icon_path': get_icon_path('astrosuitepro.png'),
410
+ 'windowslogo_path': get_icon_path('astrosuitepro.ico'),
411
+ 'green_path': get_icon_path('green.png'),
412
+ 'neutral_path': get_icon_path('neutral.png'),
413
+ 'whitebalance_path': get_icon_path('whitebalance.png'),
414
+ 'morpho_path': get_icon_path('morpho.png'),
415
+ 'clahe_path': get_icon_path('clahe.png'),
416
+ 'starnet_path': get_icon_path('starnet.png'),
417
+ 'staradd_path': get_icon_path('staradd.png'),
418
+ 'LExtract_path': get_icon_path('LExtract.png'),
419
+ 'LInsert_path': get_icon_path('LInsert.png'),
420
+ 'slot0_path': get_icon_path('slot0.png'),
421
+ 'slot1_path': get_icon_path('slot1.png'),
422
+ 'slot2_path': get_icon_path('slot2.png'),
423
+ 'slot3_path': get_icon_path('slot3.png'),
424
+ 'slot4_path': get_icon_path('slot4.png'),
425
+ 'slot5_path': get_icon_path('slot5.png'),
426
+ 'slot6_path': get_icon_path('slot6.png'),
427
+ 'slot7_path': get_icon_path('slot7.png'),
428
+ 'slot8_path': get_icon_path('slot8.png'),
429
+ 'slot9_path': get_icon_path('slot9.png'),
430
+ 'acv_icon_path': get_icon_path('acv_icon.png'),
431
+
432
+ 'moon_new_path': get_icon_path('new_moon.png'),
433
+ 'moon_waxing_crescent_1_path': get_icon_path('waxing_crescent_1.png'),
434
+ 'moon_waxing_crescent_2_path': get_icon_path('waxing_crescent_2.png'),
435
+ 'moon_waxing_crescent_3_path': get_icon_path('waxing_crescent_3.png'),
436
+ 'moon_waxing_crescent_4_path': get_icon_path('waxing_crescent_4.png'),
437
+ 'moon_waxing_crescent_5_path': get_icon_path('waxing_crescent_5.png'),
438
+
439
+ 'moon_first_quarter_path': get_icon_path('first_quarter.png'),
440
+
441
+ 'moon_waxing_gibbous_1_path': get_icon_path('waxing_gibbous_1.png'),
442
+ 'moon_waxing_gibbous_2_path': get_icon_path('waxing_gibbous_2.png'),
443
+ 'moon_waxing_gibbous_3_path': get_icon_path('waxing_gibbous_3.png'),
444
+ 'moon_waxing_gibbous_4_path': get_icon_path('waxing_gibbous_4.png'),
445
+ 'moon_waxing_gibbous_5_path': get_icon_path('waxing_gibbous_5.png'),
446
+
447
+ 'moon_full_path': get_icon_path('full_moon.png'),
448
+
449
+ 'moon_waning_gibbous_1_path': get_icon_path('waning_gibbous_1.png'),
450
+ 'moon_waning_gibbous_2_path': get_icon_path('waning_gibbous_2.png'),
451
+ 'moon_waning_gibbous_3_path': get_icon_path('waning_gibbous_3.png'),
452
+ 'moon_waning_gibbous_4_path': get_icon_path('waning_gibbous_4.png'),
453
+ 'moon_waning_gibbous_5_path': get_icon_path('waning_gibbous_5.png'),
454
+
455
+ 'moon_last_quarter_path': get_icon_path('last_quarter.png'),
456
+
457
+ 'moon_waning_crescent_1_path': get_icon_path('waning_crescent_1.png'),
458
+ 'moon_waning_crescent_2_path': get_icon_path('waning_crescent_2.png'),
459
+ 'moon_waning_crescent_3_path': get_icon_path('waning_crescent_3.png'),
460
+ 'moon_waning_crescent_4_path': get_icon_path('waning_crescent_4.png'),
461
+ 'moon_waning_crescent_5_path': get_icon_path('waning_crescent_5.png'),
462
+
463
+ 'rgbcombo_path': get_icon_path('rgbcombo.png'),
464
+ 'rgbextract_path': get_icon_path('rgbextract.png'),
465
+ 'copyslot_path': get_icon_path('copyslot.png'),
466
+ 'graxperticon_path': get_icon_path('graxpert.png'),
467
+ 'cropicon_path': get_icon_path('cropicon.png'),
468
+ 'openfile_path': get_icon_path('openfile.png'),
469
+ 'abeicon_path': get_icon_path('abeicon.png'),
470
+ 'undoicon_path': get_icon_path('undoicon.png'),
471
+ 'redoicon_path': get_icon_path('redoicon.png'),
472
+ 'blastericon_path': get_icon_path('blaster.png'),
473
+ 'hdr_path': get_icon_path('hdr.png'),
474
+ 'invert_path': get_icon_path('invert.png'),
475
+ 'fliphorizontal_path': get_icon_path('fliphorizontal.png'),
476
+ 'flipvertical_path': get_icon_path('flipvertical.png'),
477
+ 'rotateclockwise_path': get_icon_path('rotateclockwise.png'),
478
+ 'rotatecounterclockwise_path': get_icon_path('rotatecounterclockwise.png'),
479
+ 'rotate180_path': get_icon_path('rotate180.png'),
480
+ 'rotatearbitrary_path': get_icon_path('rotatearbitrary.png'),
481
+ 'maskcreate_path': get_icon_path('maskcreate.png'),
482
+ 'maskapply_path': get_icon_path('maskapply.png'),
483
+ 'maskremove_path': get_icon_path('maskremove.png'),
484
+ 'pixelmath_path': get_icon_path('pixelmath.png'),
485
+ 'histogram_path': get_icon_path('histogram.png'),
486
+ 'mosaic_path': get_icon_path('mosaic.png'),
487
+ 'rescale_path': get_icon_path('rescale.png'),
488
+ 'staralign_path': get_icon_path('staralign.png'),
489
+ 'mask_path': get_icon_path('maskapply.png'),
490
+ 'platesolve_path': get_icon_path('platesolve.png'),
491
+ 'psf_path': get_icon_path('psf.png'),
492
+ 'supernova_path': get_icon_path('supernova.png'),
493
+ 'starregistration_path': get_icon_path('starregistration.png'),
494
+ 'stacking_path': get_icon_path('stacking.png'),
495
+ 'pedestal_icon_path': get_icon_path('pedestal.png'),
496
+ 'starspike_path': get_icon_path('starspike.png'),
497
+ 'astrospike_path': get_icon_path('Astro_Spikes.png'),
498
+ 'aperture_path': get_icon_path('aperture.png'),
499
+ 'jwstpupil_path': get_icon_path('jwstpupil.png'),
500
+ 'signature_icon_path': get_icon_path('pen.png'),
501
+ 'livestacking_path': get_icon_path('livestacking.png'),
502
+ 'hrdiagram_path': get_icon_path('HRDiagram.png'),
503
+ 'convoicon_path': get_icon_path('convo.png'),
504
+ 'spcc_icon_path': get_icon_path('spcc.png'),
505
+ 'sasp_data_path': get_data_path('data/SASP_data.fits'),
506
+ 'exoicon_path': get_icon_path('exoicon.png'),
507
+ 'peeker_icon': get_icon_path('gridicon.png'),
508
+ 'dse_icon_path': get_icon_path('dse.png'),
509
+ 'astrobin_filters_csv_path': get_data_path('data/catalogs/astrobin_filters.csv'),
510
+ 'isophote_path': get_icon_path('isophote.png'),
511
+ 'statstretch_path': get_icon_path('statstretch.png'),
512
+ 'starstretch_path': get_icon_path('starstretch.png'),
513
+ 'curves_path': get_icon_path('curves.png'),
514
+ 'disk_path': get_icon_path('disk.png'),
515
+ 'uhs_path': get_icon_path('uhs.png'),
516
+ 'blink_path': get_icon_path('blink.png'),
517
+ 'ppp_path': get_icon_path('ppp.png'),
518
+ 'nbtorgb_path': get_icon_path('nbtorgb.png'),
519
+ 'freqsep_path': get_icon_path('freqsep.png'),
520
+ 'multiscale_decomp_path': get_icon_path('multiscale_decomp.png'),
521
+ 'contsub_path': get_icon_path('contsub.png'),
522
+ 'halo_path': get_icon_path('halo.png'),
523
+ 'cosmic_path': get_icon_path('cosmic.png'),
524
+ 'satellite_path': get_icon_path('cosmicsat.png'),
525
+ 'imagecombine_path': get_icon_path('imagecombine.png'),
526
+ 'wrench_path': get_icon_path('wrench_icon.png'),
527
+ 'eye_icon_path': get_icon_path('eye.png'),
528
+ 'disk_icon_path': get_icon_path('disk.png'),
529
+ 'nuke_path': get_icon_path('nuke.png'),
530
+ 'hubble_path': get_icon_path('hubble.png'),
531
+ 'collage_path': get_icon_path('collage.png'),
532
+ 'annotated_path': get_icon_path('annotated.png'),
533
+ 'colorwheel_path': get_icon_path('colorwheel.png'),
534
+ 'font_path': get_icon_path('font.png'),
535
+ 'csv_icon_path': get_icon_path('cvs.png'),
536
+ 'spinner_path': get_data_path('spinner.gif'),
537
+ 'wims_path': get_icon_path('wims.png'),
538
+ 'wimi_path': get_icon_path('wimi_icon_256x256.png'),
539
+ 'linearfit_path': get_icon_path('linearfit.png'),
540
+ 'debayer_path': get_icon_path('debayer.png'),
541
+ 'aberration_path': get_icon_path('aberration.png'),
542
+ 'functionbundles_path': get_icon_path('functionbundle.png'),
543
+ 'viewbundles_path': get_icon_path('viewbundle.png'),
544
+ 'selectivecolor_path': get_icon_path('selectivecolor.png'),
545
+ 'rgbalign_path': get_icon_path('rgbalign.png'),
546
+ 'background_path': get_icon_path('background.png'),
547
+ 'script_icon_path': get_icon_path('script.png'),
548
+ }
549
+
550
+
551
+ # Export all legacy paths as module-level variables
552
+ _legacy = _init_legacy_paths()
553
+ globals().update(_legacy)
554
+
555
+
556
+ # Background for startup
557
+ background_startup_path = _resource_path('Background_startup.jpg')
558
+ _legacy['background_startup_path'] = background_startup_path
559
+
560
+ # QML helper
561
+ resource_monitor_qml = _resource_path(os.path.join("qml", "ResourceMonitor.qml"))
562
+
563
+ # Export list for `from setiastro.saspro.resources import *`
564
+ __all__ = [
565
+ 'Icons', 'Resources',
566
+ 'get_icons', 'get_resources',
567
+ 'get_icon_path', 'get_data_path',
568
+ 'background_startup_path',
569
+ ] + list(_legacy.keys())
570
+