|
2 | 2 | import inspect |
3 | 3 |
|
4 | 4 |
|
| 5 | +def calc_totals(base_mod, ref_mods, cls): |
| 6 | + base_obj, _ = import_mod(base_mod, cls) |
| 7 | + base_funcs = get_functions(base_obj) |
| 8 | + |
| 9 | + totals = [len(base_funcs)] |
| 10 | + for ref_mod in ref_mods: |
| 11 | + ref_obj, _ = import_mod(ref_mod, cls) |
| 12 | + ref_funcs = get_functions(ref_obj) |
| 13 | + |
| 14 | + totals.append(len(ref_funcs & base_funcs)) |
| 15 | + |
| 16 | + return totals |
| 17 | + |
| 18 | + |
5 | 19 | def get_functions(obj): |
6 | 20 | funcs = [] |
7 | 21 | for n, _ in inspect.getmembers(obj): |
@@ -31,19 +45,11 @@ def import_mod(mod, cls): |
31 | 45 |
|
32 | 46 |
|
33 | 47 | def generate_totals(base_mod, ref_mods, base_type, ref_types, cls): |
34 | | - base_obj, _ = import_mod(base_mod, cls) |
35 | | - base_funcs = get_functions(base_obj) |
36 | | - |
37 | 48 | all_types = [base_type] + ref_types |
38 | 49 | header = ', '.join('**{} Total**'.format(t) for t in all_types) |
39 | 50 | header = ' {}'.format(header) |
40 | 51 |
|
41 | | - totals = [len(base_funcs)] |
42 | | - for ref_mod in ref_mods: |
43 | | - ref_obj, _ = import_mod(ref_mod, cls) |
44 | | - ref_funcs = get_functions(ref_obj) |
45 | | - |
46 | | - totals.append(len(ref_funcs & base_funcs)) |
| 52 | + totals = calc_totals(base_mod, ref_mods, cls) |
47 | 53 |
|
48 | 54 | cells = ', '.join(str(t) for t in totals) |
49 | 55 | total = ' {}'.format(cells) |
@@ -87,6 +93,93 @@ def section(header, base_mod, ref_mods, base_type, ref_types, cls=None): |
87 | 93 | return [header, '~' * len(header), ''] + comparison_rst + [''] |
88 | 94 |
|
89 | 95 |
|
| 96 | +def generate_totals_numbers(header, base_mod, ref_mods, cls=None): |
| 97 | + base_obj, _ = import_mod(base_mod, cls) |
| 98 | + base_funcs = get_functions(base_obj) |
| 99 | + |
| 100 | + counter_funcs = [len(base_funcs)] |
| 101 | + for ref_mod in ref_mods: |
| 102 | + ref_obj, _ = import_mod(ref_mod, cls) |
| 103 | + ref_funcs = get_functions(ref_obj) |
| 104 | + |
| 105 | + counter_funcs.append(len(ref_funcs & base_funcs)) |
| 106 | + |
| 107 | + totals = [header] + calc_totals(base_mod, ref_mods, cls) |
| 108 | + |
| 109 | + cells = ', '.join(str(t) for t in totals) |
| 110 | + total = ' {}'.format(cells) |
| 111 | + |
| 112 | + return total, counter_funcs |
| 113 | + |
| 114 | + |
| 115 | +def generate_table_numbers(base_mod, ref_mods, base_type, ref_types, cls=None): |
| 116 | + all_types = ['Name'] + [base_type] + ref_types |
| 117 | + header = ', '.join('**{}**'.format(t) for t in all_types) |
| 118 | + header = ' {}'.format(header) |
| 119 | + |
| 120 | + rows = [] |
| 121 | + counters_funcs = [] |
| 122 | + |
| 123 | + totals = [] |
| 124 | + totals_, counters_funcs_ = generate_totals_numbers('Module-Level', base_mod, ref_mods) |
| 125 | + totals.append(totals_) |
| 126 | + counters_funcs.append(counters_funcs_) |
| 127 | + cells = ', '.join(str(t) for t in totals) |
| 128 | + total = ' {}'.format(cells) |
| 129 | + rows.append(total) |
| 130 | + |
| 131 | + totals = [] |
| 132 | + totals_, counters_funcs_ = generate_totals_numbers('Multi-Dimensional Array', base_mod, ref_mods, cls='ndarray') |
| 133 | + totals.append(totals_) |
| 134 | + counters_funcs.append(counters_funcs_) |
| 135 | + cells = ', '.join(str(t) for t in totals) |
| 136 | + total = ' {}'.format(cells) |
| 137 | + rows.append(total) |
| 138 | + |
| 139 | + totals = [] |
| 140 | + totals_, counters_funcs_ = generate_totals_numbers('Linear Algebra', base_mod + '.linalg', |
| 141 | + [m + '.linalg' for m in ref_mods]) |
| 142 | + totals.append(totals_) |
| 143 | + counters_funcs.append(counters_funcs_) |
| 144 | + cells = ', '.join(str(t) for t in totals) |
| 145 | + total = ' {}'.format(cells) |
| 146 | + rows.append(total) |
| 147 | + |
| 148 | + totals = [] |
| 149 | + totals_, counters_funcs_ = generate_totals_numbers('Discrete Fourier Transform', base_mod + '.fft', |
| 150 | + [m + '.fft' for m in ref_mods]) |
| 151 | + totals.append(totals_) |
| 152 | + counters_funcs.append(counters_funcs_) |
| 153 | + cells = ', '.join(str(t) for t in totals) |
| 154 | + total = ' {}'.format(cells) |
| 155 | + rows.append(total) |
| 156 | + |
| 157 | + totals = [] |
| 158 | + totals_, counters_funcs_ = generate_totals_numbers('Random Sampling', base_mod + '.random', |
| 159 | + [m + '.random' for m in ref_mods]) |
| 160 | + totals.append(totals_) |
| 161 | + counters_funcs.append(counters_funcs_) |
| 162 | + cells = ', '.join(str(t) for t in totals) |
| 163 | + total = ' {}'.format(cells) |
| 164 | + rows.append(total) |
| 165 | + |
| 166 | + counter_functions = [] |
| 167 | + for i in range(len(counters_funcs[0])): |
| 168 | + counter = 0 |
| 169 | + for j in range(len(counters_funcs)): |
| 170 | + counter += counters_funcs[j][i] |
| 171 | + counter_functions.append('{}'.format(counter)) |
| 172 | + |
| 173 | + summary = ['Total'] + counter_functions |
| 174 | + cells = ', '.join(str(t) for t in summary) |
| 175 | + summary_total = ' {}'.format(cells) |
| 176 | + rows.append(summary_total) |
| 177 | + |
| 178 | + comparison_rst = ['.. csv-table::', ''] + [header] + rows |
| 179 | + |
| 180 | + return ['Summary', '~' * len('Summary'), ''] + comparison_rst + [''] |
| 181 | + |
| 182 | + |
90 | 183 | def generate(): |
91 | 184 | ref_mods = [] |
92 | 185 | ref_types = [] |
@@ -119,6 +212,8 @@ def generate(): |
119 | 212 | header = ' / '.join([base_ver] + ref_vers) + ' APIs' |
120 | 213 | buf = ['**{}**'.format(header), ''] |
121 | 214 |
|
| 215 | + buf += generate_table_numbers( |
| 216 | + base_mod, ref_mods, base_type, ref_types) |
122 | 217 | buf += section( |
123 | 218 | 'Module-Level', |
124 | 219 | base_mod, ref_mods, base_type, ref_types) |
|
0 commit comments