Example #1
0
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)) )
Example #2
0
 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,))
Example #3
0
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)]         )
Example #4
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()
Example #5
0
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__))
Example #6
0
def testViter_complementV02():
  ma = MultiAxis(())
  assert( list(ma.iter_complement('chicken')) == [()] )
Example #7
0
def testViter_arrayV02():
  ma = MultiAxis(())
  assert( list(ma.iter_array()) == [()] )
Example #8
0
def testV__iter__V02():
  ma = MultiAxis(())
  assert( list(ma.__iter__()) == [()] )
Example #9
0
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)] )
Example #10
0
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)] )