numru-misc 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +41 -0
- data/LICENSE.txt +34 -0
- data/Rakefile +38 -0
- data/doc/emath.html +26 -0
- data/doc/index.html +83 -0
- data/doc/keywordopt.html +179 -0
- data/doc/md_iterators.html +86 -0
- data/doc/misc.html +83 -0
- data/install.rb +104 -0
- data/lib/numru/misc.rb +4 -0
- data/lib/numru/misc/emath.rb +75 -0
- data/lib/numru/misc/keywordopt.rb +498 -0
- data/lib/numru/misc/md_iterators.rb +180 -0
- data/lib/numru/misc/misc.rb +196 -0
- data/makedoc.csh +6 -0
- metadata +97 -0
data/ChangeLog
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
Mon Aug 11 2011 T Horinouchi
|
2
|
+
* numru-misc-0.1.1 released (relase tag: numru-misc-0_1_1)
|
3
|
+
* LICENCE.txt: Added (BSD 2-clause licence)
|
4
|
+
|
5
|
+
Mon Mar 15 2010 T Horinouchi
|
6
|
+
* numru-misc-0.1.0 released (relase tag: numru-misc-0_1_0)
|
7
|
+
|
8
|
+
2008-02-05 S Otsuka
|
9
|
+
* install.rb: for ruby 1.9
|
10
|
+
|
11
|
+
Fri May 13 2005 T Horinouchi
|
12
|
+
* numru-misc-0.0.6 released (relase tag: numru-misc-0_0_6)
|
13
|
+
* keywordopt.rb: KeywordOpt#keys --> public (returns @keys.dup).
|
14
|
+
Added KeywordOpt#select_keys.
|
15
|
+
Tue Aug 12 2004 T Horinouchi
|
16
|
+
* keywordopt.rb: modified KeywordOptAutoHelp#set to show help
|
17
|
+
message if 'help'==true.
|
18
|
+
Tue Aug 10 2004 T Horinouchi
|
19
|
+
* numru-misc-0.0.5 released (relase tag: numru-misc-0_0_5)
|
20
|
+
* package renamed from misc to numru-misc: started new CVS
|
21
|
+
Fri Mar 19 2004 T Horinouchi
|
22
|
+
* emath.rb: basically, a refactoring
|
23
|
+
* install.rb: debug
|
24
|
+
Wed Dec 10 2003 T Horinouchi
|
25
|
+
* misc-0.0.4 released
|
26
|
+
* emath.rb: NumRu::EMath --> NumRu::Misc::EMath
|
27
|
+
Documentation.
|
28
|
+
* misc.rb: documentation update for EMath.
|
29
|
+
Tue Oct 7 2003 T Horinouchi
|
30
|
+
* emath.rb: created
|
31
|
+
Mon Sep 1 2003 T Horinouchi
|
32
|
+
* misc-0.0.3 released
|
33
|
+
* keywordopt.rb: minor debug of the help messaging in
|
34
|
+
KeywordOptAutoHelp#interpret
|
35
|
+
Tue Aug 26 2003 T Horinouchi
|
36
|
+
* keywordopt.rb: added class KeywordOptAutoHelp. refined help.
|
37
|
+
allowed KeywordOpt.new to accept another KeywordOpt.
|
38
|
+
Mon Aug 25 2003 T Horinouchi
|
39
|
+
* keywordopt.rb: KeywordOpt#interpret slightly modified
|
40
|
+
Mon Aug 25 2003 T Horinouchi
|
41
|
+
* version 0.0.2 released
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
NumRu::Misc is copyrighted free software by Takeshi Horinouchi and
|
2
|
+
GFD Dennou Club (http://www.gfd-dennou.org/).
|
3
|
+
|
4
|
+
Copyright 2011 (C) Takeshi Horinouchi and GFD Dennou Club
|
5
|
+
(http://www.gfd-dennou.org/) All rights reserved.
|
6
|
+
|
7
|
+
Redistribution and use in source and binary forms, with or without
|
8
|
+
modification, are permitted provided that the following conditions are
|
9
|
+
met:
|
10
|
+
|
11
|
+
1. Redistributions of source code must retain the above copyright
|
12
|
+
notice, this list of conditions and the following disclaimer.
|
13
|
+
|
14
|
+
2. Redistributions in binary form must reproduce the above copyright
|
15
|
+
notice, this list of conditions and the following disclaimer in
|
16
|
+
the documentation and/or other materials provided with the
|
17
|
+
distribution.
|
18
|
+
|
19
|
+
THIS SOFTWARE IS PROVIDED BY GFD DENNOU CLUB AND CONTRIBUTORS ``AS IS''
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
21
|
+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
22
|
+
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GFD DENNOU CLUB OR
|
23
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
24
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
25
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
26
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
27
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
28
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
29
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
|
31
|
+
The views and conclusions contained in the software and documentation
|
32
|
+
are those of the authors and should not be interpreted as representing
|
33
|
+
official policies, either expressed or implied, of Takeshi Horinouchi
|
34
|
+
and GFD Dennou Club.
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rake/gempackagetask'
|
2
|
+
|
3
|
+
NAME = 'numru-misc'
|
4
|
+
VER = '0.1.1'
|
5
|
+
|
6
|
+
PKG_FILES = FileList[
|
7
|
+
'**',
|
8
|
+
'lib/**/*',
|
9
|
+
'doc/**/*'
|
10
|
+
]
|
11
|
+
|
12
|
+
spec = Gem::Specification.new do |s|
|
13
|
+
s.name = NAME
|
14
|
+
s.version = VER
|
15
|
+
s.authors = ["Takeshi Horinouchi"]
|
16
|
+
s.email = ['eriko@gfd-dennou.org']
|
17
|
+
s.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/numru-misc/'
|
18
|
+
s.licenses = ["Takeshi Horinouchi", "GFD Dennou Club"]
|
19
|
+
s.platform = Gem::Platform::RUBY
|
20
|
+
s.summary = %q{Collection of miscellaneous functions and classes to facilitate programming.}
|
21
|
+
s.description = %q{Miscellaneous functions and classes to help Ruby programming. To be used in other NumRu libraries.}
|
22
|
+
|
23
|
+
s.files = PKG_FILES.to_a
|
24
|
+
s.require_paths = ['lib']
|
25
|
+
#s.test_files = Dir.glob("test/*")
|
26
|
+
#s.has_rdoc = true
|
27
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.6")
|
28
|
+
s.add_runtime_dependency(%q<narray>, [">= 0"])
|
29
|
+
#s.add_runtime_dependency(%q<narray_miss>, [">= 0"])
|
30
|
+
#s.extra_rdoc_files = ['README']
|
31
|
+
|
32
|
+
#s.extensions << "install.rb"
|
33
|
+
end
|
34
|
+
|
35
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
36
|
+
pkg.gem_spec = spec
|
37
|
+
pkg.need_tar = true
|
38
|
+
end
|
data/doc/emath.html
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0" ?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
<head>
|
7
|
+
<title>lib/numru/misc/emath.rb</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<h1><a name="label:0" id="label:0">module NumRu::Misc::EMath</a></h1><!-- RDLabel: "module NumRu::Misc::EMath" -->
|
11
|
+
<p>To be included instead of the Math predefined module (or NMath in NArray).
|
12
|
+
Unlike Math and NMath, EMath handles unknown classes by calling its
|
13
|
+
native instance method (assuming the same name).</p>
|
14
|
+
<p>Therefore, if included, its function (module method) is used as:</p>
|
15
|
+
<pre>cos( obj )</pre>
|
16
|
+
<p>and so on. If obj is not of a supported class, EMath calls, obj.cos in
|
17
|
+
this case. (If cos is not a method of obj, then an exception is
|
18
|
+
raised.) Supported classes are Numeric (by Math) and NArray (by
|
19
|
+
NMath). EMath stands for "good Math" (for obvious reason for a
|
20
|
+
Japanese).</p>
|
21
|
+
<p>Note: as for atan2(a,b), a.atan2(b) will be called if a or b
|
22
|
+
is not supported. This is the case for all functions that take
|
23
|
+
two or more arguments.</p>
|
24
|
+
|
25
|
+
</body>
|
26
|
+
</html>
|
data/doc/index.html
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
<?xml version="1.0" ?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
<head>
|
7
|
+
<title>lib/numru/misc/misc.rb</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<h1><a name="label:0" id="label:0">module NumRu::Misc</a></h1><!-- RDLabel: "module NumRu::Misc" -->
|
11
|
+
<h2><a name="label:1" id="label:1">Overview</a></h2><!-- RDLabel: "Overview" -->
|
12
|
+
<p>Miscellaneous functions and classes to facilitate programming.</p>
|
13
|
+
<h2><a name="label:2" id="label:2">Index</a></h2><!-- RDLabel: "Index" -->
|
14
|
+
<p>CLASSES</p>
|
15
|
+
<ul>
|
16
|
+
<li><a href="keywordopt.html">class KeywordOpt</a>
|
17
|
+
to support keyward arguments with default values.</li>
|
18
|
+
<li><a href="narray_ext.html">class NArray (enhancement of NArray made by M Tanaka)</a></li>
|
19
|
+
</ul>
|
20
|
+
<p>MODULES</p>
|
21
|
+
<ul>
|
22
|
+
<li><a href="md_iterators.html">module MD_Iterators</a> A Mixin for classes with
|
23
|
+
multi-dimension indexing support (such as NArray).</li>
|
24
|
+
<li><a href="emath.html">module EMath</a>
|
25
|
+
To be included instead of the Math predefined module (or NMath in NArray).
|
26
|
+
Unlike Math and NMath, EMath handles unknown classes by calling its
|
27
|
+
native instance method (assuming the same name).</li>
|
28
|
+
</ul>
|
29
|
+
<p>MODULE FUNCTIONS</p>
|
30
|
+
<ul>
|
31
|
+
<li><a href="#label:4">check_shape_consistency</a></li>
|
32
|
+
</ul>
|
33
|
+
<h2><a name="label:3" id="label:3">Module functions</a></h2><!-- RDLabel: "Module functions" -->
|
34
|
+
<dl>
|
35
|
+
<dt><a name="label:4" id="label:4"><code>check_shape_consistency(<var>cshapes</var>, *<var>args</var>)</code></a></dt><!-- RDLabel: "check_shape_consistency" -->
|
36
|
+
<dd>
|
37
|
+
<p>Check the consistency of array shapes (multi-dim such as NArray).
|
38
|
+
Exception is raised if inconsistent.</p>
|
39
|
+
<p>ARGUMENTS</p>
|
40
|
+
<ul>
|
41
|
+
<li>cshapes (String) : description of the shapes of the args.
|
42
|
+
Delimited by one-or-more spaces between arrays,
|
43
|
+
and the shape of each array is delimited by a comma. The lengths are
|
44
|
+
expressed with string names as identifiers (in that case, length
|
45
|
+
values are unquestioned) or specified as positive integers.
|
46
|
+
Use '..' or '...' for repetition of the last shape.
|
47
|
+
See EXAMPLES below.</li>
|
48
|
+
<li>args (multi-dim arrays such as NArray): arrays to be checked</li>
|
49
|
+
</ul>
|
50
|
+
<p>RETURN VALUE</p>
|
51
|
+
<ul>
|
52
|
+
<li>nil</li>
|
53
|
+
</ul>
|
54
|
+
<p>POSSIBLE EXCEPTIONS</p>
|
55
|
+
<ul>
|
56
|
+
<li>exception is raised if cshapes and args are inconsistent:
|
57
|
+
<ul>
|
58
|
+
<li>RuntimeError, if the arrays do not have shapes specified by cshapes.</li>
|
59
|
+
<li>ArgeumentError, if the number of args are inconsistent with cshapes.
|
60
|
+
This is likely a coding error of the user.</li>
|
61
|
+
</ul></li>
|
62
|
+
</ul>
|
63
|
+
<p>EXAMPLES</p>
|
64
|
+
<ul>
|
65
|
+
<li><p>to check whether three arrays u, v, and w are shaped as
|
66
|
+
u[nx], v[ny], and w[nx,ny], where nx and ny are any integer:</p>
|
67
|
+
<pre>NumRu::Misc.check_shape_consistency('nx ny nx,ny',u,v,w)</pre>
|
68
|
+
<p>Or equivalently,</p>
|
69
|
+
<pre>NumRu::Misc.check_shape_consistency('m n m,n',u,v,w)</pre>
|
70
|
+
<p>because actual strings does not matter.</p></li>
|
71
|
+
<li><p>To specify fixed lengths, use integers instead of names:</p>
|
72
|
+
<pre>NumRu::Misc.check_shape_consistency('4 n 4,n',u,v,w)</pre>
|
73
|
+
<p>In this case, u,v,w must have shapes [4], [ny], and [4,ny],
|
74
|
+
where ny is any length.</p></li>
|
75
|
+
<li><p>Use '..' or '...' to repeat the same shape:</p>
|
76
|
+
<pre>NumRu::Misc.check_shape_consistency('nx,ny ...',u,v,w)</pre>
|
77
|
+
<p>This ensures that u, v, and w are 2D arrays with the same shape.
|
78
|
+
Note: '..' and '...' are the same, so you can use whichever you like.</p></li>
|
79
|
+
</ul></dd>
|
80
|
+
</dl>
|
81
|
+
|
82
|
+
</body>
|
83
|
+
</html>
|
data/doc/keywordopt.html
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
<?xml version="1.0" ?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
<head>
|
7
|
+
<title>lib/numru/misc/keywordopt.rb</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<h2><a name="label:0" id="label:0">Index</a></h2><!-- RDLabel: "Index" -->
|
11
|
+
<ul>
|
12
|
+
<li><a href="#label:1">class NumRu::Misc::KeywordOpt</a></li>
|
13
|
+
<li><a href="#label:13">class NumRu::Misc::KeywordOptAutoHelp < NumRu::Misc::KeywordOpt</a></li>
|
14
|
+
</ul>
|
15
|
+
<h1><a name="label:1" id="label:1">class NumRu::Misc::KeywordOpt</a></h1><!-- RDLabel: "class NumRu::Misc::KeywordOpt" -->
|
16
|
+
<h2><a name="label:2" id="label:2">Overview</a></h2><!-- RDLabel: "Overview" -->
|
17
|
+
<p>A class to facilitate optional keyword arguments. More specifically,
|
18
|
+
it helps the use of a Hash to mimic the keyword argument system.
|
19
|
+
With this, you can set default values and description to each
|
20
|
+
keyword argument.</p>
|
21
|
+
<h2><a name="label:3" id="label:3">Classes defined supplementarilly</a></h2><!-- RDLabel: "Classes defined supplementarilly" -->
|
22
|
+
<h3><a name="label:4" id="label:4">class NumRu::Misc::HelpMessagingException < StandardError</a></h3><!-- RDLabel: "class NumRu::Misc::HelpMessagingException < StandardError" -->
|
23
|
+
<p>This is for your convenience. See the usage example below.</p>
|
24
|
+
<h2><a name="label:5" id="label:5">Usage example</a></h2><!-- RDLabel: "Usage example" -->
|
25
|
+
<p>Suppose that you introduce keyword arguments "flag" and "number"
|
26
|
+
to the method "hoge" in a class/module Foo. It can be done as
|
27
|
+
follows:</p>
|
28
|
+
<pre>require 'numru/misc' # or, specifically, require 'numru/misc/keywordopt'
|
29
|
+
include NumRu
|
30
|
+
|
31
|
+
class Foo
|
32
|
+
@@opt_hoge = Misc::KeywordOpt.new(
|
33
|
+
['flag', false, 'whether or not ...'],
|
34
|
+
['number', 1, 'number of ...'],
|
35
|
+
['help', false, 'show help message']
|
36
|
+
)
|
37
|
+
def hoge(regular_arg1, regular_arg2, options=nil)
|
38
|
+
opt = @@opt_hoge.interpret(options)
|
39
|
+
if opt['help']
|
40
|
+
puts @@opt_hoge.help
|
41
|
+
puts ' Current values='+opt.inspect
|
42
|
+
raise Misc::HelpMessagingException, '** show help message and raise **'
|
43
|
+
end
|
44
|
+
# do what you want below
|
45
|
+
# (options are set in the Hash opt: opt['flag'] and opt['number'])
|
46
|
+
end
|
47
|
+
end</pre>
|
48
|
+
<p>Here, the options are defined in the class variable @@opt_hoge
|
49
|
+
with option names, default values, and descriptions (for help
|
50
|
+
messaging). One can use the method hoge as follows:</p>
|
51
|
+
<pre>foo = Foo.new
|
52
|
+
...
|
53
|
+
x = ...
|
54
|
+
y = ...
|
55
|
+
...
|
56
|
+
foo.hoge( x, y, {'flag'=>true, 'number'=>10} )</pre>
|
57
|
+
<p>Or equivalently,</p>
|
58
|
+
<pre>foo.hoge( x, y, 'flag'=>true, 'number'=>10 )</pre>
|
59
|
+
<p>because '{}' can be omitted here. </p>
|
60
|
+
<p>Tails of options names can be shortened as long as unambiguous:</p>
|
61
|
+
<pre>foo.hoge( x, y, 'fla'=>true, 'num'=>10 )</pre>
|
62
|
+
<p>To show the help message, call</p>
|
63
|
+
<pre>foo.hoge( x, y, 'help'=>true )</pre>
|
64
|
+
<p>This will cause the following help message printed with the
|
65
|
+
exception HelpMessagingException raised.</p>
|
66
|
+
<pre><< Description of options >>
|
67
|
+
option name => default value description:
|
68
|
+
"flag" => false whether or not ...
|
69
|
+
"number" => 1 number of ...
|
70
|
+
"help" => false show help message
|
71
|
+
Current values={"help"=>true, "number"=>1, "flag"=>false}
|
72
|
+
NumRu::Misc::HelpMessagingException: ** help messaging done **
|
73
|
+
from (irb):78:in "hoge"
|
74
|
+
from (irb):83</pre>
|
75
|
+
<p>Do not affraid to write long descriptions. The help method
|
76
|
+
breaks lines nicely if they are long.</p>
|
77
|
+
<h2><a name="label:6" id="label:6">Class methods</a></h2><!-- RDLabel: "Class methods" -->
|
78
|
+
<dl>
|
79
|
+
<dt><a name="label:7" id="label:7"><code>KeywordOpt.new( *<var>args</var> )</code></a></dt><!-- RDLabel: "KeywordOpt.new" -->
|
80
|
+
<dd>
|
81
|
+
<p>Constructor.</p>
|
82
|
+
<p>ARGUMENTS</p>
|
83
|
+
<ul>
|
84
|
+
<li><p>args : (case 1) arrays of two or three elements: [option name,
|
85
|
+
default value, description ], or [option name, default value]
|
86
|
+
if you do not want to write descriptions. Option names and
|
87
|
+
descriptions must be String. (case 2) another KeywordOpt.
|
88
|
+
Cases 1 and 2 can be mixed. </p>
|
89
|
+
<p>When case 2, a link to the other KeywordOpt is kept. Thus, change
|
90
|
+
of values in it is reflected to the current one. However,
|
91
|
+
the link is deleted if values are changed by <a href="#label:10">set</a>.</p></li>
|
92
|
+
</ul>
|
93
|
+
<p>RETURN VALUE</p>
|
94
|
+
<ul>
|
95
|
+
<li>a KeywordOpt object</li>
|
96
|
+
</ul>
|
97
|
+
<p>EXAMPLE</p>
|
98
|
+
<ul>
|
99
|
+
<li>case 1</li>
|
100
|
+
</ul></dd>
|
101
|
+
</dl>
|
102
|
+
<pre>opt = Misc::KeywordOpt.new(
|
103
|
+
['flag', false, 'whether or not ...'],
|
104
|
+
['help', false, 'show help message']
|
105
|
+
)</pre>
|
106
|
+
<ul>
|
107
|
+
<li><p>case 2</p>
|
108
|
+
<pre>opt = Misc::KeywordOpt.new( optA, optB )</pre></li>
|
109
|
+
<li>case 1 & 2</li>
|
110
|
+
</ul>
|
111
|
+
<pre>opt = Misc::KeywordOpt.new(
|
112
|
+
['flag', false, 'whether or not ...'],
|
113
|
+
optA
|
114
|
+
)</pre>
|
115
|
+
<h2><a name="label:8" id="label:8">Methods</a></h2><!-- RDLabel: "Methods" -->
|
116
|
+
<dl>
|
117
|
+
<dt><a name="label:9" id="label:9"><code>interpret(<var>hash</var>)</code></a></dt><!-- RDLabel: "interpret" -->
|
118
|
+
<dd>
|
119
|
+
<p>Interprets a hash that specifies option values.</p>
|
120
|
+
<p>ARGUMENTS</p>
|
121
|
+
<ul>
|
122
|
+
<li>hash (Hash or nil) : a hash with string keys matching option names
|
123
|
+
(initializedwhen constructed). The matching is case sensitive and done
|
124
|
+
such that the tail of a option name can be omitted as long as
|
125
|
+
unambiguous (for example, 'num' for 'number').
|
126
|
+
If the argument is nil, the current values are returned.
|
127
|
+
If there are two options like 'max' and 'maxval', to use
|
128
|
+
a key 'max' (identical to the former paramer) is allowed, although
|
129
|
+
it matches 'maxval' as well. (Again 'ma' is regarded ambiguous.)</li>
|
130
|
+
</ul>
|
131
|
+
<p>RETURN VALUE</p>
|
132
|
+
<ul>
|
133
|
+
<li>a Hash containing the option values (default values overwritten
|
134
|
+
with hash).</li>
|
135
|
+
</ul>
|
136
|
+
<p>POSSIBLE EXCEPTION</p>
|
137
|
+
<ul>
|
138
|
+
<li>hash has a key that does not match any of the option names.</li>
|
139
|
+
<li>hash has a key that is ambiguous</li>
|
140
|
+
</ul></dd>
|
141
|
+
<dt><a name="label:10" id="label:10"><code>set(<var>hash</var>)</code></a></dt><!-- RDLabel: "set" -->
|
142
|
+
<dd>
|
143
|
+
<p>Similar to <a href="#label:9">interpret</a> but changes internal values.</p>
|
144
|
+
<p>ARGUMENTS</p>
|
145
|
+
<ul>
|
146
|
+
<li>hash (Hash) : see <a href="#label:9">interpret</a>. (Here, nil is not permitted though)</li>
|
147
|
+
</ul>
|
148
|
+
<p>RETURN VALUE</p>
|
149
|
+
<ul>
|
150
|
+
<li>a Hash containing the values replaced (the ones before calling this
|
151
|
+
method)</li>
|
152
|
+
</ul>
|
153
|
+
<p>POSSIBLE EXCEPTION</p>
|
154
|
+
<ul>
|
155
|
+
<li>the argument is not a Hash</li>
|
156
|
+
<li>others are same as in <a href="#label:9">interpret</a></li>
|
157
|
+
</ul></dd>
|
158
|
+
<dt><a name="label:11" id="label:11"><code>help</code></a></dt><!-- RDLabel: "help" -->
|
159
|
+
<dd>
|
160
|
+
<p>Returns a help message</p>
|
161
|
+
<p>RETURN VALUE</p>
|
162
|
+
<ul>
|
163
|
+
<li>a String describing the option names, default values, and descriptions</li>
|
164
|
+
</ul></dd>
|
165
|
+
<dt><a name="label:12" id="label:12"><code>[<var>key</var>]</code></a></dt><!-- RDLabel: "[]" -->
|
166
|
+
<dd>
|
167
|
+
<p>Returns a value associated with the key (exact matching unlike interpret)</p></dd>
|
168
|
+
</dl>
|
169
|
+
<h1><a name="label:13" id="label:13">class NumRu::Misc::KeywordOptAutoHelp < NumRu::Misc::KeywordOpt</a></h1><!-- RDLabel: "class NumRu::Misc::KeywordOptAutoHelp < NumRu::Misc::KeywordOpt" -->
|
170
|
+
<p>Same as <a href="#label:1">class NumRu::Misc::KeywordOpt</a>, but the method <a href="#label:9">interpret</a>
|
171
|
+
shows a help message and raise an exception if option 'help' is provided
|
172
|
+
as an argument and is not nil or false
|
173
|
+
(<code>NumRu::Misc::HelpMessagingException < StandardError</code>)
|
174
|
+
or if the arguments cannot be interpreted correctly (<code>ArgumentError</code>).
|
175
|
+
Option 'help' is automatically defined, so you do not have to define it
|
176
|
+
yourself.</p>
|
177
|
+
|
178
|
+
</body>
|
179
|
+
</html>
|
@@ -0,0 +1,86 @@
|
|
1
|
+
<?xml version="1.0" ?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
<head>
|
7
|
+
<title>lib/numru/misc/md_iterators.rb</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<h1><a name="label:0" id="label:0">module NumRu::Misc::MD_Iterators</a></h1><!-- RDLabel: "module NumRu::Misc::MD_Iterators" -->
|
11
|
+
<p>A Mixin.
|
12
|
+
To be included in a class with multi-dimension indexing support
|
13
|
+
(such as NArray).</p>
|
14
|
+
<h2><a name="label:1" id="label:1">Index</a></h2><!-- RDLabel: "Index" -->
|
15
|
+
<ul>
|
16
|
+
<li><a href="#label:3">each_subary_at_dims</a></li>
|
17
|
+
<li><a href="#label:4">each_subary_at_dims_with_index</a></li>
|
18
|
+
</ul>
|
19
|
+
<h2><a name="label:2" id="label:2">Methods</a></h2><!-- RDLabel: "Methods" -->
|
20
|
+
<dl>
|
21
|
+
<dt><a name="label:3" id="label:3"><code>each_subary_at_dims( *<var>dims</var> )</code></a></dt><!-- RDLabel: "each_subary_at_dims" -->
|
22
|
+
<dd>
|
23
|
+
<p>Iterator for each sub-array (not each element) specified by dimensions.</p>
|
24
|
+
<p>ARGUMENT</p>
|
25
|
+
<ul>
|
26
|
+
<li><var>dims</var> (integers) : specifies subsets at dimensions
|
27
|
+
specified here with the beginning-to-end selection.
|
28
|
+
For example, [0, 1] to specify the first 2 dimensions
|
29
|
+
(subsets will be 2D then), and [2] to specify the 3rd
|
30
|
+
dimension (subsets will be 1D). Duplication has no effect,
|
31
|
+
so [0,0] and [0] are the same. Also, its order has no effect.
|
32
|
+
See EXAMPLE below for more.</li>
|
33
|
+
</ul>
|
34
|
+
<p>RETURN VALUE</p>
|
35
|
+
<ul>
|
36
|
+
<li>self</li>
|
37
|
+
</ul>
|
38
|
+
<p>POSSIBLE EXCEPTIONS</p>
|
39
|
+
<ul>
|
40
|
+
<li>exception is raised if ( dims.min<0 || dims.max>=self.rank ).</li>
|
41
|
+
</ul>
|
42
|
+
<p>EXAMPLE</p>
|
43
|
+
<ul>
|
44
|
+
<li><p>Suppose that you want to do something with 2D sub-arrays in a
|
45
|
+
multi-dimension NArray. First, you include this module as follows:</p>
|
46
|
+
<pre>require "narray"
|
47
|
+
class NArray
|
48
|
+
include NumRu::Misc::MD_Iterators
|
49
|
+
end</pre>
|
50
|
+
<p>And prepare the array if you have not (here, it is 4D):</p>
|
51
|
+
<pre>na = NArray.int(10,2,5,2).indgen!</pre>
|
52
|
+
<p>Then you do the job like this:</p>
|
53
|
+
<pre>na.each_subary_at_dims(0,2){ |sub|
|
54
|
+
... # do whatever with sub
|
55
|
+
}</pre>
|
56
|
+
<p>This is equivalent to the following:</p>
|
57
|
+
<pre>(0...na.shape[3]).each{|j|
|
58
|
+
(0...na.shape[1]).each{|i|
|
59
|
+
sub = na[0..-1, i, 0..-1, j]
|
60
|
+
... # do whatever with sub
|
61
|
+
}
|
62
|
+
}</pre>
|
63
|
+
<p>Note that the loop must be nested 3 times when na is a 5D array,
|
64
|
+
if the latter approach is used. On the other hand, it will still
|
65
|
+
require the same single loop with the former. </p></li>
|
66
|
+
</ul></dd>
|
67
|
+
<dt><a name="label:4" id="label:4"><code>each_subary_at_dims_with_index( *<var>dims</var> )</code></a></dt><!-- RDLabel: "each_subary_at_dims_with_index" -->
|
68
|
+
<dd>
|
69
|
+
<p>Like <a href="#label:3">each_subary_at_dims</a> but the block takes two arguments:
|
70
|
+
subset and the subset specifier (index).</p>
|
71
|
+
<p>EXAMPLE</p>
|
72
|
+
<ul>
|
73
|
+
<li><p>Suppose the example above in <a href="#label:3">each_subary_at_dims</a> (EXAMPLE).
|
74
|
+
And suppose that you want to overwrite na with the result
|
75
|
+
you get. You can do it like this:</p>
|
76
|
+
<pre>na.each_subary_at_dims_with_index(0,2){ |sub,idx|
|
77
|
+
result = (sub + 10) / 2
|
78
|
+
na[*idx] = result
|
79
|
+
}</pre>
|
80
|
+
<p>Here, idx is an Array to be fed in the []= or [] methods
|
81
|
+
with asterisk (ungrouping).</p></li>
|
82
|
+
</ul></dd>
|
83
|
+
</dl>
|
84
|
+
|
85
|
+
</body>
|
86
|
+
</html>
|