scout_realtime 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (563) hide show
  1. data/.gitignore +21 -0
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +37 -0
  6. data/Rakefile +16 -0
  7. data/Vagrantfile +7 -0
  8. data/bin/scout_realtime +117 -0
  9. data/lib/scout_realtime/lib/aggregator.rb +8 -0
  10. data/lib/scout_realtime/lib/metric.rb +36 -0
  11. data/lib/scout_realtime/lib/multi_aggregator.rb +12 -0
  12. data/lib/scout_realtime/lib/ring_buffer.rb +25 -0
  13. data/lib/scout_realtime/lib/trollop.rb +782 -0
  14. data/lib/scout_realtime/main.rb +76 -0
  15. data/lib/scout_realtime/models/cpu.rb +21 -0
  16. data/lib/scout_realtime/models/disk.rb +21 -0
  17. data/lib/scout_realtime/models/memory.rb +17 -0
  18. data/lib/scout_realtime/models/network.rb +14 -0
  19. data/lib/scout_realtime/models/processes.rb +13 -0
  20. data/lib/scout_realtime/runner.rb +34 -0
  21. data/lib/scout_realtime/version.rb +5 -0
  22. data/lib/scout_realtime/web/favicon.ico +0 -0
  23. data/lib/scout_realtime/web/images/logo.png +0 -0
  24. data/lib/scout_realtime/web/images/pause.png +0 -0
  25. data/lib/scout_realtime/web/images/play.png +0 -0
  26. data/lib/scout_realtime/web/javascripts/application.js +265 -0
  27. data/lib/scout_realtime/web/javascripts/bootstrap.min.js +7 -0
  28. data/lib/scout_realtime/web/javascripts/charts.js +189 -0
  29. data/lib/scout_realtime/web/javascripts/d3.barchart.js +210 -0
  30. data/lib/scout_realtime/web/javascripts/d3.linechart.js +168 -0
  31. data/lib/scout_realtime/web/javascripts/d3.v3.min.js +5 -0
  32. data/lib/scout_realtime/web/javascripts/handlebars-v1.1.0.js +2563 -0
  33. data/lib/scout_realtime/web/javascripts/jquery.js +3010 -0
  34. data/lib/scout_realtime/web/javascripts/metrics_for_development.js +6 -0
  35. data/lib/scout_realtime/web/stylesheets/bootstrap-theme.min.css +7 -0
  36. data/lib/scout_realtime/web/stylesheets/bootstrap.min.css +7 -0
  37. data/lib/scout_realtime/web/stylesheets/styles.css +254 -0
  38. data/lib/scout_realtime/web/views/graph.erb +6 -0
  39. data/lib/scout_realtime/web/views/header.erb +8 -0
  40. data/lib/scout_realtime/web/views/index.erb +21 -0
  41. data/lib/scout_realtime/web/views/layout.erb +33 -0
  42. data/lib/scout_realtime/web/views/overview_charts.erb +30 -0
  43. data/lib/scout_realtime/web/views/processes.erb +31 -0
  44. data/lib/scout_realtime/web/views/sidebar.erb +19 -0
  45. data/lib/scout_realtime/web_app.rb +59 -0
  46. data/lib/scout_realtime.rb +58 -0
  47. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/bytes.rb +1 -0
  48. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/chars.rb +1 -0
  49. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each.rb +3 -0
  50. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each_byte.rb +9 -0
  51. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each_char.rb +35 -0
  52. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each_line.rb +3 -0
  53. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/getbyte.rb +5 -0
  54. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/lines.rb +5 -0
  55. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/readbyte.rb +5 -0
  56. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf.rb +3 -0
  57. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/collect.rb +3 -0
  58. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/combination.rb +24 -0
  59. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/cycle.rb +16 -0
  60. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/delete_if.rb +3 -0
  61. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/each.rb +3 -0
  62. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/each_index.rb +3 -0
  63. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/find_index.rb +1 -0
  64. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/flatten.rb +47 -0
  65. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/index.rb +15 -0
  66. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/map.rb +3 -0
  67. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/permutation.rb +30 -0
  68. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/pop.rb +15 -0
  69. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/product.rb +32 -0
  70. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/reject.rb +3 -0
  71. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/reverse_each.rb +3 -0
  72. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/rindex.rb +15 -0
  73. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/select.rb +3 -0
  74. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/shift.rb +13 -0
  75. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/shuffle.rb +17 -0
  76. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array.rb +3 -0
  77. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/binding/eval.rb +7 -0
  78. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/binding.rb +3 -0
  79. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/dir/each.rb +7 -0
  80. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/dir/foreach.rb +9 -0
  81. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/dir.rb +3 -0
  82. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/count.rb +17 -0
  83. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/cycle.rb +24 -0
  84. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/detect.rb +3 -0
  85. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/drop.rb +13 -0
  86. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/drop_while.rb +16 -0
  87. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/each_cons.rb +4 -0
  88. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/each_slice.rb +4 -0
  89. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/each_with_index.rb +3 -0
  90. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/entries.rb +11 -0
  91. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/find.rb +3 -0
  92. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/find_all.rb +3 -0
  93. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/find_index.rb +21 -0
  94. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/first.rb +21 -0
  95. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/group_by.rb +14 -0
  96. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/inject.rb +14 -0
  97. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/max_by.rb +16 -0
  98. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/min_by.rb +16 -0
  99. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/minmax.rb +21 -0
  100. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/minmax_by.rb +19 -0
  101. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/none.rb +7 -0
  102. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/one.rb +23 -0
  103. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/partition.rb +3 -0
  104. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/reduce.rb +1 -0
  105. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/reject.rb +3 -0
  106. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/reverse_each.rb +12 -0
  107. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/select.rb +3 -0
  108. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/sort_by.rb +3 -0
  109. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/take.rb +9 -0
  110. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/take_while.rb +14 -0
  111. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/to_a.rb +12 -0
  112. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable.rb +3 -0
  113. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/each.rb +6 -0
  114. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/next.rb +15 -0
  115. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/rewind.rb +13 -0
  116. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/with_index.rb +14 -0
  117. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator.rb +3 -0
  118. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/delete_if.rb +3 -0
  119. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each.rb +3 -0
  120. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each_key.rb +3 -0
  121. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each_pair.rb +3 -0
  122. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each_value.rb +3 -0
  123. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/reject.rb +4 -0
  124. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/select.rb +3 -0
  125. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env.rb +3 -0
  126. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/fixnum/div.rb +7 -0
  127. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/fixnum/fdiv.rb +7 -0
  128. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/fixnum.rb +3 -0
  129. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/float/fdiv.rb +3 -0
  130. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/float.rb +3 -0
  131. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/gc/stress.rb +9 -0
  132. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/gc.rb +3 -0
  133. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/constructor.rb +25 -0
  134. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/delete_if.rb +3 -0
  135. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each.rb +3 -0
  136. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each_key.rb +3 -0
  137. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each_pair.rb +3 -0
  138. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each_value.rb +3 -0
  139. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/eql.rb +1 -0
  140. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/hash.rb +17 -0
  141. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/reject.rb +3 -0
  142. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/select.rb +3 -0
  143. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash.rb +3 -0
  144. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/downto.rb +3 -0
  145. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/even.rb +7 -0
  146. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/odd.rb +7 -0
  147. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/ord.rb +7 -0
  148. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/pred.rb +7 -0
  149. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/times.rb +3 -0
  150. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/upto.rb +3 -0
  151. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer.rb +3 -0
  152. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/bytes.rb +1 -0
  153. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/chars.rb +1 -0
  154. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each.rb +3 -0
  155. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each_byte.rb +6 -0
  156. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each_char.rb +34 -0
  157. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each_line.rb +6 -0
  158. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/foreach.rb +7 -0
  159. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/getbyte.rb +3 -0
  160. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/lines.rb +1 -0
  161. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/readbyte.rb +3 -0
  162. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io.rb +3 -0
  163. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel/__method__.rb +8 -0
  164. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel/instance_exec.rb +10 -0
  165. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel/tap.rb +8 -0
  166. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel.rb +3 -0
  167. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/method/name.rb +49 -0
  168. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/method.rb +3 -0
  169. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/module/class_exec.rb +1 -0
  170. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/module/module_exec.rb +11 -0
  171. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/module.rb +3 -0
  172. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/numeric/step.rb +3 -0
  173. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/numeric.rb +3 -0
  174. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/object_space/each_object.rb +5 -0
  175. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/object_space.rb +3 -0
  176. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/process/exec.rb +3 -0
  177. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/process.rb +3 -0
  178. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/range/each.rb +3 -0
  179. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/range/step.rb +3 -0
  180. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/range.rb +3 -0
  181. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/regexp/union.rb +11 -0
  182. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/regexp.rb +3 -0
  183. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/stdlib/tmpdir.rb +44 -0
  184. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/stdlib.rb +1 -0
  185. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/stop_iteration.rb +14 -0
  186. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/bytes.rb +1 -0
  187. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/bytesize.rb +3 -0
  188. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each.rb +3 -0
  189. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each_byte.rb +5 -0
  190. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each_char.rb +13 -0
  191. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each_line.rb +5 -0
  192. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/end_with.rb +12 -0
  193. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/lines.rb +1 -0
  194. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/partition.rb +20 -0
  195. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/rpartition.rb +19 -0
  196. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/start_with.rb +12 -0
  197. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/upto.rb +15 -0
  198. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string.rb +3 -0
  199. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/struct/each.rb +3 -0
  200. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/struct/each_pair.rb +3 -0
  201. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/struct.rb +3 -0
  202. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/symbol/to_proc.rb +8 -0
  203. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/symbol.rb +3 -0
  204. data/lib/vendor/backports-3.3.5/lib/backports/1.8.7.rb +3 -0
  205. data/lib/vendor/backports-3.3.5/lib/backports/1.8.8.rb +2 -0
  206. data/lib/vendor/backports-3.3.5/lib/backports/1.8.rb +2 -0
  207. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/array/sample.rb +19 -0
  208. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/array/try_convert.rb +7 -0
  209. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/array.rb +3 -0
  210. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/dir/to_path.rb +3 -0
  211. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/dir.rb +3 -0
  212. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerable/each_with_index.rb +14 -0
  213. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerable/each_with_object.rb +9 -0
  214. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerable.rb +3 -0
  215. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerator/new.rb +40 -0
  216. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerator/with_object.rb +6 -0
  217. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerator.rb +3 -0
  218. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/env/key.rb +5 -0
  219. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/env.rb +3 -0
  220. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/atime.rb +5 -0
  221. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/basename.rb +5 -0
  222. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/binary.rb +6 -0
  223. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/blockdev.rb +5 -0
  224. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/chardev.rb +5 -0
  225. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/chmod.rb +5 -0
  226. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/chown.rb +5 -0
  227. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/ctime.rb +5 -0
  228. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/delete.rb +5 -0
  229. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/directory.rb +5 -0
  230. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/dirname.rb +5 -0
  231. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/executable.rb +5 -0
  232. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/executable_real.rb +5 -0
  233. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/exist.rb +5 -0
  234. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/exists.rb +5 -0
  235. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/expand_path.rb +14 -0
  236. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/extname.rb +5 -0
  237. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/file.rb +5 -0
  238. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/ftype.rb +5 -0
  239. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/grpowned.rb +5 -0
  240. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/join.rb +5 -0
  241. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/lchmod.rb +5 -0
  242. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/lchown.rb +5 -0
  243. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/link.rb +5 -0
  244. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/lstat.rb +5 -0
  245. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/mtime.rb +5 -0
  246. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/new.rb +5 -0
  247. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/open.rb +23 -0
  248. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/owned.rb +5 -0
  249. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/pipe.rb +5 -0
  250. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/readable.rb +5 -0
  251. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/readable_real.rb +5 -0
  252. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/readlink.rb +5 -0
  253. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/rename.rb +5 -0
  254. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/setgid.rb +5 -0
  255. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/setuid.rb +5 -0
  256. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/size.rb +14 -0
  257. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/socket.rb +5 -0
  258. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/split.rb +5 -0
  259. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/stat.rb +5 -0
  260. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/sticky.rb +5 -0
  261. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/symlink.rb +6 -0
  262. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/to_path.rb +3 -0
  263. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/truncate.rb +5 -0
  264. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/unlink.rb +5 -0
  265. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/writable.rb +5 -0
  266. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/writable_real.rb +5 -0
  267. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/zero.rb +5 -0
  268. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file.rb +3 -0
  269. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/float/round.rb +21 -0
  270. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/float.rb +3 -0
  271. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/assoc.rb +12 -0
  272. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/default_proc.rb +14 -0
  273. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/key.rb +3 -0
  274. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/rassoc.rb +9 -0
  275. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/try_convert.rb +7 -0
  276. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash.rb +3 -0
  277. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/integer/magnitude.rb +3 -0
  278. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/integer/round.rb +24 -0
  279. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/integer.rb +3 -0
  280. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/binread.rb +10 -0
  281. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/open.rb +21 -0
  282. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/try_convert.rb +7 -0
  283. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/ungetbyte.rb +3 -0
  284. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io.rb +3 -0
  285. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/__callee__.rb +7 -0
  286. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/define_singleton_method.rb +9 -0
  287. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/public_method.rb +11 -0
  288. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/public_send.rb +13 -0
  289. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/require_relative.rb +14 -0
  290. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel.rb +3 -0
  291. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/math/log.rb +20 -0
  292. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/math/log2.rb +5 -0
  293. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/math.rb +3 -0
  294. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/numeric/round.rb +11 -0
  295. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/numeric.rb +3 -0
  296. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/case_compare.rb +6 -0
  297. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/curry.rb +24 -0
  298. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/lambda.rb +40 -0
  299. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/yield.rb +3 -0
  300. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc.rb +3 -0
  301. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/range/cover.rb +3 -0
  302. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/range.rb +3 -0
  303. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/regexp/try_convert.rb +7 -0
  304. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/regexp.rb +3 -0
  305. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/stdlib/prime.rb +497 -0
  306. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/stdlib.rb +1 -0
  307. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/ascii_only.rb +7 -0
  308. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/chr.rb +7 -0
  309. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/clear.rb +8 -0
  310. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/codepoints.rb +8 -0
  311. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/each_codepoint.rb +3 -0
  312. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/getbyte.rb +3 -0
  313. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/ord.rb +7 -0
  314. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/setbyte.rb +3 -0
  315. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/try_convert.rb +7 -0
  316. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string.rb +3 -0
  317. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/capitalize.rb +7 -0
  318. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/casecmp.rb +8 -0
  319. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/comparable.rb +7 -0
  320. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/comparison.rb +8 -0
  321. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/downcase.rb +7 -0
  322. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/element_reference.rb +7 -0
  323. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/empty.rb +7 -0
  324. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/length.rb +7 -0
  325. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/match.rb +9 -0
  326. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/next.rb +1 -0
  327. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/size.rb +7 -0
  328. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/succ.rb +8 -0
  329. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/swapcase.rb +7 -0
  330. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/upcase.rb +7 -0
  331. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol.rb +3 -0
  332. data/lib/vendor/backports-3.3.5/lib/backports/1.9.1.rb +3 -0
  333. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/keep_if.rb +8 -0
  334. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/product.rb +26 -0
  335. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/repeated_combination.rb +25 -0
  336. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/repeated_permutation.rb +26 -0
  337. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/rotate.rb +17 -0
  338. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/select.rb +8 -0
  339. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/sort_by.rb +9 -0
  340. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/uniq.rb +30 -0
  341. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array.rb +3 -0
  342. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/complex/to_r.rb +10 -0
  343. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/complex.rb +3 -0
  344. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/dir/home.rb +5 -0
  345. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/dir.rb +3 -0
  346. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/chunk.rb +39 -0
  347. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/collect_concat.rb +1 -0
  348. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/each_entry.rb +11 -0
  349. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/flat_map.rb +11 -0
  350. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/slice_before.rb +30 -0
  351. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable.rb +3 -0
  352. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/float/infinity.rb +3 -0
  353. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/float/nan.rb +3 -0
  354. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/float.rb +3 -0
  355. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/hash/keep_if.rb +8 -0
  356. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/hash/select.rb +9 -0
  357. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/hash.rb +3 -0
  358. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/kernel/singleton_class.rb +7 -0
  359. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/kernel.rb +3 -0
  360. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/random.rb +1 -0
  361. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb +886 -0
  362. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/matrix/lup_decomposition.rb +218 -0
  363. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/matrix.rb +1871 -0
  364. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/set.rb +13 -0
  365. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib.rb +1 -0
  366. data/lib/vendor/backports-3.3.5/lib/backports/1.9.2.rb +3 -0
  367. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/file/null.rb +16 -0
  368. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/file.rb +3 -0
  369. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io/advise.rb +24 -0
  370. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io/binwrite.rb +7 -0
  371. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io/write.rb +7 -0
  372. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io.rb +3 -0
  373. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/string/byteslice.rb +36 -0
  374. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/string/prepend.rb +10 -0
  375. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/string.rb +3 -0
  376. data/lib/vendor/backports-3.3.5/lib/backports/1.9.3.rb +3 -0
  377. data/lib/vendor/backports-3.3.5/lib/backports/1.9.rb +2 -0
  378. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/array/bsearch.rb +32 -0
  379. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/array.rb +3 -0
  380. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerable/lazy.rb +216 -0
  381. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerable.rb +3 -0
  382. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerator/lazy.rb +1 -0
  383. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerator.rb +3 -0
  384. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/env/to_h.rb +5 -0
  385. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/env.rb +3 -0
  386. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/hash/default_proc.rb +16 -0
  387. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/hash/to_h.rb +7 -0
  388. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/hash.rb +3 -0
  389. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/nil/to_h.rb +7 -0
  390. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/nil.rb +3 -0
  391. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/range/bsearch.rb +49 -0
  392. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/range.rb +3 -0
  393. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib/abbrev.rb +1 -0
  394. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib/fake_stdlib_lib.rb +1 -0
  395. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib/ostruct.rb +27 -0
  396. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib.rb +1 -0
  397. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/struct/to_h.rb +9 -0
  398. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/struct.rb +3 -0
  399. data/lib/vendor/backports-3.3.5/lib/backports/2.0.0.rb +3 -0
  400. data/lib/vendor/backports-3.3.5/lib/backports/2.0.rb +2 -0
  401. data/lib/vendor/backports-3.3.5/lib/backports/basic_object.rb +53 -0
  402. data/lib/vendor/backports-3.3.5/lib/backports/extra/random/MT19937.rb +76 -0
  403. data/lib/vendor/backports-3.3.5/lib/backports/extra/random/bits_and_bytes.rb +91 -0
  404. data/lib/vendor/backports-3.3.5/lib/backports/extra/random/implementation.rb +93 -0
  405. data/lib/vendor/backports-3.3.5/lib/backports/extra/random/load.rb +17 -0
  406. data/lib/vendor/backports-3.3.5/lib/backports/force/array_map.rb +1 -0
  407. data/lib/vendor/backports-3.3.5/lib/backports/force/enumerable_map.rb +3 -0
  408. data/lib/vendor/backports-3.3.5/lib/backports/force/hash_select.rb +9 -0
  409. data/lib/vendor/backports-3.3.5/lib/backports/force/string_length.rb +10 -0
  410. data/lib/vendor/backports-3.3.5/lib/backports/force/string_size.rb +1 -0
  411. data/lib/vendor/backports-3.3.5/lib/backports/rails/array.rb +6 -0
  412. data/lib/vendor/backports-3.3.5/lib/backports/rails/enumerable.rb +12 -0
  413. data/lib/vendor/backports-3.3.5/lib/backports/rails/hash.rb +31 -0
  414. data/lib/vendor/backports-3.3.5/lib/backports/rails/kernel.rb +6 -0
  415. data/lib/vendor/backports-3.3.5/lib/backports/rails/module.rb +6 -0
  416. data/lib/vendor/backports-3.3.5/lib/backports/rails/string.rb +42 -0
  417. data/lib/vendor/backports-3.3.5/lib/backports/rails.rb +4 -0
  418. data/lib/vendor/backports-3.3.5/lib/backports/tools.rb +343 -0
  419. data/lib/vendor/backports-3.3.5/lib/backports/version.rb +3 -0
  420. data/lib/vendor/backports-3.3.5/lib/backports.rb +4 -0
  421. data/lib/vendor/dante-0.2.0/lib/dante/runner.rb +275 -0
  422. data/lib/vendor/dante-0.2.0/lib/dante/version.rb +3 -0
  423. data/lib/vendor/dante-0.2.0/lib/dante.rb +26 -0
  424. data/lib/vendor/rack-1.5.2/lib/rack/auth/abstract/handler.rb +37 -0
  425. data/lib/vendor/rack-1.5.2/lib/rack/auth/abstract/request.rb +43 -0
  426. data/lib/vendor/rack-1.5.2/lib/rack/auth/basic.rb +58 -0
  427. data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/md5.rb +129 -0
  428. data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/nonce.rb +51 -0
  429. data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/params.rb +53 -0
  430. data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/request.rb +41 -0
  431. data/lib/vendor/rack-1.5.2/lib/rack/backports/uri/common_18.rb +56 -0
  432. data/lib/vendor/rack-1.5.2/lib/rack/backports/uri/common_192.rb +52 -0
  433. data/lib/vendor/rack-1.5.2/lib/rack/backports/uri/common_193.rb +29 -0
  434. data/lib/vendor/rack-1.5.2/lib/rack/body_proxy.rb +39 -0
  435. data/lib/vendor/rack-1.5.2/lib/rack/builder.rb +149 -0
  436. data/lib/vendor/rack-1.5.2/lib/rack/cascade.rb +52 -0
  437. data/lib/vendor/rack-1.5.2/lib/rack/chunked.rb +58 -0
  438. data/lib/vendor/rack-1.5.2/lib/rack/commonlogger.rb +64 -0
  439. data/lib/vendor/rack-1.5.2/lib/rack/conditionalget.rb +67 -0
  440. data/lib/vendor/rack-1.5.2/lib/rack/config.rb +20 -0
  441. data/lib/vendor/rack-1.5.2/lib/rack/content_length.rb +33 -0
  442. data/lib/vendor/rack-1.5.2/lib/rack/content_type.rb +29 -0
  443. data/lib/vendor/rack-1.5.2/lib/rack/deflater.rb +116 -0
  444. data/lib/vendor/rack-1.5.2/lib/rack/directory.rb +161 -0
  445. data/lib/vendor/rack-1.5.2/lib/rack/etag.rb +64 -0
  446. data/lib/vendor/rack-1.5.2/lib/rack/file.rb +138 -0
  447. data/lib/vendor/rack-1.5.2/lib/rack/handler/cgi.rb +61 -0
  448. data/lib/vendor/rack-1.5.2/lib/rack/handler/evented_mongrel.rb +8 -0
  449. data/lib/vendor/rack-1.5.2/lib/rack/handler/fastcgi.rb +98 -0
  450. data/lib/vendor/rack-1.5.2/lib/rack/handler/lsws.rb +61 -0
  451. data/lib/vendor/rack-1.5.2/lib/rack/handler/mongrel.rb +100 -0
  452. data/lib/vendor/rack-1.5.2/lib/rack/handler/scgi.rb +67 -0
  453. data/lib/vendor/rack-1.5.2/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  454. data/lib/vendor/rack-1.5.2/lib/rack/handler/thin.rb +27 -0
  455. data/lib/vendor/rack-1.5.2/lib/rack/handler/webrick.rb +81 -0
  456. data/lib/vendor/rack-1.5.2/lib/rack/handler.rb +107 -0
  457. data/lib/vendor/rack-1.5.2/lib/rack/head.rb +22 -0
  458. data/lib/vendor/rack-1.5.2/lib/rack/lint.rb +699 -0
  459. data/lib/vendor/rack-1.5.2/lib/rack/lobster.rb +65 -0
  460. data/lib/vendor/rack-1.5.2/lib/rack/lock.rb +26 -0
  461. data/lib/vendor/rack-1.5.2/lib/rack/logger.rb +18 -0
  462. data/lib/vendor/rack-1.5.2/lib/rack/methodoverride.rb +31 -0
  463. data/lib/vendor/rack-1.5.2/lib/rack/mime.rb +677 -0
  464. data/lib/vendor/rack-1.5.2/lib/rack/mock.rb +190 -0
  465. data/lib/vendor/rack-1.5.2/lib/rack/multipart/generator.rb +93 -0
  466. data/lib/vendor/rack-1.5.2/lib/rack/multipart/parser.rb +176 -0
  467. data/lib/vendor/rack-1.5.2/lib/rack/multipart/uploaded_file.rb +34 -0
  468. data/lib/vendor/rack-1.5.2/lib/rack/multipart.rb +34 -0
  469. data/lib/vendor/rack-1.5.2/lib/rack/nulllogger.rb +18 -0
  470. data/lib/vendor/rack-1.5.2/lib/rack/recursive.rb +61 -0
  471. data/lib/vendor/rack-1.5.2/lib/rack/reloader.rb +109 -0
  472. data/lib/vendor/rack-1.5.2/lib/rack/request.rb +380 -0
  473. data/lib/vendor/rack-1.5.2/lib/rack/response.rb +155 -0
  474. data/lib/vendor/rack-1.5.2/lib/rack/rewindable_input.rb +104 -0
  475. data/lib/vendor/rack-1.5.2/lib/rack/runtime.rb +27 -0
  476. data/lib/vendor/rack-1.5.2/lib/rack/sendfile.rb +155 -0
  477. data/lib/vendor/rack-1.5.2/lib/rack/server.rb +362 -0
  478. data/lib/vendor/rack-1.5.2/lib/rack/session/abstract/id.rb +398 -0
  479. data/lib/vendor/rack-1.5.2/lib/rack/session/cookie.rb +178 -0
  480. data/lib/vendor/rack-1.5.2/lib/rack/session/memcache.rb +93 -0
  481. data/lib/vendor/rack-1.5.2/lib/rack/session/pool.rb +79 -0
  482. data/lib/vendor/rack-1.5.2/lib/rack/showexceptions.rb +378 -0
  483. data/lib/vendor/rack-1.5.2/lib/rack/showstatus.rb +113 -0
  484. data/lib/vendor/rack-1.5.2/lib/rack/static.rb +153 -0
  485. data/lib/vendor/rack-1.5.2/lib/rack/urlmap.rb +76 -0
  486. data/lib/vendor/rack-1.5.2/lib/rack/utils/okjson.rb +599 -0
  487. data/lib/vendor/rack-1.5.2/lib/rack/utils.rb +628 -0
  488. data/lib/vendor/rack-1.5.2/lib/rack.rb +87 -0
  489. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/authenticity_token.rb +31 -0
  490. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/base.rb +119 -0
  491. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/escaped_params.rb +87 -0
  492. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/form_token.rb +23 -0
  493. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/frame_options.rb +37 -0
  494. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/http_origin.rb +32 -0
  495. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/ip_spoofing.rb +23 -0
  496. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/json_csrf.rb +35 -0
  497. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/path_traversal.rb +47 -0
  498. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/remote_referrer.rb +20 -0
  499. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/remote_token.rb +22 -0
  500. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/session_hijacking.rb +36 -0
  501. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/version.rb +16 -0
  502. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/xss_header.rb +25 -0
  503. data/lib/vendor/rack-protection-1.5.1/lib/rack/protection.rb +40 -0
  504. data/lib/vendor/rack-protection-1.5.1/lib/rack-protection.rb +1 -0
  505. data/lib/vendor/sinatra-1.4.4/.yardopts +5 -0
  506. data/lib/vendor/sinatra-1.4.4/lib/sinatra/base.rb +2034 -0
  507. data/lib/vendor/sinatra-1.4.4/lib/sinatra/images/404.png +0 -0
  508. data/lib/vendor/sinatra-1.4.4/lib/sinatra/images/500.png +0 -0
  509. data/lib/vendor/sinatra-1.4.4/lib/sinatra/main.rb +34 -0
  510. data/lib/vendor/sinatra-1.4.4/lib/sinatra/show_exceptions.rb +345 -0
  511. data/lib/vendor/sinatra-1.4.4/lib/sinatra/version.rb +3 -0
  512. data/lib/vendor/sinatra-1.4.4/lib/sinatra.rb +4 -0
  513. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/capture.rb +124 -0
  514. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/config_file.rb +167 -0
  515. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/content_for.rb +125 -0
  516. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib/all.rb +2 -0
  517. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib/setup.rb +53 -0
  518. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib/version.rb +17 -0
  519. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib.rb +39 -0
  520. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/cookies.rb +331 -0
  521. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/decompile.rb +121 -0
  522. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/engine_tracking.rb +96 -0
  523. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/extension.rb +95 -0
  524. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/json.rb +131 -0
  525. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/link_header.rb +132 -0
  526. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/multi_route.rb +87 -0
  527. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/namespace.rb +284 -0
  528. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/reloader.rb +394 -0
  529. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/respond_with.rb +247 -0
  530. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/streaming.rb +243 -0
  531. data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/test_helpers.rb +87 -0
  532. data/lib/vendor/tilt-1.4.1/lib/tilt/asciidoc.rb +34 -0
  533. data/lib/vendor/tilt-1.4.1/lib/tilt/builder.rb +40 -0
  534. data/lib/vendor/tilt-1.4.1/lib/tilt/coffee.rb +54 -0
  535. data/lib/vendor/tilt-1.4.1/lib/tilt/css.rb +80 -0
  536. data/lib/vendor/tilt-1.4.1/lib/tilt/csv.rb +71 -0
  537. data/lib/vendor/tilt-1.4.1/lib/tilt/erb.rb +110 -0
  538. data/lib/vendor/tilt-1.4.1/lib/tilt/etanni.rb +27 -0
  539. data/lib/vendor/tilt-1.4.1/lib/tilt/haml.rb +64 -0
  540. data/lib/vendor/tilt-1.4.1/lib/tilt/liquid.rb +45 -0
  541. data/lib/vendor/tilt-1.4.1/lib/tilt/markaby.rb +52 -0
  542. data/lib/vendor/tilt-1.4.1/lib/tilt/markdown.rb +214 -0
  543. data/lib/vendor/tilt-1.4.1/lib/tilt/nokogiri.rb +43 -0
  544. data/lib/vendor/tilt-1.4.1/lib/tilt/plain.rb +20 -0
  545. data/lib/vendor/tilt-1.4.1/lib/tilt/radius.rb +55 -0
  546. data/lib/vendor/tilt-1.4.1/lib/tilt/rdoc.rb +47 -0
  547. data/lib/vendor/tilt-1.4.1/lib/tilt/string.rb +21 -0
  548. data/lib/vendor/tilt-1.4.1/lib/tilt/template.rb +292 -0
  549. data/lib/vendor/tilt-1.4.1/lib/tilt/textile.rb +30 -0
  550. data/lib/vendor/tilt-1.4.1/lib/tilt/wiki.rb +58 -0
  551. data/lib/vendor/tilt-1.4.1/lib/tilt/yajl.rb +94 -0
  552. data/lib/vendor/tilt-1.4.1/lib/tilt.rb +204 -0
  553. data/scout_realtime.gemspec +30 -0
  554. data/test/data_for_testing.rb +1 -0
  555. data/test/lib/metric_test.rb +48 -0
  556. data/test/models/cpu_test.rb +24 -0
  557. data/test/models/disk_test.rb +24 -0
  558. data/test/models/memory_test.rb +24 -0
  559. data/test/models/network_test.rb +24 -0
  560. data/test/models/processes_test.rb +24 -0
  561. data/test/runner_test.rb +30 -0
  562. data/test/test_helper.rb +4 -0
  563. metadata +730 -0
@@ -0,0 +1,886 @@
1
+ class Matrix
2
+ # Adapted from JAMA: http://math.nist.gov/javanumerics/jama/
3
+
4
+ # Eigenvalues and eigenvectors of a real matrix.
5
+ #
6
+ # Computes the eigenvalues and eigenvectors of a matrix A.
7
+ #
8
+ # If A is diagonalizable, this provides matrices V and D
9
+ # such that A = V*D*V.inv, where D is the diagonal matrix with entries
10
+ # equal to the eigenvalues and V is formed by the eigenvectors.
11
+ #
12
+ # If A is symmetric, then V is orthogonal and thus A = V*D*V.t
13
+
14
+ class EigenvalueDecomposition
15
+
16
+ # Constructs the eigenvalue decomposition for a square matrix +A+
17
+ #
18
+ def initialize(a)
19
+ # @d, @e: Arrays for internal storage of eigenvalues.
20
+ # @v: Array for internal storage of eigenvectors.
21
+ # @h: Array for internal storage of nonsymmetric Hessenberg form.
22
+ raise TypeError, "Expected Matrix but got #{a.class}" unless a.is_a?(Matrix)
23
+ @size = a.row_size
24
+ @d = Array.new(@size, 0)
25
+ @e = Array.new(@size, 0)
26
+
27
+ if (@symmetric = a.symmetric?)
28
+ @v = a.to_a
29
+ tridiagonalize
30
+ diagonalize
31
+ else
32
+ @v = Array.new(@size) { Array.new(@size, 0) }
33
+ @h = a.to_a
34
+ @ort = Array.new(@size, 0)
35
+ reduce_to_hessenberg
36
+ hessenberg_to_real_schur
37
+ end
38
+ end
39
+
40
+ # Returns the eigenvector matrix +V+
41
+ #
42
+ def eigenvector_matrix
43
+ Matrix.send :new, build_eigenvectors.transpose
44
+ end
45
+ alias v eigenvector_matrix
46
+
47
+ # Returns the inverse of the eigenvector matrix +V+
48
+ #
49
+ def eigenvector_matrix_inv
50
+ r = Matrix.send :new, build_eigenvectors
51
+ r = r.transpose.inverse unless @symmetric
52
+ r
53
+ end
54
+ alias v_inv eigenvector_matrix_inv
55
+
56
+ # Returns the eigenvalues in an array
57
+ #
58
+ def eigenvalues
59
+ values = @d.dup
60
+ @e.each_with_index{|imag, i| values[i] = Complex(values[i], imag) unless imag == 0}
61
+ values
62
+ end
63
+
64
+ # Returns an array of the eigenvectors
65
+ #
66
+ def eigenvectors
67
+ build_eigenvectors.map{|ev| Vector.send :new, ev}
68
+ end
69
+
70
+ # Returns the block diagonal eigenvalue matrix +D+
71
+ #
72
+ def eigenvalue_matrix
73
+ Matrix.diagonal(*eigenvalues)
74
+ end
75
+ alias d eigenvalue_matrix
76
+
77
+ # Returns [eigenvector_matrix, eigenvalue_matrix, eigenvector_matrix_inv]
78
+ #
79
+ def to_ary
80
+ [v, d, v_inv]
81
+ end
82
+ alias_method :to_a, :to_ary
83
+
84
+ private
85
+ def build_eigenvectors
86
+ # JAMA stores complex eigenvectors in a strange way
87
+ # See http://cio.nist.gov/esd/emaildir/lists/jama/msg01021.html
88
+ @e.each_with_index.map do |imag, i|
89
+ if imag == 0
90
+ Array.new(@size){|j| @v[j][i]}
91
+ elsif imag > 0
92
+ Array.new(@size){|j| Complex(@v[j][i], @v[j][i+1])}
93
+ else
94
+ Array.new(@size){|j| Complex(@v[j][i], -@v[j][i-1])}
95
+ end
96
+ end
97
+ end
98
+ # Complex scalar division.
99
+
100
+ def cdiv(xr, xi, yr, yi)
101
+ if (yr.abs > yi.abs)
102
+ r = yi/yr
103
+ d = yr + r*yi
104
+ [(xr + r*xi)/d, (xi - r*xr)/d]
105
+ else
106
+ r = yr/yi
107
+ d = yi + r*yr
108
+ [(r*xr + xi)/d, (r*xi - xr)/d]
109
+ end
110
+ end
111
+
112
+
113
+ # Symmetric Householder reduction to tridiagonal form.
114
+
115
+ def tridiagonalize
116
+
117
+ # This is derived from the Algol procedures tred2 by
118
+ # Bowdler, Martin, Reinsch, and Wilkinson, Handbook for
119
+ # Auto. Comp., Vol.ii-Linear Algebra, and the corresponding
120
+ # Fortran subroutine in EISPACK.
121
+
122
+ @size.times do |j|
123
+ @d[j] = @v[@size-1][j]
124
+ end
125
+
126
+ # Householder reduction to tridiagonal form.
127
+
128
+ (@size-1).downto(0+1) do |i|
129
+
130
+ # Scale to avoid under/overflow.
131
+
132
+ scale = 0.0
133
+ h = 0.0
134
+ i.times do |k|
135
+ scale = scale + @d[k].abs
136
+ end
137
+ if (scale == 0.0)
138
+ @e[i] = @d[i-1]
139
+ i.times do |j|
140
+ @d[j] = @v[i-1][j]
141
+ @v[i][j] = 0.0
142
+ @v[j][i] = 0.0
143
+ end
144
+ else
145
+
146
+ # Generate Householder vector.
147
+
148
+ i.times do |k|
149
+ @d[k] /= scale
150
+ h += @d[k] * @d[k]
151
+ end
152
+ f = @d[i-1]
153
+ g = Math.sqrt(h)
154
+ if (f > 0)
155
+ g = -g
156
+ end
157
+ @e[i] = scale * g
158
+ h -= f * g
159
+ @d[i-1] = f - g
160
+ i.times do |j|
161
+ @e[j] = 0.0
162
+ end
163
+
164
+ # Apply similarity transformation to remaining columns.
165
+
166
+ i.times do |j|
167
+ f = @d[j]
168
+ @v[j][i] = f
169
+ g = @e[j] + @v[j][j] * f
170
+ (j+1).upto(i-1) do |k|
171
+ g += @v[k][j] * @d[k]
172
+ @e[k] += @v[k][j] * f
173
+ end
174
+ @e[j] = g
175
+ end
176
+ f = 0.0
177
+ i.times do |j|
178
+ @e[j] /= h
179
+ f += @e[j] * @d[j]
180
+ end
181
+ hh = f / (h + h)
182
+ i.times do |j|
183
+ @e[j] -= hh * @d[j]
184
+ end
185
+ i.times do |j|
186
+ f = @d[j]
187
+ g = @e[j]
188
+ j.upto(i-1) do |k|
189
+ @v[k][j] -= (f * @e[k] + g * @d[k])
190
+ end
191
+ @d[j] = @v[i-1][j]
192
+ @v[i][j] = 0.0
193
+ end
194
+ end
195
+ @d[i] = h
196
+ end
197
+
198
+ # Accumulate transformations.
199
+
200
+ 0.upto(@size-1-1) do |i|
201
+ @v[@size-1][i] = @v[i][i]
202
+ @v[i][i] = 1.0
203
+ h = @d[i+1]
204
+ if (h != 0.0)
205
+ 0.upto(i) do |k|
206
+ @d[k] = @v[k][i+1] / h
207
+ end
208
+ 0.upto(i) do |j|
209
+ g = 0.0
210
+ 0.upto(i) do |k|
211
+ g += @v[k][i+1] * @v[k][j]
212
+ end
213
+ 0.upto(i) do |k|
214
+ @v[k][j] -= g * @d[k]
215
+ end
216
+ end
217
+ end
218
+ 0.upto(i) do |k|
219
+ @v[k][i+1] = 0.0
220
+ end
221
+ end
222
+ @size.times do |j|
223
+ @d[j] = @v[@size-1][j]
224
+ @v[@size-1][j] = 0.0
225
+ end
226
+ @v[@size-1][@size-1] = 1.0
227
+ @e[0] = 0.0
228
+ end
229
+
230
+
231
+ # Symmetric tridiagonal QL algorithm.
232
+
233
+ def diagonalize
234
+ # This is derived from the Algol procedures tql2, by
235
+ # Bowdler, Martin, Reinsch, and Wilkinson, Handbook for
236
+ # Auto. Comp., Vol.ii-Linear Algebra, and the corresponding
237
+ # Fortran subroutine in EISPACK.
238
+
239
+ 1.upto(@size-1) do |i|
240
+ @e[i-1] = @e[i]
241
+ end
242
+ @e[@size-1] = 0.0
243
+
244
+ f = 0.0
245
+ tst1 = 0.0
246
+ eps = Float::EPSILON
247
+ @size.times do |l|
248
+
249
+ # Find small subdiagonal element
250
+
251
+ tst1 = [tst1, @d[l].abs + @e[l].abs].max
252
+ m = l
253
+ while (m < @size) do
254
+ if (@e[m].abs <= eps*tst1)
255
+ break
256
+ end
257
+ m+=1
258
+ end
259
+
260
+ # If m == l, @d[l] is an eigenvalue,
261
+ # otherwise, iterate.
262
+
263
+ if (m > l)
264
+ iter = 0
265
+ begin
266
+ iter = iter + 1 # (Could check iteration count here.)
267
+
268
+ # Compute implicit shift
269
+
270
+ g = @d[l]
271
+ p = (@d[l+1] - g) / (2.0 * @e[l])
272
+ r = Math.hypot(p, 1.0)
273
+ if (p < 0)
274
+ r = -r
275
+ end
276
+ @d[l] = @e[l] / (p + r)
277
+ @d[l+1] = @e[l] * (p + r)
278
+ dl1 = @d[l+1]
279
+ h = g - @d[l]
280
+ (l+2).upto(@size-1) do |i|
281
+ @d[i] -= h
282
+ end
283
+ f += h
284
+
285
+ # Implicit QL transformation.
286
+
287
+ p = @d[m]
288
+ c = 1.0
289
+ c2 = c
290
+ c3 = c
291
+ el1 = @e[l+1]
292
+ s = 0.0
293
+ s2 = 0.0
294
+ (m-1).downto(l) do |i|
295
+ c3 = c2
296
+ c2 = c
297
+ s2 = s
298
+ g = c * @e[i]
299
+ h = c * p
300
+ r = Math.hypot(p, @e[i])
301
+ @e[i+1] = s * r
302
+ s = @e[i] / r
303
+ c = p / r
304
+ p = c * @d[i] - s * g
305
+ @d[i+1] = h + s * (c * g + s * @d[i])
306
+
307
+ # Accumulate transformation.
308
+
309
+ @size.times do |k|
310
+ h = @v[k][i+1]
311
+ @v[k][i+1] = s * @v[k][i] + c * h
312
+ @v[k][i] = c * @v[k][i] - s * h
313
+ end
314
+ end
315
+ p = -s * s2 * c3 * el1 * @e[l] / dl1
316
+ @e[l] = s * p
317
+ @d[l] = c * p
318
+
319
+ # Check for convergence.
320
+
321
+ end while (@e[l].abs > eps*tst1)
322
+ end
323
+ @d[l] = @d[l] + f
324
+ @e[l] = 0.0
325
+ end
326
+
327
+ # Sort eigenvalues and corresponding vectors.
328
+
329
+ 0.upto(@size-2) do |i|
330
+ k = i
331
+ p = @d[i]
332
+ (i+1).upto(@size-1) do |j|
333
+ if (@d[j] < p)
334
+ k = j
335
+ p = @d[j]
336
+ end
337
+ end
338
+ if (k != i)
339
+ @d[k] = @d[i]
340
+ @d[i] = p
341
+ @size.times do |j|
342
+ p = @v[j][i]
343
+ @v[j][i] = @v[j][k]
344
+ @v[j][k] = p
345
+ end
346
+ end
347
+ end
348
+ end
349
+
350
+ # Nonsymmetric reduction to Hessenberg form.
351
+
352
+ def reduce_to_hessenberg
353
+ # This is derived from the Algol procedures orthes and ortran,
354
+ # by Martin and Wilkinson, Handbook for Auto. Comp.,
355
+ # Vol.ii-Linear Algebra, and the corresponding
356
+ # Fortran subroutines in EISPACK.
357
+
358
+ low = 0
359
+ high = @size-1
360
+
361
+ (low+1).upto(high-1) do |m|
362
+
363
+ # Scale column.
364
+
365
+ scale = 0.0
366
+ m.upto(high) do |i|
367
+ scale = scale + @h[i][m-1].abs
368
+ end
369
+ if (scale != 0.0)
370
+
371
+ # Compute Householder transformation.
372
+
373
+ h = 0.0
374
+ high.downto(m) do |i|
375
+ @ort[i] = @h[i][m-1]/scale
376
+ h += @ort[i] * @ort[i]
377
+ end
378
+ g = Math.sqrt(h)
379
+ if (@ort[m] > 0)
380
+ g = -g
381
+ end
382
+ h -= @ort[m] * g
383
+ @ort[m] = @ort[m] - g
384
+
385
+ # Apply Householder similarity transformation
386
+ # @h = (I-u*u'/h)*@h*(I-u*u')/h)
387
+
388
+ m.upto(@size-1) do |j|
389
+ f = 0.0
390
+ high.downto(m) do |i|
391
+ f += @ort[i]*@h[i][j]
392
+ end
393
+ f = f/h
394
+ m.upto(high) do |i|
395
+ @h[i][j] -= f*@ort[i]
396
+ end
397
+ end
398
+
399
+ 0.upto(high) do |i|
400
+ f = 0.0
401
+ high.downto(m) do |j|
402
+ f += @ort[j]*@h[i][j]
403
+ end
404
+ f = f/h
405
+ m.upto(high) do |j|
406
+ @h[i][j] -= f*@ort[j]
407
+ end
408
+ end
409
+ @ort[m] = scale*@ort[m]
410
+ @h[m][m-1] = scale*g
411
+ end
412
+ end
413
+
414
+ # Accumulate transformations (Algol's ortran).
415
+
416
+ @size.times do |i|
417
+ @size.times do |j|
418
+ @v[i][j] = (i == j ? 1.0 : 0.0)
419
+ end
420
+ end
421
+
422
+ (high-1).downto(low+1) do |m|
423
+ if (@h[m][m-1] != 0.0)
424
+ (m+1).upto(high) do |i|
425
+ @ort[i] = @h[i][m-1]
426
+ end
427
+ m.upto(high) do |j|
428
+ g = 0.0
429
+ m.upto(high) do |i|
430
+ g += @ort[i] * @v[i][j]
431
+ end
432
+ # Double division avoids possible underflow
433
+ g = (g / @ort[m]) / @h[m][m-1]
434
+ m.upto(high) do |i|
435
+ @v[i][j] += g * @ort[i]
436
+ end
437
+ end
438
+ end
439
+ end
440
+ end
441
+
442
+
443
+
444
+ # Nonsymmetric reduction from Hessenberg to real Schur form.
445
+
446
+ def hessenberg_to_real_schur
447
+
448
+ # This is derived from the Algol procedure hqr2,
449
+ # by Martin and Wilkinson, Handbook for Auto. Comp.,
450
+ # Vol.ii-Linear Algebra, and the corresponding
451
+ # Fortran subroutine in EISPACK.
452
+
453
+ # Initialize
454
+
455
+ nn = @size
456
+ n = nn-1
457
+ low = 0
458
+ high = nn-1
459
+ eps = Float::EPSILON
460
+ exshift = 0.0
461
+ p=q=r=s=z=0
462
+
463
+ # Store roots isolated by balanc and compute matrix norm
464
+
465
+ norm = 0.0
466
+ nn.times do |i|
467
+ if (i < low || i > high)
468
+ @d[i] = @h[i][i]
469
+ @e[i] = 0.0
470
+ end
471
+ ([i-1, 0].max).upto(nn-1) do |j|
472
+ norm = norm + @h[i][j].abs
473
+ end
474
+ end
475
+
476
+ # Outer loop over eigenvalue index
477
+
478
+ iter = 0
479
+ while (n >= low) do
480
+
481
+ # Look for single small sub-diagonal element
482
+
483
+ l = n
484
+ while (l > low) do
485
+ s = @h[l-1][l-1].abs + @h[l][l].abs
486
+ if (s == 0.0)
487
+ s = norm
488
+ end
489
+ if (@h[l][l-1].abs < eps * s)
490
+ break
491
+ end
492
+ l-=1
493
+ end
494
+
495
+ # Check for convergence
496
+ # One root found
497
+
498
+ if (l == n)
499
+ @h[n][n] = @h[n][n] + exshift
500
+ @d[n] = @h[n][n]
501
+ @e[n] = 0.0
502
+ n-=1
503
+ iter = 0
504
+
505
+ # Two roots found
506
+
507
+ elsif (l == n-1)
508
+ w = @h[n][n-1] * @h[n-1][n]
509
+ p = (@h[n-1][n-1] - @h[n][n]) / 2.0
510
+ q = p * p + w
511
+ z = Math.sqrt(q.abs)
512
+ @h[n][n] = @h[n][n] + exshift
513
+ @h[n-1][n-1] = @h[n-1][n-1] + exshift
514
+ x = @h[n][n]
515
+
516
+ # Real pair
517
+
518
+ if (q >= 0)
519
+ if (p >= 0)
520
+ z = p + z
521
+ else
522
+ z = p - z
523
+ end
524
+ @d[n-1] = x + z
525
+ @d[n] = @d[n-1]
526
+ if (z != 0.0)
527
+ @d[n] = x - w / z
528
+ end
529
+ @e[n-1] = 0.0
530
+ @e[n] = 0.0
531
+ x = @h[n][n-1]
532
+ s = x.abs + z.abs
533
+ p = x / s
534
+ q = z / s
535
+ r = Math.sqrt(p * p+q * q)
536
+ p /= r
537
+ q /= r
538
+
539
+ # Row modification
540
+
541
+ (n-1).upto(nn-1) do |j|
542
+ z = @h[n-1][j]
543
+ @h[n-1][j] = q * z + p * @h[n][j]
544
+ @h[n][j] = q * @h[n][j] - p * z
545
+ end
546
+
547
+ # Column modification
548
+
549
+ 0.upto(n) do |i|
550
+ z = @h[i][n-1]
551
+ @h[i][n-1] = q * z + p * @h[i][n]
552
+ @h[i][n] = q * @h[i][n] - p * z
553
+ end
554
+
555
+ # Accumulate transformations
556
+
557
+ low.upto(high) do |i|
558
+ z = @v[i][n-1]
559
+ @v[i][n-1] = q * z + p * @v[i][n]
560
+ @v[i][n] = q * @v[i][n] - p * z
561
+ end
562
+
563
+ # Complex pair
564
+
565
+ else
566
+ @d[n-1] = x + p
567
+ @d[n] = x + p
568
+ @e[n-1] = z
569
+ @e[n] = -z
570
+ end
571
+ n -= 2
572
+ iter = 0
573
+
574
+ # No convergence yet
575
+
576
+ else
577
+
578
+ # Form shift
579
+
580
+ x = @h[n][n]
581
+ y = 0.0
582
+ w = 0.0
583
+ if (l < n)
584
+ y = @h[n-1][n-1]
585
+ w = @h[n][n-1] * @h[n-1][n]
586
+ end
587
+
588
+ # Wilkinson's original ad hoc shift
589
+
590
+ if (iter == 10)
591
+ exshift += x
592
+ low.upto(n) do |i|
593
+ @h[i][i] -= x
594
+ end
595
+ s = @h[n][n-1].abs + @h[n-1][n-2].abs
596
+ x = y = 0.75 * s
597
+ w = -0.4375 * s * s
598
+ end
599
+
600
+ # MATLAB's new ad hoc shift
601
+
602
+ if (iter == 30)
603
+ s = (y - x) / 2.0
604
+ s *= s + w
605
+ if (s > 0)
606
+ s = Math.sqrt(s)
607
+ if (y < x)
608
+ s = -s
609
+ end
610
+ s = x - w / ((y - x) / 2.0 + s)
611
+ low.upto(n) do |i|
612
+ @h[i][i] -= s
613
+ end
614
+ exshift += s
615
+ x = y = w = 0.964
616
+ end
617
+ end
618
+
619
+ iter = iter + 1 # (Could check iteration count here.)
620
+
621
+ # Look for two consecutive small sub-diagonal elements
622
+
623
+ m = n-2
624
+ while (m >= l) do
625
+ z = @h[m][m]
626
+ r = x - z
627
+ s = y - z
628
+ p = (r * s - w) / @h[m+1][m] + @h[m][m+1]
629
+ q = @h[m+1][m+1] - z - r - s
630
+ r = @h[m+2][m+1]
631
+ s = p.abs + q.abs + r.abs
632
+ p /= s
633
+ q /= s
634
+ r /= s
635
+ if (m == l)
636
+ break
637
+ end
638
+ if (@h[m][m-1].abs * (q.abs + r.abs) <
639
+ eps * (p.abs * (@h[m-1][m-1].abs + z.abs +
640
+ @h[m+1][m+1].abs)))
641
+ break
642
+ end
643
+ m-=1
644
+ end
645
+
646
+ (m+2).upto(n) do |i|
647
+ @h[i][i-2] = 0.0
648
+ if (i > m+2)
649
+ @h[i][i-3] = 0.0
650
+ end
651
+ end
652
+
653
+ # Double QR step involving rows l:n and columns m:n
654
+
655
+ m.upto(n-1) do |k|
656
+ notlast = (k != n-1)
657
+ if (k != m)
658
+ p = @h[k][k-1]
659
+ q = @h[k+1][k-1]
660
+ r = (notlast ? @h[k+2][k-1] : 0.0)
661
+ x = p.abs + q.abs + r.abs
662
+ if (x != 0.0)
663
+ p /= x
664
+ q /= x
665
+ r /= x
666
+ end
667
+ end
668
+ if (x == 0.0)
669
+ break
670
+ end
671
+ s = Math.sqrt(p * p + q * q + r * r)
672
+ if (p < 0)
673
+ s = -s
674
+ end
675
+ if (s != 0)
676
+ if (k != m)
677
+ @h[k][k-1] = -s * x
678
+ elsif (l != m)
679
+ @h[k][k-1] = -@h[k][k-1]
680
+ end
681
+ p += s
682
+ x = p / s
683
+ y = q / s
684
+ z = r / s
685
+ q /= p
686
+ r /= p
687
+
688
+ # Row modification
689
+
690
+ k.upto(nn-1) do |j|
691
+ p = @h[k][j] + q * @h[k+1][j]
692
+ if (notlast)
693
+ p += r * @h[k+2][j]
694
+ @h[k+2][j] = @h[k+2][j] - p * z
695
+ end
696
+ @h[k][j] = @h[k][j] - p * x
697
+ @h[k+1][j] = @h[k+1][j] - p * y
698
+ end
699
+
700
+ # Column modification
701
+
702
+ 0.upto([n, k+3].min) do |i|
703
+ p = x * @h[i][k] + y * @h[i][k+1]
704
+ if (notlast)
705
+ p += z * @h[i][k+2]
706
+ @h[i][k+2] = @h[i][k+2] - p * r
707
+ end
708
+ @h[i][k] = @h[i][k] - p
709
+ @h[i][k+1] = @h[i][k+1] - p * q
710
+ end
711
+
712
+ # Accumulate transformations
713
+
714
+ low.upto(high) do |i|
715
+ p = x * @v[i][k] + y * @v[i][k+1]
716
+ if (notlast)
717
+ p += z * @v[i][k+2]
718
+ @v[i][k+2] = @v[i][k+2] - p * r
719
+ end
720
+ @v[i][k] = @v[i][k] - p
721
+ @v[i][k+1] = @v[i][k+1] - p * q
722
+ end
723
+ end # (s != 0)
724
+ end # k loop
725
+ end # check convergence
726
+ end # while (n >= low)
727
+
728
+ # Backsubstitute to find vectors of upper triangular form
729
+
730
+ if (norm == 0.0)
731
+ return
732
+ end
733
+
734
+ (nn-1).downto(0) do |n|
735
+ p = @d[n]
736
+ q = @e[n]
737
+
738
+ # Real vector
739
+
740
+ if (q == 0)
741
+ l = n
742
+ @h[n][n] = 1.0
743
+ (n-1).downto(0) do |i|
744
+ w = @h[i][i] - p
745
+ r = 0.0
746
+ l.upto(n) do |j|
747
+ r += @h[i][j] * @h[j][n]
748
+ end
749
+ if (@e[i] < 0.0)
750
+ z = w
751
+ s = r
752
+ else
753
+ l = i
754
+ if (@e[i] == 0.0)
755
+ if (w != 0.0)
756
+ @h[i][n] = -r / w
757
+ else
758
+ @h[i][n] = -r / (eps * norm)
759
+ end
760
+
761
+ # Solve real equations
762
+
763
+ else
764
+ x = @h[i][i+1]
765
+ y = @h[i+1][i]
766
+ q = (@d[i] - p) * (@d[i] - p) + @e[i] * @e[i]
767
+ t = (x * s - z * r) / q
768
+ @h[i][n] = t
769
+ if (x.abs > z.abs)
770
+ @h[i+1][n] = (-r - w * t) / x
771
+ else
772
+ @h[i+1][n] = (-s - y * t) / z
773
+ end
774
+ end
775
+
776
+ # Overflow control
777
+
778
+ t = @h[i][n].abs
779
+ if ((eps * t) * t > 1)
780
+ i.upto(n) do |j|
781
+ @h[j][n] = @h[j][n] / t
782
+ end
783
+ end
784
+ end
785
+ end
786
+
787
+ # Complex vector
788
+
789
+ elsif (q < 0)
790
+ l = n-1
791
+
792
+ # Last vector component imaginary so matrix is triangular
793
+
794
+ if (@h[n][n-1].abs > @h[n-1][n].abs)
795
+ @h[n-1][n-1] = q / @h[n][n-1]
796
+ @h[n-1][n] = -(@h[n][n] - p) / @h[n][n-1]
797
+ else
798
+ cdivr, cdivi = cdiv(0.0, -@h[n-1][n], @h[n-1][n-1]-p, q)
799
+ @h[n-1][n-1] = cdivr
800
+ @h[n-1][n] = cdivi
801
+ end
802
+ @h[n][n-1] = 0.0
803
+ @h[n][n] = 1.0
804
+ (n-2).downto(0) do |i|
805
+ ra = 0.0
806
+ sa = 0.0
807
+ l.upto(n) do |j|
808
+ ra = ra + @h[i][j] * @h[j][n-1]
809
+ sa = sa + @h[i][j] * @h[j][n]
810
+ end
811
+ w = @h[i][i] - p
812
+
813
+ if (@e[i] < 0.0)
814
+ z = w
815
+ r = ra
816
+ s = sa
817
+ else
818
+ l = i
819
+ if (@e[i] == 0)
820
+ cdivr, cdivi = cdiv(-ra, -sa, w, q)
821
+ @h[i][n-1] = cdivr
822
+ @h[i][n] = cdivi
823
+ else
824
+
825
+ # Solve complex equations
826
+
827
+ x = @h[i][i+1]
828
+ y = @h[i+1][i]
829
+ vr = (@d[i] - p) * (@d[i] - p) + @e[i] * @e[i] - q * q
830
+ vi = (@d[i] - p) * 2.0 * q
831
+ if (vr == 0.0 && vi == 0.0)
832
+ vr = eps * norm * (w.abs + q.abs +
833
+ x.abs + y.abs + z.abs)
834
+ end
835
+ cdivr, cdivi = cdiv(x*r-z*ra+q*sa, x*s-z*sa-q*ra, vr, vi)
836
+ @h[i][n-1] = cdivr
837
+ @h[i][n] = cdivi
838
+ if (x.abs > (z.abs + q.abs))
839
+ @h[i+1][n-1] = (-ra - w * @h[i][n-1] + q * @h[i][n]) / x
840
+ @h[i+1][n] = (-sa - w * @h[i][n] - q * @h[i][n-1]) / x
841
+ else
842
+ cdivr, cdivi = cdiv(-r-y*@h[i][n-1], -s-y*@h[i][n], z, q)
843
+ @h[i+1][n-1] = cdivr
844
+ @h[i+1][n] = cdivi
845
+ end
846
+ end
847
+
848
+ # Overflow control
849
+
850
+ t = [@h[i][n-1].abs, @h[i][n].abs].max
851
+ if ((eps * t) * t > 1)
852
+ i.upto(n) do |j|
853
+ @h[j][n-1] = @h[j][n-1] / t
854
+ @h[j][n] = @h[j][n] / t
855
+ end
856
+ end
857
+ end
858
+ end
859
+ end
860
+ end
861
+
862
+ # Vectors of isolated roots
863
+
864
+ nn.times do |i|
865
+ if (i < low || i > high)
866
+ i.upto(nn-1) do |j|
867
+ @v[i][j] = @h[i][j]
868
+ end
869
+ end
870
+ end
871
+
872
+ # Back transformation to get eigenvectors of original matrix
873
+
874
+ (nn-1).downto(low) do |j|
875
+ low.upto(high) do |i|
876
+ z = 0.0
877
+ low.upto([j, high].min) do |k|
878
+ z += @v[i][k] * @h[k][j]
879
+ end
880
+ @v[i][j] = z
881
+ end
882
+ end
883
+ end
884
+
885
+ end
886
+ end