Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ec30004
Update tutorial baselines for auto_estimate background
AndrewSazonov Jun 4, 2026
d083b64
Add lint-rule-audit implementation plan
AndrewSazonov Jun 5, 2026
abd3755
Correct safe vs unsafe fix counts in audit plan
AndrewSazonov Jun 5, 2026
4fd18a0
Add lint-rule audit regeneration helper
AndrewSazonov Jun 5, 2026
a018562
Reach Phase 1 review gate
AndrewSazonov Jun 5, 2026
55ad297
Scope only docs/docs/tutorials paths as tutorials
AndrewSazonov Jun 5, 2026
2b54bd8
Add unit tests for lint_rule_audit helper
AndrewSazonov Jun 5, 2026
ee5620d
Apply pixi run fix auto-fixes
AndrewSazonov Jun 5, 2026
f3abbb8
Fix bold-emphasis artifact in audit plan headline
AndrewSazonov Jun 5, 2026
b6dc2b6
Remove dead lint ignores (Priority 0 cleanup)
AndrewSazonov Jun 5, 2026
e12262c
Update suggested PR text for Priority 0 cleanup
AndrewSazonov Jun 5, 2026
d048eff
Enable D100/D104 and add missing source docstrings
AndrewSazonov Jun 5, 2026
e69ab9f
Reconcile audit plan with P1a docstring enablement
AndrewSazonov Jun 5, 2026
9910b85
Update plan scope and file list for P1a
AndrewSazonov Jun 5, 2026
a2cd17d
Fix DTZ005 timestamp and enable TD004/TD005 TODO rules
AndrewSazonov Jun 5, 2026
7bad237
Record P1b in audit plan roadmap
AndrewSazonov Jun 5, 2026
d311fd8
Mark P1b landed in remaining plan sections
AndrewSazonov Jun 5, 2026
faac090
Enable I001/E501/F841 and clean flagged test sites
AndrewSazonov Jun 5, 2026
408ef37
Record P1c in audit plan; Priority 1 complete
AndrewSazonov Jun 5, 2026
50e7b7d
Reflect full Priority 1 completion in plan scope and PR text
AndrewSazonov Jun 5, 2026
97a1ea7
Apply prettier comment alignment to pyproject.toml
AndrewSazonov Jun 5, 2026
7b8acc1
Adopt PLR sub-codes and PLW rules in tests (D1)
AndrewSazonov Jun 5, 2026
5bd576f
Record D1 (PLR/PLW adoption) in audit plan roadmap
AndrewSazonov Jun 5, 2026
a9017f2
Route src diagnostics through Logger and enable T20 (D2)
AndrewSazonov Jun 5, 2026
6262016
Record D1 and D2 in audit plan summaries
AndrewSazonov Jun 5, 2026
1b81185
Update scope for D2; record D3-D5 keep-disabled rationale
AndrewSazonov Jun 5, 2026
fbe9346
Mark remaining tiers keep-disabled across plan; resolve T201 Q
AndrewSazonov Jun 5, 2026
6e3aeb3
Apply pixi run fix auto-fixes
AndrewSazonov Jun 5, 2026
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
573 changes: 573 additions & 0 deletions docs/dev/plans/lint-rule-audit.md

Large diffs are not rendered by default.

40 changes: 23 additions & 17 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -291,10 +291,12 @@ select = [
'SIM', # https://docs.astral.sh/ruff/rules/#flake8-simplify-sim
#'SLF', # https://docs.astral.sh/ruff/rules/#flake8-self-slf
'SLOT', # https://docs.astral.sh/ruff/rules/#flake8-slots-slot
#'T20', # https://docs.astral.sh/ruff/rules/#flake8-print-t20
'TC', # https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc
'T20', # https://docs.astral.sh/ruff/rules/#flake8-print-t20
'TC', # https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc
#'TD', # https://docs.astral.sh/ruff/rules/#flake8-todos-td
'TID', # https://docs.astral.sh/ruff/rules/#flake8-tidy-imports-tid
'TD004', # https://docs.astral.sh/ruff/rules/missing-todo-colon/ (TODO-format subset)
'TD005', # https://docs.astral.sh/ruff/rules/missing-todo-description/ (TODO-format subset)
'TID', # https://docs.astral.sh/ruff/rules/#flake8-tidy-imports-tid
]

# Exceptions to the linting rules
Expand All @@ -306,10 +308,6 @@ ignore = [
'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc
# Disable, as [tool.format_docstring] split one-line docstrings into the canonical multi-line layout
'D200', # https://docs.astral.sh/ruff/rules/unnecessary-multiline-docstring/
# Temporary:
'D100', # https://docs.astral.sh/ruff/rules/undocumented-public-module/#undocumented-publi-module-d100
'D104', # https://docs.astral.sh/ruff/rules/undocumented-public-package/#undocumented-public-package-d104
'DTZ005', # https://docs.astral.sh/ruff/rules/call-datetime-now-without-tzinfo/#call-datetime-now-without-tzinfo-dtz005
]

# Ignore specific rules in certain files or directories
Expand All @@ -325,25 +323,26 @@ ignore = [
'RUF012', # https://docs.astral.sh/ruff/rules/mutable-class-default/ (test stubs use mutable defaults)
'RUF069', # https://docs.astral.sh/ruff/rules/unreliable-float-equality/ (exact comparisons in assertions)
'S101', # https://docs.astral.sh/ruff/rules/assert/
'T20', # tests may print debug/scaffolding output
# Temporary:
'ARG001',
'ARG002',
'ARG004',
'ARG005',
'B011',
'B017',
'B018',
'E501',
'E741',
'F841',
'I001',
'N801',
'N805',
'N812',
'PLC',
'PLE',
'PLR',
'PLW',
# Keep the test idioms (PLR2004 magic values, PLR6301 no-self-use) and
# the ADR-governed complexity rules ignored; the rest of PLR (e.g.
# PLR0402/PLR1711/PLR6104) is enforced. PLW is fully enforced.
'PLR0913',
'PLR0914',
'PLR0915',
'PLR0917',
'PLR2004',
'PLR6301',
'SIM117',
'SLF',
'TRY',
Expand All @@ -356,13 +355,20 @@ ignore = [
'RUF003', # https://docs.astral.sh/ruff/rules/ambiguous-unicode-character-comment/ (en-dashes in headings)
'T201', # https://docs.astral.sh/ruff/rules/print/
# Temporary:
'ANN',
'D',
'W',
]
'docs/docs/tutorials/**' = [
'E402', # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file/
]
# Intentional terminal rendering: these write raw/ASCII output that
# `Console.print` would garble, so `print` is deliberate here.
'src/easydiffraction/display/plotters/ascii.py' = [
'T201', # https://docs.astral.sh/ruff/rules/print/
]
'src/easydiffraction/project/display.py' = [
'T201', # https://docs.astral.sh/ruff/rules/print/
]

# Specific options for certain rules

Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""EasyDiffraction public API for diffraction analysis."""

from __future__ import annotations

Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/__main__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Typer command-line interface for the EasyDiffraction library."""

from __future__ import annotations

Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Fitting analysis: minimizers, fit parameters, and results."""

from easydiffraction.analysis.analysis import UndoFitOutcome
from easydiffraction.analysis.categories.fit_parameter_correlations import (
Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/analysis.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Analysis orchestration of fitting, parameters, and results."""

from __future__ import annotations

Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/calculators/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""CrysFML, CrysPy, and PDFfit calculation backends."""

from easydiffraction.analysis.calculators.crysfml import CrysfmlCalculator
from easydiffraction.analysis.calculators.cryspy import CryspyCalculator
Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/calculators/base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Abstract base API for diffraction calculation backends."""

from __future__ import annotations

Expand Down
8 changes: 4 additions & 4 deletions src/easydiffraction/analysis/calculators/crysfml.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""CrysFML calculation backend for powder diffraction patterns."""

from __future__ import annotations

Expand All @@ -12,6 +13,7 @@
from easydiffraction.analysis.calculators.factory import CalculatorFactory
from easydiffraction.core.metadata import TypeInfo
from easydiffraction.datablocks.experiment.item.enums import BeamModeEnum
from easydiffraction.utils.logging import log

if TYPE_CHECKING:
from easydiffraction.datablocks.experiment.collection import Experiments
Expand Down Expand Up @@ -137,7 +139,7 @@
try:
y = self._calculate_adjusted_pattern(crysfml_dict, experiment)
except KeyError:
print('[CrysfmlCalculator] Error: No calculated data')
log.warning('[CrysfmlCalculator] No calculated data')

Check warning on line 142 in src/easydiffraction/analysis/calculators/crysfml.py

View check run for this annotation

Codecov / codecov/patch

src/easydiffraction/analysis/calculators/crysfml.py#L142

Added line #L142 was not covered by tests
y = []
return np.asarray(y)

Expand All @@ -164,10 +166,8 @@
if experiment.type.beam_mode.value == BeamModeEnum.TIME_OF_FLIGHT:
_, y = cfml_py_utilities.tof_powder_pattern_from_dict(crysfml_dict)
return y
print(
f'[CrysfmlCalculator] Error: Unsupported beam mode {experiment.type.beam_mode.value}'
)
log.warning(f'[CrysfmlCalculator] Unsupported beam mode {experiment.type.beam_mode.value}')
return None

Check warning on line 170 in src/easydiffraction/analysis/calculators/crysfml.py

View check run for this annotation

Codecov / codecov/patch

src/easydiffraction/analysis/calculators/crysfml.py#L169-L170

Added lines #L169 - L170 were not covered by tests

def _adjust_pattern_length( # noqa: PLR6301
self,
Expand Down
8 changes: 5 additions & 3 deletions src/easydiffraction/analysis/calculators/cryspy.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""CrysPy calculation backend for diffraction patterns."""

from __future__ import annotations

Expand All @@ -18,6 +19,7 @@
from easydiffraction.datablocks.experiment.item.enums import BeamModeEnum
from easydiffraction.datablocks.experiment.item.enums import PeakProfileTypeEnum
from easydiffraction.datablocks.experiment.item.enums import SampleFormEnum
from easydiffraction.utils.logging import log
from easydiffraction.utils.utils import sin_theta_over_lambda_to_d_spacing

if TYPE_CHECKING:
Expand Down Expand Up @@ -165,7 +167,7 @@
y_calc = cryspy_in_out_dict[cryspy_block_name]['intensity_calc']
stol = cryspy_in_out_dict[cryspy_block_name]['sthovl']
except KeyError:
print(f'[CryspyCalculator] Error: No calculated data for {cryspy_block_name}')
log.warning(f'[CryspyCalculator] No calculated data for {cryspy_block_name}')
return [], []

return stol, y_calc
Expand Down Expand Up @@ -255,7 +257,7 @@
if beam_mode in prefixes:
cryspy_block_name = f'{prefixes[beam_mode]}_{experiment.name}'
else:
print(f'[CryspyCalculator] Error: Unknown beam mode {experiment.type.beam_mode.value}')
log.warning(f'[CryspyCalculator] Unknown beam mode {experiment.type.beam_mode.value}')

Check warning on line 260 in src/easydiffraction/analysis/calculators/cryspy.py

View check run for this annotation

Codecov / codecov/patch

src/easydiffraction/analysis/calculators/cryspy.py#L260

Added line #L260 was not covered by tests
return []

try:
Expand All @@ -267,7 +269,7 @@
f'dict_in_out_{structure.name}'
)
except KeyError:
print(f'[CryspyCalculator] Error: No calculated data for {cryspy_block_name}')
log.warning(f'[CryspyCalculator] No calculated data for {cryspy_block_name}')

Check warning on line 272 in src/easydiffraction/analysis/calculators/cryspy.py

View check run for this annotation

Codecov / codecov/patch

src/easydiffraction/analysis/calculators/cryspy.py#L272

Added line #L272 was not covered by tests
return []

return y_calc
Expand Down
3 changes: 2 additions & 1 deletion src/easydiffraction/analysis/calculators/pdffit.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from easydiffraction.analysis.calculators.base import CalculatorBase
from easydiffraction.analysis.calculators.factory import CalculatorFactory
from easydiffraction.core.metadata import TypeInfo
from easydiffraction.utils.logging import log

if TYPE_CHECKING:
from easydiffraction.datablocks.experiment.item.base import ExperimentBase
Expand Down Expand Up @@ -89,7 +90,7 @@ def calculate_structure_factors( # noqa: PLR6301
# PDF doesn't compute HKL but we keep interface consistent
# Intentionally unused, required by public API/signature
del structures, experiments
print('[pdffit] Calculating HKLs (not applicable)...')
log.debug('[pdffit] Calculating HKLs (not applicable)')
return []

def calculate_pattern( # noqa: PLR6301
Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/categories/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""CIF categories for fitting analysis configuration."""

from easydiffraction.analysis.categories.aliases import Alias
from easydiffraction.analysis.categories.aliases import Aliases
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Parameter alias categories for fit expressions."""

from easydiffraction.analysis.categories.aliases.default import Alias
from easydiffraction.analysis.categories.aliases.default import Aliases
2 changes: 1 addition & 1 deletion src/easydiffraction/analysis/categories/aliases/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def __init__(self) -> None:
name='label',
description='Human-readable alias for a parameter.',
value_spec=AttributeSpec(
default='_', # TODO, Maybe None?
default='_', # TODO: Maybe None?
validator=RegexValidator(pattern=r'^[A-Za-z_][A-Za-z0-9_]*$'),
),
cif_handler=CifHandler(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Parameter constraint categories for fitting."""

from easydiffraction.analysis.categories.constraints.default import Constraint
from easydiffraction.analysis.categories.constraints.default import Constraints
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def __init__(self) -> None:
name='expression',
description='Constraint equation, e.g. "occ_Ba = 1 - occ_La".',
value_spec=AttributeSpec(
default='_', # TODO, Maybe None?
default='_', # TODO: Maybe None?
validator=RegexValidator(pattern=r'.*'),
),
cif_handler=CifHandler(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Fit parameter correlation categories from fit results."""

from easydiffraction.analysis.categories.fit_parameter_correlations.default import (
FitParameterCorrelationItem,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Refined fit parameter categories with values and errors."""

from easydiffraction.analysis.categories.fit_parameters.default import FitParameterItem
from easydiffraction.analysis.categories.fit_parameters.default import FitParameters
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Fit-result categories for least-squares and Bayesian fits."""

from easydiffraction.analysis.categories.fit_result.base import FitResultBase
from easydiffraction.analysis.categories.fit_result.bayesian import BayesianFitResult
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Joint-fit categories for fitting multiple experiments together."""

from __future__ import annotations

Expand Down
4 changes: 2 additions & 2 deletions src/easydiffraction/analysis/categories/joint_fit/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def __init__(self) -> None:

self._experiment_id: StringDescriptor = StringDescriptor(
name='experiment_id',
description='Experiment identifier', # TODO
description='Experiment identifier', # TODO: revisit description
value_spec=AttributeSpec(
default='_',
validator=RegexValidator(pattern=r'^[A-Za-z_][A-Za-z0-9_]*$'),
Expand All @@ -44,7 +44,7 @@ def __init__(self) -> None:
)
self._weight: NumericDescriptor = NumericDescriptor(
name='weight',
description='Weight factor', # TODO
description='Weight factor', # TODO: revisit description
value_spec=AttributeSpec(
default=0.0,
validator=RangeValidator(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Sequential-fit category for fitting experiments one by one."""

from __future__ import annotations

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Categories for extracted results of a sequential fit."""

from __future__ import annotations

Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/fit_helpers/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Fit-result reporting and Bayesian posterior summaries."""

from easydiffraction.analysis.fit_helpers.bayesian import BayesianFitResults
from easydiffraction.analysis.fit_helpers.bayesian import PosteriorPredictiveSummary
Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/fit_helpers/metrics.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""R-factor and reduced chi-square fit-quality metrics."""

from __future__ import annotations

Expand Down
2 changes: 1 addition & 1 deletion src/easydiffraction/analysis/fit_helpers/reporting.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause

"""Least-squares fit-result container and summary rendering."""

from easydiffraction.analysis.fit_helpers.metrics import calculate_r_factor
from easydiffraction.analysis.fit_helpers.metrics import calculate_r_factor_squared
Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/fit_helpers/tracking.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Track and display fit and sampler progress during optimization."""

from __future__ import annotations

Expand Down
4 changes: 3 additions & 1 deletion src/easydiffraction/analysis/fitting.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Fitter orchestrating model refinement via a pluggable minimizer."""

from __future__ import annotations

Expand All @@ -16,6 +17,7 @@
from easydiffraction.core.variable import Parameter
from easydiffraction.datablocks.experiment.item.base import intensity_category_for
from easydiffraction.utils.enums import VerbosityEnum
from easydiffraction.utils.logging import log

if TYPE_CHECKING:
from easydiffraction.analysis.fit_helpers.reporting import FitResults
Expand Down Expand Up @@ -218,7 +220,7 @@ def fit(
analysis._clear_persisted_fit_state()
analysis.fit_results = None
self.results = None
print('⚠️ No parameters selected for fitting.')
log.warning('No parameters selected for fitting.')
return

if analysis is not None and not fit_options.resume:
Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/minimizers/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Minimizer adapters for lmfit, bumps, dfo-ls and emcee."""

from easydiffraction.analysis.minimizers.bumps import BumpsMinimizer
from easydiffraction.analysis.minimizers.bumps_amoeba import BumpsAmoebaMinimizer
Expand Down
1 change: 1 addition & 0 deletions src/easydiffraction/analysis/minimizers/base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause
"""Abstract base class for pluggable least-squares minimizers."""

from abc import ABC
from abc import abstractmethod
Expand Down
2 changes: 1 addition & 1 deletion src/easydiffraction/analysis/minimizers/dfols.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors <https://github.com/easyscience>
# SPDX-License-Identifier: BSD-3-Clause

"""Derivative-free least-squares minimizer built on DFO-LS."""

import numpy as np
from dfols import solve
Expand Down
Loading
Loading