py-stopwatch 1.0.1
Stopwatch class for timing portions of python code
License: MIT license
Requires Python: >=3.7
Keywords: stopwatch

============
py-stopwatch
============

.. image:: https://img.shields.io/pypi/v/py-stopwatch?color=success
        :target: https://pypi.python.org/pypi/py_stopwatch

.. image:: https://readthedocs.org/projects/py-stopwatch/badge/?version=latest
        :target: https://py-stopwatch.readthedocs.io/en/latest/?badge=latest
        :alt: Documentation Status

.. image:: https://img.shields.io/pypi/pyversions/py-stopwatch
        :target: https://pypi.python.org/pypi/py-stopwatch
        :alt: Python Version Support

.. image:: https://img.shields.io/github/issues/hrishikeshrt/py_stopwatch
        :target: https://github.com/hrishikeshrt/py_stopwatch/issues
        :alt: GitHub Issues

.. image:: https://img.shields.io/github/followers/hrishikeshrt?style=social
        :target: https://github.com/hrishikeshrt
        :alt: GitHub Followers

.. image:: https://img.shields.io/twitter/follow/hrishikeshrt?style=social
        :target: https://twitter.com/hrishikeshrt
        :alt: Twitter Followers


Stopwatch class for timing portions of python code.

* Free software: MIT license
* Documentation: https://py-stopwatch.readthedocs.io.


Features
========

* Tick-based stopwatch
* Support for Pause/Resume
* Support for multiple named-ticks
* Utility functions for time between different ticks
* No third party requirements.

Usage
=====

.. code-block:: python

    from stopwatch import Stopwatch
    t = Stopwatch()
    t.start()
    print("Started ..")
    time.sleep(0.24)
    print(f"t.tick(): {t.tick():.4f} seconds")
    time.sleep(0.48)
    print(f"t.tick(): {t.tick():.4f} seconds")
    time.sleep(0.16)
    print(f"t.tick('Named Tick-1'): {t.tick('Named Tick-1'):.4f} seconds")
    t.pause()
    print("Paused ..")
    time.sleep(0.12)
    t.resume()
    print("Resumed ..")
    print(f"t.last(): {t.last():.4f} seconds")
    time.sleep(0.12)
    print(f"t.tick(): {t.tick():.4f} seconds")
    time.sleep(0.12)
    print(f"t.tick('Named Tick-2'): {t.tick('Named Tick-2'):.4f} seconds")
    t.stop()
    print("Timer stopped.")
    print("---")
    print(f"Total pause: {t.time_paused:.2f} seconds.")
    print(f"Total runtime: {t.time_active:.2f} seconds.")
    print(f"Total time: {t.time_total:.2f} seconds.")
    tij = t.get_time_elapsed(start_key='Named Tick-1', end_key='Named Tick-2')
    print(f"Time between 'Named Tick-1' and 'Named Tick-2': {tij:.4f}")


History
=======

1.0.1 (2025-12-11)
------------------

* Improve CI matrix and drop failing Python 3.7 job.
* Fix Sphinx configuration and RTD build (language and theme deps).
* Tidy stopwatch implementation for style (flake8) and clarity.

1.0.0 (2025-12-10)
------------------

* First stable release.
* Add unit tests, CI configuration, and timing bugfixes.

0.2.2 (2024-11-27)
------------------

* Fix precision setting not taking effect in some cases.
* Packaging and configuration updates.

0.2.1 (2024-11-27)
------------------

* Fix search behaviour when using string keys (strings being iterable).

0.2.0 (2024-11-27)
------------------

* Add a ``precision`` setting for timestamps.
* Add ``Stopwatch.get_ticks(...)`` helper to search ticks.
* Documentation updates and minor internal cleanups.

0.1.1 (2022-02-10)
------------------

* Fix PyPI upload issue due to history formatting.

0.1.0 (2022-02-10)
------------------

* Internal refactors and documentation improvements.

0.0.3 (2022-01-24)
------------------

* Replace ``namedtuple`` with ``dataclasses`` for ticks.
* Use ``time.perf_counter`` for timing.
* Miscellaneous bug fixes and improvements.

0.0.2 (2021-04-12)
------------------

* Minor fixes and documentation updates.

0.0.1 (2021-04-13)
------------------

* First release on PyPI.