def get_fermion_mass_eigenstates_from_a2(a2, potential, tolerance=1e-6): """Extracts spin-1/2 fermion m^2/m0^2 from A2.""" a3 = scalar_sector.get_a3_56x56_from_a2( a2, sqrt2=mpmath.sqrt(mpmath.mpf(2)), einsum=opt_einsum.contract, conjugate=lambda a: numpy.array([z.conjugate() for z in a.reshape(-1)] ).reshape(a.shape)) na3 = a3.astype(numpy.complex128) normalized_a3_sq = numpy.einsum('ij,ik->jk', na3, na3.conjugate()) * ( -6 / float(potential)) # Real-Symmetric. assert numpy.allclose(normalized_a3_sq, normalized_a3_sq.T.conjugate()) eigvals, eigvecs = numpy.linalg.eigh(normalized_a3_sq) assert numpy.allclose(eigvals, eigvals.real) assert numpy.allclose(numpy.dot(eigvecs, eigvecs.T.conjugate()), numpy.eye(56)) aggregated = symmetries.aggregate_eigenvectors(eigvals, eigvecs, tolerance=tolerance) spaces = [numpy.stack(eigvecs, axis=-1) for _, eigvecs in aggregated] assert all( numpy.allclose(numpy.eye(space.shape[-1]), numpy.einsum('ij,ik->jk', space, space.conjugate())) for space in spaces) return aggregated
def get_gravitino_mass_eigenstates_from_a1(a1, potential, tolerance=1e-6): """Extracts gravitino m^2/m0^2 from A1.""" na1 = a1.astype(numpy.complex128) normalized_a1_sq = numpy.einsum( 'ij,ik->jk', na1, na1.conjugate()) * (-6 / float(potential)) assert numpy.allclose(normalized_a1_sq, normalized_a1_sq.T.conjugate()) eigvals, eigvecs = numpy.linalg.eigh(normalized_a1_sq) assert numpy.allclose(eigvals, eigvals.real) aggregated = symmetries.aggregate_eigenvectors(eigvals, eigvecs, tolerance=tolerance) spaces = [numpy.stack(eigvecs, axis=-1) for _, eigvecs in aggregated] assert all(numpy.allclose( numpy.eye(space.shape[-1]), numpy.einsum('ij,ik->jk', space, space.conjugate())) for space in spaces) return aggregated
def get_scalar_mass_eigenstates_from_mass_matrix(mass_matrix, tolerance=1e-6): """Extracts aggregated scalar masses-squared from the mass matrix.""" eigvals, eigvecs = numpy.linalg.eigh(mass_matrix) return symmetries.aggregate_eigenvectors(eigvals, eigvecs, tolerance=tolerance)