# Setup c-->from imp import reload c-->import pcollections,inspect c-->reload(pcollections) c-->from pcollections import pnamedtuple as pnt # Test pnamedtuple (as pnt) c-->Quad1 = pnt('Quad1', 'x y z f') c-->print(Quad1.source_code) c-->Quad2 = pnt('Quad2', 'x, y, z, f') c-->Quad3 = pnt('Quad3', ['x','y','z','f']) ^-->Quad_Bad = pnt(1, 'x y z f')-->SyntaxError ^-->Quad_Bad = pnt('Quad_Bad', {'x','y','z','f'})-->SyntaxError ^-->Quad_Bad = pnt('3', 'x y z f')-->SyntaxError ^-->Quad_Bad = pnt('Quad_Bad', 'x 3 z f')-->SyntaxError ^-->Quad_Bad = pnt('Quad_Bad', 'x y z if')-->SyntaxError ^-->Quad_Bad = pnt('Quad_Bad', '_x _y _z _f')-->SyntaxError c-->Quad_OK = pnt('Quad_OK', 'x17 y__1 z__2 f2') # Test init/repr c-->t1 = Quad1(1,2,3,4) e-->repr(t1)-->Quad1(x=1,y=2,z=3,f=4) c-->t2 = Quad2(1,2,3,4) e-->repr(t2)-->Quad2(x=1,y=2,z=3,f=4) c-->t3 = Quad3(1,2,3,4) e-->repr(t3)-->Quad3(x=1,y=2,z=3,f=4) c-->t3 = Quad3(f=4,z=3,y=2,x=1) e-->repr(t3)-->Quad3(x=1,y=2,z=3,f=4) c-->tok= Quad_OK(z__2=3,f2=4,y__1=2,x17=1) e-->repr(tok)-->Quad_OK(x17=1,y__1=2,z__2=3,f2=4) e-->t1.x-->1 e-->t1.y-->2 e-->t1.z-->3 e-->t1.f-->4 ^-->t1.d-->AttributeError # Test get_ methods e-->t1.get_x()-->1 e-->t1.get_y()-->2 e-->t1.get_z()-->3 e-->t1.get_f()-->4 ^-->t1.get_d()-->AttributeError c-->l = [Quad1(x=1,y=2,z=3,f=4),Quad1(y=1,f=4,z=2,x=3),Quad1(f=4,z=1,x=2,y=3)] c-->l.sort(key=Quad1.get_x) e-->l-->[Quad1(x=1,y=2,z=3,f=4), Quad1(x=2,y=3,z=1,f=4), Quad1(x=3,y=1,z=2,f=4)] # Test __getitem__ functions e-->t1[0]-->1 e-->t1[1]-->2 e-->t1[2]-->3 e-->t1[3]-->4 e-->t1['x']-->1 e-->t1['y']-->2 e-->t1['z']-->3 e-->t1['f']-->4 ^-->t1[5]-->IndexError ^-->t1['d']-->IndexError ^-->t1[3.2]-->IndexError # Test == e-->t1 == t1-->True e-->t1 == t2-->False e-->t1 == Quad1(x=1,y=2,z=3,f=4)-->True e-->t1 == Quad1(x=1,y=2,z=3,f=3)-->False # Test replace (not mutable) ==-->t1._replace(x=2)-->Quad1(2,2,3,4) ==-->t1._replace(x=2,f=2)-->Quad1(2,2,3,2) ^-->t1._replace(x=2,z=2,d=2)-->TypeError ==-->t1-->Quad1(x=1,y=2,z=3,f=4) # Test _replace (mutable) c-->Quad1 = pnt('Quad1', 'x y z f',mutable=True) c-->t1 = Quad1(1,2,3,4) e-->t1._replace(x=2,f=2)-->None ==-->t1-->Quad1(x=2,y=2,z=3,f=2) # Test Extra Credit (prohibit mutation if immutable) c-->Quad1 = pnt('Quad1', 'x y z f',mutable=False) c-->t1 = Quad1(1,2,3,4) ^-->t1.x = 2-->AttributeError c-->Quad1 = pnt('Quad1', 'x y z f',mutable=True) c-->t1 = Quad1(1,2,3,4) c-->t1.x = 2 ==-->t1-->Quad1(2,2,3,4)