epitools 0.5.30 → 0.5.31

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
  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