# Diff of /temp/escript/py_src/pdetools.py

revision 1330 by gross, Mon Oct 22 04:54:49 2007 UTC revision 1331 by gross, Tue Oct 23 00:42:15 2007 UTC
# Line 539  type like argument C{x}. Line 539  type like argument C{x}.
539
540     return x,r     return x,r
541
542    class ArithmeticTuple(object):
543       """
544       tuple supporting inplace update x+=y and scaling x=a*y where x,y is an ArithmeticTuple and a is a float.
545
546       example of usage:
547
548       from esys.escript import Data
549       from numarray import array
550       a=Data(...)
551       b=array([1.,4.])
552       x=ArithmeticTuple(a,b)
553       y=5.*x
554
555       """
556       def __init__(self,*args):
557           """
558           initialize object with elements args.
559
560           @param args: tuple of object that support implace add (x+=y) and scaling (x=a*y)
561           """
562           self.__items=list(args)
563
564       def __len__(self):
565           """
566           number of items
567
568           @return: number of items
569           @rtype: C{int}
570           """
571           return len(self.__items)
572
573       def __getitem__(self,index):
574           """
575           get an item
576
577           @param index: item to be returned
578           @type index: C{int}
579           @return: item with index C{index}
580           """
581           return self.__items.__getitem__(index)
582
583       def __mul__(self,other):
584           """
585           scaling from the right
586
587           @param other: scaling factor
588           @type other: C{float}
589           @return: itemwise self*other
590           @rtype: L{ArithmeticTuple}
591           """
592           out=[]
593           for i in range(len(self)):
594               out.append(self[i]*other)
595           return ArithmeticTuple(*tuple(out))
596
597       def __rmul__(self,other):
598           """
599           scaling from the left
600
601           @param other: scaling factor
602           @type other: C{float}
603           @return: itemwise other*self
604           @rtype: L{ArithmeticTuple}
605           """
606           out=[]
607           for i in range(len(self)):
608               out.append(other*self[i])
609           return ArithmeticTuple(*tuple(out))
610
612           """
613           in-place add of other to self
614
615           @param other: increment
616           @type other: C{ArithmeticTuple}
617           """
618           if len(self) != len(other):
619               raise ValueError,"tuple length must match."
620           for i in range(len(self)):
621               self.__items[i]+=other[i]
622           return self
623