コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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)