예제 #1
0
    def simplify_lines(ex):
        """
        simplify a product of gamma matrices

        Examples
        ========

        >>> from sympy.physics.hep.gamma_matrices import GammaMatrix, DiracSpinorIndex
        >>> from sympy.tensor.tensor import tensor_indices
        >>> i0,i1,i2,i3,i4,i5 = tensor_indices('i0:6', GammaMatrix.LorentzIndex)
        >>> s0,s1,s2,s3,s4,s5,s6,s7 = tensor_indices('s0:8', DiracSpinorIndex)
        >>> G = GammaMatrix
        >>> t = G(i1,s1,-s2)*G(i4,s7,-s6)*G(i2,s2,-s3)*G(i3,s4,-s5)*G(i5,s6,-s7)
        >>> G.simplify_lines(t)
        4*gamma(i3, s4, -s5)*gamma(i1, s1, -S_0)*gamma(i2, S_0, -s3)*metric(i4, i5)

        """
        lines, traces, rest = get_lines(ex, DiracSpinorIndex)
        a = ex.split()
        trest = tensor_mul(*[x for i, x in enumerate(a) if i in rest])
        tlines = []
        for line in lines:
            first = a[line[0]]
            last = a[line[-1]]
            first = [x[0] for x in first.free if x[1] == 1][0]
            last = [x[0] for x in last.free if x[1] == 2][0]
            tx = tensor_mul(*[x for i, x in enumerate(a) if i  in line])
            tx1 = GammaMatrixHead._simplify_single_line(tx)
            tlines.append(tx1)
        traces = [GammaMatrix._trace_single_line(tensor_mul(*[x for i, x in enumerate(a) if i  in line])) for line in traces]
        res = tensor_mul(*([trest] + tlines + traces))
        return res
예제 #2
0
def test_get_lines():
    i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 = \
       tensor_indices('i0:14', G.LorentzIndex)
    s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16 = \
       tensor_indices('s0:17', DiracSpinorIndex)
    t = G(i1,s1,-s2)*G(i2,s3,-s4)*G(i4,s2,-s6)*G(i3,s4,-s3)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[0, 2]], [[1, 3]], [])
    t = G(i1,s1,-s2)*G(i2,s2,-s3)*G(i3,s3,-s4)*G(i4,s4,-s5)*\
        G(i5,s6,-s7)*G(i6,s7,-s8)*G(i7,s8,-s9)*G(i8,s9,-s6)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[0, 1, 2, 3]], [[4, 5, 6, 7]], [])
    t = G(i1,s1,-s2)*G(i0,s0,-s10)*G(i2,s2,-s3)*G(i3,s3,-s4)*\
    G(i4,s4,-s5)*G(i5,s6,-s7)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
    G(i8,s9,-s6)*G(i9,s10,-s0)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[0, 2, 3, 4]], [[5, 6, 7, 8], [1, 9]], [])
    t = G(i1,s1,-s2)*G(i11,s12,-s13)*G(i0,s0,-s10)*G(i2,s2,-s3)*G(i3,s3,-s4)*\
        G(i4,s4,-s5)*G(i5,s6,-s7)*G(i10,s11,-s12)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
        G(i8,s9,-s6)*G(i9,s10,-s0)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[0, 3, 4, 5], [7, 1]], [[6, 8, 9, 10], [2, 11]], [])
    t = G(i4,s4,-s5)*G(i5,s6,-s7)*G(i10,s11,-s12)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
        G(i8,s9,-s6)*G(i9,s10,-s0)*\
        G(i1,s1,-s2)*G(i11,s12,-s13)*G(i0,s0,-s10)*G(i2,s2,-s3)*G(i3,s3,-s4)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[2, 8], [7, 10, 11, 0]], [[1, 3, 4, 5], [6, 9]], [])
    t = G(i8,s9,-s6)*G(i9,s10,-s0)*G(i4,s4,-s5)*G(i13,s14,-s15)*\
        G(i10,s11,-s12)*G(i1,s1,-s2)*G(i11,s12,-s13)*\
        G(i0,s0,-s10)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
        G(i2,s2,-s3)*G(i12,s13,-s14)*G(i3,s3,-s4)*G(i5,s6,-s7)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[4, 6, 11, 3], [5, 10, 12, 2]], [[1, 7], [0, 13, 8, 9]], [])
예제 #3
0
def test_get_lines():
    i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 = \
       tensor_indices('i0:14', G.LorentzIndex)
    s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16 = \
       tensor_indices('s0:17', DiracSpinorIndex)
    t = G(i1, s1, -s2) * G(i2, s3, -s4) * G(i4, s2, -s6) * G(i3, s4, -s3)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[0, 2]], [[1, 3]], [])
    t = G(i1,s1,-s2)*G(i2,s2,-s3)*G(i3,s3,-s4)*G(i4,s4,-s5)*\
        G(i5,s6,-s7)*G(i6,s7,-s8)*G(i7,s8,-s9)*G(i8,s9,-s6)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[0, 1, 2, 3]], [[4, 5, 6, 7]], [])
    t = G(i1,s1,-s2)*G(i0,s0,-s10)*G(i2,s2,-s3)*G(i3,s3,-s4)*\
    G(i4,s4,-s5)*G(i5,s6,-s7)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
    G(i8,s9,-s6)*G(i9,s10,-s0)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[0, 2, 3, 4]], [[5, 6, 7, 8], [1, 9]], [])
    t = G(i1,s1,-s2)*G(i11,s12,-s13)*G(i0,s0,-s10)*G(i2,s2,-s3)*G(i3,s3,-s4)*\
        G(i4,s4,-s5)*G(i5,s6,-s7)*G(i10,s11,-s12)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
        G(i8,s9,-s6)*G(i9,s10,-s0)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[7, 1], [0, 3, 4, 5]], [[6, 8, 9, 10], [2, 11]], [])
    t = G(i4,s4,-s5)*G(i5,s6,-s7)*G(i10,s11,-s12)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
        G(i8,s9,-s6)*G(i9,s10,-s0)*\
        G(i1,s1,-s2)*G(i11,s12,-s13)*G(i0,s0,-s10)*G(i2,s2,-s3)*G(i3,s3,-s4)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[7, 10, 11, 0], [2, 8]], [[1, 3, 4, 5], [6, 9]], [])
    t = G(i8,s9,-s6)*G(i9,s10,-s0)*G(i4,s4,-s5)*G(i13,s14,-s15)*\
        G(i10,s11,-s12)*G(i1,s1,-s2)*G(i11,s12,-s13)*\
        G(i0,s0,-s10)*G(i6,s7,-s8)*G(i7,s8,-s9)*\
        G(i2,s2,-s3)*G(i12,s13,-s14)*G(i3,s3,-s4)*G(i5,s6,-s7)
    r = get_lines(t, DiracSpinorIndex)
    assert r == ([[5, 10, 12, 2], [4, 6, 11, 3]], [[1, 7], [0, 13, 8, 9]], [])