essreduce 25.2.0__tar.gz → 25.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. {essreduce-25.2.0 → essreduce-25.2.1}/.copier-answers.yml +1 -1
  2. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/docs.yml +1 -1
  3. essreduce-25.2.1/.github/workflows/weekly_windows_macos.yml +42 -0
  4. {essreduce-25.2.0 → essreduce-25.2.1}/.gitignore +2 -1
  5. {essreduce-25.2.0 → essreduce-25.2.1}/.pre-commit-config.yaml +1 -1
  6. {essreduce-25.2.0/src/essreduce.egg-info → essreduce-25.2.1}/PKG-INFO +1 -1
  7. {essreduce-25.2.0 → essreduce-25.2.1}/pyproject.toml +1 -2
  8. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/ci.txt +1 -1
  9. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/docs.txt +3 -1
  10. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/make_base.py +9 -6
  11. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/nightly.in +4 -1
  12. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/nightly.txt +7 -4
  13. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/static.txt +2 -2
  14. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/__init__.py +4 -4
  15. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/live/raw.py +13 -2
  16. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/time_of_flight/__init__.py +1 -2
  17. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/__init__.py +9 -10
  18. {essreduce-25.2.0 → essreduce-25.2.1/src/essreduce.egg-info}/PKG-INFO +1 -1
  19. {essreduce-25.2.0 → essreduce-25.2.1}/src/essreduce.egg-info/SOURCES.txt +1 -0
  20. {essreduce-25.2.0 → essreduce-25.2.1}/tests/live/raw_test.py +41 -0
  21. {essreduce-25.2.0 → essreduce-25.2.1}/tox.ini +4 -1
  22. {essreduce-25.2.0 → essreduce-25.2.1}/.copier-answers.ess.yml +0 -0
  23. {essreduce-25.2.0 → essreduce-25.2.1}/.github/ISSUE_TEMPLATE/blank.md +0 -0
  24. {essreduce-25.2.0 → essreduce-25.2.1}/.github/ISSUE_TEMPLATE/high-level-requirement.yml +0 -0
  25. {essreduce-25.2.0 → essreduce-25.2.1}/.github/dependabot.yml +0 -0
  26. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/ci.yml +0 -0
  27. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/nightly_at_main.yml +0 -0
  28. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/nightly_at_release.yml +0 -0
  29. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/python-version-ci +0 -0
  30. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/release.yml +0 -0
  31. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/test.yml +0 -0
  32. {essreduce-25.2.0 → essreduce-25.2.1}/.github/workflows/unpinned.yml +0 -0
  33. {essreduce-25.2.0 → essreduce-25.2.1}/.python-version +0 -0
  34. {essreduce-25.2.0 → essreduce-25.2.1}/CODE_OF_CONDUCT.md +0 -0
  35. {essreduce-25.2.0 → essreduce-25.2.1}/CONTRIBUTING.md +0 -0
  36. {essreduce-25.2.0 → essreduce-25.2.1}/LICENSE +0 -0
  37. {essreduce-25.2.0 → essreduce-25.2.1}/MANIFEST.in +0 -0
  38. {essreduce-25.2.0 → essreduce-25.2.1}/README.md +0 -0
  39. {essreduce-25.2.0 → essreduce-25.2.1}/conda/meta.yaml +0 -0
  40. {essreduce-25.2.0 → essreduce-25.2.1}/docs/_static/anaconda-icon.js +0 -0
  41. {essreduce-25.2.0 → essreduce-25.2.1}/docs/_static/favicon.svg +0 -0
  42. {essreduce-25.2.0 → essreduce-25.2.1}/docs/_static/logo-dark.svg +0 -0
  43. {essreduce-25.2.0 → essreduce-25.2.1}/docs/_static/logo.svg +0 -0
  44. {essreduce-25.2.0 → essreduce-25.2.1}/docs/_templates/class-template.rst +0 -0
  45. {essreduce-25.2.0 → essreduce-25.2.1}/docs/_templates/doc_version.html +0 -0
  46. {essreduce-25.2.0 → essreduce-25.2.1}/docs/_templates/module-template.rst +0 -0
  47. {essreduce-25.2.0 → essreduce-25.2.1}/docs/about/index.md +0 -0
  48. {essreduce-25.2.0 → essreduce-25.2.1}/docs/api-reference/index.md +0 -0
  49. {essreduce-25.2.0 → essreduce-25.2.1}/docs/conf.py +0 -0
  50. {essreduce-25.2.0 → essreduce-25.2.1}/docs/developer/coding-conventions.md +0 -0
  51. {essreduce-25.2.0 → essreduce-25.2.1}/docs/developer/dependency-management.md +0 -0
  52. {essreduce-25.2.0 → essreduce-25.2.1}/docs/developer/getting-started.md +0 -0
  53. {essreduce-25.2.0 → essreduce-25.2.1}/docs/developer/gui.ipynb +0 -0
  54. {essreduce-25.2.0 → essreduce-25.2.1}/docs/developer/index.md +0 -0
  55. {essreduce-25.2.0 → essreduce-25.2.1}/docs/index.md +0 -0
  56. {essreduce-25.2.0 → essreduce-25.2.1}/docs/user-guide/index.md +0 -0
  57. {essreduce-25.2.0 → essreduce-25.2.1}/docs/user-guide/reduction-workflow-guidelines.md +0 -0
  58. {essreduce-25.2.0 → essreduce-25.2.1}/docs/user-guide/tof/dream.ipynb +0 -0
  59. {essreduce-25.2.0 → essreduce-25.2.1}/docs/user-guide/tof/frame-unwrapping.ipynb +0 -0
  60. {essreduce-25.2.0 → essreduce-25.2.1}/docs/user-guide/tof/index.md +0 -0
  61. {essreduce-25.2.0 → essreduce-25.2.1}/docs/user-guide/tof/wfm.ipynb +0 -0
  62. {essreduce-25.2.0 → essreduce-25.2.1}/docs/user-guide/widget.md +0 -0
  63. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/base.in +0 -0
  64. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/base.txt +0 -0
  65. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/basetest.in +0 -0
  66. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/basetest.txt +0 -0
  67. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/ci.in +0 -0
  68. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/dev.in +0 -0
  69. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/dev.txt +0 -0
  70. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/docs.in +0 -0
  71. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/mypy.in +0 -0
  72. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/mypy.txt +0 -0
  73. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/static.in +0 -0
  74. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/test.in +0 -0
  75. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/test.txt +0 -0
  76. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/wheels.in +0 -0
  77. {essreduce-25.2.0 → essreduce-25.2.1}/requirements/wheels.txt +0 -0
  78. {essreduce-25.2.0 → essreduce-25.2.1}/resources/logo.svg +0 -0
  79. {essreduce-25.2.0 → essreduce-25.2.1}/setup.cfg +0 -0
  80. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/data.py +0 -0
  81. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/live/__init__.py +0 -0
  82. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/live/roi.py +0 -0
  83. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/live/workflow.py +0 -0
  84. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/logging.py +0 -0
  85. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/nexus/__init__.py +10 -10
  86. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/nexus/_nexus_loader.py +0 -0
  87. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/nexus/json_generator.py +0 -0
  88. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/nexus/json_nexus.py +0 -0
  89. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/nexus/types.py +0 -0
  90. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/nexus/workflow.py +0 -0
  91. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/parameter.py +0 -0
  92. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/py.typed +0 -0
  93. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/scripts/grow_nexus.py +0 -0
  94. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/streaming.py +0 -0
  95. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/time_of_flight/fakes.py +0 -0
  96. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/time_of_flight/simulation.py +0 -0
  97. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/time_of_flight/to_events.py +0 -0
  98. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/time_of_flight/toa_to_tof.py +0 -0
  99. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/time_of_flight/types.py +0 -0
  100. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/ui.py +0 -0
  101. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/uncertainty.py +0 -0
  102. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_base.py +0 -0
  103. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_binedges_widget.py +0 -0
  104. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_bounds_widget.py +0 -0
  105. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_config.py +0 -0
  106. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_filename_widget.py +0 -0
  107. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_linspace_widget.py +0 -0
  108. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_optional_widget.py +0 -0
  109. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_spinner.py +0 -0
  110. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_string_widget.py +0 -0
  111. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_switchable_widget.py +0 -0
  112. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/widgets/_vector_widget.py +0 -0
  113. {essreduce-25.2.0 → essreduce-25.2.1}/src/ess/reduce/workflow.py +0 -0
  114. {essreduce-25.2.0 → essreduce-25.2.1}/src/essreduce.egg-info/dependency_links.txt +0 -0
  115. {essreduce-25.2.0 → essreduce-25.2.1}/src/essreduce.egg-info/entry_points.txt +0 -0
  116. {essreduce-25.2.0 → essreduce-25.2.1}/src/essreduce.egg-info/requires.txt +0 -0
  117. {essreduce-25.2.0 → essreduce-25.2.1}/src/essreduce.egg-info/top_level.txt +0 -0
  118. {essreduce-25.2.0 → essreduce-25.2.1}/tests/live/roi_test.py +0 -0
  119. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_generator_test.py +0 -0
  120. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_examples/array_dataset.json +0 -0
  121. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_examples/dataset.json +0 -0
  122. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_examples/detector.json +0 -0
  123. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_examples/entry.json +0 -0
  124. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_examples/event_data.json +0 -0
  125. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_examples/instrument.json +0 -0
  126. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_examples/log.json +0 -0
  127. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/json_nexus_test.py +0 -0
  128. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/nexus_loader_test.py +0 -0
  129. {essreduce-25.2.0 → essreduce-25.2.1}/tests/nexus/workflow_test.py +0 -0
  130. {essreduce-25.2.0 → essreduce-25.2.1}/tests/package_test.py +0 -0
  131. {essreduce-25.2.0 → essreduce-25.2.1}/tests/scripts/test_grow_nexus.py +0 -0
  132. {essreduce-25.2.0 → essreduce-25.2.1}/tests/streaming_test.py +0 -0
  133. {essreduce-25.2.0 → essreduce-25.2.1}/tests/time_of_flight/to_events_test.py +0 -0
  134. {essreduce-25.2.0 → essreduce-25.2.1}/tests/time_of_flight/unwrap_test.py +0 -0
  135. {essreduce-25.2.0 → essreduce-25.2.1}/tests/time_of_flight/wfm_test.py +0 -0
  136. {essreduce-25.2.0 → essreduce-25.2.1}/tests/uncertainty_test.py +0 -0
  137. {essreduce-25.2.0 → essreduce-25.2.1}/tests/widget_test.py +0 -0
@@ -1,5 +1,5 @@
1
1
  # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY
2
- _commit: aa5dc5e
2
+ _commit: 5c4fd02
3
3
  _src_path: gh:scipp/copier_template
4
4
  description: Common data reduction tools for the ESS facility
5
5
  max_python: '3.13'
@@ -69,7 +69,7 @@ jobs:
69
69
  name: docs_html
70
70
  path: html/
71
71
 
72
- - uses: JamesIves/github-pages-deploy-action@v4.6.9
72
+ - uses: JamesIves/github-pages-deploy-action@v4.7.2
73
73
  if: ${{ inputs.publish }}
74
74
  with:
75
75
  branch: gh-pages
@@ -0,0 +1,42 @@
1
+ name: Windows and MacOS weekly tests
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ - cron: '0 2 * * 1'
7
+
8
+ jobs:
9
+ pytox:
10
+ name: Python and Tox env
11
+ runs-on: 'ubuntu-24.04'
12
+ outputs:
13
+ min_python: ${{ steps.vars.outputs.min_python }}
14
+ min_tox_env: ${{ steps.vars.outputs.min_tox_env }}
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - name: Get Python version for other CI jobs
18
+ id: vars
19
+ run: |
20
+ echo "min_python=$(cat .github/workflows/python-version-ci)" >> $GITHUB_OUTPUT
21
+ echo "min_tox_env=py$(cat .github/workflows/python-version-ci | sed 's/\.//g')" >> $GITHUB_OUTPUT
22
+ tests:
23
+ name: Tests
24
+ needs: pytox
25
+ strategy:
26
+ matrix:
27
+ os: ['macos-latest', 'windows-latest']
28
+ python:
29
+ - version: '${{needs.pytox.outputs.min_python}}'
30
+ tox-env: '${{needs.pytox.outputs.min_tox_env}}'
31
+ uses: ./.github/workflows/test.yml
32
+ with:
33
+ os-variant: ${{ matrix.os }}
34
+ python-version: ${{ matrix.python.version }}
35
+ tox-env: ${{ matrix.python.tox-env }}
36
+
37
+ docs:
38
+ needs: tests
39
+ uses: ./.github/workflows/docs.yml
40
+ with:
41
+ publish: false
42
+ branch: ${{ github.head_ref == '' && github.ref_name || github.head_ref }}
@@ -4,7 +4,8 @@ dist
4
4
  html
5
5
  .tox
6
6
  *.egg-info
7
- uv.lock # we lock dependencies with pip-compile, not uv
7
+ # we lock dependencies with pip-compile, not uv
8
+ uv.lock
8
9
 
9
10
  *.sw?
10
11
 
@@ -23,7 +23,7 @@ repos:
23
23
  args: [ "--drop-empty-cells",
24
24
  "--extra-keys 'metadata.language_info.version cell.metadata.jp-MarkdownHeadingCollapsed cell.metadata.pycharm'" ]
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.6.9
26
+ rev: v0.8.0
27
27
  hooks:
28
28
  - id: ruff
29
29
  args: [ --fix ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: essreduce
3
- Version: 25.2.0
3
+ Version: 25.2.1
4
4
  Summary: Common data reduction tools for the ESS facility
5
5
  Author: Scipp contributors
6
6
  License: BSD 3-Clause License
@@ -88,13 +88,12 @@ ignore = [
88
88
  # https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
89
89
  "COM812", "COM819", "D206", "D300", "E111", "E114", "E117", "ISC001", "ISC002", "Q000", "Q001", "Q002", "Q003", "W191",
90
90
  ]
91
- fixable = ["B010", "I001", "PT001"]
91
+ fixable = ["B010", "I001", "PT001", "RUF022"]
92
92
  isort.known-first-party = ["ess.reduce"]
93
93
  pydocstyle.convention = "numpy"
94
94
 
95
95
  [tool.ruff.lint.per-file-ignores]
96
96
  # those files have an increased risk of relying on import order
97
- "__init__.py" = ["I"]
98
97
  "tests/*" = [
99
98
  "S101", # asserts are fine in tests
100
99
  "B018", # 'useless expressions' are ok because some tests just check for exceptions
@@ -54,5 +54,5 @@ typing-extensions==4.12.2
54
54
  # via tox
55
55
  urllib3==2.3.0
56
56
  # via requests
57
- virtualenv==20.29.1
57
+ virtualenv==20.29.2
58
58
  # via tox
@@ -10,6 +10,8 @@ accessible-pygments==0.0.5
10
10
  # via pydata-sphinx-theme
11
11
  alabaster==1.0.0
12
12
  # via sphinx
13
+ appnope==0.1.4
14
+ # via ipykernel
13
15
  asttokens==3.0.0
14
16
  # via stack-data
15
17
  attrs==25.1.0
@@ -114,7 +116,7 @@ mdurl==0.1.2
114
116
  # via markdown-it-py
115
117
  mistune==3.1.1
116
118
  # via nbconvert
117
- myst-parser==4.0.0
119
+ myst-parser==4.0.1
118
120
  # via -r docs.in
119
121
  nbclient==0.10.2
120
122
  # via nbconvert
@@ -1,4 +1,3 @@
1
- import sys
2
1
  from argparse import ArgumentParser
3
2
  from pathlib import Path
4
3
 
@@ -58,11 +57,15 @@ def as_nightly(repo: str) -> str:
58
57
  else:
59
58
  org = "scipp"
60
59
  if repo == "scipp":
61
- version = f"cp{sys.version_info.major}{sys.version_info.minor}"
62
- base = "https://github.com/scipp/scipp/releases/download/nightly/scipp-nightly"
63
- suffix = "manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
64
- prefix = "scipp @ "
65
- return prefix + "-".join([base, version, version, suffix])
60
+ # With the standard pip resolver index-url takes precedence over
61
+ # extra-index-url but with uv it's reversed, so if we move to tox-uv
62
+ # this needs to be reversed.
63
+ return (
64
+ "scipp\n"
65
+ "--index-url=https://pypi.anaconda.org/scipp-nightly-wheels/simple/\n"
66
+ "--extra-index-url=https://pypi.org/simple\n"
67
+ "--pre"
68
+ )
66
69
  return f"{repo} @ git+https://github.com/{org}/{repo}@main"
67
70
 
68
71
 
@@ -6,7 +6,10 @@ pooch
6
6
  pytest
7
7
  scipy>=1.7.0
8
8
  scippnexus @ git+https://github.com/scipp/scippnexus@main
9
- scipp @ https://github.com/scipp/scipp/releases/download/nightly/scipp-nightly-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
9
+ scipp
10
+ --index-url=https://pypi.anaconda.org/scipp-nightly-wheels/simple/
11
+ --extra-index-url=https://pypi.org/simple
12
+ --pre
10
13
  sciline @ git+https://github.com/scipp/sciline@main
11
14
  cyclebane @ git+https://github.com/scipp/cyclebane@main
12
15
  scippneutron @ git+https://github.com/scipp/scippneutron@main
@@ -1,10 +1,13 @@
1
- # SHA1:c690c87be2259750742e8cf48f070ab7101b1da9
1
+ # SHA1:804c57e3756542ebfed032534ab086369b4c9b6c
2
2
  #
3
3
  # This file is autogenerated by pip-compile-multi
4
4
  # To update, run:
5
5
  #
6
6
  # pip-compile-multi
7
7
  #
8
+ --index-url https://pypi.anaconda.org/scipp-nightly-wheels/simple/
9
+ --extra-index-url https://pypi.org/simple
10
+
8
11
  annotated-types==0.7.0
9
12
  # via pydantic
10
13
  asttokens==3.0.0
@@ -108,9 +111,9 @@ ptyprocess==0.7.0
108
111
  # via pexpect
109
112
  pure-eval==0.2.3
110
113
  # via stack-data
111
- pydantic==2.10.6
114
+ pydantic==2.11.0a2
112
115
  # via scippneutron
113
- pydantic-core==2.27.2
116
+ pydantic-core==2.29.0
114
117
  # via pydantic
115
118
  pygments==2.19.1
116
119
  # via ipython
@@ -127,7 +130,7 @@ requests==2.32.3
127
130
  # via pooch
128
131
  sciline @ git+https://github.com/scipp/sciline@main
129
132
  # via -r nightly.in
130
- scipp @ https://github.com/scipp/scipp/releases/download/nightly/scipp-nightly-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
133
+ scipp==100.0.0.dev0
131
134
  # via
132
135
  # -r nightly.in
133
136
  # scippneutron
@@ -11,7 +11,7 @@ distlib==0.3.9
11
11
  # via virtualenv
12
12
  filelock==3.17.0
13
13
  # via virtualenv
14
- identify==2.6.6
14
+ identify==2.6.7
15
15
  # via pre-commit
16
16
  nodeenv==1.9.1
17
17
  # via pre-commit
@@ -21,5 +21,5 @@ pre-commit==4.1.0
21
21
  # via -r static.in
22
22
  pyyaml==6.0.2
23
23
  # via pre-commit
24
- virtualenv==20.29.1
24
+ virtualenv==20.29.2
25
25
  # via pre-commit
@@ -1,10 +1,10 @@
1
1
  # SPDX-License-Identifier: BSD-3-Clause
2
- # Copyright (c) 2024 Scipp contributors (https://github.com/scipp)
3
- # ruff: noqa: E402, F401
2
+ # Copyright (c) 2025 Scipp contributors (https://github.com/scipp)
3
+ # ruff: noqa: E402, F401, I
4
4
 
5
5
  import importlib.metadata
6
6
 
7
- from . import nexus, uncertainty, time_of_flight
7
+ from . import nexus, time_of_flight, uncertainty
8
8
 
9
9
  try:
10
10
  __version__ = importlib.metadata.version("essreduce")
@@ -13,4 +13,4 @@ except importlib.metadata.PackageNotFoundError:
13
13
 
14
14
  del importlib
15
15
 
16
- __all__ = ["nexus", "uncertainty", "time_of_flight"]
16
+ __all__ = ["nexus", "time_of_flight", "uncertainty"]
@@ -255,10 +255,19 @@ class RollingDetectorView(Detector):
255
255
  self._projection = projection
256
256
  self._window = window
257
257
  self._current = 0
258
- self._history: sc.DataArray | None = None
259
- self._cache: sc.DataArray | None = None
258
+ self._history: sc.DataArray
259
+ self._cache: sc.DataArray
260
+ self._cumulative: sc.DataArray
260
261
  self.clear_counts()
261
262
 
263
+ @property
264
+ def max_window(self) -> int:
265
+ return self._window
266
+
267
+ @property
268
+ def cumulative(self) -> sc.DataArray:
269
+ return self._cumulative
270
+
262
271
  def clear_counts(self) -> None:
263
272
  """
264
273
  Clear counts.
@@ -275,6 +284,7 @@ class RollingDetectorView(Detector):
275
284
  .copy()
276
285
  )
277
286
  self._cache = self._history.sum('window')
287
+ self._cumulative = sc.zeros_like(self._cache)
278
288
 
279
289
  def make_roi_filter(self) -> roi.ROIFilter:
280
290
  """Return a ROI filter operating via the projection plane of the view."""
@@ -494,6 +504,7 @@ class RollingDetectorView(Detector):
494
504
  self._cache -= self._history['window', self._current]
495
505
  self._history['window', self._current] = counts
496
506
  self._cache += counts
507
+ self._cumulative += counts
497
508
  self._current = (self._current + 1) % self._window
498
509
 
499
510
 
@@ -7,8 +7,8 @@ neutron time-of-arrival at the detectors.
7
7
  """
8
8
 
9
9
  from .simulation import simulate_beamline
10
- from .toa_to_tof import default_parameters, resample_tof_data, providers
11
10
  from .to_events import to_events
11
+ from .toa_to_tof import default_parameters, providers, resample_tof_data
12
12
  from .types import (
13
13
  DistanceResolution,
14
14
  LookupTableRelativeErrorThreshold,
@@ -25,7 +25,6 @@ from .types import (
25
25
  TofData,
26
26
  )
27
27
 
28
-
29
28
  __all__ = [
30
29
  "DistanceResolution",
31
30
  "LookupTableRelativeErrorThreshold",
@@ -7,29 +7,28 @@ from typing import Any, Protocol
7
7
  import ipywidgets as widgets
8
8
 
9
9
  from ..parameter import (
10
+ BinEdgesParameter,
10
11
  BooleanParameter,
11
12
  FilenameParameter,
12
13
  MultiFilenameParameter,
13
14
  MultiStringParameter,
14
- ParamWithOptions,
15
- StringParameter,
16
15
  Parameter,
17
16
  ParamWithBounds,
18
- BinEdgesParameter,
17
+ ParamWithOptions,
18
+ StringParameter,
19
19
  Vector2dParameter,
20
20
  Vector3dParameter,
21
21
  )
22
- from ._config import default_layout, default_style
23
-
24
22
  from ._binedges_widget import BinEdgesWidget
23
+ from ._bounds_widget import BoundsWidget
24
+ from ._config import default_layout, default_style
25
25
  from ._filename_widget import FilenameWidget, MultiFilenameWidget
26
26
  from ._linspace_widget import LinspaceWidget
27
- from ._vector_widget import VectorWidget
28
- from ._bounds_widget import BoundsWidget
29
- from ._string_widget import MultiStringWidget, StringWidget
30
- from ._switchable_widget import SwitchWidget
31
27
  from ._optional_widget import OptionalWidget
32
28
  from ._spinner import Spinner
29
+ from ._string_widget import MultiStringWidget, StringWidget
30
+ from ._switchable_widget import SwitchWidget
31
+ from ._vector_widget import VectorWidget
33
32
 
34
33
 
35
34
  class EssWidget(Protocol):
@@ -189,8 +188,8 @@ __all__ = [
189
188
  'LinspaceWidget',
190
189
  'MultiFilenameWidget',
191
190
  'OptionalWidget',
191
+ 'Spinner',
192
192
  'SwitchWidget',
193
193
  'VectorWidget',
194
194
  'create_parameter_widget',
195
- 'Spinner',
196
195
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: essreduce
3
- Version: 25.2.0
3
+ Version: 25.2.1
4
4
  Summary: Common data reduction tools for the ESS facility
5
5
  Author: Scipp contributors
6
6
  License: BSD 3-Clause License
@@ -21,6 +21,7 @@ tox.ini
21
21
  .github/workflows/release.yml
22
22
  .github/workflows/test.yml
23
23
  .github/workflows/unpinned.yml
24
+ .github/workflows/weekly_windows_macos.yml
24
25
  conda/meta.yaml
25
26
  docs/conf.py
26
27
  docs/index.md
@@ -53,6 +53,15 @@ def test_Detector_bincount_raises_if_detector_number_not_consecutive() -> None:
53
53
  det.bincount([1])
54
54
 
55
55
 
56
+ @pytest.mark.parametrize('window', [1, 2, 33])
57
+ def test_RollingDetectorView_max_window_property_returns_configured(
58
+ window: int,
59
+ ) -> None:
60
+ detector_number = sc.array(dims=['pixel'], values=[1, 2, 3], unit=None)
61
+ det = raw.RollingDetectorView(detector_number=detector_number, window=window)
62
+ assert det.max_window == window
63
+
64
+
56
65
  def test_RollingDetectorView_full_window() -> None:
57
66
  detector_number = sc.array(dims=['pixel'], values=[1, 2, 3], unit=None)
58
67
  det = raw.RollingDetectorView(detector_number=detector_number, window=2)
@@ -69,6 +78,38 @@ def test_RollingDetectorView_full_window() -> None:
69
78
  assert det.get().sum().value == 2
70
79
 
71
80
 
81
+ def test_RollingDetectorView_cumulative_returns_everything_since_clear() -> None:
82
+ detector_number = sc.array(dims=['pixel'], values=[1, 2, 3], unit=None)
83
+ det = raw.RollingDetectorView(detector_number=detector_number, window=2)
84
+ expected = sc.zeros_like(det.get())
85
+ assert sc.identical(det.cumulative, expected)
86
+ det.add_counts([1, 2, 3, 2])
87
+ delta1 = det.get(window=1)
88
+ expected += delta1
89
+ assert sc.identical(det.cumulative, expected)
90
+ det.add_counts([1, 3, 2])
91
+ delta2 = det.get(window=1)
92
+ expected += delta2
93
+ assert sc.identical(det.cumulative, expected)
94
+ assert sc.identical(det.cumulative, det.get()) # everything still in window
95
+ det.add_counts([1, 2])
96
+ delta3 = det.get(window=1)
97
+ expected += delta3
98
+ assert sc.identical(det.cumulative, expected)
99
+ assert not sc.identical(det.cumulative, det.get()) # delta1 fell out of window
100
+ det.add_counts([])
101
+ assert sc.identical(det.cumulative, expected)
102
+ # Reset
103
+ det.clear_counts()
104
+ expected = sc.zeros_like(expected)
105
+ assert sc.identical(det.cumulative, expected)
106
+ assert sc.identical(det.cumulative, expected)
107
+ det.add_counts([1, 2, 3, 2])
108
+ delta1 = det.get(window=1)
109
+ expected += delta1
110
+ assert sc.identical(det.cumulative, expected)
111
+
112
+
72
113
  def test_RollingDetectorView_add_events_accepts_unsorted_detector_number() -> None:
73
114
  detector_number = sc.array(dims=['detector_number'], values=[1, 3, 2], unit=None)
74
115
  det = raw.RollingDetectorView(detector_number=detector_number, window=2)
@@ -10,6 +10,9 @@ commands = pytest {posargs}
10
10
 
11
11
  [testenv:nightly]
12
12
  deps = -r requirements/nightly.txt
13
+ setenv =
14
+ PIP_INDEX_URL = https://pypi.anaconda.org/scipp-nightly-wheels/simple
15
+ PIP_EXTRA_INDEX_URL = https://pypi.org/simple
13
16
  commands = pytest {posargs}
14
17
 
15
18
  [testenv:unpinned]
@@ -64,4 +67,4 @@ deps =
64
67
  skip_install = true
65
68
  changedir = requirements
66
69
  commands = python ./make_base.py --nightly scippnexus,scipp,sciline,cyclebane,scippneutron,tof
67
- pip-compile-multi -d . --backtracking
70
+ pip-compile-multi -d . --backtracking --annotate-index
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -13,23 +13,23 @@ The submodule :mod:`types` defines all domain types.
13
13
  """
14
14
 
15
15
  from . import types
16
- from .workflow import GenericNeXusWorkflow
17
16
  from ._nexus_loader import (
18
- load_data,
19
- group_event_data,
20
- load_component,
21
- load_all_components,
22
17
  compute_component_position,
23
18
  extract_signal_data_array,
19
+ group_event_data,
20
+ load_all_components,
21
+ load_component,
22
+ load_data,
24
23
  )
24
+ from .workflow import GenericNeXusWorkflow
25
25
 
26
26
  __all__ = [
27
- 'types',
27
+ 'GenericNeXusWorkflow',
28
+ 'compute_component_position',
29
+ 'extract_signal_data_array',
28
30
  'group_event_data',
29
31
  'load_all_components',
30
- 'load_data',
31
32
  'load_component',
32
- 'compute_component_position',
33
- 'extract_signal_data_array',
34
- 'GenericNeXusWorkflow',
33
+ 'load_data',
34
+ 'types',
35
35
  ]