From 5fec72c8697141c3b68b1dc0eac0f01804836dce Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 16 Jan 2021 16:35:42 -0800 Subject: [PATCH 1/3] Use Transducers.Consecutive in issorted --- src/ThreadsX.jl | 1 + src/reduce.jl | 21 +++++++++++++++++---- test/test_with_base.jl | 4 ++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/ThreadsX.jl b/src/ThreadsX.jl index 3ca438d7..cb2c00a7 100644 --- a/src/ThreadsX.jl +++ b/src/ThreadsX.jl @@ -48,6 +48,7 @@ using Referenceables: referenceable using Setfield: @set using Transducers: Cat, + Consecutive, Empty, Filter, Init, diff --git a/src/reduce.jl b/src/reduce.jl index f8bf5759..e6519085 100644 --- a/src/reduce.jl +++ b/src/reduce.jl @@ -143,16 +143,29 @@ ThreadsX.issorted( kw..., ) = ThreadsX.issorted(itr, Base.ord(lt, by, rev, order); kw...) -ThreadsX.issorted(itr, order::Base.Ordering; kw...) = +function make_geq(order) + geq((x1, x2),) = !Base.lt(order, x2, x1) + return geq +end + +# TODO: Benchmark it with `Consecutive` version and drop this method +# if the speed is comparable. +ThreadsX.issorted(itr::AbstractArray, order::Base.Ordering; kw...) = ThreadsX.all( + make_geq(order), zip( view(itr, firstindex(itr):lastindex(itr)-1), view(itr, firstindex(itr)+1:lastindex(itr)), ); kw..., - ) do (x1, x2) - !Base.lt(order, x2, x1) - end + ) + +ThreadsX.issorted(itr, order::Base.Ordering; kw...) = + ThreadsX.all( + make_geq(order), + itr |> Consecutive(Val(2), Val(1)); + kw..., + ) struct PushUnique{F} <: Function f::F diff --git a/test/test_with_base.jl b/test/test_with_base.jl index a5a6ad06..5c8ae60e 100644 --- a/test/test_with_base.jl +++ b/test/test_with_base.jl @@ -97,6 +97,10 @@ issorted(reverse(0:9); by=_ -> 1) issorted([]) issorted([]; rev=true) issorted([]; by=_ -> 1) +issorted(x^2 for x in 0:9) +issorted(x^2 for x in reverse(0:8)) +issorted(x^2 for x in reverse(0:7); rev = true) +issorted(x^2 for x in reverse(0:6); by = _ -> 1) unique([1, 2, 6, 2]) unique(Real[1, 1.0, 2]) unique(x -> x^2, [1, -1, -3, 4, 3]) From 6e42bf547b6ed8593ed89697da059a7ac441b0b4 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 16 Jan 2021 21:40:29 -0800 Subject: [PATCH 2/3] Update: Transducers Using commit: Add new transducer Consecutive(size, step) https://github.com/JuliaFolds/Transducers.jl/commit/6ba14b3c2c95a11a88048b762f6b73c3e5a568fe --- benchmark/Manifest.toml | 4 ++-- docs/Manifest.toml | 4 ++-- test/environments/main/Manifest.toml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmark/Manifest.toml b/benchmark/Manifest.toml index d511a32e..e60b71da 100644 --- a/benchmark/Manifest.toml +++ b/benchmark/Manifest.toml @@ -245,11 +245,11 @@ version = "0.1.3-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "a2d46274b3a58d9117681d7effdf706022d44650" +git-tree-sha1 = "43af70a0c200318b1a0e7f5552d302f7ecda5d71" repo-rev = "master" repo-url = "https://github.com/JuliaFolds/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.52" +version = "0.4.55-DEV" [[UUIDs]] deps = ["Random", "SHA"] diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 7a761116..d0b95e6f 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -279,11 +279,11 @@ version = "0.1.3-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "a2d46274b3a58d9117681d7effdf706022d44650" +git-tree-sha1 = "43af70a0c200318b1a0e7f5552d302f7ecda5d71" repo-rev = "master" repo-url = "https://github.com/JuliaFolds/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.52" +version = "0.4.55-DEV" [[UUIDs]] deps = ["Random", "SHA"] diff --git a/test/environments/main/Manifest.toml b/test/environments/main/Manifest.toml index aec53411..c8b28b04 100644 --- a/test/environments/main/Manifest.toml +++ b/test/environments/main/Manifest.toml @@ -285,11 +285,11 @@ version = "0.1.3-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "a2d46274b3a58d9117681d7effdf706022d44650" +git-tree-sha1 = "43af70a0c200318b1a0e7f5552d302f7ecda5d71" repo-rev = "master" repo-url = "https://github.com/JuliaFolds/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.52" +version = "0.4.55-DEV" [[UUIDs]] deps = ["Random", "SHA"] From 956a6d83ad7cf61f228c2fa4f22cbae26f2a6faa Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 16 Jan 2021 22:14:23 -0800 Subject: [PATCH 3/3] Require Transducers 0.4.55 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index aaae583d..d33d49f5 100644 --- a/Project.toml +++ b/Project.toml @@ -23,7 +23,7 @@ MicroCollections = "0.1" Referenceables = "0.1" Setfield = "0.3, 0.4, 0.5, 0.6, 0.7" SplittablesBase = "0.1.8" -Transducers = "0.4.52" +Transducers = "0.4.55" julia = "1" [extras]