17db96d56Sopenharmony_ci'Show relative speeds of local, nonlocal, global, and built-in access.'
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci# Please leave this code so that it runs under older versions of
47db96d56Sopenharmony_ci# Python 3 (no f-strings).  That will allow benchmarking for
57db96d56Sopenharmony_ci# cross-version comparisons.  To run the benchmark on Python 2,
67db96d56Sopenharmony_ci# comment-out the nonlocal reads and writes.
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_cifrom collections import deque, namedtuple
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_citrials = [None] * 500
117db96d56Sopenharmony_cisteps_per_trial = 25
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciclass A(object):
147db96d56Sopenharmony_ci    def m(self):
157db96d56Sopenharmony_ci        pass
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciclass B(object):
187db96d56Sopenharmony_ci    __slots__ = 'x'
197db96d56Sopenharmony_ci    def __init__(self, x):
207db96d56Sopenharmony_ci        self.x = x
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ciclass C(object):
237db96d56Sopenharmony_ci    def __init__(self, x):
247db96d56Sopenharmony_ci        self.x = x
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_cidef read_local(trials=trials):
277db96d56Sopenharmony_ci    v_local = 1
287db96d56Sopenharmony_ci    for t in trials:
297db96d56Sopenharmony_ci        v_local;    v_local;    v_local;    v_local;    v_local
307db96d56Sopenharmony_ci        v_local;    v_local;    v_local;    v_local;    v_local
317db96d56Sopenharmony_ci        v_local;    v_local;    v_local;    v_local;    v_local
327db96d56Sopenharmony_ci        v_local;    v_local;    v_local;    v_local;    v_local
337db96d56Sopenharmony_ci        v_local;    v_local;    v_local;    v_local;    v_local
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_cidef make_nonlocal_reader():
367db96d56Sopenharmony_ci    v_nonlocal = 1
377db96d56Sopenharmony_ci    def inner(trials=trials):
387db96d56Sopenharmony_ci        for t in trials:
397db96d56Sopenharmony_ci            v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
407db96d56Sopenharmony_ci            v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
417db96d56Sopenharmony_ci            v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
427db96d56Sopenharmony_ci            v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
437db96d56Sopenharmony_ci            v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal
447db96d56Sopenharmony_ci    inner.__name__ = 'read_nonlocal'
457db96d56Sopenharmony_ci    return inner
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ciread_nonlocal = make_nonlocal_reader()
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_civ_global = 1
507db96d56Sopenharmony_cidef read_global(trials=trials):
517db96d56Sopenharmony_ci    for t in trials:
527db96d56Sopenharmony_ci        v_global; v_global; v_global; v_global; v_global
537db96d56Sopenharmony_ci        v_global; v_global; v_global; v_global; v_global
547db96d56Sopenharmony_ci        v_global; v_global; v_global; v_global; v_global
557db96d56Sopenharmony_ci        v_global; v_global; v_global; v_global; v_global
567db96d56Sopenharmony_ci        v_global; v_global; v_global; v_global; v_global
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_cidef read_builtin(trials=trials):
597db96d56Sopenharmony_ci    for t in trials:
607db96d56Sopenharmony_ci        oct; oct; oct; oct; oct
617db96d56Sopenharmony_ci        oct; oct; oct; oct; oct
627db96d56Sopenharmony_ci        oct; oct; oct; oct; oct
637db96d56Sopenharmony_ci        oct; oct; oct; oct; oct
647db96d56Sopenharmony_ci        oct; oct; oct; oct; oct
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_cidef read_classvar_from_class(trials=trials, A=A):
677db96d56Sopenharmony_ci    A.x = 1
687db96d56Sopenharmony_ci    for t in trials:
697db96d56Sopenharmony_ci        A.x;    A.x;    A.x;    A.x;    A.x
707db96d56Sopenharmony_ci        A.x;    A.x;    A.x;    A.x;    A.x
717db96d56Sopenharmony_ci        A.x;    A.x;    A.x;    A.x;    A.x
727db96d56Sopenharmony_ci        A.x;    A.x;    A.x;    A.x;    A.x
737db96d56Sopenharmony_ci        A.x;    A.x;    A.x;    A.x;    A.x
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_cidef read_classvar_from_instance(trials=trials, A=A):
767db96d56Sopenharmony_ci    A.x = 1
777db96d56Sopenharmony_ci    a = A()
787db96d56Sopenharmony_ci    for t in trials:
797db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
807db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
817db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
827db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
837db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_cidef read_instancevar(trials=trials, a=C(1)):
867db96d56Sopenharmony_ci    for t in trials:
877db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
887db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
897db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
907db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
917db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_cidef read_instancevar_slots(trials=trials, a=B(1)):
947db96d56Sopenharmony_ci    for t in trials:
957db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
967db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
977db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
987db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
997db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_cidef read_namedtuple(trials=trials, D=namedtuple('D', ['x'])):
1027db96d56Sopenharmony_ci    a = D(1)
1037db96d56Sopenharmony_ci    for t in trials:
1047db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
1057db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
1067db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
1077db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
1087db96d56Sopenharmony_ci        a.x;    a.x;    a.x;    a.x;    a.x
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_cidef read_boundmethod(trials=trials, a=A()):
1117db96d56Sopenharmony_ci    for t in trials:
1127db96d56Sopenharmony_ci        a.m;    a.m;    a.m;    a.m;    a.m
1137db96d56Sopenharmony_ci        a.m;    a.m;    a.m;    a.m;    a.m
1147db96d56Sopenharmony_ci        a.m;    a.m;    a.m;    a.m;    a.m
1157db96d56Sopenharmony_ci        a.m;    a.m;    a.m;    a.m;    a.m
1167db96d56Sopenharmony_ci        a.m;    a.m;    a.m;    a.m;    a.m
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_cidef write_local(trials=trials):
1197db96d56Sopenharmony_ci    v_local = 1
1207db96d56Sopenharmony_ci    for t in trials:
1217db96d56Sopenharmony_ci        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
1227db96d56Sopenharmony_ci        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
1237db96d56Sopenharmony_ci        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
1247db96d56Sopenharmony_ci        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
1257db96d56Sopenharmony_ci        v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_cidef make_nonlocal_writer():
1287db96d56Sopenharmony_ci    v_nonlocal = 1
1297db96d56Sopenharmony_ci    def inner(trials=trials):
1307db96d56Sopenharmony_ci        nonlocal v_nonlocal
1317db96d56Sopenharmony_ci        for t in trials:
1327db96d56Sopenharmony_ci            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
1337db96d56Sopenharmony_ci            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
1347db96d56Sopenharmony_ci            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
1357db96d56Sopenharmony_ci            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
1367db96d56Sopenharmony_ci            v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1
1377db96d56Sopenharmony_ci    inner.__name__ = 'write_nonlocal'
1387db96d56Sopenharmony_ci    return inner
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ciwrite_nonlocal = make_nonlocal_writer()
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_cidef write_global(trials=trials):
1437db96d56Sopenharmony_ci    global v_global
1447db96d56Sopenharmony_ci    for t in trials:
1457db96d56Sopenharmony_ci        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
1467db96d56Sopenharmony_ci        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
1477db96d56Sopenharmony_ci        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
1487db96d56Sopenharmony_ci        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
1497db96d56Sopenharmony_ci        v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_cidef write_classvar(trials=trials, A=A):
1527db96d56Sopenharmony_ci    for t in trials:
1537db96d56Sopenharmony_ci        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
1547db96d56Sopenharmony_ci        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
1557db96d56Sopenharmony_ci        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
1567db96d56Sopenharmony_ci        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
1577db96d56Sopenharmony_ci        A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1;    A.x = 1
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_cidef write_instancevar(trials=trials, a=C(1)):
1607db96d56Sopenharmony_ci    for t in trials:
1617db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1627db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1637db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1647db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1657db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_cidef write_instancevar_slots(trials=trials, a=B(1)):
1687db96d56Sopenharmony_ci    for t in trials:
1697db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1707db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1717db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1727db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1737db96d56Sopenharmony_ci        a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1;    a.x = 1
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_cidef read_list(trials=trials, a=[1]):
1767db96d56Sopenharmony_ci    for t in trials:
1777db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1787db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1797db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1807db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1817db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_cidef read_deque(trials=trials, a=deque([1])):
1847db96d56Sopenharmony_ci    for t in trials:
1857db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1867db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1877db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1887db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1897db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_cidef read_dict(trials=trials, a={0: 1}):
1927db96d56Sopenharmony_ci    for t in trials:
1937db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1947db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1957db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1967db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1977db96d56Sopenharmony_ci        a[0];   a[0];   a[0];   a[0];   a[0]
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_cidef read_strdict(trials=trials, a={'key': 1}):
2007db96d56Sopenharmony_ci    for t in trials:
2017db96d56Sopenharmony_ci        a['key'];   a['key'];   a['key'];   a['key'];   a['key']
2027db96d56Sopenharmony_ci        a['key'];   a['key'];   a['key'];   a['key'];   a['key']
2037db96d56Sopenharmony_ci        a['key'];   a['key'];   a['key'];   a['key'];   a['key']
2047db96d56Sopenharmony_ci        a['key'];   a['key'];   a['key'];   a['key'];   a['key']
2057db96d56Sopenharmony_ci        a['key'];   a['key'];   a['key'];   a['key'];   a['key']
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_cidef list_append_pop(trials=trials, a=[1]):
2087db96d56Sopenharmony_ci    ap, pop = a.append, a.pop
2097db96d56Sopenharmony_ci    for t in trials:
2107db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2117db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2127db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2137db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2147db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_cidef deque_append_pop(trials=trials, a=deque([1])):
2177db96d56Sopenharmony_ci    ap, pop = a.append, a.pop
2187db96d56Sopenharmony_ci    for t in trials:
2197db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2207db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2217db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2227db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2237db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop()
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_cidef deque_append_popleft(trials=trials, a=deque([1])):
2267db96d56Sopenharmony_ci    ap, pop = a.append, a.popleft
2277db96d56Sopenharmony_ci    for t in trials:
2287db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop();
2297db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop();
2307db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop();
2317db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop();
2327db96d56Sopenharmony_ci        ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop();
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_cidef write_list(trials=trials, a=[1]):
2357db96d56Sopenharmony_ci    for t in trials:
2367db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2377db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2387db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2397db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2407db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_cidef write_deque(trials=trials, a=deque([1])):
2437db96d56Sopenharmony_ci    for t in trials:
2447db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2457db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2467db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2477db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2487db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_cidef write_dict(trials=trials, a={0: 1}):
2517db96d56Sopenharmony_ci    for t in trials:
2527db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2537db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2547db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2557db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2567db96d56Sopenharmony_ci        a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_cidef write_strdict(trials=trials, a={'key': 1}):
2597db96d56Sopenharmony_ci    for t in trials:
2607db96d56Sopenharmony_ci        a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1
2617db96d56Sopenharmony_ci        a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1
2627db96d56Sopenharmony_ci        a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1
2637db96d56Sopenharmony_ci        a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1
2647db96d56Sopenharmony_ci        a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_cidef loop_overhead(trials=trials):
2677db96d56Sopenharmony_ci    for t in trials:
2687db96d56Sopenharmony_ci        pass
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ciif __name__=='__main__':
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci    from timeit import Timer
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci    for f in [
2767db96d56Sopenharmony_ci            'Variable and attribute read access:',
2777db96d56Sopenharmony_ci            read_local, read_nonlocal, read_global, read_builtin,
2787db96d56Sopenharmony_ci            read_classvar_from_class, read_classvar_from_instance,
2797db96d56Sopenharmony_ci            read_instancevar, read_instancevar_slots,
2807db96d56Sopenharmony_ci            read_namedtuple, read_boundmethod,
2817db96d56Sopenharmony_ci            '\nVariable and attribute write access:',
2827db96d56Sopenharmony_ci            write_local, write_nonlocal, write_global,
2837db96d56Sopenharmony_ci            write_classvar, write_instancevar, write_instancevar_slots,
2847db96d56Sopenharmony_ci            '\nData structure read access:',
2857db96d56Sopenharmony_ci            read_list, read_deque, read_dict, read_strdict,
2867db96d56Sopenharmony_ci            '\nData structure write access:',
2877db96d56Sopenharmony_ci            write_list, write_deque, write_dict, write_strdict,
2887db96d56Sopenharmony_ci            '\nStack (or queue) operations:',
2897db96d56Sopenharmony_ci            list_append_pop, deque_append_pop, deque_append_popleft,
2907db96d56Sopenharmony_ci            '\nTiming loop overhead:',
2917db96d56Sopenharmony_ci            loop_overhead]:
2927db96d56Sopenharmony_ci        if isinstance(f, str):
2937db96d56Sopenharmony_ci            print(f)
2947db96d56Sopenharmony_ci            continue
2957db96d56Sopenharmony_ci        timing = min(Timer(f).repeat(7, 1000))
2967db96d56Sopenharmony_ci        timing *= 1000000 / (len(trials) * steps_per_trial)
2977db96d56Sopenharmony_ci        print('{:6.1f} ns\t{}'.format(timing, f.__name__))
298