cartesian 0.5.3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +17 -1
- data/PostInstall.txt +1 -4
- data/README.rdoc +13 -6
- data/Rakefile +9 -1
- data/Wishlist.txt +12 -2
- data/lib/cartesian.rb +26 -9
- data/lib/cartesian_iterator.rb +3 -3
- data/script/txt2html +5 -5
- data/test/test_cartesian.rb +28 -5
- data/test/test_extensions.rb +6 -5
- data/test/test_grid_search.rb +3 -3
- data/website/doc/created.rid +5 -1
- data/website/doc/index.html +120 -20
- data/website/index.html +23 -5
- data/website/index.txt +8 -4
- data/website/template.html.erb +14 -1
- metadata +4 -8
data/History.txt
CHANGED
@@ -1,4 +1,20 @@
|
|
1
|
-
=== 0.
|
1
|
+
=== 0.6.0 2011-01-07
|
2
|
+
|
3
|
+
* 1 major enhancement:
|
4
|
+
* Cartesian is now included in Enumerable and in all classes and modules which
|
5
|
+
include it, so that any class or module that ever includes Enumerable will have
|
6
|
+
cartesian methods. New tests were also added to test the novel functionality.
|
7
|
+
|
8
|
+
* 7 minor, non-functional, enhancements:
|
9
|
+
* removed replication of VERSION in lib/cartesian.rb and lib/cartesian/version.rb
|
10
|
+
* fixed the "FIXME full name" in the website template
|
11
|
+
* created Rake task :render_website, which also regenerates RDoc documentation, ensuring its up-to-date
|
12
|
+
* documentation is now generated by Darkfish Rdoc and includes README.rdoc, as expected
|
13
|
+
* added Google Analytics tracking to the website
|
14
|
+
* deleted unnecessary test_suite.rb ('rake test' === 'ruby test/test_suite.rb')
|
15
|
+
* moved 'recursive.rb' to 'etc/' (related implementation by Brian Schröäer, not part of the gem)
|
16
|
+
|
17
|
+
=== 0.5.3 2011-01-05
|
2
18
|
|
3
19
|
* 3 minor enhancements:
|
4
20
|
* code comment/documentation update
|
data/PostInstall.txt
CHANGED
@@ -1,7 +1,4 @@
|
|
1
1
|
|
2
|
-
For more information on cartesian, see http://cartesian.
|
3
|
-
|
4
|
-
NOTE: Change this information in PostInstall.txt
|
5
|
-
You can also delete it if you don't want it.
|
2
|
+
For more information on cartesian, see http://adrianomitre.github.com/cartesian/website/index.html
|
6
3
|
|
7
4
|
|
data/README.rdoc
CHANGED
@@ -30,19 +30,26 @@ or use the methods provided by the mixin in the Array class
|
|
30
30
|
|
31
31
|
which include the short'n'sweet _x_ method
|
32
32
|
v = [] #=> []
|
33
|
-
for a,b in [1,2].x [3,4]
|
33
|
+
for a, b in [1,2].x [3,4]
|
34
34
|
v << [a,b]
|
35
35
|
end #=> true
|
36
36
|
v #=> [[1, 3], [1, 4], [2, 3], [2, 4]]
|
37
|
+
for x, y, z in 0..1
|
37
38
|
|
38
39
|
The '**' operator provides a convenient way of iterating multi-dimensionally over the same array or range
|
39
|
-
|
40
|
-
|
40
|
+
u = [0,1]**3 #=> #<CartesianIterator:0x7f2fb8e54978 @tot_iter=8, @lists=[[0, 1], [0, 1], [0, 1]]>
|
41
|
+
u.to_a #=> [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
|
42
|
+
|
43
|
+
v = []
|
44
|
+
for x, y, z in (0...10)**3
|
45
|
+
v << [x, y, z] if x*x + y*y + z*z == 6
|
46
|
+
end
|
47
|
+
v #=> [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
|
41
48
|
|
42
49
|
Finally, the grid search methods
|
43
|
-
require 'grid_search'
|
50
|
+
require 'cartesian/grid_search'
|
44
51
|
[-1, 0, 1, 2].argmax {|x| x**2 } #=> 2
|
45
|
-
|
52
|
+
0.argmin {|x| x.abs } #=> 0
|
46
53
|
|
47
54
|
== REQUIREMENTS:
|
48
55
|
|
@@ -56,7 +63,7 @@ Finally, the grid search methods
|
|
56
63
|
|
57
64
|
(The MIT License)
|
58
65
|
|
59
|
-
Copyright (c) 2011 Adriano Mitre <adriano.mitre@gmail.com>
|
66
|
+
Copyright (c) 2006-2011 Adriano Mitre <adriano.mitre@gmail.com>
|
60
67
|
|
61
68
|
Permission is hereby granted, free of charge, to any person obtaining
|
62
69
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -23,4 +23,12 @@ Dir['tasks/**/*.rake'].each { |t| load t }
|
|
23
23
|
|
24
24
|
# TODO - want other tests/tasks run by default? Add them to the list
|
25
25
|
# remove_task :default
|
26
|
-
# task :default => [:spec, :features]
|
26
|
+
# task :default => [:spec, :features]
|
27
|
+
|
28
|
+
task :render_website do |t|
|
29
|
+
Dir.chdir File.dirname(File.expand_path(__FILE__))
|
30
|
+
system %q{ script/txt2html website/index.txt website/template.html.erb > website/index.html }
|
31
|
+
system %q{ rdoc README.rdoc lib/*.rb }
|
32
|
+
system %q{ rm -rf website/doc; mv doc website }
|
33
|
+
end
|
34
|
+
|
data/Wishlist.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
= FIXME:
|
2
|
+
|
3
|
+
* Include README.rdoc in the website/doc (RDoc)
|
4
|
+
|
5
|
+
= SUGGESTIONS:
|
6
|
+
|
7
|
+
* Include information regarding the memory usage (vs other cartesian implementations):
|
8
|
+
* "Unfortunately, these methods use too much memory, storing the whole cartesian
|
9
|
+
product Array in memory even its elements are needed only one at a time."
|
10
|
+
src: http://www.ruby-forum.com/topic/95519
|
11
|
+
|
1
12
|
* Release GridSearch as a separate, independent gem. Note that 'lib/grid_search.rb' is already independent.
|
2
|
-
|
3
|
-
* Fix/automate the FIXME in the website email (currently being fixed manually)
|
13
|
+
|
data/lib/cartesian.rb
CHANGED
@@ -39,7 +39,7 @@ module Cartesian
|
|
39
39
|
# Unfortunately, as of now, the version data must be replicated in ../cartesian.rb,
|
40
40
|
# due to a mix of newgem versions, each requiring a different one. Not DRY :P
|
41
41
|
#
|
42
|
-
VERSION = "0.
|
42
|
+
VERSION = "0.6.0"
|
43
43
|
|
44
44
|
# Produces the cartesian product of self and other.
|
45
45
|
# The result is an array of pairs (i.e. two-element arrays).
|
@@ -156,13 +156,30 @@ module Cartesian
|
|
156
156
|
end
|
157
157
|
end
|
158
158
|
alias :power! :**
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
159
|
+
|
160
|
+
# Sure, it would be great if +Enumerable.module_eval("include Cartesian")+ did the trick,
|
161
|
+
# but fact is that it would not work because of the [dynamic module include problem][1],
|
162
|
+
# so the following, less straightforward solution has to be applied.
|
163
|
+
#
|
164
|
+
# JRuby (at least up to version 1.5.6) has ObjectSpace disabled by default, so it needs
|
165
|
+
# to be enabled manually ([reference][2]).
|
166
|
+
#
|
167
|
+
# [1]: http://eigenclass.org/hiki/The+double+inclusion+problem "Dynamic Module Include Problem"
|
168
|
+
# [2]: http://ola-bini.blogspot.com/2007/07/objectspace-to-have-or-not-to-have.html "ObjectSpace: to have or not to have"
|
169
|
+
# [3]: http://www.ruby-forum.com/topic/160487 "problem of feedtools with jruby"
|
170
|
+
#
|
171
|
+
prev_jruby_objectspace_state = nil # only for scope reasons
|
172
|
+
if defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION =~ /jruby/i
|
173
|
+
require 'jruby'
|
174
|
+
prev_jruby_objectspace_state = JRuby.objectspace
|
175
|
+
JRuby.objectspace = true
|
176
|
+
end
|
177
|
+
ObjectSpace.each_object(Module) do |m|
|
178
|
+
if m <= Enumerable # equiv. to "if m.include?(Enumerable) || m == Enumerable"
|
179
|
+
m.module_eval("include Cartesian")
|
180
|
+
end
|
181
|
+
end
|
182
|
+
JRuby.objectspace = prev_jruby_objectspace_state if RUBY_DESCRIPTION =~ /jruby/i
|
183
|
+
|
167
184
|
end
|
168
185
|
|
data/lib/cartesian_iterator.rb
CHANGED
@@ -52,13 +52,13 @@ class CartesianIterator
|
|
52
52
|
for list in @lists
|
53
53
|
elems << list.restart_and_raw_next
|
54
54
|
end
|
55
|
-
if RUBY_VERSION <= '1.9.1'; yield
|
55
|
+
if RUBY_VERSION <= '1.9.1'; yield(*elems.map {|x| x }); else; yield(*elems); end # Yeah, v.map{|x|x} should be equal to v, but strangely it is NOT in Ruby versions prior to 1.9.2.
|
56
56
|
|
57
57
|
last_list_index = @lists.size-1
|
58
58
|
n = last_list_index
|
59
59
|
loop do
|
60
60
|
if elems[n] = @lists[n].raw_next
|
61
|
-
if RUBY_VERSION <= '1.9.1'; yield
|
61
|
+
if RUBY_VERSION <= '1.9.1'; yield(*elems.map {|x| x }); else; yield(*elems); end # See previous comment.
|
62
62
|
n = last_list_index
|
63
63
|
next
|
64
64
|
elsif n > 0
|
@@ -81,7 +81,7 @@ module Iterable
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def next
|
84
|
-
restart unless @next_index
|
84
|
+
restart unless defined? @next_index
|
85
85
|
raw_next
|
86
86
|
end
|
87
87
|
|
data/script/txt2html
CHANGED
@@ -15,9 +15,9 @@ end
|
|
15
15
|
require 'redcloth'
|
16
16
|
require 'syntax/convertors/html'
|
17
17
|
require 'erb'
|
18
|
-
require File.dirname(__FILE__) + "/../lib/#{GEM_NAME}
|
18
|
+
require File.dirname(File.expand_path(__FILE__)) + "/../lib/#{GEM_NAME}.rb"
|
19
19
|
|
20
|
-
version = Cartesian::VERSION
|
20
|
+
version = Cartesian::VERSION
|
21
21
|
download = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
22
22
|
|
23
23
|
def rubyforge_project_id
|
@@ -30,9 +30,9 @@ class Fixnum
|
|
30
30
|
return 'th' if (10..19).include?(self % 100)
|
31
31
|
# others
|
32
32
|
case self % 10
|
33
|
-
when 1
|
34
|
-
when 2
|
35
|
-
when 3
|
33
|
+
when 1; return 'st'
|
34
|
+
when 2; return 'nd'
|
35
|
+
when 3; return 'rd'
|
36
36
|
else return 'th'
|
37
37
|
end
|
38
38
|
end
|
data/test/test_cartesian.rb
CHANGED
@@ -19,6 +19,26 @@ class TestCartesian < Test::Unit::TestCase
|
|
19
19
|
[2, 6], [3, 4], [3, 5], [3, 6]]
|
20
20
|
assert(foo.x(bar).to_a == expected)
|
21
21
|
assert(Cartesian.product(foo,bar) == expected)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_other_existing_enumerable
|
25
|
+
if RUBY_DESCRIPTION =~ /rubinius/i # Work around a Rubinius bug I found and [reported][1] and whose
|
26
|
+
foo = [0.0, 0.6] # [fix][2] has not yet been merged to HEAD (Jan 1st, 2011).
|
27
|
+
else # [1]: https://github.com/evanphx/rubinius/issues/issue/650
|
28
|
+
foo = 0.step(1, 0.6) # [2]: https://github.com/evanphx/rubinius/commit/9ad78eaaf66dac6615baa06a712594a95b1a7bea
|
29
|
+
end
|
30
|
+
bar = { :x => 42, :y => 43 }
|
31
|
+
expected = foo.to_a.x(bar.to_a).to_a
|
32
|
+
actual = foo.x(bar).to_a
|
33
|
+
assert_equal expected, actual
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_other_new_enumerable
|
37
|
+
String.class_eval "alias each each_line ; include Enumerable"
|
38
|
+
foo = "foo\nbar"
|
39
|
+
bar = [1, 2]
|
40
|
+
expected = [["foo\n", 1], ["foo\n", 2], ["bar", 1], ["bar", 2]]
|
41
|
+
assert_equal expected, foo.x(bar).to_a
|
22
42
|
end
|
23
43
|
|
24
44
|
def test_product
|
@@ -44,9 +64,11 @@ class TestCartesian < Test::Unit::TestCase
|
|
44
64
|
foo = 1..3
|
45
65
|
bar = %w{a b c}
|
46
66
|
expected = [[1, "a"], [1, "b"], [1, "c"], [2, "a"], [2, "b"],
|
47
|
-
[2, "c"], [3, "a"], [3, "b"], [3, "c"]]
|
48
|
-
|
49
|
-
|
67
|
+
[2, "c"], [3, "a"], [3, "b"], [3, "c"]]
|
68
|
+
actual = foo.x(bar).to_a
|
69
|
+
assert_equal expected, actual
|
70
|
+
actual = Cartesian.product(foo,bar)
|
71
|
+
assert_equal expected, actual
|
50
72
|
end
|
51
73
|
|
52
74
|
def test_power
|
@@ -56,8 +78,9 @@ class TestCartesian < Test::Unit::TestCase
|
|
56
78
|
assert_equal ary, ary**1
|
57
79
|
expected = [[0, 0, 0], [0, 0, 1], [0, 1, 0],\
|
58
80
|
[0, 1, 1], [1, 0, 0], [1, 0, 1],\
|
59
|
-
[1, 1, 0], [1, 1, 1]]
|
60
|
-
|
81
|
+
[1, 1, 0], [1, 1, 1]]
|
82
|
+
actual = ([0,1]**3).to_a
|
83
|
+
assert_equal expected, actual
|
61
84
|
end
|
62
85
|
|
63
86
|
def test_joined_cartesian
|
data/test/test_extensions.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
|
2
|
-
require File.join(File.dirname(__FILE__),
|
3
|
-
|
1
|
+
%w{test_helper extensions}.each do |req|
|
2
|
+
require File.join(File.dirname(__FILE__), "#{req}.rb")
|
3
|
+
end
|
4
|
+
|
4
5
|
class TestExtensions < Test::Unit::TestCase
|
5
6
|
def test_among?
|
6
|
-
assert
|
7
|
+
assert 1.among? [1,2,3]
|
7
8
|
assert ! 7.among?([1,2,3])
|
8
|
-
assert
|
9
|
+
assert 3.0.among? [1,2,3]
|
9
10
|
end
|
10
11
|
end
|
data/test/test_grid_search.rb
CHANGED
@@ -13,9 +13,9 @@ class TestCartesian < Test::Unit::TestCase
|
|
13
13
|
assert_equal 0, *[-2,-1,0].argmax {|x| x**3 }
|
14
14
|
values = []
|
15
15
|
-3.step(3, 0.25) {|val| values << val }
|
16
|
-
|
17
|
-
assert
|
18
|
-
assert
|
16
|
+
x2, y2 = (values**2).argmax {|x,y| x**2+y**2 }
|
17
|
+
assert x2.among?([-3,3])
|
18
|
+
assert y2.among?([-3,3])
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
data/website/doc/created.rid
CHANGED
@@ -1 +1,5 @@
|
|
1
|
-
|
1
|
+
Fri, 07 Jan 2011 02:32:48 -0200
|
2
|
+
README.rdoc Fri, 07 Jan 2011 02:06:14 -0200
|
3
|
+
lib/cartesian.rb Fri, 07 Jan 2011 01:02:01 -0200
|
4
|
+
lib/cartesian_iterator.rb Thu, 06 Jan 2011 18:18:15 -0200
|
5
|
+
lib/grid_search.rb Wed, 05 Jan 2011 06:07:10 -0200
|
data/website/doc/index.html
CHANGED
@@ -1,24 +1,124 @@
|
|
1
|
-
<?xml version="1.0" encoding="
|
2
|
-
<!DOCTYPE html
|
3
|
-
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
5
4
|
|
6
|
-
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
6
|
+
<head>
|
7
|
+
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
|
7
8
|
|
8
|
-
|
9
|
+
<title>RDoc Documentation</title>
|
10
|
+
|
11
|
+
<link type="text/css" media="screen" href="rdoc.css" rel="stylesheet" />
|
12
|
+
|
13
|
+
<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
|
14
|
+
<script src="js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
|
15
|
+
<script src="js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
|
16
|
+
<script src="js/darkfish.js" type="text/javascript" charset="utf-8"></script>
|
9
17
|
|
10
|
-
-->
|
11
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
12
|
-
<head>
|
13
|
-
<title>RDoc Documentation</title>
|
14
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
15
18
|
</head>
|
16
|
-
<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
<body class="indexpage">
|
20
|
+
|
21
|
+
|
22
|
+
<h1>RDoc Documentation</h1>
|
23
|
+
|
24
|
+
|
25
|
+
<p>This is the API documentation for 'RDoc Documentation'.</p>
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
<h2>Files</h2>
|
31
|
+
<ul>
|
32
|
+
|
33
|
+
<li class="file"><a href="README_rdoc.html">README.rdoc</a></li>
|
34
|
+
|
35
|
+
</ul>
|
36
|
+
|
37
|
+
|
38
|
+
<h2 id="classes">Classes/Modules</h2>
|
39
|
+
<ul>
|
40
|
+
|
41
|
+
<li class="class"><a href="Array.html">Array</a></li>
|
42
|
+
|
43
|
+
<li class="module"><a href="Cartesian.html">Cartesian</a></li>
|
44
|
+
|
45
|
+
<li class="class"><a href="CartesianIterator.html">CartesianIterator</a></li>
|
46
|
+
|
47
|
+
<li class="module"><a href="Enumerable.html">Enumerable</a></li>
|
48
|
+
|
49
|
+
<li class="module"><a href="GridSearch.html">GridSearch</a></li>
|
50
|
+
|
51
|
+
<li class="module"><a href="Iterable.html">Iterable</a></li>
|
52
|
+
|
53
|
+
</ul>
|
54
|
+
|
55
|
+
<h2 id="methods">Methods</h2>
|
56
|
+
<ul>
|
57
|
+
|
58
|
+
<li><a href="Cartesian.html#method-c-joined_product">::joined_product — Cartesian</a></li>
|
59
|
+
|
60
|
+
<li><a href="CartesianIterator.html#method-c-new">::new — CartesianIterator</a></li>
|
61
|
+
|
62
|
+
<li><a href="Cartesian.html#method-c-product">::product — Cartesian</a></li>
|
63
|
+
|
64
|
+
<li><a href="Cartesian.html#method-i-%2A%2A">#** — Cartesian</a></li>
|
65
|
+
|
66
|
+
<li><a href="CartesianIterator.html#method-i-%3D%3D">#== — CartesianIterator</a></li>
|
67
|
+
|
68
|
+
<li><a href="GridSearch.html#method-i-argbest">#argbest — GridSearch</a></li>
|
69
|
+
|
70
|
+
<li><a href="GridSearch.html#method-i-argmax">#argmax — GridSearch</a></li>
|
71
|
+
|
72
|
+
<li><a href="GridSearch.html#method-i-argmin">#argmin — GridSearch</a></li>
|
73
|
+
|
74
|
+
<li><a href="Cartesian.html#method-i-cartesian">#cartesian — Cartesian</a></li>
|
75
|
+
|
76
|
+
<li><a href="CartesianIterator.html#method-i-dup">#dup — CartesianIterator</a></li>
|
77
|
+
|
78
|
+
<li><a href="CartesianIterator.html#method-i-each">#each — CartesianIterator</a></li>
|
79
|
+
|
80
|
+
<li><a href="CartesianIterator.html#method-i-equal">#equal — CartesianIterator</a></li>
|
81
|
+
|
82
|
+
<li><a href="Cartesian.html#method-i-joined_cartesian">#joined_cartesian — Cartesian</a></li>
|
83
|
+
|
84
|
+
<li><a href="Cartesian.html#method-i-left_product">#left_product — Cartesian</a></li>
|
85
|
+
|
86
|
+
<li><a href="CartesianIterator.html#method-i-left_product">#left_product — CartesianIterator</a></li>
|
87
|
+
|
88
|
+
<li><a href="CartesianIterator.html#method-i-left_product%21">#left_product! — CartesianIterator</a></li>
|
89
|
+
|
90
|
+
<li><a href="Iterable.html#method-i-next">#next — Iterable</a></li>
|
91
|
+
|
92
|
+
<li><a href="Cartesian.html#method-i-power%21">#power! — Cartesian</a></li>
|
93
|
+
|
94
|
+
<li><a href="CartesianIterator.html#method-i-product">#product — CartesianIterator</a></li>
|
95
|
+
|
96
|
+
<li><a href="CartesianIterator.html#method-i-product%21">#product! — CartesianIterator</a></li>
|
97
|
+
|
98
|
+
<li><a href="Iterable.html#method-i-raw_next">#raw_next — Iterable</a></li>
|
99
|
+
|
100
|
+
<li><a href="Iterable.html#method-i-restart">#restart — Iterable</a></li>
|
101
|
+
|
102
|
+
<li><a href="Iterable.html#method-i-restart_and_raw_next">#restart_and_raw_next — Iterable</a></li>
|
103
|
+
|
104
|
+
<li><a href="CartesianIterator.html#method-i-right_product">#right_product — CartesianIterator</a></li>
|
105
|
+
|
106
|
+
<li><a href="Cartesian.html#method-i-right_product">#right_product — Cartesian</a></li>
|
107
|
+
|
108
|
+
<li><a href="CartesianIterator.html#method-i-right_product%21">#right_product! — CartesianIterator</a></li>
|
109
|
+
|
110
|
+
<li><a href="CartesianIterator.html#method-i-x">#x — CartesianIterator</a></li>
|
111
|
+
|
112
|
+
<li><a href="Cartesian.html#method-i-x">#x — Cartesian</a></li>
|
113
|
+
|
114
|
+
<li><a href="CartesianIterator.html#method-i-x%21">#x! — CartesianIterator</a></li>
|
115
|
+
|
116
|
+
</ul>
|
117
|
+
|
118
|
+
<div id="validator-badges">
|
119
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
120
|
+
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
|
121
|
+
Rdoc Generator</a> 1.1.6</small>.</p>
|
122
|
+
</div>
|
123
|
+
</body>
|
124
|
+
</html>
|
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1></h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/cartesian"; return false'>
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/cartesian" class="numbers">0.
|
36
|
+
<a href="http://rubyforge.org/projects/cartesian" class="numbers">0.6.0</a>
|
37
37
|
</div>
|
38
38
|
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script><h1>cartesian</h1>
|
39
39
|
<h3>Cartesian products in Ruby</h3>
|
@@ -60,15 +60,18 @@ It can also be easily and conveniently mixed-in into any enumerable class.</p>
|
|
60
60
|
<p>which include the short’n’sweet <em>x</em> method</p>
|
61
61
|
<p><pre class='syntax'>
|
62
62
|
<span class="ident">v</span> <span class="punct">=</span> <span class="punct">[]</span> <span class="comment">#=> []</span>
|
63
|
-
<span class="keyword">for</span> <span class="ident">a</span><span class="punct">,</span
|
63
|
+
<span class="keyword">for</span> <span class="ident">a</span><span class="punct">,</span> <span class="ident">b</span> <span class="keyword">in</span> <span class="punct">[</span><span class="number">1</span><span class="punct">,</span><span class="number">2</span><span class="punct">].</span><span class="ident">x</span> <span class="punct">[</span><span class="number">3</span><span class="punct">,</span><span class="number">4</span><span class="punct">]</span>
|
64
64
|
<span class="ident">v</span> <span class="punct"><<</span> <span class="punct">[</span><span class="ident">a</span><span class="punct">,</span><span class="ident">b</span><span class="punct">]</span>
|
65
65
|
<span class="keyword">end</span> <span class="comment">#=> true</span>
|
66
66
|
<span class="ident">v</span> <span class="comment">#=> [[1, 3], [1, 4], [2, 3], [2, 4]]</span>
|
67
67
|
</pre></p>
|
68
68
|
<p>The ‘**’ operator provides a convenient way of iterating multi-dimensionally over the same array or range</p>
|
69
69
|
<p><pre class='syntax'>
|
70
|
-
<span class="ident">
|
71
|
-
<span class="
|
70
|
+
<span class="ident">u</span> <span class="punct">=</span> <span class="punct">[</span><span class="number">0</span><span class="punct">,</span> <span class="number">1</span><span class="punct">]**</span><span class="number">3</span> <span class="comment">#=> #<CartesianIterator:0x7f2fb8e54978 @tot_iter=8, \</span>
|
71
|
+
<span class="comment"># @lists=[[0, 1], [0, 1], [0, 1]]></span>
|
72
|
+
<span class="ident">u</span><span class="punct">.</span><span class="ident">to_a</span> <span class="comment">#=> [[0, 0, 0], [0, 0, 1], [0, 1, 0], \</span>
|
73
|
+
<span class="comment"># [0, 1, 1], [1, 0, 0], [1, 0, 1], \</span>
|
74
|
+
<span class="comment"># [1, 1, 0], [1, 1, 1]]</span>
|
72
75
|
</pre></p>
|
73
76
|
<p>Finally, the grid search methods</p>
|
74
77
|
<p><pre class='syntax'>
|
@@ -92,19 +95,34 @@ rake install_gem</pre>
|
|
92
95
|
<p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
|
93
96
|
<h2>Contact</h2>
|
94
97
|
<p>Comments are welcome. Send an email to <a href="mailto:adriano.mitre@gmail.com">Adriano Mitre</a>.</p>
|
98
|
+
<div align=right>
|
95
99
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
96
100
|
<input type="hidden" name="cmd" value="_s-xclick">
|
97
101
|
<input type="hidden" name="hosted_button_id" value="9ABWULT73Y7AC">
|
98
102
|
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
99
103
|
<p><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"></p>
|
100
104
|
</form>
|
105
|
+
</div>
|
101
106
|
<p class="coda">
|
102
|
-
<a href="adriano.mitre@gmail.com">Adriano Mitre</a>,
|
107
|
+
<a href="adriano.mitre@gmail.com">Adriano Mitre</a>, 7th January 2011<br>
|
103
108
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
104
109
|
</p>
|
105
110
|
</div>
|
106
111
|
|
107
112
|
<!-- insert site tracking codes here, like Google Urchin -->
|
113
|
+
<script type="text/javascript">
|
114
|
+
|
115
|
+
var _gaq = _gaq || [];
|
116
|
+
_gaq.push(['_setAccount', 'UA-20605454-1']);
|
117
|
+
_gaq.push(['_trackPageview']);
|
118
|
+
|
119
|
+
(function() {
|
120
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
121
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
122
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
123
|
+
})();
|
124
|
+
|
125
|
+
</script>
|
108
126
|
|
109
127
|
</body>
|
110
128
|
</html>
|
data/website/index.txt
CHANGED
@@ -39,7 +39,7 @@ which include the short'n'sweet _x_ method
|
|
39
39
|
|
40
40
|
<pre syntax="ruby">
|
41
41
|
v = [] #=> []
|
42
|
-
for a,b in [1,2].x [3,4]
|
42
|
+
for a, b in [1,2].x [3,4]
|
43
43
|
v << [a,b]
|
44
44
|
end #=> true
|
45
45
|
v #=> [[1, 3], [1, 4], [2, 3], [2, 4]]
|
@@ -48,8 +48,11 @@ v #=> [[1, 3], [1, 4], [2, 3], [2, 4]]
|
|
48
48
|
The '**' operator provides a convenient way of iterating multi-dimensionally over the same array or range
|
49
49
|
|
50
50
|
<pre syntax="ruby">
|
51
|
-
|
52
|
-
|
51
|
+
u = [0, 1]**3 #=> #<CartesianIterator:0x7f2fb8e54978 @tot_iter=8, \
|
52
|
+
# @lists=[[0, 1], [0, 1], [0, 1]]>
|
53
|
+
u.to_a #=> [[0, 0, 0], [0, 0, 1], [0, 1, 0], \
|
54
|
+
# [0, 1, 1], [1, 0, 0], [1, 0, 1], \
|
55
|
+
# [1, 1, 0], [1, 1, 1]]
|
53
56
|
</pre>
|
54
57
|
|
55
58
|
Finally, the grid search methods
|
@@ -87,10 +90,11 @@ h2. Contact
|
|
87
90
|
|
88
91
|
Comments are welcome. Send an email to "Adriano Mitre":mailto:adriano.mitre@gmail.com.
|
89
92
|
|
93
|
+
<div align=right>
|
90
94
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
91
95
|
<input type="hidden" name="cmd" value="_s-xclick">
|
92
96
|
<input type="hidden" name="hosted_button_id" value="9ABWULT73Y7AC">
|
93
97
|
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
94
98
|
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
95
99
|
</form>
|
96
|
-
|
100
|
+
</div>
|
data/website/template.html.erb
CHANGED
@@ -37,12 +37,25 @@
|
|
37
37
|
</div>
|
38
38
|
<%= body %>
|
39
39
|
<p class="coda">
|
40
|
-
<a href="
|
40
|
+
<a href="adriano.mitre@gmail.com">Adriano Mitre</a>, <%= modified.pretty %><br>
|
41
41
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
42
42
|
</p>
|
43
43
|
</div>
|
44
44
|
|
45
45
|
<!-- insert site tracking codes here, like Google Urchin -->
|
46
|
+
<script type="text/javascript">
|
47
|
+
|
48
|
+
var _gaq = _gaq || [];
|
49
|
+
_gaq.push(['_setAccount', 'UA-20605454-1']);
|
50
|
+
_gaq.push(['_trackPageview']);
|
51
|
+
|
52
|
+
(function() {
|
53
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
54
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
55
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
56
|
+
})();
|
57
|
+
|
58
|
+
</script>
|
46
59
|
|
47
60
|
</body>
|
48
61
|
</html>
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cartesian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 13
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
7
|
+
- 6
|
8
|
+
- 0
|
9
|
+
version: 0.6.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Adriano Mitre
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-07 00:00:00 -02:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 47
|
30
28
|
segments:
|
31
29
|
- 2
|
32
30
|
- 8
|
@@ -133,7 +131,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
131
|
requirements:
|
134
132
|
- - ">="
|
135
133
|
- !ruby/object:Gem::Version
|
136
|
-
hash: 3
|
137
134
|
segments:
|
138
135
|
- 0
|
139
136
|
version: "0"
|
@@ -142,7 +139,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
139
|
requirements:
|
143
140
|
- - ">="
|
144
141
|
- !ruby/object:Gem::Version
|
145
|
-
hash: 3
|
146
142
|
segments:
|
147
143
|
- 0
|
148
144
|
version: "0"
|