From 24aa26cc36c76dd00c2a25f3d777e19a4df8c8e8 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 26 Jul 2020 09:36:17 -0700 Subject: [PATCH 1/3] Setup vanilla-test.yml As the main CI is run with somewhat-old dependencies recorded in `test/environments/main/Manifest.toml`, it is also nice to run the test with the latest packages as would be installed via Pkg. --- .github/workflows/vanilla-test.yml | 21 +++++++++++++++++++++ .mergify.yml | 4 ++++ 2 files changed, 25 insertions(+) create mode 100644 .github/workflows/vanilla-test.yml diff --git a/.github/workflows/vanilla-test.yml b/.github/workflows/vanilla-test.yml new file mode 100644 index 00000000..3d53415c --- /dev/null +++ b/.github/workflows/vanilla-test.yml @@ -0,0 +1,21 @@ +name: Run test via Pkg.test() + +on: + push: + branches: + - master + pull_request: + +jobs: + vanilla-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: julia-actions/setup-julia@v1 + with: + version: 1.4 + - uses: julia-actions/julia-buildpkg@latest + - uses: julia-actions/julia-runtest@latest + env: + JULIA_NUM_THREADS: "2" + CI: "true" diff --git a/.mergify.yml b/.mergify.yml index 75a04981..c711e990 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -13,6 +13,7 @@ pull_request_rules: - status-success=Test Julia 1.3 - status-success=Benchmark - status-success=Documenter + - status-success=vanilla-test - label=ready-to-merge:squash - label!=work-in-progress actions: @@ -27,6 +28,7 @@ pull_request_rules: - status-success=Test Julia 1.3 - status-success=Benchmark - status-success=Documenter + - status-success=vanilla-test - label=ready-to-merge:rebase - label!=work-in-progress actions: @@ -41,6 +43,7 @@ pull_request_rules: - status-success=Test Julia 1.3 - status-success=Benchmark - status-success=Documenter + - status-success=vanilla-test - label=ready-to-merge:merge - label!=work-in-progress actions: @@ -55,6 +58,7 @@ pull_request_rules: - status-success=Test Julia 1.3 - status-success=Benchmark - status-success=Documenter + - status-success=vanilla-test - label~=ready-to-merge:.* actions: review: {} From 47ee0f98cc26edcd80719fe3049d55b21f53e81b Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 26 Jul 2020 09:25:29 -0700 Subject: [PATCH 2/3] Support foldxl etc. --- src/ThreadsX.jl | 7 +++++++ src/foreach.jl | 4 ++-- src/reduce.jl | 18 +++++++++--------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/ThreadsX.jl b/src/ThreadsX.jl index c07baddc..99408c86 100644 --- a/src/ThreadsX.jl +++ b/src/ThreadsX.jl @@ -67,6 +67,13 @@ else @eval const $(Symbol("@spawn")) = $(Symbol("@async")) end +if isdefined(Transducers, :foldxt) + using Transducers: foldxt +else + foldxt(rf, xf, xs; kw...) = reduce(rf, xf, xs; kw...) + foldxt(rf, xs; kw...) = reduce(rf, Map(identity), xs; kw...) +end + include("utils.jl") include("basesizes.jl") include("reduce.jl") diff --git a/src/foreach.jl b/src/foreach.jl index 5c2ba6b0..cdca7a15 100644 --- a/src/foreach.jl +++ b/src/foreach.jl @@ -115,7 +115,7 @@ ThreadsX.foreach(f, array::AbstractArray, arrays::AbstractArray; kw...) = @inline return_nothing(_...) = nothing -ThreadsX.foreach(f::F, itr; kw...) where {F} = reduce( +ThreadsX.foreach(f::F, itr; kw...) where {F} = foldxt( return_nothing, Map(f), itr; @@ -124,7 +124,7 @@ ThreadsX.foreach(f::F, itr; kw...) where {F} = reduce( kw..., ) -ThreadsX.foreach(f::F, itr, itrs...; kw...) where {F} = reduce( +ThreadsX.foreach(f::F, itr, itrs...; kw...) where {F} = foldxt( return_nothing, MapSplat(f), zip(itr, itrs...); diff --git a/src/reduce.jl b/src/reduce.jl index 7344fb0f..f8bf5759 100644 --- a/src/reduce.jl +++ b/src/reduce.jl @@ -2,7 +2,7 @@ without_basesize(; basesize = nothing, kw...) = kw function ThreadsX.reduce(op, itr; kw...) xf, reducible = extract_transducer(itr) - result = reduce( + result = foldxt( op, xf, reducible; @@ -16,7 +16,7 @@ end function ThreadsX.mapreduce(f, op, itr; kw...) xf, reducible = extract_transducer(itr) - result = reduce( + result = foldxt( op, opcompose(xf, Map(f)), reducible; @@ -33,7 +33,7 @@ function ThreadsX.mapreduce(f, op, itr, itrs...; kw...) # `Base` just does `reduce(op, map(f, ...))`: return mapreduce(f, op, itr, itrs...; without_basesize(; kw...)...) end - return reduce( + return foldxt( op, MapSplat(f), zip(itr, itrs...); @@ -64,7 +64,7 @@ asbool(f) = x -> f(x)::Bool # TODO: `any` and `all` should be done with "unordered" version ThreadsX.any(itr; kw...) = ThreadsX.any(identity, itr; kw...) -ThreadsX.any(f, itr; kw...) = reduce( +ThreadsX.any(f, itr; kw...) = foldxt( right, # no need to use `|` opcompose(Map(asbool(f)), ReduceIf(identity)), simd = Val(true), @@ -75,7 +75,7 @@ ThreadsX.any(f, itr; kw...) = reduce( ) ThreadsX.all(itr; kw...) = ThreadsX.all(identity, itr; kw...) -ThreadsX.all(f, itr; kw...) = reduce( +ThreadsX.all(f, itr; kw...) = foldxt( right, # no need to use `&` opcompose(Map(asbool(f)), ReduceIf(!)), itr; @@ -86,7 +86,7 @@ ThreadsX.all(f, itr; kw...) = reduce( ) ThreadsX.findfirst(itr; kw...) = ThreadsX.findfirst(identity, itr; kw...) -ThreadsX.findfirst(f, array::AbstractArray; kw...) = reduce( +ThreadsX.findfirst(f, array::AbstractArray; kw...) = foldxt( right, ReduceIf(i -> f(@inbounds array[i])), keys(array); @@ -99,7 +99,7 @@ ThreadsX.findfirst(f, array::AbstractArray; kw...) = reduce( ThreadsX.findlast(itr; kw...) = ThreadsX.findlast(identity, itr; kw...) function ThreadsX.findlast(f, array::AbstractArray; kw...) idx = keys(array) - return reduce( + return foldxt( right, opcompose(Map(i -> (@inbounds idx[i])), ReduceIf(i -> f(@inbounds array[i]))), lastindex(idx):-1:firstindex(idx); @@ -125,7 +125,7 @@ end _minmax((min0, max0), (min1, max1)) = (min(min0, min1), max(max0, max1)) ThreadsX.extrema(itr; kw...) = ThreadsX.extrema(identity, itr; kw...) -ThreadsX.extrema(f, itr; kw...) = reduce( +ThreadsX.extrema(f, itr; kw...) = foldxt( asmonoid(_minmax), Map(x -> (y = f(x); (y, y))), itr; @@ -189,7 +189,7 @@ function ThreadsX.unique(f::F, itr::AbstractVector{X}; kw...) where {F,X} # Using inference as an optimization. The result of this inference # does not affect the result: Y = Core.Compiler.return_type(f, Tuple{X}) - ys, = reduce( + ys, = foldxt( PushUnique(f), Map(identity), itr; From 76f90863869fc7affad9e064f3da6ea0fec1b096 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 26 Jul 2020 16:35:03 -0700 Subject: [PATCH 3/3] Update: Transducers Using commit: Skip allocation test in Julia 1.6 (#373) https://github.com/JuliaFolds/Transducers.jl/commit/887f0f3c051265576f07dd81acde17dd7fd5ce6b --- 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 32d49a72..6395984d 100644 --- a/benchmark/Manifest.toml +++ b/benchmark/Manifest.toml @@ -239,11 +239,11 @@ version = "0.1.3-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "d9bfa17064d3ea0da8213aa315d55cb8c84b60db" +git-tree-sha1 = "2e635a1e840281ed5bbc1661963beb2fff1739a6" repo-rev = "master" repo-url = "https://github.com/JuliaFolds/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.41-DEV" +version = "0.4.44-DEV" [[UUIDs]] deps = ["Random", "SHA"] diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 5a226d59..2a0ec79b 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -273,11 +273,11 @@ version = "0.1.3-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "d9bfa17064d3ea0da8213aa315d55cb8c84b60db" +git-tree-sha1 = "2e635a1e840281ed5bbc1661963beb2fff1739a6" repo-rev = "master" repo-url = "https://github.com/JuliaFolds/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.41-DEV" +version = "0.4.44-DEV" [[UUIDs]] deps = ["Random", "SHA"] diff --git a/test/environments/main/Manifest.toml b/test/environments/main/Manifest.toml index 963feb80..6d43238a 100644 --- a/test/environments/main/Manifest.toml +++ b/test/environments/main/Manifest.toml @@ -279,11 +279,11 @@ version = "0.1.3-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "d9bfa17064d3ea0da8213aa315d55cb8c84b60db" +git-tree-sha1 = "2e635a1e840281ed5bbc1661963beb2fff1739a6" repo-rev = "master" repo-url = "https://github.com/JuliaFolds/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.41-DEV" +version = "0.4.44-DEV" [[UUIDs]] deps = ["Random", "SHA"]