rover-df 0.3.2 → 0.3.3

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: 44146e3081c968813848026d2a7f785527a0bb55af0a1978a8087d0dcc7a568a
4
- data.tar.gz: db64041059937e131d27799739506ad27a78d19be3bdd90d299bcee855b54755
3
+ metadata.gz: 7a1b47800b1d7e9b84e7a1976f2cfbc551e9dee6a9a0ec39b3759b6564e4e278
4
+ data.tar.gz: a41f8ed9bdeabc01a0fc83bdb98487a375bfa6f6d1d2fd4041db7cc38f803482
5
5
  SHA512:
6
- metadata.gz: f66190d43258016bc54da2ee42078087784e2c245095fceced4f617b4343130c8e324fd07a4fb0a08b6e23f512268d517e330087959dd7a78187228383189ea8
7
- data.tar.gz: a1d3a80ff866d72dc32a0067240c32f7a24c602a736d932dba394af8b760566591ff0d2942a61243230016182a3a5fad2e635fa1095f809caf477146d0810868
6
+ metadata.gz: 7b2e10547e204ff592757373bc93c7d8dfd004802a87e10ca886c47771c29aa717fe19ef11e20c9b830765c64c6ef65db5d0bfead0d1b064c680938a1cca8184
7
+ data.tar.gz: ce25fac82709a912e78c871f356e681ad8f85a599db1eeea58d5654ddf3928554d70a7434e92beb4352c81b69307dce77062baedd8669f2584bda54f1e40ee42
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 0.3.3 (2022-07-11)
2
+
3
+ - Added `ln`, `log`, `log10`, and `log2` methods to vectors
4
+ - Added `exp` and `exp2` methods to vectors
5
+ - Added `sin`, `cos`, `tan`, `asin`, `acos`, and `atan` methods to vectors
6
+ - Added `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, and `atanh` methods to vectors
7
+ - Added `round`, `ceil`, and `floor` methods to vectors
8
+ - Added `empty?` method to vectors
9
+ - Added `rename` method to data frames
10
+
1
11
  ## 0.3.2 (2022-07-10)
2
12
 
3
13
  - Added `sqrt` method to vectors
data/README.md CHANGED
@@ -191,6 +191,53 @@ 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].abs
196
+ ```
197
+
198
+ Rounding
199
+
200
+ ```ruby
201
+ df[:a].round
202
+ df[:a].ceil
203
+ df[:a].floor
204
+ ```
205
+
206
+ Logarithm
207
+
208
+ ```ruby
209
+ df[:a].ln # or log
210
+ df[:a].log10
211
+ df[:a].log2
212
+ ```
213
+
214
+ Exponentiation
215
+
216
+ ```ruby
217
+ df[:a].exp
218
+ df[:a].exp2
219
+ ```
220
+
221
+ Trigonometric functions
222
+
223
+ ```ruby
224
+ df[:a].sin
225
+ df[:a].cos
226
+ df[:a].tan
227
+ df[:a].asin
228
+ df[:a].acos
229
+ df[:a].atan
230
+ ```
231
+
232
+ Hyperbolic functions
233
+
234
+ ```ruby
235
+ df[:a].sinh
236
+ df[:a].cosh
237
+ df[:a].tanh
238
+ df[:a].asinh
239
+ df[:a].acosh
240
+ df[:a].atanh
194
241
  ```
195
242
 
196
243
  Summary statistics
@@ -323,9 +370,11 @@ df.delete(:a)
323
370
  df.except!(:a, :b)
324
371
  ```
325
372
 
326
- Rename a column
373
+ Rename columns
327
374
 
328
375
  ```ruby
376
+ df.rename(a: :new_a, b: :new_b)
377
+ # or
329
378
  df[:new_a] = df.delete(:a)
330
379
  ```
331
380
 
@@ -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
@@ -197,16 +197,43 @@ module Rover
197
197
  Vector.new(@data.abs)
198
198
  end
199
199
 
200
- def sqrt
201
- data =
202
- if @data.is_a?(Numo::SFloat)
203
- Numo::SFloat::Math.sqrt(@data)
204
- else
205
- Numo::DFloat::Math.sqrt(@data)
206
- end
207
- Vector.new(data)
200
+ def round(ndigits = 0)
201
+ if ndigits == 0
202
+ Vector.new(@data.round)
203
+ else
204
+ map { |v| v.round(ndigits) }
205
+ end
206
+ end
207
+
208
+ def ceil(ndigits = 0)
209
+ if ndigits == 0
210
+ Vector.new(@data.ceil)
211
+ else
212
+ map { |v| v.ceil(ndigits) }
213
+ end
208
214
  end
209
215
 
216
+ def floor(ndigits = 0)
217
+ if ndigits == 0
218
+ Vector.new(@data.floor)
219
+ else
220
+ map { |v| v.floor(ndigits) }
221
+ end
222
+ end
223
+
224
+ [:sqrt, :sin, :cos, :tan, :asin, :acos, :atan, :sinh, :cosh, :tanh, :asinh, :acosh, :atanh, :log, :log2, :log10, :exp, :exp2].each do |m|
225
+ 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)
233
+ end
234
+ end
235
+ alias_method :ln, :log
236
+
210
237
  def each(&block)
211
238
  @data.each(&block)
212
239
  end
@@ -261,10 +288,15 @@ module Rover
261
288
  to_a.any?(&block)
262
289
  end
263
290
 
291
+ def empty?
292
+ size == 0
293
+ end
294
+
264
295
  def zip(other, &block)
265
296
  to_a.zip(other.to_a, &block)
266
297
  end
267
298
 
299
+ # TODO return element instead of vector if no argument in 0.4.0
268
300
  def first(n = 1)
269
301
  if n >= size
270
302
  Vector.new(@data)
@@ -273,6 +305,7 @@ module Rover
273
305
  end
274
306
  end
275
307
 
308
+ # TODO return element instead of vector if no argument in 0.4.0
276
309
  def last(n = 1)
277
310
  if n >= size
278
311
  Vector.new(@data)
data/lib/rover/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rover
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
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.2
4
+ version: 0.3.3
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-10 00:00:00.000000000 Z
11
+ date: 2022-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray