def testV__transpose__V01(): import axis as ax import numpy as np a = ax.Axis((3, ), np.ndarray) b = ax.Axis((3,4 ), np.ndarray) c = ax.Axis((3,4,5), np.ndarray) ma1 = MultiAxis((a, b, c)) ma2 = ma1.transpose() ma3 = ma1.transpose((0,2,1)) ma4 = ma1.transpose().transpose() assert( ma1 == ma4 ) assert( ma2.axes == (c, b, a) ) assert( ma2.ndim == 3 ) assert( ma2.dtype == np.ndarray ) assert( ma2.pgsym == False ) assert( ma2.shape == (3, 2, 1) ) assert( ma2.keys == ((0, 1, 2), (0, 1), (0,)) ) assert( ma2.inits == ((3, 4, 5), (3, 4), (3,)) ) assert( ma3.axes == (a, c, b) ) assert( ma3.ndim == 3 ) assert( ma3.dtype == np.ndarray ) assert( ma3.pgsym == False ) assert( ma3.shape == (1, 3, 2) ) assert( ma3.keys == ((0,), (0, 1, 2), (0, 1)) ) assert( ma3.inits == ((3,), (3, 4, 5), (3, 4)) )
def __init__(self, elem_init_args, elem_dtype): if not hasattr(elem_init_args, "__getitem__"): elem_init_args = (elem_init_args,) self.nelem = len(elem_init_args) self.elem_keys = tuple(range(self.nelem)) self.elem_init_args = tuple(elem_init_args) self.elem_dtype = elem_dtype MultiAxis.__init__(self, (self,))
def testViter_complementV01(): import axis as ax import numpy as np a = ax.IrrepAxis("C2v", (4,0,1,2), np.ndarray) ma = MultiAxis((a, a)) assert( list(ma.iter_complement((0,))) == [(0, 0), (2, 2), (3, 3)] ) assert( list(ma.iter_complement((1,))) == [(2, 3), (3, 2)] ) assert( list(ma.iter_complement((2,))) == [(0, 2), (2, 0)] ) assert( list(ma.iter_complement((3,))) == [(0, 3), (3, 0)] )
def __init__(self, axes, blkmap = None, **kwargs): self.mltx = MultiAxis(axes) self.kwargs = kwargs self.check_kwargs() self.blkmap = blkmap if not blkmap is None else dict() self.ndim = self.mltx.ndim self.shape = self.mltx.shape self.dtype = self.mltx.dtype if blkmap is None: self.init_blocks()
class BlockTensor(object): kwtypes = {'keys' : (lambda arg: hasattr (arg, "__iter__")), 'diagonal': (lambda arg: isinstance(arg, bool ))} kwrecursive = ['diagonal'] def __init__(self, axes, blkmap = None, **kwargs): self.mltx = MultiAxis(axes) self.kwargs = kwargs self.check_kwargs() self.blkmap = blkmap if not blkmap is None else dict() self.ndim = self.mltx.ndim self.shape = self.mltx.shape self.dtype = self.mltx.dtype if blkmap is None: self.init_blocks() def iter_keytups(self): if 'keys' in self.kwargs: return self.kwargs['keys'] elif 'diagonal' in self.kwargs: return self.mltx.__iter__() else: return self.mltx.iter_array() def init_blocks(self): if self.dtype is BlockTensor: kwargs = {kw: self.kwargs[kw] for kw in self.kwrecursive if kw in self.kwargs} for keytup in self.iter_keytups(): self.blkmap[keytup] = self.dtype( self.mltx[keytup], **kwargs ) elif issubclass(self.dtype, np.ndarray): for keytup in self.iter_keytups(): self.blkmap[keytup] = self.dtype( self.mltx[keytup] ) self.blkmap[keytup].fill(0.0) else: raise ValueError('{:s} is an invalid dtype for BlockTensor'.format(self.dtype)) def __call__(self, *keytup): try: return self.blkmap.__getitem__(*keytup) except: return self.blkmap.__getitem__( keytup) def __str__(self): return printer.BlockTensor2str(self) def check_kwargs(self): for key, arg in self.kwargs.iteritems(): if not key in self.kwtypes : raise ValueError("Invalid kwarg '{:s}' passed to BlockedTensor.".format(key)) if not self.kwtypes[key](arg): raise ValueError("BlockedTensor kwarg '{:s}' has incorrect type '{:s}'.".format(key, type(arg).__name__))
def testViter_complementV02(): ma = MultiAxis(()) assert( list(ma.iter_complement('chicken')) == [()] )
def testViter_arrayV02(): ma = MultiAxis(()) assert( list(ma.iter_array()) == [()] )
def testV__iter__V02(): ma = MultiAxis(()) assert( list(ma.__iter__()) == [()] )
def testViter_arrayV01(): import axis as ax import numpy as np a = ax.IrrepAxis("C2v", (4,0,1,2), np.ndarray) ma = MultiAxis((a, a)) assert( list(ma.iter_array()) == [(0, 0), (2, 2), (3, 3)] )
def testV__iter__V01(): import axis as ax import numpy as np a = ax.Axis((4,0,1,2), np.ndarray) ma = MultiAxis((a, a)) assert( list(ma.__iter__()) == [(0, 0), (0, 2), (0, 3), (2, 0), (2, 2), (2, 3), (3, 0), (3, 2), (3, 3)] )