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