daru_lite 0.2.4 → 0.3.1

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: a04accc0b21012227f90f9586cf82bf432d0d8b973ed95238307fd6d11d17eba
4
- data.tar.gz: e0fdc901b2d9b8bfb0a5af9f364921fcf4022d083d303621073161572cd189b3
3
+ metadata.gz: 5fd692ae66f7d3b631fc1f2424f823ab3f9484bb8d7803db6ea1405b00bea456
4
+ data.tar.gz: 959220244151eddba5fd98abde252d54be976e80cc7e179d8cb3f61a90e3c38d
5
5
  SHA512:
6
- metadata.gz: a49e8d0219f4005d84ce38729707aa4742dcc8ee31d56ffff6f29899ad01b910f7f38d1574419d882947c791f22eeaeb0afcdf3e804283d21725d36ab7a5f016
7
- data.tar.gz: 363502b7823a4cc4928e567e560d1992a873c02adaf1014de0b90b92e8772b8fce350f5cf23a86643a94c857a33343890cefbd09612dba2affbc909f97b8f253
6
+ metadata.gz: b4f13fe9ed18e21835c405d40d7241c5d4aea0fb391121c85a504243ac3d755a3b1c1b93f9a78befad060b59e070e234965aff233c3d68d2cac99de9f3280151
7
+ data.tar.gz: d084ec8cc01cb06577e686e8abbfe834d9477071342d025a9a8b3033dd43d82d39ec1d1b5d1561fcdf4508f27e3070ea5713604ffe2cb08e419f773792a34d2d
@@ -85,21 +85,30 @@ module DaruLite
85
85
  raise 'Three vectors should be equal size' if
86
86
  rows.size != columns.size || rows.size != values.size
87
87
 
88
+ row_index = rows.uniq.to_a
88
89
  data = Hash.new do |h, col|
89
- h[col] = rows.factors.map { |r| [r, nil] }.to_h
90
+ h[col] = row_index.map { |r| [r, nil] }.to_h
90
91
  end
92
+ validate_no_duplicate_pairs(rows, columns)
91
93
  columns.zip(rows, values).each { |c, r, v| data[c][r] = v }
92
94
 
93
95
  # FIXME: in fact, WITHOUT this line you'll obtain more "right"
94
96
  # data: with vectors having "rows" as an index...
95
97
  data = data.transform_values(&:values)
96
- data[:_id] = rows.factors
98
+ data[:_id] = row_index
97
99
 
98
100
  DataFrame.new(data)
99
101
  end
100
102
 
101
103
  private
102
104
 
105
+ def validate_no_duplicate_pairs(rows, columns)
106
+ seen = Set.new
107
+ columns.to_a.zip(rows.to_a).each do |pair|
108
+ raise IndexError, "Duplicate (column, row) pair: #{pair.inspect}" unless seen.add?(pair)
109
+ end
110
+ end
111
+
103
112
  def guess_order(source)
104
113
  case source.first
105
114
  when Vector # assume that all are Vectors
@@ -1,3 +1,3 @@
1
1
  module DaruLite
2
- VERSION = '0.2.4'.freeze
2
+ VERSION = '0.3.1'.freeze
3
3
  end
@@ -1076,6 +1076,27 @@ describe DaruLite::DataFrame do
1076
1076
 
1077
1077
  expect(df2).to eq(df)
1078
1078
  end
1079
+
1080
+ it 'handles nil values in the rows vector' do
1081
+ v1 = DaruLite::Vector.new [nil, 'a', nil, 'a']
1082
+ v2 = DaruLite::Vector.new %w[x x y y]
1083
+ v3 = DaruLite::Vector.new [1, 2, 3, 4]
1084
+ df = DaruLite::DataFrame.crosstab_by_assignation(v1, v2, v3)
1085
+
1086
+ expect(df[:_id].to_a).to eq([nil, 'a'])
1087
+ expect(df['x'].to_a).to eq([1, 2])
1088
+ expect(df['y'].to_a).to eq([3, 4])
1089
+ end
1090
+
1091
+ it 'raises IndexError when given duplicate (row, column) pairs' do
1092
+ rows = DaruLite::Vector.new(%w[a a b])
1093
+ columns = DaruLite::Vector.new(%w[x x y])
1094
+ values = DaruLite::Vector.new([1, 2, 3])
1095
+
1096
+ expect {
1097
+ described_class.crosstab_by_assignation(rows, columns, values)
1098
+ }.to raise_error(IndexError, /Duplicate/)
1099
+ end
1079
1100
  end
1080
1101
 
1081
1102
  context '#inspect' do
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.4
4
+ version: 0.3.1
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-04-10 00:00:00.000000000 Z
15
+ date: 2026-04-17 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activerecord