Example #1
0
    def test_derivatives_in_spherical_coordinates(self):

        X = (r, th, phi) = symbols('r theta phi')
        s3d = Ga('e_r e_theta e_phi', g=[1, r ** 2, r ** 2 * sin(th) ** 2], coords=X, norm=True)
        (er, eth, ephi) = s3d.mv()
        grad = s3d.grad

        f = s3d.mv('f', 'scalar', f=True)
        A = s3d.mv('A', 'vector', f=True)
        B = s3d.mv('B', 'bivector', f=True)

        assert str(f) == 'f'
        assert str(A) == 'A__r*e_r + A__theta*e_theta + A__phi*e_phi'
        assert str(B) == 'B__rtheta*e_r^e_theta + B__rphi*e_r^e_phi + B__thetaphi*e_theta^e_phi'

        assert str(grad*f) == 'D{r}f*e_r + D{theta}f*e_theta/r + D{phi}f*e_phi/(r*sin(theta))'
        assert str((grad|A).simplify()) == '(r*D{r}A__r + 2*A__r + A__theta/tan(theta) + D{theta}A__theta + D{phi}A__phi/sin(theta))/r'
        assert str(-s3d.I()*(grad^A)) == '(A__phi/tan(theta) + D{theta}A__phi - D{phi}A__theta/sin(theta))*e_r/r + (-r*D{r}A__phi - A__phi + D{phi}A__r/sin(theta))*e_theta/r + (r*D{r}A__theta + A__theta - D{theta}A__r)*e_phi/r'

        assert latex(grad) == r'\boldsymbol{e}_{r} \frac{\partial}{\partial r} + \boldsymbol{e}_{\theta } \frac{1}{r} \frac{\partial}{\partial \theta } + \boldsymbol{e}_{\phi } \frac{1}{r \sin{\left (\theta  \right )}} \frac{\partial}{\partial \phi }'
        assert latex(B|(eth^ephi)) == r'- B^{\theta \phi } {\left (r,\theta ,\phi  \right )}'

        assert str(grad^B) == '(r*D{r}B__thetaphi - B__rphi/tan(theta) + 2*B__thetaphi - D{theta}B__rphi + D{phi}B__rtheta/sin(theta))*e_r^e_theta^e_phi/r'

        return
Example #2
0
    def test_derivatives_in_rectangular_coordinates(self):

        X = (x, y, z) = symbols('x y z')
        o3d = Ga('e_x e_y e_z', g=[1, 1, 1], coords=X)
        (ex, ey, ez) = o3d.mv()
        grad = o3d.grad

        f = o3d.mv('f', 'scalar', f=True)
        A = o3d.mv('A', 'vector', f=True)
        B = o3d.mv('B', 'bivector', f=True)
        C = o3d.mv('C', 'mv', f=True)

        assert str(f) == 'f'
        assert str(A) == 'A__x*e_x + A__y*e_y + A__z*e_z'
        assert str(B) == 'B__xy*e_x^e_y + B__xz*e_x^e_z + B__yz*e_y^e_z'
        assert str(C) == 'C + C__x*e_x + C__y*e_y + C__z*e_z + C__xy*e_x^e_y + C__xz*e_x^e_z + C__yz*e_y^e_z + C__xyz*e_x^e_y^e_z'

        assert str(grad*f) == 'D{x}f*e_x + D{y}f*e_y + D{z}f*e_z'
        assert str(grad|A) == 'D{x}A__x + D{y}A__y + D{z}A__z'
        assert str(grad*A) == 'D{x}A__x + D{y}A__y + D{z}A__z + (-D{y}A__x + D{x}A__y)*e_x^e_y + (-D{z}A__x + D{x}A__z)*e_x^e_z + (-D{z}A__y + D{y}A__z)*e_y^e_z'

        assert str(-o3d.I()*(grad^A)) == '(-D{z}A__y + D{y}A__z)*e_x + (D{z}A__x - D{x}A__z)*e_y + (-D{y}A__x + D{x}A__y)*e_z'
        assert str(grad*B) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z + (D{z}B__xy - D{y}B__xz + D{x}B__yz)*e_x^e_y^e_z'
        assert str(grad^B) == '(D{z}B__xy - D{y}B__xz + D{x}B__yz)*e_x^e_y^e_z'
        assert str(grad|B) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z'

        assert str(grad<A) == 'D{x}A__x + D{y}A__y + D{z}A__z'
        assert str(grad>A) == 'D{x}A__x + D{y}A__y + D{z}A__z'
        assert str(grad<B) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z'
        assert str(grad>B) == '0'
        assert str(grad<C) == 'D{x}C__x + D{y}C__y + D{z}C__z + (-D{y}C__xy - D{z}C__xz)*e_x + (D{x}C__xy - D{z}C__yz)*e_y + (D{x}C__xz + D{y}C__yz)*e_z + D{z}C__xyz*e_x^e_y - D{y}C__xyz*e_x^e_z + D{x}C__xyz*e_y^e_z'
        assert str(grad>C) == 'D{x}C__x + D{y}C__y + D{z}C__z + D{x}C*e_x + D{y}C*e_y + D{z}C*e_z'

        return
Example #3
0
    def test_derivatives_in_rectangular_coordinates(self):

        X = (x, y, z) = symbols('x y z')
        o3d = Ga('e_x e_y e_z', g=[1, 1, 1], coords=X)
        (ex, ey, ez) = o3d.mv()
        grad = o3d.grad

        f = o3d.mv('f', 'scalar', f=True)
        A = o3d.mv('A', 'vector', f=True)
        B = o3d.mv('B', 'bivector', f=True)
        C = o3d.mv('C', 'mv', f=True)

        assert str(f) == 'f'
        assert str(A) == 'A__x*e_x + A__y*e_y + A__z*e_z'
        assert str(B) == 'B__xy*e_x^e_y + B__xz*e_x^e_z + B__yz*e_y^e_z'
        assert str(
            C
        ) == 'C + C__x*e_x + C__y*e_y + C__z*e_z + C__xy*e_x^e_y + C__xz*e_x^e_z + C__yz*e_y^e_z + C__xyz*e_x^e_y^e_z'

        assert str(grad * f) == 'D{x}f*e_x + D{y}f*e_y + D{z}f*e_z'
        assert str(grad | A) == 'D{x}A__x + D{y}A__y + D{z}A__z'
        assert str(
            grad * A
        ) == 'D{x}A__x + D{y}A__y + D{z}A__z + (-D{y}A__x + D{x}A__y)*e_x^e_y + (-D{z}A__x + D{x}A__z)*e_x^e_z + (-D{z}A__y + D{y}A__z)*e_y^e_z'

        assert str(
            -o3d.I() * (grad ^ A)
        ) == '(-D{z}A__y + D{y}A__z)*e_x + (D{z}A__x - D{x}A__z)*e_y + (-D{y}A__x + D{x}A__y)*e_z'
        assert str(
            grad * B
        ) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z + (D{z}B__xy - D{y}B__xz + D{x}B__yz)*e_x^e_y^e_z'
        assert str(grad
                   ^ B) == '(D{z}B__xy - D{y}B__xz + D{x}B__yz)*e_x^e_y^e_z'
        assert str(
            grad | B
        ) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z'

        assert str(grad < A) == 'D{x}A__x + D{y}A__y + D{z}A__z'
        assert str(grad > A) == 'D{x}A__x + D{y}A__y + D{z}A__z'
        assert str(
            grad < B
        ) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z'
        assert str(grad > B) == ZERO_STR
        assert str(
            grad < C
        ) == 'D{x}C__x + D{y}C__y + D{z}C__z + (-D{y}C__xy - D{z}C__xz)*e_x + (D{x}C__xy - D{z}C__yz)*e_y + (D{x}C__xz + D{y}C__yz)*e_z + D{z}C__xyz*e_x^e_y - D{y}C__xyz*e_x^e_z + D{x}C__xyz*e_y^e_z'
        assert str(
            grad > C
        ) == 'D{x}C__x + D{y}C__y + D{z}C__z + D{x}C*e_x + D{y}C*e_y + D{z}C*e_z'
Example #4
0
    def test_extracting_vectors_from_conformal_2_blade(self):

        g = '0 -1 #,'+ \
            '-1 0 #,'+ \
            '# # #'

        e2b = Ga('P1 P2 a',g=g)

        (P1,P2,a) = e2b.mv()

        B = P1^P2
        Bsq = B*B
        assert str(Bsq) == '1'
        ap = a-(a^B)*B
        assert str(ap) == '-(P2.a)*P1 - (P1.a)*P2'

        Ap = ap+ap*B
        Am = ap-ap*B

        assert str(Ap) == '-2*(P2.a)*P1'
        assert str(Am) == '-2*(P1.a)*P2'

        assert str(Ap*Ap) == '0'
        assert str(Am*Am) == '0'

        aB = a|B
        assert str(aB) == '-(P2.a)*P1 + (P1.a)*P2'

        return
Example #5
0
    def test_properties_of_geometric_objects(self):

        global n, nbar

        g = '# # # 0 0,'+ \
            '# # # 0 0,'+ \
            '# # # 0 0,'+ \
            '0 0 0 0 2,'+ \
            '0 0 0 2 0'

        c3d = Ga('p1 p2 p3 n nbar',g=g)

        (p1,p2,p3,n,nbar) = c3d.mv()

        P1 = F(p1)
        P2 = F(p2)
        P3 = F(p3)

        L = P1^P2^n
        delta = (L|n)|nbar
        assert str(delta) == '2*p1 - 2*p2'

        C = P1^P2^P3
        delta = ((C^n)|n)|nbar
        assert str(delta) == '2*p1^p2 - 2*p1^p3 + 2*p2^p3'
        assert str((p2-p1)^(p3-p1)) == 'p1^p2 - p1^p3 + p2^p3'

        return
Example #6
0
    def test_conformal_representations_of_circles_lines_spheres_and_planes(self):
        global n,nbar

        g = '1 0 0 0 0,0 1 0 0 0,0 0 1 0 0,0 0 0 0 2,0 0 0 2 0'

        cnfml3d = Ga('e_1 e_2 e_3 n nbar',g=g)

        (e1,e2,e3,n,nbar) = cnfml3d.mv()

        e = n+nbar

        #conformal representation of points

        A = make_vector(e1,ga=cnfml3d)    # point a = (1,0,0)  A = F(a)
        B = make_vector(e2,ga=cnfml3d)    # point b = (0,1,0)  B = F(b)
        C = make_vector(-e1,ga=cnfml3d)   # point c = (-1,0,0) C = F(c)
        D = make_vector(e3,ga=cnfml3d)    # point d = (0,0,1)  D = F(d)
        X = make_vector('x',3,ga=cnfml3d)

        assert str(A) == 'e_1 + n/2 - nbar/2'
        assert str(B) == 'e_2 + n/2 - nbar/2'
        assert str(C) == '-e_1 + n/2 - nbar/2'
        assert str(D) == 'e_3 + n/2 - nbar/2'
        assert str(X) == 'x1*e_1 + x2*e_2 + x3*e_3 + (x1**2/2 + x2**2/2 + x3**2/2)*n - nbar/2'

        assert str((A^B^C^X)) == '-x3*e_1^e_2^e_3^n + x3*e_1^e_2^e_3^nbar + (x1**2/2 + x2**2/2 + x3**2/2 - 1/2)*e_1^e_2^n^nbar'
        assert str((A^B^n^X)) == '-x3*e_1^e_2^e_3^n + (x1/2 + x2/2 - 1/2)*e_1^e_2^n^nbar + x3*e_1^e_3^n^nbar/2 - x3*e_2^e_3^n^nbar/2'
        assert str((((A^B)^C)^D)^X) == '(-x1**2/2 - x2**2/2 - x3**2/2 + 1/2)*e_1^e_2^e_3^n^nbar'
        assert str((A^B^n^D^X)) == '(-x1/2 - x2/2 - x3/2 + 1/2)*e_1^e_2^e_3^n^nbar'

        L = (A^B^e)^X

        assert str(L) == '-x3*e_1^e_2^e_3^n - x3*e_1^e_2^e_3^nbar + (-x1**2/2 + x1 - x2**2/2 + x2 - x3**2/2 - 1/2)*e_1^e_2^n^nbar + x3*e_1^e_3^n^nbar - x3*e_2^e_3^n^nbar'

        return
Example #7
0
    def test_properties_of_geometric_objects(self):

        global n, nbar

        g = '# # # 0 0,'+ \
            '# # # 0 0,'+ \
            '# # # 0 0,'+ \
            '0 0 0 0 2,'+ \
            '0 0 0 2 0'

        c3d = Ga('p1 p2 p3 n nbar', g=g)

        (p1, p2, p3, n, nbar) = c3d.mv()

        P1 = F(p1)
        P2 = F(p2)
        P3 = F(p3)

        L = P1 ^ P2 ^ n
        delta = (L | n) | nbar
        assert str(delta) == '2*p1 - 2*p2'

        C = P1 ^ P2 ^ P3
        delta = ((C ^ n) | n) | nbar
        assert str(delta) == '2*p1^p2 - 2*p1^p3 + 2*p2^p3'
        assert str((p2 - p1) ^ (p3 - p1)) == 'p1^p2 - p1^p3 + p2^p3'
Example #8
0
    def test_extracting_vectors_from_conformal_2_blade(self):

        g = '0 -1 #,'+ \
            '-1 0 #,'+ \
            '# # #'

        e2b = Ga('P1 P2 a', g=g)

        (P1, P2, a) = e2b.mv()

        B = P1 ^ P2
        Bsq = B * B
        assert str(Bsq) == '1'
        ap = a - (a ^ B) * B
        assert str(ap) == '-(P2.a)*P1 - (P1.a)*P2'

        Ap = ap + ap * B
        Am = ap - ap * B

        assert str(Ap) == '-2*(P2.a)*P1'
        assert str(Am) == '-2*(P1.a)*P2'

        assert str(Ap * Ap) == ZERO_STR
        assert str(Am * Am) == ZERO_STR

        aB = a | B
        assert str(aB) == '-(P2.a)*P1 + (P1.a)*P2'
Example #9
0
def properties_of_geometric_objects():
    Print_Function()
    global n, nbar
    Fmt(1)
    g = '# # # 0 0,'+ \
        '# # # 0 0,'+ \
        '# # # 0 0,'+ \
        '0 0 0 0 2,'+ \
        '0 0 0 2 0'

    c3d = Ga('p1 p2 p3 n \\bar{n}', g=g)
    (p1, p2, p3, n, nbar) = c3d.mv()

    print('g_{ij} =', c3d.g)

    P1 = F(p1)
    P2 = F(p2)
    P3 = F(p3)

    print('\\text{Extracting direction of line from }L = P1\\W P2\\W n')

    L = P1 ^ P2 ^ n
    delta = (L | n) | nbar
    print('(L|n)|\\bar{n} =', delta)

    print('\\text{Extracting plane of circle from }C = P1\\W P2\\W P3')

    C = P1 ^ P2 ^ P3
    delta = ((C ^ n) | n) | nbar
    print('((C^n)|n)|\\bar{n}=', delta)
    print('(p2-p1)^(p3-p1)=', (p2 - p1) ^ (p3 - p1))
    return
Example #10
0
def properties_of_geometric_objects():
    Print_Function()
    global n, nbar

    g = '# # # 0 0,'+ \
        '# # # 0 0,'+ \
        '# # # 0 0,'+ \
        '0 0 0 0 2,'+ \
        '0 0 0 2 0'

    c3d = Ga('p1 p2 p3 n nbar', g=g)

    (p1, p2, p3, n, nbar) = c3d.mv()

    print('g_{ij} =\n', c3d.g)

    P1 = F(p1)
    P2 = F(p2)
    P3 = F(p3)

    print('Extracting direction of line from L = P1^P2^n')

    L = P1 ^ P2 ^ n
    delta = (L | n) | nbar
    print('(L|n)|nbar =', delta)

    print('Extracting plane of circle from C = P1^P2^P3')

    C = P1 ^ P2 ^ P3
    delta = ((C ^ n) | n) | nbar
    print('((C^n)|n)|nbar =', delta)
    print('(p2-p1)^(p3-p1) =', (p2 - p1) ^ (p3 - p1))
Example #11
0
def extracting_vectors_from_conformal_2_blade():
    Print_Function()

    g = '0 -1 #,'+ \
        '-1 0 #,'+ \
        '# # #'

    e2b = Ga('P1 P2 a', g=g)

    (P1, P2, a) = e2b.mv()

    print('g_{ij} =\n', e2b.g)

    B = P1 ^ P2
    Bsq = B * B
    print('B**2 =', Bsq)
    ap = a - (a ^ B) * B
    print("a' = a-(a^B)*B =", ap)

    Ap = ap + ap * B
    Am = ap - ap * B

    print("A+ = a'+a'*B =", Ap)
    print("A- = a'-a'*B =", Am)

    print('(A+)^2 =', Ap * Ap)
    print('(A-)^2 =', Am * Am)

    aB = a | B
    print('a|B =', aB)
    return
Example #12
0
    def test_conformal_representations_of_circles_lines_spheres_and_planes(self):
        global n,nbar

        g = '1 0 0 0 0,0 1 0 0 0,0 0 1 0 0,0 0 0 0 2,0 0 0 2 0'

        cnfml3d = Ga('e_1 e_2 e_3 n nbar',g=g)

        (e1,e2,e3,n,nbar) = cnfml3d.mv()

        e = n+nbar

        #conformal representation of points

        A = make_vector(e1,ga=cnfml3d)    # point a = (1,0,0)  A = F(a)
        B = make_vector(e2,ga=cnfml3d)    # point b = (0,1,0)  B = F(b)
        C = make_vector(-e1,ga=cnfml3d)   # point c = (-1,0,0) C = F(c)
        D = make_vector(e3,ga=cnfml3d)    # point d = (0,0,1)  D = F(d)
        X = make_vector('x',3,ga=cnfml3d)

        assert str(A) == 'e_1 + n/2 - nbar/2'
        assert str(B) == 'e_2 + n/2 - nbar/2'
        assert str(C) == '-e_1 + n/2 - nbar/2'
        assert str(D) == 'e_3 + n/2 - nbar/2'
        assert str(X) == 'x1*e_1 + x2*e_2 + x3*e_3 + (x1**2/2 + x2**2/2 + x3**2/2)*n - nbar/2'

        assert str((A^B^C^X)) == '-x3*e_1^e_2^e_3^n + x3*e_1^e_2^e_3^nbar + (x1**2/2 + x2**2/2 + x3**2/2 - 1/2)*e_1^e_2^n^nbar'
        assert str((A^B^n^X)) == '-x3*e_1^e_2^e_3^n + (x1/2 + x2/2 - 1/2)*e_1^e_2^n^nbar + x3*e_1^e_3^n^nbar/2 - x3*e_2^e_3^n^nbar/2'
        assert str((((A^B)^C)^D)^X) == '(-x1**2/2 - x2**2/2 - x3**2/2 + 1/2)*e_1^e_2^e_3^n^nbar'
        assert str((A^B^n^D^X)) == '(-x1/2 - x2/2 - x3/2 + 1/2)*e_1^e_2^e_3^n^nbar'

        L = (A^B^e)^X

        assert str(L) == '-x3*e_1^e_2^e_3^n - x3*e_1^e_2^e_3^nbar + (-x1**2/2 + x1 - x2**2/2 + x2 - x3**2/2 - 1/2)*e_1^e_2^n^nbar + x3*e_1^e_3^n^nbar - x3*e_2^e_3^n^nbar'

        return
Example #13
0
def basic_multivector_operations_2D():
    Print_Function()
    g2d = Ga('e*x|y')
    (ex, ey) = g2d.mv()

    print('g_{ij} =', g2d.g)

    X = g2d.mv('X', 'vector')
    A = g2d.mv('A', 'spinor')

    print(X.Fmt(1, 'X'))
    print(A.Fmt(1, 'A'))

    print((X | A).Fmt(2, 'X|A'))
    print((X < A).Fmt(2, 'X<A'))
    print((A > X).Fmt(2, 'A>X'))
    return
Example #14
0
    def test_derivatives_in_spherical_coordinates(self):

        X = (r, th, phi) = symbols('r theta phi')
        s3d = Ga('e_r e_theta e_phi',
                 g=[1, r**2, r**2 * sin(th)**2],
                 coords=X,
                 norm=True)
        (er, eth, ephi) = s3d.mv()
        grad = s3d.grad

        f = s3d.mv('f', 'scalar', f=True)
        A = s3d.mv('A', 'vector', f=True)
        B = s3d.mv('B', 'bivector', f=True)

        assert str(f) == 'f'
        assert str(A) == 'A__r*e_r + A__theta*e_theta + A__phi*e_phi'
        assert str(
            B
        ) == 'B__rtheta*e_r^e_theta + B__rphi*e_r^e_phi + B__thetaphi*e_theta^e_phi'

        assert str(
            grad * f
        ) == 'D{r}f*e_r + D{theta}f*e_theta/r + D{phi}f*e_phi/(r*sin(theta))'
        assert str(
            (grad | A).simplify()
        ) == '(r*D{r}A__r + 2*A__r + A__theta/tan(theta) + D{theta}A__theta + D{phi}A__phi/sin(theta))/r'
        assert str(
            -s3d.I() * (grad ^ A)
        ) == '(A__phi/tan(theta) + D{theta}A__phi - D{phi}A__theta/sin(theta))*e_r/r + (-r*D{r}A__phi - A__phi + D{phi}A__r/sin(theta))*e_theta/r + (r*D{r}A__theta + A__theta - D{theta}A__r)*e_phi/r'

        assert latex(
            grad
        ) == r'\boldsymbol{e}_{r} \frac{\partial}{\partial r} + \boldsymbol{e}_{\theta } \frac{1}{r} \frac{\partial}{\partial \theta } + \boldsymbol{e}_{\phi } \frac{1}{r \sin{\left (\theta  \right )}} \frac{\partial}{\partial \phi }'
        assert latex(B | (
            eth
            ^ ephi)) == r'- B^{\theta \phi } {\left (r,\theta ,\phi  \right )}'

        assert str(
            grad ^ B
        ) == '(r*D{r}B__thetaphi - B__rphi/tan(theta) + 2*B__thetaphi - D{theta}B__rphi + D{phi}B__rtheta/sin(theta))*e_r^e_theta^e_phi/r'

        return
Example #15
0
    def test_basic_multivector_operations(self):

        g3d = Ga('e*x|y|z')
        (ex,ey,ez) = g3d.mv()

        A = g3d.mv('A','mv')

        assert str(A) == 'A + A__x*e_x + A__y*e_y + A__z*e_z + A__xy*e_x^e_y + A__xz*e_x^e_z + A__yz*e_y^e_z + A__xyz*e_x^e_y^e_z'
        assert str(A) == 'A + A__x*e_x + A__y*e_y + A__z*e_z + A__xy*e_x^e_y + A__xz*e_x^e_z + A__yz*e_y^e_z + A__xyz*e_x^e_y^e_z'
        assert str(A) == 'A + A__x*e_x + A__y*e_y + A__z*e_z + A__xy*e_x^e_y + A__xz*e_x^e_z + A__yz*e_y^e_z + A__xyz*e_x^e_y^e_z'

        X = g3d.mv('X','vector')
        Y = g3d.mv('Y','vector')

        assert str(X) == 'X__x*e_x + X__y*e_y + X__z*e_z'
        assert str(Y) == 'Y__x*e_x + Y__y*e_y + Y__z*e_z'

        assert str((X*Y)) == '(e_x.e_x)*X__x*Y__x + (e_x.e_y)*X__x*Y__y + (e_x.e_y)*X__y*Y__x + (e_x.e_z)*X__x*Y__z + (e_x.e_z)*X__z*Y__x + (e_y.e_y)*X__y*Y__y + (e_y.e_z)*X__y*Y__z + (e_y.e_z)*X__z*Y__y + (e_z.e_z)*X__z*Y__z + (X__x*Y__y - X__y*Y__x)*e_x^e_y + (X__x*Y__z - X__z*Y__x)*e_x^e_z + (X__y*Y__z - X__z*Y__y)*e_y^e_z'
        assert str((X^Y)) == '(X__x*Y__y - X__y*Y__x)*e_x^e_y + (X__x*Y__z - X__z*Y__x)*e_x^e_z + (X__y*Y__z - X__z*Y__y)*e_y^e_z'
        assert str((X|Y)) == '(e_x.e_x)*X__x*Y__x + (e_x.e_y)*X__x*Y__y + (e_x.e_y)*X__y*Y__x + (e_x.e_z)*X__x*Y__z + (e_x.e_z)*X__z*Y__x + (e_y.e_y)*X__y*Y__y + (e_y.e_z)*X__y*Y__z + (e_y.e_z)*X__z*Y__y + (e_z.e_z)*X__z*Y__z'


        g2d = Ga('e*x|y')
        (ex,ey) = g2d.mv()

        X = g2d.mv('X','vector')
        A = g2d.mv('A','spinor')

        assert str(X) == 'X__x*e_x + X__y*e_y'
        assert str(A) == 'A + A__xy*e_x^e_y'

        assert str((X|A)) == '-A__xy*((e_x.e_y)*X__x + (e_y.e_y)*X__y)*e_x + A__xy*((e_x.e_x)*X__x + (e_x.e_y)*X__y)*e_y'
        assert str((X<A)) == '-A__xy*((e_x.e_y)*X__x + (e_y.e_y)*X__y)*e_x + A__xy*((e_x.e_x)*X__x + (e_x.e_y)*X__y)*e_y'
        assert str((A>X)) == 'A__xy*((e_x.e_y)*X__x + (e_y.e_y)*X__y)*e_x - A__xy*((e_x.e_x)*X__x + (e_x.e_y)*X__y)*e_y'


        o2d = Ga('e*x|y', g=[1, 1])
        (ex, ey) = o2d.mv()

        X = o2d.mv('X', 'vector')
        A = o2d.mv('A', 'spinor')

        assert str(X) == 'X__x*e_x + X__y*e_y'
        assert str(A) == 'A + A__xy*e_x^e_y'

        assert str((X*A)) == '(A*X__x - A__xy*X__y)*e_x + (A*X__y + A__xy*X__x)*e_y'
        assert str((X|A)) == '-A__xy*X__y*e_x + A__xy*X__x*e_y'
        assert str((X<A)) == '-A__xy*X__y*e_x + A__xy*X__x*e_y'
        assert str((X>A)) == 'A*X__x*e_x + A*X__y*e_y'

        assert str((A*X)) == '(A*X__x + A__xy*X__y)*e_x + (A*X__y - A__xy*X__x)*e_y'
        assert str((A|X)) == 'A__xy*X__y*e_x - A__xy*X__x*e_y'
        assert str((A<X)) == 'A*X__x*e_x + A*X__y*e_y'
        assert str((A>X)) == 'A__xy*X__y*e_x - A__xy*X__x*e_y'

        return
Example #16
0
    def test_basic_multivector_operations(self):

        g3d = Ga('e*x|y|z')
        (ex,ey,ez) = g3d.mv()

        A = g3d.mv('A','mv')

        assert str(A) == 'A + A__x*e_x + A__y*e_y + A__z*e_z + A__xy*e_x^e_y + A__xz*e_x^e_z + A__yz*e_y^e_z + A__xyz*e_x^e_y^e_z'
        assert str(A) == 'A + A__x*e_x + A__y*e_y + A__z*e_z + A__xy*e_x^e_y + A__xz*e_x^e_z + A__yz*e_y^e_z + A__xyz*e_x^e_y^e_z'
        assert str(A) == 'A + A__x*e_x + A__y*e_y + A__z*e_z + A__xy*e_x^e_y + A__xz*e_x^e_z + A__yz*e_y^e_z + A__xyz*e_x^e_y^e_z'

        X = g3d.mv('X','vector')
        Y = g3d.mv('Y','vector')

        assert str(X) == 'X__x*e_x + X__y*e_y + X__z*e_z'
        assert str(Y) == 'Y__x*e_x + Y__y*e_y + Y__z*e_z'

        assert str((X*Y)) == '(e_x.e_x)*X__x*Y__x + (e_x.e_y)*X__x*Y__y + (e_x.e_y)*X__y*Y__x + (e_x.e_z)*X__x*Y__z + (e_x.e_z)*X__z*Y__x + (e_y.e_y)*X__y*Y__y + (e_y.e_z)*X__y*Y__z + (e_y.e_z)*X__z*Y__y + (e_z.e_z)*X__z*Y__z + (X__x*Y__y - X__y*Y__x)*e_x^e_y + (X__x*Y__z - X__z*Y__x)*e_x^e_z + (X__y*Y__z - X__z*Y__y)*e_y^e_z'
        assert str((X^Y)) == '(X__x*Y__y - X__y*Y__x)*e_x^e_y + (X__x*Y__z - X__z*Y__x)*e_x^e_z + (X__y*Y__z - X__z*Y__y)*e_y^e_z'
        assert str((X|Y)) == '(e_x.e_x)*X__x*Y__x + (e_x.e_y)*X__x*Y__y + (e_x.e_y)*X__y*Y__x + (e_x.e_z)*X__x*Y__z + (e_x.e_z)*X__z*Y__x + (e_y.e_y)*X__y*Y__y + (e_y.e_z)*X__y*Y__z + (e_y.e_z)*X__z*Y__y + (e_z.e_z)*X__z*Y__z'


        g2d = Ga('e*x|y')
        (ex,ey) = g2d.mv()

        X = g2d.mv('X','vector')
        A = g2d.mv('A','spinor')

        assert str(X) == 'X__x*e_x + X__y*e_y'
        assert str(A) == 'A + A__xy*e_x^e_y'

        assert str((X|A)) == '-A__xy*((e_x.e_y)*X__x + (e_y.e_y)*X__y)*e_x + A__xy*((e_x.e_x)*X__x + (e_x.e_y)*X__y)*e_y'
        assert str((X<A)) == '-A__xy*((e_x.e_y)*X__x + (e_y.e_y)*X__y)*e_x + A__xy*((e_x.e_x)*X__x + (e_x.e_y)*X__y)*e_y'
        assert str((A>X)) == 'A__xy*((e_x.e_y)*X__x + (e_y.e_y)*X__y)*e_x - A__xy*((e_x.e_x)*X__x + (e_x.e_y)*X__y)*e_y'


        o2d = Ga('e*x|y', g=[1, 1])
        (ex, ey) = o2d.mv()

        X = o2d.mv('X', 'vector')
        A = o2d.mv('A', 'spinor')

        assert str(X) == 'X__x*e_x + X__y*e_y'
        assert str(A) == 'A + A__xy*e_x^e_y'

        assert str((X*A)) == '(A*X__x - A__xy*X__y)*e_x + (A*X__y + A__xy*X__x)*e_y'
        assert str((X|A)) == '-A__xy*X__y*e_x + A__xy*X__x*e_y'
        assert str((X<A)) == '-A__xy*X__y*e_x + A__xy*X__x*e_y'
        assert str((X>A)) == 'A*X__x*e_x + A*X__y*e_y'

        assert str((A*X)) == '(A*X__x + A__xy*X__y)*e_x + (A*X__y - A__xy*X__x)*e_y'
        assert str((A|X)) == 'A__xy*X__y*e_x - A__xy*X__x*e_y'
        assert str((A<X)) == 'A*X__x*e_x + A*X__y*e_y'
        assert str((A>X)) == 'A__xy*X__y*e_x - A__xy*X__x*e_y'

        return
Example #17
0
def derivatives_in_spherical_coordinates():
    Print_Function()

    X = (r, th, phi) = symbols('r theta phi')
    s3d = Ga('e_r e_theta e_phi', g=[1, r ** 2, r ** 2 * sin(th) ** 2], coords=X, norm=True)
    (er, eth, ephi) = s3d.mv()
    grad = s3d.grad

    f = s3d.mv('f', 'scalar', f=True)
    A = s3d.mv('A', 'vector', f=True)
    B = s3d.mv('B', 'bivector', f=True)

    print('f =', f)
    print('A =', A)
    print('B =', B)

    print('grad*f =', grad * f)
    print('grad|A =', grad | A)
    print('-I*(grad^A) =', -s3d.E() * (grad ^ A))
    print('grad^B =', grad ^ B)
    return
Example #18
0
def rounding_numerical_components():
    Print_Function()
    o3d = Ga('e_x e_y e_z', g=[1, 1, 1])
    (ex, ey, ez) = o3d.mv()

    X = 1.2 * ex + 2.34 * ey + 0.555 * ez
    Y = 0.333 * ex + 4 * ey + 5.3 * ez

    print('X =', X)
    print('Nga(X,2) =', Nga(X, 2))
    print('X*Y =', X * Y)
    print('Nga(X*Y,2) =', Nga(X * Y, 2))
    return
Example #19
0
def basic_multivector_operations_2D_orthogonal():
    Print_Function()
    o2d = Ga('e*x|y', g=[1, 1])
    (ex, ey) = o2d.mv()
    print('g_{ii} =', o2d.g)

    X = o2d.mv('X', 'vector')
    A = o2d.mv('A', 'spinor')

    print(X.Fmt(1, 'X'))
    print(A.Fmt(1, 'A'))

    print((X * A).Fmt(2, 'X*A'))
    print((X | A).Fmt(2, 'X|A'))
    print((X < A).Fmt(2, 'X<A'))
    print((X > A).Fmt(2, 'X>A'))

    print((A * X).Fmt(2, 'A*X'))
    print((A | X).Fmt(2, 'A|X'))
    print((A < X).Fmt(2, 'A<X'))
    print((A > X).Fmt(2, 'A>X'))
    return
Example #20
0
    def test_rounding_numerical_components(self):

        o3d = Ga('e_x e_y e_z', g=[1, 1, 1])
        (ex, ey, ez) = o3d.mv()

        X = 1.2*ex+2.34*ey+0.555*ez
        Y = 0.333*ex+4*ey+5.3*ez

        assert str(X) == '1.2*e_x + 2.34*e_y + 0.555*e_z'
        assert str(Nga(X,2)) == '1.2*e_x + 2.3*e_y + 0.55*e_z'
        assert str(X*Y) == '12.7011000000000 + 4.02078*e_x^e_y + 6.175185*e_x^e_z + 10.182*e_y^e_z'
        assert str(Nga(X*Y,2)) == '13. + 4.0*e_x^e_y + 6.2*e_x^e_z + 10.0*e_y^e_z'

        return
Example #21
0
    def test_lt_function(self):
        """ Test construction from a function """
        base = Ga('a b', g=[1, 1], coords=symbols('x, y', real=True))
        a, b = base.mv()

        def not_linear(x):
            return x * x
        with pytest.raises(ValueError, match='linear'):
            base.lt(not_linear)

        def not_vector(x):
            return x + S.One
        with pytest.raises(ValueError, match='vector'):
            base.lt(not_vector)

        def ok(x):
            return (x | b) * a + 2*x
        f = base.lt(ok)
        x = base.mv('x', 'vector')
        y = base.mv('y', 'vector')
        assert f(x) == ok(x)
        assert f(x^y) == ok(x)^ok(y)
        assert f(1 + 2*(x^y)) == 1 + 2*(ok(x)^ok(y))
Example #22
0
    def test_rounding_numerical_components(self):

        o3d = Ga('e_x e_y e_z', g=[1, 1, 1])
        (ex, ey, ez) = o3d.mv()

        X = 1.2*ex+2.34*ey+0.555*ez
        Y = 0.333*ex+4*ey+5.3*ez

        assert str(X) == '1.2*e_x + 2.34*e_y + 0.555*e_z'
        assert str(Nga(X,2)) == '1.2*e_x + 2.3*e_y + 0.55*e_z'
        assert str(X*Y) == '12.7011000000000 + 4.02078*e_x^e_y + 6.175185*e_x^e_z + 10.182*e_y^e_z'
        assert str(Nga(X*Y,2)) == '13. + 4.0*e_x^e_y + 6.2*e_x^e_z + 10.0*e_y^e_z'

        return
Example #23
0
def conformal_representations_of_circles_lines_spheres_and_planes():
    global n, nbar
    Print_Function()

    g = '1 0 0 0 0,0 1 0 0 0,0 0 1 0 0,0 0 0 0 2,0 0 0 2 0'

    cnfml3d = Ga('e_1 e_2 e_3 n nbar', g=g)

    (e1, e2, e3, n, nbar) = cnfml3d.mv()

    print('g_{ij} =\n', cnfml3d.g)

    e = n + nbar
    #conformal representation of points

    A = make_vector(e1, ga=cnfml3d)  # point a = (1,0,0)  A = F(a)
    B = make_vector(e2, ga=cnfml3d)  # point b = (0,1,0)  B = F(b)
    C = make_vector(-e1, ga=cnfml3d)  # point c = (-1,0,0) C = F(c)
    D = make_vector(e3, ga=cnfml3d)  # point d = (0,0,1)  D = F(d)
    X = make_vector('x', 3, ga=cnfml3d)

    print('F(a) =', A)
    print('F(b) =', B)
    print('F(c) =', C)
    print('F(d) =', D)
    print('F(x) =', X)

    print('a = e1, b = e2, c = -e1, and d = e3')
    print('A = F(a) = 1/2*(a*a*n+2*a-nbar), etc.')
    print('Circle through a, b, and c')
    print('Circle: A^B^C^X = 0 =', (A ^ B ^ C ^ X))
    print('Line through a and b')
    print('Line  : A^B^n^X = 0 =', (A ^ B ^ n ^ X))
    print('Sphere through a, b, c, and d')
    print('Sphere: A^B^C^D^X = 0 =', (((A ^ B) ^ C) ^ D) ^ X)
    print('Plane through a, b, and d')
    print('Plane : A^B^n^D^X = 0 =', (A ^ B ^ n ^ D ^ X))

    L = (A ^ B ^ e) ^ X

    print(L.Fmt(3, 'Hyperbolic Circle: (A^B^e)^X = 0 ='))
    return
Example #24
0
def check_generalized_BAC_CAB_formulas():
    Print_Function()

    g5d = Ga('a b c d e')

    (a, b, c, d, e) = g5d.mv()

    print('g_{ij} =\n', g5d.g)

    print('a|(b*c) =', a | (b * c))
    print('a|(b^c) =', a | (b ^ c))
    print('a|(b^c^d) =', a | (b ^ c ^ d))
    print('a|(b^c)+c|(a^b)+b|(c^a) =', (a | ( b ^ c)) + (c | (a ^ b)) + (b | (c ^ a)))
    print('a*(b^c)-b*(a^c)+c*(a^b) =',a*(b^c)-b*(a^c)+c*(a^b))
    print('a*(b^c^d)-b*(a^c^d)+c*(a^b^d)-d*(a^b^c) =',a*(b^c^d)-b*(a^c^d)+c*(a^b^d)-d*(a^b^c))
    print('(a^b)|(c^d) =',(a^b)|(c^d))
    print('((a^b)|c)|d =',((a^b)|c)|d)
    print('(a^b)x(c^d) =',Ga.com(a^b,c^d))
    print('(a|(b^c))|(d^e) =',(a|(b^c))|(d^e))

    return
Example #25
0
def check_generalized_BAC_CAB_formulas():
    Print_Function()
    g4d = Ga('a b c d e')
    (a, b, c, d, e) = g4d.mv()

    print('g_{ij} =', g4d.g)

    print('\\bm{a|(b*c)} =', a | (b * c))
    print('\\bm{a|(b^c)} =', a | (b ^ c))
    print('\\bm{a|(b^c^d)} =', a | (b ^ c ^ d))
    print('\\bm{a|(b^c)+c|(a^b)+b|(c^a)} =',
          (a | (b ^ c)) + (c | (a ^ b)) + (b | (c ^ a)))
    print('\\bm{a*(b^c)-b*(a^c)+c*(a^b)} =',
          a * (b ^ c) - b * (a ^ c) + c * (a ^ b))
    print(
        '\\bm{a*(b^c^d)-b*(a^c^d)+c*(a^b^d)-d*(a^b^c)} =',
        a * (b ^ c ^ d) - b * (a ^ c ^ d) + c * (a ^ b ^ d) - d * (a ^ b ^ c))
    print('\\bm{(a^b)|(c^d)} =', (a ^ b) | (c ^ d))
    print('\\bm{((a^b)|c)|d} =', ((a ^ b) | c) | d)
    print('\\bm{(a^b)\\times (c^d)} =', Ga.com(a ^ b, c ^ d))
    print('\\bm{(a^b^c)(d^e)} =', ((a ^ b ^ c) * (d ^ e)).Fmt(2))
    return
Example #26
0
def main():
    Format()
    snr = 1
    g = '0 0 1 0 ,0 0 0 1 ,1 0 0 0 ,0 1 0 0'
    sk4coords = (e1, e2, e3, e4) = symbols('e1 e2 e3 e4')
    sk4 = Ga('e_1 e_2 e_3 e_4', g=g, coords=sk4coords)
    (e1, e2, e3, e4) = sk4.mv()
    print('g_{ii} =', sk4.g)

    v = symbols('v', real=True)
    x1 = (e1 + e3) / sqrt(2)
    x2 = (e2 + e4) / sqrt(2)
    print('x_1<x_1==', x1 < x1)
    print('x_1<x_2==', x1 < x2)
    print('x_2<x_1==', x2 < x1)
    print('x_2<x_2==', x2 < x2)
    print(r'#$-\infty < v < \infty$')
    print('(-v*(x_1^x_2)/2).exp()==', (-v * (x1 ^ x2) / 2).exp())
    v = symbols('v', real=True, positive=True)
    print(r'#$0\le v < \infty$')
    print('(-v*(x_1^x_2)/2).exp()==', (-v * (x1 ^ x2) / 2).exp())

    xpdf(pdfprog=None)
    return
Example #27
0
    def test_reciprocal_frame_test(self):

        g = '1 # #,'+ \
            '# 1 #,'+ \
            '# # 1'

        g3dn = Ga('e1 e2 e3',g=g)

        (e1,e2,e3) = g3dn.mv()

        E = e1^e2^e3
        Esq = (E*E).scalar()
        assert str(E) == 'e1^e2^e3'
        assert str(Esq) == '(e1.e2)**2 - 2*(e1.e2)*(e1.e3)*(e2.e3) + (e1.e3)**2 + (e2.e3)**2 - 1'
        Esq_inv = 1/Esq

        E1 = (e2^e3)*E
        E2 = (-1)*(e1^e3)*E
        E3 = (e1^e2)*E

        assert str(E1) == '((e2.e3)**2 - 1)*e1 + ((e1.e2) - (e1.e3)*(e2.e3))*e2 + (-(e1.e2)*(e2.e3) + (e1.e3))*e3'
        assert str(E2) == '((e1.e2) - (e1.e3)*(e2.e3))*e1 + ((e1.e3)**2 - 1)*e2 + (-(e1.e2)*(e1.e3) + (e2.e3))*e3'
        assert str(E3) == '(-(e1.e2)*(e2.e3) + (e1.e3))*e1 + (-(e1.e2)*(e1.e3) + (e2.e3))*e2 + ((e1.e2)**2 - 1)*e3'

        w = (E1|e2)
        w = w.expand()
        assert str(w) == '0'

        w = (E1|e3)
        w = w.expand()
        assert str(w) == '0'

        w = (E2|e1)
        w = w.expand()
        assert str(w) == '0'

        w = (E2|e3)
        w = w.expand()
        assert str(w) == '0'

        w = (E3|e1)
        w = w.expand()
        assert str(w) == '0'

        w = (E3|e2)
        w = w.expand()
        assert str(w) == '0'

        w = (E1|e1)
        w = (w.expand()).scalar()
        Esq = expand(Esq)
        assert str(simplify(w/Esq)) == '1'

        w = (E2|e2)
        w = (w.expand()).scalar()
        assert str(simplify(w/Esq)) == '1'

        w = (E3|e3)
        w = (w.expand()).scalar()
        assert str(simplify(w/Esq)) == '1'

        return
Example #28
0
def main():
    # Print_Function()

    (x, y, z) = xyz = symbols('x,y,z',real=True)
    (o3d, ex, ey, ez) = Ga.build('e_x e_y e_z', g=[1, 1, 1], coords=xyz)
    grad = o3d.grad

    (u, v) = uv = symbols('u,v',real=True)
    (g2d, eu, ev) = Ga.build('e_u e_v', coords=uv)
    grad_uv = g2d.grad

    v_xyz = o3d.mv('v','vector')
    A_xyz = o3d.mv('A','vector',f=True)
    A_uv = g2d.mv('A','vector',f=True)

    print('#3d orthogonal ($A$ is vector function)')
    print('A =', A_xyz)
    print('%A^{2} =', A_xyz * A_xyz)
    print('grad|A =', grad | A_xyz)
    print('grad*A =', grad * A_xyz)

    print('v|(grad*A) =',v_xyz|(grad*A_xyz))

    print('#2d general ($A$ is vector function)')
    print('A =', A_uv)
    print('%A^{2} =', A_uv * A_uv)
    print('grad|A =', grad_uv | A_uv)
    print('grad*A =', grad_uv * A_uv)

    A = o3d.lt('A')

    print('#3d orthogonal ($A,\\;B$ are linear transformations)')
    print('A =', A)
    print(r'\f{mat}{A} =', A.matrix())
    print('\\f{\\det}{A} =', A.det())
    print('\\overline{A} =', A.adj())
    print('\\f{\\Tr}{A} =', A.tr())
    print('\\f{A}{e_x^e_y} =', A(ex^ey))
    print('\\f{A}{e_x}^\\f{A}{e_y} =', A(ex)^A(ey))

    B = o3d.lt('B')

    print('g =', o3d.g)
    print('%g^{-1} =', latex(o3d.g_inv))


    print('A + B =', A + B)
    print('AB =', A * B)
    print('A - B =', A - B)

    print('General Symmetric Linear Transformation')
    Asym = o3d.lt('A',mode='s')
    print('A =', Asym)
    print('General Antisymmetric Linear Transformation')
    Aasym = o3d.lt('A',mode='a')
    print('A =', Aasym)

    print('#2d general ($A,\\;B$ are linear transformations)')

    A2d = g2d.lt('A')

    print('g =', g2d.g)
    print('%g^{-1} =', latex(g2d.g_inv))
    print('%gg^{-1} =', latex(simplify(g2d.g * g2d.g_inv)))

    print('A =', A2d)
    print(r'\f{mat}{A} =', A2d.matrix())
    print('\\f{\\det}{A} =', A2d.det())
    A2d_adj = A2d.adj()
    print('\\overline{A} =', A2d_adj)
    print('\\f{mat}{\\overline{A}} =', latex(simplify(A2d_adj.matrix())))
    print('\\f{\\Tr}{A} =', A2d.tr())
    print('\\f{A}{e_u^e_v} =', A2d(eu^ev))
    print('\\f{A}{e_u}^\\f{A}{e_v} =', A2d(eu)^A2d(ev))

    B2d = g2d.lt('B')



    print('B =', B2d)
    print('A + B =', A2d + B2d)
    print('A - B =', A2d - B2d)

    # TODO: add this back when we drop Sympy 1.3. The 64kB of output is far too
    # printer-dependent
    if False:
        print('AB =', A2d * B2d)

    a = g2d.mv('a','vector')
    b = g2d.mv('b','vector')

    print(r'a|\f{\overline{A}}{b}-b|\f{\underline{A}}{a} =',((a|A2d.adj()(b))-(b|A2d(a))).simplify())

    m4d = Ga('e_t e_x e_y e_z', g=[1, -1, -1, -1],coords=symbols('t,x,y,z',real=True))

    T = m4d.lt('T')

    print('g =', m4d.g)

    print(r'\underline{T} =',T)
    print(r'\overline{T} =',T.adj())

    print(r'\f{\det}{\underline{T}} =',T.det())
    print(r'\f{\mbox{tr}}{\underline{T}} =',T.tr())

    a = m4d.mv('a','vector')
    b = m4d.mv('b','vector')

    print(r'a|\f{\overline{T}}{b}-b|\f{\underline{T}}{a} =',((a|T.adj()(b))-(b|T(a))).simplify())

    coords = (r, th, phi) = symbols('r,theta,phi', real=True)

    (sp3d, er, eth, ephi) = Ga.build('e_r e_th e_ph', g=[1, r**2, r**2*sin(th)**2], coords=coords)
    grad = sp3d.grad

    sm_coords = (u, v) = symbols('u,v', real=True)

    smap = [1, u, v]  # Coordinate map for sphere of r = 1

    sph2d = sp3d.sm(smap,sm_coords,norm=True)
    (eu, ev) = sph2d.mv()
    grad_uv = sph2d.grad

    F = sph2d.mv('F','vector',f=True)
    f = sph2d.mv('f','scalar',f=True)

    print('f =',f)
    print('grad*f =',grad_uv * f)

    print('F =',F)
    print('grad*F =',grad_uv * F)

    tp = (th,phi) = symbols('theta,phi',real=True)

    smap = [sin(th)*cos(phi),sin(th)*sin(phi),cos(th)]

    sph2dr = o3d.sm(smap,tp,norm=True)
    (eth, ephi) = sph2dr.mv()
    grad_tp = sph2dr.grad

    F = sph2dr.mv('F','vector',f=True)
    f = sph2dr.mv('f','scalar',f=True)

    print('f =',f)
    print('grad*f =',grad_tp * f)

    print('F =',F)
    print('grad*F =',grad_tp * F)

    return
Example #29
0
 def test_lt_matrix(self):
     base = Ga('a b', g=[1, 1], coords=symbols('x, y', real=True))
     a, b = base.mv()
     A = base.lt([a+b, 2*a-b])
     assert str(A) == 'Lt(a) = a + b\nLt(b) = 2*a - b'
     assert str(A.matrix()) == 'Matrix([[1, 2], [1, -1]])'
Example #30
0
from __future__ import absolute_import, division
from __future__ import print_function
from sympy import expand, simplify
from galgebra.printer import Format, xpdf
from galgebra.ga import Ga

g = '1 # #,' + \
    '# 1 #,' + \
    '# # 1'

Format()

ng3d = Ga('e1 e2 e3', g=g)
(e1, e2, e3) = ng3d.mv()
print('g_{ij} =', ng3d.g)
E = e1 ^ e2 ^ e3
Esq = (E * E).scalar()
print('E =', E)
print('%E^{2} =', Esq)
Esq_inv = 1 / Esq
E1 = (e2 ^ e3) * E
E2 = (-1) * (e1 ^ e3) * E
E3 = (e1 ^ e2) * E
print('E1 = (e2^e3)*E =', E1)
print('E2 =-(e1^e3)*E =', E2)
print('E3 = (e1^e2)*E =', E3)
w = (E1 | e2)
w = w.expand()
print('E1|e2 =', w)
w = (E1 | e3)
w = w.expand()
Example #31
0
# A2d.adj().Fmt(4,'\\overline{A}')
print('\\f{\\Tr}{A} =', A2d.tr())
print('\\f{A}{e_u^e_v} =', A2d(eu ^ ev))
print('\\f{A}{e_u}^\\f{A}{e_v} =', A2d(eu) ^ A2d(ev))
B2d = g2d.lt('B')
print('B =', B2d)
print('A + B =', A2d + B2d)
print('AB =', A2d * B2d)
print('A - B =', A2d - B2d)
a = g2d.mv('a', 'vector')
b = g2d.mv('b', 'vector')
print(r'a|\f{\overline{A}}{b}-b|\f{\underline{A}}{a} =',
      ((a | A2d.adj()(b)) - (b | A2d(a))).simplify())

print('#4d Minkowski spaqce (Space Time)')
m4d = Ga('e_t e_x e_y e_z',
         g=[1, -1, -1, -1],
         coords=symbols('t,x,y,z', real=True))
T = m4d.lt('T')
print('g =', m4d.g)
# FIXME incorrect sign for T and T.adj()
print(r'\underline{T} =', T)
print(r'\overline{T} =', T.adj())
# m4d.mv(T.det()).Fmt(4,r'\f{\det}{\underline{T}}')
print(r'\f{\mbox{tr}}{\underline{T}} =', T.tr())
a = m4d.mv('a', 'vector')
b = m4d.mv('b', 'vector')
print(r'a|\f{\overline{T}}{b}-b|\f{\underline{T}}{a} =',
      ((a | T.adj()(b)) - (b | T(a))).simplify())
xpdf(paper=(10, 12), debug=True)
Example #32
0
def basic_multivector_operations():
    Print_Function()
    g3d = Ga('e*x|y|z')
    (ex, ey, ez) = g3d.mv()

    A = g3d.mv('A', 'mv')

    print(A.Fmt(1, 'A'))
    print(A.Fmt(2, 'A'))
    print(A.Fmt(3, 'A'))

    X = g3d.mv('X', 'vector')
    Y = g3d.mv('Y', 'vector')

    print('g_{ij} =\n', g3d.g)

    print(X.Fmt(1, 'X'))
    print(Y.Fmt(1, 'Y'))

    print((X * Y).Fmt(2, 'X*Y'))
    print((X ^ Y).Fmt(2, 'X^Y'))
    print((X | Y).Fmt(2, 'X|Y'))

    g2d = Ga('e*x|y')

    (ex, ey) = g2d.mv()

    print('g_{ij} =\n', g2d.g)

    X = g2d.mv('X', 'vector')
    A = g2d.mv('A', 'spinor')

    print(X.Fmt(1, 'X'))
    print(A.Fmt(1, 'A'))

    print((X | A).Fmt(2, 'X|A'))
    print((X < A).Fmt(2, 'X<A'))
    print((A > X).Fmt(2, 'A>X'))

    o2d = Ga('e*x|y', g=[1, 1])

    (ex, ey) = o2d.mv()

    print('g_{ii} =\n', o2d.g)

    X = o2d.mv('X', 'vector')
    A = o2d.mv('A', 'spinor')

    print(X.Fmt(1, 'X'))
    print(A.Fmt(1, 'A'))

    print((X * A).Fmt(2, 'X*A'))
    print((X | A).Fmt(2, 'X|A'))
    print((X < A).Fmt(2, 'X<A'))
    print((X > A).Fmt(2, 'X>A'))

    print((A * X).Fmt(2, 'A*X'))
    print((A | X).Fmt(2, 'A|X'))
    print((A < X).Fmt(2, 'A<X'))
    print((A > X).Fmt(2, 'A>X'))
    return
Example #33
0
def reciprocal_frame_test():
    Print_Function()

    g = '1 # #,'+ \
        '# 1 #,'+ \
        '# # 1'

    g3dn = Ga('e1 e2 e3', g=g)

    (e1, e2, e3) = g3dn.mv()

    print('g_{ij} =\n', g3dn.g)

    E = e1 ^ e2 ^ e3
    Esq = (E * E).scalar()
    print('E =', E)
    print('E**2 =', Esq)
    Esq_inv = 1 / Esq

    E1 = (e2 ^ e3) * E
    E2 = (-1) * (e1 ^ e3) * E
    E3 = (e1 ^ e2) * E

    print('E1 = (e2^e3)*E =', E1)
    print('E2 =-(e1^e3)*E =', E2)
    print('E3 = (e1^e2)*E =', E3)

    w = (E1 | e2)
    w = w.expand()
    print('E1|e2 =', w)

    w = (E1 | e3)
    w = w.expand()
    print('E1|e3 =', w)

    w = (E2 | e1)
    w = w.expand()
    print('E2|e1 =', w)

    w = (E2 | e3)
    w = w.expand()
    print('E2|e3 =', w)

    w = (E3 | e1)
    w = w.expand()
    print('E3|e1 =', w)

    w = (E3 | e2)
    w = w.expand()
    print('E3|e2 =', w)

    w = (E1 | e1)
    w = (w.expand()).scalar()
    Esq = expand(Esq)
    print('(E1|e1)/E**2 =', simplify(w / Esq))

    w = (E2 | e2)
    w = (w.expand()).scalar()
    print('(E2|e2)/E**2 =', simplify(w / Esq))

    w = (E3 | e3)
    w = (w.expand()).scalar()
    print('(E3|e3)/E**2 =', simplify(w / Esq))

    return
Example #34
0
def noneuclidian_distance_calculation():
    from sympy import solve, sqrt
    Print_Function()

    g = '0 # #,# 0 #,# # 1'
    necl = Ga('X Y e', g=g)
    (X, Y, e) = necl.mv()

    print('g_{ij} =', necl.g)

    print('(X^Y)**2 =', (X ^ Y) * (X ^ Y))

    L = X ^ Y ^ e
    B = (L * e).expand().blade_rep()  # D&L 10.152
    print('B =', B)
    Bsq = B * B
    print('B**2 =', Bsq.obj)
    Bsq = Bsq.scalar()
    print('#L = X^Y^e is a non-euclidian line')
    print('B = L*e =', B)

    BeBr = B * e * B.rev()
    print('B*e*B.rev() =', BeBr)
    print('B**2 =', B * B)
    print('L**2 =', L * L)  # D&L 10.153
    (s, c, Binv, M, S, C, alpha) = symbols('s c (1/B) M S C alpha')

    XdotY = necl.g[0, 1]
    Xdote = necl.g[0, 2]
    Ydote = necl.g[1, 2]

    Bhat = Binv * B  # D&L 10.154
    R = c + s * Bhat  # Rotor R = exp(alpha*Bhat/2)
    print('s = sinh(alpha/2) and c = cosh(alpha/2)')
    print('exp(alpha*B/(2*|B|)) =', R)

    Z = R * X * R.rev()  # D&L 10.155
    Z.obj = expand(Z.obj)
    Z.obj = Z.obj.collect([Binv, s, c, XdotY])
    print(Z.Fmt(3, 'R*X*R.rev()'))
    W = Z | Y  # Extract scalar part of multivector
    # From this point forward all calculations are with sympy scalars
    print('Objective is to determine value of C = cosh(alpha) such that W = 0')
    W = W.scalar()
    print('Z|Y =', W)
    W = expand(W)
    W = simplify(W)
    W = W.collect([s * Binv])

    M = 1 / Bsq
    W = W.subs(Binv**2, M)
    W = simplify(W)
    Bmag = sqrt(XdotY**2 - 2 * XdotY * Xdote * Ydote)
    W = W.collect([Binv * c * s, XdotY])

    #Double angle substitutions

    W = W.subs(2 * XdotY**2 - 4 * XdotY * Xdote * Ydote, 2 / (Binv**2))
    W = W.subs(2 * c * s, S)
    W = W.subs(c**2, (C + 1) / 2)
    W = W.subs(s**2, (C - 1) / 2)
    W = simplify(W)
    W = W.subs(Binv, 1 / Bmag)
    W = expand(W)

    print('S = sinh(alpha) and C = cosh(alpha)')

    print('W =', W)

    Wd = collect(W, [C, S], exact=True, evaluate=False)

    Wd_1 = Wd[one]
    Wd_C = Wd[C]
    Wd_S = Wd[S]

    print('Scalar Coefficient =', Wd_1)
    print('Cosh Coefficient =', Wd_C)
    print('Sinh Coefficient =', Wd_S)

    print('|B| =', Bmag)
    Wd_1 = Wd_1.subs(Bmag, 1 / Binv)
    Wd_C = Wd_C.subs(Bmag, 1 / Binv)
    Wd_S = Wd_S.subs(Bmag, 1 / Binv)

    lhs = Wd_1 + Wd_C * C
    rhs = -Wd_S * S
    lhs = lhs**2
    rhs = rhs**2
    W = expand(lhs - rhs)
    W = expand(W.subs(1 / Binv**2, Bmag**2))
    W = expand(W.subs(S**2, C**2 - 1))
    W = W.collect([C, C**2], evaluate=False)

    a = simplify(W[C**2])
    b = simplify(W[C])
    c = simplify(W[one])

    print('Require a*C**2+b*C+c = 0')

    print('a =', a)
    print('b =', b)
    print('c =', c)

    x = Symbol('x')
    C = solve(a * x**2 + b * x + c, x)[0]
    print('cosh(alpha) = C = -b/(2*a) =', expand(simplify(expand(C))))
    return
Example #35
0
    def test_noneuclidian_distance_calculation(self):
        from sympy import solve, sqrt

        g = '0 # #,# 0 #,# # 1'
        necl = Ga('X Y e', g=g)
        (X, Y, e) = necl.mv()

        assert str((X ^ Y) * (X ^ Y)) == '(X.Y)**2'

        L = X ^ Y ^ e
        B = (L * e).expand().blade_rep()  # D&L 10.152
        assert str(B) == 'X^Y - (Y.e)*X^e + (X.e)*Y^e'
        Bsq = B * B
        assert str(Bsq) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e)'
        Bsq = Bsq.scalar()
        assert str(B) == 'X^Y - (Y.e)*X^e + (X.e)*Y^e'

        BeBr = B * e * B.rev()
        assert str(BeBr) == '(X.Y)*(-(X.Y) + 2*(X.e)*(Y.e))*e'
        assert str(B * B) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e)'
        assert str(L * L) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e)'  # D&L 10.153

        (s, c, Binv, M, S, C, alpha) = symbols('s c (1/B) M S C alpha')

        XdotY = necl.g[0, 1]
        Xdote = necl.g[0, 2]
        Ydote = necl.g[1, 2]

        Bhat = Binv * B  # D&L 10.154
        R = c + s * Bhat  # Rotor R = exp(alpha*Bhat/2)
        assert str(
            R) == 'c + (1/B)*s*X^Y - (1/B)*(Y.e)*s*X^e + (1/B)*(X.e)*s*Y^e'

        Z = R * X * R.rev()  # D&L 10.155
        Z.obj = expand(Z.obj)
        Z.obj = Z.obj.collect([Binv, s, c, XdotY])
        assert str(
            Z
        ) == '((1/B)**2*(X.Y)**2*s**2 - 2*(1/B)**2*(X.Y)*(X.e)*(Y.e)*s**2 + 2*(1/B)*(X.Y)*c*s - 2*(1/B)*(X.e)*(Y.e)*c*s + c**2)*X + 2*(1/B)*(X.e)**2*c*s*Y + 2*(1/B)*(X.Y)*(X.e)*s*(-(1/B)*(X.Y)*s + 2*(1/B)*(X.e)*(Y.e)*s - c)*e'
        W = Z | Y
        # From this point forward all calculations are with sympy scalars
        W = W.scalar()
        assert str(
            W
        ) == '(1/B)**2*(X.Y)**3*s**2 - 4*(1/B)**2*(X.Y)**2*(X.e)*(Y.e)*s**2 + 4*(1/B)**2*(X.Y)*(X.e)**2*(Y.e)**2*s**2 + 2*(1/B)*(X.Y)**2*c*s - 4*(1/B)*(X.Y)*(X.e)*(Y.e)*c*s + (X.Y)*c**2'
        W = expand(W)
        W = simplify(W)
        W = W.collect([s * Binv])

        M = 1 / Bsq
        W = W.subs(Binv**2, M)
        W = simplify(W)
        Bmag = sqrt(XdotY**2 - 2 * XdotY * Xdote * Ydote)
        W = W.collect([Binv * c * s, XdotY])

        #Double angle substitutions

        W = W.subs(2 * XdotY**2 - 4 * XdotY * Xdote * Ydote, 2 / (Binv**2))
        W = W.subs(2 * c * s, S)
        W = W.subs(c**2, (C + 1) / 2)
        W = W.subs(s**2, (C - 1) / 2)
        W = simplify(W)
        W = W.subs(Binv, 1 / Bmag)
        W = expand(W)

        assert str(
            W.simplify()
        ) == '(X.Y)*C - (X.e)*(Y.e)*C + (X.e)*(Y.e) + S*sqrt((X.Y)*((X.Y) - 2*(X.e)*(Y.e)))'

        Wd = collect(W, [C, S], exact=True, evaluate=False)

        Wd_1 = Wd[one]
        Wd_C = Wd[C]
        Wd_S = Wd[S]

        assert str(Wd_1) == '(X.e)*(Y.e)'
        assert str(Wd_C) == '(X.Y) - (X.e)*(Y.e)'

        assert str(Wd_S) == 'sqrt((X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e))'
        assert str(Bmag) == 'sqrt((X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e))'

        Wd_1 = Wd_1.subs(Binv, 1 / Bmag)
        Wd_C = Wd_C.subs(Binv, 1 / Bmag)
        Wd_S = Wd_S.subs(Binv, 1 / Bmag)

        lhs = Wd_1 + Wd_C * C
        rhs = -Wd_S * S
        lhs = lhs**2
        rhs = rhs**2
        W = expand(lhs - rhs)
        W = expand(W.subs(1 / Binv**2, Bmag**2))
        W = expand(W.subs(S**2, C**2 - 1))
        W = W.collect([C, C**2], evaluate=False)

        a = simplify(W[C**2])
        b = simplify(W[C])
        c = simplify(W[one])

        assert str(a) == '(X.e)**2*(Y.e)**2'
        assert str(b) == '2*(X.e)*(Y.e)*((X.Y) - (X.e)*(Y.e))'
        assert str(c) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e) + (X.e)**2*(Y.e)**2'

        x = Symbol('x')
        C = solve(a * x**2 + b * x + c, x)[0]
        assert str(expand(simplify(expand(C)))) == '-(X.Y)/((X.e)*(Y.e)) + 1'
Example #36
0
    def test_noneuclidian_distance_calculation(self):
        from sympy import solve,sqrt

        g = '0 # #,# 0 #,# # 1'
        necl = Ga('X Y e',g=g)
        (X,Y,e) = necl.mv()

        assert str((X^Y)*(X^Y)) == '(X.Y)**2'

        L = X^Y^e
        B = (L*e).expand().blade_rep() # D&L 10.152
        assert str(B) == 'X^Y - (Y.e)*X^e + (X.e)*Y^e'
        Bsq = B*B
        assert str(Bsq) == '(X.Y)*((X.Y) - 2*(X.e)*(Y.e))'
        Bsq = Bsq.scalar()
        assert str(B) == 'X^Y - (Y.e)*X^e + (X.e)*Y^e'

        BeBr = B*e*B.rev()
        assert str(BeBr) == '(X.Y)*(-(X.Y) + 2*(X.e)*(Y.e))*e'
        assert str(B*B) == '(X.Y)*((X.Y) - 2*(X.e)*(Y.e))'
        assert str(L*L) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e)' # D&L 10.153

        (s,c,Binv,M,S,C,alpha) = symbols('s c (1/B) M S C alpha')

        XdotY = necl.g[0,1]
        Xdote = necl.g[0,2]
        Ydote = necl.g[1,2]

        Bhat = Binv*B # D&L 10.154
        R = c+s*Bhat # Rotor R = exp(alpha*Bhat/2)
        assert str(R) == 'c + (1/B)*s*X^Y - (1/B)*(Y.e)*s*X^e + (1/B)*(X.e)*s*Y^e'

        Z = R*X*R.rev() # D&L 10.155
        Z.obj = expand(Z.obj)
        Z.obj = Z.obj.collect([Binv,s,c,XdotY])
        assert str(Z) == '((1/B)**2*(X.Y)**2*s**2 - 2*(1/B)**2*(X.Y)*(X.e)*(Y.e)*s**2 + 2*(1/B)*(X.Y)*c*s - 2*(1/B)*(X.e)*(Y.e)*c*s + c**2)*X + 2*(1/B)*(X.e)**2*c*s*Y + 2*(1/B)*(X.Y)*(X.e)*s*(-(1/B)*(X.Y)*s + 2*(1/B)*(X.e)*(Y.e)*s - c)*e'
        W = Z|Y
        # From this point forward all calculations are with sympy scalars
        W = W.scalar()
        assert str(W) == '(1/B)**2*(X.Y)**3*s**2 - 4*(1/B)**2*(X.Y)**2*(X.e)*(Y.e)*s**2 + 4*(1/B)**2*(X.Y)*(X.e)**2*(Y.e)**2*s**2 + 2*(1/B)*(X.Y)**2*c*s - 4*(1/B)*(X.Y)*(X.e)*(Y.e)*c*s + (X.Y)*c**2'
        W = expand(W)
        W = simplify(W)
        W = W.collect([s*Binv])

        M = 1/Bsq
        W = W.subs(Binv**2,M)
        W = simplify(W)
        Bmag = sqrt(XdotY**2-2*XdotY*Xdote*Ydote)
        W = W.collect([Binv*c*s,XdotY])

        #Double angle substitutions

        W = W.subs(2*XdotY**2-4*XdotY*Xdote*Ydote,2/(Binv**2))
        W = W.subs(2*c*s,S)
        W = W.subs(c**2,(C+1)/2)
        W = W.subs(s**2,(C-1)/2)
        W = simplify(W)
        W = W.subs(Binv,1/Bmag)
        W = expand(W)

        assert str(W.simplify()) == '(X.Y)*C - (X.e)*(Y.e)*C + (X.e)*(Y.e) + S*sqrt((X.Y)*((X.Y) - 2*(X.e)*(Y.e)))'

        Wd = collect(W,[C,S],exact=True,evaluate=False)

        Wd_1 = Wd[one]
        Wd_C = Wd[C]
        Wd_S = Wd[S]

        assert str(Wd_1) == '(X.e)*(Y.e)'
        assert str(Wd_C) == '(X.Y) - (X.e)*(Y.e)'

        assert str(Wd_S) == 'sqrt((X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e))'
        assert str(Bmag) == 'sqrt((X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e))'

        Wd_1 = Wd_1.subs(Binv,1/Bmag)
        Wd_C = Wd_C.subs(Binv,1/Bmag)
        Wd_S = Wd_S.subs(Binv,1/Bmag)

        lhs = Wd_1+Wd_C*C
        rhs = -Wd_S*S
        lhs = lhs**2
        rhs = rhs**2
        W = expand(lhs-rhs)
        W = expand(W.subs(1/Binv**2,Bmag**2))
        W = expand(W.subs(S**2,C**2-1))
        W = W.collect([C,C**2],evaluate=False)

        a = simplify(W[C**2])
        b = simplify(W[C])
        c = simplify(W[one])

        assert str(a) == '(X.e)**2*(Y.e)**2'
        assert str(b) == '2*(X.e)*(Y.e)*((X.Y) - (X.e)*(Y.e))'
        assert str(c) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e) + (X.e)**2*(Y.e)**2'

        x = Symbol('x')
        C =  solve(a*x**2+b*x+c,x)[0]
        assert str(expand(simplify(expand(C)))) == '-(X.Y)/((X.e)*(Y.e)) + 1'

        return
Example #37
0
def main():
    Format()
    (g3d, ex, ey, ez) = Ga.build('e*x|y|z')
    A = g3d.mv('A', 'mv')
    print(r'\bm{A} =', A)
    A.Fmt(2, r'\bm{A}')
    A.Fmt(3, r'\bm{A}')

    X = (x, y, z) = symbols('x y z', real=True)
    o3d = Ga('e_x e_y e_z', g=[1, 1, 1], coords=X)
    (ex, ey, ez) = o3d.mv()

    f = o3d.mv('f', 'scalar', f=True)
    A = o3d.mv('A', 'vector', f=True)
    B = o3d.mv('B', 'bivector', f=True)

    print(r'\bm{A} =', A)
    print(r'\bm{B} =', B)

    print('grad*f =', o3d.grad * f)
    print(r'grad|\bm{A} =', o3d.grad | A)
    print(r'grad*\bm{A} =', o3d.grad * A)

    print(r'-I*(grad^\bm{A}) =', -o3d.i * (o3d.grad ^ A))
    print(r'grad*\bm{B} =', o3d.grad * B)
    print(r'grad^\bm{B} =', o3d.grad ^ B)
    print(r'grad|\bm{B} =', o3d.grad | B)

    g4d = Ga('a b c d')

    (a, b, c, d) = g4d.mv()

    print('g_{ij} =', g4d.g)

    print('\\bm{a|(b*c)} =', a | (b * c))
    print('\\bm{a|(b^c)} =', a | (b ^ c))
    print('\\bm{a|(b^c^d)} =', a | (b ^ c ^ d))
    print('\\bm{a|(b^c)+c|(a^b)+b|(c^a)} =',
          (a | (b ^ c)) + (c | (a ^ b)) + (b | (c ^ a)))
    print('\\bm{a*(b^c)-b*(a^c)+c*(a^b)} =',
          a * (b ^ c) - b * (a ^ c) + c * (a ^ b))
    print(
        '\\bm{a*(b^c^d)-b*(a^c^d)+c*(a^b^d)-d*(a^b^c)} =',
        a * (b ^ c ^ d) - b * (a ^ c ^ d) + c * (a ^ b ^ d) - d * (a ^ b ^ c))
    print('\\bm{(a^b)|(c^d)} =', (a ^ b) | (c ^ d))
    print('\\bm{((a^b)|c)|d} =', ((a ^ b) | c) | d)
    print('\\bm{(a^b)\\times (c^d)} =', Ga.com(a ^ b, c ^ d))

    g = '1 # #,'+ \
         '# 1 #,'+ \
         '# # 1'

    ng3d = Ga('e1 e2 e3', g=g)
    (e1, e2, e3) = ng3d.mv()

    E = e1 ^ e2 ^ e3
    Esq = (E * E).scalar()
    print('E =', E)
    print('%E^{2} =', Esq)
    Esq_inv = 1 / Esq

    E1 = (e2 ^ e3) * E
    E2 = (-1) * (e1 ^ e3) * E
    E3 = (e1 ^ e2) * E

    print('E1 = (e2^e3)*E =', E1)
    print('E2 =-(e1^e3)*E =', E2)
    print('E3 = (e1^e2)*E =', E3)

    print('E1|e2 =', (E1 | e2).expand())
    print('E1|e3 =', (E1 | e3).expand())
    print('E2|e1 =', (E2 | e1).expand())
    print('E2|e3 =', (E2 | e3).expand())
    print('E3|e1 =', (E3 | e1).expand())
    print('E3|e2 =', (E3 | e2).expand())
    w = ((E1 | e1).expand()).scalar()
    Esq = expand(Esq)
    print('%(E1\\cdot e1)/E^{2} =', simplify(w / Esq))
    w = ((E2 | e2).expand()).scalar()
    print('%(E2\\cdot e2)/E^{2} =', simplify(w / Esq))
    w = ((E3 | e3).expand()).scalar()
    print('%(E3\\cdot e3)/E^{2} =', simplify(w / Esq))

    X = (r, th, phi) = symbols('r theta phi')
    s3d = Ga('e_r e_theta e_phi',
             g=[1, r**2, r**2 * sin(th)**2],
             coords=X,
             norm=True)
    (er, eth, ephi) = s3d.mv()

    f = s3d.mv('f', 'scalar', f=True)
    A = s3d.mv('A', 'vector', f=True)
    B = s3d.mv('B', 'bivector', f=True)

    print('A =', A)
    print('B =', B)

    print('grad*f =', s3d.grad * f)
    print('grad|A =', s3d.grad | A)
    print('-I*(grad^A) =', -s3d.i * (s3d.grad ^ A))
    print('grad^B =', s3d.grad ^ B)

    coords = symbols('t x y z')
    m4d = Ga('gamma*t|x|y|z', g=[1, -1, -1, -1], coords=coords)
    (g0, g1, g2, g3) = m4d.mv()
    I = m4d.i

    B = m4d.mv('B', 'vector', f=True)
    E = m4d.mv('E', 'vector', f=True)
    B.set_coef(1, 0, 0)
    E.set_coef(1, 0, 0)
    B *= g0
    E *= g0
    J = m4d.mv('J', 'vector', f=True)
    F = E + I * B

    print('B = \\bm{B\\gamma_{t}} =', B)
    print('E = \\bm{E\\gamma_{t}} =', E)
    print('F = E+IB =', F)
    print('J =', J)
    gradF = m4d.grad * F
    gradF.Fmt(3, 'grad*F')

    print('grad*F = J')
    (gradF.get_grade(1) - J).Fmt(3, '%\\grade{\\nabla F}_{1} -J = 0')
    (gradF.get_grade(3)).Fmt(3, '%\\grade{\\nabla F}_{3} = 0')

    (alpha, beta, gamma) = symbols('alpha beta gamma')

    (x, t, xp, tp) = symbols("x t x' t'")
    m2d = Ga('gamma*t|x', g=[1, -1])
    (g0, g1) = m2d.mv()

    R = cosh(alpha / 2) + sinh(alpha / 2) * (g0 ^ g1)
    X = t * g0 + x * g1
    Xp = tp * g0 + xp * g1
    print('R =', R)

    print(
        r"#%t\bm{\gamma_{t}}+x\bm{\gamma_{x}} = t'\bm{\gamma'_{t}}+x'\bm{\gamma'_{x}} = R\lp t'\bm{\gamma_{t}}+x'\bm{\gamma_{x}}\rp R^{\dagger}"
    )

    Xpp = R * Xp * R.rev()
    Xpp = Xpp.collect()
    Xpp = Xpp.trigsimp()
    print(r"%t\bm{\gamma_{t}}+x\bm{\gamma_{x}} =", Xpp)
    Xpp = Xpp.subs({sinh(alpha): gamma * beta, cosh(alpha): gamma})

    print(r'%\f{\sinh}{\alpha} = \gamma\beta')
    print(r'%\f{\cosh}{\alpha} = \gamma')

    print(r"%t\bm{\gamma_{t}}+x\bm{\gamma_{x}} =", Xpp.collect())

    coords = symbols('t x y z')
    m4d = Ga('gamma*t|x|y|z', g=[1, -1, -1, -1], coords=coords)
    (g0, g1, g2, g3) = m4d.mv()
    I = m4d.i
    (m, e) = symbols('m e')

    psi = m4d.mv('psi', 'spinor', f=True)
    A = m4d.mv('A', 'vector', f=True)
    sig_z = g3 * g0
    print('\\bm{A} =', A)
    print('\\bm{\\psi} =', psi)

    dirac_eq = (m4d.grad * psi) * I * sig_z - e * A * psi - m * psi * g0
    dirac_eq.simplify()

    dirac_eq.Fmt(
        3,
        r'\nabla \bm{\psi} I \sigma_{z}-e\bm{A}\bm{\psi}-m\bm{\psi}\gamma_{t} = 0'
    )

    # xpdf()
    xpdf(pdfprog=None)
    return
Example #38
0
    def test_reciprocal_frame_test(self):

        g = '1 # #,'+ \
            '# 1 #,'+ \
            '# # 1'

        g3dn = Ga('e1 e2 e3', g=g)

        (e1, e2, e3) = g3dn.mv()

        E = e1 ^ e2 ^ e3
        Esq = (E * E).scalar()
        assert str(E) == 'e1^e2^e3'
        assert str(
            Esq
        ) == '(e1.e2)**2 - 2*(e1.e2)*(e1.e3)*(e2.e3) + (e1.e3)**2 + (e2.e3)**2 - 1'
        Esq_inv = 1 / Esq

        E1 = (e2 ^ e3) * E
        E2 = (-1) * (e1 ^ e3) * E
        E3 = (e1 ^ e2) * E

        assert str(
            E1
        ) == '((e2.e3)**2 - 1)*e1 + ((e1.e2) - (e1.e3)*(e2.e3))*e2 + (-(e1.e2)*(e2.e3) + (e1.e3))*e3'
        assert str(
            E2
        ) == '((e1.e2) - (e1.e3)*(e2.e3))*e1 + ((e1.e3)**2 - 1)*e2 + (-(e1.e2)*(e1.e3) + (e2.e3))*e3'
        assert str(
            E3
        ) == '(-(e1.e2)*(e2.e3) + (e1.e3))*e1 + (-(e1.e2)*(e1.e3) + (e2.e3))*e2 + ((e1.e2)**2 - 1)*e3'

        w = (E1 | e2)
        w = w.expand()
        assert str(w) == ZERO_STR

        w = (E1 | e3)
        w = w.expand()
        assert str(w) == ZERO_STR

        w = (E2 | e1)
        w = w.expand()
        assert str(w) == ZERO_STR

        w = (E2 | e3)
        w = w.expand()
        assert str(w) == ZERO_STR

        w = (E3 | e1)
        w = w.expand()
        assert str(w) == ZERO_STR

        w = (E3 | e2)
        w = w.expand()
        assert str(w) == ZERO_STR

        w = (E1 | e1)
        w = (w.expand()).scalar()
        Esq = expand(Esq)
        assert str(simplify(w / Esq)) == '1'

        w = (E2 | e2)
        w = (w.expand()).scalar()
        assert str(simplify(w / Esq)) == '1'

        w = (E3 | e3)
        w = (w.expand()).scalar()
        assert str(simplify(w / Esq)) == '1'
Example #39
0
from __future__ import print_function
import sys
from sympy import symbols, sin, latex, diff, Function, expand
from galgebra.ga import Ga
from galgebra.lt import Mlt
from galgebra.printer import Eprint, Format, xpdf

Format()

#Define spherical coordinate system in 3-d

coords = (r, th, phi) = symbols('r,theta,phi', real=True)

sp3d = Ga('e_r,e_th,e_ph', g=[1, r**2, r**2 * sin(th)**2], coords=coords)
(er, eth, ephi) = sp3d.mv()

#Define coordinates for 2-d (u,v) and 1-d (s) manifolds

u, v, s, alpha = symbols('u v s alpha', real=True)

sub_coords = (u, v)

smap = [1, u, v]  # Coordinate map for sphere of r = 1 in 3-d

print(r'(u,v)\rightarrow (r,\theta,\phi) = ', smap)

#Define unit sphere manifold

sph2d = sp3d.sm(smap, sub_coords)

print('#Unit Sphere Manifold:')