def testPhase(self):
        """Check that the Hopf map is invariant under multiplication 
        by a random phase."""

        X = hopf(self.psi)

        theta = random_vector(self.N) # Column vector of phases
        phase = hstack(np.exp(1j*theta), 2)

        self.assertTrue(is_float_equal(X, hopf(phase*self.psi)))
    def testInverse(self):
        """Check that Hopf map composed with its inverse yield the identity."""

        # Hopf composed with the inverse should give the identity exactly
        X1 = hopf(inverse_hopf(self.X)) 
        self.assertTrue(is_float_equal(X1, self.X))

        # Inverse hopf composed with Hopf gives the identity up to phase
        psi1 = inverse_hopf(hopf(self.psi))
        phases = psi1/self.psi

        # Test whether columns of phase matrix are equal
        self.assertTrue(is_float_equal(phases[:, 0], phases[:, 1]))
        # Test whether column elements have unit norm
        p = phases[:, 0]
        self.assertTrue(is_float_equal(p*p.conjugate(), np.ones(self.N)))