home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- import funcs
- import functional
- import itertools
- from UserDict import DictMixin
-
- try:
- sentinel
- except NameError:
-
- class Sentinel(object):
-
- def __repr__(self):
- return '<Sentinel (%r backup) %#x>' % (__file__, id(self))
-
-
- sentinel = Sentinel()
-
-
- def fmt_to_dict(delim1, delim2):
-
- class dictifier('dictifier', (dict,)):
-
- def __init__(self, *a, **k):
- if a and isinstance(a[0], basestring):
- dict.__init__(self, self.parse(a[0]), *a[1:], **k)
- else:
- dict.__init__(self, *a, **k)
-
-
- def parse(cls, s):
- pairs = (list,)((lambda .0: for entry in .0:
- entry.strip().split(delim2, 1))(s.split(delim1)))
- if len(pairs[-1]) == 1 and pairs[-1][0].strip() == '':
- pairs = pairs[:-1]
-
- return pairs
-
- parse = (None, classmethod)(parse)
-
- def __str__(self):
- return (delim1.join,)((lambda .0: for i in .0:
- delim2.join(i))(self.items()))
-
-
- return dictifier
-
-
- def dictreverse(mapping):
- return dict((lambda .0: for key, value in .0:
- (value, key))(mapping.iteritems()))
-
-
- def dictadd(dict_a, dict_b):
- result = dict(dict_a)
- result.update(dict_b)
- return result
-
-
- def dictsub(a, b):
- a = a.copy()
- for key in b:
- a.pop(key, None)
-
- return a
-
-
- def dictdiff(defaults, user):
- diff = { }
- for k, v in user.iteritems():
- if k not in defaults or v != defaults[k]:
- diff[k] = v
- continue
-
- return diff
-
-
- def intdictdiff(start, end):
- keys = set(start.keys()) | set(end.keys())
- out = { }
- for key in keys:
- startval = start.get(key, 0)
- endval = end.get(key, 0)
- outval = endval - startval
- if outval:
- out[key] = outval
- continue
-
- return out
-
-
- class DictChain(functional.AttrChain, dict):
-
- def __init__(self, *args, **kwargs):
- dict.__init__(self, *args, **kwargs)
- functional.AttrChain.__init__(self, 'base', self.__getattr2__)
-
-
- def __getattr2__(self, key):
- keys = None if isinstance(key, basestring) else key
- next = self[keys[0]]
- if len(keys) > 1 and isinstance(next, DictChain):
- return dict.__getattribute__(next, '__getattr2__')(keys[1:])
- if keys:
-
- try:
- returner = next
- except:
- isinstance(next, DictChain)
- return self['generic'][keys[0]]
-
- if isinstance(returner, DictChain):
- return returner['value']
- return returner
- keys
- return self['value']
-
-
-
- class Storage(dict):
-
- def __getattr__(self, key, ga = dict.__getattribute__, gi = None):
-
- try:
- return ga(self, key)
- except AttributeError:
-
- try:
- if gi is not None:
- return gi(self, key)
- return self[key]
- except KeyError:
- msg = repr(key)
- if len(self) <= 20:
- keys = sorted(self.keys())
- msg += '\n (%d existing keys: ' % len(keys) + str(keys) + ')'
-
- raise AttributeError, msg
- except:
- None<EXCEPTION MATCH>KeyError
-
-
- None<EXCEPTION MATCH>KeyError
-
-
-
- def __setattr__(self, key, value):
- self[key] = value
-
-
- def copy(self):
- return type(self)(self)
-
-
-
- def dictrecurse(newtype):
-
- def recurser(_d, forbidden = (None, ())):
- if not hasattr(_d, 'keys'):
- pformat = pformat
- import pprint
- raise TypeError('what is?\n%s' % pformat(_d))
- hasattr(_d, 'keys')
- for k in _d:
- if isinstance(_d[k], dict):
- _d[k] = recurser(_d[k])
- continue
- if funcs.isiterable(_d[k]) and not isinstance(_d[k], forbidden + (basestring,)):
- if isinstance(_d[k], tuple):
- t = tuple
- else:
- t = list
- _d[k] = (t,)((lambda .0: for item in .0:
- None if isinstance(item, dict) else item)(_d[k]))
- continue
-
- if isinstance(newtype, type):
- if type(_d) is newtype:
- return _d
- return newtype(_d)
- return newtype(_d)
-
- return recurser
-
- to_storage = dictrecurse(Storage)
-
- def from_storage(d):
- for k, v in d.items():
- if isinstance(v, Storage):
- d[k] = from_storage(v)
- continue
- if isinstance(v, list):
- newlist = [ _[1] if isinstance(e, Storage) else e for e in d[k] ]
- d[k] = newlist
- continue
- []
-
- if type(d) is dict:
- return d
- return dict(d)
-
-
- def lookup_table(*a, **d):
- d = dict(*a, **d)
- d.update(dictreverse(d))
- return to_storage(d)
-
-
- class get_change_dict(dict):
-
- def __init__(self, *a, **k):
- self.__dict__['_get_change_dict__get_change'] = k.pop('_get_change', None)
- super(get_change_dict, self).__init__(*a, **k)
-
-
- def __getitem__(self, key):
- if getattr(self, '_get_change_dict__get_change', None) is not None:
- key = self._get_change_dict__get_change(key)
-
- return super(get_change_dict, self).__getitem__(key)
-
-
- def __contains__(self, key):
- if self._get_change_dict__get_change is not None:
- key = self._get_change_dict__get_change(key)
-
- return super(get_change_dict, self).__contains__(key)
-
-
- def pop(self, key, x = None):
- key = self._get_change_dict__get_change(key)
- return super(get_change_dict, self).pop(key, x)
-
-
-
- class set_change_dict(dict):
-
- def __init__(self, *a, **k):
- self.__dict__['_set_change_dict__set_change'] = k.pop('_set_change', None)
- super(set_change_dict, self).__init__(*a, **k)
-
-
- def __setitem__(self, key, val):
- if getattr(self, '_set_change_dict__set_change', None) is not None:
- key = self._set_change_dict__set_change(key)
-
- return super(set_change_dict, self).__setitem__(key, val)
-
-
- def setdefault(self, key, default):
- if self._set_change_dict__key_change is not None:
- key = self._set_change_dict__key_change(key)
-
-
- try:
- return super(set_change_dict, self).__getitem__(key.lower())
- except KeyError:
- super(set_change_dict, self).__setitem__(key.lower(), default)
- return default
-
-
-
-
- class key_change_dict(set_change_dict, get_change_dict):
-
- def __init__(self, *a, **k):
- self.__dict__['_key_change_dict__key_change'] = _key_change = k.pop('_key_change', None)
- k['_set_change'] = _key_change
- k['_get_change'] = _key_change
- super(key_change_dict, self).__init__(*a, **k)
-
-
-
- class lower_case_dict(key_change_dict):
-
- def __init__(self, *a, **k):
- self.__dict__['_lower_case_dict__key_change'] = k['_key_change'] = (lambda key: key.lower())
- super(lower_case_dict, self).__init__(*a, **k)
- for key in list(self.keys()):
- self[key] = super(lower_case_dict, self).pop(key)
-
-
-
- def __delitem__(self, key):
- key = self._lower_case_dict__key_change(key)
- return super(lower_case_dict, self).__delitem__(key)
-
-
-
- class no_case_dict(set_change_dict, get_change_dict):
-
- def __init__(self, *a, **k):
- self.__dict__['_no_case_dict__mapping'] = { }
- k['_set_change'] = self._no_case_dict__set_change
- k['_get_change'] = self._no_case_dict__get_change
- super(no_case_dict, self).__init__(*a, **k)
- self.__dict__['_no_case_dict__inited'] = False
- for key in list(self.keys()):
- self[key] = self.pop(key)
-
- self.__dict__['_no_case_dict__inited'] = True
-
-
- def __set_change(self, key):
- self._no_case_dict__mapping[key.lower()] = key
- return key
-
-
- def __get_change(self, key):
- if self._no_case_dict__inited:
- key = self._no_case_dict__mapping[key.lower()]
-
- return key
-
-
-
- def stringify_dict(dict):
- new = { }
- for k, v in dict.items():
- if isinstance(k, basestring):
- new[str(k)] = v
- continue
- new[k] = v
-
- return new
-
-
- class odict(dict):
-
- def __init__(self, d = None):
- if d is None:
- d = { }
-
-
- try:
- t = d.items()
- self._keys = [ k for k, _v in t ]
- dict.__init__(self, t)
- except:
- (one, two, three) = itertools.tee(d, 3)
-
- try:
- self._keys = [ k for k, _v in one ]
- except:
- self._keys = [ k for k in two ]
-
- [](dict.__init__, self if isinstance(d, dict) else three)
-
-
-
- def __delitem__(self, key):
- dict.__delitem__(self, key)
- self._keys.remove(key)
-
-
- def __setitem__(self, key, item):
- dict.__setitem__(self, key, item)
- if not hasattr(self, '_keys'):
- self._keys = [
- key]
-
- if key not in self._keys:
- self._keys.append(key)
-
-
- __iter__ = property((lambda self: self._keys.__iter__))
-
- def clear(self):
- dict.clear(self)
- self._keys = []
-
-
- def pop(self, k, defval = sentinel):
-
- try:
- val = dict.pop(self, k)
- except KeyError:
- if defval is sentinel:
- raise
- defval is sentinel
- return defval
-
- self._keys.remove(k)
- return val
-
-
- def iteritems(self):
- for i in self._keys:
-
- try:
- yield (i, self[i])
- continue
- except KeyError:
- print 'fake keys', self._keys
- print 'real keys', self.keys()
- raise
- continue
-
-
-
-
-
- def items(self):
- return list(self.iteritems())
-
-
- def keys(self):
- return self._keys[:]
-
-
- def iterkeys(self):
- return iter(self._keys)
-
-
- def itervalues(self):
- for i in self._keys:
- yield self[i]
-
-
-
- def values(self):
- return list(self.itervalues())
-
-
- def popitem(self):
- if len(self._keys) == 0:
- raise KeyError('dictionary is empty')
- len(self._keys) == 0
- key = self._keys[-1]
- val = self[key]
- del self[key]
- return (key, val)
-
-
- def setdefault(self, key, failobj = None):
- ret = dict.setdefault(self, key, failobj)
- if key not in self._keys:
- self._keys.append(key)
-
- return ret
-
-
- def update(self, d):
-
- try:
- for key in d.keys():
- if not self.has_key(key):
- self._keys.append(key)
- continue
- except AttributeError:
- for k, v in d:
- self[k] = v
-
- return None
-
- dict.update(self, d)
-
-
- def move(self, key, index):
-
- try:
- cur = self._keys.index(key)
- except ValueError:
- raise KeyError(key)
-
- self._keys.insert(index, key)
- if cur >= index:
- cur = cur + 1
-
- del self._keys[cur]
-
-
- def index(self, key):
- if not self.has_key(key):
- raise KeyError(key)
- self.has_key(key)
- return self._keys.index(key)
-
-
- def get(self, key, default = None):
- return dict.get(self, key, default)
-
-
- def sort(self, cmp = None, key = None, reverse = False):
- return self._keys.sort(cmp = cmp, key = key, reverse = reverse)
-
-
- def sort_values(self, cmp = None, key = None, reverse = False):
- if key is None:
-
- key = lambda k: k
-
-
- value_key = lambda k: key(self.get(k))
- self.sort(cmp = cmp, key = value_key, reverse = reverse)
-
-
-
- class OrderedDict(dict, DictMixin):
-
- def __init__(self, *args, **kwds):
- if len(args) > 1:
- raise TypeError('expected at most 1 arguments, got %d' % len(args))
- len(args) > 1
-
- try:
- self._OrderedDict__end
- except AttributeError:
- self.clear()
-
- self.update(*args, **kwds)
-
-
- def clear(self):
- self._OrderedDict__end = end = []
- end += [
- None,
- end,
- end]
- self._OrderedDict__map = { }
- dict.clear(self)
-
-
- def __setitem__(self, key, value):
- if key not in self:
- end = self._OrderedDict__end
- curr = end[1]
- curr[2] = end[1] = self._OrderedDict__map[key] = [
- key,
- curr,
- end]
-
- dict.__setitem__(self, key, value)
-
-
- def __delitem__(self, key):
- dict.__delitem__(self, key)
- (key, prev, next) = self._OrderedDict__map.pop(key)
- prev[2] = next
- next[1] = prev
-
-
- def __iter__(self):
- end = self._OrderedDict__end
- curr = end[2]
- while curr is not end:
- yield curr[0]
- curr = curr[2]
-
-
- def __reversed__(self):
- end = self._OrderedDict__end
- curr = end[1]
- while curr is not end:
- yield curr[0]
- curr = curr[1]
-
-
- def popitem(self, last = True):
- if not self:
- raise KeyError('dictionary is empty')
- self
- key = None if last else iter(self).next()
- value = self.pop(key)
- return (key, value)
-
-
- def __reduce__(self):
- items = [ [
- k,
- self[k]] for k in self ]
- tmp = (self._OrderedDict__map, self._OrderedDict__end)
- del self._OrderedDict__map
- del self._OrderedDict__end
- inst_dict = vars(self).copy()
- (self._OrderedDict__map, self._OrderedDict__end) = tmp
- if inst_dict:
- return (self.__class__, (items,), inst_dict)
- return (self.__class__, (items,))
-
-
- def keys(self):
- return list(self)
-
- setdefault = DictMixin.setdefault
- update = DictMixin.update
- pop = DictMixin.pop
- values = DictMixin.values
- items = DictMixin.items
- iterkeys = DictMixin.iterkeys
- itervalues = DictMixin.itervalues
- iteritems = DictMixin.iteritems
-
- def __repr__(self):
- if not self:
- return '%s()' % (self.__class__.__name__,)
- return '%s(%r)' % (self.__class__.__name__, self.items())
-
-
- def copy(self):
- return self.__class__(self)
-
-
- def fromkeys(cls, iterable, value = None):
- d = cls()
- for key in iterable:
- d[key] = value
-
- return d
-
- fromkeys = classmethod(fromkeys)
-
- def __eq__(self, other):
- if isinstance(other, OrderedDict):
- if len(self) == len(other):
- pass
- return all((lambda .0: for p, q in .0:
- p == q)(zip(self.items(), other.items())))
- return dict.__eq__(self, other)
-
-
- def __ne__(self, other):
- return not (self == other)
-
-
-
- class LazySortedDict(odict):
-
- def _get_keys(self):
-
- try:
- self._real_keys = sorted(self._real_keys)
- except AttributeError:
- self._real_keys = []
-
- return self._real_keys
-
-
- def _set_keys(self, keys):
- self._real_keys = sorted(keys)
-
-
- def copy(self):
- return type(self)(self)
-
- _keys = property(_get_keys, _set_keys)
-
-
- class ostorage(odict, Storage):
-
- def __getattr__(self, attr):
- if attr == '_keys':
- return odict.__getattr__(self, attr)
- return Storage.__getattr__(self, attr)
-
-
- def __setattr__(self, attr, val):
- if attr == '_keys':
- return odict.__setattr__(self, attr, val)
- return Storage.__setattr__(self, attr, val)
-
-
-
- class Ostorage(OrderedDict, Storage):
-
- def __getattr__(self, attr):
- if attr in ('_OrderedDict__map', '_OrderedDict__end'):
- return OrderedDict.__getattr__(self, attr)
- return Storage.__getattr__(self, attr)
-
-
- def __setattr__(self, attr, val):
- if attr in ('_OrderedDict__map', '_OrderedDict__end'):
- return OrderedDict.__setattr__(self, attr, val)
- return Storage.__setattr__(self, attr, val)
-
-
-
- def groupify(seq, keys = None, whitelist = True, mapclass = odict):
- retval = [
- mapclass()]
- idx = 0
- for k, v in seq:
- if keys and whitelist ^ (k in keys):
- continue
-
- if k in retval[idx]:
- retval.append(mapclass())
- idx += 1
-
- retval[idx][k] = v
-
- if not retval[0]:
- return []
- return retval
-
-
- class FilterDict(dict):
-
- def __init__(self, filterfunc, d = None, **kw):
- if d is None:
- d = { }
-
- dict.__init__(self)
- d.update(kw)
- dict.__setattr__(self, 'ff', filterfunc)
- for k, v in d.iteritems():
- self.__setitem__(k, v)
-
-
-
- def __getitem__(self, key):
- return dict.__getitem__(self, self.ff(key))
-
-
- def __delitem__(self, key):
- return dict.__delitem__(self, self.ff(key))
-
-
- def __contains__(self, key):
- return dict.__contains__(self, self.ff(key))
-
-
- def __setitem__(self, key, newval):
- return dict.__setitem__(self, self.ff(key), newval)
-
-
-
- class LowerDict(FilterDict):
-
- def __init__(self, *a, **k):
-
- def filterfunc(x):
-
- try:
- x = x.lower()
- except:
- pass
-
- return x
-
- FilterDict.__init__(self, filterfunc, *a, **k)
-
-
- recurse_lower = dictrecurse(LowerDict)
-
- class LowerStorage(LowerDict, Storage):
-
- def __init__(self, *a, **k):
- Storage.__init__(self)
- LowerDict.__init__(self, *a, **k)
-
-
- recurse_lower_storage = dictrecurse(LowerStorage)
-
- def odict_from_dictlist(seq):
- od = odict()
- for subdict in seq:
- key = subdict.keys()[0]
- od[key] = subdict[key]
-
- return od
-
- if __name__ == '__main__':
- import doctest
- doctest.testmod(verbose = True)
-
-