rover-df 0.3.1 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7acc7d0f290ab905594bac7ab1641572e717346f1d0546b3d8b783bcd1e5aca
4
- data.tar.gz: 2569b64c237ef836884be2077e8bb8107512d6946631fdb217fb276439412419
3
+ metadata.gz: c77203874c704a18978e6a2483a1718c65fc96c47ef4dbe178a23bcd8ea6ce32
4
+ data.tar.gz: 24f04572c8197898387037c6800f487066ad4e56a35ef31df1877b6aef442fcd
5
5
  SHA512:
6
- metadata.gz: dc46c174fced1c55a96fff28a5c69dfe5a508de527432dac3801cf65375093e290860112191444ceaa23023456452f9331406cdf360a7e689f0db27c289c157c
7
- data.tar.gz: 770174c6fb1cc8a52cd47ef77eae871cb5a346d752e9c1c13b8cb44fdc5d791b60fea3d5480bcaa4453b3bca1e83e32af57a57ff0c2a319308d7206d620fa75b
6
+ metadata.gz: 383e162cd6f62d1d409b869081f4ba97025dd297567a01d300672451a0883f90464f1396b348b6991d1b99a383d4d328f33f8c7cd560e810c96e0ed2f231b688
7
+ data.tar.gz: 45bb86dfc58172021e7fdef8677f74bbb32075bfe15022e6c0cfe2ddbae0be9b0d1909f5ff42a7792a7863d54bb53afeb309610d22ae0fc02f93f9026c2ab782
data/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ ## 0.3.4 (2022-07-12)
2
+
3
+ - Added `cbrt`, `erf`, `erfc`, and `hypot` methods to vectors
4
+ - Added `frexp` and `ldexp` methods to vectors
5
+ - Added `base` argument to `log` method
6
+
7
+ ## 0.3.3 (2022-07-11)
8
+
9
+ - Added `ln`, `log`, `log10`, and `log2` methods to vectors
10
+ - Added `exp` and `exp2` methods to vectors
11
+ - Added `sin`, `cos`, `tan`, `asin`, `acos`, and `atan` methods to vectors
12
+ - Added `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, and `atanh` methods to vectors
13
+ - Added `round`, `ceil`, and `floor` methods to vectors
14
+ - Added `empty?` method to vectors
15
+ - Added `rename` method to data frames
16
+
17
+ ## 0.3.2 (2022-07-10)
18
+
19
+ - Added `sqrt` method to vectors
20
+ - Improved numeric operations between scalars and vectors
21
+ - Improved performance of `tally`
22
+
1
23
  ## 0.3.1 (2022-05-18)
2
24
 
3
25
  - Added `to!` to vectors
data/README.md CHANGED
@@ -191,6 +191,62 @@ df[:a] * 5
191
191
  df[:a] / 5
192
192
  df[:a] % 5
193
193
  df[:a] ** 2
194
+ df[:a].sqrt
195
+ df[:a].cbrt
196
+ df[:a].abs
197
+ ```
198
+
199
+ Rounding
200
+
201
+ ```ruby
202
+ df[:a].round
203
+ df[:a].ceil
204
+ df[:a].floor
205
+ ```
206
+
207
+ Logarithm
208
+
209
+ ```ruby
210
+ df[:a].ln # or log
211
+ df[:a].log(5)
212
+ df[:a].log10
213
+ df[:a].log2
214
+ ```
215
+
216
+ Exponentiation
217
+
218
+ ```ruby
219
+ df[:a].exp
220
+ df[:a].exp2
221
+ ```
222
+
223
+ Trigonometric functions
224
+
225
+ ```ruby
226
+ df[:a].sin
227
+ df[:a].cos
228
+ df[:a].tan
229
+ df[:a].asin
230
+ df[:a].acos
231
+ df[:a].atan
232
+ ```
233
+
234
+ Hyperbolic functions
235
+
236
+ ```ruby
237
+ df[:a].sinh
238
+ df[:a].cosh
239
+ df[:a].tanh
240
+ df[:a].asinh
241
+ df[:a].acosh
242
+ df[:a].atanh
243
+ ```
244
+
245
+ Error function
246
+
247
+ ```ruby
248
+ df[:a].erf
249
+ df[:a].erfc
194
250
  ```
195
251
 
196
252
  Summary statistics
@@ -323,9 +379,11 @@ df.delete(:a)
323
379
  df.except!(:a, :b)
324
380
  ```
325
381
 
326
- Rename a column
382
+ Rename columns
327
383
 
328
384
  ```ruby
385
+ df.rename(a: :new_a, b: :new_b)
386
+ # or
329
387
  df[:new_a] = df.delete(:a)
330
388
  ```
331
389
 
@@ -456,7 +514,7 @@ df[:a].type
456
514
  Change the type of a column
457
515
 
458
516
  ```ruby
459
- df[:a] = df[:a].to(:int32)
517
+ df[:a].to!(:int32)
460
518
  ```
461
519
 
462
520
  ## History
@@ -136,6 +136,17 @@ module Rover
136
136
  alias_method :names, :keys
137
137
  alias_method :vector_names, :keys
138
138
 
139
+ def rename(mapping)
140
+ mapping.each_key do |k|
141
+ check_column(k)
142
+ end
143
+ # use transform_keys! to preserve order
144
+ @vectors.transform_keys! do |k|
145
+ mapping[k] || k
146
+ end
147
+ self
148
+ end
149
+
139
150
  def delete(key)
140
151
  @vectors.delete(key)
141
152
  end
data/lib/rover/vector.rb CHANGED
@@ -21,6 +21,8 @@ module Rover
21
21
  uint: Numo::UInt64
22
22
  }
23
23
 
24
+ NOT_SET = Object.new
25
+
24
26
  def initialize(data, type: nil)
25
27
  @data = cast_data(data, type: type)
26
28
  raise ArgumentError, "Bad size: #{@data.shape}" unless @data.ndim == 1
@@ -87,6 +89,7 @@ module Rover
87
89
  if v.is_a?(Vector)
88
90
  Vector.new(v.to_numo.mask(@data))
89
91
  else
92
+ # TODO return vector unless v is an integer in 0.4.0
90
93
  @data[v]
91
94
  end
92
95
  end
@@ -184,13 +187,9 @@ module Rover
184
187
  Vector.new(@data.to_a.reject(&block))
185
188
  end
186
189
 
190
+ # use Ruby tally for performance
187
191
  def tally
188
- result = Hash.new(0)
189
- @data.each do |v|
190
- result[v] += 1
191
- end
192
- result.default = nil
193
- result
192
+ @data.to_a.tally
194
193
  end
195
194
 
196
195
  def sort
@@ -201,6 +200,67 @@ module Rover
201
200
  Vector.new(@data.abs)
202
201
  end
203
202
 
203
+ def round(ndigits = 0)
204
+ if ndigits == 0
205
+ Vector.new(@data.round)
206
+ else
207
+ # TODO pass type
208
+ Vector.new(@data.to_a.map { |v| v.round(ndigits) })
209
+ end
210
+ end
211
+
212
+ def ceil(ndigits = 0)
213
+ if ndigits == 0
214
+ Vector.new(@data.ceil)
215
+ else
216
+ # TODO pass type
217
+ Vector.new(@data.to_a.map { |v| v.ceil(ndigits) })
218
+ end
219
+ end
220
+
221
+ def floor(ndigits = 0)
222
+ if ndigits == 0
223
+ Vector.new(@data.floor)
224
+ else
225
+ # TODO pass type
226
+ Vector.new(@data.to_a.map { |v| v.floor(ndigits) })
227
+ end
228
+ end
229
+
230
+ [:sqrt, :cbrt, :sin, :cos, :tan, :asin, :acos, :atan, :sinh, :cosh, :tanh, :asinh, :acosh, :atanh, :log2, :log10, :exp, :exp2, :erf, :erfc].each do |m|
231
+ define_method(m) do
232
+ Vector.new(Numo::NMath.send(m, @data))
233
+ end
234
+ end
235
+
236
+ def log(base = NOT_SET)
237
+ if base == NOT_SET
238
+ Vector.new(Numo::NMath.log(@data))
239
+ else
240
+ type = self.type == :float32 ? :float32 : :float64
241
+ Vector.new(@data.to_a.map { |v| Math.log(v, base) }, type: type)
242
+ end
243
+ end
244
+
245
+ def ln
246
+ log
247
+ end
248
+
249
+ def hypot(y)
250
+ y = y.to_numo if y.is_a?(Rover::Vector)
251
+ Vector.new(Numo::NMath.hypot(@data, y))
252
+ end
253
+
254
+ def frexp
255
+ fraction, exponent = Numo::NMath.frexp(@data)
256
+ [Vector.new(fraction), Vector.new(exponent)]
257
+ end
258
+
259
+ def ldexp(exponent)
260
+ exponent = exponent.to_numo if exponent.is_a?(Rover::Vector)
261
+ Vector.new(Numo::NMath.ldexp(@data, exponent))
262
+ end
263
+
204
264
  def each(&block)
205
265
  @data.each(&block)
206
266
  end
@@ -255,10 +315,15 @@ module Rover
255
315
  to_a.any?(&block)
256
316
  end
257
317
 
318
+ def empty?
319
+ size == 0
320
+ end
321
+
258
322
  def zip(other, &block)
259
323
  to_a.zip(other.to_a, &block)
260
324
  end
261
325
 
326
+ # TODO return element instead of vector if no argument in 0.4.0
262
327
  def first(n = 1)
263
328
  if n >= size
264
329
  Vector.new(@data)
@@ -267,6 +332,7 @@ module Rover
267
332
  end
268
333
  end
269
334
 
335
+ # TODO return element instead of vector if no argument in 0.4.0
270
336
  def last(n = 1)
271
337
  if n >= size
272
338
  Vector.new(@data)
@@ -350,6 +416,14 @@ module Rover
350
416
  super
351
417
  end
352
418
 
419
+ def coerce(other)
420
+ if other.is_a?(Numeric)
421
+ [Vector.new([other]), self]
422
+ else
423
+ raise TypeError, "#{self.class} can't be coerced into #{other.class}"
424
+ end
425
+ end
426
+
353
427
  def cast_data(data, type: nil)
354
428
  numo_type = numo_type(type) if type
355
429
 
data/lib/rover/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rover
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rover-df
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-18 00:00:00.000000000 Z
11
+ date: 2022-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray