diskmelts 2.2.1__tar.gz → 2.2.2__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 (123) hide show
  1. {diskmelts-2.2.1/src/diskmelts.egg-info → diskmelts-2.2.2}/PKG-INFO +5 -5
  2. {diskmelts-2.2.1 → diskmelts-2.2.2}/README.md +2 -2
  3. {diskmelts-2.2.1 → diskmelts-2.2.2}/pyproject.toml +5 -6
  4. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/__init__.py +2 -0
  5. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
  6. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/13CO2_single_v2/net_13CO2_forward.pt +0 -0
  7. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
  8. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
  9. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/C2H4_single_v2/net_C2H4_forward.pt +0 -0
  10. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/C2H6_single_v2/net_C2H6_forward.pt +0 -0
  11. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/C2HD_single_v2/net_C2HD_forward.pt +0 -0
  12. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/C3H4_single_v2/net_C3H4_forward.pt +0 -0
  13. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/C4H2_single_v2/net_C4H2_forward.pt +0 -0
  14. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma0/C6H6_single_v2/net_C6H6_forward.pt +0 -0
  15. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/CH3_single_v2/net_CH3_forward.pt +0 -0
  16. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/CH4_single_v2/net_CH4_forward.pt +0 -0
  17. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/CO17O_single_v2/net_CO17O_forward.pt +0 -0
  18. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/CO18O_single_v2/net_CO18O_forward.pt +0 -0
  19. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/CO2_single_v2/net_CO2_forward.pt +0 -0
  20. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
  21. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w19to25_n13to19_t100to1400.pt +0 -0
  22. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
  23. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
  24. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
  25. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/HC3N_single_v2/net_HC3N_forward.pt +0 -0
  26. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/HCN_single_v2/net_HCN_forward.pt +0 -0
  27. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma0/OH_single_v2/net_OH_forward.pt +0 -0
  28. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
  29. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/13CO2_single_v2/net_13CO2_forward.pt +0 -0
  30. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
  31. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
  32. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/C2H4_single_v2/net_C2H4_forward.pt +0 -0
  33. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/C2H6_single_v2/net_C2H6_forward.pt +0 -0
  34. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/C2HD_single_v2/net_C2HD_forward.pt +0 -0
  35. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/C3H4_single_v2/net_C3H4_forward.pt +0 -0
  36. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma2/C4H2_single_v2/net_C4H2_forward.pt +0 -0
  37. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma2/C6H6_single_v2/net_C6H6_forward.pt +0 -0
  38. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/CH3_single_v2/net_CH3_forward.pt +0 -0
  39. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/CH4_single_v2/net_CH4_forward.pt +0 -0
  40. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/CO17O_single_v2/net_CO17O_forward.pt +0 -0
  41. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/CO18O_single_v2/net_CO18O_forward.pt +0 -0
  42. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/CO2_single_v2/net_CO2_forward.pt +0 -0
  43. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
  44. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w19to25_n13to19_t100to1400.pt +0 -0
  45. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
  46. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
  47. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
  48. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma2/HC3N_single_v2/net_HC3N_forward.pt +0 -0
  49. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/HCN_single_v2/net_HCN_forward.pt +0 -0
  50. diskmelts-2.2.2/src/diskmelts/models/Trained_model/sigma2/OH_single_v2/net_OH_forward.pt +0 -0
  51. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/trainmodel.py +125 -8
  52. {diskmelts-2.2.1 → diskmelts-2.2.2/src/diskmelts.egg-info}/PKG-INFO +5 -5
  53. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts.egg-info/requires.txt +1 -1
  54. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
  55. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/13CO2_single_v2/net_13CO2_forward.pt +0 -0
  56. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
  57. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
  58. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/C2H4_single_v2/net_C2H4_forward.pt +0 -0
  59. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/C2H6_single_v2/net_C2H6_forward.pt +0 -0
  60. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/C2HD_single_v2/net_C2HD_forward.pt +0 -0
  61. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/C3H4_single_v2/net_C3H4_forward.pt +0 -0
  62. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/C4H2_single_v2/net_C4H2_forward.pt +0 -0
  63. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/CH3_single_v2/net_CH3_forward.pt +0 -0
  64. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/CH4_single_v2/net_CH4_forward.pt +0 -0
  65. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/CO17O_single_v2/net_CO17O_forward.pt +0 -0
  66. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/CO18O_single_v2/net_CO18O_forward.pt +0 -0
  67. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/CO2_single_v2/net_CO2_forward.pt +0 -0
  68. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
  69. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
  70. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
  71. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
  72. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/HC3N_single_v2/net_HC3N_forward.pt +0 -0
  73. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/HCN_single_v2/net_HCN_forward.pt +0 -0
  74. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma0/OH_single_v2/net_OH_forward.pt +0 -0
  75. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
  76. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/13CO2_single_v2/net_13CO2_forward.pt +0 -0
  77. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
  78. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
  79. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/C2H4_single_v2/net_C2H4_forward.pt +0 -0
  80. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/C2H6_single_v2/net_C2H6_forward.pt +0 -0
  81. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/C2HD_single_v2/net_C2HD_forward.pt +0 -0
  82. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/C3H4_single_v2/net_C3H4_forward.pt +0 -0
  83. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/CH3_single_v2/net_CH3_forward.pt +0 -0
  84. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/CH4_single_v2/net_CH4_forward.pt +0 -0
  85. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/CO17O_single_v2/net_CO17O_forward.pt +0 -0
  86. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/CO18O_single_v2/net_CO18O_forward.pt +0 -0
  87. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/CO2_single_v2/net_CO2_forward.pt +0 -0
  88. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
  89. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
  90. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
  91. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
  92. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/HCN_single_v2/net_HCN_forward.pt +0 -0
  93. diskmelts-2.2.1/src/diskmelts/models/Trained_model/sigma2/OH_single_v2/net_OH_forward.pt +0 -0
  94. {diskmelts-2.2.1 → diskmelts-2.2.2}/LICENSE +0 -0
  95. {diskmelts-2.2.1 → diskmelts-2.2.2}/MANIFEST.in +0 -0
  96. {diskmelts-2.2.1 → diskmelts-2.2.2}/setup.cfg +0 -0
  97. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/__init__.py +0 -0
  98. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/_api.py +0 -0
  99. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/_core.py +0 -0
  100. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/cont_ranges.csv +0 -0
  101. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/cont_ranges_PPan.csv +0 -0
  102. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/carbon_extended.csv +0 -0
  103. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/carbon_extended.json +0 -0
  104. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/carbon_rich.csv +0 -0
  105. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/carbon_rich.json +0 -0
  106. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/ttauri.csv +0 -0
  107. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/ttauri.json +0 -0
  108. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/water.csv +0 -0
  109. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/consub/regions/water.json +0 -0
  110. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/fitting.py +0 -0
  111. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/C2H2_model_bank.json +0 -0
  112. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/H2O_model_bank.json +0 -0
  113. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/C2H2_model_bank.json +0 -0
  114. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/H2O_model_bank.json +0 -0
  115. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/plotting.py +0 -0
  116. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/v2_fitting.py +0 -0
  117. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/v2_grid_fitting.py +0 -0
  118. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/v2_paper_comparison.py +0 -0
  119. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/v2_read_plot.py +0 -0
  120. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts/validation.py +0 -0
  121. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts.egg-info/SOURCES.txt +0 -0
  122. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts.egg-info/dependency_links.txt +0 -0
  123. {diskmelts-2.2.1 → diskmelts-2.2.2}/src/diskmelts.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diskmelts
3
- Version: 2.2.1
3
+ Version: 2.2.2
4
4
  Summary: Machine-learning Enabled Line fitting Tool for Spectra of protoplanetary disks
5
5
  Author: Chengyan Xie, Dingshan Deng
6
6
  License-Expression: MIT
@@ -12,7 +12,7 @@ Keywords: astronomy,protoplanetary disks,JWST,spectral fitting,machine learning
12
12
  Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Operating System :: OS Independent
14
14
  Classifier: Topic :: Scientific/Engineering :: Astronomy
15
- Requires-Python: >=3.11
15
+ Requires-Python: >=3.9
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: torch>=1.13
@@ -20,7 +20,7 @@ Requires-Dist: numpy<2,>=1.26; sys_platform == "darwin" and platform_machine ==
20
20
  Requires-Dist: numpy; sys_platform != "darwin" or platform_machine != "x86_64"
21
21
  Requires-Dist: pandas
22
22
  Requires-Dist: scipy
23
- Requires-Dist: scikit-learn<1.9,>=1.8
23
+ Requires-Dist: scikit-learn>=1.0
24
24
  Requires-Dist: matplotlib
25
25
  Provides-Extra: io
26
26
  Requires-Dist: astropy; extra == "io"
@@ -50,7 +50,7 @@ density (`logN`), and emitting area scaling (`A`) from observed spectra.
50
50
  ## Installation
51
51
 
52
52
  DiskMELTS is available on [PyPI](https://pypi.org/project/diskmelts/) and
53
- requires Python 3.11 or newer. It bundles 46 production checkpoints, 23 each
53
+ requires Python 3.9 or newer. It bundles 46 production checkpoints, 23 each
54
54
  for the sigma=0 and sigma=2 grids, covering the same 18 species (see
55
55
  [Available molecules](#available-molecules)).
56
56
  Install it from any directory. These commands use
@@ -126,7 +126,7 @@ covers multi-stage fits, saved outputs, and plots.
126
126
  | `numpy` | Array operations |
127
127
  | `pandas` | CSV I/O |
128
128
  | `scipy` | L-BFGS-B optimizer, NNLS, Sobol sampling |
129
- | `scikit-learn` | Model scaling and PCA metadata |
129
+ | `scikit-learn` | PCA and scaling when training new models |
130
130
  | `matplotlib` | Plotting |
131
131
 
132
132
  ## Continuum subtraction
@@ -11,7 +11,7 @@ density (`logN`), and emitting area scaling (`A`) from observed spectra.
11
11
  ## Installation
12
12
 
13
13
  DiskMELTS is available on [PyPI](https://pypi.org/project/diskmelts/) and
14
- requires Python 3.11 or newer. It bundles 46 production checkpoints, 23 each
14
+ requires Python 3.9 or newer. It bundles 46 production checkpoints, 23 each
15
15
  for the sigma=0 and sigma=2 grids, covering the same 18 species (see
16
16
  [Available molecules](#available-molecules)).
17
17
  Install it from any directory. These commands use
@@ -87,7 +87,7 @@ covers multi-stage fits, saved outputs, and plots.
87
87
  | `numpy` | Array operations |
88
88
  | `pandas` | CSV I/O |
89
89
  | `scipy` | L-BFGS-B optimizer, NNLS, Sobol sampling |
90
- | `scikit-learn` | Model scaling and PCA metadata |
90
+ | `scikit-learn` | PCA and scaling when training new models |
91
91
  | `matplotlib` | Plotting |
92
92
 
93
93
  ## Continuum subtraction
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "diskmelts"
7
- version = "2.2.1"
7
+ version = "2.2.2"
8
8
  description = "Machine-learning Enabled Line fitting Tool for Spectra of protoplanetary disks"
9
9
  readme = "README.md"
10
- requires-python = ">=3.11"
10
+ requires-python = ">=3.9"
11
11
  license = "MIT"
12
12
  license-files = ["LICENSE"]
13
13
  authors = [
@@ -21,16 +21,15 @@ classifiers = [
21
21
  "Topic :: Scientific/Engineering :: Astronomy",
22
22
  ]
23
23
  dependencies = [
24
- # Checkpoints load with torch.load(weights_only=False), added in 1.13.
24
+ # Checkpoints load with torch.load(weights_only=True), added in 1.13.
25
25
  "torch>=1.13",
26
26
  # Intel macOS wheels stop at PyTorch 2.2, whose NumPy bridge needs NumPy 1.x.
27
27
  "numpy>=1.26,<2; sys_platform == 'darwin' and platform_machine == 'x86_64'",
28
28
  "numpy; sys_platform != 'darwin' or platform_machine != 'x86_64'",
29
29
  "pandas",
30
30
  "scipy",
31
- # Bundled checkpoints pickle scikit-learn 1.8 PCA/scaler objects; keep the
32
- # same minor version so they unpickle without a cross-version warning.
33
- "scikit-learn>=1.8,<1.9",
31
+ # Used only to fit PCA/scalers when training; checkpoints store plain arrays.
32
+ "scikit-learn>=1.0",
34
33
  "matplotlib",
35
34
  ]
36
35
 
@@ -12,6 +12,7 @@ from diskmelts.trainmodel import (
12
12
  train_model_bank,
13
13
  select_grid_holdout,
14
14
  tune_pca_components,
15
+ convert_legacy_checkpoint,
15
16
  )
16
17
  from diskmelts.fitting import (
17
18
  load_models,
@@ -78,6 +79,7 @@ __all__ = [
78
79
  "train_model_bank",
79
80
  "select_grid_holdout",
80
81
  "tune_pca_components",
82
+ "convert_legacy_checkpoint",
81
83
  # fitting
82
84
  "load_models",
83
85
  "load_model_bank",
@@ -10,6 +10,7 @@ Provides public functions:
10
10
  train_model_bank : train overlapping wavelength/T/logN checkpoint tiles
11
11
  select_grid_holdout : reproducibly withhold complete slab-grid models
12
12
  tune_pca_components : choose PCA size from unseen-spectrum reconstruction
13
+ convert_legacy_checkpoint: rewrite a checkpoint's scikit-learn objects as arrays
13
14
 
14
15
  Run as a script to generate pretrain CSVs, train all four molecules, and save
15
16
  loss-curve diagnostics:
@@ -23,6 +24,7 @@ import copy
23
24
  import hashlib
24
25
  import json
25
26
  import os
27
+ import pickle
26
28
  import re
27
29
  import numpy as np
28
30
  import pandas as pd
@@ -30,8 +32,120 @@ import torch
30
32
  import torch.nn as nn
31
33
  import torch.optim as optim
32
34
  from torch.utils.data import DataLoader, TensorDataset
33
- from sklearn.preprocessing import StandardScaler
34
- from sklearn.model_selection import train_test_split
35
+
36
+
37
+ # ===========================================================================
38
+ # Array-only preprocessing (checkpoint format)
39
+ # ===========================================================================
40
+
41
+ class ArrayScaler:
42
+ """Standardization stored as plain arrays (the StandardScaler subset used)."""
43
+
44
+ def __init__(self, mean, scale):
45
+ self.mean_ = np.asarray(mean)
46
+ self.scale_ = np.asarray(scale)
47
+ self.n_features_in_ = self.mean_.shape[0]
48
+
49
+ def transform(self, X):
50
+ return (np.asarray(X) - self.mean_) / self.scale_
51
+
52
+ def inverse_transform(self, Z):
53
+ return np.asarray(Z) * self.scale_ + self.mean_
54
+
55
+
56
+ class ArrayPCA:
57
+ """Non-whitened PCA projection stored as plain arrays."""
58
+
59
+ def __init__(self, components, mean, explained_variance_ratio=None):
60
+ self.components_ = np.asarray(components)
61
+ self.mean_ = np.asarray(mean)
62
+ self.n_components_ = self.components_.shape[0]
63
+ self.explained_variance_ratio_ = (None if explained_variance_ratio is None
64
+ else np.asarray(explained_variance_ratio))
65
+
66
+ def transform(self, X):
67
+ return (np.asarray(X) - self.mean_) @ self.components_.T
68
+
69
+ def inverse_transform(self, Z):
70
+ return np.asarray(Z) @ self.components_ + self.mean_
71
+
72
+
73
+ def _to_tensor(values):
74
+ return torch.from_numpy(np.array(values, copy=True))
75
+
76
+
77
+ def _scaler_state(scaler):
78
+ return {'mean': _to_tensor(scaler.mean_), 'scale': _to_tensor(scaler.scale_)}
79
+
80
+
81
+ def _pca_state(pca):
82
+ if pca is None:
83
+ return None
84
+ if getattr(pca, 'whiten', False):
85
+ raise ValueError('whitened PCA cannot be stored as a plain projection')
86
+ state = {'components': _to_tensor(pca.components_), 'mean': _to_tensor(pca.mean_)}
87
+ if getattr(pca, 'explained_variance_ratio_', None) is not None:
88
+ state['explained_variance_ratio'] = _to_tensor(pca.explained_variance_ratio_)
89
+ return state
90
+
91
+
92
+ def _restore_scaler(value):
93
+ if isinstance(value, dict):
94
+ return ArrayScaler(value['mean'].numpy(), value['scale'].numpy())
95
+ return value # legacy scikit-learn object
96
+
97
+
98
+ def _restore_pca(value):
99
+ if isinstance(value, dict):
100
+ ratio = value.get('explained_variance_ratio')
101
+ return ArrayPCA(value['components'].numpy(), value['mean'].numpy(),
102
+ None if ratio is None else ratio.numpy())
103
+ return value # None or a legacy scikit-learn object
104
+
105
+
106
+ def _load_checkpoint(path, device='cpu'):
107
+ """Load a checkpoint, restoring array preprocessing.
108
+
109
+ Array-format checkpoints load with ``weights_only=True`` and need no
110
+ scikit-learn. Older checkpoints pickle scikit-learn objects and fall back
111
+ to a full unpickle, which requires a compatible scikit-learn.
112
+ """
113
+ try:
114
+ ckpt = torch.load(path, map_location=device, weights_only=True)
115
+ except pickle.UnpicklingError:
116
+ ckpt = torch.load(path, map_location=device, weights_only=False)
117
+ for key in ('xp_sc', 'yp_sc_shape', 'yp_sc_peak'):
118
+ if key in ckpt:
119
+ ckpt[key] = _restore_scaler(ckpt[key])
120
+ ckpt['pca'] = _restore_pca(ckpt.get('pca'))
121
+ if 'wav' in ckpt and isinstance(ckpt['wav'], torch.Tensor):
122
+ ckpt['wav'] = ckpt['wav'].numpy()
123
+ return ckpt
124
+
125
+
126
+ def _array_checkpoint(ckpt):
127
+ """Return a copy of a checkpoint dict with array-only preprocessing."""
128
+ out = dict(ckpt)
129
+ for key in ('xp_sc', 'yp_sc_shape', 'yp_sc_peak'):
130
+ if key in out and not isinstance(out[key], dict):
131
+ out[key] = _scaler_state(out[key])
132
+ if out.get('pca') is not None and not isinstance(out['pca'], dict):
133
+ out['pca'] = _pca_state(out['pca'])
134
+ if 'wav' in out and not isinstance(out['wav'], torch.Tensor):
135
+ out['wav'] = _to_tensor(out['wav'])
136
+ return out
137
+
138
+
139
+ def convert_legacy_checkpoint(path, output_path=None):
140
+ """Rewrite a checkpoint's scikit-learn scalers/PCA as plain arrays.
141
+
142
+ Converted checkpoints load without scikit-learn and give identical
143
+ spectra. Loading the legacy file once still needs a compatible
144
+ scikit-learn. Writes to ``output_path`` (default: overwrite ``path``).
145
+ """
146
+ ckpt = torch.load(path, map_location='cpu', weights_only=False)
147
+ torch.save(_array_checkpoint(ckpt), output_path or path)
148
+ return output_path or path
35
149
 
36
150
 
37
151
  # ===========================================================================
@@ -460,8 +574,6 @@ def pretrain_forward_model(
460
574
  X_pre_v_t (torch.Tensor) : standardised val inputs on device
461
575
  log10p_v (np.ndarray) : true log10(peak) for val samples
462
576
  """
463
- from sklearn.decomposition import PCA as _PCA
464
-
465
577
  if peak_normalization not in ('csv', 'window'):
466
578
  raise ValueError("peak_normalization must be 'csv' or 'window'")
467
579
  if shape_loss not in ('standardized', 'spectral', 'spectral_edge'):
@@ -479,7 +591,7 @@ def pretrain_forward_model(
479
591
  'pretrain_csv is required when training or when model_path '
480
592
  'does not point to an existing checkpoint'
481
593
  )
482
- ckpt = torch.load(model_path, map_location=device, weights_only=False)
594
+ ckpt = _load_checkpoint(model_path, device)
483
595
  missing = [key for key in ('xp_sc', 'wav') if key not in ckpt]
484
596
  if missing:
485
597
  raise ValueError(
@@ -534,6 +646,11 @@ def pretrain_forward_model(
534
646
  shape_edge_weight=ckpt.get('shape_edge_weight', 1.0),
535
647
  )
536
648
 
649
+ # scikit-learn is needed only to fit new preprocessing, not to load.
650
+ from sklearn.decomposition import PCA as _PCA
651
+ from sklearn.model_selection import train_test_split
652
+ from sklearn.preprocessing import StandardScaler
653
+
537
654
  # --- Load pretrain CSV and select wavelength channels ---
538
655
  df_pre = pd.read_csv(pretrain_csv)
539
656
  pre_flux_cols = [c for c in df_pre.columns
@@ -634,7 +751,7 @@ def pretrain_forward_model(
634
751
 
635
752
  # --- Load from checkpoint if it exists ---
636
753
  if model_path and os.path.exists(model_path):
637
- ckpt = torch.load(model_path, map_location=device, weights_only=False)
754
+ ckpt = _load_checkpoint(model_path, device)
638
755
  expected_metadata = {
639
756
  'wav_range': tuple(map(float, wav_range)),
640
757
  'T_range': None if T_range is None else tuple(map(float, T_range)),
@@ -868,7 +985,7 @@ def pretrain_forward_model(
868
985
  # Save checkpoint
869
986
  if model_path:
870
987
  os.makedirs(os.path.dirname(os.path.abspath(model_path)), exist_ok=True)
871
- torch.save({
988
+ torch.save(_array_checkpoint({
872
989
  'model_state_shape': net_shape.state_dict(),
873
990
  'model_state_peak': net_peak.state_dict(),
874
991
  'train_losses_shape': train_losses_shape,
@@ -899,7 +1016,7 @@ def pretrain_forward_model(
899
1016
  'training_data_sha256': training_data_sha256,
900
1017
  'n_dark_training': int((~peak_tr_valid).sum()),
901
1018
  'n_dark_validation': int((~peak_v_valid).sum()),
902
- }, model_path)
1019
+ }), model_path)
903
1020
  print(f' [{mol}] saved → {model_path}')
904
1021
 
905
1022
  return dict(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diskmelts
3
- Version: 2.2.1
3
+ Version: 2.2.2
4
4
  Summary: Machine-learning Enabled Line fitting Tool for Spectra of protoplanetary disks
5
5
  Author: Chengyan Xie, Dingshan Deng
6
6
  License-Expression: MIT
@@ -12,7 +12,7 @@ Keywords: astronomy,protoplanetary disks,JWST,spectral fitting,machine learning
12
12
  Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Operating System :: OS Independent
14
14
  Classifier: Topic :: Scientific/Engineering :: Astronomy
15
- Requires-Python: >=3.11
15
+ Requires-Python: >=3.9
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: torch>=1.13
@@ -20,7 +20,7 @@ Requires-Dist: numpy<2,>=1.26; sys_platform == "darwin" and platform_machine ==
20
20
  Requires-Dist: numpy; sys_platform != "darwin" or platform_machine != "x86_64"
21
21
  Requires-Dist: pandas
22
22
  Requires-Dist: scipy
23
- Requires-Dist: scikit-learn<1.9,>=1.8
23
+ Requires-Dist: scikit-learn>=1.0
24
24
  Requires-Dist: matplotlib
25
25
  Provides-Extra: io
26
26
  Requires-Dist: astropy; extra == "io"
@@ -50,7 +50,7 @@ density (`logN`), and emitting area scaling (`A`) from observed spectra.
50
50
  ## Installation
51
51
 
52
52
  DiskMELTS is available on [PyPI](https://pypi.org/project/diskmelts/) and
53
- requires Python 3.11 or newer. It bundles 46 production checkpoints, 23 each
53
+ requires Python 3.9 or newer. It bundles 46 production checkpoints, 23 each
54
54
  for the sigma=0 and sigma=2 grids, covering the same 18 species (see
55
55
  [Available molecules](#available-molecules)).
56
56
  Install it from any directory. These commands use
@@ -126,7 +126,7 @@ covers multi-stage fits, saved outputs, and plots.
126
126
  | `numpy` | Array operations |
127
127
  | `pandas` | CSV I/O |
128
128
  | `scipy` | L-BFGS-B optimizer, NNLS, Sobol sampling |
129
- | `scikit-learn` | Model scaling and PCA metadata |
129
+ | `scikit-learn` | PCA and scaling when training new models |
130
130
  | `matplotlib` | Plotting |
131
131
 
132
132
  ## Continuum subtraction
@@ -1,7 +1,7 @@
1
1
  torch>=1.13
2
2
  pandas
3
3
  scipy
4
- scikit-learn<1.9,>=1.8
4
+ scikit-learn>=1.0
5
5
  matplotlib
6
6
 
7
7
  [:sys_platform != "darwin" or platform_machine != "x86_64"]
File without changes
File without changes
File without changes