From 1295404b5ca1570292ca00819dcac24bf3798096 Mon Sep 17 00:00:00 2001 From: Katharine Hyatt Date: Mon, 15 Jun 2026 06:39:02 -0400 Subject: [PATCH 1/3] Let findmax/min work with Complex and real-valued f --- src/host/indexing.jl | 4 ++-- test/testsuite/indexing.jl | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/host/indexing.jl b/src/host/indexing.jl index 7c652f50..cef82f69 100644 --- a/src/host/indexing.jl +++ b/src/host/indexing.jl @@ -261,5 +261,5 @@ end Base.findmax(a::AnyGPUArray; dims=:) = findminmax(Base.isless, identity, a; init=typemin(eltype(a)), dims) Base.findmin(a::AnyGPUArray; dims=:) = findminmax(Base.isgreater, identity, a; init=typemax(eltype(a)), dims) -Base.findmax(f::Function, a::AnyGPUArray; dims=:) = findminmax(Base.isless, f, a; init=typemin(eltype(a)), dims) -Base.findmin(f::Function, a::AnyGPUArray; dims=:) = findminmax(Base.isgreater, f, a; init=typemax(eltype(a)), dims) +Base.findmax(f::Function, a::AnyGPUArray; dims=:) = findminmax(Base.isless, f, a; init=typemin(f(zero(eltype(a)))), dims) +Base.findmin(f::Function, a::AnyGPUArray; dims=:) = findminmax(Base.isgreater, f, a; init=typemax(f(zero(eltype(a)))), dims) diff --git a/test/testsuite/indexing.jl b/test/testsuite/indexing.jl index 8a336291..02d0b2fc 100644 --- a/test/testsuite/indexing.jl +++ b/test/testsuite/indexing.jl @@ -274,6 +274,11 @@ end @test isequal(findmin(x; dims=2), Array.(findmin(AT(x); dims=2))) @test isequal(findmin(x; dims=3), Array.(findmin(AT(x); dims=3))) end + # test with Complex elements as long as f outputs a real + let x = rand(ComplexF32, 100) + @test findmax(abs, x) == findmax(abs, AT(x)) + @test findmax(abs, x; dims=1) == Array.(findmax(abs, AT(x); dims=1)) + end end @testset "argmax & argmin" begin From 2ae12fa30e6417262b73a742b7dae8ac544ae6ac Mon Sep 17 00:00:00 2001 From: Katharine Hyatt Date: Mon, 15 Jun 2026 08:13:14 -0400 Subject: [PATCH 2/3] Make test less brittle --- test/testsuite/indexing.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/testsuite/indexing.jl b/test/testsuite/indexing.jl index 02d0b2fc..a904d3ca 100644 --- a/test/testsuite/indexing.jl +++ b/test/testsuite/indexing.jl @@ -276,8 +276,8 @@ end end # test with Complex elements as long as f outputs a real let x = rand(ComplexF32, 100) - @test findmax(abs, x) == findmax(abs, AT(x)) - @test findmax(abs, x; dims=1) == Array.(findmax(abs, AT(x); dims=1)) + @test findmax(real, x) == findmax(real, AT(x)) + @test findmax(abs, x; dims=1) ≈ Array.(findmax(abs, AT(x); dims=1)) end end From fd5c52dc3134f1ad65b07e43b5f0f2257acb95ee Mon Sep 17 00:00:00 2001 From: Katharine Hyatt Date: Mon, 15 Jun 2026 08:55:17 -0400 Subject: [PATCH 3/3] More tests --- test/testsuite/indexing.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/testsuite/indexing.jl b/test/testsuite/indexing.jl index a904d3ca..9558a998 100644 --- a/test/testsuite/indexing.jl +++ b/test/testsuite/indexing.jl @@ -277,7 +277,9 @@ end # test with Complex elements as long as f outputs a real let x = rand(ComplexF32, 100) @test findmax(real, x) == findmax(real, AT(x)) - @test findmax(abs, x; dims=1) ≈ Array.(findmax(abs, AT(x); dims=1)) + @test findmax(real, x; dims=1) == Array.(findmax(real, AT(x); dims=1)) + @test findmin(real, x) == findmin(real, AT(x)) + @test findmin(real, x; dims=1) == Array.(findmin(real, AT(x); dims=1)) end end