diskmelts 2.3.0__tar.gz → 2.3.1__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 (84) hide show
  1. {diskmelts-2.3.0/src/diskmelts.egg-info → diskmelts-2.3.1}/PKG-INFO +1 -1
  2. {diskmelts-2.3.0 → diskmelts-2.3.1}/pyproject.toml +1 -1
  3. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_fitting.py +4 -2
  4. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_read_plot.py +59 -15
  5. {diskmelts-2.3.0 → diskmelts-2.3.1/src/diskmelts.egg-info}/PKG-INFO +1 -1
  6. {diskmelts-2.3.0 → diskmelts-2.3.1}/LICENSE +0 -0
  7. {diskmelts-2.3.0 → diskmelts-2.3.1}/MANIFEST.in +0 -0
  8. {diskmelts-2.3.0 → diskmelts-2.3.1}/README.md +0 -0
  9. {diskmelts-2.3.0 → diskmelts-2.3.1}/setup.cfg +0 -0
  10. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/__init__.py +0 -0
  11. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/__init__.py +0 -0
  12. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/_api.py +0 -0
  13. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/_core.py +0 -0
  14. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/cont_ranges.csv +0 -0
  15. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/cont_ranges_PPan.csv +0 -0
  16. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_extended.csv +0 -0
  17. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_extended.json +0 -0
  18. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_rich.csv +0 -0
  19. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/carbon_rich.json +0 -0
  20. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/ttauri.csv +0 -0
  21. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/ttauri.json +0 -0
  22. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/water.csv +0 -0
  23. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/consub/regions/water.json +0 -0
  24. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/fitting.py +0 -0
  25. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
  26. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/13CO2_single_v2/net_13CO2_forward.pt +0 -0
  27. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/C2H2_model_bank.json +0 -0
  28. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
  29. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
  30. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H4_single_v2/net_C2H4_forward.pt +0 -0
  31. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2H6_single_v2/net_C2H6_forward.pt +0 -0
  32. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C2HD_single_v2/net_C2HD_forward.pt +0 -0
  33. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C3H4_single_v2/net_C3H4_forward.pt +0 -0
  34. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C4H2_single_v2/net_C4H2_forward.pt +0 -0
  35. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/C6H6_single_v2/net_C6H6_forward.pt +0 -0
  36. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CH3_single_v2/net_CH3_forward.pt +0 -0
  37. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CH4_single_v2/net_CH4_forward.pt +0 -0
  38. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CO17O_single_v2/net_CO17O_forward.pt +0 -0
  39. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CO18O_single_v2/net_CO18O_forward.pt +0 -0
  40. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/CO2_single_v2/net_CO2_forward.pt +0 -0
  41. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/H2O_model_bank.json +0 -0
  42. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
  43. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w19to25_n13to19_t100to1400.pt +0 -0
  44. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
  45. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
  46. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
  47. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/HC3N_single_v2/net_HC3N_forward.pt +0 -0
  48. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/HCN_single_v2/net_HCN_forward.pt +0 -0
  49. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma0/OH_single_v2/net_OH_forward.pt +0 -0
  50. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/13C12CH2_single_v2/net_13C12CH2_forward.pt +0 -0
  51. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/13CO2_single_v2/net_13CO2_forward.pt +0 -0
  52. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/C2H2_model_bank.json +0 -0
  53. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w11p5to17.pt +0 -0
  54. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H2_wavelength_bank_v2/net_C2H2_w6to9.pt +0 -0
  55. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H4_single_v2/net_C2H4_forward.pt +0 -0
  56. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2H6_single_v2/net_C2H6_forward.pt +0 -0
  57. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C2HD_single_v2/net_C2HD_forward.pt +0 -0
  58. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C3H4_single_v2/net_C3H4_forward.pt +0 -0
  59. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C4H2_single_v2/net_C4H2_forward.pt +0 -0
  60. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/C6H6_single_v2/net_C6H6_forward.pt +0 -0
  61. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CH3_single_v2/net_CH3_forward.pt +0 -0
  62. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CH4_single_v2/net_CH4_forward.pt +0 -0
  63. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CO17O_single_v2/net_CO17O_forward.pt +0 -0
  64. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CO18O_single_v2/net_CO18O_forward.pt +0 -0
  65. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/CO2_single_v2/net_CO2_forward.pt +0 -0
  66. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/H2O_model_bank.json +0 -0
  67. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w13p5to19p2_n13to19_t100to1400.pt +0 -0
  68. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w19to25_n13to19_t100to1400.pt +0 -0
  69. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w4p9to7p4_n13to19_t100to1400.pt +0 -0
  70. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w7p2to11p2_n13to19_t100to1400.pt +0 -0
  71. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/H2O_wavelength_bank_v2_fixed/net_H2O_w9p9to15p1_n13to19_t100to1400.pt +0 -0
  72. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/HC3N_single_v2/net_HC3N_forward.pt +0 -0
  73. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/HCN_single_v2/net_HCN_forward.pt +0 -0
  74. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/models/Trained_model/sigma2/OH_single_v2/net_OH_forward.pt +0 -0
  75. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/plotting.py +0 -0
  76. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/trainmodel.py +0 -0
  77. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/uncertainty.py +0 -0
  78. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_grid_fitting.py +0 -0
  79. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/v2_paper_comparison.py +0 -0
  80. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts/validation.py +0 -0
  81. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts.egg-info/SOURCES.txt +0 -0
  82. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts.egg-info/dependency_links.txt +0 -0
  83. {diskmelts-2.3.0 → diskmelts-2.3.1}/src/diskmelts.egg-info/requires.txt +0 -0
  84. {diskmelts-2.3.0 → diskmelts-2.3.1}/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.3.0
3
+ Version: 2.3.1
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "diskmelts"
7
- version = "2.3.0"
7
+ version = "2.3.1"
8
8
  description = "Machine-learning Enabled Line fitting Tool for Spectra of protoplanetary disks"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -468,8 +468,10 @@ def fit_observation(input_path=None, stages=None, *, name=None, root=None, sigma
468
468
  are absent), ``obs_wav``, ``obs_flux``, ``obs_err`` (the filtered
469
469
  input), ``residual`` and ``cumulative_model`` after all stages,
470
470
  ``sigma_noise``, ``grid_sigma``, and ``products`` (saved file paths).
471
- Pass ``obs_wav``/``obs_flux`` and ``output_dir`` to
472
- ``plot_saved_observation`` to plot the result.
471
+ To plot the result, call ``plot_saved_observation`` with
472
+ ``output_dir`` and the same spectrum: the same CSV path, these
473
+ returned ``obs_wav``/``obs_flux`` arrays, or no spectrum at all (the
474
+ saved one is then used).
473
475
  """
474
476
  model_root = MODEL_ROOT if root is None else Path(root)
475
477
  model_specs = _model_specs_for_sigma(sigma)
@@ -27,11 +27,38 @@ def _ranges(value, active_molecules=None):
27
27
  return [tuple(map(float, pair)) for pair in value]
28
28
 
29
29
 
30
- def _same_array(actual, expected, description):
31
- if actual.shape != expected.shape or not np.allclose(
32
- actual, expected, rtol=1e-7, atol=1e-12, equal_nan=True,
33
- ):
34
- raise ValueError(f'{description} disagrees with the saved fitting sequence')
30
+ INPUT_MISMATCH_HINT = (
31
+ 'The spectrum given to plot_saved_observation is not the one the CSVs in '
32
+ 'result_dir were fitted on. Either result_dir holds results from an earlier '
33
+ 'fit with the same name, or the input arrays changed after fitting. Re-run '
34
+ "the fit, pass the arrays the fit returned (result['obs_wav'], "
35
+ "result['obs_flux']), or omit the spectrum to plot the saved one."
36
+ )
37
+
38
+
39
+ def _same_array(actual, expected, description, hint=None):
40
+ if actual.shape != expected.shape:
41
+ detail = f'{actual.size} saved vs {expected.size} given pixels'
42
+ elif not np.allclose(actual, expected, rtol=1e-7, atol=1e-12, equal_nan=True):
43
+ detail = f'max |difference| = {np.nanmax(np.abs(actual - expected)):.3g}'
44
+ else:
45
+ return
46
+ message = f'{description} disagrees with the saved fitting sequence ({detail})'
47
+ raise ValueError(f'{message}. {hint}' if hint else message)
48
+
49
+
50
+ def _saved_observation(result_dir, source_name, stages):
51
+ """Observed wavelength and flux saved by the first stage with results."""
52
+ for stage in stages:
53
+ path = Path(result_dir) / f"{source_name}_{stage['name']}_fit_spectrum.csv"
54
+ if path.is_file():
55
+ spectrum = pd.read_csv(path)
56
+ return (spectrum['wave'].to_numpy(dtype=float),
57
+ spectrum['flux'].to_numpy(dtype=float))
58
+ raise FileNotFoundError(
59
+ f'No saved stage spectrum for {source_name!r} in {result_dir}; '
60
+ 'check name and result_dir, or pass input_path or obs_wav/obs_flux'
61
+ )
35
62
 
36
63
 
37
64
  def read_stage_result(result_dir, source_name, stage_name):
@@ -114,10 +141,19 @@ def plot_saved_observation(input_path=None, result_dir=None, stages=None, *, nam
114
141
  obs_wav=None, obs_flux=None):
115
142
  """Read saved stage CSVs, validate their sequence, and plot the fits.
116
143
 
117
- Give the observed spectrum the same way it was given to the fit: a CSV
118
- ``input_path``, or ``obs_wav``/``obs_flux`` arrays (for example
119
- ``result['obs_wav']`` and ``result['obs_flux']`` from ``fit_observation``).
120
- ``result_dir`` and ``stages`` are the fit's ``output_dir`` and stage list.
144
+ The observed spectrum can be given in three ways:
145
+
146
+ - the same CSV ``input_path`` that was fitted;
147
+ - the same ``obs_wav``/``obs_flux`` arrays that were fitted, ideally
148
+ ``result['obs_wav']`` and ``result['obs_flux']`` from the fit;
149
+ - nothing: the spectrum saved with the first stage's results is used.
150
+
151
+ A given spectrum is checked against the saved results, and a mismatch
152
+ (for example results left from an earlier fit with the same ``name``)
153
+ raises ``ValueError``. ``result_dir`` and ``stages`` are the fit's
154
+ ``output_dir`` and stage list; ``name`` is the fit's ``name`` (the saved
155
+ file prefix), and is required when no CSV is given unless the fit used
156
+ the default ``'spectrum'``.
121
157
 
122
158
  ``active_stages`` should be the names returned by a fresh fitting run. If
123
159
  omitted, stages with complete saved CSV products are plotted. This also
@@ -131,11 +167,15 @@ def plot_saved_observation(input_path=None, result_dir=None, stages=None, *, nam
131
167
  """
132
168
  if result_dir is None or stages is None:
133
169
  raise ValueError('result_dir and stages are required')
134
- obs_wav, obs_flux, _, source_name = _read_observation(
135
- input_path, obs_wav, obs_flux, name=name, skiprows=skiprows,
136
- delimiter=delimiter, wav_col=wav_col, flux_col=flux_col,
137
- )
138
170
  result_dir = Path(result_dir)
171
+ if input_path is None and obs_wav is None and obs_flux is None:
172
+ source_name = name or 'spectrum'
173
+ obs_wav, obs_flux = _saved_observation(result_dir, source_name, stages)
174
+ else:
175
+ obs_wav, obs_flux, _, source_name = _read_observation(
176
+ input_path, obs_wav, obs_flux, name=name, skiprows=skiprows,
177
+ delimiter=delimiter, wav_col=wav_col, flux_col=flux_col,
178
+ )
139
179
  figure_dir = Path(figure_dir) if figure_dir else result_dir / 'figures'
140
180
  if sigma_noise is None:
141
181
  sigma_noise = _estimate_noise(obs_wav, obs_flux, None, line_free_windows)
@@ -171,8 +211,12 @@ def plot_saved_observation(input_path=None, result_dir=None, stages=None, *, nam
171
211
  if requested is None and not Path(f'{prefix}_fit_spectrum.csv').is_file():
172
212
  continue
173
213
  fit = read_stage_result(result_dir, source_name, stage_name)
174
- _same_array(fit['obs_wav'], obs_wav, f'{stage_name} observed wavelength')
175
- _same_array(fit['obs_flux'], prior_residual, f'{stage_name} input flux')
214
+ _same_array(fit['obs_wav'], obs_wav, f'{stage_name} observed wavelength',
215
+ INPUT_MISMATCH_HINT)
216
+ _same_array(fit['obs_flux'], prior_residual, f'{stage_name} input flux',
217
+ INPUT_MISMATCH_HINT if not fits else
218
+ 'The saved stages come from different fitting runs; '
219
+ 're-run the full fit.')
176
220
  prior_residual = fit['residual']
177
221
  cumulative += fit['model_flux']
178
222
  _same_array(fit['running_cumulative'], cumulative,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diskmelts
3
- Version: 2.3.0
3
+ Version: 2.3.1
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
File without changes
File without changes
File without changes
File without changes