Files
Skeleton.Test/tests/UnitaryConjugateTest.cs

119 lines
5.0 KiB
C#

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<C33> 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<IDim3>.OnField<Complex>.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));
}
}