TQDM, SimpleClass, IterableSimpleNamespace docstrings (#15795)
Signed-off-by: UltralyticsAssistant <web@ultralytics.com> Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
This commit is contained in:
parent
776ca86369
commit
e2b04dc853
2 changed files with 120 additions and 10 deletions
|
|
@ -116,18 +116,46 @@ os.environ["KINETO_LOG_LEVEL"] = "5" # suppress verbose PyTorch profiler output
|
|||
|
||||
class TQDM(tqdm_original):
|
||||
"""
|
||||
Custom Ultralytics tqdm class with different default arguments.
|
||||
A custom TQDM progress bar class that extends the original tqdm functionality.
|
||||
|
||||
Args:
|
||||
*args (list): Positional arguments passed to original tqdm.
|
||||
**kwargs (any): Keyword arguments, with custom defaults applied.
|
||||
This class modifies the behavior of the original tqdm progress bar based on global settings and provides
|
||||
additional customization options.
|
||||
|
||||
Attributes:
|
||||
disable (bool): Whether to disable the progress bar. Determined by the global VERBOSE setting and
|
||||
any passed 'disable' argument.
|
||||
bar_format (str): The format string for the progress bar. Uses the global TQDM_BAR_FORMAT if not
|
||||
explicitly set.
|
||||
|
||||
Methods:
|
||||
__init__: Initializes the TQDM object with custom settings.
|
||||
|
||||
Examples:
|
||||
>>> from ultralytics.utils import TQDM
|
||||
>>> for i in TQDM(range(100)):
|
||||
... # Your processing code here
|
||||
... pass
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""
|
||||
Initialize custom Ultralytics tqdm class with different default arguments.
|
||||
Initializes a custom TQDM progress bar.
|
||||
|
||||
Note these can still be overridden when calling TQDM.
|
||||
This class extends the original tqdm class to provide customized behavior for Ultralytics projects.
|
||||
|
||||
Args:
|
||||
*args (Any): Variable length argument list to be passed to the original tqdm constructor.
|
||||
**kwargs (Any): Arbitrary keyword arguments to be passed to the original tqdm constructor.
|
||||
|
||||
Notes:
|
||||
- The progress bar is disabled if VERBOSE is False or if 'disable' is explicitly set to True in kwargs.
|
||||
- The default bar format is set to TQDM_BAR_FORMAT unless overridden in kwargs.
|
||||
|
||||
Examples:
|
||||
>>> from ultralytics.utils import TQDM
|
||||
>>> for i in TQDM(range(100)):
|
||||
... # Your code here
|
||||
... pass
|
||||
"""
|
||||
kwargs["disable"] = not VERBOSE or kwargs.get("disable", False) # logical 'and' with default value if passed
|
||||
kwargs.setdefault("bar_format", TQDM_BAR_FORMAT) # override default value if passed
|
||||
|
|
@ -135,7 +163,34 @@ class TQDM(tqdm_original):
|
|||
|
||||
|
||||
class SimpleClass:
|
||||
"""A base class providing string representation and attribute access functionality for Ultralytics objects."""
|
||||
"""
|
||||
A simple base class for creating objects with string representations of their attributes.
|
||||
|
||||
This class provides a foundation for creating objects that can be easily printed or represented as strings,
|
||||
showing all their non-callable attributes. It's useful for debugging and introspection of object states.
|
||||
|
||||
Methods:
|
||||
__str__: Returns a human-readable string representation of the object.
|
||||
__repr__: Returns a machine-readable string representation of the object.
|
||||
__getattr__: Provides a custom attribute access error message with helpful information.
|
||||
|
||||
Examples:
|
||||
>>> class MyClass(SimpleClass):
|
||||
... def __init__(self):
|
||||
... self.x = 10
|
||||
... self.y = "hello"
|
||||
>>> obj = MyClass()
|
||||
>>> print(obj)
|
||||
__main__.MyClass object with attributes:
|
||||
|
||||
x: 10
|
||||
y: 'hello'
|
||||
|
||||
Notes:
|
||||
- This class is designed to be subclassed. It provides a convenient way to inspect object attributes.
|
||||
- The string representation includes the module and class name of the object.
|
||||
- Callable attributes and attributes starting with an underscore are excluded from the string representation.
|
||||
"""
|
||||
|
||||
def __str__(self):
|
||||
"""Return a human-readable string representation of the object."""
|
||||
|
|
@ -162,7 +217,39 @@ class SimpleClass:
|
|||
|
||||
|
||||
class IterableSimpleNamespace(SimpleNamespace):
|
||||
"""Iterable SimpleNamespace subclass for key-value attribute iteration and custom error handling."""
|
||||
"""
|
||||
An iterable SimpleNamespace class that provides enhanced functionality for attribute access and iteration.
|
||||
|
||||
This class extends the SimpleNamespace class with additional methods for iteration, string representation,
|
||||
and attribute access. It is designed to be used as a convenient container for storing and accessing
|
||||
configuration parameters.
|
||||
|
||||
Methods:
|
||||
__iter__: Returns an iterator of key-value pairs from the namespace's attributes.
|
||||
__str__: Returns a human-readable string representation of the object.
|
||||
__getattr__: Provides a custom attribute access error message with helpful information.
|
||||
get: Retrieves the value of a specified key, or a default value if the key doesn't exist.
|
||||
|
||||
Examples:
|
||||
>>> cfg = IterableSimpleNamespace(a=1, b=2, c=3)
|
||||
>>> for k, v in cfg:
|
||||
... print(f"{k}: {v}")
|
||||
a: 1
|
||||
b: 2
|
||||
c: 3
|
||||
>>> print(cfg)
|
||||
a=1
|
||||
b=2
|
||||
c=3
|
||||
>>> cfg.get("b")
|
||||
2
|
||||
>>> cfg.get("d", "default")
|
||||
'default'
|
||||
|
||||
Notes:
|
||||
This class is particularly useful for storing configuration parameters in a more accessible
|
||||
and iterable format compared to a standard dictionary.
|
||||
"""
|
||||
|
||||
def __iter__(self):
|
||||
"""Return an iterator of key-value pairs from the namespace's attributes."""
|
||||
|
|
@ -235,7 +322,28 @@ def plt_settings(rcparams=None, backend="Agg"):
|
|||
|
||||
|
||||
def set_logging(name="LOGGING_NAME", verbose=True):
|
||||
"""Sets up logging with UTF-8 encoding and configurable verbosity for Ultralytics YOLO."""
|
||||
"""
|
||||
Sets up logging with UTF-8 encoding and configurable verbosity.
|
||||
|
||||
This function configures logging for the Ultralytics library, setting the appropriate logging level and
|
||||
formatter based on the verbosity flag and the current process rank. It handles special cases for Windows
|
||||
environments where UTF-8 encoding might not be the default.
|
||||
|
||||
Args:
|
||||
name (str): Name of the logger. Defaults to "LOGGING_NAME".
|
||||
verbose (bool): Flag to set logging level to INFO if True, ERROR otherwise. Defaults to True.
|
||||
|
||||
Examples:
|
||||
>>> set_logging(name="ultralytics", verbose=True)
|
||||
>>> logger = logging.getLogger("ultralytics")
|
||||
>>> logger.info("This is an info message")
|
||||
|
||||
Notes:
|
||||
- On Windows, this function attempts to reconfigure stdout to use UTF-8 encoding if possible.
|
||||
- If reconfiguration is not possible, it falls back to a custom formatter that handles non-UTF-8 environments.
|
||||
- The function sets up a StreamHandler with the appropriate formatter and level.
|
||||
- The logger's propagate flag is set to False to prevent duplicate logging in parent loggers.
|
||||
"""
|
||||
level = logging.INFO if verbose and RANK in {-1, 0} else logging.ERROR # rank in world for Multi-GPU trainings
|
||||
|
||||
# Configure the console (stdout) encoding to UTF-8, with checks for compatibility
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue