Пример #1
0
    def test_from_str(self):
        coords = symbols('x y', real=True)
        g, e1, e2 = Ga.build('e*1|2', coords=coords, g=[1, 1])

        a1 = g.mv('a1', 'vector')
        a2 = g.mv('a2', 'vector')
        a1x, a1y = a1.get_coefs(1)
        a2x, a2y = a2.get_coefs(1)

        # one-d
        T = Mlt('T', g, nargs=1)
        v = T(a1)

        # Two new symbols created
        Tx, Ty = sorted(v.free_symbols - {a1x, a1y}, key=lambda x: x.sort_key())
        assert v == (
            Tx * a1x +
            Ty * a1y
        )

        # two-d
        T = Mlt('T', g, nargs=2)
        v = T(a1, a2)

        # four new symbols created
        Txx, Txy, Tyx, Tyy = sorted(v.free_symbols - {a1x, a1y, a2x, a2y}, key=lambda x: x.sort_key())
        assert v == (
            Txx * a1x * a2x +
            Txy * a1x * a2y +
            Tyx * a1y * a2x +
            Tyy * a1y * a2y
        )
Пример #2
0
    def test_basic(self):
        # from TensorDef.py
        coords = symbols('t x y z', real=True)
        st4d, g0, g1, g2, g3 = Ga.build('gamma*t|x|y|z', g=[1, -1, -1, -1],
                                        coords=coords)

        A = st4d.mv('T', 'bivector')

        def TA(a1, a2):
            return A | (a1 ^ a2)

        T = Mlt(TA, st4d)

        # tests begin

        a1 = st4d.mv('a1', 'vector')
        a2 = st4d.mv('a2', 'vector')
        a3 = st4d.mv('a3', 'vector')
        a4 = st4d.mv('a4', 'vector')

        # calling the Mlt is like calling the function
        assert T(a1, a2) == TA(a1, a2)

        # for addition, argument slots are reused
        assert (T + T)(a1, a2) == T(a1, a2) + T(a1, a2)
        assert (T - T)(a1, a2) == T(a1, a2) - T(a1, a2)

        # for multiplication, argument slots are chained
        assert (T * T)(a1, a2, a3, a4) == TA(a1, a2) * T(a3, a4)
        assert (T ^ T)(a1, a2, a3, a4) == TA(a1, a2) ^ T(a3, a4)
        assert (T | T)(a1, a2, a3, a4) == TA(a1, a2) | T(a3, a4)

        # Test linearity properties. Note that this behavior is implied by our
        # test that T and TA are equivalent above, but it does exercise
        # `Mlt.__call__` with compound expressions as arguments.
        alpha = st4d.mv('alpha', 'scalar')
        b = st4d.mv('b', 'vector')

        assert T(alpha * a1, a2) == alpha * T(a1, a2)
        assert T(a1, alpha * a2) == alpha * T(a1, a2)
        assert T(a1 + b, a2) == T(a1, a2) + T(b, a2)
        assert T(a1, a2 + b) == T(a1, a2) + T(a1, b)
Пример #3
0
import sys
from sympy import symbols, sin, cos
from galgebra.printer import Format, xpdf, Get_Program, Print_Function
from galgebra.ga import Ga
from galgebra.lt import Mlt

coords = symbols('t x y z', real=True)
(st4d, g0, g1, g2, g3) = Ga.build('gamma*t|x|y|z',
                                  g=[1, -1, -1, -1],
                                  coords=coords)

A = st4d.mv('T', 'bivector')


def TA(a1, a2):
    return A | (a1 ^ a2)


T = Mlt(TA, st4d)  # Define multi-linear function