graxpert 3.2.0a0.dev4__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.
Files changed (204) hide show
  1. graxpert-3.2.0a0.dev4/MANIFEST.in +12 -0
  2. graxpert-3.2.0a0.dev4/PKG-INFO +219 -0
  3. graxpert-3.2.0a0.dev4/README.md +153 -0
  4. graxpert-3.2.0a0.dev4/graxpert/AstroImageRepository.py +114 -0
  5. graxpert-3.2.0a0.dev4/graxpert/__init__.py +1 -0
  6. graxpert-3.2.0a0.dev4/graxpert/__pycache__/AstroImageRepository.cpython-311.pyc +0 -0
  7. graxpert-3.2.0a0.dev4/graxpert/__pycache__/AstroImageRepository.cpython-312.pyc +0 -0
  8. graxpert-3.2.0a0.dev4/graxpert/__pycache__/AstroImageRepository.cpython-313.pyc +0 -0
  9. graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-310.pyc +0 -0
  10. graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-311.pyc +0 -0
  11. graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-312.pyc +0 -0
  12. graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-313.pyc +0 -0
  13. graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-310.pyc +0 -0
  14. graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-311.pyc +0 -0
  15. graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-312.pyc +0 -0
  16. graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-313.pyc +0 -0
  17. graxpert-3.2.0a0.dev4/graxpert/__pycache__/app_state.cpython-311.pyc +0 -0
  18. graxpert-3.2.0a0.dev4/graxpert/__pycache__/app_state.cpython-312.pyc +0 -0
  19. graxpert-3.2.0a0.dev4/graxpert/__pycache__/app_state.cpython-313.pyc +0 -0
  20. graxpert-3.2.0a0.dev4/graxpert/__pycache__/astroimage.cpython-311.pyc +0 -0
  21. graxpert-3.2.0a0.dev4/graxpert/__pycache__/astroimage.cpython-312.pyc +0 -0
  22. graxpert-3.2.0a0.dev4/graxpert/__pycache__/astroimage.cpython-313.pyc +0 -0
  23. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_extraction.cpython-311.pyc +0 -0
  24. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_extraction.cpython-312.pyc +0 -0
  25. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_extraction.cpython-313.pyc +0 -0
  26. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_flood_selection.cpython-311.pyc +0 -0
  27. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_flood_selection.cpython-312.pyc +0 -0
  28. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_flood_selection.cpython-313.pyc +0 -0
  29. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_grid_selection.cpython-311.pyc +0 -0
  30. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_grid_selection.cpython-312.pyc +0 -0
  31. graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_grid_selection.cpython-313.pyc +0 -0
  32. graxpert-3.2.0a0.dev4/graxpert/__pycache__/cmdline_tools.cpython-312.pyc +0 -0
  33. graxpert-3.2.0a0.dev4/graxpert/__pycache__/cmdline_tools.cpython-313.pyc +0 -0
  34. graxpert-3.2.0a0.dev4/graxpert/__pycache__/commands.cpython-311.pyc +0 -0
  35. graxpert-3.2.0a0.dev4/graxpert/__pycache__/commands.cpython-312.pyc +0 -0
  36. graxpert-3.2.0a0.dev4/graxpert/__pycache__/commands.cpython-313.pyc +0 -0
  37. graxpert-3.2.0a0.dev4/graxpert/__pycache__/deconvolution.cpython-311.pyc +0 -0
  38. graxpert-3.2.0a0.dev4/graxpert/__pycache__/deconvolution.cpython-312.pyc +0 -0
  39. graxpert-3.2.0a0.dev4/graxpert/__pycache__/deconvolution.cpython-313.pyc +0 -0
  40. graxpert-3.2.0a0.dev4/graxpert/__pycache__/denoising.cpython-311.pyc +0 -0
  41. graxpert-3.2.0a0.dev4/graxpert/__pycache__/denoising.cpython-312.pyc +0 -0
  42. graxpert-3.2.0a0.dev4/graxpert/__pycache__/denoising.cpython-313.pyc +0 -0
  43. graxpert-3.2.0a0.dev4/graxpert/__pycache__/grid_utils.cpython-311.pyc +0 -0
  44. graxpert-3.2.0a0.dev4/graxpert/__pycache__/grid_utils.cpython-312.pyc +0 -0
  45. graxpert-3.2.0a0.dev4/graxpert/__pycache__/grid_utils.cpython-313.pyc +0 -0
  46. graxpert-3.2.0a0.dev4/graxpert/__pycache__/localization.cpython-311.pyc +0 -0
  47. graxpert-3.2.0a0.dev4/graxpert/__pycache__/localization.cpython-312.pyc +0 -0
  48. graxpert-3.2.0a0.dev4/graxpert/__pycache__/localization.cpython-313.pyc +0 -0
  49. graxpert-3.2.0a0.dev4/graxpert/__pycache__/main.cpython-311.pyc +0 -0
  50. graxpert-3.2.0a0.dev4/graxpert/__pycache__/main.cpython-312.pyc +0 -0
  51. graxpert-3.2.0a0.dev4/graxpert/__pycache__/main.cpython-313.pyc +0 -0
  52. graxpert-3.2.0a0.dev4/graxpert/__pycache__/mp_logging.cpython-311.pyc +0 -0
  53. graxpert-3.2.0a0.dev4/graxpert/__pycache__/mp_logging.cpython-312.pyc +0 -0
  54. graxpert-3.2.0a0.dev4/graxpert/__pycache__/mp_logging.cpython-313.pyc +0 -0
  55. graxpert-3.2.0a0.dev4/graxpert/__pycache__/parallel_processing.cpython-311.pyc +0 -0
  56. graxpert-3.2.0a0.dev4/graxpert/__pycache__/parallel_processing.cpython-312.pyc +0 -0
  57. graxpert-3.2.0a0.dev4/graxpert/__pycache__/parallel_processing.cpython-313.pyc +0 -0
  58. graxpert-3.2.0a0.dev4/graxpert/__pycache__/preferences.cpython-311.pyc +0 -0
  59. graxpert-3.2.0a0.dev4/graxpert/__pycache__/preferences.cpython-312.pyc +0 -0
  60. graxpert-3.2.0a0.dev4/graxpert/__pycache__/preferences.cpython-313.pyc +0 -0
  61. graxpert-3.2.0a0.dev4/graxpert/__pycache__/radialbasisinterpolation.cpython-311.pyc +0 -0
  62. graxpert-3.2.0a0.dev4/graxpert/__pycache__/radialbasisinterpolation.cpython-312.pyc +0 -0
  63. graxpert-3.2.0a0.dev4/graxpert/__pycache__/radialbasisinterpolation.cpython-313.pyc +0 -0
  64. graxpert-3.2.0a0.dev4/graxpert/__pycache__/resource_utils.cpython-311.pyc +0 -0
  65. graxpert-3.2.0a0.dev4/graxpert/__pycache__/resource_utils.cpython-312.pyc +0 -0
  66. graxpert-3.2.0a0.dev4/graxpert/__pycache__/resource_utils.cpython-313.pyc +0 -0
  67. graxpert-3.2.0a0.dev4/graxpert/__pycache__/s3_secrets.cpython-311.pyc +0 -0
  68. graxpert-3.2.0a0.dev4/graxpert/__pycache__/s3_secrets.cpython-312.pyc +0 -0
  69. graxpert-3.2.0a0.dev4/graxpert/__pycache__/s3_secrets.cpython-313.pyc +0 -0
  70. graxpert-3.2.0a0.dev4/graxpert/__pycache__/skyall.cpython-311.pyc +0 -0
  71. graxpert-3.2.0a0.dev4/graxpert/__pycache__/skyall.cpython-312.pyc +0 -0
  72. graxpert-3.2.0a0.dev4/graxpert/__pycache__/skyall.cpython-313.pyc +0 -0
  73. graxpert-3.2.0a0.dev4/graxpert/__pycache__/stretch.cpython-311.pyc +0 -0
  74. graxpert-3.2.0a0.dev4/graxpert/__pycache__/stretch.cpython-312.pyc +0 -0
  75. graxpert-3.2.0a0.dev4/graxpert/__pycache__/stretch.cpython-313.pyc +0 -0
  76. graxpert-3.2.0a0.dev4/graxpert/__pycache__/ui_scaling.cpython-311.pyc +0 -0
  77. graxpert-3.2.0a0.dev4/graxpert/__pycache__/ui_scaling.cpython-312.pyc +0 -0
  78. graxpert-3.2.0a0.dev4/graxpert/__pycache__/ui_scaling.cpython-313.pyc +0 -0
  79. graxpert-3.2.0a0.dev4/graxpert/__pycache__/version.cpython-311.pyc +0 -0
  80. graxpert-3.2.0a0.dev4/graxpert/__pycache__/version.cpython-312.pyc +0 -0
  81. graxpert-3.2.0a0.dev4/graxpert/__pycache__/version.cpython-313.pyc +0 -0
  82. graxpert-3.2.0a0.dev4/graxpert/ai_model_handling.py +215 -0
  83. graxpert-3.2.0a0.dev4/graxpert/app_state.py +10 -0
  84. graxpert-3.2.0a0.dev4/graxpert/application/__init__.py +0 -0
  85. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/__init__.cpython-311.pyc +0 -0
  86. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/__init__.cpython-312.pyc +0 -0
  87. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/__init__.cpython-313.pyc +0 -0
  88. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app.cpython-311.pyc +0 -0
  89. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app.cpython-312.pyc +0 -0
  90. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app.cpython-313.pyc +0 -0
  91. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app_events.cpython-311.pyc +0 -0
  92. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app_events.cpython-312.pyc +0 -0
  93. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app_events.cpython-313.pyc +0 -0
  94. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/eventbus.cpython-311.pyc +0 -0
  95. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/eventbus.cpython-312.pyc +0 -0
  96. graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/eventbus.cpython-313.pyc +0 -0
  97. graxpert-3.2.0a0.dev4/graxpert/application/app.py +741 -0
  98. graxpert-3.2.0a0.dev4/graxpert/application/app_events.py +96 -0
  99. graxpert-3.2.0a0.dev4/graxpert/application/eventbus.py +24 -0
  100. graxpert-3.2.0a0.dev4/graxpert/astroimage.py +308 -0
  101. graxpert-3.2.0a0.dev4/graxpert/background_extraction.py +290 -0
  102. graxpert-3.2.0a0.dev4/graxpert/background_flood_selection.py +240 -0
  103. graxpert-3.2.0a0.dev4/graxpert/background_grid_selection.py +64 -0
  104. graxpert-3.2.0a0.dev4/graxpert/cmdline_tools.py +547 -0
  105. graxpert-3.2.0a0.dev4/graxpert/commands.py +200 -0
  106. graxpert-3.2.0a0.dev4/graxpert/deconvolution.py +176 -0
  107. graxpert-3.2.0a0.dev4/graxpert/denoising.py +178 -0
  108. graxpert-3.2.0a0.dev4/graxpert/grid_utils.py +38 -0
  109. graxpert-3.2.0a0.dev4/graxpert/img/GraXpert_LOGO_Hauptvariante.png +0 -0
  110. graxpert-3.2.0a0.dev4/graxpert/img/Icon.png +0 -0
  111. graxpert-3.2.0a0.dev4/graxpert/img/LDN1235_original.jpg +0 -0
  112. graxpert-3.2.0a0.dev4/graxpert/img/LDN1235_processed.jpg +0 -0
  113. graxpert-3.2.0a0.dev4/graxpert/img/__init__.py +0 -0
  114. graxpert-3.2.0a0.dev4/graxpert/img/__pycache__/__init__.cpython-312.pyc +0 -0
  115. graxpert-3.2.0a0.dev4/graxpert/img/gfx_numbers.png +0 -0
  116. graxpert-3.2.0a0.dev4/graxpert/img/gfx_numbers.svg +737 -0
  117. graxpert-3.2.0a0.dev4/graxpert/img/graXpert_Startbadge_Umbriel.png +0 -0
  118. graxpert-3.2.0a0.dev4/graxpert/img/hourglass.png +0 -0
  119. graxpert-3.2.0a0.dev4/graxpert/locales/__init__.py +0 -0
  120. graxpert-3.2.0a0.dev4/graxpert/locales/base.pot +221 -0
  121. graxpert-3.2.0a0.dev4/graxpert/locales/de_DE/LC_MESSAGES/base.mo +0 -0
  122. graxpert-3.2.0a0.dev4/graxpert/locales/de_DE/LC_MESSAGES/base.po +384 -0
  123. graxpert-3.2.0a0.dev4/graxpert/localization.py +39 -0
  124. graxpert-3.2.0a0.dev4/graxpert/main.py +441 -0
  125. graxpert-3.2.0a0.dev4/graxpert/mp_logging.py +97 -0
  126. graxpert-3.2.0a0.dev4/graxpert/parallel_processing.py +3 -0
  127. graxpert-3.2.0a0.dev4/graxpert/preferences.py +139 -0
  128. graxpert-3.2.0a0.dev4/graxpert/radialbasisinterpolation.py +215 -0
  129. graxpert-3.2.0a0.dev4/graxpert/resource_utils.py +35 -0
  130. graxpert-3.2.0a0.dev4/graxpert/s3_secrets.py +16 -0
  131. graxpert-3.2.0a0.dev4/graxpert/skyall.py +152 -0
  132. graxpert-3.2.0a0.dev4/graxpert/stretch.py +151 -0
  133. graxpert-3.2.0a0.dev4/graxpert/theme/__init__.py +0 -0
  134. graxpert-3.2.0a0.dev4/graxpert/theme/__pycache__/__init__.cpython-312.pyc +0 -0
  135. graxpert-3.2.0a0.dev4/graxpert/theme/graxpert-dark-blue.json +367 -0
  136. graxpert-3.2.0a0.dev4/graxpert/ui/__init__.py +1 -0
  137. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/__init__.cpython-311.pyc +0 -0
  138. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/__init__.cpython-312.pyc +0 -0
  139. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/__init__.cpython-313.pyc +0 -0
  140. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/application_frame.cpython-311.pyc +0 -0
  141. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/application_frame.cpython-312.pyc +0 -0
  142. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/application_frame.cpython-313.pyc +0 -0
  143. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/canvas.cpython-311.pyc +0 -0
  144. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/canvas.cpython-312.pyc +0 -0
  145. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/canvas.cpython-313.pyc +0 -0
  146. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/left_menu.cpython-311.pyc +0 -0
  147. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/left_menu.cpython-312.pyc +0 -0
  148. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/left_menu.cpython-313.pyc +0 -0
  149. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/loadingframe.cpython-311.pyc +0 -0
  150. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/loadingframe.cpython-312.pyc +0 -0
  151. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/loadingframe.cpython-313.pyc +0 -0
  152. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/right_menu.cpython-311.pyc +0 -0
  153. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/right_menu.cpython-312.pyc +0 -0
  154. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/right_menu.cpython-313.pyc +0 -0
  155. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/statusbar.cpython-311.pyc +0 -0
  156. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/statusbar.cpython-312.pyc +0 -0
  157. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/statusbar.cpython-313.pyc +0 -0
  158. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/styling.cpython-311.pyc +0 -0
  159. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/styling.cpython-312.pyc +0 -0
  160. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/styling.cpython-313.pyc +0 -0
  161. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/tooltip.cpython-311.pyc +0 -0
  162. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/tooltip.cpython-312.pyc +0 -0
  163. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/tooltip.cpython-313.pyc +0 -0
  164. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/ui_events.cpython-311.pyc +0 -0
  165. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/ui_events.cpython-312.pyc +0 -0
  166. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/ui_events.cpython-313.pyc +0 -0
  167. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/widgets.cpython-311.pyc +0 -0
  168. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/widgets.cpython-312.pyc +0 -0
  169. graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/widgets.cpython-313.pyc +0 -0
  170. graxpert-3.2.0a0.dev4/graxpert/ui/application_frame.py +115 -0
  171. graxpert-3.2.0a0.dev4/graxpert/ui/canvas.py +558 -0
  172. graxpert-3.2.0a0.dev4/graxpert/ui/left_menu.py +437 -0
  173. graxpert-3.2.0a0.dev4/graxpert/ui/loadingframe.py +142 -0
  174. graxpert-3.2.0a0.dev4/graxpert/ui/right_menu.py +315 -0
  175. graxpert-3.2.0a0.dev4/graxpert/ui/statusbar.py +102 -0
  176. graxpert-3.2.0a0.dev4/graxpert/ui/styling.py +23 -0
  177. graxpert-3.2.0a0.dev4/graxpert/ui/tooltip.py +194 -0
  178. graxpert-3.2.0a0.dev4/graxpert/ui/ui_events.py +19 -0
  179. graxpert-3.2.0a0.dev4/graxpert/ui/widgets.py +297 -0
  180. graxpert-3.2.0a0.dev4/graxpert/ui_scaling.py +13 -0
  181. graxpert-3.2.0a0.dev4/graxpert/version.py +2 -0
  182. graxpert-3.2.0a0.dev4/graxpert/version.py.bak +2 -0
  183. graxpert-3.2.0a0.dev4/graxpert.egg-info/PKG-INFO +219 -0
  184. graxpert-3.2.0a0.dev4/graxpert.egg-info/SOURCES.txt +202 -0
  185. graxpert-3.2.0a0.dev4/graxpert.egg-info/dependency_links.txt +1 -0
  186. graxpert-3.2.0a0.dev4/graxpert.egg-info/entry_points.txt +2 -0
  187. graxpert-3.2.0a0.dev4/graxpert.egg-info/requires.txt +31 -0
  188. graxpert-3.2.0a0.dev4/graxpert.egg-info/top_level.txt +1 -0
  189. graxpert-3.2.0a0.dev4/img/Icon.ico +0 -0
  190. graxpert-3.2.0a0.dev4/img/Icon.png +0 -0
  191. graxpert-3.2.0a0.dev4/img/NGC7000_original.jpg +0 -0
  192. graxpert-3.2.0a0.dev4/img/NGC7000_processed.jpg +0 -0
  193. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Ariel.png +0 -0
  194. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Ariel.svg +72 -0
  195. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Dione.png +0 -0
  196. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Dione.svg +72 -0
  197. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Tethys.png +0 -0
  198. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Tethys.svg +72 -0
  199. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Umbriel.png +0 -0
  200. graxpert-3.2.0a0.dev4/img/graXpert_Startbadge_Umbriel.svg +72 -0
  201. graxpert-3.2.0a0.dev4/pyproject.toml +12 -0
  202. graxpert-3.2.0a0.dev4/requirements.txt +15 -0
  203. graxpert-3.2.0a0.dev4/setup.cfg +4 -0
  204. graxpert-3.2.0a0.dev4/setup.py +234 -0
@@ -0,0 +1,12 @@
1
+ include README.md
2
+ include requirements.txt
3
+ include graxpert/version.py
4
+ include graxpert-dark-blue.json
5
+ recursive-include img *
6
+ recursive-include locales *
7
+ recursive-include graxpert *
8
+ graft graxpert/theme
9
+ graft graxpert/img
10
+ graft graxpert/locales
11
+
12
+ prune tests
@@ -0,0 +1,219 @@
1
+ Metadata-Version: 2.4
2
+ Name: graxpert
3
+ Version: 3.2.0a0.dev4
4
+ Summary: GraXpert is an astronomical image processing program for extracting and removing gradients in the background of your astrophotos
5
+ Home-page: https://graxpert.com
6
+ Author: GraXpert Development Team
7
+ Author-email: info@graxpert.com
8
+ License: GPL-3.0
9
+ Project-URL: Source Code, https://github.com/geeksville/GraXpert
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: End Users/Desktop
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Topic :: Scientific/Engineering :: Astronomy
14
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
15
+ Classifier: Topic :: Multimedia :: Graphics :: Editors
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Operating System :: Microsoft :: Windows
19
+ Classifier: Operating System :: MacOS
20
+ Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Environment :: Win32 (MS Windows)
22
+ Classifier: Environment :: MacOS X
23
+ Classifier: Environment :: X11 Applications
24
+ Classifier: Natural Language :: English
25
+ Classifier: Natural Language :: German
26
+ Requires-Python: >=3.11
27
+ Description-Content-Type: text/markdown
28
+ Requires-Dist: ml-dtypes>=0.5.3
29
+ Requires-Dist: pillow>=11.3.0
30
+ Requires-Dist: appdirs
31
+ Requires-Dist: astropy>=6.1.7
32
+ Requires-Dist: astropy-iers-data>=0.2025.9.1.0.42.11
33
+ Requires-Dist: customtkinter>=5.2.2
34
+ Requires-Dist: imageio>=2.37.0
35
+ Requires-Dist: minio>=7.2.16
36
+ Requires-Dist: numpy==2.2.6
37
+ Requires-Dist: opencv-python-headless==4.11.0.86
38
+ Requires-Dist: PyKrige>=1.7.2
39
+ Requires-Dist: requests>=2.32.5
40
+ Requires-Dist: scikit-image>=0.25.2
41
+ Requires-Dist: scipy>=1.15.3
42
+ Requires-Dist: xisf>=0.9.5
43
+ Provides-Extra: cuda
44
+ Requires-Dist: onnxruntime-gpu[cuda,cudnn]==1.22.0; extra == "cuda"
45
+ Provides-Extra: rocm
46
+ Requires-Dist: onnxruntime-rocm==1.22.1; extra == "rocm"
47
+ Provides-Extra: directml
48
+ Requires-Dist: onnxruntime-directml; extra == "directml"
49
+ Provides-Extra: openvino
50
+ Requires-Dist: onnxruntime-openvino==1.22.0; extra == "openvino"
51
+ Requires-Dist: openvino>=2025.3.0; extra == "openvino"
52
+ Provides-Extra: cpuonly
53
+ Requires-Dist: onnxruntime>=1.22.1; extra == "cpuonly"
54
+ Dynamic: author
55
+ Dynamic: author-email
56
+ Dynamic: classifier
57
+ Dynamic: description
58
+ Dynamic: description-content-type
59
+ Dynamic: home-page
60
+ Dynamic: license
61
+ Dynamic: project-url
62
+ Dynamic: provides-extra
63
+ Dynamic: requires-dist
64
+ Dynamic: requires-python
65
+ Dynamic: summary
66
+
67
+ <p align="center">
68
+ <img src="https://github.com/Steffenhir/GraXpert/blob/main/img/GraXpert_LOGO_Hauptvariante.png" width="500"/>
69
+ </p>
70
+
71
+ # WARNING: This is a test branch/pip build, you probably don't want it yet.
72
+ For the time being you a re better off with the install images from the graxpert
73
+ homepage! for questions regarding this test build contact kevinh@geeksville.com.
74
+
75
+ GraXpert is an astronomical image processing program for extracting and removing
76
+ gradients in the background of your astrophotos. We provide several methods traditional
77
+ interpolation methods such as Radial Basis Functions (RBF), Splines and Kriging which require
78
+ the user to manually select sample points in the background of the image. Our newest addition
79
+ is an AI method which does not require any user input.
80
+
81
+ Original | Gradients removed with AI
82
+ :-------------------------:|:-------------------------:
83
+ ![Original](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/NGC7000_original.jpg) | ![Gradients removed](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/NGC7000_processed.jpg)
84
+ ![Original](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/LDN1235_original.jpg) | ![Gradients removed](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/LDN1235_processed.jpg)
85
+
86
+
87
+ **Homepage:** [https://www.graxpert.com](https://www.graxpert.com)
88
+ **Download:** [https://github.com/Steffenhir/GraXpert/releases/latest](https://github.com/Steffenhir/GraXpert/releases/latest)
89
+
90
+ # Cross-Platform Installation
91
+ We are currently testing an optional cross-platform system for installing graxpert - which allows much smaller installation images and automated download/updates.
92
+
93
+ We do this via the the python [pypi.org](https://pypi.org/project/graxpert/) repository 'app-store.' This is particularly important if you'd like to have GPU acceleration support for non Nvidia GPUs. To install via this mechanism:
94
+
95
+ 1. Install [python](https://www.python.org/downloads/) runtime for your OS. The default install should automatically include the python package manager 'pip'.
96
+ 2. At a shell prompt type the correct flavor of graxpert to install for your needs.
97
+
98
+ FIXME, recommend directml for windows, FIXME for linux and FIXME for mac
99
+
100
+ * **pip install graxpert\[cuda\]** - Use this if you have an Nvidia GPU
101
+ * **pip install graxpert\[rocm\]** - Use this if you have an AMD GPU
102
+ * **pip install graxpert\[openvino\]** - Use this if you don't have an advanced GPU or don't know what you have (provides sizable acceleration on most modern Intel CPUs)
103
+ * **pip install graxpert\[directml\]** - Use this if you want the Windows DirectML acceleration (not as fast as the options above but widely supported and easy to install)
104
+ * **pip install graxpert\[cpuonly\]** - If you encounter bugs with any of our GPU versions, please file a bug and temporarily use this version (which excludes all GPU code)
105
+
106
+ If you are an advanced python user and know about the 'pipx' tool, we recommend that you use that tool instead of pip for installs.
107
+
108
+ # Legacy Installation
109
+ You can download the latest official release of GraXpert [here](https://github.com/Steffenhir/GraXpert/releases/latest). Select the correct version for your operating system. For macOS, we provide different versions
110
+ for Intel processors (x86_64) and for apple silicon (arm64).
111
+
112
+ **Windows:** After downloading the .exe file, you should be able to start it directly. \
113
+ **Linux:** Before you can start GraXpert, you have to make it executable by running ```chmod u+x ./GraXpert-linux``` \
114
+ **macOS:** After opening the .dmg file, simply drag the GraXpert icon into the applications folder. GraXpert can now be started from the applications folder.
115
+
116
+ # Command-Line Usage
117
+ GraXpert comes with a graphical user interface. However, the AI method which does not need the selection of any background sample points can also be executed from the command line.
118
+ Here are the available command-line arguments and their descriptions:
119
+
120
+ - -cmd [image_operation]: This flag indicates which AI model to use. Options are "background-extraction" (default) or "denoising".
121
+ - filename: The path of the unprocessed image (required).
122
+ - -output [output_file_name]: Specify the name of the output image (without file ending). Otherwise the image will be saved with the suffix '_GraXpert' added to the original file name.
123
+ - -preferences_file: Allows GraXpert commandline to run all extraction methods based on a preferences file that contains background grid points.
124
+ - -gpu: Set to 'false' in order to disable gpu acceleration during AI inference, otherwise set to 'true' to enable it.
125
+ - -ai_version [version]: Specify the version of the AI model to use. If not provided, it defaults to the latest available version. You can choose from locally available versions and remotely available versions.
126
+
127
+ Specific commands to each operation:
128
+
129
+ Background Extraction:
130
+ - -correction [type]: Select the background correction method. Options are "Subtraction" (default) or "Division."
131
+ - -smoothing [strength]: Adjust the strength of smoothing, ranging from 0.0 (no smoothing) to 1 (maximum smoothing).
132
+ - -bg: Also save the generated background model.
133
+
134
+ Denoising:
135
+ - -strength [value]: Adjust the strength of denoising, ranging from 0.0 (minimum) to 1 (maximum). Default: "0.5".
136
+ - -batch_size [value]: Number of image tiles which Graxpert will denoise in parallel. Be careful: increasing this value might result in out-of-memory errors. Valid Range: 1..32, default: "4".
137
+
138
+ ## Examples
139
+ The following examples show how GraXpert can be used from the command line in Windows. For Linux and macOS, you have to do the following replacements:
140
+
141
+ **Linux:** Replace GraXpert-win64.exe by GraXpert-linux \
142
+ **macOS:** Replace GraXpert-win64.exe by GraXpert.app/Contents/MacOS/GraXpert
143
+
144
+ Basic Usage:
145
+ ```
146
+ GraXpert-win64.exe my_image.fits
147
+ ```
148
+
149
+ Specify AI Model Version '1.1', correction type 'Division', smoothing '0.1', and save background model:
150
+ ```
151
+ GraXpert-win64.exe my_image.fits -ai_version 1.1 -correction Division -smoothing 0.1 -bg
152
+ ```
153
+
154
+ # Installation for Developers
155
+ This guide will help you get started with development of GraXpert on Windows, Linux, and macOS. Follow these steps to clone the repository, create a virtual environment with Python, install the required packages, and run GraXpert from the source code.
156
+
157
+ ## Clone the repository
158
+ Open your terminal or command prompt and use git to clone the GraXpert repository:
159
+ ```
160
+ git clone https://github.com/Steffenhir/GraXpert
161
+ cd GraXpert
162
+ ```
163
+ ## Option 1: Manual developer environment setup
164
+
165
+ ### Setup the Virtual Environment
166
+ We recommend using a virtual environment to isolate the project's dependencies. Ensure you have Python>=3.10 installed on your system before proceeding. Here's how to set up a virtual environment with Python:
167
+ Windows:
168
+ ```
169
+ # Create a new virtual environment with Python 3.10
170
+ python -m venv graxpert-env
171
+
172
+ # Activate the virtual environment
173
+ graxpert-env\Scripts\activate
174
+ ```
175
+
176
+ Linux and macOS:
177
+ ```
178
+ # Create a new virtual environment with Python 3.10
179
+ python3 -m venv graxpert-env
180
+
181
+ # Activate the virtual environment
182
+ source graxpert-env/bin/activate
183
+ ```
184
+
185
+ ### Install required packages
186
+ All the requirements can be found in the requirements.txt file. You can install them with:
187
+
188
+ Windows and Linux:
189
+ ```
190
+ pip install -r requirements.txt
191
+ ```
192
+
193
+ macOS:
194
+ ```
195
+ pip3 install -r requirements.txt
196
+
197
+ """
198
+ For macOS, we have to install tkinter separately.
199
+ We use the version provided by brew because it is newer
200
+ and solves issues with macOS Sonoma. Please use the version matching with your Python version.
201
+ """
202
+ brew install python-tk@3.10
203
+ ```
204
+
205
+ ## Option 2: Automatic setup with devcontainers
206
+ This project includes an (optional) [devcontainer](https://containers.dev/) configuration. If you are using any editor with built-in devcontainer support (i.e. VScode or jetbrains etc...), you should get prompted to "Reopen in a devcontainer?"
207
+
208
+ If you choose to use a devcontainer a docker (or podman) based container environment will be created for your development. This environment appears to be a Debian machine (regardless of your host-OS). All windowing/file/network operations are forwarded through your host.
209
+
210
+ This provides a nice 'guaranteed' repeatable build/debug environment for all developers.
211
+
212
+ ## Running GraXpert
213
+ Once you have set up the virtual environment (using either of the options above), you can start GraXpert in your shell:
214
+
215
+ ```
216
+ python -m graxpert.main
217
+ ```
218
+
219
+
@@ -0,0 +1,153 @@
1
+ <p align="center">
2
+ <img src="https://github.com/Steffenhir/GraXpert/blob/main/img/GraXpert_LOGO_Hauptvariante.png" width="500"/>
3
+ </p>
4
+
5
+ # WARNING: This is a test branch/pip build, you probably don't want it yet.
6
+ For the time being you a re better off with the install images from the graxpert
7
+ homepage! for questions regarding this test build contact kevinh@geeksville.com.
8
+
9
+ GraXpert is an astronomical image processing program for extracting and removing
10
+ gradients in the background of your astrophotos. We provide several methods traditional
11
+ interpolation methods such as Radial Basis Functions (RBF), Splines and Kriging which require
12
+ the user to manually select sample points in the background of the image. Our newest addition
13
+ is an AI method which does not require any user input.
14
+
15
+ Original | Gradients removed with AI
16
+ :-------------------------:|:-------------------------:
17
+ ![Original](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/NGC7000_original.jpg) | ![Gradients removed](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/NGC7000_processed.jpg)
18
+ ![Original](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/LDN1235_original.jpg) | ![Gradients removed](https://raw.githubusercontent.com/Steffenhir/GraXpert/main/img/LDN1235_processed.jpg)
19
+
20
+
21
+ **Homepage:** [https://www.graxpert.com](https://www.graxpert.com)
22
+ **Download:** [https://github.com/Steffenhir/GraXpert/releases/latest](https://github.com/Steffenhir/GraXpert/releases/latest)
23
+
24
+ # Cross-Platform Installation
25
+ We are currently testing an optional cross-platform system for installing graxpert - which allows much smaller installation images and automated download/updates.
26
+
27
+ We do this via the the python [pypi.org](https://pypi.org/project/graxpert/) repository 'app-store.' This is particularly important if you'd like to have GPU acceleration support for non Nvidia GPUs. To install via this mechanism:
28
+
29
+ 1. Install [python](https://www.python.org/downloads/) runtime for your OS. The default install should automatically include the python package manager 'pip'.
30
+ 2. At a shell prompt type the correct flavor of graxpert to install for your needs.
31
+
32
+ FIXME, recommend directml for windows, FIXME for linux and FIXME for mac
33
+
34
+ * **pip install graxpert\[cuda\]** - Use this if you have an Nvidia GPU
35
+ * **pip install graxpert\[rocm\]** - Use this if you have an AMD GPU
36
+ * **pip install graxpert\[openvino\]** - Use this if you don't have an advanced GPU or don't know what you have (provides sizable acceleration on most modern Intel CPUs)
37
+ * **pip install graxpert\[directml\]** - Use this if you want the Windows DirectML acceleration (not as fast as the options above but widely supported and easy to install)
38
+ * **pip install graxpert\[cpuonly\]** - If you encounter bugs with any of our GPU versions, please file a bug and temporarily use this version (which excludes all GPU code)
39
+
40
+ If you are an advanced python user and know about the 'pipx' tool, we recommend that you use that tool instead of pip for installs.
41
+
42
+ # Legacy Installation
43
+ You can download the latest official release of GraXpert [here](https://github.com/Steffenhir/GraXpert/releases/latest). Select the correct version for your operating system. For macOS, we provide different versions
44
+ for Intel processors (x86_64) and for apple silicon (arm64).
45
+
46
+ **Windows:** After downloading the .exe file, you should be able to start it directly. \
47
+ **Linux:** Before you can start GraXpert, you have to make it executable by running ```chmod u+x ./GraXpert-linux``` \
48
+ **macOS:** After opening the .dmg file, simply drag the GraXpert icon into the applications folder. GraXpert can now be started from the applications folder.
49
+
50
+ # Command-Line Usage
51
+ GraXpert comes with a graphical user interface. However, the AI method which does not need the selection of any background sample points can also be executed from the command line.
52
+ Here are the available command-line arguments and their descriptions:
53
+
54
+ - -cmd [image_operation]: This flag indicates which AI model to use. Options are "background-extraction" (default) or "denoising".
55
+ - filename: The path of the unprocessed image (required).
56
+ - -output [output_file_name]: Specify the name of the output image (without file ending). Otherwise the image will be saved with the suffix '_GraXpert' added to the original file name.
57
+ - -preferences_file: Allows GraXpert commandline to run all extraction methods based on a preferences file that contains background grid points.
58
+ - -gpu: Set to 'false' in order to disable gpu acceleration during AI inference, otherwise set to 'true' to enable it.
59
+ - -ai_version [version]: Specify the version of the AI model to use. If not provided, it defaults to the latest available version. You can choose from locally available versions and remotely available versions.
60
+
61
+ Specific commands to each operation:
62
+
63
+ Background Extraction:
64
+ - -correction [type]: Select the background correction method. Options are "Subtraction" (default) or "Division."
65
+ - -smoothing [strength]: Adjust the strength of smoothing, ranging from 0.0 (no smoothing) to 1 (maximum smoothing).
66
+ - -bg: Also save the generated background model.
67
+
68
+ Denoising:
69
+ - -strength [value]: Adjust the strength of denoising, ranging from 0.0 (minimum) to 1 (maximum). Default: "0.5".
70
+ - -batch_size [value]: Number of image tiles which Graxpert will denoise in parallel. Be careful: increasing this value might result in out-of-memory errors. Valid Range: 1..32, default: "4".
71
+
72
+ ## Examples
73
+ The following examples show how GraXpert can be used from the command line in Windows. For Linux and macOS, you have to do the following replacements:
74
+
75
+ **Linux:** Replace GraXpert-win64.exe by GraXpert-linux \
76
+ **macOS:** Replace GraXpert-win64.exe by GraXpert.app/Contents/MacOS/GraXpert
77
+
78
+ Basic Usage:
79
+ ```
80
+ GraXpert-win64.exe my_image.fits
81
+ ```
82
+
83
+ Specify AI Model Version '1.1', correction type 'Division', smoothing '0.1', and save background model:
84
+ ```
85
+ GraXpert-win64.exe my_image.fits -ai_version 1.1 -correction Division -smoothing 0.1 -bg
86
+ ```
87
+
88
+ # Installation for Developers
89
+ This guide will help you get started with development of GraXpert on Windows, Linux, and macOS. Follow these steps to clone the repository, create a virtual environment with Python, install the required packages, and run GraXpert from the source code.
90
+
91
+ ## Clone the repository
92
+ Open your terminal or command prompt and use git to clone the GraXpert repository:
93
+ ```
94
+ git clone https://github.com/Steffenhir/GraXpert
95
+ cd GraXpert
96
+ ```
97
+ ## Option 1: Manual developer environment setup
98
+
99
+ ### Setup the Virtual Environment
100
+ We recommend using a virtual environment to isolate the project's dependencies. Ensure you have Python>=3.10 installed on your system before proceeding. Here's how to set up a virtual environment with Python:
101
+ Windows:
102
+ ```
103
+ # Create a new virtual environment with Python 3.10
104
+ python -m venv graxpert-env
105
+
106
+ # Activate the virtual environment
107
+ graxpert-env\Scripts\activate
108
+ ```
109
+
110
+ Linux and macOS:
111
+ ```
112
+ # Create a new virtual environment with Python 3.10
113
+ python3 -m venv graxpert-env
114
+
115
+ # Activate the virtual environment
116
+ source graxpert-env/bin/activate
117
+ ```
118
+
119
+ ### Install required packages
120
+ All the requirements can be found in the requirements.txt file. You can install them with:
121
+
122
+ Windows and Linux:
123
+ ```
124
+ pip install -r requirements.txt
125
+ ```
126
+
127
+ macOS:
128
+ ```
129
+ pip3 install -r requirements.txt
130
+
131
+ """
132
+ For macOS, we have to install tkinter separately.
133
+ We use the version provided by brew because it is newer
134
+ and solves issues with macOS Sonoma. Please use the version matching with your Python version.
135
+ """
136
+ brew install python-tk@3.10
137
+ ```
138
+
139
+ ## Option 2: Automatic setup with devcontainers
140
+ This project includes an (optional) [devcontainer](https://containers.dev/) configuration. If you are using any editor with built-in devcontainer support (i.e. VScode or jetbrains etc...), you should get prompted to "Reopen in a devcontainer?"
141
+
142
+ If you choose to use a devcontainer a docker (or podman) based container environment will be created for your development. This environment appears to be a Debian machine (regardless of your host-OS). All windowing/file/network operations are forwarded through your host.
143
+
144
+ This provides a nice 'guaranteed' repeatable build/debug environment for all developers.
145
+
146
+ ## Running GraXpert
147
+ Once you have set up the virtual environment (using either of the options above), you can start GraXpert in your shell:
148
+
149
+ ```
150
+ python -m graxpert.main
151
+ ```
152
+
153
+
@@ -0,0 +1,114 @@
1
+ from enum import StrEnum
2
+ from typing import Dict
3
+
4
+ from graxpert.astroimage import AstroImage
5
+ from graxpert.stretch import StretchParameters, calculate_mtf_stretch_parameters_for_image, stretch_all
6
+
7
+
8
+ class ImageTypes(StrEnum):
9
+ Original = "Original"
10
+ Gradient_Corrected = "Gradient-Corrected"
11
+ Background = "Background"
12
+ Deconvolved_Object_only = "Deconvolved Object-only"
13
+ Deconvolved_Stars_only = "Deconvolved Stars-only"
14
+ Denoised = "Denoised"
15
+
16
+
17
+ class AstroImageRepository:
18
+
19
+ images: Dict = {
20
+ ImageTypes.Original: None,
21
+ ImageTypes.Gradient_Corrected: None,
22
+ ImageTypes.Background: None,
23
+ ImageTypes.Deconvolved_Object_only: None,
24
+ ImageTypes.Deconvolved_Stars_only: None,
25
+ ImageTypes.Denoised: None,
26
+ }
27
+
28
+ def set(self, type: ImageTypes, image: AstroImage):
29
+ self.images[type] = image
30
+
31
+ def get(self, type: ImageTypes):
32
+ return self.images[type]
33
+
34
+ def stretch_all(self, stretch_params: StretchParameters, saturation: float):
35
+
36
+ if self.get(ImageTypes.Original) is None:
37
+ return
38
+
39
+ stretches = []
40
+
41
+ if not stretch_params.do_stretch:
42
+ for key, image in self.images.items():
43
+ if image is not None:
44
+ stretches.append(image.img_array)
45
+
46
+ else:
47
+
48
+ all_image_arrays = []
49
+ all_mtf_stretch_params = []
50
+
51
+ all_image_arrays.append(self.get(ImageTypes.Original).img_array)
52
+ all_mtf_stretch_params.append(calculate_mtf_stretch_parameters_for_image(stretch_params, self.get(ImageTypes.Original).img_array))
53
+
54
+ if self.get(ImageTypes.Gradient_Corrected) is not None and self.get(ImageTypes.Background) is not None:
55
+ all_image_arrays.append(self.get(ImageTypes.Gradient_Corrected).img_array)
56
+ all_mtf_stretch_params.append(calculate_mtf_stretch_parameters_for_image(stretch_params, self.get(ImageTypes.Gradient_Corrected).img_array))
57
+
58
+ all_image_arrays.append(self.get(ImageTypes.Background).img_array)
59
+ all_mtf_stretch_params.append(all_mtf_stretch_params[0])
60
+
61
+ if self.get(ImageTypes.Deconvolved_Object_only) is not None and self.get(ImageTypes.Gradient_Corrected) is None:
62
+ all_image_arrays.append(self.get(ImageTypes.Deconvolved_Object_only).img_array)
63
+ all_mtf_stretch_params.append(all_mtf_stretch_params[0])
64
+
65
+ elif self.get(ImageTypes.Deconvolved_Object_only) is not None and self.get(ImageTypes.Gradient_Corrected) is not None:
66
+ all_image_arrays.append(self.get(ImageTypes.Deconvolved_Object_only).img_array)
67
+ all_mtf_stretch_params.append(all_mtf_stretch_params[1])
68
+
69
+ if self.get(ImageTypes.Deconvolved_Stars_only) is not None and self.get(ImageTypes.Gradient_Corrected) is None:
70
+ all_image_arrays.append(self.get(ImageTypes.Deconvolved_Stars_only).img_array)
71
+ all_mtf_stretch_params.append(all_mtf_stretch_params[0])
72
+
73
+ elif self.get(ImageTypes.Deconvolved_Stars_only) is not None and self.get(ImageTypes.Gradient_Corrected) is not None:
74
+ all_image_arrays.append(self.get(ImageTypes.Deconvolved_Stars_only).img_array)
75
+ all_mtf_stretch_params.append(all_mtf_stretch_params[1])
76
+
77
+ if self.get(ImageTypes.Denoised) is not None and self.get(ImageTypes.Gradient_Corrected) is None:
78
+ all_image_arrays.append(self.get(ImageTypes.Denoised).img_array)
79
+ all_mtf_stretch_params.append(all_mtf_stretch_params[0])
80
+
81
+ elif self.get(ImageTypes.Denoised) is not None and self.get(ImageTypes.Gradient_Corrected) is not None:
82
+ all_image_arrays.append(self.get(ImageTypes.Denoised).img_array)
83
+ all_mtf_stretch_params.append(all_mtf_stretch_params[1])
84
+
85
+ stretches = stretch_all(all_image_arrays, all_mtf_stretch_params)
86
+
87
+ i = 0
88
+ for key, image in self.images.items():
89
+ if image is not None:
90
+ image.update_display_from_array(stretches[i], saturation)
91
+ i = i + 1
92
+
93
+ def crop_all(self, start_x: float, end_x: float, start_y: float, end_y: float):
94
+ for key, astroimg in self.images.items():
95
+ if astroimg is not None:
96
+ astroimg.crop(start_x, end_x, start_y, end_y)
97
+
98
+ def update_saturation(self, saturation):
99
+ for key, value in self.images.items():
100
+ if value is not None:
101
+ value.update_saturation(saturation)
102
+
103
+ def reset(self):
104
+ for key, value in self.images.items():
105
+ self.images[key] = None
106
+
107
+ def display_options(self):
108
+ display_options = []
109
+
110
+ for key, value in self.images.items():
111
+ if self.images[key] is not None:
112
+ display_options.append(key)
113
+
114
+ return display_options
@@ -0,0 +1 @@
1
+