named_vector 1.0.1 → 1.0.2

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTcxMWZkZWY1MDA4MzhlZDgzNzIwNGRlMWRhNzQ3NDIxZTMzZWYxNA==
4
+ NTIyYTE5Y2VlODc2OTY2Y2I4Yjc3YjhmY2FjNzA5MjhjMGI4OWJkMw==
5
5
  data.tar.gz: !binary |-
6
- MjYxYjUzOWNjOWM0MWY1NWRkYzQzODVlNTFlZjUxYjRkOTJlN2E5Ng==
6
+ MmMxMGI2ZDg0MmYyMWU3NzJhM2FmMjNkODI2NTliY2Y2NjI3MTM2Yw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZjdmZTgwYzkyYzVhNjA1ZjdmYzJkNTMzNmU3N2ZhZWJjYjE5NzYxMjA1ZmY0
10
- MWM5YThiMzkyZWFjY2MyOTJiMTRiMThkZWQ3MzQxMTAwZGJmMWQxMDg5ODVj
11
- YjJjNDYwOGI0ZGM2MzFjMTU2ODk1ZDU4YzM0OGY1NmUwMjk4ZTA=
9
+ YmY3NDRhYjY5MWZjOWNmYzMyNTkwZjIyMjA0M2FiNDI4NzJjYWUwNjM0YTQ1
10
+ ZTZkODQ4YjJlY2VmMmIwMDIxNTYxZmZiN2U2ZGU5MTYxN2JiYzlmMjQwZDFm
11
+ MjM1MDNkN2EzYWM1NDk2ZTA2ZGZjYjQ2MTZlNDE2ODBkZTczNjk=
12
12
  data.tar.gz: !binary |-
13
- ZGE3ZGZmMDU3MzYxNGE1MWZjYTA5OGE3YzE4ZDdjODA2NDQzMDE2NGMzYjNi
14
- YTY4M2IyYTkwZTdlM2YwNDUwNzUxODAyN2E3NzJlZGJkZjRiNzgxNGYwMTlk
15
- MWRiZjYxMTA5MzIzNDdmOGVmOTViN2E5YmYzZjJlYTllY2M2ODk=
13
+ YmUzMDczMjZjOTNlNzU2ZmJlNDRjOTA1MzRkNDM5NzA1MWVlZDQzYjQzYjBj
14
+ MGZiZmY1NDkxNWRjMzJlOTgyZGI5N2Q0NTlmZDRhNGI1MDdmOGE2MDMyOWRk
15
+ MDM1Mzc2OTA3MzRhMjFiYzI3MmJlZDY3YzE0ZTJhYmYxZTllZTY=
data/lib/named_vector.rb CHANGED
@@ -141,6 +141,27 @@ class NamedVector
141
141
  norm
142
142
  end
143
143
 
144
+ def eql?(other)
145
+ false unless other.keys == @keys
146
+ all_keys = other.keys.merge(@keys)
147
+ all_keys.each do |key|
148
+ if other[key] != self[key] then return false end
149
+ end
150
+ true
151
+ end
152
+
153
+ def to_s
154
+ "<#NamedVector @keys=\"#{@keys.inspect}\", @vector=\"#{@vector.inspect}\">"
155
+ end
156
+
157
+ def to_a
158
+ @vector.to_a
159
+ end
160
+
161
+ alias :to_ary :to_a
162
+
163
+ alias :== :eql?
164
+
144
165
  # the Euclidean norm of a vector
145
166
  def norm
146
167
  Math.sqrt(squared_norm)
@@ -150,21 +171,29 @@ class NamedVector
150
171
  def normalize
151
172
  current_norm = norm
152
173
  if current_norm > 0 then self*(1.0/current_norm) end
174
+ self
153
175
  end
154
176
 
155
- # Mongo conversion
156
- def to_mongo
157
- {"keys"=> @keys, "dimensions"=> @keys.map {|i| self[i]}}
177
+ # Mongo retrieval
178
+ # @param doc [BSON::OrderedHash] the mongo document to retrieve the vector from.
179
+ def self.to_mongo(hash)
180
+ if hash.is_a?(Hash) then hash
181
+ else
182
+ {"keys"=> hash.keys.to_a, "dimensions" => hash.keys.map {|i| hash[i]}}
183
+ end
158
184
  end
159
185
 
160
- # Mongo retrieval
186
+ # Mongo conversion
161
187
  # @param doc [BSON::OrderedHash] the mongo document to retrieve the vector from.
162
188
  def self.from_mongo(doc)
163
- hash = {}
164
- doc["keys"].each_with_index do |k, index|
165
- hash[k] = doc["dimensions"][index]
189
+ if doc.is_a?(self) then doc
190
+ else
191
+ hash = {}
192
+ doc["keys"].each_with_index do |k, index|
193
+ hash[k] = doc["dimensions"][index]
194
+ end
195
+ NamedVector.new(hash)
166
196
  end
167
- self.new hash
168
197
  end
169
198
 
170
199
  private :new_dimension
@@ -55,7 +55,7 @@ describe 'Initialization' do
55
55
  end
56
56
 
57
57
  it 'should allow sums of vectors to be used for initilization' do
58
- vector = NamedVector.new(["a","a","a", "b", "b"])
58
+ vector = NamedVector.new(%w(a a a b b))
59
59
  vector.a.should eq 3
60
60
  vector.b.should eq 2
61
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: named_vector
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Raiman