essreduce 25.1.0__tar.gz → 25.1.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 (134) hide show
  1. {essreduce-25.1.0/src/essreduce.egg-info → essreduce-25.1.1}/PKG-INFO +1 -1
  2. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/time_of_flight/__init__.py +3 -1
  3. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/time_of_flight/to_events.py +11 -9
  4. {essreduce-25.1.0 → essreduce-25.1.1/src/essreduce.egg-info}/PKG-INFO +1 -1
  5. {essreduce-25.1.0 → essreduce-25.1.1}/tests/time_of_flight/to_events_test.py +15 -0
  6. {essreduce-25.1.0 → essreduce-25.1.1}/.copier-answers.ess.yml +0 -0
  7. {essreduce-25.1.0 → essreduce-25.1.1}/.copier-answers.yml +0 -0
  8. {essreduce-25.1.0 → essreduce-25.1.1}/.github/ISSUE_TEMPLATE/blank.md +0 -0
  9. {essreduce-25.1.0 → essreduce-25.1.1}/.github/ISSUE_TEMPLATE/high-level-requirement.yml +0 -0
  10. {essreduce-25.1.0 → essreduce-25.1.1}/.github/dependabot.yml +0 -0
  11. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/ci.yml +0 -0
  12. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/docs.yml +0 -0
  13. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/nightly_at_main.yml +0 -0
  14. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/nightly_at_release.yml +0 -0
  15. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/python-version-ci +0 -0
  16. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/release.yml +0 -0
  17. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/test.yml +0 -0
  18. {essreduce-25.1.0 → essreduce-25.1.1}/.github/workflows/unpinned.yml +0 -0
  19. {essreduce-25.1.0 → essreduce-25.1.1}/.gitignore +0 -0
  20. {essreduce-25.1.0 → essreduce-25.1.1}/.pre-commit-config.yaml +0 -0
  21. {essreduce-25.1.0 → essreduce-25.1.1}/.python-version +0 -0
  22. {essreduce-25.1.0 → essreduce-25.1.1}/CODE_OF_CONDUCT.md +0 -0
  23. {essreduce-25.1.0 → essreduce-25.1.1}/CONTRIBUTING.md +0 -0
  24. {essreduce-25.1.0 → essreduce-25.1.1}/LICENSE +0 -0
  25. {essreduce-25.1.0 → essreduce-25.1.1}/MANIFEST.in +0 -0
  26. {essreduce-25.1.0 → essreduce-25.1.1}/README.md +0 -0
  27. {essreduce-25.1.0 → essreduce-25.1.1}/conda/meta.yaml +0 -0
  28. {essreduce-25.1.0 → essreduce-25.1.1}/docs/_static/anaconda-icon.js +0 -0
  29. {essreduce-25.1.0 → essreduce-25.1.1}/docs/_static/favicon.svg +0 -0
  30. {essreduce-25.1.0 → essreduce-25.1.1}/docs/_static/logo-dark.svg +0 -0
  31. {essreduce-25.1.0 → essreduce-25.1.1}/docs/_static/logo.svg +0 -0
  32. {essreduce-25.1.0 → essreduce-25.1.1}/docs/_templates/class-template.rst +0 -0
  33. {essreduce-25.1.0 → essreduce-25.1.1}/docs/_templates/doc_version.html +0 -0
  34. {essreduce-25.1.0 → essreduce-25.1.1}/docs/_templates/module-template.rst +0 -0
  35. {essreduce-25.1.0 → essreduce-25.1.1}/docs/about/index.md +0 -0
  36. {essreduce-25.1.0 → essreduce-25.1.1}/docs/api-reference/index.md +0 -0
  37. {essreduce-25.1.0 → essreduce-25.1.1}/docs/conf.py +0 -0
  38. {essreduce-25.1.0 → essreduce-25.1.1}/docs/developer/coding-conventions.md +0 -0
  39. {essreduce-25.1.0 → essreduce-25.1.1}/docs/developer/dependency-management.md +0 -0
  40. {essreduce-25.1.0 → essreduce-25.1.1}/docs/developer/getting-started.md +0 -0
  41. {essreduce-25.1.0 → essreduce-25.1.1}/docs/developer/gui.ipynb +0 -0
  42. {essreduce-25.1.0 → essreduce-25.1.1}/docs/developer/index.md +0 -0
  43. {essreduce-25.1.0 → essreduce-25.1.1}/docs/index.md +0 -0
  44. {essreduce-25.1.0 → essreduce-25.1.1}/docs/user-guide/index.md +0 -0
  45. {essreduce-25.1.0 → essreduce-25.1.1}/docs/user-guide/reduction-workflow-guidelines.md +0 -0
  46. {essreduce-25.1.0 → essreduce-25.1.1}/docs/user-guide/tof/dream.ipynb +0 -0
  47. {essreduce-25.1.0 → essreduce-25.1.1}/docs/user-guide/tof/frame-unwrapping.ipynb +0 -0
  48. {essreduce-25.1.0 → essreduce-25.1.1}/docs/user-guide/tof/index.md +0 -0
  49. {essreduce-25.1.0 → essreduce-25.1.1}/docs/user-guide/tof/wfm.ipynb +0 -0
  50. {essreduce-25.1.0 → essreduce-25.1.1}/docs/user-guide/widget.md +0 -0
  51. {essreduce-25.1.0 → essreduce-25.1.1}/pyproject.toml +0 -0
  52. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/base.in +0 -0
  53. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/base.txt +0 -0
  54. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/basetest.in +0 -0
  55. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/basetest.txt +0 -0
  56. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/ci.in +0 -0
  57. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/ci.txt +0 -0
  58. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/dev.in +0 -0
  59. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/dev.txt +0 -0
  60. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/docs.in +0 -0
  61. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/docs.txt +0 -0
  62. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/make_base.py +0 -0
  63. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/mypy.in +0 -0
  64. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/mypy.txt +0 -0
  65. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/nightly.in +0 -0
  66. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/nightly.txt +0 -0
  67. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/static.in +0 -0
  68. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/static.txt +0 -0
  69. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/test.in +0 -0
  70. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/test.txt +0 -0
  71. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/wheels.in +0 -0
  72. {essreduce-25.1.0 → essreduce-25.1.1}/requirements/wheels.txt +0 -0
  73. {essreduce-25.1.0 → essreduce-25.1.1}/resources/logo.svg +0 -0
  74. {essreduce-25.1.0 → essreduce-25.1.1}/setup.cfg +0 -0
  75. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/__init__.py +0 -0
  76. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/data.py +0 -0
  77. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/live/__init__.py +0 -0
  78. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/live/raw.py +0 -0
  79. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/live/workflow.py +0 -0
  80. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/logging.py +0 -0
  81. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/nexus/__init__.py +0 -0
  82. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/nexus/_nexus_loader.py +0 -0
  83. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/nexus/json_generator.py +0 -0
  84. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/nexus/json_nexus.py +0 -0
  85. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/nexus/types.py +0 -0
  86. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/nexus/workflow.py +0 -0
  87. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/parameter.py +0 -0
  88. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/py.typed +0 -0
  89. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/scripts/grow_nexus.py +0 -0
  90. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/streaming.py +0 -0
  91. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/time_of_flight/fakes.py +0 -0
  92. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/time_of_flight/simulation.py +0 -0
  93. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/time_of_flight/toa_to_tof.py +0 -0
  94. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/time_of_flight/types.py +0 -0
  95. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/ui.py +0 -0
  96. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/uncertainty.py +0 -0
  97. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/__init__.py +0 -0
  98. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_base.py +0 -0
  99. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_binedges_widget.py +0 -0
  100. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_bounds_widget.py +0 -0
  101. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_config.py +0 -0
  102. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_filename_widget.py +0 -0
  103. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_linspace_widget.py +0 -0
  104. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_optional_widget.py +0 -0
  105. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_spinner.py +0 -0
  106. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_string_widget.py +0 -0
  107. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_switchable_widget.py +0 -0
  108. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/widgets/_vector_widget.py +0 -0
  109. {essreduce-25.1.0 → essreduce-25.1.1}/src/ess/reduce/workflow.py +0 -0
  110. {essreduce-25.1.0 → essreduce-25.1.1}/src/essreduce.egg-info/SOURCES.txt +0 -0
  111. {essreduce-25.1.0 → essreduce-25.1.1}/src/essreduce.egg-info/dependency_links.txt +0 -0
  112. {essreduce-25.1.0 → essreduce-25.1.1}/src/essreduce.egg-info/entry_points.txt +0 -0
  113. {essreduce-25.1.0 → essreduce-25.1.1}/src/essreduce.egg-info/requires.txt +0 -0
  114. {essreduce-25.1.0 → essreduce-25.1.1}/src/essreduce.egg-info/top_level.txt +0 -0
  115. {essreduce-25.1.0 → essreduce-25.1.1}/tests/live/raw_test.py +0 -0
  116. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_generator_test.py +0 -0
  117. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_examples/array_dataset.json +0 -0
  118. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_examples/dataset.json +0 -0
  119. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_examples/detector.json +0 -0
  120. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_examples/entry.json +0 -0
  121. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_examples/event_data.json +0 -0
  122. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_examples/instrument.json +0 -0
  123. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_examples/log.json +0 -0
  124. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/json_nexus_test.py +0 -0
  125. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/nexus_loader_test.py +0 -0
  126. {essreduce-25.1.0 → essreduce-25.1.1}/tests/nexus/workflow_test.py +0 -0
  127. {essreduce-25.1.0 → essreduce-25.1.1}/tests/package_test.py +0 -0
  128. {essreduce-25.1.0 → essreduce-25.1.1}/tests/scripts/test_grow_nexus.py +0 -0
  129. {essreduce-25.1.0 → essreduce-25.1.1}/tests/streaming_test.py +0 -0
  130. {essreduce-25.1.0 → essreduce-25.1.1}/tests/time_of_flight/unwrap_test.py +0 -0
  131. {essreduce-25.1.0 → essreduce-25.1.1}/tests/time_of_flight/wfm_test.py +0 -0
  132. {essreduce-25.1.0 → essreduce-25.1.1}/tests/uncertainty_test.py +0 -0
  133. {essreduce-25.1.0 → essreduce-25.1.1}/tests/widget_test.py +0 -0
  134. {essreduce-25.1.0 → essreduce-25.1.1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: essreduce
3
- Version: 25.1.0
3
+ Version: 25.1.1
4
4
  Summary: Common data reduction tools for the ESS facility
5
5
  Author: Scipp contributors
6
6
  License: BSD 3-Clause License
@@ -6,8 +6,9 @@ Utilities for computing real neutron time-of-flight from chopper settings and
6
6
  neutron time-of-arrival at the detectors.
7
7
  """
8
8
 
9
- from .toa_to_tof import default_parameters, resample_tof_data, providers, TofWorkflow
10
9
  from .simulation import simulate_beamline
10
+ from .toa_to_tof import default_parameters, resample_tof_data, providers, TofWorkflow
11
+ from .to_events import to_events
11
12
  from .types import (
12
13
  DistanceResolution,
13
14
  FrameFoldedTimeOfArrival,
@@ -56,4 +57,5 @@ __all__ = [
56
57
  "providers",
57
58
  "resample_tof_data",
58
59
  "simulate_beamline",
60
+ "to_events",
59
61
  ]
@@ -45,19 +45,21 @@ def to_events(
45
45
  edge_sizes = {dim: da.sizes[dim] for dim in edge_dims}
46
46
  for dim in edge_dims:
47
47
  coord = da.coords[dim]
48
- low = sc.broadcast(coord[dim, :-1], sizes=edge_sizes).values
49
- high = sc.broadcast(coord[dim, 1:], sizes=edge_sizes).values
48
+ left = sc.broadcast(coord[dim, :-1], sizes=edge_sizes).values
49
+ right = sc.broadcast(coord[dim, 1:], sizes=edge_sizes).values
50
50
 
51
51
  # The numpy.random.uniform function below does not support NaNs, so we need to
52
52
  # replace them with zeros, and then replace them back after the random numbers
53
53
  # have been generated.
54
- nans = np.isnan(low) | np.isnan(high)
55
- low = np.where(nans, 0.0, low)
56
- high = np.where(nans, 0.0, high)
54
+ nans = np.isnan(left) | np.isnan(right)
55
+ left = np.where(nans, 0.0, left)
56
+ right = np.where(nans, 0.0, right)
57
+ # Ensure left <= right
58
+ left, right = np.minimum(left, right), np.maximum(left, right)
57
59
 
58
60
  # In each bin, we generate a number of events with a uniform distribution.
59
61
  events = rng.uniform(
60
- low, high, size=(events_per_bin, *list(edge_sizes.values()))
62
+ left, right, size=(events_per_bin, *list(edge_sizes.values()))
61
63
  )
62
64
  events[..., nans] = np.nan
63
65
  event_coords[dim] = sc.array(
@@ -77,20 +79,20 @@ def to_events(
77
79
  data = da.data
78
80
  if event_masks:
79
81
  inv_mask = (~reduce(lambda a, b: a | b, event_masks.values())).to(dtype=int)
80
- inv_mask.unit = ''
82
+ inv_mask.unit = ""
81
83
  data = data * inv_mask
82
84
 
83
85
  # Create the data counts, which are the original counts divided by the number of
84
86
  # events per bin
85
87
  sizes = {event_dim: events_per_bin} | da.sizes
86
88
  val = sc.broadcast(sc.values(data) / float(events_per_bin), sizes=sizes)
87
- kwargs = {'dims': sizes.keys(), 'values': val.values, 'unit': data.unit}
89
+ kwargs = {"dims": sizes.keys(), "values": val.values, "unit": data.unit}
88
90
  if data.variances is not None:
89
91
  # Note here that all the events are correlated.
90
92
  # If we later histogram the events with different edges than the original
91
93
  # histogram, then neighboring bins will be correlated, and the error obtained
92
94
  # will be too small. It is however not clear what can be done to improve this.
93
- kwargs['variances'] = sc.broadcast(
95
+ kwargs["variances"] = sc.broadcast(
94
96
  sc.variances(data) / float(events_per_bin), sizes=sizes
95
97
  ).values
96
98
  new_data = sc.array(**kwargs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: essreduce
3
- Version: 25.1.0
3
+ Version: 25.1.1
4
4
  Summary: Common data reduction tools for the ESS facility
5
5
  Author: Scipp contributors
6
6
  License: BSD 3-Clause License
@@ -109,3 +109,18 @@ def test_to_events_two_masks():
109
109
  assert "m1" not in result.masks
110
110
  assert sc.identical(hist.masks["m2"], result.masks["m2"])
111
111
  assert result["x", 2:4].data.sum() == sc.scalar(0.0, unit=table.unit)
112
+
113
+
114
+ def test_to_events_1d_unsorted_bin_edges():
115
+ table = sc.data.table_xyz(1000)
116
+ hist = table.hist(x=10)
117
+ hist.coords["x"].values = hist.coords["x"].values[
118
+ [0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 10]
119
+ ]
120
+ events = to_events(hist, "event")
121
+ assert "x" not in events.dims
122
+ result = events.hist(x=sc.sort(hist.coords["x"], "x"))
123
+ assert sc.allclose(hist.data[:3], result.data[:3])
124
+ assert sc.allclose(hist.data[6:], result.data[6:])
125
+ # The data in the middle gets re-ordered, but the sum should still be the same
126
+ assert sc.isclose(hist.data[3:6].sum(), result.data[3:6].sum())
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
File without changes
File without changes
File without changes