rover-df 0.3.3 → 0.4.0

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: 7a1b47800b1d7e9b84e7a1976f2cfbc551e9dee6a9a0ec39b3759b6564e4e278
4
- data.tar.gz: a41f8ed9bdeabc01a0fc83bdb98487a375bfa6f6d1d2fd4041db7cc38f803482
3
+ metadata.gz: 4b4d4b3b0ef484ca6721db9cb238f1ae634561f2f2479033855cad8f336f3730
4
+ data.tar.gz: 4db49b9c7983a4a35d6b87aeded4cbf0d874e98aa0cccc241df5b6970c002c07
5
5
  SHA512:
6
- metadata.gz: 7b2e10547e204ff592757373bc93c7d8dfd004802a87e10ca886c47771c29aa717fe19ef11e20c9b830765c64c6ef65db5d0bfead0d1b064c680938a1cca8184
7
- data.tar.gz: ce25fac82709a912e78c871f356e681ad8f85a599db1eeea58d5654ddf3928554d70a7434e92beb4352c81b69307dce77062baedd8669f2584bda54f1e40ee42
6
+ metadata.gz: fdb1d5f164102f8e9aa6d36c6b903852fb8d720929e7e70f4ae5228b229ccc3c4ab84873d5c6d3f7dca5052099371219479c7d5b1e766aeff156a525b03d31e0
7
+ data.tar.gz: 96923c045bb7767d762e0f8a12415306ec6f5cd72d3c3d8ffb649d0926df8fd32c6f6cf3df279b0e49ab8dc96cd21906e1a50f6fa14a743d8e1bb24cb98a940d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## 0.4.0 (2024-06-12)
2
+
3
+ - Added `include?` method to vectors
4
+ - Dropped support for Ruby < 3.1
5
+
6
+ ## 0.3.4 (2022-07-12)
7
+
8
+ - Added `cbrt`, `erf`, `erfc`, and `hypot` methods to vectors
9
+ - Added `frexp` and `ldexp` methods to vectors
10
+ - Added `base` argument to `log` method
11
+
1
12
  ## 0.3.3 (2022-07-11)
2
13
 
3
14
  - Added `ln`, `log`, `log10`, and `log2` methods to vectors
data/README.md CHANGED
@@ -6,7 +6,7 @@ Simple, powerful data frames for Ruby
6
6
 
7
7
  :evergreen_tree: Uses [Vega](https://github.com/ankane/vega) for visualization
8
8
 
9
- [![Build Status](https://github.com/ankane/rover/workflows/build/badge.svg?branch=master)](https://github.com/ankane/rover/actions)
9
+ [![Build Status](https://github.com/ankane/rover/actions/workflows/build.yml/badge.svg)](https://github.com/ankane/rover/actions)
10
10
 
11
11
  ## Installation
12
12
 
@@ -192,6 +192,7 @@ df[:a] / 5
192
192
  df[:a] % 5
193
193
  df[:a] ** 2
194
194
  df[:a].sqrt
195
+ df[:a].cbrt
195
196
  df[:a].abs
196
197
  ```
197
198
 
@@ -207,6 +208,7 @@ Logarithm
207
208
 
208
209
  ```ruby
209
210
  df[:a].ln # or log
211
+ df[:a].log(5)
210
212
  df[:a].log10
211
213
  df[:a].log2
212
214
  ```
@@ -240,6 +242,13 @@ df[:a].acosh
240
242
  df[:a].atanh
241
243
  ```
242
244
 
245
+ Error function
246
+
247
+ ```ruby
248
+ df[:a].erf
249
+ df[:a].erfc
250
+ ```
251
+
243
252
  Summary statistics
244
253
 
245
254
  ```ruby
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
@@ -201,7 +204,8 @@ module Rover
201
204
  if ndigits == 0
202
205
  Vector.new(@data.round)
203
206
  else
204
- map { |v| v.round(ndigits) }
207
+ # TODO pass type
208
+ Vector.new(@data.to_a.map { |v| v.round(ndigits) })
205
209
  end
206
210
  end
207
211
 
@@ -209,7 +213,8 @@ module Rover
209
213
  if ndigits == 0
210
214
  Vector.new(@data.ceil)
211
215
  else
212
- map { |v| v.ceil(ndigits) }
216
+ # TODO pass type
217
+ Vector.new(@data.to_a.map { |v| v.ceil(ndigits) })
213
218
  end
214
219
  end
215
220
 
@@ -217,22 +222,44 @@ module Rover
217
222
  if ndigits == 0
218
223
  Vector.new(@data.floor)
219
224
  else
220
- map { |v| v.floor(ndigits) }
225
+ # TODO pass type
226
+ Vector.new(@data.to_a.map { |v| v.floor(ndigits) })
221
227
  end
222
228
  end
223
229
 
224
- [:sqrt, :sin, :cos, :tan, :asin, :acos, :atan, :sinh, :cosh, :tanh, :asinh, :acosh, :atanh, :log, :log2, :log10, :exp, :exp2].each do |m|
230
+ [:sqrt, :cbrt, :sin, :cos, :tan, :asin, :acos, :atan, :sinh, :cosh, :tanh, :asinh, :acosh, :atanh, :log2, :log10, :exp, :exp2, :erf, :erfc].each do |m|
225
231
  define_method(m) do
226
- data =
227
- if @data.is_a?(Numo::SFloat)
228
- Numo::SFloat::Math.send(m, @data)
229
- else
230
- Numo::DFloat::Math.send(m, @data)
231
- end
232
- Vector.new(data)
232
+ Vector.new(Numo::NMath.send(m, @data))
233
233
  end
234
234
  end
235
- alias_method :ln, :log
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
236
263
 
237
264
  def each(&block)
238
265
  @data.each(&block)
@@ -292,6 +319,10 @@ module Rover
292
319
  size == 0
293
320
  end
294
321
 
322
+ def include?(value)
323
+ to_a.include?(value)
324
+ end
325
+
295
326
  def zip(other, &block)
296
327
  to_a.zip(other.to_a, &block)
297
328
  end
data/lib/rover/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rover
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/rover-df.rb CHANGED
@@ -1 +1 @@
1
- require "rover"
1
+ require_relative "rover"
data/lib/rover.rb CHANGED
@@ -2,10 +2,10 @@
2
2
  require "numo/narray"
3
3
 
4
4
  # modules
5
- require "rover/data_frame"
6
- require "rover/group"
7
- require "rover/vector"
8
- require "rover/version"
5
+ require_relative "rover/data_frame"
6
+ require_relative "rover/group"
7
+ require_relative "rover/vector"
8
+ require_relative "rover/version"
9
9
 
10
10
  module Rover
11
11
  class << self
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.3
4
+ version: 0.4.0
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-07-11 00:00:00.000000000 Z
11
+ date: 2024-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray
@@ -51,14 +51,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '2.7'
54
+ version: '3.1'
55
55
  required_rubygems_version: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  requirements: []
61
- rubygems_version: 3.3.7
61
+ rubygems_version: 3.5.11
62
62
  signing_key:
63
63
  specification_version: 4
64
64
  summary: Simple, powerful data frames for Ruby