예제 #1
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)
    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)
예제 #3
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) 
예제 #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 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)
예제 #6
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))         
예제 #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 sums(ls, start, end):
	"""Sums up all the numbers in the given range of the list

	Input data:
	ls -- The list
	start -- The starting point of the range
	end -- The end point of the range 
	Output data:
	The sum of the numbers in the given range
	"""
	s = ComplexNumber.create(0)
	for cn in ls[start:end + 1]:
		s = ComplexNumber.add(s, cn)
	return s
예제 #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 product(ls, start, end):
	"""Multiplies all the numbers in the given range of the list

	Input data:
	ls -- The list
	start -- The starting point of the range
	end -- The end point of the range 
	Output data:
	The product of the numbers in the given range
	"""
	prod = ComplexNumber.create(1)
	for i in ls[start:end + 1]:
		prod = ComplexNumber.multiply(prod, i)
	return prod
예제 #13
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
예제 #14
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)
예제 #16
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
예제 #17
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
예제 #18
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
예제 #19
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
예제 #20
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
 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))
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 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))
예제 #26
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
예제 #27
0
def list_modulo(ls, op, comp):
	"""Lists all the elements in the list which fit in the given condition

	Input data:
	ls -- The list
	op -- function object to be used for the condition
	comp -- integer to use for the condition
	Output data:
	The list of all the numbers that fit in the condition
	"""
	return [n for n in ls if op(float(ComplexNumber.modulo(n)), comp)]
예제 #28
0
def lists(ls, args, **kwargs):
    Validators.lists(ls, args)
    if len(args) == 0:
        show = Commands.lists(ls)
    if len(args) == 4:
        show = Commands.list_real_range(ls, int(args[1]), int(args[3]))
    if len(args) == 3:
        ops = {"=": float.__eq__, "<": float.__lt__, ">": float.__gt__}
        show = Commands.list_modulo(ls, ops[args[1]], float(args[2]))

    show = ", ".join([ComplexNumber.format(i) for i in show])
    print(show if show != "" else "No results")
    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)
예제 #30
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