def testConeModelPredictPositiveEpsilon(self):
     matrix = np.array([[1,0],[0,1]])
     model = ConeModel(matrix, 0.5)
     self.assertEqual(model.predict([[0,0],
                                     [0,1],
                                     [1,0],
                                     [1,1]]),
                      [1,1,1,1])
class ArtificialData:
    def __init__(self, data_dims, cone_dims, size=3000):
        self.data_dims = data_dims
        self.cone_dims = cone_dims
        self.size = size

    def generate(self, noise=0.0, epsilon=0.0):
        rand_array =  random.random_sample(self.data_dims*self.cone_dims)*2 - 1
        self.cone = rand_array.reshape( (self.cone_dims, self.data_dims) )
        self.data = []
        self.target = []
        cone_inv = pinv(self.cone)
        self.model = ConeModel(self.cone, epsilon)
        for i in xrange(self.size):
            # Generate positive data half the time
            if random.random_sample() > 0.5:
                v = random.random_sample(self.cone_dims)
                v = np.array(np.dot(cone_inv, v))
            else:
                v = random.random_sample(self.data_dims)*2 - 1.0
            if random.random_sample() < noise:
                self.data.append(-v)
            else:
                self.data.append(v)
            self.target.append(self.model.predict([v])[0])
        self.data = np.array(self.data)
        self.target = np.array(self.target)