• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IntelPython / dpnp / 43203728329
84%

Build:
DEFAULT BRANCH: master
Ran 12 Nov 2026 01:42PM UTC
Jobs 1
Files 265
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

12 Nov 2026 10:49AM UTC coverage: 84.467% (+0.04%) from 84.424%
43203728329

push

github

web-flow
Add `dpnp.minmax` with a fused min/max reduction kernel (#3135)

NumPy 2.6 adds `numpy.minmax`, which returns the `(min, max)` tuple of
an array in a single pass. This PR adds `dpnp.minmax` with the same
signature. It is backed by a new fused reduction kernel that reads the
input once and writes both extrema, instead of running `dpnp.min` and
`dpnp.max` one after another.

### Changes
- `kernels/reductions.hpp`: a new tree reduction (no atomics) that keeps
the running minimum and maximum per work-item and reduces both over the
work-group. It uses native group algorithms for integers,
`all_of`/`any_of` for bool, and NaN-aware native reductions for real
floats: if any work-item holds a NaN, the NaN of the first such
work-item is broadcast. Complex types use the custom SLM reduction.
There are sequential, one-work-group and multi-pass variants with
strided, axis-0 and axis-1 contiguous entry points, and the two outputs
have independent strides.
- `source/reductions/minmax.cpp`: new binding
`_tensor_reductions_impl._minmax_over_axis(src, trailing_dims_to_reduce,
dst_min, dst_max, sycl_queue, depends)`.
- `dpnp/tensor/_reduction.py`: private `_minmax` helper, modelled on
`_comparison_over_axis`.
- `dpnp.minmax(a, axis=None, out=None, keepdims=False, initial=None,
where=True)`: `out` is a tuple of two arrays, and an entry may be
`None`. `initial` and `where` are only supported with their default
values, as in `dpnp.min` and `dpnp.max`.
- Docs, exports, changelog, and tests in `test_statistics.py`,
`test_sycl_queue.py` and `test_usm_type.py`.

Two behaviours follow `dpnp.min`, `dpnp.max` and `dpnp.modf` rather than
NumPy, and are not changed here:
- An `out` of another dtype receives the result cast after the
reduction. NumPy casts the input first.
- `out` entries that overlap in memory are rejected, including
interleaved views such as `(r[:, 0], r[:, 1])`.

### Performance
Measured on an Intel Core Ultra 7 366H (Panther Lake H) with its
integrated GPU on Le... (continued)

1792 of 2998 branches covered (59.77%)

Branch coverage included in aggregate %.

94 of 98 new or added lines in 2 files covered. (95.92%)

29709 of 34296 relevant lines covered (86.63%)

40074.04 hits per line

Uncovered Changes

Lines Coverage ∆ File
4
97.93
-2.07% dpnp/dpnp_utils/dpnp_utils_statistics.py
Jobs
ID Job ID Ran Files Coverage
1 43203728329.1 12 Nov 2026 01:42PM UTC 265
84.47
GitHub Action Run
Source Files on build 43203728329
  • Tree
  • List 265
  • Changed 4
  • Source Changed 3
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #43203728329
  • 2f3bcef6 on github
  • Prev Build on master (#43062643016)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc