shoesgem 0.1424.0

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.
Files changed (808) hide show
  1. data/LICENSE +30 -0
  2. data/README.rdoc +31 -0
  3. data/lib/shoes.rb +4 -0
  4. data/shoes/CHANGELOG.txt +21 -0
  5. data/shoes/COPYING.txt +30 -0
  6. data/shoes/README.txt +117 -0
  7. data/shoes/VERSION.txt +1 -0
  8. data/shoes/fonts/Coolvetica.ttf +0 -0
  9. data/shoes/fonts/Lacuna.ttf +0 -0
  10. data/shoes/freetype6.dll +0 -0
  11. data/shoes/lib/shoes/cache.rb +54 -0
  12. data/shoes/lib/shoes/data.rb +39 -0
  13. data/shoes/lib/shoes/help.rb +421 -0
  14. data/shoes/lib/shoes/image.rb +25 -0
  15. data/shoes/lib/shoes/inspect.rb +128 -0
  16. data/shoes/lib/shoes/log.rb +48 -0
  17. data/shoes/lib/shoes/minitar.rb +986 -0
  18. data/shoes/lib/shoes/override.rb +38 -0
  19. data/shoes/lib/shoes/pack.rb +503 -0
  20. data/shoes/lib/shoes/search.rb +46 -0
  21. data/shoes/lib/shoes/setup.rb +329 -0
  22. data/shoes/lib/shoes/shy.rb +131 -0
  23. data/shoes/lib/shoes/shybuilder.rb +44 -0
  24. data/shoes/lib/shoes.rb +522 -0
  25. data/shoes/libcairo-2.dll +0 -0
  26. data/shoes/libeay32.dll +0 -0
  27. data/shoes/libexpat-1.dll +0 -0
  28. data/shoes/libfontconfig-1.dll +0 -0
  29. data/shoes/libgio-2.0-0.dll +0 -0
  30. data/shoes/libglib-2.0-0.dll +0 -0
  31. data/shoes/libgmodule-2.0-0.dll +0 -0
  32. data/shoes/libgobject-2.0-0.dll +0 -0
  33. data/shoes/libgthread-2.0-0.dll +0 -0
  34. data/shoes/libiconv2.dll +0 -0
  35. data/shoes/libjpeg-8.dll +0 -0
  36. data/shoes/libpango-1.0-0.dll +0 -0
  37. data/shoes/libpangocairo-1.0-0.dll +0 -0
  38. data/shoes/libpangoft2-1.0-0.dll +0 -0
  39. data/shoes/libpangowin32-1.0-0.dll +0 -0
  40. data/shoes/libpng14-14.dll +0 -0
  41. data/shoes/libportaudio-2.dll +0 -0
  42. data/shoes/libshoes.dll +0 -0
  43. data/shoes/libssl32.dll +0 -0
  44. data/shoes/libungif4.dll +0 -0
  45. data/shoes/msvcrt-ruby191.dll +0 -0
  46. data/shoes/readline5.dll +0 -0
  47. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  48. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/blankslate.rb +63 -0
  49. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/builder.rb +216 -0
  50. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/elements.rb +510 -0
  51. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/htmlinfo.rb +691 -0
  52. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/inspect.rb +103 -0
  53. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/modules.rb +40 -0
  54. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/parse.rb +38 -0
  55. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tag.rb +202 -0
  56. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tags.rb +164 -0
  57. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/traverse.rb +838 -0
  58. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/xchar.rb +94 -0
  59. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot.rb +26 -0
  60. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  61. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/core.rb +135 -0
  62. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/rails.rb +58 -0
  63. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/common.rb +354 -0
  64. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  65. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  66. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext.rb +13 -0
  67. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/version.rb +9 -0
  68. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json.rb +8 -0
  69. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/constants.rb +49 -0
  70. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/database.rb +721 -0
  71. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/api.rb +152 -0
  72. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/driver.rb +307 -0
  73. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/native/driver.rb +219 -0
  74. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/errors.rb +68 -0
  75. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/pragmas.rb +271 -0
  76. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/resultset.rb +180 -0
  77. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/statement.rb +231 -0
  78. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/translator.rb +109 -0
  79. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/value.rb +57 -0
  80. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/version.rb +16 -0
  81. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3.rb +1 -0
  82. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3_api.so +0 -0
  83. data/shoes/ruby/gems/1.9.1/specifications/hpricot-0.8.1.gemspec +32 -0
  84. data/shoes/ruby/gems/1.9.1/specifications/json-shoes-1.1.3.gemspec +34 -0
  85. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.2.5-x86-mswin32.gemspec +46 -0
  86. data/shoes/ruby/lib/English.rb +155 -0
  87. data/shoes/ruby/lib/Win32API.rb +28 -0
  88. data/shoes/ruby/lib/abbrev.rb +103 -0
  89. data/shoes/ruby/lib/base64.rb +91 -0
  90. data/shoes/ruby/lib/benchmark.rb +573 -0
  91. data/shoes/ruby/lib/bigdecimal/jacobian.rb +85 -0
  92. data/shoes/ruby/lib/bigdecimal/ludcmp.rb +86 -0
  93. data/shoes/ruby/lib/bigdecimal/math.rb +237 -0
  94. data/shoes/ruby/lib/bigdecimal/newton.rb +77 -0
  95. data/shoes/ruby/lib/bigdecimal/util.rb +53 -0
  96. data/shoes/ruby/lib/cgi/cookie.rb +144 -0
  97. data/shoes/ruby/lib/cgi/core.rb +786 -0
  98. data/shoes/ruby/lib/cgi/html.rb +1021 -0
  99. data/shoes/ruby/lib/cgi/session/pstore.rb +111 -0
  100. data/shoes/ruby/lib/cgi/session.rb +537 -0
  101. data/shoes/ruby/lib/cgi/util.rb +181 -0
  102. data/shoes/ruby/lib/cgi.rb +274 -0
  103. data/shoes/ruby/lib/cmath.rb +233 -0
  104. data/shoes/ruby/lib/complex.rb +24 -0
  105. data/shoes/ruby/lib/csv.rb +2320 -0
  106. data/shoes/ruby/lib/date/format.rb +1313 -0
  107. data/shoes/ruby/lib/date.rb +1834 -0
  108. data/shoes/ruby/lib/debug.rb +907 -0
  109. data/shoes/ruby/lib/delegate.rb +311 -0
  110. data/shoes/ruby/lib/digest/hmac.rb +274 -0
  111. data/shoes/ruby/lib/digest/sha2.rb +74 -0
  112. data/shoes/ruby/lib/digest.rb +50 -0
  113. data/shoes/ruby/lib/dl/callback.rb +69 -0
  114. data/shoes/ruby/lib/dl/cparser.rb +109 -0
  115. data/shoes/ruby/lib/dl/func.rb +153 -0
  116. data/shoes/ruby/lib/dl/import.rb +215 -0
  117. data/shoes/ruby/lib/dl/pack.rb +173 -0
  118. data/shoes/ruby/lib/dl/stack.rb +146 -0
  119. data/shoes/ruby/lib/dl/struct.rb +213 -0
  120. data/shoes/ruby/lib/dl/types.rb +40 -0
  121. data/shoes/ruby/lib/dl/value.rb +112 -0
  122. data/shoes/ruby/lib/drb/acl.rb +146 -0
  123. data/shoes/ruby/lib/drb/drb.rb +1778 -0
  124. data/shoes/ruby/lib/drb/eq.rb +16 -0
  125. data/shoes/ruby/lib/drb/extserv.rb +71 -0
  126. data/shoes/ruby/lib/drb/extservm.rb +85 -0
  127. data/shoes/ruby/lib/drb/gw.rb +122 -0
  128. data/shoes/ruby/lib/drb/invokemethod.rb +34 -0
  129. data/shoes/ruby/lib/drb/observer.rb +22 -0
  130. data/shoes/ruby/lib/drb/ssl.rb +190 -0
  131. data/shoes/ruby/lib/drb/timeridconv.rb +91 -0
  132. data/shoes/ruby/lib/drb/unix.rb +108 -0
  133. data/shoes/ruby/lib/drb.rb +2 -0
  134. data/shoes/ruby/lib/e2mmap.rb +172 -0
  135. data/shoes/ruby/lib/erb.rb +902 -0
  136. data/shoes/ruby/lib/fileutils.rb +1592 -0
  137. data/shoes/ruby/lib/find.rb +81 -0
  138. data/shoes/ruby/lib/forwardable.rb +270 -0
  139. data/shoes/ruby/lib/ftsearch/analysis/analyzer.rb +16 -0
  140. data/shoes/ruby/lib/ftsearch/analysis/simple_identifier_analyzer.rb +23 -0
  141. data/shoes/ruby/lib/ftsearch/analysis/whitespace_analyzer.rb +22 -0
  142. data/shoes/ruby/lib/ftsearch/document_map_reader.rb +106 -0
  143. data/shoes/ruby/lib/ftsearch/document_map_writer.rb +46 -0
  144. data/shoes/ruby/lib/ftsearch/field_infos.rb +46 -0
  145. data/shoes/ruby/lib/ftsearch/fragment_writer.rb +114 -0
  146. data/shoes/ruby/lib/ftsearch/fulltext_reader.rb +52 -0
  147. data/shoes/ruby/lib/ftsearch/fulltext_writer.rb +75 -0
  148. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +275 -0
  149. data/shoes/ruby/lib/ftsearch/suffix_array_writer.rb +99 -0
  150. data/shoes/ruby/lib/ftsearch/util.rb +21 -0
  151. data/shoes/ruby/lib/getoptlong.rb +610 -0
  152. data/shoes/ruby/lib/gserver.rb +253 -0
  153. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  154. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  155. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  156. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  157. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  158. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  159. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  160. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  161. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  162. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  163. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  164. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  165. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  166. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  167. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  168. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  169. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  170. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  171. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  172. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  173. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  174. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  175. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  176. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  177. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  178. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  179. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  180. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  181. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  182. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  183. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  184. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  185. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  186. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  187. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  188. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  189. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  190. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  191. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  192. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  193. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  194. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  195. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  196. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  197. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  198. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  199. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  200. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  201. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  202. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  203. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  204. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  205. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  206. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  207. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  208. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  209. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  210. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  211. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  212. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  213. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  214. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  215. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  216. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  217. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  218. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  219. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  220. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  221. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  222. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  223. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  224. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  225. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  226. data/shoes/ruby/lib/i386-mingw32/rbconfig.rb +196 -0
  227. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  228. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  229. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  230. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  231. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  232. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  233. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  234. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  235. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  236. data/shoes/ruby/lib/io/nonblock.rb +23 -0
  237. data/shoes/ruby/lib/ipaddr.rb +813 -0
  238. data/shoes/ruby/lib/irb/cmd/chws.rb +32 -0
  239. data/shoes/ruby/lib/irb/cmd/fork.rb +38 -0
  240. data/shoes/ruby/lib/irb/cmd/help.rb +36 -0
  241. data/shoes/ruby/lib/irb/cmd/load.rb +66 -0
  242. data/shoes/ruby/lib/irb/cmd/nop.rb +38 -0
  243. data/shoes/ruby/lib/irb/cmd/pushws.rb +38 -0
  244. data/shoes/ruby/lib/irb/cmd/subirb.rb +42 -0
  245. data/shoes/ruby/lib/irb/completion.rb +207 -0
  246. data/shoes/ruby/lib/irb/context.rb +255 -0
  247. data/shoes/ruby/lib/irb/ext/change-ws.rb +61 -0
  248. data/shoes/ruby/lib/irb/ext/history.rb +109 -0
  249. data/shoes/ruby/lib/irb/ext/loader.rb +119 -0
  250. data/shoes/ruby/lib/irb/ext/math-mode.rb +36 -0
  251. data/shoes/ruby/lib/irb/ext/multi-irb.rb +240 -0
  252. data/shoes/ruby/lib/irb/ext/save-history.rb +100 -0
  253. data/shoes/ruby/lib/irb/ext/tracer.rb +60 -0
  254. data/shoes/ruby/lib/irb/ext/use-loader.rb +64 -0
  255. data/shoes/ruby/lib/irb/ext/workspaces.rb +55 -0
  256. data/shoes/ruby/lib/irb/extend-command.rb +272 -0
  257. data/shoes/ruby/lib/irb/frame.rb +66 -0
  258. data/shoes/ruby/lib/irb/help.rb +35 -0
  259. data/shoes/ruby/lib/irb/init.rb +288 -0
  260. data/shoes/ruby/lib/irb/input-method.rb +142 -0
  261. data/shoes/ruby/lib/irb/lc/error.rb +29 -0
  262. data/shoes/ruby/lib/irb/lc/help-message +38 -0
  263. data/shoes/ruby/lib/irb/lc/ja/encoding_aliases.rb +8 -0
  264. data/shoes/ruby/lib/irb/lc/ja/error.rb +27 -0
  265. data/shoes/ruby/lib/irb/lc/ja/help-message +39 -0
  266. data/shoes/ruby/lib/irb/locale.rb +195 -0
  267. data/shoes/ruby/lib/irb/magic-file.rb +36 -0
  268. data/shoes/ruby/lib/irb/notifier.rb +144 -0
  269. data/shoes/ruby/lib/irb/output-method.rb +69 -0
  270. data/shoes/ruby/lib/irb/ruby-lex.rb +1188 -0
  271. data/shoes/ruby/lib/irb/ruby-token.rb +270 -0
  272. data/shoes/ruby/lib/irb/slex.rb +282 -0
  273. data/shoes/ruby/lib/irb/src_encoding.rb +4 -0
  274. data/shoes/ruby/lib/irb/version.rb +15 -0
  275. data/shoes/ruby/lib/irb/workspace.rb +108 -0
  276. data/shoes/ruby/lib/irb/ws-for-case-2.rb +14 -0
  277. data/shoes/ruby/lib/irb/xmp.rb +97 -0
  278. data/shoes/ruby/lib/irb.rb +354 -0
  279. data/shoes/ruby/lib/json/add/core.rb +135 -0
  280. data/shoes/ruby/lib/json/add/rails.rb +58 -0
  281. data/shoes/ruby/lib/json/common.rb +354 -0
  282. data/shoes/ruby/lib/json/editor.rb +1371 -0
  283. data/shoes/ruby/lib/json/ext.rb +15 -0
  284. data/shoes/ruby/lib/json/version.rb +9 -0
  285. data/shoes/ruby/lib/json.rb +297 -0
  286. data/shoes/ruby/lib/kconv.rb +282 -0
  287. data/shoes/ruby/lib/logger.rb +732 -0
  288. data/shoes/ruby/lib/mathn.rb +206 -0
  289. data/shoes/ruby/lib/matrix.rb +1381 -0
  290. data/shoes/ruby/lib/minitest/autorun.rb +9 -0
  291. data/shoes/ruby/lib/minitest/mock.rb +37 -0
  292. data/shoes/ruby/lib/minitest/spec.rb +89 -0
  293. data/shoes/ruby/lib/minitest/unit.rb +497 -0
  294. data/shoes/ruby/lib/mkmf.rb +1958 -0
  295. data/shoes/ruby/lib/monitor.rb +265 -0
  296. data/shoes/ruby/lib/mutex_m.rb +91 -0
  297. data/shoes/ruby/lib/net/ftp.rb +981 -0
  298. data/shoes/ruby/lib/net/http.rb +2399 -0
  299. data/shoes/ruby/lib/net/https.rb +136 -0
  300. data/shoes/ruby/lib/net/imap.rb +3500 -0
  301. data/shoes/ruby/lib/net/pop.rb +1000 -0
  302. data/shoes/ruby/lib/net/protocol.rb +382 -0
  303. data/shoes/ruby/lib/net/smtp.rb +1014 -0
  304. data/shoes/ruby/lib/net/telnet.rb +759 -0
  305. data/shoes/ruby/lib/observer.rb +193 -0
  306. data/shoes/ruby/lib/open-uri.rb +832 -0
  307. data/shoes/ruby/lib/open3.rb +98 -0
  308. data/shoes/ruby/lib/openssl/bn.rb +35 -0
  309. data/shoes/ruby/lib/openssl/buffering.rb +242 -0
  310. data/shoes/ruby/lib/openssl/cipher.rb +65 -0
  311. data/shoes/ruby/lib/openssl/digest.rb +61 -0
  312. data/shoes/ruby/lib/openssl/ssl.rb +178 -0
  313. data/shoes/ruby/lib/openssl/x509.rb +155 -0
  314. data/shoes/ruby/lib/openssl.rb +24 -0
  315. data/shoes/ruby/lib/optparse/date.rb +17 -0
  316. data/shoes/ruby/lib/optparse/shellwords.rb +6 -0
  317. data/shoes/ruby/lib/optparse/time.rb +10 -0
  318. data/shoes/ruby/lib/optparse/uri.rb +6 -0
  319. data/shoes/ruby/lib/optparse/version.rb +70 -0
  320. data/shoes/ruby/lib/optparse.rb +1810 -0
  321. data/shoes/ruby/lib/ostruct.rb +145 -0
  322. data/shoes/ruby/lib/pathname.rb +1099 -0
  323. data/shoes/ruby/lib/pp.rb +532 -0
  324. data/shoes/ruby/lib/prettyprint.rb +896 -0
  325. data/shoes/ruby/lib/prime.rb +471 -0
  326. data/shoes/ruby/lib/profile.rb +10 -0
  327. data/shoes/ruby/lib/profiler.rb +59 -0
  328. data/shoes/ruby/lib/pstore.rb +543 -0
  329. data/shoes/ruby/lib/racc/parser.rb +441 -0
  330. data/shoes/ruby/lib/rake/classic_namespace.rb +8 -0
  331. data/shoes/ruby/lib/rake/clean.rb +33 -0
  332. data/shoes/ruby/lib/rake/gempackagetask.rb +97 -0
  333. data/shoes/ruby/lib/rake/loaders/makefile.rb +35 -0
  334. data/shoes/ruby/lib/rake/packagetask.rb +185 -0
  335. data/shoes/ruby/lib/rake/rake_test_loader.rb +5 -0
  336. data/shoes/ruby/lib/rake/rdoctask.rb +147 -0
  337. data/shoes/ruby/lib/rake/runtest.rb +23 -0
  338. data/shoes/ruby/lib/rake/tasklib.rb +23 -0
  339. data/shoes/ruby/lib/rake/testtask.rb +161 -0
  340. data/shoes/ruby/lib/rake/win32.rb +34 -0
  341. data/shoes/ruby/lib/rake.rb +2465 -0
  342. data/shoes/ruby/lib/rational.rb +19 -0
  343. data/shoes/ruby/lib/rbconfig/datadir.rb +24 -0
  344. data/shoes/ruby/lib/rdoc/code_objects.rb +1061 -0
  345. data/shoes/ruby/lib/rdoc/diagram.rb +340 -0
  346. data/shoes/ruby/lib/rdoc/dot.rb +249 -0
  347. data/shoes/ruby/lib/rdoc/generator/chm/chm.rb +100 -0
  348. data/shoes/ruby/lib/rdoc/generator/chm.rb +113 -0
  349. data/shoes/ruby/lib/rdoc/generator/html/common.rb +24 -0
  350. data/shoes/ruby/lib/rdoc/generator/html/frameless.rb +92 -0
  351. data/shoes/ruby/lib/rdoc/generator/html/hefss.rb +150 -0
  352. data/shoes/ruby/lib/rdoc/generator/html/html.rb +769 -0
  353. data/shoes/ruby/lib/rdoc/generator/html/kilmer.rb +151 -0
  354. data/shoes/ruby/lib/rdoc/generator/html/kilmerfactory.rb +427 -0
  355. data/shoes/ruby/lib/rdoc/generator/html/one_page_html.rb +122 -0
  356. data/shoes/ruby/lib/rdoc/generator/html.rb +445 -0
  357. data/shoes/ruby/lib/rdoc/generator/ri.rb +226 -0
  358. data/shoes/ruby/lib/rdoc/generator/texinfo/class.texinfo.erb +44 -0
  359. data/shoes/ruby/lib/rdoc/generator/texinfo/file.texinfo.erb +6 -0
  360. data/shoes/ruby/lib/rdoc/generator/texinfo/method.texinfo.erb +6 -0
  361. data/shoes/ruby/lib/rdoc/generator/texinfo/texinfo.erb +28 -0
  362. data/shoes/ruby/lib/rdoc/generator/texinfo.rb +81 -0
  363. data/shoes/ruby/lib/rdoc/generator/xml/rdf.rb +113 -0
  364. data/shoes/ruby/lib/rdoc/generator/xml/xml.rb +123 -0
  365. data/shoes/ruby/lib/rdoc/generator/xml.rb +117 -0
  366. data/shoes/ruby/lib/rdoc/generator.rb +1082 -0
  367. data/shoes/ruby/lib/rdoc/known_classes.rb +68 -0
  368. data/shoes/ruby/lib/rdoc/markup/attribute_manager.rb +265 -0
  369. data/shoes/ruby/lib/rdoc/markup/formatter.rb +14 -0
  370. data/shoes/ruby/lib/rdoc/markup/fragments.rb +337 -0
  371. data/shoes/ruby/lib/rdoc/markup/inline.rb +101 -0
  372. data/shoes/ruby/lib/rdoc/markup/lines.rb +152 -0
  373. data/shoes/ruby/lib/rdoc/markup/preprocess.rb +75 -0
  374. data/shoes/ruby/lib/rdoc/markup/to_flow.rb +185 -0
  375. data/shoes/ruby/lib/rdoc/markup/to_html.rb +403 -0
  376. data/shoes/ruby/lib/rdoc/markup/to_html_crossref.rb +148 -0
  377. data/shoes/ruby/lib/rdoc/markup/to_latex.rb +328 -0
  378. data/shoes/ruby/lib/rdoc/markup/to_test.rb +50 -0
  379. data/shoes/ruby/lib/rdoc/markup/to_texinfo.rb +69 -0
  380. data/shoes/ruby/lib/rdoc/markup.rb +378 -0
  381. data/shoes/ruby/lib/rdoc/options.rb +638 -0
  382. data/shoes/ruby/lib/rdoc/parser/c.rb +661 -0
  383. data/shoes/ruby/lib/rdoc/parser/f95.rb +1835 -0
  384. data/shoes/ruby/lib/rdoc/parser/perl.rb +165 -0
  385. data/shoes/ruby/lib/rdoc/parser/ruby.rb +2829 -0
  386. data/shoes/ruby/lib/rdoc/parser/simple.rb +38 -0
  387. data/shoes/ruby/lib/rdoc/parser.rb +142 -0
  388. data/shoes/ruby/lib/rdoc/rdoc.rb +293 -0
  389. data/shoes/ruby/lib/rdoc/ri/cache.rb +187 -0
  390. data/shoes/ruby/lib/rdoc/ri/descriptions.rb +156 -0
  391. data/shoes/ruby/lib/rdoc/ri/display.rb +392 -0
  392. data/shoes/ruby/lib/rdoc/ri/driver.rb +669 -0
  393. data/shoes/ruby/lib/rdoc/ri/formatter.rb +616 -0
  394. data/shoes/ruby/lib/rdoc/ri/paths.rb +99 -0
  395. data/shoes/ruby/lib/rdoc/ri/reader.rb +106 -0
  396. data/shoes/ruby/lib/rdoc/ri/util.rb +79 -0
  397. data/shoes/ruby/lib/rdoc/ri/writer.rb +68 -0
  398. data/shoes/ruby/lib/rdoc/ri.rb +8 -0
  399. data/shoes/ruby/lib/rdoc/stats.rb +115 -0
  400. data/shoes/ruby/lib/rdoc/template.rb +64 -0
  401. data/shoes/ruby/lib/rdoc/tokenstream.rb +33 -0
  402. data/shoes/ruby/lib/rdoc.rb +395 -0
  403. data/shoes/ruby/lib/resolv-replace.rb +63 -0
  404. data/shoes/ruby/lib/resolv.rb +2262 -0
  405. data/shoes/ruby/lib/rexml/attlistdecl.rb +62 -0
  406. data/shoes/ruby/lib/rexml/attribute.rb +188 -0
  407. data/shoes/ruby/lib/rexml/cdata.rb +67 -0
  408. data/shoes/ruby/lib/rexml/child.rb +96 -0
  409. data/shoes/ruby/lib/rexml/comment.rb +80 -0
  410. data/shoes/ruby/lib/rexml/doctype.rb +270 -0
  411. data/shoes/ruby/lib/rexml/document.rb +231 -0
  412. data/shoes/ruby/lib/rexml/dtd/attlistdecl.rb +10 -0
  413. data/shoes/ruby/lib/rexml/dtd/dtd.rb +51 -0
  414. data/shoes/ruby/lib/rexml/dtd/elementdecl.rb +17 -0
  415. data/shoes/ruby/lib/rexml/dtd/entitydecl.rb +56 -0
  416. data/shoes/ruby/lib/rexml/dtd/notationdecl.rb +39 -0
  417. data/shoes/ruby/lib/rexml/element.rb +1246 -0
  418. data/shoes/ruby/lib/rexml/encoding.rb +71 -0
  419. data/shoes/ruby/lib/rexml/encodings/CP-1252.rb +103 -0
  420. data/shoes/ruby/lib/rexml/encodings/EUC-JP.rb +35 -0
  421. data/shoes/ruby/lib/rexml/encodings/ICONV.rb +22 -0
  422. data/shoes/ruby/lib/rexml/encodings/ISO-8859-1.rb +7 -0
  423. data/shoes/ruby/lib/rexml/encodings/ISO-8859-15.rb +72 -0
  424. data/shoes/ruby/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
  425. data/shoes/ruby/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
  426. data/shoes/ruby/lib/rexml/encodings/UNILE.rb +34 -0
  427. data/shoes/ruby/lib/rexml/encodings/US-ASCII.rb +30 -0
  428. data/shoes/ruby/lib/rexml/encodings/UTF-16.rb +35 -0
  429. data/shoes/ruby/lib/rexml/encodings/UTF-8.rb +18 -0
  430. data/shoes/ruby/lib/rexml/entity.rb +166 -0
  431. data/shoes/ruby/lib/rexml/formatters/default.rb +109 -0
  432. data/shoes/ruby/lib/rexml/formatters/pretty.rb +139 -0
  433. data/shoes/ruby/lib/rexml/formatters/transitive.rb +58 -0
  434. data/shoes/ruby/lib/rexml/functions.rb +388 -0
  435. data/shoes/ruby/lib/rexml/instruction.rb +70 -0
  436. data/shoes/ruby/lib/rexml/light/node.rb +196 -0
  437. data/shoes/ruby/lib/rexml/namespace.rb +47 -0
  438. data/shoes/ruby/lib/rexml/node.rb +75 -0
  439. data/shoes/ruby/lib/rexml/output.rb +24 -0
  440. data/shoes/ruby/lib/rexml/parent.rb +166 -0
  441. data/shoes/ruby/lib/rexml/parseexception.rb +51 -0
  442. data/shoes/ruby/lib/rexml/parsers/baseparser.rb +530 -0
  443. data/shoes/ruby/lib/rexml/parsers/lightparser.rb +58 -0
  444. data/shoes/ruby/lib/rexml/parsers/pullparser.rb +196 -0
  445. data/shoes/ruby/lib/rexml/parsers/sax2parser.rb +247 -0
  446. data/shoes/ruby/lib/rexml/parsers/streamparser.rb +46 -0
  447. data/shoes/ruby/lib/rexml/parsers/treeparser.rb +100 -0
  448. data/shoes/ruby/lib/rexml/parsers/ultralightparser.rb +56 -0
  449. data/shoes/ruby/lib/rexml/parsers/xpathparser.rb +698 -0
  450. data/shoes/ruby/lib/rexml/quickpath.rb +263 -0
  451. data/shoes/ruby/lib/rexml/rexml.rb +31 -0
  452. data/shoes/ruby/lib/rexml/sax2listener.rb +97 -0
  453. data/shoes/ruby/lib/rexml/source.rb +258 -0
  454. data/shoes/ruby/lib/rexml/streamlistener.rb +92 -0
  455. data/shoes/ruby/lib/rexml/syncenumerator.rb +32 -0
  456. data/shoes/ruby/lib/rexml/text.rb +404 -0
  457. data/shoes/ruby/lib/rexml/undefinednamespaceexception.rb +8 -0
  458. data/shoes/ruby/lib/rexml/validation/relaxng.rb +559 -0
  459. data/shoes/ruby/lib/rexml/validation/validation.rb +155 -0
  460. data/shoes/ruby/lib/rexml/validation/validationexception.rb +9 -0
  461. data/shoes/ruby/lib/rexml/xmldecl.rb +119 -0
  462. data/shoes/ruby/lib/rexml/xmltokens.rb +18 -0
  463. data/shoes/ruby/lib/rexml/xpath.rb +77 -0
  464. data/shoes/ruby/lib/rexml/xpath_parser.rb +792 -0
  465. data/shoes/ruby/lib/rinda/rinda.rb +283 -0
  466. data/shoes/ruby/lib/rinda/ring.rb +271 -0
  467. data/shoes/ruby/lib/rinda/tuplespace.rb +642 -0
  468. data/shoes/ruby/lib/ripper/core.rb +70 -0
  469. data/shoes/ruby/lib/ripper/filter.rb +70 -0
  470. data/shoes/ruby/lib/ripper/lexer.rb +179 -0
  471. data/shoes/ruby/lib/ripper/sexp.rb +99 -0
  472. data/shoes/ruby/lib/ripper.rb +4 -0
  473. data/shoes/ruby/lib/rss/0.9.rb +427 -0
  474. data/shoes/ruby/lib/rss/1.0.rb +452 -0
  475. data/shoes/ruby/lib/rss/2.0.rb +111 -0
  476. data/shoes/ruby/lib/rss/atom.rb +748 -0
  477. data/shoes/ruby/lib/rss/content/1.0.rb +10 -0
  478. data/shoes/ruby/lib/rss/content/2.0.rb +12 -0
  479. data/shoes/ruby/lib/rss/content.rb +31 -0
  480. data/shoes/ruby/lib/rss/converter.rb +170 -0
  481. data/shoes/ruby/lib/rss/dublincore/1.0.rb +13 -0
  482. data/shoes/ruby/lib/rss/dublincore/2.0.rb +13 -0
  483. data/shoes/ruby/lib/rss/dublincore/atom.rb +17 -0
  484. data/shoes/ruby/lib/rss/dublincore.rb +161 -0
  485. data/shoes/ruby/lib/rss/image.rb +193 -0
  486. data/shoes/ruby/lib/rss/itunes.rb +410 -0
  487. data/shoes/ruby/lib/rss/maker/0.9.rb +467 -0
  488. data/shoes/ruby/lib/rss/maker/1.0.rb +434 -0
  489. data/shoes/ruby/lib/rss/maker/2.0.rb +223 -0
  490. data/shoes/ruby/lib/rss/maker/atom.rb +172 -0
  491. data/shoes/ruby/lib/rss/maker/base.rb +880 -0
  492. data/shoes/ruby/lib/rss/maker/content.rb +21 -0
  493. data/shoes/ruby/lib/rss/maker/dublincore.rb +124 -0
  494. data/shoes/ruby/lib/rss/maker/entry.rb +163 -0
  495. data/shoes/ruby/lib/rss/maker/feed.rb +430 -0
  496. data/shoes/ruby/lib/rss/maker/image.rb +111 -0
  497. data/shoes/ruby/lib/rss/maker/itunes.rb +242 -0
  498. data/shoes/ruby/lib/rss/maker/slash.rb +33 -0
  499. data/shoes/ruby/lib/rss/maker/syndication.rb +18 -0
  500. data/shoes/ruby/lib/rss/maker/taxonomy.rb +118 -0
  501. data/shoes/ruby/lib/rss/maker/trackback.rb +61 -0
  502. data/shoes/ruby/lib/rss/maker.rb +44 -0
  503. data/shoes/ruby/lib/rss/parser.rb +568 -0
  504. data/shoes/ruby/lib/rss/rexmlparser.rb +54 -0
  505. data/shoes/ruby/lib/rss/rss.rb +1313 -0
  506. data/shoes/ruby/lib/rss/slash.rb +49 -0
  507. data/shoes/ruby/lib/rss/syndication.rb +67 -0
  508. data/shoes/ruby/lib/rss/taxonomy.rb +145 -0
  509. data/shoes/ruby/lib/rss/trackback.rb +288 -0
  510. data/shoes/ruby/lib/rss/utils.rb +111 -0
  511. data/shoes/ruby/lib/rss/xml-stylesheet.rb +105 -0
  512. data/shoes/ruby/lib/rss/xml.rb +71 -0
  513. data/shoes/ruby/lib/rss/xmlparser.rb +93 -0
  514. data/shoes/ruby/lib/rss/xmlscanner.rb +121 -0
  515. data/shoes/ruby/lib/rss.rb +19 -0
  516. data/shoes/ruby/lib/rubygems/builder.rb +88 -0
  517. data/shoes/ruby/lib/rubygems/command.rb +406 -0
  518. data/shoes/ruby/lib/rubygems/command_manager.rb +146 -0
  519. data/shoes/ruby/lib/rubygems/commands/build_command.rb +53 -0
  520. data/shoes/ruby/lib/rubygems/commands/cert_command.rb +86 -0
  521. data/shoes/ruby/lib/rubygems/commands/check_command.rb +75 -0
  522. data/shoes/ruby/lib/rubygems/commands/cleanup_command.rb +91 -0
  523. data/shoes/ruby/lib/rubygems/commands/contents_command.rb +74 -0
  524. data/shoes/ruby/lib/rubygems/commands/dependency_command.rb +188 -0
  525. data/shoes/ruby/lib/rubygems/commands/environment_command.rb +128 -0
  526. data/shoes/ruby/lib/rubygems/commands/fetch_command.rb +62 -0
  527. data/shoes/ruby/lib/rubygems/commands/generate_index_command.rb +57 -0
  528. data/shoes/ruby/lib/rubygems/commands/help_command.rb +172 -0
  529. data/shoes/ruby/lib/rubygems/commands/install_command.rb +148 -0
  530. data/shoes/ruby/lib/rubygems/commands/list_command.rb +35 -0
  531. data/shoes/ruby/lib/rubygems/commands/lock_command.rb +110 -0
  532. data/shoes/ruby/lib/rubygems/commands/mirror_command.rb +111 -0
  533. data/shoes/ruby/lib/rubygems/commands/outdated_command.rb +33 -0
  534. data/shoes/ruby/lib/rubygems/commands/pristine_command.rb +93 -0
  535. data/shoes/ruby/lib/rubygems/commands/query_command.rb +233 -0
  536. data/shoes/ruby/lib/rubygems/commands/rdoc_command.rb +82 -0
  537. data/shoes/ruby/lib/rubygems/commands/search_command.rb +37 -0
  538. data/shoes/ruby/lib/rubygems/commands/server_command.rb +48 -0
  539. data/shoes/ruby/lib/rubygems/commands/sources_command.rb +152 -0
  540. data/shoes/ruby/lib/rubygems/commands/specification_command.rb +77 -0
  541. data/shoes/ruby/lib/rubygems/commands/stale_command.rb +27 -0
  542. data/shoes/ruby/lib/rubygems/commands/uninstall_command.rb +73 -0
  543. data/shoes/ruby/lib/rubygems/commands/unpack_command.rb +95 -0
  544. data/shoes/ruby/lib/rubygems/commands/update_command.rb +181 -0
  545. data/shoes/ruby/lib/rubygems/commands/which_command.rb +87 -0
  546. data/shoes/ruby/lib/rubygems/config_file.rb +266 -0
  547. data/shoes/ruby/lib/rubygems/custom_require.rb +46 -0
  548. data/shoes/ruby/lib/rubygems/defaults.rb +89 -0
  549. data/shoes/ruby/lib/rubygems/dependency.rb +119 -0
  550. data/shoes/ruby/lib/rubygems/dependency_installer.rb +258 -0
  551. data/shoes/ruby/lib/rubygems/dependency_list.rb +165 -0
  552. data/shoes/ruby/lib/rubygems/digest/digest_adapter.rb +40 -0
  553. data/shoes/ruby/lib/rubygems/digest/md5.rb +23 -0
  554. data/shoes/ruby/lib/rubygems/digest/sha1.rb +17 -0
  555. data/shoes/ruby/lib/rubygems/digest/sha2.rb +17 -0
  556. data/shoes/ruby/lib/rubygems/doc_manager.rb +214 -0
  557. data/shoes/ruby/lib/rubygems/exceptions.rb +84 -0
  558. data/shoes/ruby/lib/rubygems/ext/builder.rb +56 -0
  559. data/shoes/ruby/lib/rubygems/ext/configure_builder.rb +24 -0
  560. data/shoes/ruby/lib/rubygems/ext/ext_conf_builder.rb +23 -0
  561. data/shoes/ruby/lib/rubygems/ext/rake_builder.rb +27 -0
  562. data/shoes/ruby/lib/rubygems/ext.rb +18 -0
  563. data/shoes/ruby/lib/rubygems/format.rb +87 -0
  564. data/shoes/ruby/lib/rubygems/gem_openssl.rb +83 -0
  565. data/shoes/ruby/lib/rubygems/gem_path_searcher.rb +100 -0
  566. data/shoes/ruby/lib/rubygems/gem_runner.rb +58 -0
  567. data/shoes/ruby/lib/rubygems/indexer/abstract_index_builder.rb +88 -0
  568. data/shoes/ruby/lib/rubygems/indexer/latest_index_builder.rb +35 -0
  569. data/shoes/ruby/lib/rubygems/indexer/marshal_index_builder.rb +17 -0
  570. data/shoes/ruby/lib/rubygems/indexer/master_index_builder.rb +54 -0
  571. data/shoes/ruby/lib/rubygems/indexer/quick_index_builder.rb +50 -0
  572. data/shoes/ruby/lib/rubygems/indexer.rb +370 -0
  573. data/shoes/ruby/lib/rubygems/install_update_options.rb +113 -0
  574. data/shoes/ruby/lib/rubygems/installer.rb +578 -0
  575. data/shoes/ruby/lib/rubygems/local_remote_options.rb +134 -0
  576. data/shoes/ruby/lib/rubygems/old_format.rb +148 -0
  577. data/shoes/ruby/lib/rubygems/package/f_sync_dir.rb +24 -0
  578. data/shoes/ruby/lib/rubygems/package/tar_header.rb +245 -0
  579. data/shoes/ruby/lib/rubygems/package/tar_input.rb +219 -0
  580. data/shoes/ruby/lib/rubygems/package/tar_output.rb +143 -0
  581. data/shoes/ruby/lib/rubygems/package/tar_reader/entry.rb +99 -0
  582. data/shoes/ruby/lib/rubygems/package/tar_reader.rb +86 -0
  583. data/shoes/ruby/lib/rubygems/package/tar_writer.rb +180 -0
  584. data/shoes/ruby/lib/rubygems/package.rb +95 -0
  585. data/shoes/ruby/lib/rubygems/platform.rb +178 -0
  586. data/shoes/ruby/lib/rubygems/remote_fetcher.rb +344 -0
  587. data/shoes/ruby/lib/rubygems/require_paths_builder.rb +15 -0
  588. data/shoes/ruby/lib/rubygems/requirement.rb +163 -0
  589. data/shoes/ruby/lib/rubygems/rubygems_version.rb +6 -0
  590. data/shoes/ruby/lib/rubygems/security.rb +786 -0
  591. data/shoes/ruby/lib/rubygems/server.rb +629 -0
  592. data/shoes/ruby/lib/rubygems/source_index.rb +559 -0
  593. data/shoes/ruby/lib/rubygems/source_info_cache.rb +393 -0
  594. data/shoes/ruby/lib/rubygems/source_info_cache_entry.rb +56 -0
  595. data/shoes/ruby/lib/rubygems/spec_fetcher.rb +249 -0
  596. data/shoes/ruby/lib/rubygems/specification.rb +1262 -0
  597. data/shoes/ruby/lib/rubygems/test_utilities.rb +131 -0
  598. data/shoes/ruby/lib/rubygems/timer.rb +25 -0
  599. data/shoes/ruby/lib/rubygems/uninstaller.rb +242 -0
  600. data/shoes/ruby/lib/rubygems/user_interaction.rb +360 -0
  601. data/shoes/ruby/lib/rubygems/validator.rb +208 -0
  602. data/shoes/ruby/lib/rubygems/version.rb +167 -0
  603. data/shoes/ruby/lib/rubygems/version_option.rb +48 -0
  604. data/shoes/ruby/lib/rubygems.rb +888 -0
  605. data/shoes/ruby/lib/scanf.rb +703 -0
  606. data/shoes/ruby/lib/securerandom.rb +182 -0
  607. data/shoes/ruby/lib/set.rb +1274 -0
  608. data/shoes/ruby/lib/shell/builtin-command.rb +160 -0
  609. data/shoes/ruby/lib/shell/command-processor.rb +593 -0
  610. data/shoes/ruby/lib/shell/error.rb +25 -0
  611. data/shoes/ruby/lib/shell/filter.rb +109 -0
  612. data/shoes/ruby/lib/shell/process-controller.rb +319 -0
  613. data/shoes/ruby/lib/shell/system-command.rb +159 -0
  614. data/shoes/ruby/lib/shell/version.rb +15 -0
  615. data/shoes/ruby/lib/shell.rb +300 -0
  616. data/shoes/ruby/lib/shellwords.rb +156 -0
  617. data/shoes/ruby/lib/singleton.rb +313 -0
  618. data/shoes/ruby/lib/sync.rb +307 -0
  619. data/shoes/ruby/lib/tempfile.rb +218 -0
  620. data/shoes/ruby/lib/test/unit/assertions.rb +122 -0
  621. data/shoes/ruby/lib/test/unit/testcase.rb +12 -0
  622. data/shoes/ruby/lib/test/unit.rb +66 -0
  623. data/shoes/ruby/lib/thread.rb +367 -0
  624. data/shoes/ruby/lib/thwait.rb +168 -0
  625. data/shoes/ruby/lib/time.rb +869 -0
  626. data/shoes/ruby/lib/timeout.rb +108 -0
  627. data/shoes/ruby/lib/tmpdir.rb +138 -0
  628. data/shoes/ruby/lib/tracer.rb +166 -0
  629. data/shoes/ruby/lib/tsort.rb +290 -0
  630. data/shoes/ruby/lib/ubygems.rb +10 -0
  631. data/shoes/ruby/lib/un.rb +304 -0
  632. data/shoes/ruby/lib/uri/common.rb +727 -0
  633. data/shoes/ruby/lib/uri/ftp.rb +198 -0
  634. data/shoes/ruby/lib/uri/generic.rb +1128 -0
  635. data/shoes/ruby/lib/uri/http.rb +100 -0
  636. data/shoes/ruby/lib/uri/https.rb +20 -0
  637. data/shoes/ruby/lib/uri/ldap.rb +190 -0
  638. data/shoes/ruby/lib/uri/ldaps.rb +12 -0
  639. data/shoes/ruby/lib/uri/mailto.rb +266 -0
  640. data/shoes/ruby/lib/uri.rb +29 -0
  641. data/shoes/ruby/lib/weakref.rb +80 -0
  642. data/shoes/ruby/lib/webrick/accesslog.rb +75 -0
  643. data/shoes/ruby/lib/webrick/cgi.rb +260 -0
  644. data/shoes/ruby/lib/webrick/compat.rb +15 -0
  645. data/shoes/ruby/lib/webrick/config.rb +100 -0
  646. data/shoes/ruby/lib/webrick/cookie.rb +110 -0
  647. data/shoes/ruby/lib/webrick/htmlutils.rb +25 -0
  648. data/shoes/ruby/lib/webrick/httpauth/authenticator.rb +79 -0
  649. data/shoes/ruby/lib/webrick/httpauth/basicauth.rb +65 -0
  650. data/shoes/ruby/lib/webrick/httpauth/digestauth.rb +344 -0
  651. data/shoes/ruby/lib/webrick/httpauth/htdigest.rb +91 -0
  652. data/shoes/ruby/lib/webrick/httpauth/htgroup.rb +61 -0
  653. data/shoes/ruby/lib/webrick/httpauth/htpasswd.rb +83 -0
  654. data/shoes/ruby/lib/webrick/httpauth/userdb.rb +29 -0
  655. data/shoes/ruby/lib/webrick/httpauth.rb +45 -0
  656. data/shoes/ruby/lib/webrick/httpproxy.rb +288 -0
  657. data/shoes/ruby/lib/webrick/httprequest.rb +402 -0
  658. data/shoes/ruby/lib/webrick/httpresponse.rb +326 -0
  659. data/shoes/ruby/lib/webrick/https.rb +63 -0
  660. data/shoes/ruby/lib/webrick/httpserver.rb +217 -0
  661. data/shoes/ruby/lib/webrick/httpservlet/abstract.rb +70 -0
  662. data/shoes/ruby/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  663. data/shoes/ruby/lib/webrick/httpservlet/cgihandler.rb +110 -0
  664. data/shoes/ruby/lib/webrick/httpservlet/erbhandler.rb +54 -0
  665. data/shoes/ruby/lib/webrick/httpservlet/filehandler.rb +435 -0
  666. data/shoes/ruby/lib/webrick/httpservlet/prochandler.rb +33 -0
  667. data/shoes/ruby/lib/webrick/httpservlet.rb +22 -0
  668. data/shoes/ruby/lib/webrick/httpstatus.rb +132 -0
  669. data/shoes/ruby/lib/webrick/httputils.rb +392 -0
  670. data/shoes/ruby/lib/webrick/httpversion.rb +49 -0
  671. data/shoes/ruby/lib/webrick/log.rb +88 -0
  672. data/shoes/ruby/lib/webrick/server.rb +210 -0
  673. data/shoes/ruby/lib/webrick/ssl.rb +126 -0
  674. data/shoes/ruby/lib/webrick/utils.rb +175 -0
  675. data/shoes/ruby/lib/webrick/version.rb +13 -0
  676. data/shoes/ruby/lib/webrick.rb +29 -0
  677. data/shoes/ruby/lib/win32/registry.rb +832 -0
  678. data/shoes/ruby/lib/win32/resolv.rb +370 -0
  679. data/shoes/ruby/lib/win32/sspi.rb +330 -0
  680. data/shoes/ruby/lib/win32ole/property.rb +16 -0
  681. data/shoes/ruby/lib/xmlrpc/base64.rb +81 -0
  682. data/shoes/ruby/lib/xmlrpc/client.rb +625 -0
  683. data/shoes/ruby/lib/xmlrpc/config.rb +40 -0
  684. data/shoes/ruby/lib/xmlrpc/create.rb +290 -0
  685. data/shoes/ruby/lib/xmlrpc/datetime.rb +142 -0
  686. data/shoes/ruby/lib/xmlrpc/httpserver.rb +178 -0
  687. data/shoes/ruby/lib/xmlrpc/marshal.rb +76 -0
  688. data/shoes/ruby/lib/xmlrpc/parser.rb +813 -0
  689. data/shoes/ruby/lib/xmlrpc/server.rb +778 -0
  690. data/shoes/ruby/lib/xmlrpc/utils.rb +165 -0
  691. data/shoes/ruby/lib/yaml/baseemitter.rb +242 -0
  692. data/shoes/ruby/lib/yaml/basenode.rb +216 -0
  693. data/shoes/ruby/lib/yaml/constants.rb +45 -0
  694. data/shoes/ruby/lib/yaml/dbm.rb +111 -0
  695. data/shoes/ruby/lib/yaml/encoding.rb +33 -0
  696. data/shoes/ruby/lib/yaml/error.rb +34 -0
  697. data/shoes/ruby/lib/yaml/loader.rb +14 -0
  698. data/shoes/ruby/lib/yaml/rubytypes.rb +446 -0
  699. data/shoes/ruby/lib/yaml/store.rb +43 -0
  700. data/shoes/ruby/lib/yaml/stream.rb +40 -0
  701. data/shoes/ruby/lib/yaml/stringio.rb +83 -0
  702. data/shoes/ruby/lib/yaml/syck.rb +19 -0
  703. data/shoes/ruby/lib/yaml/tag.rb +91 -0
  704. data/shoes/ruby/lib/yaml/types.rb +192 -0
  705. data/shoes/ruby/lib/yaml/yamlnode.rb +54 -0
  706. data/shoes/ruby/lib/yaml/ypath.rb +52 -0
  707. data/shoes/ruby/lib/yaml.rb +440 -0
  708. data/shoes/samples/class-book.rb +43 -0
  709. data/shoes/samples/class-book.yaml +387 -0
  710. data/shoes/samples/expert-definr.rb +23 -0
  711. data/shoes/samples/expert-funnies.rb +51 -0
  712. data/shoes/samples/expert-irb.rb +112 -0
  713. data/shoes/samples/expert-minesweeper.rb +267 -0
  714. data/shoes/samples/expert-othello.rb +319 -0
  715. data/shoes/samples/expert-pong.rb +62 -0
  716. data/shoes/samples/expert-tankspank.rb +385 -0
  717. data/shoes/samples/good-arc.rb +37 -0
  718. data/shoes/samples/good-clock.rb +51 -0
  719. data/shoes/samples/good-follow.rb +26 -0
  720. data/shoes/samples/good-reminder.rb +174 -0
  721. data/shoes/samples/good-vjot.rb +56 -0
  722. data/shoes/samples/simple-accordion.rb +75 -0
  723. data/shoes/samples/simple-anim-shapes.rb +17 -0
  724. data/shoes/samples/simple-anim-text.rb +13 -0
  725. data/shoes/samples/simple-arc.rb +23 -0
  726. data/shoes/samples/simple-bounce.rb +24 -0
  727. data/shoes/samples/simple-calc.rb +70 -0
  728. data/shoes/samples/simple-control-sizes.rb +24 -0
  729. data/shoes/samples/simple-curve.rb +26 -0
  730. data/shoes/samples/simple-dialogs.rb +29 -0
  731. data/shoes/samples/simple-downloader.rb +27 -0
  732. data/shoes/samples/simple-draw.rb +13 -0
  733. data/shoes/samples/simple-editor.rb +28 -0
  734. data/shoes/samples/simple-form.rb +28 -0
  735. data/shoes/samples/simple-form.shy +0 -0
  736. data/shoes/samples/simple-mask.rb +21 -0
  737. data/shoes/samples/simple-menu.rb +31 -0
  738. data/shoes/samples/simple-menu1.rb +35 -0
  739. data/shoes/samples/simple-rubygems.rb +29 -0
  740. data/shoes/samples/simple-slide.rb +45 -0
  741. data/shoes/samples/simple-sphere.rb +28 -0
  742. data/shoes/samples/simple-timer.rb +13 -0
  743. data/shoes/samples/simple-video.rb +13 -0
  744. data/shoes/shoes +21 -0
  745. data/shoes/shoes.exe +0 -0
  746. data/shoes/shoes.exe.manifest +17 -0
  747. data/shoes/sqlite3.dll +0 -0
  748. data/shoes/static/Shoes.icns +0 -0
  749. data/shoes/static/Thumbs.db +0 -0
  750. data/shoes/static/app-icon.png +0 -0
  751. data/shoes/static/avatar.png +0 -0
  752. data/shoes/static/code_highlighter.js +188 -0
  753. data/shoes/static/code_highlighter_ruby.js +26 -0
  754. data/shoes/static/icon-debug.png +0 -0
  755. data/shoes/static/icon-error.png +0 -0
  756. data/shoes/static/icon-info.png +0 -0
  757. data/shoes/static/icon-warn.png +0 -0
  758. data/shoes/static/listbox_button1.png +0 -0
  759. data/shoes/static/listbox_button2.png +0 -0
  760. data/shoes/static/man-app.png +0 -0
  761. data/shoes/static/man-builds.png +0 -0
  762. data/shoes/static/man-editor-notepad.png +0 -0
  763. data/shoes/static/man-editor-osx.png +0 -0
  764. data/shoes/static/man-ele-background.png +0 -0
  765. data/shoes/static/man-ele-border.png +0 -0
  766. data/shoes/static/man-ele-button.png +0 -0
  767. data/shoes/static/man-ele-check.png +0 -0
  768. data/shoes/static/man-ele-editbox.png +0 -0
  769. data/shoes/static/man-ele-editline.png +0 -0
  770. data/shoes/static/man-ele-image.png +0 -0
  771. data/shoes/static/man-ele-listbox.png +0 -0
  772. data/shoes/static/man-ele-progress.png +0 -0
  773. data/shoes/static/man-ele-radio.png +0 -0
  774. data/shoes/static/man-ele-shape.png +0 -0
  775. data/shoes/static/man-ele-textblock.png +0 -0
  776. data/shoes/static/man-ele-video.png +0 -0
  777. data/shoes/static/man-intro-dmg.png +0 -0
  778. data/shoes/static/man-intro-exe.png +0 -0
  779. data/shoes/static/man-look-tiger.png +0 -0
  780. data/shoes/static/man-look-ubuntu.png +0 -0
  781. data/shoes/static/man-look-vista.png +0 -0
  782. data/shoes/static/man-run-osx.png +0 -0
  783. data/shoes/static/man-run-vista.png +0 -0
  784. data/shoes/static/man-run-xp.png +0 -0
  785. data/shoes/static/man-shot1.png +0 -0
  786. data/shoes/static/manual-en.txt +2783 -0
  787. data/shoes/static/manual-ja.txt +2780 -0
  788. data/shoes/static/manual.css +167 -0
  789. data/shoes/static/menu-corner1.png +0 -0
  790. data/shoes/static/menu-corner2.png +0 -0
  791. data/shoes/static/menu-gray.png +0 -0
  792. data/shoes/static/menu-left.png +0 -0
  793. data/shoes/static/menu-right.png +0 -0
  794. data/shoes/static/menu-top.png +0 -0
  795. data/shoes/static/shoes-dmg.jpg +0 -0
  796. data/shoes/static/shoes-icon-blue.png +0 -0
  797. data/shoes/static/shoes-icon.png +0 -0
  798. data/shoes/static/shoes-manual-apps.gif +0 -0
  799. data/shoes/static/stripe.png +0 -0
  800. data/shoes/static/stubs/blank.exe +0 -0
  801. data/shoes/static/stubs/blank.hfz +0 -0
  802. data/shoes/static/stubs/blank.run +375 -0
  803. data/shoes/static/stubs/cocoa-install +0 -0
  804. data/shoes/static/stubs/sh-install +48 -0
  805. data/shoes/static/tutor-back.png +0 -0
  806. data/shoes/zlib.dll +0 -0
  807. data/shoes/zlib1.dll +0 -0
  808. metadata +887 -0
@@ -0,0 +1,1381 @@
1
+ #!/usr/local/bin/ruby
2
+ #--
3
+ # matrix.rb -
4
+ # $Release Version: 1.0$
5
+ # $Revision: 1.13 $
6
+ # Original Version from Smalltalk-80 version
7
+ # on July 23, 1985 at 8:37:17 am
8
+ # by Keiju ISHITSUKA
9
+ #++
10
+ #
11
+ # = matrix.rb
12
+ #
13
+ # An implementation of Matrix and Vector classes.
14
+ #
15
+ # Author:: Keiju ISHITSUKA
16
+ # Documentation:: Gavin Sinclair (sourced from <i>Ruby in a Nutshell</i> (Matsumoto, O'Reilly))
17
+ #
18
+ # See classes Matrix and Vector for documentation.
19
+ #
20
+
21
+ require "e2mmap.rb"
22
+
23
+ module ExceptionForMatrix # :nodoc:
24
+ extend Exception2MessageMapper
25
+ def_e2message(TypeError, "wrong argument type %s (expected %s)")
26
+ def_e2message(ArgumentError, "Wrong # of arguments(%d for %d)")
27
+
28
+ def_exception("ErrDimensionMismatch", "\#{self.name} dimension mismatch")
29
+ def_exception("ErrNotRegular", "Not Regular Matrix")
30
+ def_exception("ErrOperationNotDefined", "This operation(%s) can\\'t defined")
31
+ end
32
+
33
+ #
34
+ # The +Matrix+ class represents a mathematical matrix, and provides methods for creating
35
+ # special-case matrices (zero, identity, diagonal, singular, vector), operating on them
36
+ # arithmetically and algebraically, and determining their mathematical properties (trace, rank,
37
+ # inverse, determinant).
38
+ #
39
+ # Note that although matrices should theoretically be rectangular, this is not
40
+ # enforced by the class.
41
+ #
42
+ # Also note that the determinant of integer matrices may be incorrectly calculated unless you
43
+ # also <tt>require 'mathn'</tt>. This may be fixed in the future.
44
+ #
45
+ # == Method Catalogue
46
+ #
47
+ # To create a matrix:
48
+ # * <tt> Matrix[*rows] </tt>
49
+ # * <tt> Matrix.[](*rows) </tt>
50
+ # * <tt> Matrix.rows(rows, copy = true) </tt>
51
+ # * <tt> Matrix.columns(columns) </tt>
52
+ # * <tt> Matrix.diagonal(*values) </tt>
53
+ # * <tt> Matrix.scalar(n, value) </tt>
54
+ # * <tt> Matrix.scalar(n, value) </tt>
55
+ # * <tt> Matrix.identity(n) </tt>
56
+ # * <tt> Matrix.unit(n) </tt>
57
+ # * <tt> Matrix.I(n) </tt>
58
+ # * <tt> Matrix.zero(n) </tt>
59
+ # * <tt> Matrix.row_vector(row) </tt>
60
+ # * <tt> Matrix.column_vector(column) </tt>
61
+ #
62
+ # To access Matrix elements/columns/rows/submatrices/properties:
63
+ # * <tt> [](i, j) </tt>
64
+ # * <tt> #row_size </tt>
65
+ # * <tt> #column_size </tt>
66
+ # * <tt> #row(i) </tt>
67
+ # * <tt> #column(j) </tt>
68
+ # * <tt> #collect </tt>
69
+ # * <tt> #map </tt>
70
+ # * <tt> #minor(*param) </tt>
71
+ #
72
+ # Properties of a matrix:
73
+ # * <tt> #regular? </tt>
74
+ # * <tt> #singular? </tt>
75
+ # * <tt> #square? </tt>
76
+ #
77
+ # Matrix arithmetic:
78
+ # * <tt> *(m) </tt>
79
+ # * <tt> +(m) </tt>
80
+ # * <tt> -(m) </tt>
81
+ # * <tt> #/(m) </tt>
82
+ # * <tt> #inverse </tt>
83
+ # * <tt> #inv </tt>
84
+ # * <tt> ** </tt>
85
+ #
86
+ # Matrix functions:
87
+ # * <tt> #determinant </tt>
88
+ # * <tt> #det </tt>
89
+ # * <tt> #rank </tt>
90
+ # * <tt> #trace </tt>
91
+ # * <tt> #tr </tt>
92
+ # * <tt> #transpose </tt>
93
+ # * <tt> #t </tt>
94
+ #
95
+ # Conversion to other data types:
96
+ # * <tt> #coerce(other) </tt>
97
+ # * <tt> #row_vectors </tt>
98
+ # * <tt> #column_vectors </tt>
99
+ # * <tt> #to_a </tt>
100
+ #
101
+ # String representations:
102
+ # * <tt> #to_s </tt>
103
+ # * <tt> #inspect </tt>
104
+ #
105
+ class Matrix
106
+ @RCS_ID='-$Id: matrix.rb,v 1.13 2001/12/09 14:22:23 keiju Exp keiju $-'
107
+
108
+ # extend Exception2MessageMapper
109
+ include ExceptionForMatrix
110
+
111
+ # instance creations
112
+ private_class_method :new
113
+
114
+ #
115
+ # Creates a matrix where each argument is a row.
116
+ # Matrix[ [25, 93], [-1, 66] ]
117
+ # => 25 93
118
+ # -1 66
119
+ #
120
+ def Matrix.[](*rows)
121
+ new(:init_rows, rows, false)
122
+ end
123
+
124
+ #
125
+ # Creates a matrix where +rows+ is an array of arrays, each of which is a row
126
+ # to the matrix. If the optional argument +copy+ is false, use the given
127
+ # arrays as the internal structure of the matrix without copying.
128
+ # Matrix.rows([[25, 93], [-1, 66]])
129
+ # => 25 93
130
+ # -1 66
131
+ def Matrix.rows(rows, copy = true)
132
+ new(:init_rows, rows, copy)
133
+ end
134
+
135
+ #
136
+ # Creates a matrix using +columns+ as an array of column vectors.
137
+ # Matrix.columns([[25, 93], [-1, 66]])
138
+ # => 25 -1
139
+ # 93 66
140
+ #
141
+ #
142
+ def Matrix.columns(columns)
143
+ rows = (0 .. columns[0].size - 1).collect {|i|
144
+ (0 .. columns.size - 1).collect {|j|
145
+ columns[j][i]
146
+ }
147
+ }
148
+ Matrix.rows(rows, false)
149
+ end
150
+
151
+ #
152
+ # Creates a matrix where the diagonal elements are composed of +values+.
153
+ # Matrix.diagonal(9, 5, -3)
154
+ # => 9 0 0
155
+ # 0 5 0
156
+ # 0 0 -3
157
+ #
158
+ def Matrix.diagonal(*values)
159
+ size = values.size
160
+ rows = (0 .. size - 1).collect {|j|
161
+ row = Array.new(size).fill(0, 0, size)
162
+ row[j] = values[j]
163
+ row
164
+ }
165
+ rows(rows, false)
166
+ end
167
+
168
+ #
169
+ # Creates an +n+ by +n+ diagonal matrix where each diagonal element is
170
+ # +value+.
171
+ # Matrix.scalar(2, 5)
172
+ # => 5 0
173
+ # 0 5
174
+ #
175
+ def Matrix.scalar(n, value)
176
+ Matrix.diagonal(*Array.new(n).fill(value, 0, n))
177
+ end
178
+
179
+ #
180
+ # Creates an +n+ by +n+ identity matrix.
181
+ # Matrix.identity(2)
182
+ # => 1 0
183
+ # 0 1
184
+ #
185
+ def Matrix.identity(n)
186
+ Matrix.scalar(n, 1)
187
+ end
188
+ class << Matrix
189
+ alias unit identity
190
+ alias I identity
191
+ end
192
+
193
+ #
194
+ # Creates an +n+ by +n+ zero matrix.
195
+ # Matrix.zero(2)
196
+ # => 0 0
197
+ # 0 0
198
+ #
199
+ def Matrix.zero(n)
200
+ Matrix.scalar(n, 0)
201
+ end
202
+
203
+ #
204
+ # Creates a single-row matrix where the values of that row are as given in
205
+ # +row+.
206
+ # Matrix.row_vector([4,5,6])
207
+ # => 4 5 6
208
+ #
209
+ def Matrix.row_vector(row)
210
+ case row
211
+ when Vector
212
+ Matrix.rows([row.to_a], false)
213
+ when Array
214
+ Matrix.rows([row.dup], false)
215
+ else
216
+ Matrix.rows([[row]], false)
217
+ end
218
+ end
219
+
220
+ #
221
+ # Creates a single-column matrix where the values of that column are as given
222
+ # in +column+.
223
+ # Matrix.column_vector([4,5,6])
224
+ # => 4
225
+ # 5
226
+ # 6
227
+ #
228
+ def Matrix.column_vector(column)
229
+ case column
230
+ when Vector
231
+ Matrix.columns([column.to_a])
232
+ when Array
233
+ Matrix.columns([column])
234
+ else
235
+ Matrix.columns([[column]])
236
+ end
237
+ end
238
+
239
+ #
240
+ # This method is used by the other methods that create matrices, and is of no
241
+ # use to general users.
242
+ #
243
+ def initialize(init_method, *argv)
244
+ self.send(init_method, *argv)
245
+ end
246
+
247
+ def init_rows(rows, copy)
248
+ if copy
249
+ @rows = rows.collect{|row| row.dup}
250
+ else
251
+ @rows = rows
252
+ end
253
+ self
254
+ end
255
+ private :init_rows
256
+
257
+ #
258
+ # Returns element (+i+,+j+) of the matrix. That is: row +i+, column +j+.
259
+ #
260
+ def [](i, j)
261
+ @rows[i][j]
262
+ end
263
+ alias element []
264
+ alias component []
265
+
266
+ def []=(i, j, v)
267
+ @rows[i][j] = v
268
+ end
269
+ alias set_element []=
270
+ alias set_component []=
271
+ private :[]=, :set_element, :set_component
272
+
273
+ #
274
+ # Returns the number of rows.
275
+ #
276
+ def row_size
277
+ @rows.size
278
+ end
279
+
280
+ #
281
+ # Returns the number of columns. Note that it is possible to construct a
282
+ # matrix with uneven columns (e.g. Matrix[ [1,2,3], [4,5] ]), but this is
283
+ # mathematically unsound. This method uses the first row to determine the
284
+ # result.
285
+ #
286
+ def column_size
287
+ @rows[0].size
288
+ end
289
+
290
+ #
291
+ # Returns row vector number +i+ of the matrix as a Vector (starting at 0 like
292
+ # an array). When a block is given, the elements of that vector are iterated.
293
+ #
294
+ def row(i) # :yield: e
295
+ if block_given?
296
+ for e in @rows[i]
297
+ yield e
298
+ end
299
+ else
300
+ Vector.elements(@rows[i])
301
+ end
302
+ end
303
+
304
+ #
305
+ # Returns column vector number +j+ of the matrix as a Vector (starting at 0
306
+ # like an array). When a block is given, the elements of that vector are
307
+ # iterated.
308
+ #
309
+ def column(j) # :yield: e
310
+ if block_given?
311
+ 0.upto(row_size - 1) do |i|
312
+ yield @rows[i][j]
313
+ end
314
+ else
315
+ col = (0 .. row_size - 1).collect {|i|
316
+ @rows[i][j]
317
+ }
318
+ Vector.elements(col, false)
319
+ end
320
+ end
321
+
322
+ #
323
+ # Returns a matrix that is the result of iteration of the given block over all
324
+ # elements of the matrix.
325
+ # Matrix[ [1,2], [3,4] ].collect { |e| e**2 }
326
+ # => 1 4
327
+ # 9 16
328
+ #
329
+ def collect # :yield: e
330
+ rows = @rows.collect{|row| row.collect{|e| yield e}}
331
+ Matrix.rows(rows, false)
332
+ end
333
+ alias map collect
334
+
335
+ #
336
+ # Returns a section of the matrix. The parameters are either:
337
+ # * start_row, nrows, start_col, ncols; OR
338
+ # * col_range, row_range
339
+ #
340
+ # Matrix.diagonal(9, 5, -3).minor(0..1, 0..2)
341
+ # => 9 0 0
342
+ # 0 5 0
343
+ #
344
+ def minor(*param)
345
+ case param.size
346
+ when 2
347
+ from_row = param[0].first
348
+ size_row = param[0].end - from_row
349
+ size_row += 1 unless param[0].exclude_end?
350
+ from_col = param[1].first
351
+ size_col = param[1].end - from_col
352
+ size_col += 1 unless param[1].exclude_end?
353
+ when 4
354
+ from_row = param[0]
355
+ size_row = param[1]
356
+ from_col = param[2]
357
+ size_col = param[3]
358
+ else
359
+ Matrix.Raise ArgumentError, param.inspect
360
+ end
361
+
362
+ rows = @rows[from_row, size_row].collect{|row|
363
+ row[from_col, size_col]
364
+ }
365
+ Matrix.rows(rows, false)
366
+ end
367
+
368
+ #--
369
+ # TESTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
370
+ #++
371
+
372
+ #
373
+ # Returns +true+ if this is a regular matrix.
374
+ #
375
+ def regular?
376
+ square? and rank == column_size
377
+ end
378
+
379
+ #
380
+ # Returns +true+ is this is a singular (i.e. non-regular) matrix.
381
+ #
382
+ def singular?
383
+ not regular?
384
+ end
385
+
386
+ #
387
+ # Returns +true+ is this is a square matrix. See note in column_size about this
388
+ # being unreliable, though.
389
+ #
390
+ def square?
391
+ column_size == row_size
392
+ end
393
+
394
+ #--
395
+ # OBJECT METHODS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
396
+ #++
397
+
398
+ #
399
+ # Returns +true+ if and only if the two matrices contain equal elements.
400
+ #
401
+ def ==(other)
402
+ return false unless Matrix === other
403
+
404
+ other.compare_by_row_vectors(@rows)
405
+ end
406
+ def eql?(other)
407
+ return false unless Matrix === other
408
+
409
+ other.compare_by_row_vectors(@rows, :eql?)
410
+ end
411
+
412
+ #
413
+ # Not really intended for general consumption.
414
+ #
415
+ def compare_by_row_vectors(rows, comparison = :==)
416
+ return false unless @rows.size == rows.size
417
+
418
+ 0.upto(@rows.size - 1) do |i|
419
+ return false unless @rows[i].send(comparison, rows[i])
420
+ end
421
+ true
422
+ end
423
+
424
+ #
425
+ # Returns a clone of the matrix, so that the contents of each do not reference
426
+ # identical objects.
427
+ #
428
+ def clone
429
+ Matrix.rows(@rows)
430
+ end
431
+
432
+ #
433
+ # Returns a hash-code for the matrix.
434
+ #
435
+ def hash
436
+ value = 0
437
+ for row in @rows
438
+ for e in row
439
+ value ^= e.hash
440
+ end
441
+ end
442
+ return value
443
+ end
444
+
445
+ #--
446
+ # ARITHMETIC -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
447
+ #++
448
+
449
+ #
450
+ # Matrix multiplication.
451
+ # Matrix[[2,4], [6,8]] * Matrix.identity(2)
452
+ # => 2 4
453
+ # 6 8
454
+ #
455
+ def *(m) # m is matrix or vector or number
456
+ case(m)
457
+ when Numeric
458
+ rows = @rows.collect {|row|
459
+ row.collect {|e|
460
+ e * m
461
+ }
462
+ }
463
+ return Matrix.rows(rows, false)
464
+ when Vector
465
+ m = Matrix.column_vector(m)
466
+ r = self * m
467
+ return r.column(0)
468
+ when Matrix
469
+ Matrix.Raise ErrDimensionMismatch if column_size != m.row_size
470
+
471
+ rows = (0 .. row_size - 1).collect {|i|
472
+ (0 .. m.column_size - 1).collect {|j|
473
+ vij = 0
474
+ 0.upto(column_size - 1) do |k|
475
+ vij += self[i, k] * m[k, j]
476
+ end
477
+ vij
478
+ }
479
+ }
480
+ return Matrix.rows(rows, false)
481
+ else
482
+ x, y = m.coerce(self)
483
+ return x * y
484
+ end
485
+ end
486
+
487
+ #
488
+ # Matrix addition.
489
+ # Matrix.scalar(2,5) + Matrix[[1,0], [-4,7]]
490
+ # => 6 0
491
+ # -4 12
492
+ #
493
+ def +(m)
494
+ case m
495
+ when Numeric
496
+ Matrix.Raise ErrOperationNotDefined, "+"
497
+ when Vector
498
+ m = Matrix.column_vector(m)
499
+ when Matrix
500
+ else
501
+ x, y = m.coerce(self)
502
+ return x + y
503
+ end
504
+
505
+ Matrix.Raise ErrDimensionMismatch unless row_size == m.row_size and column_size == m.column_size
506
+
507
+ rows = (0 .. row_size - 1).collect {|i|
508
+ (0 .. column_size - 1).collect {|j|
509
+ self[i, j] + m[i, j]
510
+ }
511
+ }
512
+ Matrix.rows(rows, false)
513
+ end
514
+
515
+ #
516
+ # Matrix subtraction.
517
+ # Matrix[[1,5], [4,2]] - Matrix[[9,3], [-4,1]]
518
+ # => -8 2
519
+ # 8 1
520
+ #
521
+ def -(m)
522
+ case m
523
+ when Numeric
524
+ Matrix.Raise ErrOperationNotDefined, "-"
525
+ when Vector
526
+ m = Matrix.column_vector(m)
527
+ when Matrix
528
+ else
529
+ x, y = m.coerce(self)
530
+ return x - y
531
+ end
532
+
533
+ Matrix.Raise ErrDimensionMismatch unless row_size == m.row_size and column_size == m.column_size
534
+
535
+ rows = (0 .. row_size - 1).collect {|i|
536
+ (0 .. column_size - 1).collect {|j|
537
+ self[i, j] - m[i, j]
538
+ }
539
+ }
540
+ Matrix.rows(rows, false)
541
+ end
542
+
543
+ #
544
+ # Matrix division (multiplication by the inverse).
545
+ # Matrix[[7,6], [3,9]] / Matrix[[2,9], [3,1]]
546
+ # => -7 1
547
+ # -3 -6
548
+ #
549
+ def /(other)
550
+ case other
551
+ when Numeric
552
+ rows = @rows.collect {|row|
553
+ row.collect {|e|
554
+ e / other
555
+ }
556
+ }
557
+ return Matrix.rows(rows, false)
558
+ when Matrix
559
+ return self * other.inverse
560
+ else
561
+ x, y = other.coerce(self)
562
+ return x / y
563
+ end
564
+ end
565
+
566
+ #
567
+ # Returns the inverse of the matrix.
568
+ # Matrix[[1, 2], [2, 1]].inverse
569
+ # => -1 1
570
+ # 0 -1
571
+ #
572
+ def inverse
573
+ Matrix.Raise ErrDimensionMismatch unless square?
574
+ Matrix.I(row_size).inverse_from(self)
575
+ end
576
+ alias inv inverse
577
+
578
+ #
579
+ # Not for public consumption?
580
+ #
581
+ def inverse_from(src)
582
+ size = row_size - 1
583
+ a = src.to_a
584
+
585
+ for k in 0..size
586
+ i = k
587
+ akk = a[k][k].abs
588
+ ((k+1)..size).each do |j|
589
+ v = a[j][k].abs
590
+ if v > akk
591
+ i = j
592
+ akk = v
593
+ end
594
+ end
595
+ Matrix.Raise ErrNotRegular if akk == 0
596
+ if i != k
597
+ a[i], a[k] = a[k], a[i]
598
+ @rows[i], @rows[k] = @rows[k], @rows[i]
599
+ end
600
+ akk = a[k][k]
601
+
602
+ for i in 0 .. size
603
+ next if i == k
604
+ q = a[i][k].quo(akk)
605
+ a[i][k] = 0
606
+
607
+ for j in (k + 1).. size
608
+ a[i][j] -= a[k][j] * q
609
+ end
610
+ for j in 0..size
611
+ @rows[i][j] -= @rows[k][j] * q
612
+ end
613
+ end
614
+
615
+ for j in (k + 1).. size
616
+ a[k][j] = a[k][j].quo(akk)
617
+ end
618
+ for j in 0..size
619
+ @rows[k][j] = @rows[k][j].quo(akk)
620
+ end
621
+ end
622
+ self
623
+ end
624
+ #alias reciprocal inverse
625
+
626
+ #
627
+ # Matrix exponentiation. Defined for integer powers only. Equivalent to
628
+ # multiplying the matrix by itself N times.
629
+ # Matrix[[7,6], [3,9]] ** 2
630
+ # => 67 96
631
+ # 48 99
632
+ #
633
+ def ** (other)
634
+ if other.kind_of?(Integer)
635
+ x = self
636
+ if other <= 0
637
+ x = self.inverse
638
+ return Matrix.identity(self.column_size) if other == 0
639
+ other = -other
640
+ end
641
+ z = x
642
+ n = other - 1
643
+ while n != 0
644
+ while (div, mod = n.divmod(2)
645
+ mod == 0)
646
+ x = x * x
647
+ n = div
648
+ end
649
+ z *= x
650
+ n -= 1
651
+ end
652
+ z
653
+ elsif other.kind_of?(Float) || defined?(Rational) && other.kind_of?(Rational)
654
+ Matrix.Raise ErrOperationNotDefined, "**"
655
+ else
656
+ Matrix.Raise ErrOperationNotDefined, "**"
657
+ end
658
+ end
659
+
660
+ #--
661
+ # MATRIX FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
662
+ #++
663
+
664
+ #
665
+ # Returns the determinant of the matrix. If the matrix is not square, the
666
+ # result is 0. This method's algorism is Gaussian elimination method
667
+ # and using Numeric#quo(). Beware that using Float values, with their
668
+ # usual lack of precision, can affect the value returned by this method. Use
669
+ # Rational values or Matrix#det_e instead if this is important to you.
670
+ #
671
+ # Matrix[[7,6], [3,9]].determinant
672
+ # => 63.0
673
+ #
674
+ def determinant
675
+ return 0 unless square?
676
+
677
+ size = row_size - 1
678
+ a = to_a
679
+
680
+ det = 1
681
+ k = 0
682
+ loop do
683
+ if (akk = a[k][k]) == 0
684
+ i = k
685
+ loop do
686
+ return 0 if (i += 1) > size
687
+ break unless a[i][k] == 0
688
+ end
689
+ a[i], a[k] = a[k], a[i]
690
+ akk = a[k][k]
691
+ det *= -1
692
+ end
693
+
694
+ for i in k + 1 .. size
695
+ q = a[i][k].quo(akk)
696
+ (k + 1).upto(size) do |j|
697
+ a[i][j] -= a[k][j] * q
698
+ end
699
+ end
700
+ det *= akk
701
+ break unless (k += 1) <= size
702
+ end
703
+ det
704
+ end
705
+ alias det determinant
706
+
707
+ #
708
+ # Returns the determinant of the matrix. If the matrix is not square, the
709
+ # result is 0. This method's algorism is Gaussian elimination method.
710
+ # This method uses Euclidean algorism. If all elements are integer,
711
+ # really exact value. But, if an element is a float, can't return
712
+ # exact value.
713
+ #
714
+ # Matrix[[7,6], [3,9]].determinant
715
+ # => 63
716
+ #
717
+ def determinant_e
718
+ return 0 unless square?
719
+
720
+ size = row_size - 1
721
+ a = to_a
722
+
723
+ det = 1
724
+ k = 0
725
+ loop do
726
+ if a[k][k].zero?
727
+ i = k
728
+ loop do
729
+ return 0 if (i += 1) > size
730
+ break unless a[i][k].zero?
731
+ end
732
+ a[i], a[k] = a[k], a[i]
733
+ det *= -1
734
+ end
735
+
736
+ for i in (k + 1)..size
737
+ q = a[i][k].quo(a[k][k])
738
+ k.upto(size) do |j|
739
+ a[i][j] -= a[k][j] * q
740
+ end
741
+ unless a[i][k].zero?
742
+ a[i], a[k] = a[k], a[i]
743
+ det *= -1
744
+ redo
745
+ end
746
+ end
747
+ det *= a[k][k]
748
+ break unless (k += 1) <= size
749
+ end
750
+ det
751
+ end
752
+ alias det_e determinant_e
753
+
754
+ #
755
+ # Returns the rank of the matrix. Beware that using Float values,
756
+ # probably return faild value. Use Rational values or Matrix#rank_e
757
+ # for getting exact result.
758
+ #
759
+ # Matrix[[7,6], [3,9]].rank
760
+ # => 2
761
+ #
762
+ def rank
763
+ if column_size > row_size
764
+ a = transpose.to_a
765
+ a_column_size = row_size
766
+ a_row_size = column_size
767
+ else
768
+ a = to_a
769
+ a_column_size = column_size
770
+ a_row_size = row_size
771
+ end
772
+ rank = 0
773
+ k = 0
774
+ begin
775
+ if (akk = a[k][k]) == 0
776
+ i = k
777
+ exists = true
778
+ loop do
779
+ if (i += 1) > a_row_size - 1
780
+ exists = false
781
+ break
782
+ end
783
+ break unless a[i][k] == 0
784
+ end
785
+ if exists
786
+ a[i], a[k] = a[k], a[i]
787
+ akk = a[k][k]
788
+ else
789
+ i = k
790
+ exists = true
791
+ loop do
792
+ if (i += 1) > a_column_size - 1
793
+ exists = false
794
+ break
795
+ end
796
+ break unless a[k][i] == 0
797
+ end
798
+ if exists
799
+ k.upto(a_row_size - 1) do |j|
800
+ a[j][k], a[j][i] = a[j][i], a[j][k]
801
+ end
802
+ akk = a[k][k]
803
+ else
804
+ next
805
+ end
806
+ end
807
+ end
808
+
809
+ for i in (k + 1)..(a_row_size - 1)
810
+ q = a[i][k].quo(akk)
811
+ for j in (k + 1)..(a_column_size - 1)
812
+ a[i][j] -= a[k][j] * q
813
+ end
814
+ end
815
+ rank += 1
816
+ end while (k += 1) <= a_column_size - 1
817
+ return rank
818
+ end
819
+
820
+ #
821
+ # Returns the rank of the matrix. This method uses Euclidean
822
+ # algorism. If all elements are integer, really exact value. But, if
823
+ # an element is a float, can't return exact value.
824
+ #
825
+ # Matrix[[7,6], [3,9]].rank
826
+ # => 2
827
+ #
828
+ def rank_e
829
+ a = to_a
830
+ a_column_size = column_size
831
+ a_row_size = row_size
832
+ pi = 0
833
+ (0 ... a_column_size).each do |j|
834
+ if i = (pi ... a_row_size).find{|i0| !a[i0][j].zero?}
835
+ if i != pi
836
+ a[pi], a[i] = a[i], a[pi]
837
+ end
838
+ (pi + 1 ... a_row_size).each do |k|
839
+ q = a[k][j].quo(a[pi][j])
840
+ (pi ... a_column_size).each do |j0|
841
+ a[k][j0] -= q * a[pi][j0]
842
+ end
843
+ if k > pi && !a[k][j].zero?
844
+ a[k], a[pi] = a[pi], a[k]
845
+ redo
846
+ end
847
+ end
848
+ pi += 1
849
+ end
850
+ end
851
+ pi
852
+ end
853
+
854
+
855
+ #
856
+ # Returns the trace (sum of diagonal elements) of the matrix.
857
+ # Matrix[[7,6], [3,9]].trace
858
+ # => 16
859
+ #
860
+ def trace
861
+ tr = 0
862
+ 0.upto(column_size - 1) do |i|
863
+ tr += @rows[i][i]
864
+ end
865
+ tr
866
+ end
867
+ alias tr trace
868
+
869
+ #
870
+ # Returns the transpose of the matrix.
871
+ # Matrix[[1,2], [3,4], [5,6]]
872
+ # => 1 2
873
+ # 3 4
874
+ # 5 6
875
+ # Matrix[[1,2], [3,4], [5,6]].transpose
876
+ # => 1 3 5
877
+ # 2 4 6
878
+ #
879
+ def transpose
880
+ Matrix.columns(@rows)
881
+ end
882
+ alias t transpose
883
+
884
+ #--
885
+ # CONVERTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
886
+ #++
887
+
888
+ #
889
+ # FIXME: describe #coerce.
890
+ #
891
+ def coerce(other)
892
+ case other
893
+ when Numeric
894
+ return Scalar.new(other), self
895
+ else
896
+ raise TypeError, "#{self.class} can't be coerced into #{other.class}"
897
+ end
898
+ end
899
+
900
+ #
901
+ # Returns an array of the row vectors of the matrix. See Vector.
902
+ #
903
+ def row_vectors
904
+ rows = (0 .. row_size - 1).collect {|i|
905
+ row(i)
906
+ }
907
+ rows
908
+ end
909
+
910
+ #
911
+ # Returns an array of the column vectors of the matrix. See Vector.
912
+ #
913
+ def column_vectors
914
+ columns = (0 .. column_size - 1).collect {|i|
915
+ column(i)
916
+ }
917
+ columns
918
+ end
919
+
920
+ #
921
+ # Returns an array of arrays that describe the rows of the matrix.
922
+ #
923
+ def to_a
924
+ @rows.collect{|row| row.collect{|e| e}}
925
+ end
926
+
927
+ def elements_to_f
928
+ collect{|e| e.to_f}
929
+ end
930
+
931
+ def elements_to_i
932
+ collect{|e| e.to_i}
933
+ end
934
+
935
+ def elements_to_r
936
+ collect{|e| e.to_r}
937
+ end
938
+
939
+ #--
940
+ # PRINTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
941
+ #++
942
+
943
+ #
944
+ # Overrides Object#to_s
945
+ #
946
+ def to_s
947
+ "Matrix[" + @rows.collect{|row|
948
+ "[" + row.collect{|e| e.to_s}.join(", ") + "]"
949
+ }.join(", ")+"]"
950
+ end
951
+
952
+ #
953
+ # Overrides Object#inspect
954
+ #
955
+ def inspect
956
+ "Matrix"+@rows.inspect
957
+ end
958
+
959
+ # Private CLASS
960
+
961
+ class Scalar < Numeric # :nodoc:
962
+ include ExceptionForMatrix
963
+
964
+ def initialize(value)
965
+ @value = value
966
+ end
967
+
968
+ # ARITHMETIC
969
+ def +(other)
970
+ case other
971
+ when Numeric
972
+ Scalar.new(@value + other)
973
+ when Vector, Matrix
974
+ Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"
975
+ when Scalar
976
+ Scalar.new(@value + other.value)
977
+ else
978
+ x, y = other.coerce(self)
979
+ x + y
980
+ end
981
+ end
982
+
983
+ def -(other)
984
+ case other
985
+ when Numeric
986
+ Scalar.new(@value - other)
987
+ when Vector, Matrix
988
+ Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"
989
+ when Scalar
990
+ Scalar.new(@value - other.value)
991
+ else
992
+ x, y = other.coerce(self)
993
+ x - y
994
+ end
995
+ end
996
+
997
+ def *(other)
998
+ case other
999
+ when Numeric
1000
+ Scalar.new(@value * other)
1001
+ when Vector, Matrix
1002
+ other.collect{|e| @value * e}
1003
+ else
1004
+ x, y = other.coerce(self)
1005
+ x * y
1006
+ end
1007
+ end
1008
+
1009
+ def / (other)
1010
+ case other
1011
+ when Numeric
1012
+ Scalar.new(@value / other)
1013
+ when Vector
1014
+ Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"
1015
+ when Matrix
1016
+ self * other.inverse
1017
+ else
1018
+ x, y = other.coerce(self)
1019
+ x.quo(y)
1020
+ end
1021
+ end
1022
+
1023
+ def ** (other)
1024
+ case other
1025
+ when Numeric
1026
+ Scalar.new(@value ** other)
1027
+ when Vector
1028
+ Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"
1029
+ when Matrix
1030
+ other.powered_by(self)
1031
+ else
1032
+ x, y = other.coerce(self)
1033
+ x ** y
1034
+ end
1035
+ end
1036
+ end
1037
+ end
1038
+
1039
+
1040
+ #
1041
+ # The +Vector+ class represents a mathematical vector, which is useful in its own right, and
1042
+ # also constitutes a row or column of a Matrix.
1043
+ #
1044
+ # == Method Catalogue
1045
+ #
1046
+ # To create a Vector:
1047
+ # * <tt> Vector.[](*array) </tt>
1048
+ # * <tt> Vector.elements(array, copy = true) </tt>
1049
+ #
1050
+ # To access elements:
1051
+ # * <tt> [](i) </tt>
1052
+ #
1053
+ # To enumerate the elements:
1054
+ # * <tt> #each2(v) </tt>
1055
+ # * <tt> #collect2(v) </tt>
1056
+ #
1057
+ # Vector arithmetic:
1058
+ # * <tt> *(x) "is matrix or number" </tt>
1059
+ # * <tt> +(v) </tt>
1060
+ # * <tt> -(v) </tt>
1061
+ #
1062
+ # Vector functions:
1063
+ # * <tt> #inner_product(v) </tt>
1064
+ # * <tt> #collect </tt>
1065
+ # * <tt> #map </tt>
1066
+ # * <tt> #map2(v) </tt>
1067
+ # * <tt> #r </tt>
1068
+ # * <tt> #size </tt>
1069
+ #
1070
+ # Conversion to other data types:
1071
+ # * <tt> #covector </tt>
1072
+ # * <tt> #to_a </tt>
1073
+ # * <tt> #coerce(other) </tt>
1074
+ #
1075
+ # String representations:
1076
+ # * <tt> #to_s </tt>
1077
+ # * <tt> #inspect </tt>
1078
+ #
1079
+ class Vector
1080
+ include ExceptionForMatrix
1081
+
1082
+ #INSTANCE CREATION
1083
+
1084
+ private_class_method :new
1085
+
1086
+ #
1087
+ # Creates a Vector from a list of elements.
1088
+ # Vector[7, 4, ...]
1089
+ #
1090
+ def Vector.[](*array)
1091
+ new(:init_elements, array, copy = false)
1092
+ end
1093
+
1094
+ #
1095
+ # Creates a vector from an Array. The optional second argument specifies
1096
+ # whether the array itself or a copy is used internally.
1097
+ #
1098
+ def Vector.elements(array, copy = true)
1099
+ new(:init_elements, array, copy)
1100
+ end
1101
+
1102
+ #
1103
+ # For internal use.
1104
+ #
1105
+ def initialize(method, array, copy)
1106
+ self.send(method, array, copy)
1107
+ end
1108
+
1109
+ #
1110
+ # For internal use.
1111
+ #
1112
+ def init_elements(array, copy)
1113
+ if copy
1114
+ @elements = array.dup
1115
+ else
1116
+ @elements = array
1117
+ end
1118
+ end
1119
+
1120
+ # ACCESSING
1121
+
1122
+ #
1123
+ # Returns element number +i+ (starting at zero) of the vector.
1124
+ #
1125
+ def [](i)
1126
+ @elements[i]
1127
+ end
1128
+ alias element []
1129
+ alias component []
1130
+
1131
+ def []=(i, v)
1132
+ @elements[i]= v
1133
+ end
1134
+ alias set_element []=
1135
+ alias set_component []=
1136
+ private :[]=, :set_element, :set_component
1137
+
1138
+ #
1139
+ # Returns the number of elements in the vector.
1140
+ #
1141
+ def size
1142
+ @elements.size
1143
+ end
1144
+
1145
+ #--
1146
+ # ENUMERATIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1147
+ #++
1148
+
1149
+ #
1150
+ # Iterate over the elements of this vector and +v+ in conjunction.
1151
+ #
1152
+ def each2(v) # :yield: e1, e2
1153
+ Vector.Raise ErrDimensionMismatch if size != v.size
1154
+ 0.upto(size - 1) do |i|
1155
+ yield @elements[i], v[i]
1156
+ end
1157
+ end
1158
+
1159
+ #
1160
+ # Collects (as in Enumerable#collect) over the elements of this vector and +v+
1161
+ # in conjunction.
1162
+ #
1163
+ def collect2(v) # :yield: e1, e2
1164
+ Vector.Raise ErrDimensionMismatch if size != v.size
1165
+ (0 .. size - 1).collect do |i|
1166
+ yield @elements[i], v[i]
1167
+ end
1168
+ end
1169
+
1170
+ #--
1171
+ # COMPARING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1172
+ #++
1173
+
1174
+ #
1175
+ # Returns +true+ iff the two vectors have the same elements in the same order.
1176
+ #
1177
+ def ==(other)
1178
+ return false unless Vector === other
1179
+
1180
+ other.compare_by(@elements)
1181
+ end
1182
+ def eql?(other)
1183
+ return false unless Vector === other
1184
+
1185
+ other.compare_by(@elements, :eql?)
1186
+ end
1187
+
1188
+ #
1189
+ # For internal use.
1190
+ #
1191
+ def compare_by(elements, comparison = :==)
1192
+ @elements.send(comparison, elements)
1193
+ end
1194
+
1195
+ #
1196
+ # Return a copy of the vector.
1197
+ #
1198
+ def clone
1199
+ Vector.elements(@elements)
1200
+ end
1201
+
1202
+ #
1203
+ # Return a hash-code for the vector.
1204
+ #
1205
+ def hash
1206
+ @elements.hash
1207
+ end
1208
+
1209
+ #--
1210
+ # ARITHMETIC -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1211
+ #++
1212
+
1213
+ #
1214
+ # Multiplies the vector by +x+, where +x+ is a number or another vector.
1215
+ #
1216
+ def *(x)
1217
+ case x
1218
+ when Numeric
1219
+ els = @elements.collect{|e| e * x}
1220
+ Vector.elements(els, false)
1221
+ when Matrix
1222
+ Matrix.column_vector(self) * x
1223
+ else
1224
+ s, x = x.coerce(self)
1225
+ s * x
1226
+ end
1227
+ end
1228
+
1229
+ #
1230
+ # Vector addition.
1231
+ #
1232
+ def +(v)
1233
+ case v
1234
+ when Vector
1235
+ Vector.Raise ErrDimensionMismatch if size != v.size
1236
+ els = collect2(v) {|v1, v2|
1237
+ v1 + v2
1238
+ }
1239
+ Vector.elements(els, false)
1240
+ when Matrix
1241
+ Matrix.column_vector(self) + v
1242
+ else
1243
+ s, x = v.coerce(self)
1244
+ s + x
1245
+ end
1246
+ end
1247
+
1248
+ #
1249
+ # Vector subtraction.
1250
+ #
1251
+ def -(v)
1252
+ case v
1253
+ when Vector
1254
+ Vector.Raise ErrDimensionMismatch if size != v.size
1255
+ els = collect2(v) {|v1, v2|
1256
+ v1 - v2
1257
+ }
1258
+ Vector.elements(els, false)
1259
+ when Matrix
1260
+ Matrix.column_vector(self) - v
1261
+ else
1262
+ s, x = v.coerce(self)
1263
+ s - x
1264
+ end
1265
+ end
1266
+
1267
+ #--
1268
+ # VECTOR FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1269
+ #++
1270
+
1271
+ #
1272
+ # Returns the inner product of this vector with the other.
1273
+ # Vector[4,7].inner_product Vector[10,1] => 47
1274
+ #
1275
+ def inner_product(v)
1276
+ Vector.Raise ErrDimensionMismatch if size != v.size
1277
+
1278
+ p = 0
1279
+ each2(v) {|v1, v2|
1280
+ p += v1 * v2
1281
+ }
1282
+ p
1283
+ end
1284
+
1285
+ #
1286
+ # Like Array#collect.
1287
+ #
1288
+ def collect # :yield: e
1289
+ els = @elements.collect {|v|
1290
+ yield v
1291
+ }
1292
+ Vector.elements(els, false)
1293
+ end
1294
+ alias map collect
1295
+
1296
+ #
1297
+ # Like Vector#collect2, but returns a Vector instead of an Array.
1298
+ #
1299
+ def map2(v) # :yield: e1, e2
1300
+ els = collect2(v) {|v1, v2|
1301
+ yield v1, v2
1302
+ }
1303
+ Vector.elements(els, false)
1304
+ end
1305
+
1306
+ #
1307
+ # Returns the modulus (Pythagorean distance) of the vector.
1308
+ # Vector[5,8,2].r => 9.643650761
1309
+ #
1310
+ def r
1311
+ v = 0
1312
+ for e in @elements
1313
+ v += e*e
1314
+ end
1315
+ return Math.sqrt(v)
1316
+ end
1317
+
1318
+ #--
1319
+ # CONVERTING
1320
+ #++
1321
+
1322
+ #
1323
+ # Creates a single-row matrix from this vector.
1324
+ #
1325
+ def covector
1326
+ Matrix.row_vector(self)
1327
+ end
1328
+
1329
+ #
1330
+ # Returns the elements of the vector in an array.
1331
+ #
1332
+ def to_a
1333
+ @elements.dup
1334
+ end
1335
+
1336
+ def elements_to_f
1337
+ collect{|e| e.to_f}
1338
+ end
1339
+
1340
+ def elements_to_i
1341
+ collect{|e| e.to_i}
1342
+ end
1343
+
1344
+ def elements_to_r
1345
+ collect{|e| e.to_r}
1346
+ end
1347
+
1348
+ #
1349
+ # FIXME: describe Vector#coerce.
1350
+ #
1351
+ def coerce(other)
1352
+ case other
1353
+ when Numeric
1354
+ return Matrix::Scalar.new(other), self
1355
+ else
1356
+ raise TypeError, "#{self.class} can't be coerced into #{other.class}"
1357
+ end
1358
+ end
1359
+
1360
+ #--
1361
+ # PRINTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1362
+ #++
1363
+
1364
+ #
1365
+ # Overrides Object#to_s
1366
+ #
1367
+ def to_s
1368
+ "Vector[" + @elements.join(", ") + "]"
1369
+ end
1370
+
1371
+ #
1372
+ # Overrides Object#inspect
1373
+ #
1374
+ def inspect
1375
+ str = "Vector"+@elements.inspect
1376
+ end
1377
+ end
1378
+
1379
+
1380
+ # Documentation comments:
1381
+ # - Matrix#coerce and Vector#coerce need to be documented