Skip to content

Support for nested timed_loop / timed_for #1

Description

@hukz18

Steps to reproduce:

import time
import gtimer as gt

for i in gt.timed_for(range(10), 'outter'):
    time.sleep(0.1)
    gt.stamp('outter')
    for j in gt.timed_for(range(10), 'inner'):
        time.sleep(0.1)
        gt.stamp('inner')
gt.stamp('finished')
print(gt.report(include_itrs=False))

Expected result:
Something like:

---Begin Timer Report (root)---
Timer Name:          root (running)
Total Time (s):      11.03
Stamps Sum:          11.03
Self Time (Agg.):    0.004261


Intervals
---------
begin outter ................. 1.002
begin inner .................. 10.02
finished ..................... 6.287e-05


Loop Iterations
---------------

Timer:       root

                   Total        Mean         Max         Min         Num
                  ------      ------      ------      ------      ------
begin outter        1.00        0.10        0.10        0.10          10
begin inner        10.02        0.10        0.10        0.10         100

Real output:

Traceback (most recent call last):
  File "gt_test.py", line 7, in <module>
    for j in gt.timed_for(range(10), 'inner'):
  File ".../gtimer/private/timedloop.py", line 110, in __iter__
    loop.exit_loop()
  File ".../gtimer/private/loop.py", line 120, in exit_loop
    _end_subdivision_named_loop()
  File ".../gtimer/private/loop.py", line 157, in _end_subdivision_named_loop
    timer_pub.stop()
  File ".../gtimer/public/timer.py", line 227, in stop
    times_priv.dump_times()
  File ".../private/times.py", line 46, in dump_times
    f.r.parent.self_agg += f.r.self_agg + merge_t
AttributeError: 'NoneType' object has no attribute 'self_agg'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions