示例#1
0
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
示例#2
0
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
示例#3
0
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
                
示例#4
0
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)
示例#5
0
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)
示例#6
0
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)
示例#7
0
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)
示例#8
0
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.')