Welcome, guest | Sign In | My Account | Store | Cart
```from sets import Set
import operator
import inspect

class Superposition(Set):
def __init__(self,*argl):
super(Superposition,self).__init__(self)
for arg in argl:
if isinstance(arg,Set):
self |= arg
elif isinstance(arg,list) or isinstance(arg,tuple):
self |= Set(arg)
else:
self.add(arg)

def eigenstates(self):
return list(self)

def _cartesian(self,other,op,order=True):
if order:
if isinstance(other,Superposition):
s = self.__class__([op(x,y) for x in self for y in other])
else:
s = self.__class__([op(x,other) for x in self])
else:
if isinstance(other,Superposition):
s = self.__class__([op(y,x) for x in self for y in other])
else:
s = self.__class__([op(other,x) for x in self])

return s
def __add__(self,other):
return self._cartesian(other,operator.add)

__radd__ = __add__

def __sub__(self,other):
return self._cartesian(other,operator.sub)

def __rsub__(self,other):
return self._cartesian(other,operator.sub,False)

def __mod__(self,other):
return self._cartesian(other,operator.mod)

def __rmod__(self,other):
return self._cartesian(other,operator.mod,False)

def __mul__(self,other):
return self._cartesian(other,operator.mul)

__rmul__ = __mul__

def __div__(self,other):
return self._cartesian(other,operator.div)

def __rdiv__(self,other):
return self._cartesian(other,operator.div,False)

def _comp(self,other,op):
return self.__class__([x for x in self if op(x,other)])

def __eq__(self,other):
return self._comp(other,operator.eq)

def __lt__(self,other):
return self._comp(other,operator.lt)

def __le__(self,other):
return self._comp(other,operator.le)

def __gt__(self,other):
return self._comp(other,operator.gt)

def __ge__(self,other):
return self._comp(other,operator.ge)

def __ne__(self,other):
if isinstance(other,Superposition):
return self.__class__([x for x in self if x not in other])
else:
return self._comp(other,operator.ne)

class Any(Superposition):pass

class All(Superposition):
def _comp(self,other,op):
r = super(All,self)._comp(other,op)
if len(r) == len(self):
return r
else:
return All()

def __eq__(self,other):
if isinstance(other,Set):
r = Set(self) & other
if len(r) == len(self):
return All(r)
else:
return All()
elif len(self) == 1 and self.eigenstates()[0] == other:
print 'in elif'
return All(self)
else:
return All()

if __name__ == '__main__':
a = Superposition(1,2,3)
b = Superposition(2,3,4)
print 'a =',a
print 'b =',b
print 'a+b',a+b
print 'a-b',a-b
print 'b-a',b-a
print 'a*b',a*b
print 'a/b',a/b
print 'b/a',b/a
print 'a == 1',a==1
print 'a == 2',a==2
print 'a == b',a==b
print 'a != b',a!=b
print 'b != a',b!=a
print 'a < 2',a<2
print 'a > 2',a>2
print 'a <= 2',a<=2
print 'a >= 2',a>=2
print 'a < b',a<b
print 'a > b',a>b
print
a = All(1,2,3)
b = All(2,3,4)
print '== All =='
print
print 'a == 1',a==1
print 'a == 2',a==2
print 'a == b',a==b
print 'a == a',a==a
print 'a != b',a!=b
print 'b != a',b!=a
print 'a < 2',a<2
print 'a < 4',a<4
print 'a > 2',a>2
print 'a > 0',a>0
print 'a <= 3',a<=3
print 'a >= 2',a>=2
print 'a < b',a<b
print 'a > b',a>b
print 'a > a',a>a
print 'a >= a',a>=a
print 'All(7,8,9) <= Any(5,6,7)', All(7,8,9) <= Any(5,6,7)
print 'All(5,6,7) <= Any(7,8,9)', All(5,6,7) <= Any(7,8,9)
print 'Any(6,7,8) <= All(7,8,9)', Any(6,7,8) <= All(7,8,9)
print 'MIN: Any(6,7,8) <= All(6,7,8)', Any(6,7,8) <= All(6,7,8)
print 'MAX: Any(6,7,8) >= All(6,7,8)', Any(6,7,8) >= All(6,7,8)
import math
print 'PRIMES range(4,20)', [x for x in range(4,20) if x % All([i for i in xrange(2,int(math.sqrt(x))+1)]) != 0]

def isprimenumber(num):
return bool(num % All([i for i in xrange(2,int(math.sqrt(num))+1)]) != 0)

def isprime(num):
if isinstance(num,Superposition):
return bool([x for x in num.eigenstates() if isprimenumber(x) ])
else:
return isprimenumber(num)

def hastwin(num):
return isprime(num) and isprime(num+Any(+2,-2))

print 'isprime(7)',isprime(7)
print 'isprime(10)',isprime(10)
print 'hastwin(7)',hastwin(7)
print 'hastwin(23)',hastwin(23)

print '== Strings =='
a = Any('a','b','c')
print "a = Any('a','b','c')"
print "a + '_test'",a + '_test'
```

### History

• revision 2 (19 years ago)
• previous revisions are not available