1a0428e9eSAndrew Rist#************************************************************** 2a0428e9eSAndrew Rist# 3a0428e9eSAndrew Rist# Licensed to the Apache Software Foundation (ASF) under one 4a0428e9eSAndrew Rist# or more contributor license agreements. See the NOTICE file 5a0428e9eSAndrew Rist# distributed with this work for additional information 6a0428e9eSAndrew Rist# regarding copyright ownership. The ASF licenses this file 7a0428e9eSAndrew Rist# to you under the Apache License, Version 2.0 (the 8a0428e9eSAndrew Rist# "License"); you may not use this file except in compliance 9a0428e9eSAndrew Rist# with the License. You may obtain a copy of the License at 10a0428e9eSAndrew Rist# 11a0428e9eSAndrew Rist# http://www.apache.org/licenses/LICENSE-2.0 12a0428e9eSAndrew Rist# 13a0428e9eSAndrew Rist# Unless required by applicable law or agreed to in writing, 14a0428e9eSAndrew Rist# software distributed under the License is distributed on an 15a0428e9eSAndrew Rist# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16a0428e9eSAndrew Rist# KIND, either express or implied. See the License for the 17a0428e9eSAndrew Rist# specific language governing permissions and limitations 18a0428e9eSAndrew Rist# under the License. 19a0428e9eSAndrew Rist# 20a0428e9eSAndrew Rist#************************************************************** 21cdf0e10cSrcweir 22ae54856bSPedro Giffuni# to support macosx baseline machines from Cretaceous period 23cdf0e10cSrcweir 24cdf0e10cSrcweir# incomplete set() class implementation of Python 2.4 25cdf0e10cSrcweirclass PseudoSet: 26cdf0e10cSrcweir _list = [] 27ae54856bSPedro Giffuni 28cdf0e10cSrcweir def __str__(self): 29cdf0e10cSrcweir return str(self._list) 30cdf0e10cSrcweir 31cdf0e10cSrcweir def __init__(self, newlist=[]): 32cdf0e10cSrcweir self._list = self._remove_dupes(newlist) 33cdf0e10cSrcweir 34cdf0e10cSrcweir def __or__(self, other): 35cdf0e10cSrcweir tmplist = [] 36cdf0e10cSrcweir if self._list != None and other != None: 37cdf0e10cSrcweir tmplist.extend(self._list) 38cdf0e10cSrcweir tmplist.extend(other) 39cdf0e10cSrcweir return PseudoSet(self._remove_dupes(tmplist)) 40cdf0e10cSrcweir else: 41*7d9fa7c3SPedro Giffuni print("__or__(None)") 42cdf0e10cSrcweir 43cdf0e10cSrcweir def __sub__(self,other): 44cdf0e10cSrcweir tmplist = [] 45cdf0e10cSrcweir if self._list != None and other != None: 46cdf0e10cSrcweir tmplist.extend(self._list) 47cdf0e10cSrcweir [tmplist.remove(key) for key in other if key in tmplist] 48cdf0e10cSrcweir else: 49*7d9fa7c3SPedro Giffuni print("__sub__(none)") 50cdf0e10cSrcweir return PseudoSet(tmplist) 51cdf0e10cSrcweir 52cdf0e10cSrcweir def __and__(self, other): 53cdf0e10cSrcweir tmplist = [] 54cdf0e10cSrcweir if other != None and self._list != None: 55cdf0e10cSrcweir [tmplist.append(key) for key in self._list if key in other] 56cdf0e10cSrcweir return PseudoSet(tmplist) 57cdf0e10cSrcweir else: 58*7d9fa7c3SPedro Giffuni print("__and__(None)") 59ae54856bSPedro Giffuni 60cdf0e10cSrcweir def __iter__(self): 61cdf0e10cSrcweir return self._list.__iter__() 62ae54856bSPedro Giffuni 63cdf0e10cSrcweir def __items__(self): 64*7d9fa7c3SPedro Giffuni return list(self._list.items()) 65cdf0e10cSrcweir 66cdf0e10cSrcweir def __keys__(self): 67cdf0e10cSrcweir return keys(self._list) 68cdf0e10cSrcweir 69cdf0e10cSrcweir def _remove_dupes(self, list): 70ae54856bSPedro Giffuni tmpdict = {} 71cdf0e10cSrcweir for key in list: 72cdf0e10cSrcweir tmpdict[key] = 1 73*7d9fa7c3SPedro Giffuni return list(tmpdict.keys()) 74cdf0e10cSrcweir 75ae54856bSPedro Giffuni# incomplete OrderedDict() class implementation 76cdf0e10cSrcweirclass PseudoOrderedDict(dict): 77cdf0e10cSrcweir _keylist = [] 78cdf0e10cSrcweir _valuelist = [] 79ae54856bSPedro Giffuni 80cdf0e10cSrcweir def __init__(self, defaults={}): 81cdf0e10cSrcweir dict.__init__(self) 82*7d9fa7c3SPedro Giffuni for n,v in list(defaults.items()): 83cdf0e10cSrcweir self[n] = v 84cdf0e10cSrcweir 85cdf0e10cSrcweir def __setitem__(self, key, value): 86cdf0e10cSrcweir self._keylist.append(key) 87cdf0e10cSrcweir self._valuelist.append(value) 88cdf0e10cSrcweir return dict.__setitem__(self, key, value) 89ae54856bSPedro Giffuni 90cdf0e10cSrcweir def __delattr__(self, key): 91cdf0e10cSrcweir self._keylist.__delattr__(key) 92cdf0e10cSrcweir self._valuelist.__delattr__(dict[key]) 93cdf0e10cSrcweir return dict.__delattr__(self, key) 94cdf0e10cSrcweir 95cdf0e10cSrcweir def __delitem__(self, key): 96cdf0e10cSrcweir self._keylist.__delitem__(key) 97cdf0e10cSrcweir self._valuelist.__delitem__(dict[key]) 98cdf0e10cSrcweir return dict.__delitem__(self, key) 99ae54856bSPedro Giffuni 100cdf0e10cSrcweir def __iter__(self): 101cdf0e10cSrcweir raise NotImplementedError("__iter__") 102ae54856bSPedro Giffuni 103cdf0e10cSrcweir def __iterkeys__(self): 104cdf0e10cSrcweir return self._keylist 105ae54856bSPedro Giffuni 106cdf0e10cSrcweir def iteritems(self): 107cdf0e10cSrcweir #return self._valuelist 108*7d9fa7c3SPedro Giffuni return list(zip(self._keylist, self._valuelist)) 109ae54856bSPedro Giffuni 110cdf0e10cSrcweir def items(self): 111*7d9fa7c3SPedro Giffuni return list(zip(self._keylist,self._valuelist)) 112cdf0e10cSrcweir 113cdf0e10cSrcweir def __keys__(self): 114cdf0e10cSrcweir return self._keylist 115cdf0e10cSrcweir 116cdf0e10cSrcweir def keys(self): 117cdf0e10cSrcweir return self._keylist 118cdf0e10cSrcweir 119cdf0e10cSrcweir def __keysattr__(self): 120cdf0e10cSrcweir return self._keylist 121ae54856bSPedro Giffuni 122cdf0e10cSrcweir def pop(self, key): 123cdf0e10cSrcweir self._keylist.pop(key) 124cdf0e10cSrcweir self._valuelist.pop(key) 125cdf0e10cSrcweir return dict.__pop__(self, key) 126ae54856bSPedro Giffuni 127cdf0e10cSrcweir def popitem(self): 128cdf0e10cSrcweir raise NotImplementedError("popitem") 129ae54856bSPedro Giffuni 130cdf0e10cSrcweirdef _testdriver_set(): 131cdf0e10cSrcweir list, list1 = [] ,[] 132cdf0e10cSrcweir list.append("a") 133cdf0e10cSrcweir list.append("b") 134cdf0e10cSrcweir list.append("c") 135cdf0e10cSrcweir 136cdf0e10cSrcweir list1.append("a") 137cdf0e10cSrcweir list1.append("b") 138cdf0e10cSrcweir list1.append("d") 139cdf0e10cSrcweir list1.append("e") 140cdf0e10cSrcweir list1.append("e") 141cdf0e10cSrcweir 142cdf0e10cSrcweir if "a" in list: 143*7d9fa7c3SPedro Giffuni print("YEAH!") 144cdf0e10cSrcweir 145cdf0e10cSrcweir a = PseudoSet(list) 146cdf0e10cSrcweir b = PseudoSet(list1) 147cdf0e10cSrcweir 148*7d9fa7c3SPedro Giffuni print("a="+str(a)) 149*7d9fa7c3SPedro Giffuni print("b="+str(b)) 150*7d9fa7c3SPedro Giffuni print("a|b=" + str(a|b)) 151*7d9fa7c3SPedro Giffuni print("a="+str(a)) 152*7d9fa7c3SPedro Giffuni print("b="+str(b)) 153*7d9fa7c3SPedro Giffuni print("a&b=" + str(a&b)) 154*7d9fa7c3SPedro Giffuni print("a="+str(a)) 155*7d9fa7c3SPedro Giffuni print("b="+str(b)) 156*7d9fa7c3SPedro Giffuni print("a-b" + str(a-b)) 157cdf0e10cSrcweir 158cdf0e10cSrcweir for key in a: 159*7d9fa7c3SPedro Giffuni print(key) 160cdf0e10cSrcweir 161cdf0e10cSrcweirdef _testdriver_dict(): 162cdf0e10cSrcweir d = PseudoOrderedDict() 163cdf0e10cSrcweir d["a"] = 1 164cdf0e10cSrcweir d["b"] = 2 165cdf0e10cSrcweir d["c"] = 3 166cdf0e10cSrcweir d["d"] = 4 167cdf0e10cSrcweir d["e"] = 5 168cdf0e10cSrcweir d["f"] = 6 169cdf0e10cSrcweir 170*7d9fa7c3SPedro Giffuni print("a="+str(d["a"])) 171*7d9fa7c3SPedro Giffuni print("e="+str(d["e"])) 172*7d9fa7c3SPedro Giffuni for key,value in d.items(): 173*7d9fa7c3SPedro Giffuni print("d["+key+"]="+str(d[key])) 174*7d9fa7c3SPedro Giffuni print("key="+str(key)+" value="+str(value)) 175cdf0e10cSrcweir 176*7d9fa7c3SPedro Giffuni print("keys="+str(list(d.keys()))) 177cdf0e10cSrcweir 178cdf0e10cSrcweir#_testdriver_dict() 179