code: def singleton(cls: Any) -> Callable:
      """
      Handy decorator for creating a singleton class
      Description:
          - Decorate your class with this decorator
          - If you happen to create another instance of the same class, it will return the previously created one
          - Supports creation of multiple instances of same class with different args/kwargs
          - Works for multiple classes
      Use:
          >>> from decorators import singleton
          >>>
          >>> @singleton
          ... class A:
          ...     def __init__(self, *args, **kwargs):
          ...         pass
          ...
          >>>
          >>> a = A(name='First')
          >>> b = A(name='First', lname='Last')
          >>> c = A(name='First', lname='Last')
          >>> a is b  # has to be different
          False
          >>> b is c  # has to be same
          True
          >>>
      """
      previous_instances: Dict[Any, Any] = {}
  
      @functools.wraps(cls)
      def wrapper(*args: Any, **kwargs: Any) -> Any:
          if cls in previous_instances and previous_instances.get(
              cls, None
          ).get("args") == (args, kwargs):
              return previous_instances[cls].get("instance")
          else:
              previous_instances[cls] = {
                  "args": (args, kwargs),
                  "instance": cls(*args, **kwargs),
              }
              return previous_instances[cls].get("instance")
  
      return wrapper
  
imports: import functools
  from typing import Any
  from typing import Callable
  from typing import Dict
label_desc: Use image node_id 1 for calling a global function with example usage: singleton(cls) and returns: wrapper, previous_instances, previous_instances