Docstring Guidelines¶
This document defines how to write docstrings for this project.
We follow NumPy-style docstrings combined with Python type hints for clarity and consistency.
1. General Rules¶
- Use Python type hints → types go in the function signature, not duplicated in the docstring.
 - Use NumPy-style docstrings:
 - Clear structure.
 - Easy to read.
 - Compatible with automated documentation tools.
 - A docstring should explain:
 - What the function/class/module does.
 - Meaning and units of parameters.
 - What is returned.
 - Modifications to attributes or global state.
 - Functions called (if relevant).
 - Exceptions raised.
 - Keep trivial functions one-liners; describe complex functions thoroughly.
 
2. Docstring Structure¶
Recommended sections (in order):
| Section | Purpose | Required | 
|---|---|---|
| Summary | Short, imperative description | ✅ Yes | 
| Parameters | Describe purpose, meaning, and units | ✅ Yes | 
| Returns | Describe returned values | ✅ Yes | 
| Modifies | List attributes or globals changed | ⚠️ If applicable | 
| Calls | List important functions invoked | ✅ Yes | 
| Raises | List exceptions | ⚠️ If applicable | 
| Notes | Assumptions, limitations, etc. | Optional | 
| Examples | Demonstrate usage | Optional | 
3. Canonical Example¶
def update_dose_matrix(
    rt_dose: pydicom.dataset.FileDataset,
    new_matrix: np.ndarray,
    normalize: bool = True,
) -> None:
    """
    Update the dose matrix inside an RTDOSE DICOM object.
    Parameters
    ----------
    rt_dose
        DICOM RTDOSE dataset to update.
    new_matrix
        New 3D dose grid (z, y, x), in Gy.
    normalize
        Whether to rescale values to match `DoseGridScaling`.
    Returns
    -------
    None
    Modifies
    --------
    rt_dose.pixel_array
        Replaces the internal dose grid with `new_matrix`.
    rt_dose.DoseGridScaling
        Updated if `normalize=True`.
    Calls
    -----
    - `validate_dose_matrix`
    - `rescale_dose`
    Raises
    ------
    ValueError
        If `new_matrix` has incompatible shape or NaNs.
    Notes
    -----
    Persist changes with `pydicom.dcmwrite` after this call.
    """