def productoVectoresComplejos(vec1, vec2):
    '''retorna un numero complejo siendo el producto entre dos arreglso complejos'''
    res = [0, 0]
    if (len(vec1) == len(vec2)):
        for i in range(len(vec1)):
            res = co.suma_i(res, co.product_i(vec1[i], vec2[i]))
    else:
        print("Longitudes de vecetores no son validas")
    return (res)
def sumaMatricesComplejas(matrizA, matrizB):
    """metodo q retorna la suma entre dos matrices"""
    matRes = []
    for i in range(len(matrizA)):
        fila = []
        for j in range(len(matrizA[i])):
            c = co.suma_i(matrizA[i][j], matrizB[i][j])
            fila.append(c)
        matRes.append(fila)
    return (matRes)
def valorEsperado(matriz,ket):
    valor = [0,0]
    ketModule = []
    for state in ket:
        ketModule.append([[pow(co.module_i(state),2),0]])
    
    produMatriz = co.multiplicarMatrices(matriz,ketModule)
    
    for i in produMatriz:
        valor = co.suma_i(valor,i[0])
    return (valor[0])
def sumaVectoresComplejos(a, b):
    """Metodo q suma dos vectores complejos; a y b de tipo array"""
    if (len(a) == len(b)):
        vecRes = []
        for i in range(len(a)):
            res = co.suma_i(a[i], b[i])
            vecRes.append(res)
        return (vecRes)

    else:
        print("Los vectores deben tener la misma longitud")
def multiplicarMatrices(matrizA, matrizB):
    '''Retorna la multiplicación entre matrices'''
    if len(matrizA[0]) == len(matrizB):
        ret = generateEmptyMatrix(len(matrizA), len(matrizB[0]))
        #ret = [0,0]
        for i in range(len(matrizA)):
            for j in range(len(matrizB[0])):
                ret[i][j] = [0, 0]
                for k in range(len(matrizA[0])):
                    ret[i][j] = co.suma_i(
                        ret[i][j], co.product_i(matrizA[i][k], matrizB[k][j]))
        if len(ret) == 1:
            return (ret[i][j])
        return (ret)
    else:
        return (0)