# Path: aql/util_types/aql_simple_types.py
# def is_string(value, _str_types=(u_str, str), _isinstance=isinstance):
#     return _isinstance(value, _str_types)
# 
# Path: aql/util_types/aql_list_types.py
# class List (list):
# 
#     # -----------------------------------------------------------
# 
#     def __init__(self, values=None):
#         super(List, self).__init__(to_sequence(values))
# 
#     # -----------------------------------------------------------
# 
#     def __iadd__(self, values):
#         super(List, self).__iadd__(to_sequence(values))
#         return self
# 
#     # -----------------------------------------------------------
# 
#     def __add__(self, values):
#         other = List(self)
#         other += List(self)
# 
#         return other
# 
#     # -----------------------------------------------------------
# 
#     def __radd__(self, values):
#         other = List(values)
#         other += self
# 
#         return other
# 
#     # -----------------------------------------------------------
# 
#     def __isub__(self, values):
#         for value in to_sequence(values):
#             while True:
#                 try:
#                     self.remove(value)
#                 except ValueError:
#                     break
# 
#         return self
# 
#     # -----------------------------------------------------------
# 
#     @staticmethod
#     def __to_list(values):
#         if isinstance(values, List):
#             return values
# 
#         return List(values)
# 
#     # -----------------------------------------------------------
# 
#     def __eq__(self, other):
#         return super(List, self).__eq__(self.__to_list(other))
# 
#     def __ne__(self, other):
#         return super(List, self).__ne__(self.__to_list(other))
# 
#     def __lt__(self, other):
#         return super(List, self).__lt__(self.__to_list(other))
# 
#     def __le__(self, other):
#         return super(List, self).__le__(self.__to_list(other))
# 
#     def __gt__(self, other):
#         return super(List, self).__gt__(self.__to_list(other))
# 
#     def __ge__(self, other):
#         return super(List, self).__ge__(self.__to_list(other))
# 
#     # -----------------------------------------------------------
# 
#     def append_front(self, value):
#         self.insert(0, value)
# 
#     # -----------------------------------------------------------
# 
#     def extend(self, values):
#         super(List, self).extend(to_sequence(values))
# 
#     # -----------------------------------------------------------
# 
#     def extend_front(self, values):
#         self[:0] = to_sequence(values)
# 
#     # -----------------------------------------------------------
# 
#     def pop_front(self):
#         return self.pop(0)


from .aql_simple_types import is_string
from .aql_list_types import List
            except KeyError:
                self[key] = value

        return self

    # -----------------------------------------------------------

    def copy(self, key_type=None, value_type=None):

        other = Dict()

        for key, value in self.items():
            if key_type:
                key = key_type(key)
            if value_type:
                value = value_type(value)
            other[key] = value

        return other

# ==============================================================================


class _SplitDictBase(object):

    # -----------------------------------------------------------

    @classmethod
    def __to_items(cls, items_str):


# Path: aql/util_types/aql_simple_types.py
# def is_string(value, _str_types=(u_str, str), _isinstance=isinstance):
#     return _isinstance(value, _str_types)
# 
# Path: aql/util_types/aql_list_types.py
# class List (list):
# 
#     # -----------------------------------------------------------
# 
#     def __init__(self, values=None):
#         super(List, self).__init__(to_sequence(values))
# 
#     # -----------------------------------------------------------
# 
#     def __iadd__(self, values):
#         super(List, self).__iadd__(to_sequence(values))
#         return self
# 
#     # -----------------------------------------------------------
# 
#     def __add__(self, values):
#         other = List(self)
#         other += List(self)
# 
#         return other
# 
#     # -----------------------------------------------------------
# 
#     def __radd__(self, values):
#         other = List(values)
#         other += self
# 
#         return other
# 
#     # -----------------------------------------------------------
# 
#     def __isub__(self, values):
#         for value in to_sequence(values):
#             while True:
#                 try:
#                     self.remove(value)
#                 except ValueError:
#                     break
# 
#         return self
# 
#     # -----------------------------------------------------------
# 
#     @staticmethod
#     def __to_list(values):
#         if isinstance(values, List):
#             return values
# 
#         return List(values)
# 
#     # -----------------------------------------------------------
# 
#     def __eq__(self, other):
#         return super(List, self).__eq__(self.__to_list(other))
# 
#     def __ne__(self, other):
#         return super(List, self).__ne__(self.__to_list(other))
# 
#     def __lt__(self, other):
#         return super(List, self).__lt__(self.__to_list(other))
# 
#     def __le__(self, other):
#         return super(List, self).__le__(self.__to_list(other))
# 
#     def __gt__(self, other):
#         return super(List, self).__gt__(self.__to_list(other))
# 
#     def __ge__(self, other):
#         return super(List, self).__ge__(self.__to_list(other))
# 
#     # -----------------------------------------------------------
# 
#     def append_front(self, value):
#         self.insert(0, value)
# 
#     # -----------------------------------------------------------
# 
#     def extend(self, values):
#         super(List, self).extend(to_sequence(values))
# 
#     # -----------------------------------------------------------
# 
#     def extend_front(self, values):
#         self[:0] = to_sequence(values)
# 
#     # -----------------------------------------------------------
# 
#     def pop_front(self):
#         return self.pop(0)


# Path: aql/util_types/aql_dict_types.py
from .aql_simple_types import is_string
from .aql_list_types import List

            except KeyError:
                self[key] = value

        return self

    # -----------------------------------------------------------

    def copy(self, key_type=None, value_type=None):

        other = Dict()

        for key, value in self.items():
            if key_type:
                key = key_type(key)
            if value_type:
                value = value_type(value)
            other[key] = value

        return other

# ==============================================================================


class _SplitDictBase(object):

    # -----------------------------------------------------------

    @classmethod
    def __to_items(cls, items_str):


        if not is_string(items_str):