..

Chapter 6 - decorators
=======================================================================================================================

1. Extend the `track` function to monitor execution time.
2. Extend the `track` function with min/max/average execution time and call count.
3. Modify the memoization function to function with unhashable types.
4. Modify the memoization function to have a cache per function instead of a global one.
5. Create a version of `functools.cached_property` that can be recalculated as needed.
6. Create a single-dispatch decorator that considers all or a configurable number of arguments instead of only the first one.
7. Enhance the `type_check` decorator to include additional checks such as requiring a number to be greater than or less than a given value.