docs: def is_collection(object_type, strict: bool = False) -> bool:
      """
      Utility method to check if a type is a subclass of typing.{List,Dict,Set,Tuple}
      or of list, dict, set, tuple.
  
      If strict is set to True, the method will return True only if the class IS directly one of the base collection
      classes
  
      :param object_type:
      :param strict: if set to True, this method will look for a strict match.
      :return:
      """
      if object_type is None or object_type is Any or is_union_type(object_type) or is_typevar(object_type):
          return False
      elif strict:
          return object_type == dict \
                 or object_type == list \
                 or object_type == tuple \
                 or object_type == set \
                 or get_base_generic_type(object_type) == Dict \
                 or get_base_generic_type(object_type) == List \
                 or get_base_generic_type(object_type) == Set \
                 or get_base_generic_type(object_type) == Tuple
      else:
          return issubclass(object_type, Dict) \
                 or issubclass(object_type, List) \
                 or issubclass(object_type, Set) \
                 or issubclass(object_type, Tuple) \
                 or issubclass(object_type, dict) \
                 or issubclass(object_type, list) \
                 or issubclass(object_type, tuple) \
                 or issubclass(object_type, set)