using System; using System.Numerics; using Skeleton.Algebra; using Skeleton.Algebra.DimensionProviders; using Skeleton.Constants; using Skeleton.DataStructure.Packs.MatrixDecompositions; namespace Skeleton.Test; [TestFixture] public class UnitaryConjugateTest { [Test] public void UnitaryDecompositionShouldMatchTest() { C33 x = new C33( -0.29637473524541746 - 0.4164563198193952 * AlgebraConstant.I, 0.47019945345152797 - 0.18885780773580182 * AlgebraConstant.I, -0.5414450753609832 - 0.4345210959080704 * AlgebraConstant.I, 0.05140609295069032 - 0.17133718304221346 * AlgebraConstant.I, -0.46675346988465705 + 0.6421597806755671 * AlgebraConstant.I, -0.5775735169777234 + 0.06466707225491593 * AlgebraConstant.I, -0.7911152098361764 - 0.28436571184174053 * AlgebraConstant.I, -0.300392405520825 + 0.15093581274788961 * AlgebraConstant.I, 0.41395268302160826 - 0.09433358918942991 * AlgebraConstant.I ); JDPair jdV1 = x.InternalUnitaryDecompositionV1(); Console.WriteLine($"j1 = {jdV1.J.PythonRepresentation}"); Console.WriteLine($"d1 = {jdV1.D.PythonRepresentation}"); //x.TestInternalUnitaryDecomposition(); /* SU3 o = new SU3( -0.29637473524541746 - 0.4164563198193952 * AlgebraConstant.I, 0.47019945345152797 - 0.18885780773580182 * AlgebraConstant.I, -0.5414450753609832 - 0.4345210959080704 * AlgebraConstant.I, 0.05140609295069032 - 0.17133718304221346 * AlgebraConstant.I, -0.46675346988465705 + 0.6421597806755671 * AlgebraConstant.I, -0.5775735169777234 + 0.06466707225491593 * AlgebraConstant.I, -0.7911152098361764 - 0.28436571184174053 * AlgebraConstant.I, -0.300392405520825 + 0.15093581274788961 * AlgebraConstant.I, 0.41395268302160826 - 0.09433358918942991 * AlgebraConstant.I ); Assert.IsTrue(x.IsEqualApprox(o.U * o.D * o.U.Hermitian())); */ /*Console.WriteLine(o.U.PythonRepresentation); Console.WriteLine(o.D.PythonRepresentation); Assert.IsTrue(x.TestEqual(o.U.Hermitian() * o.D * o.U)); SU3 ox = new SU3(x.Copy()); Assert.IsTrue(x.TestEqual(ox)); Assert.IsTrue(x.TestEqual(o)); Assert.IsTrue(x.TestEqual(o.U * o.D * o.U.Hermitian())); Assert.IsTrue(o.TestEqual(o.U * o.D * o.U.Hermitian())); Console.WriteLine(o.PythonRepresentation); Console.WriteLine((x-o).PythonRepresentation);*/ } [Test] public void UnitaryConjugateShouldEqualTest() { SU3 a = new SU3( -0.46622721713303866 - 0.060475409668431644 * AlgebraConstant.I, -0.1425326880495955 - 0.11337596851236675 * AlgebraConstant.I, 0.5124598007869261 - 0.6951188258193564 * AlgebraConstant.I, -0.07977662445969419 - 0.15645179782505836 * AlgebraConstant.I, 0.13131935891627658 + 0.9689404759173665 * AlgebraConstant.I, 0.10764157750707277 - 0.038488908035408866 * AlgebraConstant.I, -0.7605308190317062 + 0.4119785252654601 * AlgebraConstant.I, -0.09712183746948519 + 0.036155931610674256 * AlgebraConstant.I, 0.003739510338355845 + 0.4910322610393366 * AlgebraConstant.I ); SU3 b = new SU3( 0.671500127639027 + 0.7392727634547986 * AlgebraConstant.I, 0.018353719975610416 + 0.0009182549015047939 * AlgebraConstant.I, -0.040341093124168115 - 0.024459226709268145 * AlgebraConstant.I, -0.003595329870842521 + 0.011339024383085235 * AlgebraConstant.I, 0.5491128634189678 + 0.6130727033953424 * AlgebraConstant.I, 0.07005362848802227 + 0.563531643161386 * AlgebraConstant.I, 0.007924807904311937 - 0.04857012809860661 * AlgebraConstant.I, 0.3699849579680355 + 0.43056979948404905 * AlgebraConstant.I, -0.08442219397132456 - 0.8174177707212459 * AlgebraConstant.I ); //Assert.IsTrue(a.TestEqual(a.U * a.D * a.U.Hermitian())); //Assert.IsTrue(b.TestEqual(b.U * b.D * b.U.Hermitian())); SU3 ax = a.ConjugateOn(b); SU3 bx = a * b * a.Hermitian(); CategoryOf.OnField.FMatrix wx = a.AsMatrix * b.AsMatrix * a.AsMatrix.Hermitian(); //Assert.IsTrue(wx.TestEqual(bx)); Console.WriteLine($"a = {a.PythonRepresentation}"); Console.WriteLine($"b = {b.PythonRepresentation}"); Console.WriteLine($"ax = {ax.PythonRepresentation}"); Console.WriteLine($"bx = {bx.PythonRepresentation}"); Console.WriteLine($"wx = {wx.PythonRepresentation}"); Assert.IsTrue(a.AsMatrix.Hermitian().IsEqualApprox(a.Hermitian())); Assert.IsTrue(bx.IsEqualApprox(ax)); Assert.IsTrue(bx.IsEqualApprox(wx)); Assert.IsTrue(ax.IsEqualApprox(wx)); } }