Metadata-Version: 2.1
Name: ttictoc
Version: 0.5.6
Summary: Time parts of your code easily.
Home-page: https://github.com/hector-sab/ttictoc
Author: Hector Sanchez
Author-email: hector.direct@gmail.com
License: MIT
Keywords: tictoc tic toc time timing
Platform: UNKNOWN
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown

# ttictoc
Time execution of blocks of code.

##
Tested against python 3.6, python 3.7, and 3.8

## How to install
From pip
```
pip install ttictoc
```
or download this repo and do
```
pip install .
```

## TicToc
The easiest way to time something is with `tic` and `toc`

```python
import time
from ttictoc import tic,toc
tic()
time.sleep(1)
elapsed = toc()
print('Elapsed time:',elapsed)
```

You can execute multiple tocs in a matlab-like fashon
```
import time
from ttictoc import tic,toc
tic()
for i in range(2):
  tic()
  time.sleep(1)
  elapsed = toc()
  print('[IN LOOP] Elapsed time:',elapsed)
print('[OUT LOOP] Elapsed time:',toc())
```

## Timer Class
It works just like `tic`,`toc`.
```python
import time
from ttictoc import Timer

# Simple
t = Timer()
t.start()
time.sleep(1)
elapsed = t.stop()
print('Elapsed time:',elapsed)


# Nested
t.start()
for i in range(2):
  t.start()
  time.sleep(1)
  elapsed = t.stop()
  print('[IN LOOP] Elapsed time:',elapsed)
print('[OUT LOOP] Elapsed time:',t.stop())
```

## Context manager
You can also use it as context manager
```python
import time
from ttictoc import Timer

# Default
with Timer():
  time.sleep(1)

# With out verbose
with Timer(verbose=False) as T:
  time.sleep(1)
print('Elapsed time:',T.elapsed)

# With default verbose message
with Timer(verbose_msg=f'[User msg][{time.time()}] Elapsed time: {{}}'):
  time.sleep(1)
```

## Deactivating matlab-like nesting
You can deactivate the matlab-like nesting. In this case calling start will update the global starting time for toc. However, you can have nested tics by giving a `key` to start and stop.
```python
import time
from ttictoc import Timer,tic2,toc2

tic2()
for i in range(2):
  tic2()
  time.sleep(1)
  elapsed = toc2()
  print('[IN LOOP] Elapsed time:',elapsed)
print('[OUT LOOP] Elapsed time:',toc2())

t = Timer(matlab_like=False)
t.start()
time.sleep(1)
t.start() # Restarts the starting point
time.sleep(1)
elapsed = t.stop()
print('Elapsed time:',elapsed) # ~1 second

# Nested
t.start(key='Init')
for i in range(2):
  t.start(key=i)
  time.sleep(1)
  elapsed = t.stop(key=i)
  print('[IN LOOP] Elapsed time:',elapsed)
print('[OUT LOOP] Elapsed time:',t.stop('Init'))


print('\n[OUT LOOP][Init] Elapsed time:',t.stop('Init'))
print('[OUT LOOP][0] Elapsed time:',t.stop(0))
print('[OUT LOOP][1] Elapsed time:',t.stop(1))
```

## Specify timing method
By default, `Timer` (and `tic`,`toc`) use `timeit.default_timer`. However, the timing function can be selected as follow.
```python
import time
from ttictoc import Timer
t = Timer(func_time=time.clock)
t.start()
time.sleep(5)
elapsed = t.stop()
print('Elapsed time:',elapsed)
```


