diff --git a/.copyright.txt b/.copyright.txt index 9d1bd309..c9d03f28 100644 --- a/.copyright.txt +++ b/.copyright.txt @@ -1,2 +1,2 @@ -Copyright (c) 2026 UChicago Argonne, LLC -SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +Copyright (c) 2026-2026 UChicago Argonne, LLC +SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 99946189..7fed3b0e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,6 +28,22 @@ repos: - --license-filepath=.copyright.txt - --comment-style=# - --no-extra-eol + - id: insert-license + name: insert-license (scripts) + files: ^scripts/.*\.py$ + args: + - --license-filepath=.copyright.txt + - --comment-style=# + - --no-extra-eol + + - repo: local + hooks: + - id: update-copyright-year + name: Update copyright end year + language: python + entry: python scripts/update_copyright_year.py + pass_filenames: false + always_run: true - repo: https://github.com/PyCQA/isort rev: 5.13.2 diff --git a/AGENTS.md b/AGENTS.md index 2466f588..d22ad613 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -233,6 +233,73 @@ python3 -m pre_commit run --all-files --- +## Copyright handling + +The repo uses three coordinated mechanisms to keep copyright text +consistent. All three are wired into pre-commit and run automatically. + +### 1. Per-file headers — `.copyright.txt` + `insert-license` + +`.copyright.txt` is the single source of truth for the per-file header +text: + +```text +Copyright (c) 2026-2026 UChicago Argonne, LLC +SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License +``` + +The `Lucas-C/insert-license` pre-commit hook propagates that header to +every covered Python file on each commit. Three hook instances cover: + +* `src/ad_hoc_diffractometer/*.py` (excluding `_version.py`) +* `tests/test_*.py` +* `scripts/*.py` + +To change the per-file header text project-wide, edit only +`.copyright.txt` and run `pre-commit run --all-files`. + +### 2. Year-range bump — `scripts/update_copyright_year.py` + +A **local** pre-commit hook (`update-copyright-year`) runs the +`scripts/update_copyright_year.py` script on every commit. The script +rewrites the pattern `-` → `-` in +each file listed in its `TARGET_FILES`: + +* `.copyright.txt` +* `LICENSE` (line 1 only — the licence body is verbatim per ANL legal + and is never edited) +* `docs/source/conf.py` + +The script exits non-zero when it changes anything, so pre-commit fails +and the developer stages the rewrite before retrying the commit. On +January 1 of any year, the next commit on any branch will bring every +year span forward. + +### 3. Sphinx docs — static year range in `conf.py` + +`docs/source/conf.py` declares `copyright` as a static year-range string, +not a build-time-dynamic `datetime.now().year` expression. This is +intentional: the bump script is the single mechanism that keeps +`LICENSE`, `.copyright.txt`, and the rendered docs aligned, and a +dynamic expression would hide drift between them. + +### What NOT to edit by hand + +* The `Copyright (c) YYYY-YYYY ...` line on individual `.py` files — + edit `.copyright.txt` and re-run pre-commit instead. +* The end year in `LICENSE` line 1, `docs/source/conf.py`, or + `.copyright.txt` on January 1 — the bump script handles it. +* The body of `LICENSE` — verbatim per ANL legal. + +### What to edit by hand + +* The **start** year in any year range (project inception year); + the script never touches it. +* Adding new files to `TARGET_FILES` if a new file legitimately + contains a year range. + +--- + ## Benchmark tests The benchmark test suite (`tests/test_benchmark.py`) includes slow tests diff --git a/CHANGES.md b/CHANGES.md index 587766f5..9a9d5325 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,6 +18,10 @@ Note any unreleased items inside the comment here. Not visible until release. - Kappa equivalent-Eulerian chi axis now matches fourcv/fourch/psic. (#284) +### Maintenance + +- Unify copyright automation across hklpy2 family. (#290) + --> ## Release v0.11.0 diff --git a/LICENSE b/LICENSE index b611db75..82749e99 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2026, UChicago Argonne, LLC +Copyright (c) 2026-2026, UChicago Argonne, LLC All Rights Reserved diff --git a/docs/source/conf.py b/docs/source/conf.py index 1ffdfc72..95312a0b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -26,7 +26,9 @@ project = "ad_hoc_diffractometer" # author = _metadata["authors"][0]["name"] author = "UChicago Argonne, LLC" -copyright = f"2026, {author}" +# Static year range; kept in sync with .copyright.txt and LICENSE by +# scripts/update_copyright_year.py (registered as a pre-commit hook). +copyright = "2026-2026, UChicago Argonne, LLC" description = _metadata["description"] release = _version("ad_hoc_diffractometer") diff --git a/pyproject.toml b/pyproject.toml index 54a440f4..74f35897 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ maintainers = [{ name = "Pete Jemian", email = "prjemian+ad_hoc@gmail.com" }] readme = "README.md" requires-python = ">=3.10" keywords = ["diffraction", "geometry", "crystallography", "x-ray", "neutron"] -license = "LicenseRef-ANL-Open-Source-License" +license = "LicenseRef-UChicago-Argonne-LLC-License" license-files = ["LICEN[CS]E*"] # https://pypi.org/classifiers/ classifiers = [ diff --git a/scripts/update_copyright_year.py b/scripts/update_copyright_year.py new file mode 100755 index 00000000..76d1a8bb --- /dev/null +++ b/scripts/update_copyright_year.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License +""" +Update the copyright end year in tracked source files to the current year. + +Designed to be used as a pre-commit hook (local repo hook). Exit codes follow +the pre-commit convention: + +* 0 - nothing changed (all files already have the correct year). +* 1 - one or more files were modified; pre-commit will mark the hook as + "failed" so the developer sees the diff and stages the updated files + before retrying the commit. + +The script rewrites the pattern ``-`` -> +``-`` wherever it appears in each target file, +leaving everything else untouched. + +Files checked (paths relative to the repository root): + +* ``.copyright.txt`` - per-file header template +* ``LICENSE`` - line-1 copyright statement (only the year + range is rewritten; the licence body is + verbatim per ANL legal and is never touched + by this script) +* ``docs/source/conf.py`` - Sphinx ``copyright`` value + +To add a new target, append to :data:`TARGET_FILES` below. +""" + +from __future__ import annotations + +import pathlib +import re +import sys +from datetime import datetime + +# --------------------------------------------------------------------------- +# Configuration +# --------------------------------------------------------------------------- + +REPO_ROOT = pathlib.Path(__file__).parent.parent + +# Files that contain the copyright year span, relative to the repo root. +TARGET_FILES: list[pathlib.Path] = [ + REPO_ROOT / ".copyright.txt", + REPO_ROOT / "LICENSE", + REPO_ROOT / "docs" / "source" / "conf.py", +] + +# Matches e.g. "2026-2026" and captures the start year and old end year. +YEAR_RANGE_PATTERN = re.compile(r"(\d{4})-(\d{4})") + +CURRENT_YEAR = str(datetime.now().year) + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def update_file(path: pathlib.Path, current_year: str) -> bool: + """ + Replace stale end-years in *path* with *current_year*. + + Returns True if the file was modified. + """ + original = path.read_text(encoding="utf-8") + + def _replace(match: re.Match) -> str: + start, end = match.group(1), match.group(2) + if end == current_year: + return match.group(0) # already up to date + return f"{start}-{current_year}" + + updated = YEAR_RANGE_PATTERN.sub(_replace, original) + + if updated == original: + return False + + path.write_text(updated, encoding="utf-8") + return True + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + + +def main() -> int: + changed: list[pathlib.Path] = [] + + for filepath in TARGET_FILES: + if not filepath.exists(): + print(f"WARNING: {filepath} not found - skipping.", file=sys.stderr) + continue + if update_file(filepath, CURRENT_YEAR): + changed.append(filepath) + print( + f"Updated copyright end year to {CURRENT_YEAR} in: {filepath.relative_to(REPO_ROOT)}" + ) + + if changed: + print( + "\nCopyright year(s) updated. Stage the changed file(s) and re-run the commit.", + file=sys.stderr, + ) + return 1 # signal pre-commit that something changed + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/ad_hoc_diffractometer/__init__.py b/src/ad_hoc_diffractometer/__init__.py index 9a954458..4b0e0a66 100644 --- a/src/ad_hoc_diffractometer/__init__.py +++ b/src/ad_hoc_diffractometer/__init__.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ ad_hoc_diffractometer — Multi-circle diffractometer geometry and related calculations. diff --git a/src/ad_hoc_diffractometer/axes.py b/src/ad_hoc_diffractometer/axes.py index 9214292e..e902574d 100644 --- a/src/ad_hoc_diffractometer/axes.py +++ b/src/ad_hoc_diffractometer/axes.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ axes.py — caller-facing axis notation and physical direction mapping. diff --git a/src/ad_hoc_diffractometer/benchmark.py b/src/ad_hoc_diffractometer/benchmark.py index f9433611..00e7673a 100644 --- a/src/ad_hoc_diffractometer/benchmark.py +++ b/src/ad_hoc_diffractometer/benchmark.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ benchmark.py — forward/inverse performance measurement. diff --git a/src/ad_hoc_diffractometer/constants.py b/src/ad_hoc_diffractometer/constants.py index bb4b6346..d6e737df 100644 --- a/src/ad_hoc_diffractometer/constants.py +++ b/src/ad_hoc_diffractometer/constants.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ constants.py — shared Cartesian basis vectors. diff --git a/src/ad_hoc_diffractometer/conversions.py b/src/ad_hoc_diffractometer/conversions.py index 830d2cdf..4544a260 100644 --- a/src/ad_hoc_diffractometer/conversions.py +++ b/src/ad_hoc_diffractometer/conversions.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License r""" conversions.py — Alternative calculation engines. diff --git a/src/ad_hoc_diffractometer/diffractometer.py b/src/ad_hoc_diffractometer/diffractometer.py index 6d67e951..ffcd9318 100644 --- a/src/ad_hoc_diffractometer/diffractometer.py +++ b/src/ad_hoc_diffractometer/diffractometer.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ diffractometer.py — AdHocDiffractometer class. diff --git a/src/ad_hoc_diffractometer/display.py b/src/ad_hoc_diffractometer/display.py index 83fb85d1..b5c81c80 100644 --- a/src/ad_hoc_diffractometer/display.py +++ b/src/ad_hoc_diffractometer/display.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ display.py — display precision settings and numeric comparison helper. diff --git a/src/ad_hoc_diffractometer/drawing.py b/src/ad_hoc_diffractometer/drawing.py index b768ab56..c04b89ce 100644 --- a/src/ad_hoc_diffractometer/drawing.py +++ b/src/ad_hoc_diffractometer/drawing.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ drawing.py — geometry visualization helpers. diff --git a/src/ad_hoc_diffractometer/factories.py b/src/ad_hoc_diffractometer/factories.py index 6b0fd60e..876eb2f0 100644 --- a/src/ad_hoc_diffractometer/factories.py +++ b/src/ad_hoc_diffractometer/factories.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ factories.py — geometry registry and shared definitions. diff --git a/src/ad_hoc_diffractometer/forward.py b/src/ad_hoc_diffractometer/forward.py index 07d0f819..d496673d 100644 --- a/src/ad_hoc_diffractometer/forward.py +++ b/src/ad_hoc_diffractometer/forward.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License r""" forward.py — Forward diffraction calculation: (h, k, l) → motor angles. diff --git a/src/ad_hoc_diffractometer/geometries/__init__.py b/src/ad_hoc_diffractometer/geometries/__init__.py index 68b05ec5..820274ba 100644 --- a/src/ad_hoc_diffractometer/geometries/__init__.py +++ b/src/ad_hoc_diffractometer/geometries/__init__.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Declarative geometry definitions (issue #267). diff --git a/src/ad_hoc_diffractometer/geometry_loader.py b/src/ad_hoc_diffractometer/geometry_loader.py index 51bfa718..f6f2152e 100644 --- a/src/ad_hoc_diffractometer/geometry_loader.py +++ b/src/ad_hoc_diffractometer/geometry_loader.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ geometry_loader.py — declarative-YAML geometry loader (issue #267). diff --git a/src/ad_hoc_diffractometer/kappa.py b/src/ad_hoc_diffractometer/kappa.py index 9b18dad7..4367c150 100644 --- a/src/ad_hoc_diffractometer/kappa.py +++ b/src/ad_hoc_diffractometer/kappa.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ kappa.py — Kappa-to-Eulerian angle conversion. diff --git a/src/ad_hoc_diffractometer/lattice.py b/src/ad_hoc_diffractometer/lattice.py index 94d3fce6..8ca19528 100644 --- a/src/ad_hoc_diffractometer/lattice.py +++ b/src/ad_hoc_diffractometer/lattice.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ lattice.py — crystallographic lattice calculations. diff --git a/src/ad_hoc_diffractometer/mode.py b/src/ad_hoc_diffractometer/mode.py index fb83aff2..728e7a51 100644 --- a/src/ad_hoc_diffractometer/mode.py +++ b/src/ad_hoc_diffractometer/mode.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ mode.py — Diffraction mode / operating constraints. diff --git a/src/ad_hoc_diffractometer/orientation.py b/src/ad_hoc_diffractometer/orientation.py index 19b6a745..4c91cf98 100644 --- a/src/ad_hoc_diffractometer/orientation.py +++ b/src/ad_hoc_diffractometer/orientation.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License r""" orientation.py — U and UB matrix computation from orienting reflections. diff --git a/src/ad_hoc_diffractometer/radiation.py b/src/ad_hoc_diffractometer/radiation.py index 8f6f831a..e8f7dd44 100644 --- a/src/ad_hoc_diffractometer/radiation.py +++ b/src/ad_hoc_diffractometer/radiation.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ radiation.py — Wavelength, energy, and wave-number conversions. diff --git a/src/ad_hoc_diffractometer/reference.py b/src/ad_hoc_diffractometer/reference.py index b0c3a706..3c89da94 100644 --- a/src/ad_hoc_diffractometer/reference.py +++ b/src/ad_hoc_diffractometer/reference.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ reference.py — Reference pseudo-angle computations for diffraction modes. diff --git a/src/ad_hoc_diffractometer/refinement.py b/src/ad_hoc_diffractometer/refinement.py index e67177c1..14fd0820 100644 --- a/src/ad_hoc_diffractometer/refinement.py +++ b/src/ad_hoc_diffractometer/refinement.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ refinement.py — Lattice and orientation refinement from multiple reflections. diff --git a/src/ad_hoc_diffractometer/reflection.py b/src/ad_hoc_diffractometer/reflection.py index dfb883bb..f28af2e2 100644 --- a/src/ad_hoc_diffractometer/reflection.py +++ b/src/ad_hoc_diffractometer/reflection.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ reflection.py — Reflection and ReflectionList for orienting reflections. diff --git a/src/ad_hoc_diffractometer/rotation.py b/src/ad_hoc_diffractometer/rotation.py index a0cf529d..80bdc655 100644 --- a/src/ad_hoc_diffractometer/rotation.py +++ b/src/ad_hoc_diffractometer/rotation.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ rotation.py — rotation matrix calculation. diff --git a/src/ad_hoc_diffractometer/sample.py b/src/ad_hoc_diffractometer/sample.py index 9dcb2395..d8f2a621 100644 --- a/src/ad_hoc_diffractometer/sample.py +++ b/src/ad_hoc_diffractometer/sample.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ sample.py — Sample class and SampleDict for crystallographic sample management. diff --git a/src/ad_hoc_diffractometer/scan.py b/src/ad_hoc_diffractometer/scan.py index 359e9c97..91ae98c0 100644 --- a/src/ad_hoc_diffractometer/scan.py +++ b/src/ad_hoc_diffractometer/scan.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ scan.py — Reciprocal-space trajectory computation. diff --git a/src/ad_hoc_diffractometer/stage.py b/src/ad_hoc_diffractometer/stage.py index a20940ab..00d85979 100644 --- a/src/ad_hoc_diffractometer/stage.py +++ b/src/ad_hoc_diffractometer/stage.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ stage.py — rotary stage description. diff --git a/src/ad_hoc_diffractometer/surface.py b/src/ad_hoc_diffractometer/surface.py index 7eadd3d6..fbec5fa6 100644 --- a/src/ad_hoc_diffractometer/surface.py +++ b/src/ad_hoc_diffractometer/surface.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ surface.py — Surface geometry calculations. diff --git a/tests/test_axes.py b/tests/test_axes.py index a20aeb57..2d7b933d 100644 --- a/tests/test_axes.py +++ b/tests/test_axes.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.axes. diff --git a/tests/test_basis_invariance.py b/tests/test_basis_invariance.py index 055ca832..2c145b03 100644 --- a/tests/test_basis_invariance.py +++ b/tests/test_basis_invariance.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Basis-invariance tests for all preset geometries. diff --git a/tests/test_benchmark.py b/tests/test_benchmark.py index a91c7938..7fe4bb3c 100644 --- a/tests/test_benchmark.py +++ b/tests/test_benchmark.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Tests for the benchmark module. diff --git a/tests/test_conversions.py b/tests/test_conversions.py index 374601cd..aff0cfc7 100644 --- a/tests/test_conversions.py +++ b/tests/test_conversions.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.conversions. diff --git a/tests/test_diffractometer.py b/tests/test_diffractometer.py index c5b3e83d..742f3804 100644 --- a/tests/test_diffractometer.py +++ b/tests/test_diffractometer.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.diffractometer. diff --git a/tests/test_display.py b/tests/test_display.py index a58dc3f0..e4014054 100644 --- a/tests/test_display.py +++ b/tests/test_display.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.display. diff --git a/tests/test_drawing.py b/tests/test_drawing.py index f4b8d468..1b99e62d 100644 --- a/tests/test_drawing.py +++ b/tests/test_drawing.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.drawing. diff --git a/tests/test_factories.py b/tests/test_factories.py index 792aa5f1..b1c16117 100644 --- a/tests/test_factories.py +++ b/tests/test_factories.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.factories. diff --git a/tests/test_forward.py b/tests/test_forward.py index 6e9b07c5..41c837e6 100644 --- a/tests/test_forward.py +++ b/tests/test_forward.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.forward (compute_forward / geometry.forward). diff --git a/tests/test_geometry_loader.py b/tests/test_geometry_loader.py index 9dff9c9b..a273c2d5 100644 --- a/tests/test_geometry_loader.py +++ b/tests/test_geometry_loader.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for :mod:`ad_hoc_diffractometer.geometry_loader`. diff --git a/tests/test_kappa.py b/tests/test_kappa.py index b5f10a8a..0aad4feb 100644 --- a/tests/test_kappa.py +++ b/tests/test_kappa.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.kappa — kappa-to-Eulerian conversion. diff --git a/tests/test_lattice.py b/tests/test_lattice.py index 855611f3..733c19e2 100644 --- a/tests/test_lattice.py +++ b/tests/test_lattice.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for the Lattice class in lattice.py. diff --git a/tests/test_mode.py b/tests/test_mode.py index 61db9ef1..8d58eecb 100644 --- a/tests/test_mode.py +++ b/tests/test_mode.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.mode and mode-related geometry features. diff --git a/tests/test_orientation.py b/tests/test_orientation.py index d5e74b22..92779d38 100644 --- a/tests/test_orientation.py +++ b/tests/test_orientation.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.orientation. diff --git a/tests/test_radiation.py b/tests/test_radiation.py index 73772e89..d6d14609 100644 --- a/tests/test_radiation.py +++ b/tests/test_radiation.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.radiation (issues #21 and #8). diff --git a/tests/test_reference.py b/tests/test_reference.py index 551c5815..6d3ab98f 100644 --- a/tests/test_reference.py +++ b/tests/test_reference.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.reference — reference pseudo-angles. diff --git a/tests/test_refinement.py b/tests/test_refinement.py index 6a0e12b5..58d0a196 100644 --- a/tests/test_refinement.py +++ b/tests/test_refinement.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.refinement. diff --git a/tests/test_reflection.py b/tests/test_reflection.py index 33e492b0..7730243a 100644 --- a/tests/test_reflection.py +++ b/tests/test_reflection.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.reflection. diff --git a/tests/test_regenerate_switcher.py b/tests/test_regenerate_switcher.py index 8d32a110..46e05930 100644 --- a/tests/test_regenerate_switcher.py +++ b/tests/test_regenerate_switcher.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """Tests for tools/regenerate_switcher.py. The script lives in ``tools/`` (outside the importable package) so it is diff --git a/tests/test_regression_cross_check_hkl_soleil.py b/tests/test_regression_cross_check_hkl_soleil.py index 00a98075..1087c1f3 100644 --- a/tests/test_regression_cross_check_hkl_soleil.py +++ b/tests/test_regression_cross_check_hkl_soleil.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Cross-module regression tests cross-validating against ``hkl_soleil`` (libhkl). diff --git a/tests/test_regression_issue_237.py b/tests/test_regression_issue_237.py index 4b954c2a..52a3f62e 100644 --- a/tests/test_regression_issue_237.py +++ b/tests/test_regression_issue_237.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Cross-module regression tests for issue #237. diff --git a/tests/test_regression_issue_243.py b/tests/test_regression_issue_243.py index bec4ca2e..c1146732 100644 --- a/tests/test_regression_issue_243.py +++ b/tests/test_regression_issue_243.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Cross-module regression tests for issue #243. diff --git a/tests/test_regression_issue_252.py b/tests/test_regression_issue_252.py index 8ebf2e2c..dcda71f1 100644 --- a/tests/test_regression_issue_252.py +++ b/tests/test_regression_issue_252.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Cross-module regression tests for issue #252. diff --git a/tests/test_regression_issue_262.py b/tests/test_regression_issue_262.py index 00206fa2..c09e323c 100644 --- a/tests/test_regression_issue_262.py +++ b/tests/test_regression_issue_262.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Cross-module regression tests for issue #262 — psic and kappa6c zone modes. diff --git a/tests/test_regression_issue_264.py b/tests/test_regression_issue_264.py index 8d2dca66..977b3f00 100644 --- a/tests/test_regression_issue_264.py +++ b/tests/test_regression_issue_264.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Cross-module regression tests for issue #264. diff --git a/tests/test_regression_issue_267.py b/tests/test_regression_issue_267.py index c57a97a7..0edea15c 100644 --- a/tests/test_regression_issue_267.py +++ b/tests/test_regression_issue_267.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Regression tests for issue #267 — declarative geometries. diff --git a/tests/test_regression_issue_278.py b/tests/test_regression_issue_278.py index 0af92705..7b915cce 100644 --- a/tests/test_regression_issue_278.py +++ b/tests/test_regression_issue_278.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Regression tests for issue #278. diff --git a/tests/test_regression_issue_279.py b/tests/test_regression_issue_279.py index 72a1e6cc..ba512d87 100644 --- a/tests/test_regression_issue_279.py +++ b/tests/test_regression_issue_279.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Regression tests for issue #279. diff --git a/tests/test_regression_issue_280.py b/tests/test_regression_issue_280.py index 26f6da45..1998be3e 100644 --- a/tests/test_regression_issue_280.py +++ b/tests/test_regression_issue_280.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Cross-module regression tests for issue #280. diff --git a/tests/test_regression_issue_284.py b/tests/test_regression_issue_284.py index ed05388b..537aed38 100644 --- a/tests/test_regression_issue_284.py +++ b/tests/test_regression_issue_284.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Regression tests for issue #284. @@ -443,9 +443,7 @@ def test_kappa_eulerian_chi_invalid_form_rejected(): """Non-string non-vector ``kappa_eulerian_chi`` is rejected.""" doc = yaml.safe_load(_kappa_yaml_doc()) doc["kappa_eulerian_chi"] = 42 # neither a string nor a vector - with pytest.raises( - GeometrySchemaError, match="'kappa_eulerian_chi' must be" - ): + with pytest.raises(GeometrySchemaError, match="'kappa_eulerian_chi' must be"): load_geometry_file(yaml.safe_dump(doc)) @@ -701,6 +699,3 @@ def test_kappa_convention_accepts_any_perpendicular_n_chi_eq(n_chi_eq, context): n_kphi=n_kphi, n_chi_eq=np.array(n_chi_eq, dtype=float), ) - - - diff --git a/tests/test_regression_issue_285.py b/tests/test_regression_issue_285.py index 29cc4f3d..7fb55f68 100644 --- a/tests/test_regression_issue_285.py +++ b/tests/test_regression_issue_285.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Regression tests for issue #285. diff --git a/tests/test_rotation.py b/tests/test_rotation.py index 259b15d7..987c8c26 100644 --- a/tests/test_rotation.py +++ b/tests/test_rotation.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.rotation. diff --git a/tests/test_sample.py b/tests/test_sample.py index 385c68eb..72216638 100644 --- a/tests/test_sample.py +++ b/tests/test_sample.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.sample. diff --git a/tests/test_scan.py b/tests/test_scan.py index 05dffde5..77e9a23b 100644 --- a/tests/test_scan.py +++ b/tests/test_scan.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.scan. diff --git a/tests/test_stage.py b/tests/test_stage.py index 6e6f78f5..1db4f461 100644 --- a/tests/test_stage.py +++ b/tests/test_stage.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.stage. diff --git a/tests/test_surface.py b/tests/test_surface.py index 592701e9..7b4618f3 100644 --- a/tests/test_surface.py +++ b/tests/test_surface.py @@ -1,5 +1,5 @@ -# Copyright (c) 2026 UChicago Argonne, LLC -# SPDX-License-Identifier: LicenseRef-ANL-Open-Source-License +# Copyright (c) 2026-2026 UChicago Argonne, LLC +# SPDX-License-Identifier: LicenseRef-UChicago-Argonne-LLC-License """ Unit tests for ad_hoc_diffractometer.surface and geometry surface methods.