from big_ol_pile_of_manim_imports import *
from old_projects.eola.chapter9 import Jennifer, You

class Chapter0(LinearTransformationScene):
    CONFIG = {
        "include_background_plane" : False,
        "t_matrix" : [[3, 1], [2, -1]]
    }
    def construct(self):
        self.setup()
        self.plane.fade()
        for mob in self.get_mobjects():
            mob.set_stroke(width = 6)
        self.apply_transposed_matrix(self.t_matrix, run_time = 0)

class Chapter1(Scene):
    def construct(self):
        arrow = Vector(2*UP+RIGHT)
        vs = TextMobject("vs.")
        array = Matrix([1, 2])
        array.set_color(TEAL)
        everyone = VMobject(arrow, vs, array)
        everyone.arrange(RIGHT, buff = 0.5)
        everyone.set_height(4)
        self.add(everyone)

class Chapter2(LinearTransformationScene):
    def construct(self):
        self.lock_in_faded_grid()
        vectors = VMobject(*[
            Vector([x, y])
            for x in np.arange(-int(FRAME_X_RADIUS)+0.5, int(FRAME_X_RADIUS)+0.5)
            for y in np.arange(-int(FRAME_Y_RADIUS)+0.5, int(FRAME_Y_RADIUS)+0.5)
        ])
        vectors.set_submobject_colors_by_gradient(PINK, BLUE_E)
        words = TextMobject("Span")
        words.scale(3)
        words.to_edge(UP)
        words.add_background_rectangle()
        self.add(vectors, words)


class Chapter3(Chapter0):
    CONFIG = {
        "t_matrix" : [[3, 0], [2, -1]]
    }

class Chapter4p1(Chapter0):
    CONFIG = {
        "t_matrix" : [[1, 0], [1, 1]]
    }

class Chapter4p2(Chapter0):
    CONFIG = {
        "t_matrix" : [[1, 2], [-1, 1]]
    }

class Chapter5(LinearTransformationScene):
    def construct(self):
        self.plane.fade()
        self.add_unit_square()        
        self.plane.set_stroke(width = 6)
        VMobject(self.i_hat, self.j_hat).set_stroke(width = 10)
        self.square.set_fill(YELLOW, opacity = 0.7)
        self.square.set_stroke(width = 0)
        self.apply_transposed_matrix(self.t_matrix, run_time = 0)

class Chapter9(Scene):
    def construct(self):
        you = You()
        jenny = Jennifer()
        you.change_mode("erm")
        jenny.change_mode("speaking")
        you.shift(LEFT)
        jenny.shift(2*RIGHT)

        vector = Vector([3, 2])
        vector.center().shift(2*DOWN)
        vector.set_stroke(width = 8)
        vector.tip.scale_in_place(2)

        you.coords = Matrix([3, 2])
        jenny.coords = Matrix(["5/3", "1/3"])
        for pi in jenny, you:
            pi.bubble = pi.get_bubble(SpeechBubble, width = 3, height = 3)
            if pi is you:
                pi.bubble.shift(MED_SMALL_BUFF*RIGHT)
            else:
                pi.coords.scale(0.8)
                pi.bubble.shift(MED_SMALL_BUFF*LEFT)
            pi.bubble.add_content(pi.coords)
            pi.add(pi.bubble, pi.coords)
            pi.look_at(vector)

        self.add(you, jenny, vector)

class Chapter10(LinearTransformationScene):
    CONFIG = {
        "foreground_plane_kwargs" : {
            "x_radius" : FRAME_WIDTH,
            "y_radius" : FRAME_HEIGHT,
            "secondary_line_ratio" : 1

        },
        "include_background_plane" : False,
    }

    def construct(self):
        v_tex = "\\vec{\\textbf{v}}"
        eq = TexMobject("A", v_tex, "=", "\\lambda", v_tex)
        eq.set_color_by_tex(v_tex, YELLOW)
        eq.set_color_by_tex("\\lambda", MAROON_B)
        eq.scale(3)
        eq.add_background_rectangle()
        eq.shift(2*DOWN)        

        title = TextMobject(
            "Eigen", "vectors \\\\",
            "Eigen", "values"
        , arg_separator = "")
        title.scale(2.5)
        title.to_edge(UP)
        # title.set_color_by_tex("Eigen", MAROON_B)
        title[0].set_color(YELLOW)
        title[2].set_color(MAROON_B)
        title.add_background_rectangle()


        self.add_vector([-1, 1], color = YELLOW, animate = False)
        self.apply_transposed_matrix([[3, 0], [1, 2]])        
        self.plane.fade()
        self.remove(self.j_hat)
        self.add(eq, title)



















