def setUp(self):
        self.link = LinearInterpolation()

        shape  = (4,5)
        self.x1 = numpy.random.uniform(-1, 1, shape).astype(numpy.float32)
        self.x2 = numpy.random.uniform(-1, 1, shape).astype(numpy.float32)
        self.w = self.link.W.data.reshape(())
        self.gy = numpy.random.uniform(
            -1, 1, (shape)).astype(numpy.float32)
        self.y = sigmoid(self.w) * self.x1 + (1-sigmoid(self.w)) * self.x2
class TestLinearInterpolation(unittest.TestCase):


    def setUp(self):
        self.link = LinearInterpolation()

        shape  = (4,5)
        self.x1 = numpy.random.uniform(-1, 1, shape).astype(numpy.float32)
        self.x2 = numpy.random.uniform(-1, 1, shape).astype(numpy.float32)
        self.w = self.link.W.data.reshape(())
        self.gy = numpy.random.uniform(
            -1, 1, (shape)).astype(numpy.float32)
        self.y = sigmoid(self.w) * self.x1 + (1-sigmoid(self.w)) * self.x2

    def check_forward(self, x1_data, x2_data):
        x1 = chainer.Variable(x1_data)
        x2 = chainer.Variable(x2_data)
        y  = self.link(x1, x2)
        self.assertEqual(y.data.dtype, numpy.float32)
        gradient_check.assert_allclose(self.y, y.data)

    @condition.retry(3)
    def test_forward_cpu(self):
        self.check_forward(self.x1, self.x2)

    @attr.gpu
    @condition.retry(3)
    def test_forward_gpu(self):
        self.link.to_gpu()
        self.check_forward(cuda.to_gpu(self.x1), cuda.to_gpu(self.x2))

    def check_backward(self, x1_data, x2_data, gy_data):
        gradient_check.check_backward(self.link, (x1_data, x2_data), gy_data, eps=1e-2, atol=1e-4)

    @condition.retry(3)
    def test_backward_cpu(self):
        self.check_backward(self.x1, self.x2, self.gy)

    @attr.gpu
    @condition.retry(3)
    def test_backward_gpu(self):
        self.link.to_gpu()
        self.check_backward(cuda.to_gpu(self.x1), cuda.to_gpu(self.x2), cuda.to_gpu(self.gy))