snid-sage 0.1.0.post1.dev0__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 (254) hide show
  1. snid_sage-0.1.0.post1.dev0/.github/workflows/deploy-docs.yml +57 -0
  2. snid_sage-0.1.0.post1.dev0/.github/workflows/deploy-pypi.yml +149 -0
  3. snid_sage-0.1.0.post1.dev0/.github/workflows/test-installation.yml +245 -0
  4. snid_sage-0.1.0.post1.dev0/.github/workflows/test-pypi-only.yml +282 -0
  5. snid_sage-0.1.0.post1.dev0/.gitignore +336 -0
  6. snid_sage-0.1.0.post1.dev0/LICENSE +35 -0
  7. snid_sage-0.1.0.post1.dev0/MANIFEST.in +56 -0
  8. snid_sage-0.1.0.post1.dev0/PKG-INFO +217 -0
  9. snid_sage-0.1.0.post1.dev0/README.md +147 -0
  10. snid_sage-0.1.0.post1.dev0/data/sn2003jo.dat +1743 -0
  11. snid_sage-0.1.0.post1.dev0/data/tns_2024ggi.dat +1861 -0
  12. snid_sage-0.1.0.post1.dev0/data/tns_2025baq.dat +943 -0
  13. snid_sage-0.1.0.post1.dev0/data/tns_2025iau.dat +1915 -0
  14. snid_sage-0.1.0.post1.dev0/docs/README.md +41 -0
  15. snid_sage-0.1.0.post1.dev0/docs/index.md +258 -0
  16. snid_sage-0.1.0.post1.dev0/docs/installation/installation.md +272 -0
  17. snid_sage-0.1.0.post1.dev0/docs/navigation-guide.md +268 -0
  18. snid_sage-0.1.0.post1.dev0/docs/quickstart/first-analysis.md +207 -0
  19. snid_sage-0.1.0.post1.dev0/images/ChatGPT Image Jun 24, 2025, 03_11_21 PM.png +0 -0
  20. snid_sage-0.1.0.post1.dev0/images/OLD_ICONS/ChatGPT Image May 3, 2025, 03_59_02 PM.png +0 -0
  21. snid_sage-0.1.0.post1.dev0/images/OLD_ICONS/ChatGPT Image May 3, 2025, 04_04_56 PM.png +0 -0
  22. snid_sage-0.1.0.post1.dev0/images/OLD_ICONS/ChatGPT Image May 3, 2025, 04_10_18 PM.png +0 -0
  23. snid_sage-0.1.0.post1.dev0/images/OLD_ICONS/ChatGPT Image May 3, 2025, 04_12_52 PM.png +0 -0
  24. snid_sage-0.1.0.post1.dev0/images/OLD_ICONS/dark.png +0 -0
  25. snid_sage-0.1.0.post1.dev0/images/OLD_ICONS/icon.png +0 -0
  26. snid_sage-0.1.0.post1.dev0/images/Screenshot.png +0 -0
  27. snid_sage-0.1.0.post1.dev0/images/icon.ico +0 -0
  28. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_1024x1024.png +0 -0
  29. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_128x128.png +0 -0
  30. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_128x128@2x.png +0 -0
  31. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_16x16.png +0 -0
  32. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_16x16@2x.png +0 -0
  33. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_256x256.png +0 -0
  34. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_256x256@2x.png +0 -0
  35. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_32x32.png +0 -0
  36. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_32x32@2x.png +0 -0
  37. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_512x512.png +0 -0
  38. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_512x512@2x.png +0 -0
  39. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_64x64.png +0 -0
  40. snid_sage-0.1.0.post1.dev0/images/icon.iconset/icon_64x64@2x.png +0 -0
  41. snid_sage-0.1.0.post1.dev0/images/icon.png +0 -0
  42. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_1024x1024.png +0 -0
  43. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_128x128.png +0 -0
  44. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_128x128@2x.png +0 -0
  45. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_16x16.png +0 -0
  46. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_16x16@2x.png +0 -0
  47. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_256x256.png +0 -0
  48. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_256x256@2x.png +0 -0
  49. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_32x32.png +0 -0
  50. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_32x32@2x.png +0 -0
  51. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_512x512.png +0 -0
  52. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_512x512@2x.png +0 -0
  53. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_64x64.png +0 -0
  54. snid_sage-0.1.0.post1.dev0/images/icon_dark.iconset/icon_64x64@2x.png +0 -0
  55. snid_sage-0.1.0.post1.dev0/images/icon_dark.png +0 -0
  56. snid_sage-0.1.0.post1.dev0/images/light.png +0 -0
  57. snid_sage-0.1.0.post1.dev0/mkdocs.yml +157 -0
  58. snid_sage-0.1.0.post1.dev0/pyproject.toml +207 -0
  59. snid_sage-0.1.0.post1.dev0/run_snid_cli.py +18 -0
  60. snid_sage-0.1.0.post1.dev0/run_snid_gui.py +510 -0
  61. snid_sage-0.1.0.post1.dev0/run_tests.py +149 -0
  62. snid_sage-0.1.0.post1.dev0/scripts/build_unified_storage.py +150 -0
  63. snid_sage-0.1.0.post1.dev0/scripts/check_template_filtering.py +190 -0
  64. snid_sage-0.1.0.post1.dev0/scripts/entry_points/bin/snid +15 -0
  65. snid_sage-0.1.0.post1.dev0/scripts/entry_points/bin/snid-gui +28 -0
  66. snid_sage-0.1.0.post1.dev0/scripts/entry_points/bin/snid-sage +28 -0
  67. snid_sage-0.1.0.post1.dev0/scripts/entry_points/bin/snid-template +15 -0
  68. snid_sage-0.1.0.post1.dev0/scripts/generate_platform_icons.py +281 -0
  69. snid_sage-0.1.0.post1.dev0/scripts/plot_lnw_templates_pdf.py +107 -0
  70. snid_sage-0.1.0.post1.dev0/scripts/plot_templates_pdf.py +133 -0
  71. snid_sage-0.1.0.post1.dev0/scripts/rebuild_template_storage.py +239 -0
  72. snid_sage-0.1.0.post1.dev0/scripts/setup_all_platform_icons.py +383 -0
  73. snid_sage-0.1.0.post1.dev0/scripts/setup_linux_icons.py +405 -0
  74. snid_sage-0.1.0.post1.dev0/scripts/setup_macos_icons.py +338 -0
  75. snid_sage-0.1.0.post1.dev0/scripts/setup_windows_icons.py +341 -0
  76. snid_sage-0.1.0.post1.dev0/scripts/verify_icons.py +54 -0
  77. snid_sage-0.1.0.post1.dev0/setup.cfg +4 -0
  78. snid_sage-0.1.0.post1.dev0/setup_cross_platform.py +318 -0
  79. snid_sage-0.1.0.post1.dev0/snid_sage/__init__.py +52 -0
  80. snid_sage-0.1.0.post1.dev0/snid_sage/_version.py +21 -0
  81. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/__init__.py +31 -0
  82. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/cli/__init__.py +43 -0
  83. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/cli/batch.py +1282 -0
  84. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/cli/config.py +280 -0
  85. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/cli/identify.py +931 -0
  86. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/cli/main.py +166 -0
  87. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/cli/template.py +457 -0
  88. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/__init__.py +12 -0
  89. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/__init__.py +16 -0
  90. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/analysis/__init__.py +9 -0
  91. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/analysis/analysis_plotter.py +615 -0
  92. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/analysis/interactive_line_tools.py +385 -0
  93. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/__init__.py +50 -0
  94. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/cluster_selection_dialog.py +1340 -0
  95. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/configuration_dialog.py +1295 -0
  96. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/continuum_editor_dialog.py +391 -0
  97. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/enhanced_ai_assistant_dialog.py +1021 -0
  98. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/manual_redshift_dialog.py +1567 -0
  99. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/mask_manager_dialog.py +274 -0
  100. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/multi_step_emission_dialog.py +2933 -0
  101. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/preprocessing_dialog.py +2074 -0
  102. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/preprocessing_selection_dialog.py +267 -0
  103. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/redshift_mode_dialog.py +351 -0
  104. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/results_dialog.py +694 -0
  105. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/settings_dialog.py +760 -0
  106. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/shortcuts_dialog.py +306 -0
  107. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/snid_analysis_dialog.py +439 -0
  108. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/dialogs/wind_velocity_dialog.py +825 -0
  109. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/forms/__init__.py +14 -0
  110. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/forms/input_controls.py +323 -0
  111. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/forms/toggle_controls.py +465 -0
  112. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/plots/__init__.py +17 -0
  113. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/plots/interactive_tools.py +390 -0
  114. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/plots/preview_plot_manager.py +665 -0
  115. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/plots/spectrum_plotter.py +401 -0
  116. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/plots/summary_plotter.py +432 -0
  117. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/widgets/__init__.py +39 -0
  118. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/widgets/advanced_controls.py +572 -0
  119. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/widgets/config_widgets.py +554 -0
  120. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/widgets/custom_toggles.py +446 -0
  121. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/widgets/interactive_continuum_widget.py +757 -0
  122. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/widgets/progress_widgets.py +656 -0
  123. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/components/widgets/theme_widgets.py +351 -0
  124. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/controllers/__init__.py +21 -0
  125. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/controllers/app_controller.py +572 -0
  126. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/controllers/dialog_controller.py +454 -0
  127. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/controllers/file_controller.py +707 -0
  128. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/controllers/plot_controller.py +1192 -0
  129. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/controllers/view_controller.py +221 -0
  130. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/dialogs/__init__.py +6 -0
  131. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/__init__.py +9 -0
  132. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/__init__.py +22 -0
  133. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/analysis_controller.py +1578 -0
  134. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/cluster_summary.py +555 -0
  135. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/emission_line_overlay_controller.py +390 -0
  136. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/games_integration.py +357 -0
  137. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/line_detection.py +826 -0
  138. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/manual_selection_controller.py +564 -0
  139. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/analysis/wind_velocity_controller.py +485 -0
  140. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/configuration/__init__.py +18 -0
  141. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/configuration/config_controller.py +594 -0
  142. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/configuration/gui_settings_controller.py +544 -0
  143. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/preprocessing/__init__.py +16 -0
  144. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/preprocessing/preprocessing_controller.py +351 -0
  145. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/preprocessing/preview_calculator.py +535 -0
  146. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/preprocessing/spectrum_preprocessor.py +630 -0
  147. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/results/__init__.py +9 -0
  148. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/results/llm_integration.py +479 -0
  149. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/features/results/results_manager.py +539 -0
  150. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/preprocessing_gui.py +56 -0
  151. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/sage_gui.py +1923 -0
  152. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/__init__.py +39 -0
  153. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/cross_platform_window.py +871 -0
  154. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/event_handlers.py +412 -0
  155. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/gui_helpers.py +472 -0
  156. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/import_manager.py +236 -0
  157. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/improved_button_workflow.py +378 -0
  158. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/layout_utils.py +1245 -0
  159. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/logo_manager.py +240 -0
  160. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/no_title_plot_manager.py +348 -0
  161. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/spectrum_reset_manager.py +622 -0
  162. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/startup_manager.py +366 -0
  163. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/state_manager.py +497 -0
  164. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/unified_font_manager.py +312 -0
  165. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/unified_theme_manager.py +794 -0
  166. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/universal_window_manager.py +419 -0
  167. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/window_event_handlers.py +222 -0
  168. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/utils/workflow_integration.py +295 -0
  169. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/gui/widgets/__init__.py +6 -0
  170. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/__init__.py +12 -0
  171. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/analysis/__init__.py +6 -0
  172. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/analysis/llm_utils.py +660 -0
  173. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/llm_integration.py +444 -0
  174. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/openrouter/__init__.py +6 -0
  175. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/openrouter/openrouter_llm.py +901 -0
  176. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/openrouter/openrouter_summary.py +774 -0
  177. snid_sage-0.1.0.post1.dev0/snid_sage/interfaces/llm/ui/__init__.py +14 -0
  178. snid_sage-0.1.0.post1.dev0/snid_sage/shared/__init__.py +38 -0
  179. snid_sage-0.1.0.post1.dev0/snid_sage/shared/constants/__init__.py +80 -0
  180. snid_sage-0.1.0.post1.dev0/snid_sage/shared/constants/physical.py +405 -0
  181. snid_sage-0.1.0.post1.dev0/snid_sage/shared/exceptions/__init__.py +41 -0
  182. snid_sage-0.1.0.post1.dev0/snid_sage/shared/exceptions/core_exceptions.py +127 -0
  183. snid_sage-0.1.0.post1.dev0/snid_sage/shared/types/__init__.py +53 -0
  184. snid_sage-0.1.0.post1.dev0/snid_sage/shared/types/result_types.py +197 -0
  185. snid_sage-0.1.0.post1.dev0/snid_sage/shared/types/spectrum_types.py +209 -0
  186. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/__init__.py +15 -0
  187. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/config/__init__.py +26 -0
  188. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/config/configuration_manager.py +563 -0
  189. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/config/platform_config.py +253 -0
  190. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/data_io/__init__.py +6 -0
  191. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/data_io/spectrum_loader.py +480 -0
  192. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/__init__.py +133 -0
  193. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/fwhm_analysis.py +432 -0
  194. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/interactive_fwhm_analyzer.py +503 -0
  195. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/line_analysis.py +170 -0
  196. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/line_detection_utils.py +1158 -0
  197. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/line_presets.py +282 -0
  198. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/line_selection_utils.py +298 -0
  199. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/nist_search.py +684 -0
  200. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/line_detection/spectrum_utils.py +186 -0
  201. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/logging/__init__.py +104 -0
  202. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/logging/config.py +317 -0
  203. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/logging/snid_logger.py +392 -0
  204. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/mask_utils/__init__.py +6 -0
  205. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/mask_utils/mask_utils.py +301 -0
  206. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/math_utils/__init__.py +39 -0
  207. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/math_utils/weighted_statistics.py +365 -0
  208. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/plotting/__init__.py +45 -0
  209. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/plotting/plot_theming.py +513 -0
  210. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/plotting/spectrum_utils.py +259 -0
  211. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/results_formatter.py +630 -0
  212. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/simple_template_finder.py +397 -0
  213. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/wind_analysis/__init__.py +36 -0
  214. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/wind_analysis/pcygni_fitting.py +503 -0
  215. snid_sage-0.1.0.post1.dev0/snid_sage/shared/utils/wind_analysis/wind_calculations.py +455 -0
  216. snid_sage-0.1.0.post1.dev0/snid_sage/snid/__init__.py +28 -0
  217. snid_sage-0.1.0.post1.dev0/snid_sage/snid/core/__init__.py +36 -0
  218. snid_sage-0.1.0.post1.dev0/snid_sage/snid/core/config.py +420 -0
  219. snid_sage-0.1.0.post1.dev0/snid_sage/snid/core/integration.py +510 -0
  220. snid_sage-0.1.0.post1.dev0/snid_sage/snid/cosmological_clustering.py +1039 -0
  221. snid_sage-0.1.0.post1.dev0/snid_sage/snid/fft_tools.py +521 -0
  222. snid_sage-0.1.0.post1.dev0/snid_sage/snid/games.py +1892 -0
  223. snid_sage-0.1.0.post1.dev0/snid_sage/snid/io.py +1455 -0
  224. snid_sage-0.1.0.post1.dev0/snid_sage/snid/optimization_integration.py +224 -0
  225. snid_sage-0.1.0.post1.dev0/snid_sage/snid/plotting.py +2290 -0
  226. snid_sage-0.1.0.post1.dev0/snid_sage/snid/plotting_3d.py +474 -0
  227. snid_sage-0.1.0.post1.dev0/snid_sage/snid/preprocessing.py +763 -0
  228. snid_sage-0.1.0.post1.dev0/snid_sage/snid/snid.py +2483 -0
  229. snid_sage-0.1.0.post1.dev0/snid_sage/snid/snid_test.py +232 -0
  230. snid_sage-0.1.0.post1.dev0/snid_sage/snid/snidtype.py +656 -0
  231. snid_sage-0.1.0.post1.dev0/snid_sage/snid/template_fft_storage.py +868 -0
  232. snid_sage-0.1.0.post1.dev0/snid_sage/snid/template_manager.py +399 -0
  233. snid_sage-0.1.0.post1.dev0/snid_sage/snid/vectorized_peak_finder.py +441 -0
  234. snid_sage-0.1.0.post1.dev0/snid_sage/templates/template_index.json +7936 -0
  235. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_AGN.hdf5 +0 -0
  236. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_GAP.hdf5 +0 -0
  237. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_Galaxy.hdf5 +0 -0
  238. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_II.hdf5 +0 -0
  239. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_Ia.hdf5 +0 -0
  240. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_Ib.hdf5 +0 -0
  241. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_Ibn.hdf5 +0 -0
  242. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_Ic.hdf5 +0 -0
  243. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_Icn.hdf5 +0 -0
  244. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_KN.hdf5 +0 -0
  245. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_LFBOT.hdf5 +0 -0
  246. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_SLSN.hdf5 +0 -0
  247. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_Star.hdf5 +0 -0
  248. snid_sage-0.1.0.post1.dev0/snid_sage/templates/templates_TDE.hdf5 +0 -0
  249. snid_sage-0.1.0.post1.dev0/snid_sage.egg-info/PKG-INFO +217 -0
  250. snid_sage-0.1.0.post1.dev0/snid_sage.egg-info/SOURCES.txt +252 -0
  251. snid_sage-0.1.0.post1.dev0/snid_sage.egg-info/dependency_links.txt +1 -0
  252. snid_sage-0.1.0.post1.dev0/snid_sage.egg-info/entry_points.txt +5 -0
  253. snid_sage-0.1.0.post1.dev0/snid_sage.egg-info/requires.txt +47 -0
  254. snid_sage-0.1.0.post1.dev0/snid_sage.egg-info/top_level.txt +1 -0
@@ -0,0 +1,57 @@
1
+ name: Deploy Documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ permissions:
10
+ contents: read
11
+ pages: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: "pages"
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ build:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: '3.11'
29
+
30
+ - name: Install dependencies
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ pip install mkdocs-material
34
+ pip install mkdocs-git-revision-date-localized-plugin
35
+
36
+ - name: Build documentation
37
+ run: mkdocs build
38
+
39
+ - name: Setup Pages
40
+ uses: actions/configure-pages@v4
41
+
42
+ - name: Upload artifact
43
+ uses: actions/upload-pages-artifact@v3
44
+ with:
45
+ path: './site'
46
+
47
+ deploy:
48
+ environment:
49
+ name: github-pages
50
+ url: ${{ steps.deployment.outputs.page_url }}
51
+ runs-on: ubuntu-latest
52
+ needs: build
53
+ if: github.ref == 'refs/heads/main'
54
+ steps:
55
+ - name: Deploy to GitHub Pages
56
+ id: deployment
57
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,149 @@
1
+ name: Deploy to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*' # Trigger on version tags like v1.2.3
7
+ workflow_dispatch: # Allow manual trigger
8
+ inputs:
9
+ test_pypi:
10
+ description: 'Deploy to Test PyPI instead of PyPI'
11
+ required: false
12
+ default: false
13
+ type: boolean
14
+
15
+ permissions:
16
+ contents: write # Required for creating releases
17
+ id-token: write # Required for PyPI trusted publishing (if used)
18
+
19
+ jobs:
20
+ test-before-deploy:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - name: Checkout code
24
+ uses: actions/checkout@v4
25
+ with:
26
+ fetch-depth: 0 # Fetch all history for setuptools_scm
27
+
28
+ - name: Set up Python
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: '3.11'
32
+
33
+ - name: Install system dependencies
34
+ run: |
35
+ sudo apt-get update
36
+ sudo apt-get install -y libhdf5-dev libpng-dev libjpeg-dev pkg-config build-essential
37
+
38
+ - name: Install build dependencies
39
+ run: |
40
+ python -m pip install --upgrade pip
41
+ pip install build twine setuptools_scm[toml]
42
+
43
+ - name: Verify version detection
44
+ run: |
45
+ python -c "
46
+ from setuptools_scm import get_version
47
+ version = get_version()
48
+ print(f'Detected version: {version}')
49
+ "
50
+
51
+ - name: Build package
52
+ run: |
53
+ python -m build
54
+
55
+ - name: Check package
56
+ run: |
57
+ python -m twine check dist/*
58
+
59
+ - name: Test basic import
60
+ run: |
61
+ pip install dist/*.whl
62
+ python -c "import snid_sage; print(f'Package version: {snid_sage.__version__}')"
63
+
64
+ deploy:
65
+ needs: test-before-deploy
66
+ runs-on: ubuntu-latest
67
+
68
+ steps:
69
+ - name: Checkout code
70
+ uses: actions/checkout@v4
71
+ with:
72
+ fetch-depth: 0 # Fetch all history for setuptools_scm
73
+
74
+ - name: Set up Python
75
+ uses: actions/setup-python@v5
76
+ with:
77
+ python-version: '3.11'
78
+
79
+ - name: Install system dependencies
80
+ run: |
81
+ sudo apt-get update
82
+ sudo apt-get install -y libhdf5-dev libpng-dev libjpeg-dev pkg-config build-essential
83
+
84
+ - name: Install build dependencies
85
+ run: |
86
+ python -m pip install --upgrade pip
87
+ pip install build twine setuptools_scm[toml]
88
+
89
+ - name: Build package
90
+ run: |
91
+ python -m build
92
+
93
+ - name: Verify built package
94
+ run: |
95
+ echo "Built files:"
96
+ ls -la dist/
97
+ echo "Package contents:"
98
+ python -m twine check dist/*
99
+
100
+ - name: Deploy to Test PyPI
101
+ if: github.event.inputs.test_pypi == 'true'
102
+ run: |
103
+ python -m twine upload --repository testpypi dist/*
104
+ env:
105
+ TWINE_USERNAME: __token__
106
+ TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}
107
+
108
+ - name: Deploy to PyPI
109
+ if: github.event.inputs.test_pypi != 'true'
110
+ run: |
111
+ python -m twine upload dist/*
112
+ env:
113
+ TWINE_USERNAME: __token__
114
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
115
+
116
+ - name: Create GitHub Release
117
+ if: github.event.inputs.test_pypi != 'true' && startsWith(github.ref, 'refs/tags/')
118
+ uses: softprops/action-gh-release@v1
119
+ with:
120
+ tag_name: ${{ github.ref_name }}
121
+ name: SNID SAGE ${{ github.ref_name }}
122
+ body: |
123
+ ## SNID SAGE ${{ github.ref_name }}
124
+
125
+ ### Installation
126
+ ```bash
127
+ pip install snid-sage
128
+ ```
129
+
130
+ ### What's Changed
131
+ - See commit history for detailed changes
132
+
133
+ ### Full Changelog
134
+ **Full Changelog**: https://github.com/FiorenSt/SNID-SAGE/compare/v0.0.1...${{ github.ref_name }}
135
+ draft: false
136
+ prerelease: false
137
+ generate_release_notes: true
138
+
139
+ notify-success:
140
+ needs: deploy
141
+ runs-on: ubuntu-latest
142
+ if: success()
143
+ steps:
144
+ - name: Notify deployment success
145
+ run: |
146
+ echo "🎉 SNID SAGE successfully deployed to PyPI!"
147
+ echo "📦 Package: snid-sage"
148
+ echo "🏷️ Version: ${{ github.ref_name }}"
149
+ echo "📋 Install command: pip install snid-sage"
@@ -0,0 +1,245 @@
1
+ name: Test Package Installation
2
+
3
+ on:
4
+ # DISABLED - Using test-pypi-only.yml instead
5
+ # This workflow is disabled and will not run
6
+ workflow_dispatch:
7
+ inputs:
8
+ disabled:
9
+ description: 'This workflow is disabled'
10
+ required: true
11
+ default: 'disabled'
12
+
13
+ jobs:
14
+ test-installation:
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ # Test key combinations to avoid too many jobs
19
+ include:
20
+ # Core platform testing
21
+ - os: ubuntu-latest
22
+ python-version: "3.11"
23
+ install-method: "pip"
24
+ test-name: "Ubuntu Python 3.11"
25
+ - os: macos-latest
26
+ python-version: "3.11"
27
+ install-method: "pip"
28
+ test-name: "macOS Python 3.11"
29
+ - os: windows-latest
30
+ python-version: "3.11"
31
+ install-method: "pip"
32
+ test-name: "Windows Python 3.11"
33
+ # Test conda on macOS
34
+ - os: macos-latest
35
+ python-version: "3.11"
36
+ install-method: "conda"
37
+ test-name: "macOS Conda Python 3.11"
38
+ # Test older Python versions
39
+ - os: ubuntu-latest
40
+ python-version: "3.8"
41
+ install-method: "pip"
42
+ test-name: "Ubuntu Python 3.8"
43
+ - os: macos-latest
44
+ python-version: "3.12"
45
+ install-method: "pip"
46
+ test-name: "macOS Python 3.12"
47
+
48
+ runs-on: ${{ matrix.os }}
49
+
50
+ steps:
51
+ - name: Checkout code
52
+ uses: actions/checkout@v4
53
+
54
+ - name: Set up Python ${{ matrix.python-version }}
55
+ uses: actions/setup-python@v5
56
+ with:
57
+ python-version: ${{ matrix.python-version }}
58
+
59
+ - name: Set up Conda (if using conda)
60
+ if: matrix.install-method == 'conda'
61
+ uses: conda-incubator/setup-miniconda@v3
62
+ with:
63
+ python-version: ${{ matrix.python-version }}
64
+
65
+ - name: Cache pip dependencies
66
+ uses: actions/cache@v3
67
+ with:
68
+ path: ~/.cache/pip
69
+ key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml', '**/requirements*.txt') }}
70
+ restore-keys: |
71
+ ${{ runner.os }}-pip-
72
+
73
+ - name: Install system dependencies (macOS)
74
+ if: runner.os == 'macOS'
75
+ run: |
76
+ # Install Homebrew if not available
77
+ if ! command -v brew &> /dev/null; then
78
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
79
+ fi
80
+ brew install hdf5
81
+ brew install libpng
82
+ brew install libjpeg
83
+ brew install pkg-config
84
+
85
+ - name: Install system dependencies (Ubuntu)
86
+ if: runner.os == 'Linux'
87
+ run: |
88
+ sudo apt-get update
89
+ sudo apt-get install -y libhdf5-dev libpng-dev libjpeg-dev pkg-config build-essential
90
+
91
+ - name: Build package
92
+ run: |
93
+ python -m pip install --upgrade pip build wheel
94
+ python -m build --sdist --wheel
95
+
96
+ - name: Test pip installation
97
+ if: matrix.install-method == 'pip'
98
+ shell: bash
99
+ run: |
100
+ set -euxo pipefail
101
+ echo "Testing: ${{ matrix.test-name }}"
102
+
103
+ # Test installation from wheel
104
+ python -m pip install dist/*.whl
105
+
106
+ # Test basic import
107
+ python -c "import snid_sage; print('✅ Package imported successfully')"
108
+
109
+ # Test CLI commands
110
+ echo "Testing CLI commands..."
111
+ snid --help && echo "✅ snid CLI works"
112
+ snid-gui --help && echo "✅ snid-gui CLI works"
113
+ snid-sage --help && echo "✅ snid-sage CLI works"
114
+
115
+ # Test optional dependencies + dev extras
116
+ echo "Testing optional dependencies..."
117
+ python -m pip install ".[dev]"
118
+ python -c "import snid_sage; print('✅ Package with dev dependencies imported successfully')"
119
+
120
+ # Test core functionality
121
+ echo "Testing core functionality..."
122
+ python -c "
123
+ from snid_sage.shared.utils.data_io.spectrum_loader import SpectrumLoader
124
+ loader = SpectrumLoader()
125
+ print('✅ Core functionality works')
126
+ "
127
+
128
+ - name: Test sdist installation
129
+ if: matrix.install-method == 'pip'
130
+ shell: bash
131
+ run: |
132
+ set -euxo pipefail
133
+ echo "Testing sdist installation..."
134
+ pip uninstall -y snid-sage
135
+ python -m pip install dist/*.tar.gz
136
+ python -c "import snid_sage; print('✅ sdist installation successful')"
137
+
138
+ - name: Run unit tests
139
+ if: matrix.install-method == 'pip'
140
+ shell: bash
141
+ run: |
142
+ set -euxo pipefail
143
+ echo "Running unit tests..."
144
+ python -m pip install ".[dev]"
145
+ pytest -q
146
+
147
+ - name: Test conda installation
148
+ if: matrix.install-method == 'conda'
149
+ run: |
150
+ echo "Testing: ${{ matrix.test-name }}"
151
+
152
+ # Install package in conda environment
153
+ conda install -c conda-forge pip
154
+ pip install dist/*.whl
155
+
156
+ # Test basic import
157
+ python -c "import snid_sage; print('✅ Package imported successfully in conda')"
158
+
159
+ # Test CLI commands
160
+ echo "Testing CLI commands in conda..."
161
+ snid --help && echo "✅ snid CLI works in conda"
162
+ snid-gui --help && echo "✅ snid-gui CLI works in conda"
163
+ snid-sage --help && echo "✅ snid-sage CLI works in conda"
164
+
165
+ # Test core functionality
166
+ echo "Testing core functionality in conda..."
167
+ python -c "
168
+ from snid_sage.shared.utils.data_io.spectrum_loader import SpectrumLoader
169
+ loader = SpectrumLoader()
170
+ print('✅ Core functionality works in conda')
171
+ "
172
+
173
+ - name: Test GUI import (if GUI dependencies available)
174
+ run: |
175
+ echo "Testing GUI module import..."
176
+ python -c "
177
+ try:
178
+ import snid_sage.interfaces.gui.sage_gui
179
+ print('✅ GUI module imported successfully')
180
+ except ImportError as e:
181
+ print(f'⚠️ GUI import failed (expected on CI): {e}')
182
+ except Exception as e:
183
+ print(f'❌ GUI exception: {e}')
184
+ "
185
+
186
+ - name: Test optional dependencies availability
187
+ run: |
188
+ echo "Testing optional dependencies..."
189
+ for dep in astropy scipy matplotlib pandas h5py; do
190
+ if python -c "import $dep" 2>/dev/null; then
191
+ echo "✅ $dep available"
192
+ else
193
+ echo "⚠️ $dep not available"
194
+ fi
195
+ done
196
+
197
+ - name: Test Summary
198
+ if: always()
199
+ run: |
200
+ echo "### ${{ matrix.test-name }} 📝" >> "$GITHUB_STEP_SUMMARY"
201
+ echo "- Package built and installed successfully" >> "$GITHUB_STEP_SUMMARY"
202
+ echo "- CLI commands available" >> "$GITHUB_STEP_SUMMARY"
203
+ echo "- Core functionality works" >> "$GITHUB_STEP_SUMMARY"
204
+ echo "- Optional dependencies handled" >> "$GITHUB_STEP_SUMMARY"
205
+
206
+ test-pypi-installation:
207
+ runs-on: macos-latest
208
+ if: github.event_name == 'release'
209
+
210
+ steps:
211
+ - name: Checkout code
212
+ uses: actions/checkout@v4
213
+
214
+ - name: Set up Python
215
+ uses: actions/setup-python@v5
216
+ with:
217
+ python-version: "3.11"
218
+
219
+ - name: Install from PyPI
220
+ run: |
221
+ echo "Testing PyPI installation on macOS..."
222
+ python -m pip install --upgrade pip
223
+ python -m pip install snid-sage
224
+
225
+ # Test basic functionality
226
+ python -c "import snid_sage; print('✅ PyPI installation successful')"
227
+
228
+ # Test CLI commands
229
+ echo "Testing PyPI CLI commands..."
230
+ snid --help && echo "✅ PyPI snid CLI works"
231
+ snid-gui --help && echo "✅ PyPI snid-gui CLI works"
232
+ snid-sage --help && echo "✅ PyPI snid-sage CLI works"
233
+
234
+ - name: Test PyPI with optional dependencies
235
+ run: |
236
+ echo "Testing PyPI with dev dependencies..."
237
+ python -m pip install "snid-sage[dev]"
238
+ python -c "import snid_sage; print('✅ PyPI installation with dev dependencies successful')"
239
+
240
+ # Test core functionality
241
+ python -c "
242
+ from snid_sage.shared.utils.data_io.spectrum_loader import SpectrumLoader
243
+ loader = SpectrumLoader()
244
+ print('✅ PyPI core functionality works')
245
+ "