def test_combineLikeTerms7(self): eq = Equation("3CA^{\\gamma} + \\frac{5}{7} DB^{\\gamma}") eq.combineLikeTerms(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\(3C A^{\\gamma} +\\frac{5}{7}D B^{\\gamma} \\)", 'error in combining like terms differing by any (numerical or symbolic) factor' )
def test_replaceIndices(self): eq = Equation(" Z \\partial_{\\mu} \\partial_{\\nu}h^{\\mu \\nu} + X \\partial_{\\alpha}\\partial_{\\beta} h^{\\alpha \\beta} ") indices_to_replace = "\\mu, \\nu, \\alpha, \\beta" replacement_indices = "\\gamma, \\zeta, \\chi, \\xi" eq.replaceIndices(indices_to_replace, replacement_indices) self.assertEqual(repr(eq), "\\(Z \\partial_{\\gamma} \\partial_{\\zeta} h^{\\gamma \\zeta} +X \\partial_{\\chi} \\partial_{\\xi} h^{\\chi \\xi} \\)", 'error in replacing indices')
def test_combineLikeTermsNum1(self): eq = Equation("3A^{\\gamma} + \\frac{5}{7} A^{\\gamma} ") eq.combineLikeTermsWithoutSymCo(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\(\\frac{26}{7} A^{\\gamma} \\)", 'error in combining like terms differing only by a numerical factor' )
def test_combineLikeTermsNum9(self): eq = Equation("A^{\\beta} + A^{\\alpha}") eq.combineLikeTermsWithoutSymCo(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\( A^{\\beta} + A^{\\alpha} \\)", 'error in combining like terms differing only by a numerical factor' )
def test_distributep4(self): eq = Equation("\\partial_{\\mu} \\( A^{\\gamma}B^{\\zeta}\\) ") eq.getTree().distributePs(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\( \\partial_{\\mu} A^{\\gamma} B^{\\zeta} + \\partial_{\\mu} B^{\\zeta} A^{\\gamma} \\)", '')
def test_factor_gcf9(self): eq = Equation( "\\(X \\partial_{\\nu}h^{\\mu \\nu} + \\partial_{\\nu} h^{\\mu \\nu}\\)" ) eq.factorGCF(eq.getTree().getRoot()) self.assertEqual(repr(eq), "\\partial_{\\nu} h^{\\mu \\nu} \\(X +1 \\)", '')
def test_combineLikeTerms8(self): eq = Equation("XA^{\\beta} + A^{\\alpha}") eq.combineLikeTerms(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\(X A^{\\beta} + A^{\\alpha} \\)", 'error in combining like terms differing by any (numerical or symbolic) factor' )
def test_contract_etas5(self): eq = Equation( "\\eta^{\\nu \\alpha} \\partial_{\\mu} d^{\\mu}_{\\ \\zeta \\alpha} " ) eq.contract(eq.getTree().getRoot(), 'eta') self.assertEqual(repr(eq), "\\partial_{\\mu} d_{\\ \\zeta \\ }^{\\mu \\ \\nu}", '')
def test_rep_term2(self): eq = Equation("A^{\\alpha \\gamma} + A^{\\gamma} + C^{} ") term_to_replace = "A^{\\gamma}" replacement_term = "B^{\\gamma}" eq.replaceTerms(term_to_replace, replacement_term) self.assertEqual(repr(eq), "\\( A^{\\alpha \\gamma} + B^{\\gamma} + C^{} \\)", 'tensor -> tensor, replacing a tensor on its own')
def test_factor_gcf8(self): eq = Equation( "\\(\\frac{1}{2} \\partial_{\\gamma} h^{\\mu \\gamma} + \\frac{1}{4} h^{\\gamma \\nu}\\) " ) eq.factorGCF(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\frac{1}{4} \\(2 \\partial_{\\gamma} h^{\\mu \\gamma} + h^{\\gamma \\nu} \\)", '')
def test_noPmult14(self): eq = Equation( "\\delta^{\\gamma}_{\\zeta} \\eta^{\\nu \\alpha} \\partial_{\\mu} \\(Y \\partial_{\\nu}h^{\\mu \\zeta} + X \\partial^{\\mu} h^{\\zeta }_{\\nu}\\)" ) eq.getTree().noPfoil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\partial_{\\mu} \\(Y \\delta_{\\zeta}^{\\gamma} \\eta^{\\nu \\alpha} \\partial_{\\nu} h^{\\mu \\zeta} +X \\delta_{\\zeta}^{\\gamma} \\eta^{\\nu \\alpha} \\partial^{\\mu} h_{\\nu}^{\\zeta} \\)", '')
def test_noPmult15(self): eq = Equation( "\\(A \\eta^{\\gamma \\epsilon} + A5B + 56 \\delta^{\\phi}_{\\xi} \\) \\partial_{\\mu} \\(Y \\partial_{\\nu}h^{\\mu \\nu} + X \\partial^{\\mu} h^{\\nu }_{\\nu}\\)" ) eq.getTree().noPfoil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\partial_{\\mu} \\(YA \\eta^{\\gamma \\epsilon} \\partial_{\\nu} h^{\\mu \\nu} +5 YAB \\partial_{\\nu} h^{\\mu \\nu} +56 Y \\delta_{\\xi}^{\\phi} \\partial_{\\nu} h^{\\mu \\nu} +XA \\eta^{\\gamma \\epsilon} \\partial^{\\mu} h_{\\nu}^{\\nu} +5 XAB \\partial^{\\mu} h_{\\nu}^{\\nu} \\\\ \n +56 X \\delta_{\\xi}^{\\phi} \\partial^{\\mu} h_{\\nu}^{\\nu} \\)", '')
def test_noPmult17(self): eq = Equation( "H \\(A^{\\epsilon} + B^{\\gamma} \\) \\( \\partial_{\\mu}X^{\\mu} + M^{\\nu \\zeta}_{\\gamma} \\) \\( X + Y\\) " ) eq.getTree().noPfoil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\(HX A^{\\epsilon} \\partial_{\\mu} X^{\\mu} +HY A^{\\epsilon} \\partial_{\\mu} X^{\\mu} +HX A^{\\epsilon} M_{\\gamma}^{\\nu \\zeta} +HY A^{\\epsilon} M_{\\gamma}^{\\nu \\zeta} +HX B^{\\gamma} \\partial_{\\mu} X^{\\mu} +HY B^{\\gamma} \\partial_{\\mu} X^{\\mu} \\\\ \n +HX B^{\\gamma} M_{\\gamma}^{\\nu \\zeta} +HY B^{\\gamma} M_{\\gamma}^{\\nu \\zeta} \\)", '')
def test_noPmult9(self): eq = Equation( "A^{\\epsilon} \\partial_{\\mu} \\(Y \\partial_{\\nu}h^{\\mu \\nu} + X \\partial^{\\mu} h^{\\nu }_{\\nu}\\) - B^{\\epsilon} " ) eq.getTree().noPfoil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "A^{\\epsilon} \\partial_{\\mu} \\(Y \\partial_{\\nu} h^{\\mu \\nu} +X \\partial^{\\mu} h_{\\nu}^{\\nu} \\)- B^{\\epsilon}", '')
def test_rep_term17(self): eq = Equation("A^{\\alpha \\gamma} + A^{\\gamma} + C^{} ") term_to_replace = "A^{\\gamma}" replacement_term = "B^{\\gamma} + 8fG^{\\gamma}" eq.replaceTerms(term_to_replace, replacement_term) self.assertEqual( repr(eq), "\\( A^{\\alpha \\gamma} + C^{} \\)+\\( B^{\\gamma} +8 f G^{\\gamma} \\)", 'tensor -> sum, replacing just a tensor')
def test_noPmult13(self): eq = Equation( "\\(A + 5B + CD \\) \\partial_{\\mu} \\(Y \\partial_{\\nu}h^{\\mu \\nu} + X \\partial^{\\mu} h^{\\nu }_{\\nu}\\) " ) eq.getTree().noPfoil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\partial_{\\mu} \\(YA \\partial_{\\nu} h^{\\mu \\nu} +5 YB \\partial_{\\nu} h^{\\mu \\nu} +YCD \\partial_{\\nu} h^{\\mu \\nu} +XA \\partial^{\\mu} h_{\\nu}^{\\nu} +5 XB \\partial^{\\mu} h_{\\nu}^{\\nu} +XCD \\partial^{\\mu} h_{\\nu}^{\\nu} \\)", '')
def test_contract_both(self): eq = Equation( "\\delta^{\\gamma}_{\\beta} \\eta^{\\nu \\alpha} \\partial_{\\mu} h^{\\mu}_{\\alpha}\\partial_{\\nu} h^{\\beta}_{\\gamma}", "h") eq.contract(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\partial_{\\mu} h^{\\mu \\nu} \\partial_{\\nu} h_{\\gamma}^{\\gamma}", '')
def test_distributep8(self): eq = Equation("\\square \\(A^{\\alpha}B_{\\alpha}\\)") eq.getTree().distributePs(eq.getTree().getRoot()) # self.assertRegex(repr(eq), '\\( \\square A\^\{\\alpha\} B_\{\\alpha\} + \\partial\^\{\\.*\} B_\{\\alpha\} \\partial_\{\\.*\} A\^\{\\alpha\} + \\square B_\{\\\\alpha\} A\^\{\\alpha\} + \\partial\^\{\\\\.*\} A\^\{\\alpha\} \\partial_\{\\.*\} B_\{\\alpha\} \\)', 'product rule with squares') # self.assertRegex(repr(eq), '\\\\( \\\\square A\{\\\\alpha} B_{\\\\alpha} \+ \\\\partial\^{\\\\.*} B_{\\\\alpha} \\\\partial_{\\\\.*} A\^{\\\\alpha} \+ \\\\square B_{\\\\alpha} A\^{\\\\alpha} \+ \\\\partial\^{\\\\.*} A\^{\\\\alpha} \\\\partial_{\\\\.*} B_{\\\\alpha} \\\\)', 'product rule with squares') self.assertRegex( repr(eq), '\\\\\( \\\\square A\^\{\\\\alpha\} B_\{\\\\alpha\} \+ \\\\partial\^\{\\\\.*\} B_\{\\\\alpha\} \\\\partial_\{\\\\.*\} A\^\{\\\\alpha\} \+ \\\\square B_\{\\\\alpha\} A\^\{\\\\alpha\} \+ \\\\partial\^\{\\\\.*\} A\^\{\\\\alpha\} \\\\partial_\{\\\\.*\} B_\{\\\\alpha\} \\\\\)', 'product rule with squares')
def test_foil1(self): eq = Equation( "\\(A^{}\\) \\partial_{\\mu} \\(Y \\partial_{\\nu}h^{\\mu \\nu} + X \\partial^{\\mu} h^{\\nu }_{\\nu}\\)" ) eq.getTree().foil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\(Y A^{} \\partial_{\\nu} \\partial_{\\mu} h^{\\mu \\nu} +X A^{} \\partial^{\\mu} \\partial_{\\mu} h_{\\nu}^{\\nu} \\)", '')
def test_distributep3(self): eq = Equation( "\\partial_{\\mu} \\(5 \\partial_{\\nu}h^{\\mu \\nu} + V \\partial^{\\mu} h^{\\nu }_{\\nu}\\) " ) eq.getTree().distributePs(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\(5 \\partial_{\\nu} \\partial_{\\mu} h^{\\mu \\nu} +V \\partial^{\\mu} \\partial_{\\mu} h_{\\nu}^{\\nu} \\)", '')
def test_factor_gcf6(self): eq = Equation( "\\(X \\partial_{\\gamma}h^{\\mu \\gamma} A^{\\alpha}_{\\alpha} + Y \\partial_{\\nu} h^{\\mu \\nu}\\)" ) eq.factorGCF(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\partial_{\\gamma} h^{\\mu \\gamma} \\(X A_{\\alpha}^{\\alpha} +Y \\)", '')
def test_noPmult12(self): eq = Equation( "4 \\partial_{\\mu} \\(Y \\partial_{\\nu}h^{\\mu \\nu} + X \\partial^{\\mu} h^{\\nu }_{\\nu}\\)" ) eq.getTree().noPfoil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\partial_{\\mu} \\(4 Y \\partial_{\\nu} h^{\\mu \\nu} +4 X \\partial^{\\mu} h_{\\nu}^{\\nu} \\)", '')
def test_noPmult7(self): eq = Equation( " \\partial_{\\mu} \\(Y \\partial_{\\nu}h^{\\mu \\nu} + X \\partial^{\\mu} h^{\\nu }_{\\nu}\\) + T^{\\gamma} \\(A_{\\gamma} + B_{\\gamma}\\)" ) eq.getTree().noPfoil(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\partial_{\\mu} \\(Y \\partial_{\\nu} h^{\\mu \\nu} +X \\partial^{\\mu} h_{\\nu}^{\\nu} \\)+\\( T^{\\gamma} A_{\\gamma} + T^{\\gamma} B_{\\gamma} \\)", '')
def test_factor_gcf1(self): eq = Equation( "\\(3Y \\partial_{\\nu}h^{\\mu \\nu} + Y \\partial^{\\mu} h^{\\nu }_{\\nu}\\)" ) eq.factorGCF(eq.getTree().getRoot()) self.assertEqual( repr(eq), "Y \\(3 \\partial_{\\nu} h^{\\mu \\nu} + \\partial^{\\mu} h_{\\nu}^{\\nu} \\)", '')
def test_sortTerms3(self): eq = Equation( "\\( 9\\partial^{\\chi}B_{\\chi} +\\frac{1}{2}T \\partial_{\\gamma}\\partial_{\\kappa}A^{\\gamma} +M C^{} \\)" ) eq.sortTerms() self.assertEqual( repr(eq), "\\(M C^{} +9 \\partial^{\\chi} B_{\\chi} +\\frac{1}{2} T \\partial_{\\gamma} \\partial_{\\kappa} A^{\\gamma} \\)", 'error in sorting the terms by number of derivatives (least to greatest)' )
def test_combineLikeTermsNum10(self): eq = Equation( "3\\partial_{\\gamma}A^{\\gamma}_{\\nu} + 7 \\partial_{\\beta}\\partial^{\\zeta}A^{\\beta}_{\\nu \\zeta}" ) eq.combineLikeTermsWithoutSymCo(eq.getTree().getRoot()) self.assertEqual( repr(eq), "\\(3 \\partial_{\\gamma} A_{\\nu}^{\\gamma} +7 \\partial_{\\beta} \\partial^{\\zeta} A_{\\nu \\zeta}^{\\beta} \\)", 'error in combining like terms differing only by a numerical factor' )
def test_rep_term19(self): eq = Equation( "\\partial_{\\mu} \\partial_{\\nu} h^{\\mu \\nu} + \\frac{3}{4} Y") term_to_replace = "\\partial_{\\mu} \\partial_{\\nu} h^{\\mu \\nu}" replacement_term = "\\partial_{\\gamma} B^{\\gamma} + 5 + G^{\\mu}_{\\mu} " eq.replaceTerms(term_to_replace, replacement_term) self.assertEqual( repr(eq), "\\(\\frac{3}{4} Y \\)+\\( \\partial_{\\gamma} B^{\\gamma} +5 + G_{\\mu}^{\\mu} \\)", 'tensor -> sum, replacing a tensor that has partial derivatives')
def test_sortTerms5(self): eq = Equation( "\\(\\partial_{\\gamma} \\partial_{\\kappa}\\square A^{\\gamma}\\partial_{\\omega}G^{} + \\square \\partial^{\\chi}B_{\\chi} + \\square X_{\\xi}+ \\square V_{}C^{} \\)" ) eq.sortTerms() self.assertEqual( repr(eq), "\\( \\square X_{\\xi} + \\square V^{} C^{} + \\partial^{\\chi} \\square B_{\\chi} + \\partial_{\\gamma} \\partial_{\\kappa} \\square A^{\\gamma} \\partial_{\\omega} G^{} \\)", 'error in sorting the terms by number of derivatives (least to greatest)' )
def test_rep_term4(self): eq = Equation( "\\partial_{\\mu} \\partial_{\\nu} h^{\\mu \\nu} + \\frac{3}{4} Y") term_to_replace = "\\partial_{\\mu} \\partial_{\\nu} h^{\\mu \\nu} " replacement_term = "B^{\\gamma}_{\\gamma} " eq.replaceTerms(term_to_replace, replacement_term) self.assertEqual( repr(eq), "\\( B_{\\gamma}^{\\gamma} +\\frac{3}{4} Y \\)", 'tensor -> tensor, replacing a tensor that has partial derivatives with just a tensor' )
def test_sortTerms6(self): eq = Equation( "\\partial_{\\xi}H^{}\\partial_{\\omega}G^{}\\partial^{\\xi}M^{} + \\square A^{}" ) eq.sortTerms() self.assertEqual( repr(eq), "\\( \\square A^{} + \\partial_{\\xi} H^{} \\partial_{\\omega} G^{} \\partial^{\\xi} M^{} \\)", 'error in sorting the terms by number of derivatives (least to greatest)' )