def __mul__(A,B): from spotboxpy.opFoG import OpFoG from spotboxpy.opSpot.isspot import isspot if not isspot(B): if np.isscalar(B): if A.n != 1: y = OpFoG(A,B) else: y = A.applyMultiply(B,1) else: p = np.size(B,0) if A.n != p: if A.isscalar(): pass else: raise Exception ('Matrix dimensions must agress when multiplying') return if A.isempty(): y = np.zeros((A.m,np.size(B,1))) else: y = A.applyMultiply(B,1) else: y = OpFoG(A,B) return y
def __mul__(A, B): from spotboxpy.opFoG import OpFoG from spotboxpy.opSpot.isspot import isspot if not isspot(B): if np.isscalar(B): if A.n != 1: y = OpFoG(A, B) else: y = A.applyMultiply(B, 1) else: p = np.size(B, 0) if A.n != p: if A.isscalar(): pass else: raise Exception( 'Matrix dimensions must agress when multiplying') return if A.isempty(): y = np.zeros((A.m, np.size(B, 1))) else: y = A.applyMultiply(B, 1) else: y = OpFoG(A, B) return y
def __floordiv__(A,B): from spotboxpy.opSpot.isspot import isspot if not isspot(B): if np.isscalar(B): rowB = 1 colB = 1 else: rowB = B.shape[0] colB = B.shape[1] if A.m != rowB: raise Exception ('Matrix dimensions must agree.') return if not A.isreal() or np.iscomplex(B).any(): x = np.zeros((A.n,colB),dtype=complex) else: x = np.zeros((A.n,colB)) if np.isscalar(B): x = A.divide(B,1) else: for i in range(np.size(B,1)): x[:,i] = A.divide(B[:,i],1) else: x = A.pinv() * B return x
def __rsub__(A,B): from spotboxpy.opOnes import OpOnes from spotboxpy.opMinus import OpMinus from spotboxpy.opSpot.isspot import isspot if A.isscalar(): A = OpOnes(B.shape) * A if isspot(B): if B.isscalar(): B = OpOnes(A.shape) * B else: if np.isscalar(B): B = OpOnes(A.shape) * B return OpMinus(B,A)
def __add__(A, B): from spotboxpy.opOnes import OpOnes from spotboxpy.opSum import OpSum from spotboxpy.opSpot.isspot import isspot if A.isscalar(): A = OpOnes(B.shape) * A if isspot(B): if B.isscalar(): B = OpOnes(A.shape) * B else: if np.isscalar(B): B = OpOnes(A.shape) * B return OpSum(A, B)
def __rsub__(A, B): from spotboxpy.opOnes import OpOnes from spotboxpy.opMinus import OpMinus from spotboxpy.opSpot.isspot import isspot if A.isscalar(): A = OpOnes(B.shape) * A if isspot(B): if B.isscalar(): B = OpOnes(A.shape) * B else: if np.isscalar(B): B = OpOnes(A.shape) * B return OpMinus(B, A)
def __add__(A,B): from spotboxpy.opOnes import OpOnes from spotboxpy.opSum import OpSum from spotboxpy.opSpot.isspot import isspot if A.isscalar(): A = OpOnes(B.shape) * A if isspot(B): if B.isscalar(): B = OpOnes(A.shape) * B else: if np.isscalar(B): B = OpOnes(A.shape) * B return OpSum(A,B)
def __pow__(A, B): from spotboxpy.opPower import OpPower from spotboxpy.opSpot.isnumeric import isnumeric from spotboxpy.opSpot.isspot import isspot if A.m != A.n: raise Exception('Operator must be square') return if isspot(B): if B.isscalar(): return OpPower(A, int(B)) elif isnumeric(B): if not np.isscalar(B): raise Exception('Exponent must be a scalar.') return else: return OpPower(A, B) else: raise Exception('Invalid parameters to mpower.')