from manimlib.imports import *
class Subspace_Example(Scene):
    def construct(self):
        sq = Square(side = 2, color=BLACK).shift(2*LEFT)
        sq.set_fill(color=RED,opacity=350)
        line1=Line(color=BLACK).shift(2*LEFT)
        line1.rotate(np.pi/2)
        line2=Line(color=BLACK).shift(2.5*LEFT+0.5*UP)
        line2.scale(0.5)
        line3=Line(color=BLACK).shift(+1.5*LEFT)
        line3.scale(0.5)
        a1=TextMobject(r"$a_1$",color=BLACK).scale(0.5).shift(3.4*LEFT+0.7*UP)
        a2=TextMobject(r"$a_2$",color=BLACK).scale(0.5).shift(3.4*LEFT+0.3*DOWN)
        a3=TextMobject(r"$a_3$",color=BLACK).scale(0.5).shift(0.7*LEFT+0.5*DOWN)
        a4=TextMobject(r"$a_4$",color=BLACK).scale(0.5).shift(0.7*LEFT+0.5*UP)
        big_rect=Rectangle().scale(3).shift(0.5*DOWN)
        big_rect.set_fill(color=GREY,opacity=350)
        vec_space=TextMobject("$Vector Space$").scale(0.77).shift(4.5*RIGHT+3.5*UP)
        sub=TextMobject(r"$Subspace$",color=BLACK).scale(0.77).shift(3.8*RIGHT+2*UP)
        self.play(ShowCreation(vec_space))
        self.play(ShowCreation(big_rect),ShowCreation(sub))
        self.play(ShowCreation(sq),ShowCreation(line1),ShowCreation(line2),ShowCreation(line3),ShowCreation(a1),ShowCreation(a2),ShowCreation(a3),ShowCreation(a4))
        rec = Rectangle(color=BLACK).scale(0.5).shift(1*RIGHT)
        rec.rotate(np.pi/2)
        rec.set_fill(color=BLUE,opacity=350)
        line4=Line(color=BLACK).shift(1*RIGHT).rotate(np.pi/2)
        line5=Line(color=BLACK).scale(0.25).shift(0.75*RIGHT)
        line6=Line(color=BLACK).scale(0.25).shift(0.5*DOWN+1.25*RIGHT)
        b1=TextMobject(r"$b_1$",color=BLACK).scale(0.5).shift(0.3*RIGHT+0.5*UP)
        b2=TextMobject(r"$b_2$",color=BLACK).scale(0.5).shift(0.3*RIGHT+0.5*DOWN)
        b3=TextMobject(r"$b_3$",color=BLACK).scale(0.5).shift(1.67*RIGHT+0.8*DOWN)
        b4=TextMobject(r"$b_4$",color=BLACK).scale(0.5).shift(1.67*RIGHT+0.5*UP)
        self.play(ShowCreation(rec),ShowCreation(line4),ShowCreation(line5),ShowCreation(line6),ShowCreation(b1),ShowCreation(b2),ShowCreation(b3),ShowCreation(b4))
        self.wait(1)
        text1=TextMobject(r"$a_1 + a_2 = a_3 + a_4$",color=BLACK).scale(0.5).shift(2*LEFT+1.5*DOWN)
        text2=TextMobject(r"$b_1 + b_2 = b_3 + b_4$",color=BLACK).scale(0.5).shift(1.5*RIGHT+1.5*DOWN)
        self.play(ShowCreation(text1),ShowCreation(text2))
        self.wait(3)
        self.play(FadeOut(text1),FadeOut(text2))
        rec.shift(3*LEFT+2.01*DOWN)
        line4.shift(3*LEFT+2*DOWN)
        line5.shift(3*LEFT+2*DOWN)
        line6.shift(3*LEFT+2*DOWN)
        b1.shift(3.1*LEFT+2.1*DOWN)
        b2.shift(3.1*LEFT+2.1*DOWN)
        b3.shift(2.9*LEFT+2*DOWN)
        b4.shift(2.9*LEFT+2.3*DOWN)
        self.play(ShowCreation(rec),ShowCreation(line4),ShowCreation(line5),ShowCreation(line6),ShowCreation(b1),ShowCreation(b2),ShowCreation(b3),ShowCreation(b4))
        self.wait(2)
        
        text3=TextMobject(r"$(a_1 + a_2) + (b_1 + b_2) = (a_3 + a_4) + (b_3 + b_4)$",color=BLACK).scale(0.5).shift(2.5*RIGHT+0.5*DOWN)
        text3=TextMobject(r"$(a_1 + a_2) + (b_1 + b_2) = (a_3 + a_4) + (b_3 + b_4)$",color=BLACK).scale(0.5).shift(2.5*RIGHT+0.5*DOWN)
        text4=TextMobject("Vector Addition",color=BLACK).scale(0.8).shift(2.5*RIGHT+0.5*UP)
        self.play(ShowCreation(text3),ShowCreation(text4))
        self.wait(3)
        rec.set_fill(color=GREY,opacity=350)
        self.play(FadeOut(text3),FadeOut(text4),FadeOut(line4),FadeOut(line5),FadeOut(line6),FadeOut(rec),FadeOut(b4),FadeOut(b3),FadeOut(b2),FadeOut(b1))
        sq1=Square(color=BLACK).scale(0.5).shift(1.5*LEFT+1.5*UP)
        sq1.set_fill(color=RED,opacity=350)
        sq2=Square(color=BLACK).scale(0.5).shift(1.5*LEFT+1.5*DOWN)
        sq2.set_fill(color=RED,opacity=350)
        rec1=Rectangle(height=0.5,width=1,color=BLACK).shift(2.5*LEFT+1.2*UP)
        rec1.set_fill(color=RED,opacity=350)
        rec2=Rectangle(height=1.5,width=1,color=BLACK)
        rec2.set_fill(color=RED,opacity=350).shift(2.5*LEFT+1.5*DOWN)
        self.play(ShowCreation(sq1),ShowCreation(sq2),ShowCreation(rec1),ShowCreation(rec2))
        a=TextMobject(r"$a_1$",color=BLACK).scale(0.5).shift(3.4*LEFT+1.2*UP)
        b=TextMobject(r"$a_2$",color=BLACK).scale(0.5).shift(3.4*LEFT+1.4*DOWN)
        c=TextMobject(r"$a_3$",color=BLACK).scale(0.5).shift(0.7*LEFT+1.4*DOWN)
        d=TextMobject(r"$a_4$",color=BLACK).scale(0.5).shift(0.7*LEFT+1.4*UP)
        self.play(ShowCreation(a),ShowCreation(b),ShowCreation(c),ShowCreation(d))
        self.wait(2.3)
        text4=TextMobject("Scalar Multiplication",color=BLACK).scale(0.8).shift(2.5*RIGHT+0.5*UP)
        text5=TextMobject(r"$\implies 2(a_1 + a_2) = 2(a_3 + a_4)$",color=BLACK).scale(0.5).shift(2*RIGHT+0.5*DOWN)
        text6=TextMobject(r"$(a_1 + a_1) + (a_2 + a_2) = (a_3 + a_3) + (a_4 +a_4)$",color=BLACK).scale(0.5).shift(2.5*RIGHT)
        self.play(ShowCreation(text4),ShowCreation(text5),ShowCreation(text6))
        self.wait(3)

        



