Пример #1
0
class Basis:
    """
    Represents the basis of a vector-space or lattice.
    """
    
    def __init__(self, arg, *, row_vectors=False):
        try:
            if isinstance(arg, Basis):
                self.matrix = arg.matrix.copy()
            elif isinstance(arg, list) and isinstance(arg[0], Matrix):
                self.matrix = Matrix.hstack(*arg)
            elif isinstance(arg, tuple) and isinstance(arg[0], Matrix):
                self.matrix = Matrix.hstack(*arg)
            else:
                self.matrix = Matrix(arg)
            
            if row_vectors:
                self.matrix = self.matrix.T
            
        except TypeError:
            raise TypeError('Cannot construct a Basis from an object of type {}'.format(type(arg)))
    
    def __str__(self):
        return self.matrix.__str__()
    
    def __repr__(self):
        return 'Basis({})'.format(self.matrix.__str__())
    
    def __len__(self):
        return self.matrix.cols
    
    def __getitem__(self, i):
        return self.matrix.__getitem__((slice(None), i))
    
    def __setitem__(self, i, val):
        return self.matrix.__setitem__((slice(None), i), val)
    
    def __iter__(self):
        for i in range(self.__len__()):
            yield self.__getitem__(i)
    
    def copy(self):
        return Basis(self.matrix.copy())
    
    def vol(self):
        return abs(self.matrix.det())
    
    def mat(self):
        return self.matrix
    
    def inv(self):
        return self.matrix.inv()
    
    def map(self, f):
        return Basis(self.matrix.applyfunc(f))