Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
59358ad
copier
henrikjacobsenfys Jan 23, 2026
ad013f7
fix tests
henrikjacobsenfys Jan 23, 2026
3c0d2ff
update dependencies
henrikjacobsenfys Jan 23, 2026
916d5ac
update toml
henrikjacobsenfys Jan 23, 2026
dba5c33
fix test?
henrikjacobsenfys Jan 23, 2026
e559071
update global object
henrikjacobsenfys Jan 23, 2026
2e97336
Update to new templates structure
AndrewSazonov Jan 23, 2026
dcca3dc
Updates configuration files
AndrewSazonov Jan 23, 2026
b87c04b
Update pixi.lock
AndrewSazonov Jan 23, 2026
d3bd2e7
More updates
AndrewSazonov Jan 23, 2026
e3a2fd9
Update pixi.lock
AndrewSazonov Jan 23, 2026
9723e99
Remove old files
AndrewSazonov Jan 23, 2026
4b7d9fd
Format non-python files
AndrewSazonov Jan 23, 2026
7c2d8cd
Move unit tests inside package subdirectory
AndrewSazonov Jan 23, 2026
d39a523
Move tutorials from examples/ to docs/docs/tutorials
AndrewSazonov Jan 23, 2026
91ada23
Update docs to use new tutorials
AndrewSazonov Jan 23, 2026
04b1e54
Update docs assets
AndrewSazonov Jan 23, 2026
1981485
Add ipympl and ipywidgets as deps for notebooks
AndrewSazonov Jan 23, 2026
34e63ff
Temporary disable notebook conversion step
AndrewSazonov Jan 23, 2026
00bc689
Strip notebooks
AndrewSazonov Jan 23, 2026
721ac34
Merge remote-tracking branch 'origin/develop' into copier
AndrewSazonov Jan 23, 2026
67f3f30
Move unit tests to tests/unit/...
AndrewSazonov Jan 23, 2026
8d847b8
Add convolution example
AndrewSazonov Jan 23, 2026
c93c8ff
Merge remote-tracking branch 'origin/develop' into copier
AndrewSazonov Jan 23, 2026
6d56a7d
Format tests
AndrewSazonov Jan 23, 2026
5614666
Install pytest-forked to isolate tests in subprocesses
AndrewSazonov Jan 23, 2026
0aa7a4e
reset_global_object for sample_model tests only
AndrewSazonov Jan 23, 2026
53c0e04
Enable ruff rule 'I'
AndrewSazonov Jan 23, 2026
9df7c55
Enable ruff rule 'F82'
AndrewSazonov Jan 23, 2026
6640794
Enable ruff rule 'E9'
AndrewSazonov Jan 23, 2026
e345722
Enable ruff rule 'F'
AndrewSazonov Jan 23, 2026
5419117
Enable ruff rule 'F63'
AndrewSazonov Jan 23, 2026
2c448d0
Enable ruff rule 'S'
AndrewSazonov Jan 23, 2026
ebfd8a4
Enable ruff rule 'W'
AndrewSazonov Jan 23, 2026
5d96ff1
Enable ruff rule 'E'
AndrewSazonov Jan 23, 2026
e092a9a
Temporary fix for dashboard build
AndrewSazonov Jan 23, 2026
0722ffa
Temporarily disable notebooks formatting check
AndrewSazonov Jan 23, 2026
51d2088
Another try to fix dashboard build
AndrewSazonov Jan 23, 2026
f5abd15
Add dummy header cell to allow code cells to fill full width
AndrewSazonov Jan 24, 2026
88e5dd9
Strip notebook cells
AndrewSazonov Jan 24, 2026
53de137
Add some api-reference files
AndrewSazonov Jan 24, 2026
01d0bf9
Clean up
AndrewSazonov Jan 24, 2026
af32265
Trying to fix coverage and speed up reset_global_object
AndrewSazonov Jan 24, 2026
75bdce0
Add small threshold for patch coverage
AndrewSazonov Jan 24, 2026
bff2f10
Temporary: always run unit tests with "--cov" (helps with reseting gl…
AndrewSazonov Jan 24, 2026
bbb5ff4
Use "--cov= --cov-report=" in pytest to enable faster global state fi…
AndrewSazonov Jan 24, 2026
6877efe
Add missing copyright headers
AndrewSazonov Jan 24, 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
12 changes: 5 additions & 7 deletions .badgery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,18 @@ cards:
- group: Tests
type: gh_action
title: Code/package tests (GitHub)
file: test.yaml
file: test.yml
enabled: true

- group: Tests
type: gh_action
title: Tutorial tests (GitHub)
file: tutorial-tests.yaml
file: tutorial-tests.yml
enabled: true

- group: Tests
type: gh_action
title: Package tests (PyPI)
file: pypi-test.yaml
file: pypi-test.yml
enabled: true

- group: Code Quality
Expand Down Expand Up @@ -60,15 +59,14 @@ cards:
title: Docstring coverage (interrogate)
report: reports/{branch}/coverage-docstring.txt
enabled: true

- group: Build & Release
type: gh_action
title: Publishing (PyPI)
workflow: pypi-publish.yaml
workflow: pypi-publish.yml
enabled: true

- group: Build & Release
type: gh_action
title: Docs build/deployment
workflow: docs.yaml
workflow: docs.yml
enabled: true
10 changes: 0 additions & 10 deletions .copier-answers.lib.yml

This file was deleted.

12 changes: 0 additions & 12 deletions .copier-answers.shared.yml

This file was deleted.

25 changes: 25 additions & 0 deletions .copier-answers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# WARNING: Do not edit this file manually.
# Any changes will be overwritten by Copier.
_commit: v0.0.3
_src_path: gh:easyscience/templates
app_docs_url: https://easyscience.github.io/dynamics-app
app_doi: 10.5281/zenodo.18163581
app_package_name: easydynamics_app
app_python: '3.12'
app_repo_name: dynamics-app
lib_docs_url: https://easyscience.github.io/dynamics-lib
lib_doi: 10.5281/zenodo.18163581
lib_package_name: easydynamics
lib_python_max: '3.12'
lib_python_min: '3.11'
lib_repo_name: dynamics-lib
project_contact_email: henrik.jacobsen@ess.eu
project_copyright_years: 2025-2026
project_extended_description: For plotting and fitting QENS and INS powder data
project_homepage_url: https://easyscience.github.io/dynamics
project_name: EasyDynamics
project_repo_name: dynamics
project_short_description: QENS data analysis
project_shortcut: EQ
project_type: both
template_type: lib
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,5 @@ jobs:
# Job 4: Build and publish dashboard (reusable workflow)
run-reusable-workflows:
needs: [docstring-coverage, unit-tests-coverage, integration-tests-coverage] # depend on the previous jobs
uses: ./.github/workflows/dashboard.yaml
uses: ./.github/workflows/dashboard.yml
secrets: inherit
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ jobs:
shell: bash
run: pixi add --pypi --git https://github.com/enhantica/badgery badgery

# Temporary: do not use $DEFAULT_BRANCH in $DEFAULT_BRANCH $DEVELOP_BRANCH $CI_BRANCH
- name: Run docstring coverage and code complexity/maintainability checks
run: |
for BRANCH in $DEFAULT_BRANCH $DEVELOP_BRANCH $CI_BRANCH; do
for BRANCH in $DEVELOP_BRANCH $CI_BRANCH; do
echo
echo "🔹🔸🔹🔸🔹 Processing branch $BRANCH 🔹🔸🔹🔸🔹"
if [ -d "../$BRANCH" ]; then
Expand All @@ -41,20 +42,25 @@ jobs:

git worktree add ../$BRANCH origin/$BRANCH
mkdir -p reports/$BRANCH
CODE_PATH="../$BRANCH/src"

echo "Docstring coverage for branch $BRANCH"
pixi run interrogate -c pyproject.toml --fail-under=0 ../$BRANCH/src > reports/$BRANCH/coverage-docstring.txt
pixi run interrogate -c pyproject.toml --fail-under=0 $CODE_PATH > reports/$BRANCH/coverage-docstring.txt

echo "Cyclomatic complexity for branch $BRANCH"
pixi run radon cc -s -j ../$BRANCH/src > reports/$BRANCH/cyclomatic-complexity.json
pixi run radon cc -s -j $CODE_PATH > reports/$BRANCH/cyclomatic-complexity.json

echo "Maintainability index for branch $BRANCH"
pixi run radon mi -j ../$BRANCH/src > reports/$BRANCH/maintainability-index.json
pixi run radon mi -j $CODE_PATH > reports/$BRANCH/maintainability-index.json

echo "Raw metrics for branch $BRANCH"
pixi run radon raw -s -j ../$BRANCH/src > reports/$BRANCH/raw-metrics.json
pixi run radon raw -s -j $CODE_PATH > reports/$BRANCH/raw-metrics.json
done

# Temporary: copy develop branch code metrics to default branch folder
- name: Copy develop branch reports to default branch folder
run: cp -r reports/$DEVELOP_BRANCH reports/$DEFAULT_BRANCH

- name: Generate dashboard HTML
run: >
pixi run python -m badgery --config .badgery.yaml --repo ${{ github.repository
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/docs.yaml → .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ jobs:
# Uses frozen lockfile to ensure reproducible builds.
- name: Set up pixi
uses: ./.github/actions/setup-pixi

# Pre-import the main package to exclude info messages from the docs
# E.g., Matplotlib may print messages to stdout/stderr when first
# imported. This step allows to avoid "Matplotlib is building the font
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ jobs:
- name: Init pixi project
run: pixi init easydynamics

- name: Add Python 3.13 from Conda
- name: Add Python 3.12 from Conda
working-directory: easydynamics
run: pixi add "python=3.13"
run: pixi add "python=3.12"

- name: Add other Conda dependencies
working-directory: easydynamics
Expand Down Expand Up @@ -73,5 +73,5 @@ jobs:
# Job 2: Build and publish dashboard (reusable workflow)
run-reusable-workflows:
needs: pypi-package-tests # depend on previous job
uses: ./.github/workflows/dashboard.yaml
uses: ./.github/workflows/dashboard.yml
secrets: inherit
21 changes: 5 additions & 16 deletions .github/workflows/quality.yaml → .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,6 @@ jobs:
shell: bash
run: pixi run nonpy-format-check

# Check formatting of Jupyter Notebooks in the tutorials folder
- name: Convert tutorial scripts to notebooks and check formatting
id: check_notebooks_formatting
continue-on-error: true
shell: bash
run: |
pixi run notebook-prepare
pixi run notebook-format-check

# Add summary
- name: Add quality checks summary
if: always()
Expand All @@ -104,17 +95,15 @@ jobs:
echo "| py format | ${{ steps.check_code_formatting.outcome == 'success' && '✅' || '❌' }} |"
echo "| docstring format | ${{ steps.check_docs_formatting.outcome == 'success' && '✅' || '❌' }} |"
echo "| nonpy format | ${{ steps.check_others_formatting.outcome == 'success' && '✅' || '❌' }} |"
echo "| notebooks format | ${{ steps.check_notebooks_formatting.outcome == 'success' && '✅' || '❌' }} |"
} >> "$GITHUB_STEP_SUMMARY"

# Fail job if any check failed
- name: Fail job if any check failed
if: |
steps.check_pyproject.outcome == 'failure' ||
steps.check_code_linting.outcome == 'failure' ||
steps.check_code_formatting.outcome == 'failure' ||
steps.check_docs_formatting.outcome == 'failure' ||
steps.check_others_formatting.outcome == 'failure' ||
steps.check_notebooks_formatting.outcome == 'failure'
steps.check_pyproject.outcome == 'failure'
|| steps.check_code_linting.outcome == 'failure'
|| steps.check_code_formatting.outcome == 'failure'
|| steps.check_docs_formatting.outcome == 'failure'
|| steps.check_others_formatting.outcome == 'failure'
shell: bash
run: exit 1
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@ jobs:
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: "test.yaml",
workflow_id: "test.yml",
ref: "develop"
});
8 changes: 4 additions & 4 deletions .github/workflows/test.yaml → .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ concurrency:
# Set the environment variables to be used in all jobs defined in this workflow
env:
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
PY_VERSIONS: '3.11 3.13'
PIXI_ENVS: 'py-311-env py-313-env'
PY_VERSIONS: '3.11 3.12'
PIXI_ENVS: 'py-311-env py-312-env'

jobs:
# Job 1: Set up environment variables
Expand Down Expand Up @@ -240,7 +240,7 @@ jobs:
cd easydynamics_py$py_ver

echo "Running tests"
pixi run python -m pytest ../tests/unit/ --color=yes -v
pixi run python -m pytest ../tests/unit/ --color=yes --cov= --cov-report=

echo "Exiting pixi project directory"
cd ..
Expand Down Expand Up @@ -268,5 +268,5 @@ jobs:
# Job 4: Build and publish dashboard (reusable workflow)
run-reusable-workflows:
needs: package-test # depend on previous job
uses: ./.github/workflows/dashboard.yaml
uses: ./.github/workflows/dashboard.yml
secrets: inherit
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@ jobs:
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: "tutorial-tests.yaml",
workflow_id: "tutorial-tests.yml",
ref: "develop"
});
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,5 @@ jobs:
# Job 2: Build and publish dashboard (reusable workflow)
run-reusable-workflows:
needs: tutorial-tests # depend on previous job
uses: ./.github/workflows/dashboard.yaml
uses: ./.github/workflows/dashboard.yml
secrets: inherit
2 changes: 2 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ docs/overrides/
docs/site/
docs/docs/assets/

# Python
.pytest_cache/

# MyPy
.mypy_cache
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@
and ins powder data.

**EasyDynamics** is available both as a Python library and as a
cross-platform desktop application. Here, we focus on the Python
library. For the graphical user interface (GUI), please see the
corresponding
cross-platform desktop application.

Here, we focus on the Python library. For the graphical user interface
(GUI), please see the corresponding
[GUI resources](https://github.com/easyscience/dynamics-app).

## Useful Links
Expand Down
13 changes: 13 additions & 0 deletions codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Codecov configuration
# https://docs.codecov.com/docs/codecovyml-reference

coverage:
status:
project:
default:
# Make project coverage informational (won't block PR)
informational: true
patch:
default:
# Require patch coverage but with threshold
threshold: 1%
1 change: 1 addition & 0 deletions docs/docs/api-reference/convolution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
::: easydynamics.convolution
4 changes: 4 additions & 0 deletions docs/docs/api-reference/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,7 @@ icon: material/code-braces-box

This section contains the reference detailing the functions and modules
available in EasyDynamics.

- [convolution](convolution.md) – Contains ...
- [sample_model](sample_model.md) – Handles ...
- [utils](utils.md) – Miscellaneous utility functions for ...
1 change: 1 addition & 0 deletions docs/docs/api-reference/sample_model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
::: easydynamics.sample_model
1 change: 1 addition & 0 deletions docs/docs/api-reference/utils.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
::: easydynamics.utils
Binary file added docs/docs/assets/images/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions docs/docs/installation-and-setup/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ icon: material/cog-box
# :material-cog-box: Installation & Setup

**EasyDynamics** is a cross-platform Python library compatible with
**Python 3.11** through **3.13**.
**Python 3.11** through **3.12**.

To install and set up EasyDynamics, we recommend using
[**Pixi**](https://prefix.dev), a modern package manager for Windows,
Expand Down Expand Up @@ -42,9 +42,9 @@ This section describes the simplest way to set up EasyDynamics using
pixi init easydynamics
cd easydynamics
```
- Set the Python version for the Pixi environment (e.g., 3.13):
- Set the Python version for the Pixi environment (e.g., 3.12):
```txt
pixi add python=3.13
pixi add python=3.12
```
- Add the GNU Scientific Library (GSL) dependency:
```txt
Expand Down
17 changes: 9 additions & 8 deletions docs/docs/introduction/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,23 @@ icon: material/information-slab-circle
and ins powder data.

**EasyDynamics** is available both as a Python library and as a
cross-platform desktop application. Here, we focus on the Python
library. For the graphical user interface (GUI), please see the
corresponding
[GUI resources](https://github.com/easyscience/dynamics-app).
cross-platform desktop application.

Here, we focus on the Python library. For the graphical user interface
(GUI), please see the corresponding
[GUI resources](https://easyscience.github.io/dynamics-app).

**EasyDynamics** is developed using the
[EasyScience framework](https://easyscience.org).

## License

**EasyDynamics** is released under the
**EasyDynamics** library is released under the
[BSD 3-Clause License](https://raw.githubusercontent.com/easyscience/dynamics-lib/master/LICENSE).

## Releases

The latest version of the **EasyDynamics** Python library is
The latest version of the **EasyDynamics** library is
[{{ vars.release_version }}](https://github.com/easyscience/dynamics-lib/releases/latest).

For a complete list of new features, bug fixes, and improvements, see
Expand All @@ -34,8 +35,8 @@ the

## Citation

If you use **EasyDynamics** in your work, please cite the specific
version you used.
If you use **EasyDynamics** library in your work, please cite the
specific version you used.

All official releases of the **EasyDynamics** library are archived on
Zenodo, each with a version-specific Digital Object Identifier (DOI).
Expand Down
Loading
Loading