1 | #!/usr/bin/env Rscript
|
2 | #
|
3 | # bytecode.R -- Analyze output of opyc dis-tables.
|
4 | #
|
5 | # Usage:
|
6 | # bytecode.R ACTION IN_DIR OUT_DIR
|
7 |
|
8 | library(dplyr)
|
9 | library(tidyr) # spread()
|
10 | library(stringr)
|
11 |
|
12 | source('benchmarks/common.R')
|
13 |
|
14 | options(stringsAsFactors = F,
|
15 | # Make the report wide. tibble.width doesn't appear to do this?
|
16 | width=200,
|
17 | tibble.print_max=40
|
18 | )
|
19 |
|
20 | Report = function(ctx) {
|
21 | Banner('Summary of methods.tsv:')
|
22 | ctx$methods %>% count(used) %>% arrange(desc(n)) -> f0
|
23 | ShowFrame('Methods used:', f0)
|
24 |
|
25 | ctx$methods %>% filter(used == T) %>% count(file) %>% arrange(desc(n)) -> f1
|
26 | ShowFrame('Methods by file (after filtering):', f1)
|
27 | ShowValue('Kept %d of %d methods in %d files', sum(ctx$methods$used),
|
28 | nrow(ctx$methods), nrow(f1))
|
29 |
|
30 | ctx$methods %>% count(flags) %>% arrange(desc(n)) -> f2
|
31 | ShowFrame('Methods by flag', f2)
|
32 |
|
33 | # libc.c and fastlex.c are mostly implemented. posixmodule are just
|
34 | # bindings?
|
35 | ctx$methods %>%
|
36 | filter(used == T) %>%
|
37 | mutate(basename=basename(file)) %>%
|
38 | filter(basename != 'libc.c' & basename != 'fastlex.c' &
|
39 | basename != 'setobject.c' & basename != 'zipimport.c') %>%
|
40 | filter(py_method_name != '__length_hint__') %>%
|
41 | select(c(basename, py_method_name)) %>%
|
42 | arrange(basename, py_method_name) -> f3
|
43 | ShowFrame('Methods to reimplement:', f3)
|
44 | ShowValue('Total: %d methods', nrow(f3))
|
45 | }
|
46 |
|
47 | Load = function(in_dir) {
|
48 | list(
|
49 | methods = read.table(
|
50 | file.path(in_dir, 'methods.tsv'), sep='\t', header=T)
|
51 | )
|
52 | }
|
53 |
|
54 | main = function(argv) {
|
55 | action = argv[[1]]
|
56 |
|
57 | if (action == 'metrics') {
|
58 | in_dir = argv[[2]]
|
59 | ctx = Load(in_dir)
|
60 | Report(ctx)
|
61 |
|
62 | } else {
|
63 | Log("Invalid action '%s'", action)
|
64 | quit(status = 1)
|
65 | }
|
66 | }
|
67 |
|
68 | if (length(sys.frames()) == 0) {
|
69 | # increase ggplot font size globally
|
70 | #theme_set(theme_grey(base_size = 20))
|
71 | main(commandArgs(TRUE))
|
72 | }
|