def testShouldGetTheInnerProductoOfTwoMatrices(self):
        m1 = matrix.Matrix([[complex.ComplexNumber(1, 0), complex.ComplexNumber(1, 0)], [complex.ComplexNumber(-1, 0), complex.ComplexNumber(1, 0)]])
        m2 = matrix.Matrix([[complex.ComplexNumber(2, 0), complex.ComplexNumber(1, 0)], [complex.ComplexNumber(1, 0), complex.ComplexNumber(3, 0)]])
        mTest = m1.innerProduct(m2)

        mSol = 5
        self.assertEqual(mSol,mTest.partReal)
예제 #2
0
 def testShouldDivideTwoComplexNumbers(self):
     c1 = complex.ComplexNumber(4, 5)
     c2 = complex.ComplexNumber(2,6)
     cResultTest = c1.division(c2)
     cResultTest.showNumber()
     self.assertAlmostEqual(cResultTest.partReal,0.95)
     self.assertAlmostEqual(cResultTest.partImag,0.35)
예제 #3
0
def booleanMatrix(pmatrix):
    """ Crea una matriz con entradas de numeros booleanos y retorna la 
    matrix creada""" 
    m = len(pmatrix) #rows
    n = len(pmatrix[0]) #column
    matrixBoolean= [[complex.ComplexNumber(0,0) for x in range(n)] for y in range(m)] 
    for i in range (m):
        for j in range (n):
            matrixBoolean[i][j] = complex.ComplexNumber(pmatrix[i][j], 0)
    return Matrix(matrixBoolean)
예제 #4
0
def realMatrix(self):
    """ Crea una matriz con entradas de numeros reales y retorna la 
    matrix creada""" 
    m = len(self) #rows
    n = len(self[0]) #column
    matrixR= [[complex.ComplexNumber(0,0) for x in range(n)] for y in range(m)] 
    for i in range (m):
        for j in range (n):
            matrixR[i][j] = complex.ComplexNumber(self[i][j], 0)
    return Matrix(matrixR)    
예제 #5
0
    def test_01_integer_equality(self):
        """
            Note all other tests depend on this test !

            We want also to test the constructor, so in c we set stuff by hand    
        """
        c = ComplexNumber(0,0)
        c.real = 1       
        c.imaginary = 2        
        self.assertEquals(c, ComplexNumber(1,2))         
예제 #6
0
def complexMatrix(self):
    """ Crea una matriz con entradas de numeros complejos y retorna la 
    matrix creada""" 
    m = len(self) #rows
    n = len(self[0]) #column
    matrixC= [[complex.ComplexNumber(0,0) for x in range(n)] for y in range(m)] 
    for i in range (m):
        for j in range (n):
            matrixC[i][j] = complex.ComplexNumber(self[i][j][0], self[i][j][1])
    return Matrix(matrixC) 
예제 #7
0
 def trace (self):   
     """ Traza de una matriz: la suma de los elementos de la diagonal"""
     if (self.m != self.n ):
         raise Exception('The dimensions of rows and columns do not match')
     else:
         sum = complex.ComplexNumber(0,0)
         for i in range (self.m):
             self.mtx[i][i].showNumber()
             sum = sum.add(self.mtx[i][i])
         resp = complex.ComplexNumber(sum.partReal,sum.partImag)
         return resp
예제 #8
0
def identityMatrix(rows, colums):
    """Crear una matriz de identidad (solo las entradas diferentes a cero
    pertenecen a la diagonal) de filas rows y columnas columns"""
    m = rows #rows
    n = colums #column
    matrixC= [[complex.ComplexNumber(0,0) for x in range(n)] for y in range(m)] 
    for i in range (m):
        for j in range (n):
            if i ==j:
                matrixC[i][j] = complex.ComplexNumber(1, 0)
    return Matrix(matrixC) 
 def testShouldGeteigenValues(self):
     
     mSol =  matrix.Matrix([[complex.ComplexNumber(1, 0), complex.ComplexNumber(-3, 0),complex.ComplexNumber(3, 0)], [complex.ComplexNumber(3, 0), complex.ComplexNumber(-5,0),complex.ComplexNumber(3, 0)],[complex.ComplexNumber(6, 0), complex.ComplexNumber(-6, 0),complex.ComplexNumber(4, 0)]])
     listValues = mSol.eigenValues()
     listSolutio = [complex.ComplexNumber(4, 0), complex.ComplexNumber(-2, 0),complex.ComplexNumber(-2, 0)]
     result = True
     if (len(listValues)!= len(listSolutio)):
         raise Exception('The dimensions of the lists are not the same ')
     for i in range(len(listValues)):
         if(listValues[i].partReal != listSolutio[i].partReal or listValues[i].partImag != listSolutio[i].partImag):
             result = False
     self.assertTrue(result)
예제 #10
0
 def action(self, mat2):
     """ accion de una matriz sobre un vector  """
     if (self.n != mat2.m ):
         raise Exception('The dimensions of rows and columns do not match')
     else:
         matrixResult = [[complex.ComplexNumber(0,0) for x in range(mat2.n)] for y in range(self.m)] 
         for i in range (self.m):
             for j in range (mat2.n):
                 sum = complex.ComplexNumber(0,0)
                 for z in range(self.n):
                     sum = sum.add(self.mtx[i][z].multiplication(mat2.mtx[z][j]))
                 matrixResult[i][j] = sum
         matResult = Matrix(matrixResult)
         return matResult
예제 #11
0
 def eigenValues(self):
     """ retorna los valores propios de una matriz""" 
     SympyMatrix = [[complex.ComplexNumber(0,0) for x in range(self.n)] for y in range(self.m)] 
     for i in range (self.m):
         for k in range (self.n):
             SympyMatrix[i][k] = ((self.mtx[i][k].partReal)+(self.mtx[i][k].partImag*1j))
     matResult = sympy.Matrix(SympyMatrix)
     values = matResult.eigenvals()
     resultValues = []
     for key,value in values.items():
         for nRepetidos in range(value):
             #print(key)
             resultValues.append(complex.ComplexNumber(sympy.re(key),sympy.im(key)))
     return resultValues
예제 #12
0
def main():
    print(list(set([11, 22, 33, 44, 11, 22])))
    defaultshape = sp.shape()
    if (isinstance(defaultshape, sp.shape)):
        print('default area is {}'.format(defaultshape.area()))

    squareshape = sp.square(5)
    if (isinstance(squareshape, sp.shape)):
        print('Square area is {}'.format(squareshape.area()))

    c1 = cn.ComplexNumber(4, 2)
    c2 = cn.ComplexNumber(5, 3)

    c3 = c1.add(c2)
    #print("Complex Number {}+i{}".format(c3.real, c3.complex))
    print('Sum is {}'.format(c3))
 def testLabTensor(self):
     h = matrix.Matrix([[complex.ComplexNumber(1, 0), complex.ComplexNumber(1, 0)], [complex.ComplexNumber(1, 0), complex.ComplexNumber(-1, 0)]])
     h = h.scalarMultiplication(complex.ComplexNumber(1/math.sqrt(2),0))
     x = matrix.Matrix([[complex.ComplexNumber(0, 0), complex.ComplexNumber(1, 0)], [complex.ComplexNumber(1, 0), complex.ComplexNumber(0, 0)]])
     m1 = h.tensorProduct(h)
     m2 = h.tensorProduct(x)
     v = matrix.Matrix([[complex.ComplexNumber(1, 0), complex.ComplexNumber(0, 0),complex.ComplexNumber(0, 0), complex.ComplexNumber(0, 0)]])
     res = v.multiplication(m1)
     resultado = res.multiplication(m2)
예제 #14
0
 def inverse (self):
     """ Inversa de una matriz/vectore"""
     matrixResult = [[complex.ComplexNumber(0,0) for x in range(self.n)] for y in range(self.m)] 
     for i in range (self.m):
         for j in range (self.n):
             matrixResult[i][j] = self.mtx[i][j].inverse()
     matResult = Matrix(matrixResult)
     return matResult
예제 #15
0
 def conjugate (self):
     """ Conjuagada de una matriz/vector"""
     matrixResult = [[complex.ComplexNumber(0,0) for x in range(self.n)] for y in range(self.m)] 
     for i in range (self.m):
         for j in range (self.n):
             matrixResult[i][j] = self.mtx[i][j].conjugate()
     matResult = Matrix(matrixResult)
     return matResult
예제 #16
0
 def transpose (self) :
     """ Transpuesta de una matriz/vector"""
     matrixResult = [[complex.ComplexNumber(0,0) for x in range(self.m)] for y in range(self.n)] 
     for i in range (self.m):
         for j in range (self.n):
             matrixResult[j][i] = self.mtx[i][j]
     matResult = Matrix(matrixResult)
     return matResult
예제 #17
0
 def scalarMultiplication(self,c):
     """ Producto escalar de una matrix/vector y un numero complejo c """
     
     matrixResult = [[complex.ComplexNumber(0,0) for x in range(self.n)] for y in range(self.m)] 
     for i in range (self.m):
         for j in range (self.n):
             matrixResult[i][j]=self.mtx[i][j].multiplication(c)
     matResult = Matrix(matrixResult)
     return matResult
예제 #18
0
 def tensorProduct(self,mat2):
     "producto tensor"
     matrixResult = [[complex.ComplexNumber(0,0) for x in range(self.n*mat2.n)] for y in range(self.m*mat2.m)] 
     for i in range (self.m):
         for j in range (self.n):
             matriz = mat2.scalarMultiplication(self.mtx[i][j])
             matrixResult = self.fillTensor(matrixResult,matriz,i,j)
     matResult = Matrix(matrixResult)
     return matResult
 def testeigenValuesAndEigenVectorsProbability(self):
     omega = matrix.complexMatrix([[(-1, 0), (0, -1)], [(0, 1), (1, 0)]])
     startState = matrix.complexMatrix([[(1 / 2, 0)], [(1 / 2, 0)]])
     #Valores Propios
     eigenValues = omega.eigenValues()
     solutionEigenValues = [
         complex.ComplexNumber(-math.sqrt(2), 0),
         complex.ComplexNumber(math.sqrt(2), 0)
     ]
     for i in range(len(eigenValues)):
         solutionEigenValues[i]
         solutionEigenValues[i]
     #Vectores Propios
     eigenVectorsProbabilities = qm.probabilityForAStateToCollapseIntoAnEigenVentor(
         omega, startState)
     solutionProbabilities = [0.5, 0.5]
     for i in range(len(eigenVectorsProbabilities)):
         probability = round(eigenVectorsProbabilities[i], 2)
         self.assertAlmostEqual(probability, solutionProbabilities[i])
 def testShouldAddTwoComplexVectors(self):
     m1 = matrix.Matrix([[complex.ComplexNumber(2, 5), complex.ComplexNumber(1, 1),complex.ComplexNumber(4, 3)]])
     m2 = matrix.Matrix([[complex.ComplexNumber(5, 13), complex.ComplexNumber(6, 2),complex.ComplexNumber(0.53, -6), complex.ComplexNumber(12, 0)]])
     m3 = matrix.Matrix([[complex.ComplexNumber(7, -8), complex.ComplexNumber(0, 4),complex.ComplexNumber(2, 0), complex.ComplexNumber(9.4, 3)]])   
     vectorSDifferentLength = False
     try:
         mTest1 = m1.add(m2)
     except:
         vectorSDifferentLength = True
     mTest2 = m2.add(m3)
     mSol =  matrix.Matrix([[complex.ComplexNumber(12, 5), complex.ComplexNumber(6, 6),complex.ComplexNumber(2.53, -6), complex.ComplexNumber(21.4, 3)]])
     self.assertTrue(vectorSDifferentLength)
     self.assertTrue(mTest2.equals(mSol))
 def testShouldSubtractTwoMatrices(self):
     m1 = matrix.Matrix([[complex.ComplexNumber(-1, -1), complex.ComplexNumber(3, 0)], [complex.ComplexNumber(4, 6), complex.ComplexNumber(2, 2)]])
     m2 = matrix.Matrix([[complex.ComplexNumber(1, 0), complex.ComplexNumber(3, 4)], [complex.ComplexNumber(0, 2), complex.ComplexNumber(-3, 1)]])
     m3 = matrix.Matrix([[complex.ComplexNumber(2, -7.86), complex.ComplexNumber(6.5, 1),complex.ComplexNumber(-4, 8)]])
     MatricesDifferentLength = False
     try:
         mTest1 = m1.subtract(m3)
     except:
         MatricesDifferentLength = True
     mTest2 = m1.subtract(m2)
     mSol =  matrix.Matrix([[complex.ComplexNumber(-2, -1), complex.ComplexNumber(0, -4)], [complex.ComplexNumber(4, 4), complex.ComplexNumber(5, 1)]])
     self.assertTrue(MatricesDifferentLength)
     self.assertTrue(mTest2.equals(mSol))
예제 #22
0
 def subtract (self, mat2):
     """ Resta de dos matrices/vectores """
     if (self.m != mat2.m or self.n != mat2.n):
         raise Exception('The dimensions of the matrices are not the same ')
     else:
         matrixResult = [[complex.ComplexNumber(0,0) for x in range(self.n)] for y in range(self.m)] 
         for i in range (self.m):
             for j in range (self.n):
                 matrixResult[i][j] = self.mtx[i][j].subtract(mat2.mtx[i][j])
         matResult = Matrix(matrixResult)
         return matResult
 def testMatricesMultiplication(self):
     m1 = matrix.Matrix([[complex.ComplexNumber(3, 2), complex.ComplexNumber(0, 0),complex.ComplexNumber(5, -6)], [complex.ComplexNumber(1, 0), complex.ComplexNumber(4, 2),complex.ComplexNumber(0, 1)],[complex.ComplexNumber(4, -1), complex.ComplexNumber(0, 0),complex.ComplexNumber(4, 0)]])
     m2 = matrix.Matrix([[complex.ComplexNumber(5, 0), complex.ComplexNumber(2, -1),complex.ComplexNumber(6, -4)], [complex.ComplexNumber(0, 0), complex.ComplexNumber(4, 5),complex.ComplexNumber(2, 0)],[complex.ComplexNumber(7, -4), complex.ComplexNumber(2, 7),complex.ComplexNumber(0, 0)]])
     m3 = matrix.Matrix([[complex.ComplexNumber(-1, -1), complex.ComplexNumber(3, 0)], [complex.ComplexNumber(4, 6), complex.ComplexNumber(2, 2)]])
     MatricesDifferentLength = False
     try:
         mTest1 = m1.subtract(m3)
     except:
         MatricesDifferentLength = True
     mTest2 = m1.multiplication(m2)
     mSol =  matrix.Matrix([[complex.ComplexNumber(26, -52), complex.ComplexNumber(60, 24),complex.ComplexNumber(26, 0)], [complex.ComplexNumber(9, 7), complex.ComplexNumber(1, 29),complex.ComplexNumber(14, 0)],[complex.ComplexNumber(48, -21), complex.ComplexNumber(15, 22),complex.ComplexNumber(20, -22)]])
     self.assertTrue(MatricesDifferentLength)
     self.assertTrue(mTest2.equals(mSol))
def transitionAmplitude(ketIni,ketFin):
    """Dados dos vectores ket (inicial y final ) calcula la probabilidad de transitar del primer vector al segundo."""
    ket1M = normalize(ketIni)
    ket2M = normalize(ketFin)
    braket = ket2M.innerProduct(ket1M)
    norm1 =  ket1M.norm()
    norm2 = ket2M.norm()
    productNorm = norm1*norm2
    productC = complex.ComplexNumber(productNorm,0)
    amplitud = braket.division(productC)
    return amplitud
    def testShouldCalculateAmplitude(self):

        ket = matrix.complexMatrix([[(2, 1)], [(-1, 2)], [(0, 1)], [(1, 0)],
                                    [(3, -1)], [(2, 0)], [(0, -2)], [(-2, 1)],
                                    [(1, -3)], [(0, -1)]])
        ket2 = matrix.complexMatrix([[(-1, -4)], [(2, -3)], [(-7, 6)],
                                     [(-1, 1)], [(-5, -3)], [(5, 0)], [(5, 8)],
                                     [(4, -4)], [(8, -7)], [(2, -7)]])
        braket = qm.transitionAmplitude(ket, ket2)
        mSol = complex.ComplexNumber(-0.022, -0.131)
        self.assertAlmostEqual(braket.partReal, mSol.partReal)
        self.assertAlmostEqual(braket.partImag, mSol.partImag)
예제 #26
0
 def eigenVectors(self):
     """ retorna los vectores propios de una matriz""" 
     SympyMatrix = [[complex.ComplexNumber(0,0) for x in range(self.n)] for y in range(self.m)] 
     for i in range (self.m):
         for k in range (self.n):
             SympyMatrix[i][k] = ((self.mtx[i][k].partReal)+(self.mtx[i][k].partImag*1j))
     matResult = sympy.Matrix(SympyMatrix)
     vectors = matResult.eigenvects()
     resultVectors = [Matrix([[]]) for i in range(len(vectors))]   
     #print(vectors)
     for i in range(len(vectors)):
         eigenVect = vectors[i][2]
         #print(vectors[i][2])
         complexEigenVect = [[complex.ComplexNumber(0,0)] for j in range (len(eigenVect[0]))]
         for j in range(len(eigenVect)):
             for x in range(len(eigenVect[j])):
                 #print(eigenVect[j][x])
                 valEigenVect = eigenVect[j][x]
                 comValEigenVect = complex.ComplexNumber(sympy.re(valEigenVect),sympy.im(valEigenVect))
                 complexEigenVect[x][0] = comValEigenVect
         resultVectors[i] = Matrix(complexEigenVect)
     return resultVectors
def normalize(ket):
    """Normaliza un vector ket, dividiendo a las entradas por la longitud del vector """
    length = ket.norm()
    m = matrix.getRows(ket) #rows
    n = matrix.getColumns(ket) #column
    ketM = matrix.getMtx(ket)
    for i in range (m):
        for j in range (n):
            temp = ketM[i][j]
            lengthC = complex.ComplexNumber(length,0)
            ketM[i][j] = temp.division(lengthC)
    matrixVector = matrix.Matrix(ketM)
    return matrixVector
예제 #28
0
 def test_02_phase(self):
     """ 
         NOTE: we can't use assertEqual, as the result of phase() is a 
         float number which may have floating point rounding errors. So it's
         necessary to use assertAlmostEqual
         As an option with the delta you can declare the precision you require.
         For more info see Python docs: 
         https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertAlmostEqual
         
         NOTE: assertEqual might still work on your machine but just DO NOT use it 
         for float numbers!!!
     """       
     self.assertAlmostEqual(ComplexNumber(0.0,1.0).phase(), math.pi / 2, delta=0.001)
예제 #29
0
 def testMatrixTranspose(self):
     m1 = matrix.Matrix([[
         complex.ComplexNumber(6, -3),
         complex.ComplexNumber(2, 12),
         complex.ComplexNumber(0, -19)
     ],
                         [
                             complex.ComplexNumber(0, 0),
                             complex.ComplexNumber(5, 2.1),
                             complex.ComplexNumber(17, 0)
                         ],
                         [
                             complex.ComplexNumber(1, 0),
                             complex.ComplexNumber(2, 5),
                             complex.ComplexNumber(3, -4.5)
                         ]])
     mTest = m1.transpose()
     mSol = matrix.Matrix([[
         complex.ComplexNumber(6, -3),
         complex.ComplexNumber(0, 0),
         complex.ComplexNumber(1, 0)
     ],
                           [
                               complex.ComplexNumber(2, 12),
                               complex.ComplexNumber(5, 2.1),
                               complex.ComplexNumber(2, 5)
                           ],
                           [
                               complex.ComplexNumber(0, -19),
                               complex.ComplexNumber(17, 0),
                               complex.ComplexNumber(3, -4.5)
                           ]])
     self.assertTrue(mTest.equals(mSol))
예제 #30
0
 def testShouldAddTwoMatrices(self):
     m1 = matrix.Matrix(
         [[complex.ComplexNumber(-1, -1),
           complex.ComplexNumber(3, 0)],
          [complex.ComplexNumber(4, 6),
           complex.ComplexNumber(2, 2)]])
     m2 = matrix.Matrix(
         [[complex.ComplexNumber(1, 0),
           complex.ComplexNumber(3, 4)],
          [complex.ComplexNumber(0, 2),
           complex.ComplexNumber(-3, 1)]])
     mTest = m1.add(m2)
     mSol = matrix.Matrix(
         [[complex.ComplexNumber(0, -1),
           complex.ComplexNumber(6, 4)],
          [complex.ComplexNumber(4, 8),
           complex.ComplexNumber(-1, 3)]])
     self.assertTrue(mTest.equals(mSol))