'Create a new ordered dictionary. Cannot init from a normal dict,
nor from kwargs, since items order is undefined in those cases.
If the ``strict`` keyword argument is ``True`` (``False`` is the
default) then when doing slice assignment - the ``OrderedDict`` you are
assigning from *must not* contain any keys in the remaining dict.
>>> OrderedDict()
OrderedDict([])
>>> OrderedDict({1: 1})
Traceback (most recent call last):
TypeError: undefined order, cannot get items from dict
>>> OrderedDict({1: 1}.items())
OrderedDict([(1, 1)])
>>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
>>> d
OrderedDict([(1, 3), (3, 2), (2, 1)])
>>> OrderedDict(d)
OrderedDict([(1, 3), (3, 2), (2, 1)])'

def __init__(self, init_val=(), strict=False):

    self.strict = strict
    dict.__init__(self)
    if isinstance(init_val, OrderedDict):
        self._sequence = init_val.keys()
        dict.update(self, init_val)
    elif isinstance(init_val, dict):
        raise TypeError('undefined    order,    cannot    get    items    from    dict')
    else:
        self._sequence = []
        self.update(init_val)
