daru_lite 0.2.3 → 0.2.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: 027d1747a070b7555d839ffc99bf4ad075c1d2e88551f2c77cb97c4cfc49a5d9
4
- data.tar.gz: 196e960c448e230c18b337017426d6a6a06ac6e2e06e658f2f82cddb46064ec9
3
+ metadata.gz: a04accc0b21012227f90f9586cf82bf432d0d8b973ed95238307fd6d11d17eba
4
+ data.tar.gz: e0fdc901b2d9b8bfb0a5af9f364921fcf4022d083d303621073161572cd189b3
5
5
  SHA512:
6
- metadata.gz: 42131c6e6fce7e99c5791e58c9a2ba94460e67c60f1c37ab9827ff85990f0f10ecb7de1972f47ce91429289de994c7b44283f07d07689e0168ba86834ae78ef9
7
- data.tar.gz: 1f8f4c6c51a19ad5c1f8b8c1612632c8f23e600f27493183c2055522e55149719cd352b797fd6feb6a2adcc9fd29570618f2723ae833b8afc536820fc83f8835
6
+ metadata.gz: a49e8d0219f4005d84ce38729707aa4742dcc8ee31d56ffff6f29899ad01b910f7f38d1574419d882947c791f22eeaeb0afcdf3e804283d21725d36ab7a5f016
7
+ data.tar.gz: 363502b7823a4cc4928e567e560d1992a873c02adaf1014de0b90b92e8772b8fce350f5cf23a86643a94c857a33343890cefbd09612dba2affbc909f97b8f253
data/daru_lite.gemspec CHANGED
@@ -40,7 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency 'rake', '~> 13.0'
41
41
  spec.add_development_dependency 'rspec', '~> 3.11'
42
42
  spec.add_development_dependency 'rspec-its', '~> 2.0.0'
43
- spec.add_development_dependency 'rubocop', '~> 1.60'
43
+ spec.add_development_dependency 'rubocop', '~> 1.86'
44
44
  spec.add_development_dependency 'rubocop-performance', '~> 1.25.0'
45
45
  spec.add_development_dependency 'rubocop-rspec', '~> 3.6'
46
46
  spec.add_development_dependency 'ruby-prof', '~> 1.7.0'
@@ -858,7 +858,7 @@ module DaruLite
858
858
  end
859
859
 
860
860
  def user_defined_coding(df)
861
- DaruLite::DataFrame.rows (Array.new(size) { |pos| df.row[at(pos)].to_a }),
861
+ DaruLite::DataFrame.rows Array.new(size) { |pos| df.row[at(pos)].to_a },
862
862
  index: @index,
863
863
  order: df.vectors.to_a
864
864
  end
@@ -118,9 +118,9 @@ module DaruLite
118
118
  if lkey == rkey
119
119
  self.merge_key = lkey
120
120
  add_indicator(merge_matching_rows, :both)
121
- elsif !rkey || lt(lkey, rkey)
121
+ elsif !rkey || lt?(lkey, rkey)
122
122
  add_indicator(left_row_missing_right, :left_only)
123
- else # !lkey || lt(rkey, lkey)
123
+ else # !lkey || lt?(rkey, lkey)
124
124
  add_indicator(right_row_missing_left, :right_only)
125
125
  end
126
126
  end
@@ -181,7 +181,7 @@ module DaruLite
181
181
  expand_row(val, right_keys) if keep_right
182
182
  end
183
183
 
184
- def lt(k1, k2)
184
+ def lt?(k1, k2)
185
185
  (k1 <=> k2) == -1
186
186
  end
187
187
 
@@ -730,10 +730,10 @@ module DaruLite
730
730
 
731
731
  case source.first
732
732
  when Array
733
- vectors ||= (0..source.size - 1).to_a
733
+ vectors ||= (0..(source.size - 1)).to_a
734
734
  initialize_from_array_of_arrays source, vectors, index, opts
735
735
  when Vector
736
- vectors ||= (0..source.size - 1).to_a
736
+ vectors ||= (0..(source.size - 1)).to_a
737
737
  initialize_from_array_of_vectors source, vectors, index, opts
738
738
  when Hash
739
739
  initialize_from_array_of_hashes source, vectors, index, opts
@@ -809,10 +809,7 @@ module DaruLite
809
809
  elsif vectors_have_same_index
810
810
  source.values[0].index.dup
811
811
  else
812
- all_indexes = source
813
- .values.map { |v| v.index.to_a }
814
- .flatten.uniq.sort # sort only if missing indexes detected
815
-
812
+ all_indexes = source.values.map { |v| v.index.to_a }.flatten.uniq.sort # sort only if missing indexes detected
816
813
  DaruLite::Index.new all_indexes
817
814
  end
818
815
  end
@@ -96,7 +96,7 @@ module DaruLite
96
96
  def infer_offset(data)
97
97
  diffs = data.each_cons(2).map { |d1, d2| d2 - d1 }
98
98
 
99
- return nil unless diffs.uniq.count == 1
99
+ return nil unless diffs.uniq.one?
100
100
 
101
101
  return TIME_INTERVALS[diffs.first].new if TIME_INTERVALS.include?(diffs.first)
102
102
 
@@ -216,6 +216,7 @@ module DaruLite
216
216
 
217
217
  class DateTimeIndex < Index
218
218
  include Enumerable
219
+
219
220
  Helper = DateTimeIndexHelper
220
221
 
221
222
  def self.try_create(source)
@@ -249,7 +249,7 @@ module DaruLite
249
249
  end
250
250
 
251
251
  def freq_string
252
- "#{@n == 1 ? '' : @n.to_s}W-#{DaruLite::DAYS_OF_WEEK.key(@weekday)}"
252
+ "#{@n.to_s unless @n == 1}W-#{DaruLite::DAYS_OF_WEEK.key(@weekday)}"
253
253
  end
254
254
  end
255
255
 
@@ -1,6 +1,7 @@
1
1
  module DaruLite
2
2
  class Index # rubocop:disable Metrics/ClassLength
3
3
  include Enumerable
4
+
4
5
  # It so happens that over riding the .new method in a super class also
5
6
  # tampers with the default .new method for class that inherit from the
6
7
  # super class (Index in this case). Thus we first alias the original
@@ -170,7 +171,7 @@ module DaruLite
170
171
  if start_idx.nil?
171
172
  nil
172
173
  elsif en_idx.nil?
173
- Array(start_idx..size - 1)
174
+ Array(start_idx..(size - 1))
174
175
  else
175
176
  Array(start_idx..en_idx)
176
177
  end
@@ -141,7 +141,6 @@ module DaruLite
141
141
  query = "INSERT INTO #{table} (#{ds.vectors.to_a.join(',')}) VALUES (#{(['?'] * ds.vectors.size).join(',')})"
142
142
  sth = dbh.prepare(query)
143
143
  ds.each_row { |c| sth.execute(*c.to_a) }
144
- true
145
144
  end
146
145
 
147
146
  # Load dataframe from AR::Relation
@@ -161,12 +160,13 @@ module DaruLite
161
160
 
162
161
  def from_plaintext(filename, fields)
163
162
  ds = DaruLite::DataFrame.new({}, order: fields)
164
- fp = File.open(filename, 'r')
165
- fp.each_line do |line|
166
- row = DaruLite::IOHelpers.process_row(line.strip.split(/\s+/), [''])
167
- next if row == ["\x1A"]
163
+ File.open(filename, 'r') do |fp|
164
+ fp.each_line do |line|
165
+ row = DaruLite::IOHelpers.process_row(line.strip.split(/\s+/), [''])
166
+ next if row == ["\x1A"]
168
167
 
169
- ds.add_row(row)
168
+ ds.add_row(row)
169
+ end
170
170
  end
171
171
  ds.update
172
172
  fields.each { |f| ds[f].rename f }
@@ -175,9 +175,7 @@ module DaruLite
175
175
 
176
176
  # Loading and writing Marshalled DataFrame/Vector
177
177
  def save(klass, filename)
178
- fp = File.open(filename, 'w')
179
- Marshal.dump(klass, fp)
180
- fp.close
178
+ File.open(filename, 'w') { Marshal.dump(klass, it) }
181
179
  end
182
180
 
183
181
  def load(filename)
@@ -248,7 +246,7 @@ module DaruLite
248
246
  data, size = html_scrape_tag(table, 'td')
249
247
  data.keep_if { |x| x.count == size }
250
248
  order, indice = html_parse_hash(headers, size, headers_size) if headers_size >= size
251
- return unless (indice.nil? || indice.count == data.count) && !order.nil? && order.count.positive?
249
+ return unless (indice.nil? || indice.count == data.count) && !order.nil? && order.any?
252
250
 
253
251
  { data: data.compact, index: indice, order: order }
254
252
  end
@@ -267,7 +265,7 @@ module DaruLite
267
265
  order = headers[headers_index]
268
266
  order_index = order.count - size
269
267
  order = order[order_index..]
270
- indice = headers[headers_index + 1..].flatten
268
+ indice = headers[(headers_index + 1)..].flatten
271
269
  indice = nil if indice.to_a.empty?
272
270
  [order, indice]
273
271
  end
@@ -166,8 +166,7 @@ module DaruLite
166
166
  private
167
167
 
168
168
  def apply_method_to_numerics(method, *)
169
- numerics = @vectors.to_a.map { |n| [n, @data[@vectors[n]]] }
170
- .select { |_n, v| v.numeric? }
169
+ numerics = @vectors.to_a.map { |n| [n, @data[@vectors[n]]] }.select { |_n, v| v.numeric? }
171
170
  computed = numerics.map { |_n, v| v.send(method, *) }
172
171
 
173
172
  DaruLite::DataFrame.new(computed, index: @index, order: numerics.map(&:first), clone: false)
@@ -189,9 +188,8 @@ module DaruLite
189
188
 
190
189
  def compute_stats(method)
191
190
  DaruLite::Vector.new(
192
- numeric_vectors.each_with_object({}) do |vec, hash|
193
- hash[vec] = self[vec].send(method)
194
- end, name: method
191
+ numeric_vectors.to_h { [it, self[it].send(method)] },
192
+ name: method
195
193
  )
196
194
  end
197
195
  alias sds std
@@ -180,7 +180,7 @@ module DaruLite
180
180
  # dv.max(2) { |a,b| a.size <=> b.size }
181
181
  # #=> ["Jon Starkgaryen","Daenerys"]
182
182
  def max(size = nil, &)
183
- range = size.nil? ? 0 : (0..size - 1)
183
+ range = size.nil? ? 0 : (0..(size - 1))
184
184
  reject_values(*DaruLite::MISSING_VALUES).to_a.sort(&).reverse[range]
185
185
  end
186
186
 
@@ -203,7 +203,7 @@ module DaruLite
203
203
  def max_by(size = nil, &block)
204
204
  raise ArgumentError, 'Expected compulsory object block in max_by method' unless block
205
205
 
206
- reject_values(*DaruLite::MISSING_VALUES).to_a.sort_by(&block).reverse[size.nil? ? 0 : (0..size - 1)]
206
+ reject_values(*DaruLite::MISSING_VALUES).to_a.sort_by(&block).reverse[size.nil? ? 0 : (0..(size - 1))]
207
207
  end
208
208
 
209
209
  # Returns the minimum value(s) present in the vector, with an optional comparator block.
@@ -226,7 +226,7 @@ module DaruLite
226
226
  # dv.min(2) { |a,b| a.size <=> b.size }
227
227
  # #=> ["Tyrion","Daenerys"]
228
228
  def min(size = nil, &)
229
- range = size.nil? ? 0 : (0..size - 1)
229
+ range = size.nil? ? 0 : (0..(size - 1))
230
230
  reject_values(*DaruLite::MISSING_VALUES).to_a.sort(&)[range]
231
231
  end
232
232
 
@@ -252,7 +252,7 @@ module DaruLite
252
252
  def min_by(size = nil, &block)
253
253
  raise ArgumentError, 'Expected compulsory object block in min_by method' unless block
254
254
 
255
- reject_values(*DaruLite::MISSING_VALUES).to_a.sort_by(&block)[size.nil? ? 0 : (0..size - 1)]
255
+ reject_values(*DaruLite::MISSING_VALUES).to_a.sort_by(&block)[size.nil? ? 0 : (0..(size - 1))]
256
256
  end
257
257
  end
258
258
 
@@ -279,7 +279,7 @@ module DaruLite
279
279
  def index_of_max(size = nil, &)
280
280
  vals = max(size, &)
281
281
  dv = reject_values(*DaruLite::MISSING_VALUES)
282
- vals.is_a?(Array) ? (vals.map { |x| dv.index_of(x) }) : dv.index_of(vals)
282
+ vals.is_a?(Array) ? vals.map { |x| dv.index_of(x) } : dv.index_of(vals)
283
283
  end
284
284
 
285
285
  # Returns the index of the maximum value(s) present in the vector, with a compulsory
@@ -302,7 +302,7 @@ module DaruLite
302
302
  def index_of_max_by(size = nil, &)
303
303
  vals = max_by(size, &)
304
304
  dv = reject_values(*DaruLite::MISSING_VALUES)
305
- vals.is_a?(Array) ? (vals.map { |x| dv.index_of(x) }) : dv.index_of(vals)
305
+ vals.is_a?(Array) ? vals.map { |x| dv.index_of(x) } : dv.index_of(vals)
306
306
  end
307
307
 
308
308
  # Returns the index of the minimum value(s) present in the vector, with an optional
@@ -328,7 +328,7 @@ module DaruLite
328
328
  def index_of_min(size = nil, &)
329
329
  vals = min(size, &)
330
330
  dv = reject_values(*DaruLite::MISSING_VALUES)
331
- vals.is_a?(Array) ? (vals.map { |x| dv.index_of(x) }) : dv.index_of(vals)
331
+ vals.is_a?(Array) ? vals.map { |x| dv.index_of(x) } : dv.index_of(vals)
332
332
  end
333
333
 
334
334
  # Returns the index of the minimum value(s) present in the vector, with a compulsory
@@ -351,7 +351,7 @@ module DaruLite
351
351
  def index_of_min_by(size = nil, &)
352
352
  vals = min_by(size, &)
353
353
  dv = reject_values(*DaruLite::MISSING_VALUES)
354
- vals.is_a?(Array) ? (vals.map { |x| dv.index_of(x) }) : dv.index_of(vals)
354
+ vals.is_a?(Array) ? vals.map { |x| dv.index_of(x) } : dv.index_of(vals)
355
355
  end
356
356
 
357
357
  # Return the maximum element present in the Vector, as a Vector.
@@ -409,11 +409,7 @@ module DaruLite
409
409
 
410
410
  # Count number of occurrences of each value in the Vector
411
411
  def value_counts
412
- values = @data.each_with_object(Hash.new(0)) do |d, memo|
413
- memo[d] += 1
414
- end
415
-
416
- DaruLite::Vector.new(values)
412
+ DaruLite::Vector.new(@data.tally)
417
413
  end
418
414
 
419
415
  def proportion(value = 1)
@@ -0,0 +1,11 @@
1
+ class Array
2
+ def daru_lite_vector(name = nil, index = nil, dtype = :array)
3
+ DaruLite::Vector.new self, name: name, index: index, dtype: dtype
4
+ end
5
+
6
+ alias dv daru_lite_vector
7
+
8
+ def to_index
9
+ DaruLite::Index.new self
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ class Hash
2
+ def daru_lite_vector(index = nil, dtype = :array)
3
+ DaruLite::Vector.new values[0], name: keys[0], index: index, dtype: dtype
4
+ end
5
+
6
+ alias dv daru_lite_vector
7
+ end
@@ -0,0 +1,7 @@
1
+ class MDArray
2
+ def daru_lite_vector(name = nil, index = nil, *)
3
+ DaruLite::Vector.new self, name: name, index: index, dtype: :mdarray
4
+ end
5
+
6
+ alias dv daru_lite_vector
7
+ end
@@ -0,0 +1,7 @@
1
+ class Matrix
2
+ def elementwise_division(other)
3
+ map.with_index do |e, index|
4
+ e / other.to_a.flatten[index]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Object
2
+ if RUBY_VERSION < '2.2'
3
+ def itself
4
+ self
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ class Range
2
+ def daru_lite_vector(name = nil, index = nil, dtype = :array)
3
+ DaruLite::Vector.new self, name: name, index: index, dtype: dtype
4
+ end
5
+
6
+ alias dv daru_lite_vector
7
+
8
+ def to_index
9
+ DaruLite::Index.new to_a
10
+ end
11
+ end
@@ -51,7 +51,7 @@ module DaruLite
51
51
  "\n Distribution\n"
52
52
 
53
53
  data = frequencies.sort.each_with_index.map do |v, k|
54
- [k, v, format('%0.2f%%', ((nval.zero? ? 1 : v.quo(nval)) * 100))]
54
+ [k, v, format('%0.2f%%', (nval.zero? ? 1 : v.quo(nval)) * 100)]
55
55
  end
56
56
 
57
57
  summary + Formatters::Table.format(data)
@@ -10,7 +10,7 @@ module DaruLite
10
10
  # Copies the structure of the vector (i.e the index, size, etc.) and fills all
11
11
  # all values with nils.
12
12
  def clone_structure
13
- DaruLite::Vector.new(([nil] * size), name: @name, index: @index.dup)
13
+ DaruLite::Vector.new([nil] * size, name: @name, index: @index.dup)
14
14
  end
15
15
  end
16
16
  end
@@ -56,8 +56,9 @@ module DaruLite
56
56
  end
57
57
 
58
58
  def tail(q = 10)
59
- start = [size - q, 0].max
60
- self[start..(size - 1)]
59
+ from = [size - q, 0].max
60
+ to = size - 1
61
+ self[from..to]
61
62
  end
62
63
 
63
64
  def last(q = 1)
@@ -164,6 +164,7 @@ module DaruLite
164
164
  if opts[:type] == :category
165
165
  # Initialize category type vector
166
166
  extend DaruLite::Category
167
+
167
168
  initialize_category source, opts
168
169
  else
169
170
  # Initialize non-category type vector
@@ -256,7 +257,7 @@ module DaruLite
256
257
  other = other.zip(Array.new(other.size, 0)).to_h
257
258
  DaruLite::Core::Query::BoolArray.new(
258
259
  @data.each_with_object([]) do |d, memo|
259
- memo << (other.key?(d))
260
+ memo << other.key?(d)
260
261
  end
261
262
  )
262
263
  end
@@ -1,3 +1,3 @@
1
1
  module DaruLite
2
- VERSION = '0.2.3'.freeze
2
+ VERSION = '0.2.4'.freeze
3
3
  end
data/lib/daru_lite.rb CHANGED
@@ -86,11 +86,17 @@ require 'daru_lite/helpers/array'
86
86
  require 'daru_lite/configuration'
87
87
  require 'daru_lite/vector'
88
88
  require 'daru_lite/dataframe'
89
- require 'daru_lite/monkeys'
90
89
  require 'daru_lite/formatters/table'
91
90
  require 'daru_lite/iruby/helpers'
92
91
  require 'daru_lite/exceptions'
93
92
 
93
+ require 'daru_lite/monkeys/array'
94
+ require 'daru_lite/monkeys/hash'
95
+ require 'daru_lite/monkeys/m_d_array'
96
+ require 'daru_lite/monkeys/matrix'
97
+ require 'daru_lite/monkeys/object'
98
+ require 'daru_lite/monkeys/range'
99
+
94
100
  require 'daru_lite/core/group_by'
95
101
  require 'daru_lite/core/query'
96
102
  require 'daru_lite/core/merge'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daru_lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Naude-Filonnière
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2026-03-27 00:00:00.000000000 Z
15
+ date: 2026-04-10 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activerecord
@@ -188,14 +188,14 @@ dependencies:
188
188
  requirements:
189
189
  - - "~>"
190
190
  - !ruby/object:Gem::Version
191
- version: '1.60'
191
+ version: '1.86'
192
192
  type: :development
193
193
  prerelease: false
194
194
  version_requirements: !ruby/object:Gem::Requirement
195
195
  requirements:
196
196
  - - "~>"
197
197
  - !ruby/object:Gem::Version
198
- version: '1.60'
198
+ version: '1.86'
199
199
  - !ruby/object:Gem::Dependency
200
200
  name: rubocop-performance
201
201
  requirement: !ruby/object:Gem::Requirement
@@ -422,7 +422,12 @@ files:
422
422
  - lib/daru_lite/maths/arithmetic/vector.rb
423
423
  - lib/daru_lite/maths/statistics/dataframe.rb
424
424
  - lib/daru_lite/maths/statistics/vector.rb
425
- - lib/daru_lite/monkeys.rb
425
+ - lib/daru_lite/monkeys/array.rb
426
+ - lib/daru_lite/monkeys/hash.rb
427
+ - lib/daru_lite/monkeys/m_d_array.rb
428
+ - lib/daru_lite/monkeys/matrix.rb
429
+ - lib/daru_lite/monkeys/object.rb
430
+ - lib/daru_lite/monkeys/range.rb
426
431
  - lib/daru_lite/vector.rb
427
432
  - lib/daru_lite/vector/aggregatable.rb
428
433
  - lib/daru_lite/vector/calculatable.rb
@@ -1,56 +0,0 @@
1
- class Array
2
- def daru_lite_vector(name = nil, index = nil, dtype = :array)
3
- DaruLite::Vector.new self, name: name, index: index, dtype: dtype
4
- end
5
-
6
- alias dv daru_lite_vector
7
-
8
- def to_index
9
- DaruLite::Index.new self
10
- end
11
- end
12
-
13
- class Range
14
- def daru_lite_vector(name = nil, index = nil, dtype = :array)
15
- DaruLite::Vector.new self, name: name, index: index, dtype: dtype
16
- end
17
-
18
- alias dv daru_lite_vector
19
-
20
- def to_index
21
- DaruLite::Index.new to_a
22
- end
23
- end
24
-
25
- class Hash
26
- def daru_lite_vector(index = nil, dtype = :array)
27
- DaruLite::Vector.new values[0], name: keys[0], index: index, dtype: dtype
28
- end
29
-
30
- alias dv daru_lite_vector
31
- end
32
-
33
- class MDArray
34
- def daru_lite_vector(name = nil, index = nil, *)
35
- DaruLite::Vector.new self, name: name, index: index, dtype: :mdarray
36
- end
37
-
38
- alias dv daru_lite_vector
39
- end
40
-
41
- class Matrix
42
- def elementwise_division(other)
43
- map.with_index do |e, index|
44
- e / other.to_a.flatten[index]
45
- end
46
- end
47
- end
48
-
49
- class Object
50
- if RUBY_VERSION < '2.2'
51
- def itself
52
- self
53
- end
54
- end
55
- end
56
- # :nocov: