Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
2ccf22d
Added "Spectrum" to ``__all__` in ``specreduce.compat``.
hpparvi Jul 15, 2025
705d232
Added a new approach to 1D wavelength calibration based on minimizing…
hpparvi Jan 13, 2025
f63fab8
Fixed a minor 1D wavelength solution rebinning issue.
hpparvi Jan 13, 2025
885f0ef
Added utility functions to differentiate 1d and 2d polynomial models …
hpparvi Jan 14, 2025
82d1e00
Renamed and refactored the 1D wavelength calibration module.
hpparvi Jan 15, 2025
0c8f574
Added 2D wavelength calibration class and associated methods.
hpparvi Jan 15, 2025
3e5c36b
Introduced a 2D WCS property that constructs a WCS pipeline using pix…
hpparvi Jan 15, 2025
6bfa846
Started working on 1D wavelength calibration documentation.
hpparvi Jan 16, 2025
fd58c2a
Cleaning up and documenting the 1D wavelength calibration code.
hpparvi Jan 16, 2025
3b42370
Continuing 1D spectrum calibration documentation and cleanup.
hpparvi Jan 16, 2025
4669afd
Refactored and enhanced WavelengthSolution1D class methods to improve…
hpparvi Jan 16, 2025
ba0b58a
Added unit handling for wavelength and RMS/residual plotting.
hpparvi Jan 16, 2025
4b788be
Added a basic example notebook for 1D wavelength calibration with Spe…
hpparvi Jan 16, 2025
8b64079
Renamed some parameters for clarity in 2D wavelength calibration.
hpparvi Jan 16, 2025
25ab353
Updated the 1D wavelength calibration plotting routines handle cases …
hpparvi Jan 17, 2025
f995f85
Updated logic to handle cases where `arc_spectra` is `None` and added…
hpparvi Jan 17, 2025
c6a6b7a
Refactored `WavelengthSolution1D` to improve readability, flexibility…
hpparvi Apr 4, 2025
58d3bbd
Replaced internal `_lines_pix` and `_lines_wav` attribute modificatio…
hpparvi Apr 5, 2025
30cc05d
Fixed line matching to work with masked arrays.
hpparvi Apr 8, 2025
a6d0816
Fixed transformation to work with masked arrays.
hpparvi Apr 8, 2025
e668b53
Updated the handling of observed and catalog lines. Introduced new me…
hpparvi Apr 13, 2025
12f38d6
Introduced new optional parameters like `refine_fit` and enhanced doc…
hpparvi Apr 13, 2025
901825b
Renamed `lines_pix` to `observed_lines` and `lines_wav` to `catalog_l…
hpparvi Apr 13, 2025
ac0a282
The refine_fit method now supports a max_iter parameter to control th…
hpparvi Apr 13, 2025
098622a
Added 1D wavelength calibration tests.
hpparvi Apr 20, 2025
dafa2b7
Updated WaveCal1D tests.
hpparvi Apr 20, 2025
cd32b07
Fixed minor issues while writing tests.
hpparvi Apr 20, 2025
6d4853f
Updated tests.
hpparvi Apr 20, 2025
9615a1a
Added tests for wavelength-pixel transformations and WCS creation.
hpparvi Apr 21, 2025
a8e6aac
Added new tests for WavelengthSolution1D and plotting methods.
hpparvi Apr 21, 2025
588324e
Removed redundant warnings and improved error handling.
hpparvi Apr 21, 2025
3b31270
Polished the tests.
hpparvi Apr 22, 2025
e1f5220
Cleaned up an error message.
hpparvi Apr 22, 2025
42af922
Removed 2D wavelength calibration code from this branch. Will work on…
hpparvi Apr 22, 2025
3a23cd7
Renamed WavelengthSolution1D -> WavelengthCalibration1D.
hpparvi Apr 22, 2025
8a25549
Added the first version of the WavelengthCalibration1D docs with Jupy…
hpparvi Apr 22, 2025
c9fe759
removed a reference to old wavelength_calibration module from the mai…
hpparvi Apr 22, 2025
26b8c49
Updated the wavelength calibration tutorial notebooks.
hpparvi Apr 23, 2025
fb49f15
Introduced the `value_fontsize` parameter to control font size in spe…
hpparvi Apr 24, 2025
a41d033
Revised the wavelength calibration notebooks.
hpparvi Apr 24, 2025
3465567
Finalised 1D wavelength calibration tutorial 1.
hpparvi Apr 24, 2025
e41cea7
Changed the wcs attribute to gwcs.
hpparvi Apr 24, 2025
1b55d63
Finalised 1D wavelength calibration tutorial 2 and polished the first…
hpparvi Apr 24, 2025
0823c4a
Finished 1D wavelength calibration tutorial 3.
hpparvi Apr 24, 2025
11f8fca
Cleaned up the wavelength calibration docs.
hpparvi Apr 24, 2025
eb0ed36
Codestyle fixes for the 1D wavelength calibration code.
hpparvi Apr 24, 2025
25144b8
Changed the documentation API.
hpparvi Apr 24, 2025
39a5d5c
Brought back the original wavelength_calibration.py code so that we d…
hpparvi Apr 24, 2025
1d361f1
Fixed a broken WavelengthCalibration1D tests.
hpparvi Apr 24, 2025
1243b7f
Added a docstring for the WavelengthCalibration1D initialiser.
hpparvi Apr 24, 2025
f247cf7
Small wavelength calibration documentation fixes.
hpparvi Apr 24, 2025
fc8c0b9
Updated the changelog.
hpparvi Apr 24, 2025
6fa9b3c
Made sure the basic WavelengthCalibration1D functionality can be used…
hpparvi Apr 24, 2025
f74c904
Made matplotlib a basic dependecy.
hpparvi Apr 24, 2025
e4ed588
Revised wavelength calibration tests.
hpparvi Apr 24, 2025
1b2a960
Codestyle fix.
hpparvi Apr 24, 2025
b349d03
Added a TiltCorrection class for 2D rectification.
hpparvi May 9, 2025
b8f2fdc
Refactored the tilt correction code to improve readability, structure…
hpparvi May 9, 2025
567ec43
Added type annotations and a docstring for the `diff_poly2d_x` function.
hpparvi May 9, 2025
e21c95a
Renamed private methods to public and adjusted their parameters for c…
hpparvi May 13, 2025
ae49deb
Introduced a method to transform coordinates from rectified space to …
hpparvi May 13, 2025
a65bcfa
Refactored plot functionality and add fit quality visualization.
hpparvi May 13, 2025
8cf8ffd
Added tilt correction tutorial and sample data.
hpparvi May 13, 2025
db5f962
Introduced `disp_axis` and `mask_treatment` parameters to enhance fle…
hpparvi May 15, 2025
bf503bf
Added basic unit tests for TiltCorrection. Cover that the procedure r…
hpparvi May 15, 2025
e7d399d
Updated docs related to tilt correction.
hpparvi May 15, 2025
f8e92b4
Codestyle fixes.
hpparvi May 15, 2025
a4c9864
Documentation fixes.
hpparvi May 15, 2025
bf4b47c
Documentation hack. Needs to be addressed correctly.
hpparvi May 15, 2025
f722a3c
Removed an old Jupyter Notebook file.
hpparvi Jun 17, 2025
9fb67ce
Added `matplotlib>=3.7` as a testing dependency in `pyproject.toml`.
hpparvi Jun 17, 2025
77c63b8
Replaced `Spectrum1D` with `Spectrum` throughout `wavecal1d.py` for c…
hpparvi Jun 17, 2025
b46fdb5
Revised wavecal1d tests.
hpparvi Jun 17, 2025
538d2b8
Fixed `flux` assignment in `tilt_correction.py` to ensure proper hand…
hpparvi Jun 17, 2025
786bded
Refactored observed line handling in `wavecal1d.py`, added amplitude …
hpparvi Jul 8, 2025
2785323
Improved uncertainty type handling in WavelengthCalibration1D.
hpparvi Jul 15, 2025
d2f6fae
Refined handling of arc line amplitudes in 1D wavelength calibration.…
hpparvi Jul 25, 2025
843f718
Refactored handling of observed_lines and catalog_lines properties.
hpparvi Jul 25, 2025
ea2b555
Enhanced line label placement and styling in 1D wavelength calibratio…
hpparvi Jul 25, 2025
bad1df2
Updated the wavecal1d tests.
hpparvi Jul 25, 2025
a98c116
Codestyle fixes.
hpparvi Jul 25, 2025
37197d1
Removed the tilt-reduction related code and docs.
hpparvi Jul 28, 2025
6cc5ff1
Revised docs.
hpparvi Jul 28, 2025
4ea088f
Refactored internal handling of line lists. Introduced `_format_linel…
hpparvi Jul 29, 2025
fabb1b0
Codestyle fixes.
hpparvi Jul 29, 2025
4641199
Revised 1D wavelength calibration tests.
hpparvi Jul 29, 2025
c4df35d
Removed wavelength calibration tutorial files and data.
hpparvi Jul 29, 2025
fa5341b
Refactored `plot_labels` parameter in 1D wavelength calibration plots…
hpparvi Jul 29, 2025
a3b0aa0
Fixed typos and improved clarity in `wavecal1d` docstrings and commen…
hpparvi Jul 29, 2025
bf225b7
Refactored `wavecal1d` module: improved docstrings and comments for c…
hpparvi Jul 29, 2025
b211ef3
Changed to allow WavelenghtCalibration1D initialisation without an ob…
hpparvi Jul 29, 2025
ee9bfb2
Revised documentation.
hpparvi Jul 29, 2025
b189fec
Added return type hint `-> None` for `remove_unmatched_lines` method …
hpparvi Jul 29, 2025
7482c13
Fixed docstring formatting in `wavecal1d`.
hpparvi Jul 29, 2025
d112608
Improved label rendering precision in 1D wavelength calibration plots…
hpparvi Jul 31, 2025
95b74e6
Sort the catalog line lists by wavelength.
hpparvi Jul 31, 2025
077f637
Handled NaN values in flux operations using `np.nansum` and `np.nanma…
hpparvi Jul 31, 2025
ea494ca
Revised the wavelength calibration docs.
hpparvi Jul 31, 2025
17083d4
Enhanced error handling and optimization in `wavecal1d`: added valida…
hpparvi Jul 31, 2025
c4eadb4
Updated `matplotlib` dependency in `pyproject.toml` to `>=3.10`.
hpparvi Jul 31, 2025
241cf27
Replaced `gwcs.coordinate_frames` alias with full module path for cla…
hpparvi Sep 2, 2025
ec0c468
Revised the code to use np.ma.getmaskarray to get a MaskedArray mask …
hpparvi Sep 2, 2025
4d60d44
Improved wavecal1d.py type hints.
hpparvi Sep 2, 2025
6521318
Revised wavelength calibration documentation.
hpparvi Sep 11, 2025
e89ef54
Made matplotlib a primary dependency.
hpparvi Sep 11, 2025
85aed59
Typing cleanup.
hpparvi Sep 14, 2025
718de9a
- Made `ref_pixel` an optional argument in `WavelengthCaliobration1D`.
hpparvi Sep 14, 2025
43fe08c
Revised `fit_lines`.
hpparvi Sep 16, 2025
b1dc699
Refactored automatic wavelength calibration:
hpparvi Sep 16, 2025
5cee1bd
Improved wavelength calibration loop by using `math.isclose` for RMS …
hpparvi Sep 16, 2025
f4b7f4e
Switched `gwcs` property to use `cached_property` and removed unused …
hpparvi Sep 16, 2025
b6811d7
Improved amplitude estimation for found lines.
hpparvi Sep 16, 2025
18c89f9
Allow for `line_list_bounds` to be `None`.
hpparvi Sep 16, 2025
b1f99bc
Minor docstring and code style fixes.
hpparvi Sep 16, 2025
94e51c8
Made `line_list_bounds` default to `None` in the initializer.
hpparvi Sep 18, 2025
58a825c
Refactored wavelength calibration to support dynamic polynomial degre…
hpparvi Sep 18, 2025
6dcb4da
Revised the `resample` method. The previous version had several error…
hpparvi Sep 19, 2025
83ab9f1
Updated wavelength calibration tests.
hpparvi Sep 20, 2025
e6131bb
Wavelength calibration cleanup.
hpparvi Sep 20, 2025
3f9633d
Revised wavelength calibration documentation.
hpparvi Sep 20, 2025
88419de
Continued revising wavelength calibration documentation.
hpparvi Sep 20, 2025
fd9d486
Revised wavelength calibration tests.
hpparvi Sep 20, 2025
b499cfb
Refactored `wavecal1d` to use a new `WavelengthSolution1D` class for …
hpparvi Oct 7, 2025
4e57954
Refactored wavelength solution handling:
hpparvi Oct 7, 2025
060d77e
Improved WavelengthSolution1D tests.
hpparvi Oct 7, 2025
ecb1421
Expanded and updated `WavelengthSolution1D` docstring and improved pr…
hpparvi Oct 7, 2025
c2e4d48
Removed `ref_pixel` attribute from `WavelengthSolution1D` and adjuste…
hpparvi Oct 7, 2025
3c2f4b7
Refactored `WavelengthCalibration1D` and `WavelengthSolution1D`:
hpparvi Oct 8, 2025
83ded1c
Updated wavelength calibration tests.
hpparvi Oct 8, 2025
91af975
Updated wavelength calibration documentation to include `WavelengthSo…
hpparvi Oct 8, 2025
475d3fd
Revised wavelength calibration documentation.
hpparvi Oct 8, 2025
f592143
Linked `bounds_pix` to `solution.bounds_pix` in `WavelengthCalibratio…
hpparvi Oct 18, 2025
304aff2
Added `n_strongest_lines` parameter to filter the strongest spectral …
hpparvi Oct 21, 2025
c543563
Switching to use sphinx astropy conf v2 with the PyData theme.
hpparvi Jun 5, 2025
ce37a6f
Restructuring the documentation without adding anything new.
hpparvi Jun 10, 2025
bb16a71
Revised tracing documentation.
hpparvi Jun 10, 2025
dbfc3a0
Revised tracing documentation.
hpparvi Jun 10, 2025
f67bec6
Revised documentation.
hpparvi Jun 10, 2025
ca0201b
Added basic plots to the ``specreduce.tracing`` docs and revised the …
hpparvi Jun 21, 2025
7529821
Revised extraction_quickstart.rst.
hpparvi Jun 21, 2025
9b8b1f7
Cleaned up and revised the documentation.
hpparvi Jun 21, 2025
cf13ecc
Revised the tracing documentation.
hpparvi Jun 21, 2025
99d64d2
Revised index.rst.
hpparvi Jun 24, 2025
2fe652e
Added `sphinx-copybutton` to documentation dependencies in `pyproject…
hpparvi Jun 25, 2025
7ab312c
Updated `sphinx-astropy` dependency to use `confv2` in `pyproject.toml`.
hpparvi Jun 25, 2025
db8f58e
- Enhanced `conf.py` with new Sphinx extensions and configurations.
hpparvi Oct 18, 2025
598d003
Added "Quickstart" Jupyter notebook and `common.py` for spectrum extr…
hpparvi Oct 20, 2025
e6d64f0
Revised the documentation.
hpparvi Oct 20, 2025
cfb8f82
Continued working on the expanded quickstart guide.
hpparvi Oct 21, 2025
4faecdf
Minor documentation fixes.
hpparvi Oct 21, 2025
d276a80
Continued working on the quickstart guide.
hpparvi Oct 21, 2025
558ae89
Updated and improved the "Quickstart" Jupyter notebook:
hpparvi Oct 21, 2025
fd59b83
Removed unnecessary warning for standard deviation interpretation in …
hpparvi Oct 21, 2025
c7344e7
Handled missing uncertainty in spectrum processing by initializing `S…
hpparvi Oct 21, 2025
57ec261
Removed the test for `StdDevUncertainty` warning in extraction.
hpparvi Oct 21, 2025
ce7a994
Minor docstring-related revisions.
hpparvi Oct 22, 2025
4860441
Revised the documentation.
hpparvi Oct 22, 2025
eb7bdcf
Enabled `sphinx_design` and `nbsphinx` extensions, and updated `numpy…
hpparvi Oct 22, 2025
11f2055
Documentation cleanup.
hpparvi Oct 22, 2025
f28bbfa
Corrected default `trace_coeffs` initialization in `synth_data.py`.
hpparvi Oct 27, 2025
0f08956
Revised contributing docs.
hpparvi Oct 27, 2025
1cc749c
Fixed a typo in contributing.rst
hpparvi Oct 27, 2025
9e75901
Minor documentation style cleanup.
hpparvi Oct 28, 2025
c6a96b5
Added a roadmap figure to main index and contributing guide.
hpparvi Oct 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ New Features

- Added a ``disp_bounds`` argument to ``tracing.FitTrace``. The argument allows for adjusting the
dispersion-axis window from which the trace peaks are estimated.
- Added a new ``specreduce.wavecal1d.WavelengthCalibration1D`` class for one-dimensional wavelength
calibration. The old ``specreduce.wavelength_calibration.WavelengthCalibration1D`` is
deprecated and will be removed in v. 2.0.

1.6.0 (2025-06-18)
------------------
Expand Down
15 changes: 0 additions & 15 deletions docs/_static/specreduce.css
Original file line number Diff line number Diff line change
@@ -1,15 +0,0 @@
@import url("bootstrap-astropy.css");

div.topbar a.brand {
background: transparent url("logo_icon.png") no-repeat 8px 3px;
background-image: url("logo_icon.png"), none;
background-size: 32px 32px;
}

#logotext1 {
color: #519EA8;
}

#logotext2 {
color: #FF5000;
}
10 changes: 8 additions & 2 deletions docs/api.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.. _api_index:

API Index
=========
API Reference
=============

.. automodapi:: specreduce
:no-inheritance-diagram:
Expand All @@ -21,6 +21,12 @@ API Index
.. automodapi:: specreduce.extract
:no-inheritance-diagram:

.. automodapi:: specreduce.wavecal1d
:no-inheritance-diagram:

.. automodapi:: specreduce.wavesol1d
:no-inheritance-diagram:

.. automodapi:: specreduce.calibration_data
:no-inheritance-diagram:
:include-all-objects:
29 changes: 29 additions & 0 deletions docs/background.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
Background correction
=====================

The `specreduce.background` module generates and subtracts a background image from
the input 2D spectral image. The `~specreduce.background.Background` object is
defined by one or more windows, and can be generated with:

* `~specreduce.background.Background`
* `Background.one_sided <specreduce.background.Background.one_sided>`
* `Background.two_sided <specreduce.background.Background.two_sided>`

The center of the window can either be passed as a float/integer or as a trace

.. code-block:: python

bg = specreduce.background.Background.one_sided(image, trace, separation=5, width=2)

or, equivalently

.. code-block:: python

bg = specreduce.background.Background.one_sided(image, 15, separation=5, width=2)

The background image can be accessed via `~specreduce.background.Background.bkg_image`
and the background-subtracted image via `~specreduce.background.Background.sub_image`
(or ``image - bg``).

The background and trace steps can be done iteratively, to refine an automated
trace using the background-subtracted image as input.
117 changes: 64 additions & 53 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,116 +27,126 @@

import sys
import datetime

import sphinx

from specreduce import __version__

try:
from sphinx_astropy.conf.v1 import * # noqa
from sphinx_astropy.conf.v2 import * # noqa
from sphinx_astropy.conf.v2 import extensions # noqa
except ImportError:
print('ERROR: the documentation requires the sphinx-astropy package to be installed')
print("ERROR: the documentation requires the sphinx-astropy package to be installed")
sys.exit(1)

# xref: https://github.com/sphinx-doc/sphinx/issues/13232#issuecomment-2608708175
if sys.version_info[:2] >= (3, 13) and sphinx.version_info[:2] < (8, 2):
import pathlib

from sphinx.util.typing import _INVALID_BUILTIN_CLASSES

_INVALID_BUILTIN_CLASSES[pathlib.Path] = "pathlib.Path"

# -- General configuration ----------------------------------------------------

# By default, highlight as Python 3.
highlight_language = 'python3'
highlight_language = "python3"

# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.2'
needs_sphinx = "3.0"

# To perform a Sphinx version check that needs to be more specific than
# major.minor, call `check_sphinx_version("x.y.z")` here.
# check_sphinx_version("1.2.1")

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns.append('_templates')
exclude_patterns.append("_templates")

# This is added to the end of RST files - a good place to put substitutions to
# be used globally.
rst_epilog += """
"""
#rst_epilog += """
#.. _Astropy: https://www.astropy.org/
#"""

extensions.extend(
[
"sphinx_design",
"nbsphinx",
]
)

# -- Project information ------------------------------------------------------

# This does not *have* to match the package name, but typically does
project = "specreduce"
author = "Astropy Specreduce contributors"
copyright = '{0}, {1}'.format(
datetime.datetime.now().year, author)
copyright = "{0}, {1}".format(datetime.datetime.now().year, author)

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.

# The short X.Y version.
version = __version__.split('-', 1)[0]
version = __version__.split("-", 1)[0]
# The full version, including alpha/beta/rc tags.
release = __version__


# -- Options for HTML output --------------------------------------------------

# A NOTE ON HTML THEMES
# The global astropy configuration uses a custom theme, 'bootstrap-astropy',
# which is installed along with astropy. A different theme can be used or
# the options for this theme can be modified by overriding some of the
# variables set in the global configuration. The variables set in the
# global configuration are listed below, commented out.


# Add any paths that contain custom themes here, relative to this directory.
# To use a different custom theme, add the directory containing the theme.
#html_theme_path = []

# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes. To override the custom theme, set this to the
# name of a builtin theme or the name of a custom theme in html_theme_path.
#html_theme = None
html_static_path = ['_static'] # html_theme = None
html_style = 'specreduce.css'
html_static_path = ["_static"] # html_theme = None
html_style = "specreduce.css"


html_theme_options = {
'logotext1': 'spec', # white, semi-bold
'logotext2': 'reduce', # orange, light
'logotext3': ':docs' # white, light
html_theme_options.update(
{
"github_url": "https://github.com/astropy/specreduce",
"use_edit_page_button": False,
"navigation_with_keys": False,
"logo": {
"text": f"{project}",
"image_light": "_static/logo_icon.png",
"image_dark": "_static/logo_icon.png",
},
"secondary_sidebar_items": {"**": ["page-toc"], "index": []},
}
)

html_context = {
"default_mode": "light",
"version_slug": os.environ.get("READTHEDOCS_VERSION") or "",
"to_be_indexed": ["stable", "latest"],
"github_user": "astropy",
"github_repo": "specreduce",
"github_version": "main",
"doc_path": "docs",
"edit_page_url_template": "{{ astropy_custom_edit_url(github_user, github_repo, github_version, doc_path, file_name, default_edit_page_url_template) }}",
"default_edit_page_url_template": "https://github.com/{github_user}/{github_repo}/edit/{github_version}/{doc_path}{file_name}",
# Tell Jinja2 templates the build is running on Read the Docs
"READTHEDOCS": os.environ.get("READTHEDOCS", "") == "True",
}

# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
html_sidebars['**'] = ['localtoc.html']
html_sidebars['index'] = ['globaltoc.html', 'localtoc.html']
html_sidebars = {}
html_sidebars['index'] = []
html_sidebars["contributing"] = []

# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = ''
# html_sidebars['**'] = ['localtoc.html']
# html_sidebars['index'] = [] #['globaltoc.html', 'localtoc.html']

# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
html_favicon = '_static/logo_icon.ico'
html_favicon = "_static/logo_icon.ico"

# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = ''
# html_last_updated_fmt = ''

# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
html_title = '{0} v{1}'.format(project, release)
html_title = "{0} v{1}".format(project, release)

# Output file base name for HTML help builder.
htmlhelp_basename = project + 'doc'
htmlhelp_basename = project + "doc"

# Prefixes that are ignored for sorting the Python module index
modindex_common_prefix = ["specreduce."]
Expand All @@ -145,16 +155,17 @@

# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [('index', project + '.tex', project + u' Documentation',
author, 'manual')]
latex_documents = [("index", project + ".tex", project + " Documentation", author, "manual")]


# -- Options for manual page output -------------------------------------------

# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [('index', project.lower(), project + u' Documentation',
[author], 1)]
man_pages = [("index", project.lower(), project + " Documentation", [author], 1)]

# -- Options for numpydoc extension -------------------------------------------
numpydoc_xref_param_type = False


# -- Options for the edit_on_github extension ---------------------------------
Expand All @@ -164,10 +175,10 @@
nitpicky = True
intersphinx_mapping.update(
{
'astropy': ('https://docs.astropy.org/en/stable/', None),
'ccdproc': ('https://ccdproc.readthedocs.io/en/stable/', None),
'specutils': ('https://specutils.readthedocs.io/en/stable/', None),
'gwcs': ('https://gwcs.readthedocs.io/en/stable/', None)
"astropy": ("https://docs.astropy.org/en/stable/", None),
"ccdproc": ("https://ccdproc.readthedocs.io/en/stable/", None),
"specutils": ("https://specutils.readthedocs.io/en/stable/", None),
"gwcs": ("https://gwcs.readthedocs.io/en/stable/", None),
}
)
#
Expand Down
106 changes: 106 additions & 0 deletions docs/contributing.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
.. _contributors_guide:

Contributing
============

As with all `Astropy <https://www.astropy.org>`_ coordinated packages, **Specreduce** is
developed *by* the astrophysics community, *for* the astrophysics community. We warmly welcome
contributions of all kinds, whether it’s sharing feedback, reporting bugs, suggesting new
features, or improving code and documentation. Every contribution, big or small, helps make
Specreduce more useful and reliable for everyone.

Specreduce follows the `Astropy development and contribution guidelines
<https://docs.astropy.org/en/latest/index_dev.html>`_ and the
`Astropy Community Code of Conduct <https://www.astropy.org/code_of_conduct.html>`_.
By contributing, you agree to uphold these community standards, which help ensure that the
project remains a welcoming and inclusive space for all contributors.

Getting Started
---------------

If you’re new to open-source development or to the Astropy ecosystem, do not worry. The best place
to start is by visiting the
`Specreduce GitHub repository <https://github.com/astropy/specreduce>`_,
where you can find current issues, pull requests, and the latest development activity.

Before you begin contributing code, you may want to:

* Read through the Astropy developer documentation linked above.
* Explore the existing documentation and tutorials to get a sense of how Specreduce works.
* Comment on an issue to let others know you’d like to work on it — or open a new issue to
discuss an idea or feature you’d like to propose.

Roadmap
-------

.. image::
roadmap.png
:align: center
:width: 100%

Contribute feedback
-------------------

The Specreduce team values feedback from all users. If something doesn’t work as expected,
if you encounter a bug, or if you have an idea for an improvement, please let us know by opening
a new issue on the
`Specreduce GitHub issue tracker <https://github.com/astropy/specreduce/issues>`_.

For bug reports, please include:

* A short description of the problem.
* The version of Specreduce and Python you are using.
* A minimal example (if possible) that reproduces the issue.

For feature requests or usability feedback, describe your idea clearly and explain how it would
improve the user experience. Even short notes are valuable and help guide development priorities.


Contribute Code or Documentation
--------------------------------

If you see an open issue you’d like to work on, or if you’ve spotted an error or missing detail
in the documentation, you can submit your own improvements through GitHub.
To get started:

1. Fork the Specreduce repository and create a new branch for your changes.
2. Make your edits or additions, whether it’s a bug fix, a new feature, or a documentation update.
3. Commit your changes with a clear message describing what you did.
4. Open a pull request to the main repository.

.. If you’re unsure how to start, you can look for issues labeled
.. ``good first issue`` or ``help wanted`` — these are designed to be approachable even for
.. first-time contributors.

Contribute Tutorials and Examples
---------------------------------

Tutorials and worked examples are among the most valuable contributions. They help other users
learn from real data and see how different tools fit together in practice.

While the main steps of spectroscopic reduction (for example, tracing, extraction, and wavelength
calibration) are similar across most instruments, the best workflow can still depend on the
setup and science goals. In the long term, we aim to build a library of example reduction recipes
for different instruments that users can adapt for their own observations.

If you have a reduction example, a notebook, or a teaching resource that might help others,
please share it, either by opening a pull request or by discussing it in an issue first.
We’re happy to help with formatting and integration into the documentation.

Staying in Touch
----------------

Development discussions happen mainly on GitHub, but you can also connect with the wider Astropy
community through the `Astropy Discussion Forum <https://community.openastronomy.org/c/astropy/>`_,
where you can ask questions, share ideas, and get advice from other developers and users.

Your contributions help make Specreduce and the Astropy ecosystem stronger and more sustainable.
Whether you fix a typo, improve a function, or share a new example, you are helping build a tool
that benefits the entire astrophysics community. Thank you for being part of it!

.. toctree::
:maxdepth: 1
:hidden:

process/index
terms
Loading