epitools 0.5.30 → 0.5.31

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 120222690b258526c2d00054435a3050d44f9a38
4
- data.tar.gz: 67eae80482d685d793b149a6cbd9e29bb6a9b2d1
3
+ metadata.gz: a5e37455ce36afd3a7cb73f380868b578559ad94
4
+ data.tar.gz: 8e76e98be9a930e15e0dedf8ae17311fc292aa6d
5
5
  SHA512:
6
- metadata.gz: 7be7f20a24a90202794be45347551964fa9ca3e6e28784e1baa83c23e99c69c394afa03b38c4f35b29937b30f173bdcdd008f486bf959d426a4186d13379167d
7
- data.tar.gz: 1f4de875e2dcb0b70e47c87056462bea390dc8b20b37a4f96af0e8e03ec092df6c8d10c377ea6991ff37e5354592ebf307f1b6f2ac1815b936ed095c57f4a226
6
+ metadata.gz: d26e9c55fe26a3bd6450b7a8f5be8d4dc9386e40cc859ab539043793f3ac683384de944238dfcbdfe4d9de9841279a24be4cc7921c1159663eab109329bec5d0
7
+ data.tar.gz: 18bf8b39c8458f5215a3a5abe54c79e8336923e9c7dc11c93f328ba66da9d5873de81fb1ff9985836566795408694572c5c35e622ac7e122dba64cf37d433f32
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.30
1
+ 0.5.31
@@ -18,6 +18,7 @@ autoload :Find, 'find'
18
18
  autoload :Benchmark, 'benchmark'
19
19
  autoload :Tracer, 'tracer'
20
20
  autoload :CSV, 'csv'
21
+ autoload :Matrix, 'matrix'
21
22
 
22
23
  module Digest
23
24
  autoload :SHA1, 'digest/sha1'
@@ -89,6 +89,16 @@ class Hash
89
89
  new {|h,k| h[k] = [] }
90
90
  end
91
91
 
92
+ #
93
+ # Returns a new Hash whose values default to empty sets. (Good for collecting unique things!)
94
+ #
95
+ # eg:
96
+ # Hash.of_sets[:yays] << "Yay!"
97
+ #
98
+ def self.of_sets
99
+ new {|h,k| h[k] = Set.new }
100
+ end
101
+
92
102
  #
93
103
  # Returns a new Hash whose values default to 0. (Good for counting things!)
94
104
  #
@@ -244,6 +244,72 @@ module ObjectSpace
244
244
  end
245
245
 
246
246
 
247
+ #
248
+ # Matrix extensions
249
+ #
250
+ class Matrix
251
+
252
+ #
253
+ # Create a matrix of the specified size full of random numbers.
254
+ #
255
+ def self.random(*dims)
256
+ build(*dims) { rand }
257
+ end
258
+
259
+
260
+ #
261
+ # The size of the matrix, returned as `[rows, columns]`.
262
+ #
263
+ def size
264
+ [row_size, column_size]
265
+ end
266
+
267
+ #
268
+ # Print the matrix to the STDOUT.
269
+ #
270
+ def print(header=true, separator=" ")
271
+ max_width = map {|num| num.to_s.size }.max
272
+
273
+ case first
274
+ when Integer
275
+ justify = :rjust
276
+ when Float
277
+ justify = :ljust
278
+ else
279
+ raise "Unknown matrix element type: #{first.class}"
280
+ end
281
+
282
+ # print it!
283
+ puts "#{size.join("x")} matrix:" if header
284
+
285
+ rows.each do |row|
286
+ puts " " + row.map { |n| n.to_s.send(justify, max_width) }.join(separator)
287
+ end
288
+
289
+ puts
290
+ end
291
+
292
+ alias_method :draw, :print
293
+
294
+ #
295
+ # Allow mathematical operations (*, /, +, -) with a regular number on the right side.
296
+ #
297
+ # eg: Matrix.zero(3) + 5
298
+ #
299
+ %w[* / + -].each do |op|
300
+ class_eval %{
301
+ def #{op}(other)
302
+ case other
303
+ when Fixnum, Float
304
+ map { |e| e #{op} other }
305
+ else
306
+ super(other)
307
+ end
308
+ end
309
+ }
310
+ end
311
+
312
+ end
247
313
 
248
314
  #
249
315
  # Flush standard input's buffer.
@@ -621,6 +621,32 @@ describe ObjectSpace do
621
621
 
622
622
  end
623
623
 
624
+ describe Matrix do
625
+
626
+ it "draws a matrix" do
627
+ Matrix.identity(3).draw
628
+ Matrix.random(3).draw
629
+ (Matrix.identity(3) + 102321 ).draw
630
+ end
631
+
632
+ it "makes random matrices" do
633
+ m = Matrix.random(4)
634
+ m.size.should == [4,4]
635
+
636
+ m = Matrix.random(3,2)
637
+ m.size.should == [3,2]
638
+ end
639
+
640
+ it "does scalar things" do
641
+ m = Matrix[[1,2,3]]
642
+ (m + 1).to_a.should == [[2,3,4]]
643
+ (m - 1).to_a.should == [[0,1,2]]
644
+ (m * 2).to_a.should == [[2,4,6]]
645
+ (m / 2.0).to_a.should == [[0.5,1,1.5]]
646
+ end
647
+
648
+ end
649
+
624
650
  describe "truthiness" do
625
651
 
626
652
  it "is truthy!" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epitools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.30
4
+ version: 0.5.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - epitron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-31 00:00:00.000000000 Z
11
+ date: 2013-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec