From 7c54ff20d7bcb5a037a4ce45360cb24620628b1f Mon Sep 17 00:00:00 2001 From: Cupiditas Date: Fri, 4 Sep 2020 10:31:12 +1000 Subject: [PATCH 1/3] Added canonicalize for Periods --- stdlib/Dates/src/periods.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/Dates/src/periods.jl b/stdlib/Dates/src/periods.jl index 529de24b80830..4ae2d8b908157 100644 --- a/stdlib/Dates/src/periods.jl +++ b/stdlib/Dates/src/periods.jl @@ -249,6 +249,7 @@ julia> Dates.canonicalize(Dates.CompoundPeriod(Dates.Minute(50000))) 4 weeks, 6 days, 17 hours, 20 minutes ``` """ +canonicalize(x::Period) = canonicalize(CompoundPeriod(x)) function canonicalize(x::CompoundPeriod) # canonicalize Periods by pushing "overflow" into a coarser period. p = x.periods From 63d0395ca7e4148b2bd51835f9ec61dd1d5da7c1 Mon Sep 17 00:00:00 2001 From: Cupiditas Date: Fri, 4 Sep 2020 13:06:53 +1000 Subject: [PATCH 2/3] Added tests for canonicalizing Periods --- stdlib/Dates/test/periods.jl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/stdlib/Dates/test/periods.jl b/stdlib/Dates/test/periods.jl index c93e7368f30d2..ddcd189ea45a4 100644 --- a/stdlib/Dates/test/periods.jl +++ b/stdlib/Dates/test/periods.jl @@ -378,6 +378,18 @@ end @test Dates.Date(2009, 2, 1) - (Dates.Month(1) + Dates.Day(1)) == Dates.Date(2008, 12, 31) @test_throws MethodError (Dates.Month(1) + Dates.Day(1)) - Dates.Date(2009,2,1) end + +@testset "canonicalize Period" begin + # reduce individual Period into most basic CompoundPeriod + @test Dates.canonicalize(Dates.Nanosecond(1000000)) == Dates.canonicalize(Dates.Millisecond(1)) + @test Dates.canonicalize(Dates.Millisecond(1000)) == Dates.canonicalize(Dates.Second(1)) + @test Dates.canonicalize(Dates.Second(60)) == Dates.canonicalize(Dates.Minute(1)) + @test Dates.canonicalize(Dates.Minute(60)) == Dates.canonicalize(Dates.Hour(1)) + @test Dates.canonicalize(Dates.Hour(24)) == Dates.canonicalize(Dates.Day(1)) + @test Dates.canonicalize(Dates.Day(7)) == Dates.canonicalize(Dates.Week(1)) + @test Dates.canonicalize(Dates.Month(12)) == Dates.canonicalize(Dates.Year(1)) + @test Dates.canonicalize(Dates.Minute(24*60*1 + 12*60)) == Dates.canonicalize(Dates.CompoundPeriod([Dates.Day(1),Dates.Hour(12)])) +end @testset "unary ops and vectorized period arithmetic" begin pa = [1y 1m 1w 1d; 1h 1mi 1s 1ms] cpa = [1y + 1s 1m + 1s 1w + 1s 1d + 1s; 1h + 1s 1mi + 1s 2m + 1s 1s + 1ms] @@ -468,3 +480,4 @@ end end end + From 3482c013aa5242ab0f530f2ef41a5f2df6e790d1 Mon Sep 17 00:00:00 2001 From: Cupiditas Date: Sun, 6 Sep 2020 11:31:51 +1000 Subject: [PATCH 3/3] Added NEWS item for canonicalize addition --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 98c68b32b7a26..4261dbacb485b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -133,7 +133,7 @@ Standard library changes #### Dates * `Quarter` period is defined ([#35519]). - +* `canonicalize` can now take `Period` as an input ([#37391]) #### Statistics