#!/usr/bin/python
# -*- coding: utf-8 -*-

""" Bosquejo de un programa para manipular matrices
      Autor: Antonio Carrillo Ledesma
"""


class Matriz:
    def __init__(self, coef):
        """Cosntructor de la clase"""
        self.Ren = len(coef)
        self.Col = len(coef[0])
        self.M = []
        # Crea la matriz
        for i in range(self.Ren):
            self.M.append([0] * self.Col)
        # Llena la Matriz
        for i in range(self.Ren):
            for j in range(self.Col):
                self.M[i][j] = coef[i][j]

    def __str__(self):
        """Visualiza la matriz"""
        r = ""
        for i in range(self.Ren):
            for j in range(self.Col):
                r += str(self.M[i][j]) + " "
            r += "\n"
        return r

    def visualiza(self):
        """Visualiza la matriz"""
        print(self)

    def __add__(self, b):
        """Suma"""
        C = []
        # Crea la matriz
        for i in range(self.Ren):
            C.append([0] * self.Col)
        # Suma
        for i in range(self.Ren):
            for j in range(self.Col):
                C[i][j] = self.M[i][j] + b.M[i][j]
        return Matriz(C)

    def suma(self, a, b):
        """Suma"""
        # Suma
        for i in range(self.Ren):
            for j in range(self.Col):
                self.M[i][j] = a.M[i][j] + b.M[i][j]


"""
Prueba de las clases
"""
if __name__ == "__main__":
    a = Matriz([[1, 2, 3, 5], [4, 5, 6, 7]])
    b = Matriz([[7, 7, 4, 2], [1, 5, 3, 1]])
    c = Matriz([[0, 0, 0, 0], [0, 0, 0, 0]])
    a.visualiza()
    b.visualiza()
    c = a + b
    c.visualiza()
    c.suma(a, b)
    c.visualiza()

    c.visualiza()
    a = Matriz([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
    b = Matriz([[7.0, 7.0, 4.0], [1.0, 5.0, 3.0]])
    c = Matriz([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]])
    a.visualiza()
    b.visualiza()
    c = a + b
    c.visualiza()
    c.suma(a, b)
    c.visualiza()

    a = Matriz([[1.0 + 2.9j, 2 + 0j], [4.0 + 2.0j, 5 + 0.0j]])
    b = Matriz([[7.0 + 1.0j, 7.0 + 3.4j], [1.0 + 7.0j, 5.0 + 0.0j]])
    c = Matriz([[0 + 0j, 0 + 0j], [0 + 0j, 0 + 0j]])
    a.visualiza()
    b.visualiza()
    c = a + b
    c.visualiza()
    c.suma(a, b)
    c.visualiza()
