galaaz 0.5.0 → 2.0.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 (359) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/LICENSE +0 -0
  4. data/README.md +1360 -636
  5. data/Rakefile +61 -41
  6. data/bin/galaaz-bootstrap +137 -0
  7. data/bin/galaaz-jruby +14 -0
  8. data/bin/galaaz_jruby_env.inc.sh +6 -0
  9. data/bin/gbookdown +64 -0
  10. data/bin/gknit +84 -13
  11. data/bin/gknit-draft.rb +0 -0
  12. data/bin/gstudio +5 -3
  13. data/bin/gstudio_irb.rb +0 -0
  14. data/bin/gstudio_pry.rb +0 -0
  15. data/bin/install-tinytex +6 -0
  16. data/bin/run_all_rspec +43 -0
  17. data/bin/run_example +14 -0
  18. data/bin/run_old_rspec +19 -0
  19. data/bin/run_rspec +23 -0
  20. data/bin/run_rspec_subset +38 -0
  21. data/bin/run_slow_rspec +19 -0
  22. data/blogs/R-on-Rails-Planning-Document.md +940 -0
  23. data/blogs/README.md +100 -0
  24. data/blogs/galaaz_ggplot/galaaz_ggplot.Rmd +38 -66
  25. data/blogs/galaaz_ggplot/galaaz_ggplot.log +754 -0
  26. data/blogs/galaaz_ggplot/galaaz_ggplot.md +115 -155
  27. data/blogs/galaaz_ggplot/galaaz_ggplot.tex +607 -0
  28. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/midwest_rb.png +0 -0
  29. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/scatter_plot_rb.png +0 -0
  30. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-markdown_github/midwest_rb.png +0 -0
  31. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-markdown_github/scatter_plot_rb.png +0 -0
  32. data/blogs/galaaz_ggplot/midwest.Rmd +3 -3
  33. data/blogs/galaaz_ggplot/midwest_external_png +0 -0
  34. data/blogs/gknit/gknit.Rmd +47 -52
  35. data/blogs/gknit/gknit.md +1430 -0
  36. data/blogs/gknit/gknit_files/figure-html/bubble-1.png +0 -0
  37. data/blogs/gknit/gknit_files/figure-html/diverging_bar.png +0 -0
  38. data/blogs/gknit/lst.rds +0 -0
  39. data/blogs/gknit/model.rb +1 -1
  40. data/blogs/gknit/stats.bib +0 -0
  41. data/blogs/manual/include_model_local_repro.Rmd +14 -0
  42. data/blogs/manual/include_model_local_repro.md +75 -0
  43. data/blogs/manual/lst.rds +0 -0
  44. data/blogs/manual/manual.Rmd +852 -239
  45. data/blogs/manual/manual.log +1786 -0
  46. data/blogs/manual/manual.md +1360 -636
  47. data/blogs/manual/manual.tex +1883 -1161
  48. data/blogs/manual/manual_files/figure-html/bubble-1.png +0 -0
  49. data/blogs/manual/manual_files/figure-html/diverging_bar.png +0 -0
  50. data/blogs/manual/manual_files/figure-latex/bubble-1.png +0 -0
  51. data/blogs/manual/model.rb +1 -1
  52. data/blogs/nse_dplyr/nse_dplyr.Rmd +84 -111
  53. data/blogs/nse_dplyr/nse_dplyr.log +928 -0
  54. data/blogs/nse_dplyr/nse_dplyr.md +198 -229
  55. data/blogs/oh_my/not_so.rb +0 -0
  56. data/blogs/oh_my/oh_my.Rmd +1234 -25
  57. data/blogs/oh_my/oh_my.log +804 -0
  58. data/blogs/oh_my/oh_my.md +1663 -86
  59. data/blogs/oh_my/oh_my.tex +821 -0
  60. data/blogs/oh_my/old.Rmd +15 -14
  61. data/blogs/ruby_plot/ruby_plot.Rmd +58 -82
  62. data/blogs/ruby_plot/ruby_plot.log +885 -0
  63. data/blogs/ruby_plot/ruby_plot.md +71 -102
  64. data/blogs/ruby_plot/ruby_plot.tex +940 -0
  65. data/blogs/ruby_plot/ruby_plot_files/figure-html/dose_len.png +0 -0
  66. data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_delivery.png +0 -0
  67. data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_dose.png +0 -0
  68. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color.png +0 -0
  69. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color2.png +0 -0
  70. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_decorations.png +0 -0
  71. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_jitter.png +0 -0
  72. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_points.png +0 -0
  73. data/blogs/ruby_plot/ruby_plot_files/figure-html/final_box_plot.png +0 -0
  74. data/blogs/ruby_plot/ruby_plot_files/figure-html/final_violin_plot.png +0 -0
  75. data/blogs/ruby_plot/ruby_plot_files/figure-html/violin_with_jitter.png +0 -0
  76. data/blogs/ruby_plot/ruby_plot_files/figure-latex/dose_len.png +0 -0
  77. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_delivery.png +0 -0
  78. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_dose.png +0 -0
  79. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color.png +0 -0
  80. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color2.png +0 -0
  81. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_decorations.png +0 -0
  82. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_jitter.png +0 -0
  83. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_points.png +0 -0
  84. data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_box_plot.png +0 -0
  85. data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_violin_plot.png +0 -0
  86. data/blogs/ruby_plot/ruby_plot_files/figure-latex/violin_with_jitter.png +0 -0
  87. data/blogs/test/test.Rmd +14 -0
  88. data/examples/50Plots_MasterList/Images/midwest-scatterplot.PNG +0 -0
  89. data/examples/50Plots_MasterList/ScatterPlot.rb +0 -0
  90. data/examples/50Plots_MasterList/scatter_plot.rb +0 -0
  91. data/examples/Bibliography/master.bib +0 -0
  92. data/examples/Bibliography/stats.bib +0 -0
  93. data/examples/R/calc.R +0 -0
  94. data/examples/R/java_interop.R +0 -0
  95. data/examples/bioconductor_deseq2_airway/Documentation/DESeq2-airway-walkthrough.md +56 -0
  96. data/examples/bioconductor_deseq2_airway/bench_galaaz_three_same_process.rb +53 -0
  97. data/examples/bioconductor_deseq2_airway/bench_r_three_same_process.R +34 -0
  98. data/examples/bioconductor_deseq2_airway/deseq2_airway_galaaz.rb +33 -0
  99. data/examples/bioconductor_deseq2_airway/deseq2_airway_galaaz_optimized.rb +34 -0
  100. data/examples/bioconductor_deseq2_airway/deseq2_airway_minimal.R +30 -0
  101. data/examples/bioconductor_deseq2_airway/deseq2_airway_pipeline_for_bench.R +36 -0
  102. data/examples/islr/all.rb +13 -0
  103. data/examples/islr/ch2.spec.rb +37 -7
  104. data/examples/islr/ch3.spec.rb +11 -2
  105. data/examples/islr/ch3_boston.rb +27 -0
  106. data/examples/islr/ch3_multiple_regression.rb +0 -0
  107. data/examples/islr/ch6.spec.rb +24 -1
  108. data/examples/islr/x_y_rnorm.jpg +0 -0
  109. data/examples/latex_templates/Test-acm_article/acm_proc_article-sp.cls +0 -0
  110. data/examples/latex_templates/Test-acm_article/sigproc.bib +0 -0
  111. data/examples/latex_templates/Test-acs_article/acs-Test-acs_article.bib +0 -0
  112. data/examples/latex_templates/Test-acs_article/acs-my_output.bib +0 -0
  113. data/examples/latex_templates/Test-aea_article/BibFile.bib +0 -0
  114. data/examples/latex_templates/Test-aea_article/Test-aea_article.Rmd +0 -0
  115. data/examples/latex_templates/Test-aea_article/references.bib +0 -0
  116. data/examples/latex_templates/Test-amq_article/Test-amq_article.Rmd +0 -0
  117. data/examples/latex_templates/Test-amq_article/Test-amq_article.pdfsync +0 -0
  118. data/examples/latex_templates/Test-ieee_article/IEEEtran.bst +0 -0
  119. data/examples/latex_templates/Test-ieee_article/mybibfile.bib +0 -0
  120. data/examples/latex_templates/Test-rjournal_article/RJournal.sty +0 -0
  121. data/examples/latex_templates/Test-rjournal_article/RJreferences.bib +0 -0
  122. data/examples/latex_templates/Test-rjournal_article/Test-rjournal_article.Rmd +0 -0
  123. data/examples/misc/baseball.csv +0 -0
  124. data/examples/misc/ggplot.rb +3 -2
  125. data/examples/misc/moneyball.rb +0 -0
  126. data/examples/misc/subsetting.rb +0 -0
  127. data/examples/multithread_shards_to_r/shards_to_r.rb +67 -0
  128. data/examples/rmarkdown/svm-rmarkdown-anon-ms-example/svm-rmarkdown-anon-ms-example.Rmd +0 -0
  129. data/examples/rmarkdown/svm-rmarkdown-article-example/svm-rmarkdown-article-example.Rmd +0 -0
  130. data/examples/rmarkdown/svm-rmarkdown-beamer-example/svm-rmarkdown-beamer-example.Rmd +0 -0
  131. data/examples/rmarkdown/svm-rmarkdown-cv/svm-rmarkdown-cv.Rmd +0 -0
  132. data/examples/rmarkdown/svm-rmarkdown-syllabus-example/attend-grade-relationships.csv +0 -0
  133. data/examples/rmarkdown/svm-rmarkdown-syllabus-example/svm-rmarkdown-syllabus-example.Rmd +0 -0
  134. data/examples/rmarkdown/svm-xaringan-example/svm-xaringan-example.Rmd +0 -0
  135. data/examples/sthda_ggplot/README.md +0 -0
  136. data/examples/sthda_ggplot/RUN.md +41 -0
  137. data/examples/sthda_ggplot/all.rb +0 -0
  138. data/examples/sthda_ggplot/one_variable_continuous/density_gg.rb +0 -0
  139. data/examples/sthda_ggplot/one_variable_continuous/geom_area.rb +0 -0
  140. data/examples/sthda_ggplot/one_variable_continuous/geom_density.rb +2 -0
  141. data/examples/sthda_ggplot/one_variable_continuous/geom_dotplot.rb +0 -0
  142. data/examples/sthda_ggplot/one_variable_continuous/geom_freqpoly.rb +0 -0
  143. data/examples/sthda_ggplot/one_variable_continuous/geom_histogram.rb +0 -0
  144. data/examples/sthda_ggplot/one_variable_continuous/histogram_density.rb +0 -0
  145. data/examples/sthda_ggplot/one_variable_continuous/stat.rb +0 -0
  146. data/examples/sthda_ggplot/one_variable_discrete/bar.rb +0 -0
  147. data/examples/sthda_ggplot/qplots/box_violin_dot.rb +0 -0
  148. data/examples/sthda_ggplot/qplots/scatter_plots.rb +0 -0
  149. data/examples/sthda_ggplot/scatter_gg.rb +0 -0
  150. data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_bin2d.rb +0 -0
  151. data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_density2d.rb +0 -0
  152. data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_hex.rb +0 -0
  153. data/examples/sthda_ggplot/two_variables_cont_cont/geom_point.rb +0 -0
  154. data/examples/sthda_ggplot/two_variables_cont_cont/geom_smooth.rb +0 -0
  155. data/examples/sthda_ggplot/two_variables_cont_cont/misc.rb +0 -0
  156. data/examples/sthda_ggplot/two_variables_cont_function/geom_area.rb +4 -3
  157. data/examples/sthda_ggplot/two_variables_disc_cont/geom_bar.rb +0 -0
  158. data/examples/sthda_ggplot/two_variables_disc_cont/geom_boxplot.rb +0 -0
  159. data/examples/sthda_ggplot/two_variables_disc_cont/geom_dotplot.rb +0 -0
  160. data/examples/sthda_ggplot/two_variables_disc_cont/geom_jitter.rb +0 -0
  161. data/examples/sthda_ggplot/two_variables_disc_cont/geom_line.rb +0 -0
  162. data/examples/sthda_ggplot/two_variables_disc_cont/geom_violin.rb +0 -0
  163. data/examples/sthda_ggplot/two_variables_disc_disc/geom_jitter.rb +0 -0
  164. data/examples/sthda_ggplot/two_variables_error/geom_crossbar.rb +0 -0
  165. data/ext/new_bridge/Makefile +46 -0
  166. data/ext/new_bridge/galaaz_gatekeeper_phase0.cpp +12 -0
  167. data/ext/new_bridge/galaaz_gatekeeper_phase1.cpp +1639 -0
  168. data/lib/R_interface/galaaz_device.R +20 -0
  169. data/lib/R_interface/include_engine.R +109 -0
  170. data/lib/R_interface/new_bridge_adapter.rb +824 -0
  171. data/lib/R_interface/r.rb +177 -25
  172. data/lib/R_interface/r_arrow.rb +113 -0
  173. data/lib/R_interface/r_libs.R +3 -3
  174. data/lib/R_interface/r_methods.rb +13 -126
  175. data/lib/R_interface/r_module_s.rb +0 -0
  176. data/lib/R_interface/rbinary_operators.rb +20 -2
  177. data/lib/R_interface/rclosure.rb +5 -1
  178. data/lib/R_interface/rdata_frame.rb +34 -70
  179. data/lib/R_interface/rdevice.rb +125 -0
  180. data/lib/R_interface/rdevices.R +0 -0
  181. data/lib/R_interface/renvironment.rb +10 -4
  182. data/lib/R_interface/rexpression.rb +5 -1
  183. data/lib/R_interface/rindexed_object.rb +41 -13
  184. data/lib/R_interface/rlanguage.rb +20 -62
  185. data/lib/R_interface/rlist.rb +115 -25
  186. data/lib/R_interface/rlogical_operators.rb +0 -0
  187. data/lib/R_interface/rmatrix.rb +2 -11
  188. data/lib/R_interface/rmd_indexed_object.rb +5 -1
  189. data/lib/R_interface/robject.rb +348 -290
  190. data/lib/R_interface/rpkg.rb +0 -0
  191. data/lib/R_interface/rsupport.rb +609 -328
  192. data/lib/R_interface/rsupport_scope.rb +2 -1
  193. data/lib/R_interface/rsymbol.rb +50 -0
  194. data/lib/R_interface/ruby_callback.rb +2 -3
  195. data/lib/R_interface/ruby_extensions.rb +225 -175
  196. data/lib/R_interface/runary_operators.rb +0 -0
  197. data/lib/R_interface/rvector.rb +147 -31
  198. data/lib/galaaz.rb +0 -0
  199. data/lib/galaaz_jruby.rb +22 -0
  200. data/lib/gknit/diagnostics.rb +50 -0
  201. data/lib/gknit/draft.rb +23 -17
  202. data/lib/gknit/include_engine.rb +15 -7
  203. data/lib/gknit/knitr_engine.rb +223 -74
  204. data/lib/gknit/rb_engine.rb +3 -3
  205. data/lib/gknit/ruby_engine.rb +0 -0
  206. data/lib/gknit.rb +1 -0
  207. data/lib/new_bridge/bootstrap/windows_bootstrap.rb +285 -0
  208. data/lib/new_bridge/envelope.rb +51 -0
  209. data/lib/new_bridge/eval_result.rb +26 -0
  210. data/lib/new_bridge/framing.rb +39 -0
  211. data/lib/new_bridge/instance_pool_client.rb +38 -0
  212. data/lib/new_bridge/r_instance_manager.rb +404 -0
  213. data/lib/new_bridge/session_client.rb +530 -0
  214. data/lib/new_bridge/tcp_framed.rb +44 -0
  215. data/lib/new_bridge.rb +9 -0
  216. data/lib/util/exec_ruby.rb +95 -20
  217. data/lib/util/inline_file.rb +35 -30
  218. data/new_bridge_specs/benchmark_phase5_5_unboxing_spec.rb +96 -0
  219. data/new_bridge_specs/eval_r_async_spec.rb +113 -0
  220. data/new_bridge_specs/integration_phase5_1_concurrent_spec.rb +50 -0
  221. data/new_bridge_specs/integration_phase5_1_eval_spec.rb +16 -0
  222. data/new_bridge_specs/integration_phase5_1_r_api_spec.rb +25 -0
  223. data/new_bridge_specs/integration_phase5_1_smoke_spec.rb +31 -0
  224. data/new_bridge_specs/integration_phase5_2_dataframe_unboxing_spec.rb +19 -0
  225. data/new_bridge_specs/integration_phase5_2_handle_eval_unboxing_spec.rb +25 -0
  226. data/new_bridge_specs/integration_phase5_3_callback_args_spec.rb +28 -0
  227. data/new_bridge_specs/integration_phase5_3_callback_error_spec.rb +22 -0
  228. data/new_bridge_specs/integration_phase5_3_callback_timeout_spec.rb +28 -0
  229. data/new_bridge_specs/integration_phase5_3_callbacks_smoke_spec.rb +22 -0
  230. data/new_bridge_specs/integration_phase5_3_edge_cases_spec.rb +52 -0
  231. data/new_bridge_specs/integration_phase5_3_nested_spec.rb +30 -0
  232. data/new_bridge_specs/integration_phase5_4_concurrent_sessions_spec.rb +53 -0
  233. data/new_bridge_specs/integration_phase5_4_nested_session_callbacks_spec.rb +49 -0
  234. data/new_bridge_specs/integration_phase5_4_session_routing_spec.rb +38 -0
  235. data/new_bridge_specs/integration_phase5_5_stress_concurrency_spec.rb +52 -0
  236. data/new_bridge_specs/integration_phase5_5_unbox_walk_spec.rb +46 -0
  237. data/new_bridge_specs/phase0_protocol_spec.rb +96 -0
  238. data/new_bridge_specs/phase1_req_ret_spec.rb +66 -0
  239. data/new_bridge_specs/phase2_multi_instance_spec.rb +67 -0
  240. data/new_bridge_specs/phase3_callbacks_spec.rb +71 -0
  241. data/new_bridge_specs/phase4_2_hardening_spec.rb +252 -0
  242. data/new_bridge_specs/phase4_3_r_instance_manager_spec.rb +85 -0
  243. data/new_bridge_specs/phase4_nested_callbacks_spec.rb +123 -0
  244. data/r_requires/ggplot.rb +0 -0
  245. data/r_requires/knitr.rb +0 -0
  246. data/specs/all.rb +15 -11
  247. data/specs/arrow_from_ruby_batches_spec.rb +50 -0
  248. data/specs/arrow_semantics_spec.rb +64 -0
  249. data/specs/bridge_concurrent_spec.rb +46 -0
  250. data/specs/bridge_nested_spec.rb +25 -0
  251. data/specs/dataframe_semantics_spec.rb +122 -0
  252. data/specs/dataframe_single_index_logical_filter_spec.rb +21 -0
  253. data/specs/dispatch_probe_cache_spec.rb +38 -0
  254. data/specs/dispatch_probe_error_class_fallback_spec.rb +20 -0
  255. data/specs/dispatch_probe_fallback_spec.rb +18 -0
  256. data/specs/environment_semantics_spec.rb +89 -0
  257. data/specs/field_access_spec.rb +31 -0
  258. data/specs/figures/bg.jpeg +0 -0
  259. data/specs/figures/bg.png +0 -0
  260. data/specs/figures/bg.svg +168 -57
  261. data/specs/figures/dose_len.png +0 -0
  262. data/specs/figures/no_args.jpeg +0 -0
  263. data/specs/figures/no_args.png +0 -0
  264. data/specs/figures/no_args.svg +168 -57
  265. data/specs/figures/width_height.jpeg +0 -0
  266. data/specs/figures/width_height.png +0 -0
  267. data/specs/figures/width_height_units1.jpeg +0 -0
  268. data/specs/figures/width_height_units1.png +0 -0
  269. data/specs/figures/width_height_units2.jpeg +0 -0
  270. data/specs/figures/width_height_units2.png +0 -0
  271. data/specs/formula_semantics_spec.rb +81 -0
  272. data/specs/galaaz_util_exec_ruby_spec.rb +85 -0
  273. data/specs/galaaz_util_inline_file_spec.rb +54 -0
  274. data/specs/gknit_cli_option_permutation_spec.rb +24 -0
  275. data/specs/gknit_include_engine_spec.rb +72 -0
  276. data/specs/gknit_install_timeout_report_spec.rb +69 -0
  277. data/specs/gknit_internal_error_report_spec.rb +57 -0
  278. data/specs/gknit_vector_map_output_spec.rb +59 -0
  279. data/specs/globalenv_guardrail_spec.rb +52 -0
  280. data/specs/language_expression_semantics_spec.rb +145 -0
  281. data/specs/list_semantics_spec.rb +111 -0
  282. data/specs/new_bridge_bulk_dataframe_transfer_spec.rb +44 -0
  283. data/specs/new_bridge_bulk_vector_transfer_spec.rb +73 -0
  284. data/specs/new_bridge_callback_timeout_spec.rb +69 -0
  285. data/specs/new_bridge_eval_r_fallback_spec.rb +55 -0
  286. data/specs/nil_null_spec.rb +42 -0
  287. data/specs/object_build_phase2_spec.rb +53 -0
  288. data/specs/phase1_callback_bridge_spec.rb +84 -0
  289. data/specs/phase2_gknit_generic_rendering_guardrail_spec.rb +46 -0
  290. data/specs/phase2_gknit_no_raw_code_leakage_spec.rb +43 -0
  291. data/specs/phase3_gknit_generic_graphics_capture_spec.rb +71 -0
  292. data/specs/plot_device_semantics_spec.rb +28 -0
  293. data/specs/plot_snapshot_semantics_spec.rb +58 -0
  294. data/specs/protocol_result_spec.rb +236 -0
  295. data/specs/r_batch_fail_fast_spec.rb +47 -0
  296. data/specs/r_bridge_bootstrap_spec.rb +11 -0
  297. data/specs/r_devices.spec.rb +1 -1
  298. data/specs/r_eval.spec.rb +16 -18
  299. data/specs/r_function.spec.rb +1 -1
  300. data/specs/r_instance_manager_spec.rb +285 -0
  301. data/specs/r_list_apply.spec.rb +15 -15
  302. data/specs/r_matrix.spec.rb +0 -0
  303. data/specs/r_nse.spec.rb +5 -5
  304. data/specs/r_object_send_dispatch_spec.rb +13 -0
  305. data/specs/r_vector_comparator_spec.rb +8 -0
  306. data/specs/r_vector_creation.spec.rb +0 -0
  307. data/specs/r_vector_functions.spec.rb +0 -0
  308. data/specs/r_vector_object.spec.rb +0 -0
  309. data/specs/r_vector_operators.spec.rb +0 -0
  310. data/specs/r_vector_structured_scalar_reads_spec.rb +35 -0
  311. data/specs/r_vector_subsetting.spec.rb +0 -0
  312. data/specs/range_helper_spec.rb +21 -0
  313. data/specs/rsupport_scope_spec.rb +28 -0
  314. data/specs/rsupport_var_name_thread_safety_spec.rb +24 -0
  315. data/specs/scalar_character_spec.rb +44 -0
  316. data/specs/scoped_symbol_dsl_refinement_spec.rb +40 -0
  317. data/specs/session_env_bridge_spec.rb +25 -0
  318. data/specs/simplecov_bootstrap_spec.rb +10 -0
  319. data/specs/spec_helper.rb +10 -0
  320. data/specs/tmp.rb +0 -0
  321. data/specs/unboxing_recursion_regression_spec.rb +30 -0
  322. data/specs/unboxing_spec.rb +49 -0
  323. data/specs/verify_callbacks.rb +42 -0
  324. data/sty/galaaz.sty +0 -0
  325. data/version.rb +1 -1
  326. metadata +194 -64
  327. data/blogs/galaaz_ggplot/galaaz_ggplot.html +0 -520
  328. data/blogs/galaaz_ggplot/galaaz_ggplot.pdf +0 -0
  329. data/blogs/galaaz_ggplot/midwest.html +0 -188
  330. data/blogs/gknit/gknit.html +0 -2266
  331. data/blogs/gknit/gknit.pdf +0 -0
  332. data/blogs/manual/manual.html +0 -4638
  333. data/blogs/manual/manual.pdf +0 -0
  334. data/blogs/manual/manual_files/figure-latex/diverging_bar.pdf +0 -0
  335. data/blogs/nse_dplyr/nse_dplyr.html +0 -878
  336. data/blogs/nse_dplyr/nse_dplyr.pdf +0 -0
  337. data/blogs/oh_my/oh_my.html +0 -568
  338. data/blogs/ruby_plot/ruby_plot.html +0 -544
  339. data/blogs/ruby_plot/ruby_plot.pdf +0 -0
  340. data/examples/latex_templates/Test-acs_article/Test-acs_article.pdf +0 -0
  341. data/examples/latex_templates/Test-aea_article/Test-aea_article.pdf +0 -0
  342. data/examples/latex_templates/Test-amq_article/Test-amq_article.pdf +0 -0
  343. data/examples/latex_templates/Test-amq_article/pics/Figure2.pdf +0 -0
  344. data/examples/latex_templates/Test-asa_article/Test-asa_article.pdf +0 -0
  345. data/examples/latex_templates/Test-ieee_article/Test-ieee_article.pdf +0 -0
  346. data/examples/latex_templates/Test-rjournal_article/RJwrapper.pdf +0 -0
  347. data/examples/latex_templates/Test-springer_article/Test-springer_article.pdf +0 -0
  348. data/examples/rmarkdown/svm-rmarkdown-anon-ms-example/svm-rmarkdown-anon-ms-example.pdf +0 -0
  349. data/examples/rmarkdown/svm-rmarkdown-article-example/svm-rmarkdown-article-example.pdf +0 -0
  350. data/examples/rmarkdown/svm-rmarkdown-beamer-example/svm-rmarkdown-beamer-example.pdf +0 -0
  351. data/examples/rmarkdown/svm-rmarkdown-cv/svm-rmarkdown-cv.pdf +0 -0
  352. data/examples/rmarkdown/svm-rmarkdown-syllabus-example/svm-rmarkdown-syllabus-example.pdf +0 -0
  353. data/specs/r_dataframe.spec.rb +0 -379
  354. data/specs/r_environment.spec.rb +0 -140
  355. data/specs/r_formula.spec.rb +0 -232
  356. data/specs/r_language.spec.rb +0 -112
  357. data/specs/r_list.spec.rb +0 -293
  358. data/specs/r_plots.spec.rb +0 -72
  359. data/specs/ruby_expression.spec.rb +0 -316
@@ -1,78 +1,36 @@
1
- ---
2
- title: "Ruby Plotting with Galaaz"
3
- subtitle: "An example of tightly coupling Ruby and R in GraalVM"
4
- author: "Rodrigo Botafogo"
5
- tags: [Galaaz, Ruby, R, TruffleRuby, FastR, GraalVM, ggplot2]
6
- date: "16 October 2018"
7
- output:
8
- html_document:
9
- self_contained: true
10
- keep_md: true
11
- pdf_document:
12
- includes:
13
- in_header: "../../sty/galaaz.sty"
14
- keep_tex: yes
15
- number_sections: yes
16
- toc: true
17
- toc_depth: 2
18
- md_document:
19
- variant: markdown_github
20
- fontsize: 11pt
21
- ---
22
-
23
-
24
-
25
1
  # Introduction
26
2
 
27
- Galaaz is a system for tightly coupling Ruby and R. Ruby is a powerful language, with
28
- a large community, a very large set of libraries and great for web development. However,
29
- it lacks libraries for data science, statistics, scientific plotting and machine learning.
30
- On the other hand, R is considered one of the most powerful languages for solving all of the
31
- above problems. Maybe the strongest competitor to R is Python with libraries such as NumPy,
32
- Panda, SciPy, SciKit-Learn and a couple more.
33
-
34
- With Galaaz we do not intend to re-implement any of the scientific libraries in R, we allow
35
- for very tight coupling between the two languages to the point that the Ruby developer does
36
- not need to know that there is an R engine running. For this to happen we use new
37
- technologies provided by Oracle: GraalVM, TruffleRuby and FastR:
38
-
39
- GraalVM is a universal virtual machine for running applications
40
- written in JavaScript, Python 3, Ruby, R, JVM-based languages like Java,
41
- Scala, Kotlin, and LLVM-based languages such as C and C++.
42
-
43
- GraalVM removes the isolation between programming languages and enables
44
- interoperability in a shared runtime. It can run either standalone or in
45
- the context of OpenJDK, Node.js, Oracle Database, or MySQL.
46
-
47
- GraalVM allows you to write polyglot applications with a seamless way to
48
- pass values from one language to another. With GraalVM there is no copying
49
- or marshaling necessary as it is with other polyglot systems. This lets
50
- you achieve high performance when language boundaries are crossed. Most
51
- of the time there is no additional cost for crossing a language boundary
52
- at all.
53
-
54
- Often developers have to make uncomfortable compromises that require them
55
- to rewrite their software in other languages. For example:
56
-
57
- * “That library is not available in my language. I need to rewrite it.”
58
- * “That language would be the perfect fit for my problem, but we cannot
59
- run it in our environment.”
60
- * “That problem is already solved in my language, but the language is
61
- too slow.”
62
-
63
- With GraalVM we aim to allow developers to freely choose the right language
64
- for the task at hand without making compromises.
65
-
66
- Interested readers should also check out the following sites:
67
-
68
- * [GraalVM Home](https://www.graalvm.org/)
69
- * [TruffleRuby](https://github.com/oracle/truffleruby)
70
- * [FastR](https://github.com/oracle/fastr)
71
- * [Faster R with FastR](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb)
3
+ Galaaz is a system for tightly coupling Ruby and R. Ruby is a powerful
4
+ language, with a large community, a very large set of libraries and
5
+ great for web development. However, it lacks libraries for data science,
6
+ statistics, scientific plotting and machine learning. On the other hand,
7
+ R is considered one of the most powerful languages for solving all of
8
+ the above problems. Maybe the strongest competitor to R is Python with
9
+ libraries such as NumPy, Panda, SciPy, SciKit-Learn and a couple more.
10
+
11
+ With Galaaz we do not intend to re-implement any of the scientific
12
+ libraries in R; we allow for very tight coupling between the two
13
+ languages to the point that the Ruby developer does not need to think
14
+ about R syntax for every call. **Galaaz 2.0** does this with
15
+ **[JRuby](https://www.jruby.org/)** and **GNU R**: a **bridge**
16
+ evaluates R from Ruby and exchanges data between processes.
17
+
18
+ An **earlier** Galaaz prototype used Oracle’s **GraalVM** with
19
+ **TruffleRuby** and **FastR** in one JVM. That stack is **historical**;
20
+ today’s documentation and tooling assume **JRuby + GNU R** (see the
21
+ project manual and **`bin/galaaz-jruby`** / **`bin/gknit`**).
22
+
23
+ For background on the old stack:
24
+
25
+ - [GraalVM Home](https://www.graalvm.org/)
26
+ - [TruffleRuby](https://github.com/oracle/truffleruby)
27
+ - [FastR](https://github.com/oracle/fastr)
28
+ - [Faster R with
29
+ FastR](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb)
72
30
 
73
31
  ## What does Galaaz mean
74
32
 
75
- Galaaz is the Portuguese name for "Galahad". From Wikipedia:
33
+ Galaaz is the Portuguese name for “Galahad”. From Wikipedia:
76
34
 
77
35
  Sir Galahad (sometimes referred to as Galeas or Galath),
78
36
  in Arthurian legend, is a knight of King Arthur's Round Table and one
@@ -87,32 +45,33 @@ Galaaz is the Portuguese name for "Galahad". From Wikipedia:
87
45
 
88
46
  # Galaaz Demo
89
47
 
90
- ## Prerequisites
48
+ ## Prerequisites (Galaaz 2.0)
91
49
 
92
- * GraalVM (>= rc7)
93
- * TruffleRuby
94
- * FastR
50
+ - **JRuby** and a compatible **JDK**
51
+ - **GNU R** on your `PATH`
95
52
 
96
- The following R packages will be automatically installed when necessary, but could be installed prior
97
- to the demo if desired:
53
+ The following R packages will be automatically installed when necessary,
54
+ but could be installed prior to the demo if desired:
98
55
 
99
- * ggplot2
100
- * gridExtra
56
+ - ggplot2
57
+ - gridExtra
101
58
 
102
- Installation of R packages requires a development environment. In Linux, the gnu compiler and
103
- tools should be enough. I am not sure what is needed on the Mac.
59
+ Installation of R packages requires a development environment. In Linux,
60
+ the gnu compiler and tools should be enough. I am not sure what is
61
+ needed on the Mac.
104
62
 
105
- In order to run the 'specs' the following Ruby package is necessary:
63
+ In order to run the ‘specs’ the following Ruby package is necessary:
106
64
 
107
- * gem install rspec
65
+ - gem install rspec
108
66
 
109
67
  ## Preparation
110
68
 
111
- * gem install galaaz
69
+ - gem install galaaz
112
70
 
113
71
  ## Running the demo
114
72
 
115
- The ggplot for this demos was extracted from: http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html.
73
+ The ggplot for this demos was extracted from:
74
+ <http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html>.
116
75
 
117
76
  On the console do
118
77
 
@@ -124,25 +83,23 @@ Doing on the console
124
83
 
125
84
  > galaaz -T
126
85
 
127
- will show a list with all available demos. To run any of the demos in the list,
128
- substitute the call to
129
- 'rake' to 'galaaz'. For instance, one of the examples in the list is 'rake sthda:bar'.
130
- In order to run
131
- this example just do 'galaaz sthda:bar'. Doing 'galaaz sthda:all' will run all demos in the sthda
132
- cathegory. Some of the examples require 'rspec' do be available. To install 'rspec' just do
133
- 'gem install rspec'.
86
+ will show a list with all available demos. To run any of the demos in
87
+ the list, substitute the call to ‘rake’ to ‘galaaz’. For instance, one
88
+ of the examples in the list is ‘rake sthda:bar’. In order to run this
89
+ example just do ‘galaaz sthda:bar’. Doing ‘galaaz sthda:all’ will run
90
+ all demos in the sthda cathegory. Some of the examples require ‘rspec’
91
+ do be available. To install ‘rspec’ just do ‘gem install rspec’.
134
92
 
135
93
  # The demo code
136
94
 
95
+ The following is the Ruby code and plot for the above example. There is
96
+ a small difference between the code in the example and the code bellow.
97
+ If the example is ran, the plot will appear on the screen, bellow, we
98
+ generate an ‘svg’ image and then include it in this document. In order
99
+ to generate and image, the R.svg device is used. To generate the plot on
100
+ the screen, use the R.awt device, as commented on the code.
137
101
 
138
- The following is the Ruby code and plot for the above example. There is a small difference between
139
- the code in the example and the code bellow. If the example is ran, the plot will appear on the
140
- screen, bellow, we generate an 'svg' image and then include it in this document. In order to
141
- generate and image, the R.svg device is used. To generate the plot on the screen, use the R.awt
142
- device, as commented on the code.
143
-
144
-
145
- ```ruby
102
+ ``` ruby
146
103
  require 'galaaz'
147
104
  require 'ggplot'
148
105
 
@@ -150,7 +107,7 @@ require 'ggplot'
150
107
  R.options(scipen: 999) # turn-off scientific notation like 1e+48
151
108
  R.theme_set(R.theme_bw) # pre-set the bw theme.
152
109
 
153
- midwest = ~:midwest
110
+ midwest = ~R[:midwest]
154
111
 
155
112
  # Scatterplot
156
113
  gg = midwest.ggplot(E.aes(x: :area, y: :poptotal)) +
@@ -167,14 +124,11 @@ gg = midwest.ggplot(E.aes(x: :area, y: :poptotal)) +
167
124
  puts gg
168
125
  ```
169
126
 
170
-
171
- ![](galaaz_ggplot_files/figure-html/midwest_rb.png)<!-- -->
172
-
127
+ ![](galaaz_ggplot_files/figure-markdown_github/midwest_rb.png)
173
128
 
174
129
  In R, the code to generate this plot is the following
175
130
 
176
-
177
- ```r
131
+ ``` r
178
132
  # install.packages("ggplot2")
179
133
  # load package and data
180
134
  options(scipen=999) # turn-off scientific notation like 1e+48
@@ -198,39 +152,44 @@ gg <- ggplot(midwest, aes(x=area, y=poptotal)) +
198
152
  plot(gg)
199
153
  ```
200
154
 
201
- Note that both codes are very similar. The Ruby code requires the use of "R." before calling
202
- any functions,
203
- for instance R function 'geom_point' becomes 'R.geom_point' in Ruby. R named parameters such as
204
- (col = state, size = popdensity), become in Ruby (col: :state, size: :popdensity).
205
-
206
- One last
207
- point that needs to be observed is the call to the 'aes' function. In Ruby instead of doing
208
- 'R.aes', we use 'E.aes'. The explanation of why E.aes is needed is an advanced topic in R and
209
- depends on what is know as Non-standard Evaluation (NSE) in R. In short, function 'aes' is lazily
210
- evaluated in R, i.e., in R when calling geom_point(aes(col=state, size=popdensity)), function
211
- geom_point receives as argument something similar to a string containing
212
- 'aes(col=state, size=popdensity)', and the aes function will be evaluated inside the geom_point
213
- function. In Ruby, there is no Lazy evaluation and doing R.aes would try to evaluate aes
214
- immediately. In order to delay the evaluation of function aes we need to use E.aes. The
215
- interested reader on NSE in R is directed to http://adv-r.had.co.nz/Computing-on-the-language.html.
155
+ Note that both codes are very similar. The Ruby code requires the use of
156
+ “R.” before calling any functions, for instance R function ‘geom_point’
157
+ becomes ‘R.geom_point’ in Ruby. R named parameters such as (col = state,
158
+ size = popdensity), become in Ruby (col: :state, size: :popdensity).
159
+
160
+ One last point that needs to be observed is the call to the ‘aes’
161
+ function. In Ruby instead of doing ‘R.aes’, we use ‘E.aes’. The
162
+ explanation of why E.aes is needed is an advanced topic in R and depends
163
+ on what is know as Non-standard Evaluation (NSE) in R. In short,
164
+ function ‘aes’ is lazily evaluated in R, i.e., in R when calling
165
+ geom_point(aes(col=state, size=popdensity)), function geom_point
166
+ receives as argument something similar to a string containing
167
+ ‘aes(col=state, size=popdensity)’, and the aes function will be
168
+ evaluated inside the geom_point function. In Ruby, there is no Lazy
169
+ evaluation and doing R.aes would try to evaluate aes immediately. In
170
+ order to delay the evaluation of function aes we need to use E.aes. The
171
+ interested reader on NSE in R is directed to
172
+ <http://adv-r.had.co.nz/Computing-on-the-language.html>.
216
173
 
217
174
  # An extension to the example
218
175
 
219
- If both codes are so similar, then why would one use Ruby instead of R and what good is galaaz
220
- after all?
221
-
222
- Ruby is a modern OO language with numerous very useful constructs such as classes, modules, blocks,
223
- procs, etc. The example above focus on the coupling of both languages, and does not show the
224
- use of other Ruby constructs. In the following example, we will show a more complex example using
225
- other Ruby constructs. This is certainly not a very well written and robust Ruby code, but
226
- it give the idea of how Ruby and R are strongly coupled.
176
+ If both codes are so similar, then why would one use Ruby instead of R
177
+ and what good is galaaz after all?
227
178
 
228
- Let's imagine that we work in a corporation that has its plot themes. So, it has defined a
229
- 'CorpTheme' module. Plots in this corporation should not have grids, numbers in labels should
230
- not use scientific notation and the preferred color is blue.
179
+ Ruby is a modern OO language with numerous very useful constructs such
180
+ as classes, modules, blocks, procs, etc. The example above focus on the
181
+ coupling of both languages, and does not show the use of other Ruby
182
+ constructs. In the following example, we will show a more complex
183
+ example using other Ruby constructs. This is certainly not a very well
184
+ written and robust Ruby code, but it give the idea of how Ruby and R are
185
+ strongly coupled.
231
186
 
187
+ Let’s imagine that we work in a corporation that has its plot themes.
188
+ So, it has defined a ‘CorpTheme’ module. Plots in this corporation
189
+ should not have grids, numbers in labels should not use scientific
190
+ notation and the preferred color is blue.
232
191
 
233
- ```ruby
192
+ ``` ruby
234
193
  # corp_theme.rb
235
194
  # defines the corporate theme for all plots
236
195
 
@@ -270,8 +229,7 @@ end
270
229
 
271
230
  We now define a ScatterPlot class:
272
231
 
273
-
274
- ```ruby
232
+ ``` ruby
275
233
  # ScatterPlot.rb
276
234
  # creates a scatter plot and allow some configuration
277
235
 
@@ -363,14 +321,14 @@ class ScatterPlot
363
321
  end
364
322
  ```
365
323
 
366
- And this is the final code for making the scatter plot with the midwest data
367
-
324
+ And this is the final code for making the scatter plot with the midwest
325
+ data
368
326
 
369
- ```ruby
327
+ ``` ruby
370
328
  require 'galaaz'
371
329
  require 'ggplot'
372
330
 
373
- sp = ScatterPlot.new(~:midwest, x: :area, y: :poptotal)
331
+ sp = ScatterPlot.new(~R[:midwest], x: :area, y: :poptotal)
374
332
  sp.title = "Midwest Dataset - Scatterplot"
375
333
  sp.subtitle = "Area Vs Population"
376
334
  sp.caption = "Source: midwest"
@@ -382,23 +340,25 @@ sp.add_smoothing_line(method: "glm")
382
340
  sp.plot
383
341
  ```
384
342
 
385
-
386
- ![](galaaz_ggplot_files/figure-html/scatter_plot_rb.png)<!-- -->
343
+ ![](galaaz_ggplot_files/figure-markdown_github/scatter_plot_rb.png)
387
344
 
388
345
  # Conclusion
389
346
 
390
- R is a very powerful language for statistical analysis, data analytics, machine learning, plotting
391
- and many other scientific applications with a very large package ecosystem. However R is often
392
- considered hard to learn and lacking modern computer languages constructs such as object oriented
393
- classes, modules, lambdas, etc. For this reason, many developers have started or switched from R
394
- to Python.
395
-
396
- With Galaaz, R programmers can almost transparently migrate from R to Ruby, since syntax is
397
- almost identical and they have fastR as the R engine. FastR, by most benchmarks, can be orders of
398
- magnitude faster than Gnu R. Further, by using Galaaz the R developer can start (slowly if needed)
399
- using all of Ruby's constructs and libraries that nicely complement R packages.
400
-
401
- For the Ruby developer, Galaaz allows the immediate use of R functions completely transparently. As
402
- shown in the second example above, class ScatterPlot completely hides all the details an R calls
403
- from the Ruby developer, furthermore Galaaz is powered by TruffleRuby that can also be orders of
404
- magnitude faster than MRI Ruby.
347
+ R is a very powerful language for statistical analysis, data analytics,
348
+ machine learning, plotting and many other scientific applications with a
349
+ very large package ecosystem. However R is often considered hard to
350
+ learn and lacking modern computer languages constructs such as object
351
+ oriented classes, modules, lambdas, etc. For this reason, many
352
+ developers have started or switched from R to Python.
353
+
354
+ With Galaaz, R programmers can almost transparently migrate from R to
355
+ Ruby, since syntax is almost identical and **GNU R** remains the engine
356
+ for statistics and **ggplot2**. Further, by using Galaaz the R developer
357
+ can start (slowly if needed) using Ruby’s constructs and libraries that
358
+ nicely complement R packages.
359
+
360
+ For the Ruby developer, Galaaz allows the immediate use of R functions
361
+ with minimal ceremony. As shown in the second example above, class
362
+ `ScatterPlot` hides most R call details from the Ruby developer.
363
+ **JRuby** provides **real parallel threads** on the Ruby side and access
364
+ to the JVM ecosystem when you need it.