|
30 | 30 | import gc |
31 | 31 | import sys |
32 | 32 | import sdc |
| 33 | +import time |
| 34 | +from contextlib import contextmanager |
| 35 | +from copy import copy |
33 | 36 | from pathlib import Path |
34 | 37 |
|
35 | 38 | import pandas |
36 | 39 | from numba import config |
37 | | -import time |
38 | | -from contextlib import contextmanager |
39 | 40 |
|
40 | 41 | """ |
41 | 42 | Utility functions collection to support performance testing of |
@@ -74,24 +75,62 @@ def get_size(obj): |
74 | 75 | return size |
75 | 76 |
|
76 | 77 |
|
| 78 | +def multiply_oneds_data(tmpl, max_len): |
| 79 | + """Multiply specified 1D like data.""" |
| 80 | + result = copy(tmpl) |
| 81 | + while len(result) < max_len: |
| 82 | + result += tmpl |
| 83 | + |
| 84 | + # Trim result to max_len |
| 85 | + return result[:max_len] |
| 86 | + |
| 87 | + |
77 | 88 | def multiply_data(tmpl, max_item_len): |
78 | 89 | """Multiply specified 2D like data.""" |
79 | 90 | result = [] |
80 | 91 | for item in tmpl: |
81 | | - local_item = item |
82 | | - local_item_len = len(local_item) |
| 92 | + result += multiply_oneds_data(item, max_item_len) |
| 93 | + |
| 94 | + return result |
| 95 | + |
83 | 96 |
|
84 | | - while (local_item_len < max_item_len) and (local_item_len >= 0): |
85 | | - local_item += item |
86 | | - local_item_len = len(local_item) |
| 97 | +def perf_data_gen(tmpl, max_item_len, max_bytes_size): |
| 98 | + """ |
| 99 | + Data generator produces 2D like data. |
| 100 | + tmpl: list of input template string |
| 101 | + max_item_len: length (in elements) of resulted string in an element of the result array |
| 102 | + max_bytes_size: maximum size in bytes of the return data |
| 103 | +
|
| 104 | + return: list of iterable data |
| 105 | + """ |
| 106 | + result = [] |
| 107 | + while get_size(result) < max_bytes_size: |
| 108 | + result.extend(multiply_data(tmpl, max_item_len)) |
87 | 109 |
|
88 | | - # Trim local_item to max_item_len |
89 | | - local_item = local_item[:max_item_len] |
90 | | - result.append(local_item) |
| 110 | + # Trim result to max_bytes_size |
| 111 | + while result and get_size(result) > max_bytes_size: |
| 112 | + del result[-1] |
91 | 113 |
|
92 | 114 | return result |
93 | 115 |
|
94 | 116 |
|
| 117 | +def perf_data_gen_fixed_len(tmpl, max_item_len, max_obj_len): |
| 118 | + """ |
| 119 | + Data generator produces 2D like data. |
| 120 | + tmpl: list of input template string |
| 121 | + max_item_len: length (in elements) of resulted string in an element of the result array |
| 122 | + max_obj_len: maximum length of the return data |
| 123 | +
|
| 124 | + return: list of iterable data |
| 125 | + """ |
| 126 | + result = [] |
| 127 | + while len(result) < max_obj_len: |
| 128 | + result.extend(multiply_data(tmpl, max_item_len)) |
| 129 | + |
| 130 | + # Trim result to max_obj_len |
| 131 | + return result[:max_obj_len] |
| 132 | + |
| 133 | + |
95 | 134 | @contextmanager |
96 | 135 | def do_jit(f): |
97 | 136 | """Context manager to jit function""" |
@@ -142,56 +181,6 @@ def get_times(f, test_data, iter_number=5): |
142 | 181 | return exec_times, boxing_times |
143 | 182 |
|
144 | 183 |
|
145 | | -def perf_data_gen(tmpl, max_item_len, max_bytes_size): |
146 | | - """ |
147 | | - Data generator produces 2D like data. |
148 | | - tmpl: list of input template string |
149 | | - max_item_len: length (in elements) of resulted string in an element of the result array |
150 | | - max_bytes_size: maximum size in bytes of the return data |
151 | | -
|
152 | | - return: list of strings |
153 | | - """ |
154 | | - result = [] |
155 | | - while get_size(result) < max_bytes_size: |
156 | | - result.extend(multiply_data(tmpl, max_item_len)) |
157 | | - |
158 | | - # Trim result to max_bytes_size |
159 | | - while result and get_size(result) > max_bytes_size: |
160 | | - del result[-1] |
161 | | - |
162 | | - return result |
163 | | - |
164 | | - |
165 | | -def perf_data_gen_fixed_len(tmpl, max_item_len, max_obj_len): |
166 | | - """ |
167 | | - Data generator produces 2D like data. |
168 | | - tmpl: list of input template string |
169 | | - max_item_len: length (in elements) of resulted string in an element of the result array |
170 | | - max_obj_len: maximum length of the return data |
171 | | -
|
172 | | - return: list of strings |
173 | | - """ |
174 | | - result = [] |
175 | | - while len(result) < max_obj_len: |
176 | | - result.extend(multiply_data(tmpl, max_item_len)) |
177 | | - |
178 | | - # Trim result to max_obj_len |
179 | | - return result[:max_obj_len] |
180 | | - |
181 | | - |
182 | | -def perf_data_gen_float(input, maxlen): |
183 | | - """ |
184 | | - """ |
185 | | - result = [] |
186 | | - i = 0 |
187 | | - N = len(input) |
188 | | - while len(result) < maxlen: |
189 | | - n = (i - i // 2) % N |
190 | | - result.extend(input[n]) |
191 | | - i += 1 |
192 | | - return result[:maxlen] |
193 | | - |
194 | | - |
195 | 184 | class TestResults: |
196 | 185 | perf_results_xlsx = 'perf_results.xlsx' |
197 | 186 | raw_perf_results_xlsx = 'raw_perf_results.xlsx' |
|
0 commit comments