def test_fit_parameters_two_clusters(self):
        # A sample with four contigs, each with three data points.
        
        x = np.log(np.array([[0.5,3.0,2.0],[3.0,1.0,1.0],
                             [2.5,1.5,1.0],[1.0,1.0,2.0]]))
        # two clusters, four contigs
        exp_clust = np.array([[0.7,0.3],[0.1,0.9],
                              [0.5,0.5],[0.2,0.8]])

        mu00 = (np.log(0.5)*0.7+np.log(3.0)*0.1+np.log(2.5)*0.5+np.log(1.0)*0.2)/1.5
        mu10 = (np.log(3.0)*0.7+np.log(1.0)*0.1+np.log(1.5)*0.5+np.log(1.0)*0.2)/1.5
        mu20 = (np.log(2.0)*0.7+np.log(1.0)*0.1+np.log(1.0)*0.5+np.log(2.0)*0.2)/1.5

        mu01 = (np.log(0.5)*0.3+np.log(3.0)*0.9+np.log(2.5)*0.5+np.log(1.0)*0.8)/2.5
        mu11 = (np.log(3.0)*0.3+np.log(1.0)*0.9+np.log(1.5)*0.5+np.log(1.0)*0.8)/2.5
        mu21 = (np.log(2.0)*0.3+np.log(1.0)*0.9+np.log(1.0)*0.5+np.log(2.0)*0.8)/2.5
        mu,sigma = model.fit_parameters(x,expected_clustering = exp_clust)
        assert_almost_equal(mu[0,0],mu00)
        assert_almost_equal(mu[0,1],mu10)
        assert_almost_equal(mu[0,2],mu20)

        assert_almost_equal(mu[1,0],mu01)
        assert_almost_equal(mu[1,1],mu11)
        assert_almost_equal(mu[1,2],mu21)

        sigma_test0 = np.array([((x[i,0] - mu[0,0])**2 + (x[i,1] -mu[0,1])**2 + (x[i,2]-mu[0,2])**2)*exp_clust[i,0] for i in range(4)]).sum()
        sigma_test0 /= 1.5

        sigma_test1 = np.array([((x[i,0] - mu[1,0])**2 + (x[i,1] -mu[1,1])**2 + (x[i,2]-mu[1,2])**2)*exp_clust[i,1] for i in range(4)]).sum()
        sigma_test1 /= 2.5
        
        assert_almost_equal(sigma[0],sigma_test0)
        assert_almost_equal(sigma[1],sigma_test1)
    def test_fit_parameters_single_cluster(self):
        # A sample with two contigs, each with three data points.
        
        x = np.log(np.array([[0.5,3.0,2.0],[3.0,1.0,1.0]]))
        # one cluster, two contigs
        exp_clust = np.array([[1.0],[1.0]])
        mu0 = np.log(np.array([0.5,3.0])).sum()/2.0
        mu1 = np.log([3.0,1.0]).sum()/2.0
        mu2 = np.log([2.0,1.0]).sum()/2.0
        mu,sigma = model.fit_parameters(x,exp_clust)
        assert_equal(mu[0,0],mu0)
        assert_equal(mu[0,1],mu1)
        assert_equal(mu[0,2],mu2)

        assert_equal(mu.shape,(1,3))

        diff_vec = [(x[i,0] - mu0)**2 + (x[i,1] -mu1)**2 + (x[i,2]-mu2)**2 for i in range(2)]
        sigma_test = np.array(diff_vec).sum()

        sigma_test /= 2.0
        
        assert_equal(sigma[0],sigma_test)