cartesian 0.6.6 → 0.6.7
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.
- data/History.txt +5 -0
- data/lib/cartesian.rb +1 -1
- data/lib/cartesian/version.rb +2 -2
- data/lib/cartesian_iterator.rb +2 -2
- data/website/doc/CartesianIterator.html +64 -65
- data/website/doc/Iterable.html +20 -60
- data/website/doc/README_rdoc.html +1 -1
- data/website/doc/created.rid +5 -6
- data/website/doc/index.html +0 -2
- data/website/doc/lib/cartesian_iterator_rb.html +1 -3
- data/website/doc/lib/cartesian_rb.html +1 -1
- data/website/doc/lib/grid_search_rb.html +1 -1
- data/website/index.html +125 -2
- metadata +56 -69
data/History.txt
CHANGED
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.6.
|
42
|
+
VERSION = "0.6.7"
|
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).
|
data/lib/cartesian/version.rb
CHANGED
data/lib/cartesian_iterator.rb
CHANGED
@@ -58,14 +58,14 @@ class CartesianIterator
|
|
58
58
|
for list in @lists
|
59
59
|
elems << list.restart_and_raw_next
|
60
60
|
end
|
61
|
-
|
61
|
+
yield(*elems.dup)
|
62
62
|
|
63
63
|
last_list_index = @lists.size-1
|
64
64
|
n = last_list_index
|
65
65
|
loop do
|
66
66
|
if !@lists[n].done?
|
67
67
|
elems[n] = @lists[n].raw_next
|
68
|
-
|
68
|
+
yield(*elems.dup)
|
69
69
|
n = last_list_index
|
70
70
|
next
|
71
71
|
elsif n > 0
|
@@ -201,13 +201,13 @@
|
|
201
201
|
<div class="method-source-code"
|
202
202
|
id="new-source">
|
203
203
|
<pre>
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
204
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 3</span>
|
205
|
+
3: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">foo</span>, <span class="ruby-identifier">bar</span>)
|
206
|
+
4: <span class="ruby-ivar">@lists</span> = []
|
207
|
+
5: <span class="ruby-ivar">@tot_iter</span> = <span class="ruby-value">1</span>
|
208
|
+
6: <span class="ruby-identifier">product!</span>(<span class="ruby-identifier">foo</span>)
|
209
|
+
7: <span class="ruby-identifier">product!</span>(<span class="ruby-identifier">bar</span>)
|
210
|
+
8: <span class="ruby-keyword kw">end</span></pre>
|
211
211
|
</div>
|
212
212
|
|
213
213
|
</div>
|
@@ -273,10 +273,10 @@
|
|
273
273
|
<div class="method-source-code"
|
274
274
|
id="dup-source">
|
275
275
|
<pre>
|
276
|
-
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line
|
277
|
-
|
278
|
-
|
279
|
-
|
276
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 10</span>
|
277
|
+
10: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dup</span>
|
278
|
+
11: <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">dump</span>(<span class="ruby-keyword kw">self</span>))
|
279
|
+
12: <span class="ruby-keyword kw">end</span></pre>
|
280
280
|
</div>
|
281
281
|
|
282
282
|
</div>
|
@@ -307,32 +307,31 @@
|
|
307
307
|
<div class="method-source-code"
|
308
308
|
id="each-source">
|
309
309
|
<pre>
|
310
|
-
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line
|
311
|
-
|
312
|
-
|
310
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 48</span>
|
311
|
+
48: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each</span>
|
312
|
+
49: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tot_iter</span> <span class="ruby-operator"><</span> <span class="ruby-value">1</span>
|
313
|
+
50:
|
314
|
+
51: <span class="ruby-identifier">elems</span> = []
|
315
|
+
52: <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">list</span> <span class="ruby-keyword kw">in</span> <span class="ruby-ivar">@lists</span>
|
316
|
+
53: <span class="ruby-identifier">elems</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">restart_and_raw_next</span>
|
317
|
+
54: <span class="ruby-keyword kw">end</span>
|
318
|
+
55: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_VERSION</span> <span class="ruby-operator"><=</span> <span class="ruby-value str">'1.9.1'</span>; <span class="ruby-keyword kw">yield</span>(*<span class="ruby-identifier">elems</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span> }); <span class="ruby-keyword kw">else</span>; <span class="ruby-keyword kw">yield</span>(*<span class="ruby-identifier">elems</span>); <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># Yeah, v.map{|x|x} should be equal to v, but strangely it is NOT in Ruby versions prior to 1.9.2.</span>
|
313
319
|
56:
|
314
|
-
57: <span class="ruby-identifier">
|
315
|
-
58: <span class="ruby-
|
316
|
-
59:
|
317
|
-
60:
|
318
|
-
61:
|
319
|
-
62:
|
320
|
-
63:
|
321
|
-
64:
|
322
|
-
65:
|
323
|
-
66:
|
324
|
-
67:
|
325
|
-
68: <span class="ruby-keyword kw">
|
326
|
-
69:
|
327
|
-
70:
|
328
|
-
71:
|
329
|
-
72: <span class="ruby-identifier">elems</span>[<span class="ruby-identifier">n</span>] = <span class="ruby-ivar">@lists</span>[<span class="ruby-identifier">n</span>].<span class="ruby-identifier">restart_and_raw_next</span>
|
330
|
-
73: <span class="ruby-identifier">n</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
|
331
|
-
74: <span class="ruby-keyword kw">else</span>
|
332
|
-
75: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
|
333
|
-
76: <span class="ruby-keyword kw">end</span>
|
334
|
-
77: <span class="ruby-keyword kw">end</span>
|
335
|
-
78: <span class="ruby-keyword kw">end</span></pre>
|
320
|
+
57: <span class="ruby-identifier">last_list_index</span> = <span class="ruby-ivar">@lists</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>
|
321
|
+
58: <span class="ruby-identifier">n</span> = <span class="ruby-identifier">last_list_index</span>
|
322
|
+
59: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
|
323
|
+
60: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">elems</span>[<span class="ruby-identifier">n</span>] = <span class="ruby-ivar">@lists</span>[<span class="ruby-identifier">n</span>].<span class="ruby-identifier">raw_next</span>
|
324
|
+
61: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">RUBY_VERSION</span> <span class="ruby-operator"><=</span> <span class="ruby-value str">'1.9.1'</span>; <span class="ruby-keyword kw">yield</span>(*<span class="ruby-identifier">elems</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span> }); <span class="ruby-keyword kw">else</span>; <span class="ruby-keyword kw">yield</span>(*<span class="ruby-identifier">elems</span>); <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># See previous comment.</span>
|
325
|
+
62: <span class="ruby-identifier">n</span> = <span class="ruby-identifier">last_list_index</span>
|
326
|
+
63: <span class="ruby-keyword kw">next</span>
|
327
|
+
64: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
328
|
+
65: <span class="ruby-identifier">elems</span>[<span class="ruby-identifier">n</span>] = <span class="ruby-ivar">@lists</span>[<span class="ruby-identifier">n</span>].<span class="ruby-identifier">restart_and_raw_next</span>
|
329
|
+
66: <span class="ruby-identifier">n</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
|
330
|
+
67: <span class="ruby-keyword kw">else</span>
|
331
|
+
68: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
|
332
|
+
69: <span class="ruby-keyword kw">end</span>
|
333
|
+
70: <span class="ruby-keyword kw">end</span>
|
334
|
+
71: <span class="ruby-keyword kw">end</span></pre>
|
336
335
|
</div>
|
337
336
|
|
338
337
|
</div>
|
@@ -363,13 +362,13 @@
|
|
363
362
|
<div class="method-source-code"
|
364
363
|
id="equal-source">
|
365
364
|
<pre>
|
366
|
-
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
365
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 14</span>
|
366
|
+
14: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">equal</span>(<span class="ruby-identifier">other</span>)
|
367
|
+
15: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">instance_variables</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">var_name</span><span class="ruby-operator">|</span>
|
368
|
+
16: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">var_name</span>) <span class="ruby-operator">!=</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">var_name</span>)
|
369
|
+
17: <span class="ruby-keyword kw">end</span>
|
370
|
+
18: <span class="ruby-keyword kw">true</span>
|
371
|
+
19: <span class="ruby-keyword kw">end</span></pre>
|
373
372
|
</div>
|
374
373
|
|
375
374
|
</div>
|
@@ -404,11 +403,11 @@
|
|
404
403
|
<div class="method-source-code"
|
405
404
|
id="left-product-source">
|
406
405
|
<pre>
|
407
|
-
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
406
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 43</span>
|
407
|
+
43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">left_product</span>(<span class="ruby-identifier">other</span>)
|
408
|
+
44: (<span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">dup</span>).<span class="ruby-identifier">left_product!</span>(<span class="ruby-identifier">other</span>)
|
409
|
+
45: <span class="ruby-identifier">result</span>
|
410
|
+
46: <span class="ruby-keyword kw">end</span></pre>
|
412
411
|
</div>
|
413
412
|
|
414
413
|
</div>
|
@@ -439,12 +438,12 @@
|
|
439
438
|
<div class="method-source-code"
|
440
439
|
id="left-product--source">
|
441
440
|
<pre>
|
442
|
-
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
441
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 30</span>
|
442
|
+
30: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">left_product!</span>(<span class="ruby-identifier">other</span>)
|
443
|
+
31: <span class="ruby-ivar">@lists</span>.<span class="ruby-identifier">unshift</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">dup</span>
|
444
|
+
32: <span class="ruby-ivar">@tot_iter</span> <span class="ruby-operator">*=</span> <span class="ruby-ivar">@lists</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">size</span>
|
445
|
+
33: <span class="ruby-keyword kw">self</span>
|
446
|
+
34: <span class="ruby-keyword kw">end</span></pre>
|
448
447
|
</div>
|
449
448
|
|
450
449
|
</div>
|
@@ -475,11 +474,11 @@
|
|
475
474
|
<div class="method-source-code"
|
476
475
|
id="product-source">
|
477
476
|
<pre>
|
478
|
-
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
477
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 36</span>
|
478
|
+
36: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">product</span>(<span class="ruby-identifier">other</span>)
|
479
|
+
37: (<span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">dup</span>).<span class="ruby-identifier">product!</span>(<span class="ruby-identifier">other</span>)
|
480
|
+
38: <span class="ruby-identifier">result</span>
|
481
|
+
39: <span class="ruby-keyword kw">end</span></pre>
|
483
482
|
</div>
|
484
483
|
|
485
484
|
</div>
|
@@ -514,12 +513,12 @@
|
|
514
513
|
<div class="method-source-code"
|
515
514
|
id="product--source">
|
516
515
|
<pre>
|
517
|
-
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
516
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 22</span>
|
517
|
+
22: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">product!</span>(<span class="ruby-identifier">other</span>)
|
518
|
+
23: <span class="ruby-ivar">@lists</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">dup</span>
|
519
|
+
24: <span class="ruby-ivar">@tot_iter</span> <span class="ruby-operator">*=</span> <span class="ruby-ivar">@lists</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">size</span>
|
520
|
+
25: <span class="ruby-keyword kw">self</span>
|
521
|
+
26: <span class="ruby-keyword kw">end</span></pre>
|
523
522
|
</div>
|
524
523
|
|
525
524
|
</div>
|
data/website/doc/Iterable.html
CHANGED
@@ -38,8 +38,8 @@
|
|
38
38
|
<div class="section-body">
|
39
39
|
<ul>
|
40
40
|
|
41
|
-
<li><a href="./lib/
|
42
|
-
class="thickbox" title="lib/
|
41
|
+
<li><a href="./lib/cartesian_iterator_rb.html?TB_iframe=true&height=550&width=785"
|
42
|
+
class="thickbox" title="lib/cartesian_iterator.rb">lib/cartesian_iterator.rb</a></li>
|
43
43
|
|
44
44
|
</ul>
|
45
45
|
</div>
|
@@ -62,8 +62,6 @@
|
|
62
62
|
<h3 class="section-header">Methods</h3>
|
63
63
|
<ul class="link-list">
|
64
64
|
|
65
|
-
<li><a href="#method-i-done%3F">#done?</a></li>
|
66
|
-
|
67
65
|
<li><a href="#method-i-next">#next</a></li>
|
68
66
|
|
69
67
|
<li><a href="#method-i-raw_next">#raw_next</a></li>
|
@@ -147,43 +145,6 @@
|
|
147
145
|
<h3 class="section-header">Public Instance Methods</h3>
|
148
146
|
|
149
147
|
|
150
|
-
<div id="done--method" class="method-detail ">
|
151
|
-
<a name="method-i-done%3F"></a>
|
152
|
-
|
153
|
-
<div class="method-heading">
|
154
|
-
|
155
|
-
<span class="method-name">done?</span><span
|
156
|
-
class="method-args">()</span>
|
157
|
-
<span class="method-click-advice">click to toggle source</span>
|
158
|
-
|
159
|
-
</div>
|
160
|
-
|
161
|
-
<div class="method-description">
|
162
|
-
|
163
|
-
<p>
|
164
|
-
TODO: consider a module inclusion time solution to “count rescue
|
165
|
-
size”, for performance sake
|
166
|
-
</p>
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
<div class="method-source-code"
|
171
|
-
id="done--source">
|
172
|
-
<pre>
|
173
|
-
<span class="ruby-comment cmt"># File lib/iterable.rb, line 22</span>
|
174
|
-
22: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">done?</span>
|
175
|
-
23: <span class="ruby-ivar">@next_index</span> <span class="ruby-operator">&&</span> (<span class="ruby-ivar">@next_index</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">count</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-identifier">size</span>)<span class="ruby-operator">-</span><span class="ruby-value">1</span>)
|
176
|
-
24: <span class="ruby-keyword kw">end</span></pre>
|
177
|
-
</div>
|
178
|
-
|
179
|
-
</div>
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
</div>
|
185
|
-
|
186
|
-
|
187
148
|
<div id="next-method" class="method-detail ">
|
188
149
|
<a name="method-i-next"></a>
|
189
150
|
|
@@ -204,11 +165,11 @@ size”, for performance sake
|
|
204
165
|
<div class="method-source-code"
|
205
166
|
id="next-source">
|
206
167
|
<pre>
|
207
|
-
<span class="ruby-comment cmt"># File lib/
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
168
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 83</span>
|
169
|
+
83: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">next</span>
|
170
|
+
84: <span class="ruby-identifier">restart</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-keyword kw">defined?</span> <span class="ruby-ivar">@next_index</span>
|
171
|
+
85: <span class="ruby-identifier">raw_next</span>
|
172
|
+
86: <span class="ruby-keyword kw">end</span></pre>
|
212
173
|
</div>
|
213
174
|
|
214
175
|
</div>
|
@@ -239,11 +200,10 @@ size”, for performance sake
|
|
239
200
|
<div class="method-source-code"
|
240
201
|
id="raw-next-source">
|
241
202
|
<pre>
|
242
|
-
<span class="ruby-comment cmt"># File lib/
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
15: <span class="ruby-keyword kw">end</span></pre>
|
203
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 88</span>
|
204
|
+
88: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">raw_next</span>
|
205
|
+
89: <span class="ruby-keyword kw">self</span>[<span class="ruby-ivar">@next_index</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>]
|
206
|
+
90: <span class="ruby-keyword kw">end</span></pre>
|
247
207
|
</div>
|
248
208
|
|
249
209
|
</div>
|
@@ -274,11 +234,11 @@ size”, for performance sake
|
|
274
234
|
<div class="method-source-code"
|
275
235
|
id="restart-source">
|
276
236
|
<pre>
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
237
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 78</span>
|
238
|
+
78: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">restart</span>
|
239
|
+
79: <span class="ruby-ivar">@next_index</span> = <span class="ruby-value">1</span>
|
240
|
+
80: <span class="ruby-keyword kw">true</span>
|
241
|
+
81: <span class="ruby-keyword kw">end</span></pre>
|
282
242
|
</div>
|
283
243
|
|
284
244
|
</div>
|
@@ -309,10 +269,10 @@ size”, for performance sake
|
|
309
269
|
<div class="method-source-code"
|
310
270
|
id="restart-and-raw-next-source">
|
311
271
|
<pre>
|
312
|
-
<span class="ruby-comment cmt"># File lib/
|
313
|
-
|
314
|
-
|
315
|
-
|
272
|
+
<span class="ruby-comment cmt"># File lib/cartesian_iterator.rb, line 92</span>
|
273
|
+
92: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">restart_and_raw_next</span>
|
274
|
+
93: <span class="ruby-keyword kw">self</span>[<span class="ruby-ivar">@next_index</span> = <span class="ruby-value">0</span>]
|
275
|
+
94: <span class="ruby-keyword kw">end</span></pre>
|
316
276
|
</div>
|
317
277
|
|
318
278
|
</div>
|
@@ -183,7 +183,7 @@ sudo gem install cartesian
|
|
183
183
|
(The MIT License)
|
184
184
|
</p>
|
185
185
|
<p>
|
186
|
-
Copyright © 2006-
|
186
|
+
Copyright © 2006-2011 Adriano Mitre <adriano.mitre@gmail.com>
|
187
187
|
</p>
|
188
188
|
<p>
|
189
189
|
Permission is hereby granted, free of charge, to any person obtaining a
|
data/website/doc/created.rid
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
|
-
README.rdoc
|
3
|
-
lib/cartesian.rb
|
4
|
-
lib/cartesian_iterator.rb
|
5
|
-
lib/grid_search.rb
|
6
|
-
lib/iterable.rb Sun, 15 Apr 2012 03:31:27 -0300
|
1
|
+
Fri, 07 Jan 2011 13:53:06 -0200
|
2
|
+
README.rdoc Fri, 07 Jan 2011 02:46:43 -0200
|
3
|
+
lib/cartesian.rb Fri, 07 Jan 2011 13:53:03 -0200
|
4
|
+
lib/cartesian_iterator.rb Fri, 07 Jan 2011 02:46:43 -0200
|
5
|
+
lib/grid_search.rb Wed, 05 Jan 2011 06:07:10 -0200
|
data/website/doc/index.html
CHANGED
@@ -73,8 +73,6 @@
|
|
73
73
|
|
74
74
|
<li><a href="Cartesian.html#method-i-cartesian">#cartesian — Cartesian</a></li>
|
75
75
|
|
76
|
-
<li><a href="Iterable.html#method-i-done%3F">#done? — Iterable</a></li>
|
77
|
-
|
78
76
|
<li><a href="CartesianIterator.html#method-i-dup">#dup — CartesianIterator</a></li>
|
79
77
|
|
80
78
|
<li><a href="CartesianIterator.html#method-i-each">#each — CartesianIterator</a></li>
|
@@ -24,15 +24,13 @@
|
|
24
24
|
<div id="metadata">
|
25
25
|
<dl>
|
26
26
|
<dt class="modified-date">Last Modified</dt>
|
27
|
-
<dd class="modified-date">
|
27
|
+
<dd class="modified-date">2011-01-07 02:46:43 -0200</dd>
|
28
28
|
|
29
29
|
|
30
30
|
<dt class="requires">Requires</dt>
|
31
31
|
<dd class="requires">
|
32
32
|
<ul>
|
33
33
|
|
34
|
-
<li>iterable</li>
|
35
|
-
|
36
34
|
</ul>
|
37
35
|
</dd>
|
38
36
|
|
data/website/index.html
CHANGED
@@ -1,5 +1,128 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
+
<title>
|
8
|
+
|
9
|
+
</title>
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
+
<style>
|
1
12
|
|
13
|
+
</style>
|
14
|
+
<script type="text/javascript">
|
15
|
+
window.onload = function() {
|
16
|
+
settings = {
|
17
|
+
tl: { radius: 10 },
|
18
|
+
tr: { radius: 10 },
|
19
|
+
bl: { radius: 10 },
|
20
|
+
br: { radius: 10 },
|
21
|
+
antiAlias: true,
|
22
|
+
autoPad: true,
|
23
|
+
validTags: ["div"]
|
24
|
+
}
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
26
|
+
versionBox.applyCornersToAll();
|
27
|
+
}
|
28
|
+
</script>
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="main">
|
2
32
|
|
3
|
-
|
4
|
-
|
33
|
+
<h1></h1>
|
34
|
+
<div id="version" class="clickable" onclick='document.location = "http://github.com/adrianomitre/cartesian"; return false'>
|
35
|
+
<p>Get Version</p>
|
36
|
+
<a href="http://github.com/adrianomitre/cartesian" class="numbers">0.6.4</a>
|
37
|
+
</div>
|
38
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script><h1>cartesian</h1>
|
39
|
+
<h3>Cartesian products in Ruby</h3>
|
40
|
+
<h2>What</h2>
|
41
|
+
<p>Provides methods for the calculation of the cartesian producted between<br />
|
42
|
+
two or more enumerable objects. Includes grid search optimization methods.<br />
|
43
|
+
It can also be easily and conveniently mixed-in into any enumerable class.</p>
|
44
|
+
<h2>Installing</h2>
|
45
|
+
<p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">cartesian</span></pre></p>
|
46
|
+
<h2>The basics</h2>
|
47
|
+
<p><pre class='syntax'><span class="constant">Cartesian</span><span class="punct">::</span><span class="ident">product</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="number">3</span><span class="punct">,</span><span class="number">4</span><span class="punct">]</span> <span class="comment">#=> [[1, 3], [1, 4], [2, 3], [2, 4]]</span></pre></p>
|
48
|
+
<h2>Demonstration of usage</h2>
|
49
|
+
<p>One can use the Cartesian module directly<br />
|
50
|
+
<pre class='syntax'>
|
51
|
+
<span class="ident">require</span> <span class="punct">'</span><span class="string">cartesian</span><span class="punct">'</span>
|
52
|
+
<span class="ident">foo</span> <span class="punct">=</span> <span class="punct">[</span><span class="number">1</span><span class="punct">,</span> <span class="number">2</span><span class="punct">]</span>
|
53
|
+
<span class="ident">bar</span> <span class="punct">=</span> <span class="punct">["</span><span class="string">a</span><span class="punct">",</span> <span class="punct">"</span><span class="string">b</span><span class="punct">"]</span>
|
54
|
+
<span class="constant">Cartesian</span><span class="punct">::</span><span class="ident">product</span><span class="punct">(</span><span class="ident">foo</span><span class="punct">,</span> <span class="ident">bar</span><span class="punct">)</span> <span class="comment">#=> [[1, "a"], [1, "b"], [2, "a"], [2, "b"]]</span>
|
55
|
+
</pre></p>
|
56
|
+
<p>or use the methods provided by the mixin in the Array class</p>
|
57
|
+
<p><pre class='syntax'>
|
58
|
+
<span class="ident">foo</span><span class="punct">.</span><span class="ident">cartesian</span><span class="punct">(</span><span class="ident">bar</span><span class="punct">)</span> <span class="comment">#=> [[1, "a"], [1, "b"], [2, "a"], [2, "b"]]</span>
|
59
|
+
</pre></p>
|
60
|
+
<p>which include the short’n’sweet <em>x</em> method</p>
|
61
|
+
<p><pre class='syntax'>
|
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> <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
|
+
<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
|
+
<span class="keyword">end</span> <span class="comment">#=> true</span>
|
66
|
+
<span class="ident">v</span> <span class="comment">#=> [[1, 3], [1, 4], [2, 3], [2, 4]]</span>
|
67
|
+
</pre></p>
|
68
|
+
<p>The ‘**’ operator provides a convenient way of iterating multi-dimensionally over the same array or range</p>
|
69
|
+
<p><pre class='syntax'>
|
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>
|
75
|
+
</pre></p>
|
76
|
+
<p>Finally, the grid search methods</p>
|
77
|
+
<p><pre class='syntax'>
|
78
|
+
<span class="ident">require</span> <span class="punct">'</span><span class="string">grid_search</span><span class="punct">'</span>
|
79
|
+
<span class="punct">[-</span><span class="number">1</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">2</span><span class="punct">].</span><span class="ident">argmax</span> <span class="punct">{|</span><span class="ident">x</span><span class="punct">|</span> <span class="ident">x</span><span class="punct">**</span><span class="number">2</span> <span class="punct">}</span> <span class="comment">#=> 2</span>
|
80
|
+
<span class="punct">[-</span><span class="number">1</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">2</span><span class="punct">].</span><span class="ident">argmin</span> <span class="punct">{|</span><span class="ident">x</span><span class="punct">|</span> <span class="ident">x</span><span class="punct">.</span><span class="ident">abs</span> <span class="punct">}</span> <span class="comment">#=> 0</span></pre><br />
|
81
|
+
</pre></p>
|
82
|
+
<p>For more examples and details, see the RDoc-generated documentation <a href="doc/index.html">here</a>.</p>
|
83
|
+
<h2>How to submit patches</h2>
|
84
|
+
<p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people’s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
|
85
|
+
<p>You can fetch the source from:</p>
|
86
|
+
<ul>
|
87
|
+
<li>github: <a href="http://github.com/adrianomitre/cartesian/tree/master">http://github.com/adrianomitre/cartesian/tree/master</a></li>
|
88
|
+
</ul>
|
89
|
+
<pre>git clone git@github.com:adrianomitre/cartesian.git</pre>
|
90
|
+
<h3>Build and test instructions</h3>
|
91
|
+
<pre>cd cartesian
|
92
|
+
rake test
|
93
|
+
rake install_gem</pre>
|
94
|
+
<h2>License</h2>
|
95
|
+
<p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
|
96
|
+
<h2>Contact</h2>
|
97
|
+
<p>Comments are welcome. Send an email to <a href="mailto:adriano.mitre@gmail.com">Adriano Mitre</a>.</p>
|
98
|
+
<div align=right>
|
99
|
+
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
100
|
+
<input type="hidden" name="cmd" value="_s-xclick">
|
101
|
+
<input type="hidden" name="hosted_button_id" value="9ABWULT73Y7AC">
|
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!">
|
103
|
+
<p><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"></p>
|
104
|
+
</form>
|
105
|
+
</div>
|
106
|
+
<p class="coda">
|
107
|
+
<a href="http://github.com/adrianomitre">Adriano Mitre</a>, 7th January 2011<br>
|
108
|
+
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
109
|
+
</p>
|
110
|
+
</div>
|
5
111
|
|
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>
|
126
|
+
|
127
|
+
</body>
|
128
|
+
</html>
|
metadata
CHANGED
@@ -1,82 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cartesian
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.6
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.6.7
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Adriano Mitre
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2013-01-06 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: rdoc
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '3.10'
|
22
|
-
type: :development
|
23
17
|
prerelease: false
|
24
|
-
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
19
|
none: false
|
26
|
-
requirements:
|
20
|
+
requirements:
|
27
21
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: newgem
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 1.5.3
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "3.10"
|
38
24
|
type: :development
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: newgem
|
39
28
|
prerelease: false
|
40
|
-
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
30
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
45
34
|
version: 1.5.3
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: hoe
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '3.0'
|
54
35
|
type: :development
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: hoe
|
55
39
|
prerelease: false
|
56
|
-
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
41
|
none: false
|
58
|
-
requirements:
|
42
|
+
requirements:
|
59
43
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
|
63
|
-
|
64
|
-
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "3.4"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id003
|
48
|
+
description: |-
|
49
|
+
Provides methods for the calculation of the cartesian producted between two
|
65
50
|
or more enumerable objects. Includes grid search optimization methods.
|
66
|
-
|
67
|
-
|
68
|
-
email:
|
51
|
+
It can also be easily and conveniently mixed in into any enumerable class.
|
52
|
+
email:
|
69
53
|
- adriano.mitre@gmail.com
|
70
54
|
executables: []
|
55
|
+
|
71
56
|
extensions: []
|
72
|
-
|
57
|
+
|
58
|
+
extra_rdoc_files:
|
73
59
|
- History.txt
|
74
60
|
- Manifest.txt
|
75
61
|
- PostInstall.txt
|
76
62
|
- README.rdoc
|
77
63
|
- Wishlist.txt
|
78
64
|
- website/index.txt
|
79
|
-
files:
|
65
|
+
files:
|
80
66
|
- History.txt
|
81
67
|
- Manifest.txt
|
82
68
|
- PostInstall.txt
|
@@ -127,36 +113,37 @@ files:
|
|
127
113
|
- .gemtest
|
128
114
|
homepage: http://adrianomitre.github.com/cartesian/website/index.html
|
129
115
|
licenses: []
|
116
|
+
|
130
117
|
post_install_message: PostInstall.txt
|
131
|
-
rdoc_options:
|
118
|
+
rdoc_options:
|
132
119
|
- --main
|
133
120
|
- README.rdoc
|
134
|
-
require_paths:
|
121
|
+
require_paths:
|
135
122
|
- lib
|
136
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
137
124
|
none: false
|
138
|
-
requirements:
|
139
|
-
- -
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version:
|
142
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: "0"
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
130
|
none: false
|
144
|
-
requirements:
|
145
|
-
- -
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version:
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: "0"
|
148
135
|
requirements: []
|
136
|
+
|
149
137
|
rubyforge_project: cartesian
|
150
|
-
rubygems_version: 1.8.
|
138
|
+
rubygems_version: 1.8.24
|
151
139
|
signing_key:
|
152
140
|
specification_version: 3
|
153
|
-
summary: Provides methods for the calculation of the cartesian producted between two
|
154
|
-
|
155
|
-
test_files:
|
156
|
-
- test/test_suite.rb
|
141
|
+
summary: Provides methods for the calculation of the cartesian producted between two or more enumerable objects
|
142
|
+
test_files:
|
157
143
|
- test/test_iterable.rb
|
144
|
+
- test/test_suite.rb
|
158
145
|
- test/test_grid_search.rb
|
159
|
-
- test/test_cartesian.rb
|
160
|
-
- test/test_extensions.rb
|
161
146
|
- test/test_helper.rb
|
147
|
+
- test/test_extensions.rb
|
148
|
+
- test/test_cartesian.rb
|
162
149
|
- test/test_cartesian_iterator.rb
|