timesteps 1.0.0 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +6 -0
- data/Note.ja.md +0 -2
- data/README.md +13 -1
- data/lib/timesteps/datetime_timestep.rb +28 -0
- data/lib/timesteps/timestep.rb +21 -2
- data/lib/timesteps/timestep_range.rb +16 -14
- data/spec/timestep_spec.rb +13 -0
- data/timesteps.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7475cc3a4a0af27a77730770cd4c952282ecfd1054d3bdd08a53d1da76ebe5a7
|
4
|
+
data.tar.gz: fdb95e8bd70ec9f2bcddf3b8c206f8db1330f169b54b531d74e4fc4148be92e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c8e36605a8128a20a7bf27af046e44d7f3d37cacb3669a7e28c4fa17aa4f0883bc9b44730756471b73f16afee6ef114b8b7021d2cee7812869914a3c832fdab
|
7
|
+
data.tar.gz: 3598ecc55200ff8e1aa474c0fd3f5c4c443b973c853557db3003e8489eb69f2630b76e4a2a44106ede8328efec69aca90d5e72e23bb95d2cdaed97d226657bfc
|
data/NEWS.md
CHANGED
data/Note.ja.md
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
-
|
1
|
+
TimeSteps
|
2
2
|
================
|
3
3
|
|
4
4
|
A library for handling discrete time series in constant increments.
|
5
5
|
The primary purpose is to describe the time axis
|
6
6
|
when dealing with time series of observational data and climate data.
|
7
7
|
|
8
|
+
This library relies heavily on the DateTime class. However,
|
9
|
+
the DateTime class has been deprecated,
|
10
|
+
so please keep that in mind when using this library.
|
11
|
+
|
8
12
|
Features
|
9
13
|
--------
|
10
14
|
|
@@ -195,6 +199,13 @@ ts = TimeStep.new("3 hours since 2001-01-01 09:00:00", calendar: "noleap")
|
|
195
199
|
|
196
200
|
# specify origin time with DateTime object
|
197
201
|
ts = TimeStep.new("3 hours", since: DateTime.parse("2001-01-01 09:00:00"))
|
202
|
+
|
203
|
+
# hourly increments whose origin is the most recent convenient time to the current time
|
204
|
+
ts = TimeStep.new("1 hour").new_origin(DateTime.now, truncate: true)
|
205
|
+
|
206
|
+
# hourly increments whose origin is the most recent convenient time to the current time
|
207
|
+
# with +0900 time offset
|
208
|
+
ts = TimeStep.new("1 hour", offset: "+0900").new_origin(DateTime.now, truncate: true)
|
198
209
|
```
|
199
210
|
|
200
211
|
### Attributes of TimeStep object
|
@@ -296,5 +307,6 @@ conv.forward(0, 56, 81, with_time: true)
|
|
296
307
|
# "ts2"=>[-48, 8, 33],
|
297
308
|
# "ts3"=>[-72, -16, 9]}
|
298
309
|
|
310
|
+
|
299
311
|
```
|
300
312
|
|
@@ -25,6 +25,34 @@ class DateTime
|
|
25
25
|
return TimePeriod.new(interval_spec, since: self, calendar: calendar, ends: ends, tz: tz)
|
26
26
|
end
|
27
27
|
|
28
|
+
def next (*args)
|
29
|
+
case args.size
|
30
|
+
when 1
|
31
|
+
num = 1
|
32
|
+
unit = args[0]
|
33
|
+
when 2
|
34
|
+
num = args[0]
|
35
|
+
unit = args[1]
|
36
|
+
else
|
37
|
+
raise "invalid number of argumets"
|
38
|
+
end
|
39
|
+
return TimeStep.new(unit, since: self).time_at(num)
|
40
|
+
end
|
41
|
+
|
42
|
+
def prev (*args)
|
43
|
+
case args.size
|
44
|
+
when 1
|
45
|
+
num = 1
|
46
|
+
unit = args[0]
|
47
|
+
when 2
|
48
|
+
num = args[0]
|
49
|
+
unit = args[1]
|
50
|
+
else
|
51
|
+
raise "invalid number of argumets"
|
52
|
+
end
|
53
|
+
return TimeStep.new(unit, since: self).time_at(-num)
|
54
|
+
end
|
55
|
+
|
28
56
|
end
|
29
57
|
|
30
58
|
class DateTime::NoLeap
|
data/lib/timesteps/timestep.rb
CHANGED
@@ -35,10 +35,14 @@ class TimeStep
|
|
35
35
|
'hours?',
|
36
36
|
'minutes?',
|
37
37
|
'seconds?',
|
38
|
+
'yrs?',
|
39
|
+
'y',
|
40
|
+
'mons?',
|
38
41
|
'd',
|
39
42
|
'hrs?',
|
40
43
|
'h',
|
41
44
|
'mins?',
|
45
|
+
'm',
|
42
46
|
'secs?',
|
43
47
|
's',
|
44
48
|
'milliseconds?',
|
@@ -516,8 +520,9 @@ class TimeStep
|
|
516
520
|
# @param time [DateTime, String]
|
517
521
|
#
|
518
522
|
# @return [TimeStep]
|
519
|
-
def new_origin (time)
|
523
|
+
def new_origin (time, truncate: false)
|
520
524
|
time = @calendar.parse(time, offset: @origin.offset) if time.is_a?(String)
|
525
|
+
time = self.truncate(time) if truncate
|
521
526
|
if @wday
|
522
527
|
origin = time - time.wday + WDAY[@wday]
|
523
528
|
origin -= 7 unless time >= origin
|
@@ -627,7 +632,7 @@ class TimeStep
|
|
627
632
|
# @return [TimeStep::Pair]
|
628
633
|
def in (unit)
|
629
634
|
other = TimeStep.new(unit, since: @origin, calendar: @calendar)
|
630
|
-
|
635
|
+
return Pair.new(self, other)
|
631
636
|
end
|
632
637
|
|
633
638
|
# Creates new timestep pair object which refers `other` from `self`
|
@@ -696,5 +701,19 @@ class TimeStep
|
|
696
701
|
return TimeStep::Range.new(self, start, last, count: count, ends: ends)
|
697
702
|
end
|
698
703
|
|
704
|
+
# Check whether the given time is right or not for timestep.
|
705
|
+
#
|
706
|
+
# @example
|
707
|
+
# ts = TimeStep.new("1 hour")
|
708
|
+
# ts.right_time?(ts.parse("2001-01-01 01:00:00"))
|
709
|
+
# # => true
|
710
|
+
# ts.right_time?(ts.parse("2001-01-01 01:30:00"))
|
711
|
+
# # => false
|
712
|
+
#
|
713
|
+
# @return [TimeStep::Range]
|
714
|
+
def right_time? (time)
|
715
|
+
return index_at(time).integer?
|
716
|
+
end
|
717
|
+
|
699
718
|
end
|
700
719
|
|
@@ -25,7 +25,7 @@ class TimeStep::Range
|
|
25
25
|
when Time
|
26
26
|
last = timestep.index_at(last.to_datetime)
|
27
27
|
when DateTime, DateTimeLike, String
|
28
|
-
last
|
28
|
+
last = timestep.index_at(last)
|
29
29
|
else
|
30
30
|
raise "unknown argument"
|
31
31
|
end
|
@@ -48,22 +48,24 @@ class TimeStep::Range
|
|
48
48
|
end
|
49
49
|
|
50
50
|
if include_start
|
51
|
-
|
51
|
+
start = start.ceil
|
52
52
|
else
|
53
|
-
|
53
|
+
start = start.floor + 1
|
54
54
|
end
|
55
55
|
|
56
56
|
if include_last
|
57
|
-
|
57
|
+
last = last.floor
|
58
58
|
else
|
59
|
-
|
59
|
+
last = last.ceil - 1
|
60
60
|
end
|
61
61
|
|
62
|
-
@timestep
|
63
|
-
@
|
64
|
-
|
65
|
-
|
66
|
-
@
|
62
|
+
@timestep = timestep.new_origin(timestep.time_at(start))
|
63
|
+
@start_time = timestep.time_at(start)
|
64
|
+
@last_time = timestep.time_at(last)
|
65
|
+
|
66
|
+
@start = @timestep.index_at(@start_time)
|
67
|
+
@last = @timestep.index_at(@last_time)
|
68
|
+
@count = @last - @start + 1
|
67
69
|
end
|
68
70
|
|
69
71
|
attr_reader :timestep, :count, :start, :last, :start_time, :last_time
|
@@ -118,8 +120,8 @@ class TimeStep::Range
|
|
118
120
|
# @param time [DateTime]
|
119
121
|
#
|
120
122
|
# @return [TimeStep]
|
121
|
-
def new_origin (time)
|
122
|
-
timestep = @timestep.new_origin(time)
|
123
|
+
def new_origin (time, truncate: false)
|
124
|
+
timestep = @timestep.new_origin(time, truncate: truncate)
|
123
125
|
return TimeStep::Range.new(timestep, count: @count)
|
124
126
|
end
|
125
127
|
|
@@ -127,12 +129,12 @@ class TimeStep::Range
|
|
127
129
|
|
128
130
|
def each_time (&block)
|
129
131
|
if block
|
130
|
-
@start
|
132
|
+
(@start..@last).each do |k|
|
131
133
|
block.call(@timestep.time_at(k))
|
132
134
|
end
|
133
135
|
else
|
134
136
|
return Enumerator.new {|y|
|
135
|
-
@start
|
137
|
+
(@start..@last).each do |k|
|
136
138
|
y << @timestep.time_at(k)
|
137
139
|
end
|
138
140
|
}
|
data/spec/timestep_spec.rb
CHANGED
@@ -436,3 +436,16 @@ describe "TimeStep#new_origin" do
|
|
436
436
|
|
437
437
|
end
|
438
438
|
|
439
|
+
|
440
|
+
describe "TimeStep#right_time?" do
|
441
|
+
|
442
|
+
example do
|
443
|
+
|
444
|
+
ts = TimeStep.new("1 hour")
|
445
|
+
is_asserted_by { ts.right_time?(ts.parse("2001-01-01 01:00:00")) == true }
|
446
|
+
is_asserted_by { ts.right_time?(ts.parse("2001-01-01 01:30:00")) == false }
|
447
|
+
|
448
|
+
end
|
449
|
+
|
450
|
+
end
|
451
|
+
|
data/timesteps.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timesteps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroki Motoyoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: " A library for time conversion and intercomparison of multiple time
|
14
14
|
series data \n in the case of handling time series data of the type that specifies
|
@@ -71,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '0'
|
73
73
|
requirements: []
|
74
|
-
rubygems_version: 3.1.
|
74
|
+
rubygems_version: 3.1.6
|
75
75
|
signing_key:
|
76
76
|
specification_version: 4
|
77
77
|
summary: A library for handling discrete time series in constant increments
|