named_vector 1.0.1 → 1.0.2

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