forked from man-group/arctic
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfast_serializable_check.py
46 lines (35 loc) · 1.46 KB
/
fast_serializable_check.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import time
import arctic.serialization.numpy_records as anr
from tests.unit.serialization.serialization_test_data import _mixed_test_data as input_test_data
df_serializer = anr.DataFrameSerializer()
def _bench(rounds, input_df, fast):
fast = bool(fast)
anr.set_fast_check_df_serializable(fast)
start = time.time()
for i in range(rounds):
df_serializer.can_convert_to_records_without_objects(input_df, 'symA')
print("Time per iteration (fast={}): {}".format(fast, (time.time() - start)/rounds))
# Results suggest significant speed improvements for
# (1) large df with objects
# Time per iteration (fast=False): 0.0281402397156
# Time per iteration (fast=True): 0.00866063833237
# (2) large multi-column df
# Time per iteration (fast=False): 0.00556221961975
# Time per iteration (fast=True): 0.00276621818542
# (3) large multi-index df
# Time per iteration (fast=False): 0.00640722036362
# Time per iteration (fast=True): 0.00154552936554
def assess_speed(df_kind):
rounds = 100
input_df = input_test_data()[df_kind][0]
orig_config = anr.FAST_CHECK_DF_SERIALIZABLE
try:
_bench(rounds, input_df, fast=False)
_bench(rounds, input_df, fast=True)
finally:
anr.FAST_CHECK_DF_SERIALIZABLE = orig_config
def main():
for df_kind in ('large_with_some_objects', 'large_multi_index', 'large_multi_column'):
assess_speed(df_kind)
if __name__ == '__main__':
main()