Exemplo n.º 1
0
    def parity_conjugate(self):
        """Reflect modes along all axes

        See "Gravitational-wave modes from precessing black-hole binaries" by
        Boyle et al. (2014) for more details.

        """
        if self.dataType == UnknownDataType:
            raise ValueError(
                f"Cannot compute parity type for {self.data_type_string}.")
        W = self[:, :
                 0]  # W without `data`, and `ells`=(0,-1); different from `self.copy_without_data()`
        W.data = np.empty_like(self.data)
        W.ells = self.ells
        W.frame = np.parity_conjugate(self.frame)
        s = self.spin_weight
        for ell in range(W.ell_min, W.ell_max + 1):
            lm_indices = [
                sf.LM_index(ell, m, W.ell_min) for m in range(-ell, ell + 1)
                if ((ell + s + m) % 2) == 0
            ]
            W.data[:, lm_indices] = np.conjugate(
                self.data[:, list(reversed(lm_indices))])
            lm_indices = [
                sf.LM_index(ell, m, W.ell_min) for m in range(-ell, ell + 1)
                if ((ell + s + m) % 2) != 0
            ]
            W.data[:, lm_indices] = -np.conjugate(
                self.data[:, list(reversed(lm_indices))])
        W.__history_depth__ -= 1
        W._append_history(f"{W} = {self}.parity_conjugate")
        return W
Exemplo n.º 2
0
def test_quaternion_parity_conjugates(Qs):
    for q in Qs[Qs_finite]:
        assert q.x_parity_conjugate() == np.quaternion(q.w, q.x, -q.y, -q.z)
        assert q.y_parity_conjugate() == np.quaternion(q.w, -q.x, q.y, -q.z)
        assert q.z_parity_conjugate() == np.quaternion(q.w, -q.x, -q.y, q.z)
        assert q.parity_conjugate() == np.quaternion(q.w, q.x, q.y, q.z)
    assert np.array_equal(np.x_parity_conjugate(Qs[Qs_finite]),
                          np.array([q.x_parity_conjugate() for q in Qs[Qs_finite]]))
    assert np.array_equal(np.y_parity_conjugate(Qs[Qs_finite]),
                          np.array([q.y_parity_conjugate() for q in Qs[Qs_finite]]))
    assert np.array_equal(np.z_parity_conjugate(Qs[Qs_finite]),
                          np.array([q.z_parity_conjugate() for q in Qs[Qs_finite]]))
    assert np.array_equal(np.parity_conjugate(Qs[Qs_finite]), np.array([q.parity_conjugate() for q in Qs[Qs_finite]]))