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.