rover-df 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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