Skip to content
Merged
Changes from all commits
Commits
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
42 changes: 40 additions & 2 deletions src/easyreflectometry/summary/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# SPDX-License-Identifier: BSD-3-Clause

from html import escape
from importlib.metadata import PackageNotFoundError
from importlib.metadata import version

Check warning on line 6 in src/easyreflectometry/summary/summary.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/summary/summary.py#L5-L6

Added lines #L5 - L6 were not covered by tests
from urllib.parse import quote

import matplotlib.pyplot as plt
Expand All @@ -23,6 +25,36 @@
# Custom href scheme used to pass the full name to QML via TextEdit.hoveredLink.
_TOOLTIP_SCHEME = 'nametooltip'

# URLs for known calculation engines and minimizer packages.
_ENGINE_URLS: dict[str, str] = {

Check warning on line 29 in src/easyreflectometry/summary/summary.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/summary/summary.py#L29

Added line #L29 was not covered by tests
'refnx': 'https://refnx.readthedocs.io',
'refl1d': 'https://refl1d.readthedocs.io',
'bornagain': 'https://www.bornagainproject.org',
'lm': 'https://lmfit.github.io/lmfit-py/',
'bumps': 'https://bumps.readthedocs.io',
'dfo': 'https://github.com/fitbenchmarking/dfo-ls',
}


def _engine_link(name: str, package: str | None = None) -> str:

Check warning on line 39 in src/easyreflectometry/summary/summary.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/summary/summary.py#L39

Added line #L39 was not covered by tests
"""Return an HTML hyperlink for an engine, including its version.

Falls back to plain text when no URL is known for the engine.
"""
url = _ENGINE_URLS.get(name) or _ENGINE_URLS.get(package or '')
display = escape(name)
if package:
try:
ver = version(package)
except PackageNotFoundError:
ver = None
if ver:
display = f'{display} (v{ver})'

Check warning on line 52 in src/easyreflectometry/summary/summary.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/summary/summary.py#L44-L52

Added lines #L44 - L52 were not covered by tests

if url:
return f'<a href="{url}">{display}</a>'
return display

Check warning on line 56 in src/easyreflectometry/summary/summary.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/summary/summary.py#L54-L56

Added lines #L54 - L56 were not covered by tests


def _format_value(value: float, sig_figs: int) -> str:
"""Format a numeric value for summary display.
Expand Down Expand Up @@ -225,8 +257,14 @@

goodness_of_fit = self._compute_goodness_of_fit()

html_refinement = html_refinement.replace('calculation_engine', f'{self._project._calculator.current_interface_name}')
html_refinement = html_refinement.replace('minimization_engine', f'{self._project.minimizer.name}')
html_refinement = html_refinement.replace(

Check warning on line 260 in src/easyreflectometry/summary/summary.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/summary/summary.py#L260

Added line #L260 was not covered by tests
'calculation_engine',
_engine_link(self._project._calculator.current_interface_name),
)
html_refinement = html_refinement.replace(

Check warning on line 264 in src/easyreflectometry/summary/summary.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/summary/summary.py#L264

Added line #L264 was not covered by tests
'minimization_engine',
_engine_link(self._project.minimizer.name, self._project.minimizer.package),
)
html_refinement = html_refinement.replace('goodness_of_fit', goodness_of_fit)
html_refinement = html_refinement.replace('num_total_params', f'{num_params}')
html_refinement = html_refinement.replace('num_free_params', f'{num_free_params}')
Expand Down
Loading