import unittest

import theano.tensor as T

from pymanopt import Problem
from pymanopt.manifolds import Sphere


class TestProblem(unittest.TestCase):
    def setUp(self):
        self.X = X = T.vector()
        self.cost = T.exp(T.sum(X**2))

        n = self.n = 15

        self.man = Sphere(n)

    def test_prepare(self):
        problem = Problem(self.man, self.cost)
        with self.assertRaises(ValueError):
            # Asking for the gradient of a Theano cost function without
            # specifying an argument for differentiation should raise an
            # exception.
            problem.grad

import unittest

import numpy as np
from numpy import random as rnd
import numpy.testing as np_testing
import theano.tensor as T

from pymanopt import Problem, TheanoFunction
from pymanopt.manifolds import Sphere


class TestProblem(unittest.TestCase):
    def setUp(self):
        self.X = X = T.vector()
        self.cost = TheanoFunction(T.exp(T.sum(X**2)), X)

        n = self.n = 15

        self.man = Sphere(n)

    def test_prepare(self):
        problem = Problem(self.man, self.cost)
        x = rnd.randn(self.n)
        np_testing.assert_allclose(2 * x * np.exp(np.sum(x ** 2)),
                                   problem.egrad(x))

Replace failing unit test due to backend changes
Replace failing unit test due to backend changes

Signed-off-by: Niklas Koep <342d5290239d9c5264c8f98185afedb99596601a@gmail.com>

  import unittest
  
+ import numpy as np
+ from numpy import random as rnd
+ import numpy.testing as np_testing
  import theano.tensor as T
  
- from pymanopt import Problem
+ from pymanopt import Problem, TheanoFunction
  from pymanopt.manifolds import Sphere
  
  
  class TestProblem(unittest.TestCase):
      def setUp(self):
          self.X = X = T.vector()
-         self.cost = T.exp(T.sum(X**2))
+         self.cost = TheanoFunction(T.exp(T.sum(X**2)), X)
  
          n = self.n = 15
  
          self.man = Sphere(n)
  
      def test_prepare(self):
          problem = Problem(self.man, self.cost)
+         x = rnd.randn(self.n)
+         np_testing.assert_allclose(2 * x * np.exp(np.sum(x ** 2)),
+                                    problem.egrad(x))
-         with self.assertRaises(ValueError):
-             # Asking for the gradient of a Theano cost function without
-             # specifying an argument for differentiation should raise an
-             # exception.
-             problem.grad
  
Replace failing unit test due to backend changes
## Code Before:
import unittest

import theano.tensor as T

from pymanopt import Problem
from pymanopt.manifolds import Sphere


class TestProblem(unittest.TestCase):
    def setUp(self):
        self.X = X = T.vector()
        self.cost = T.exp(T.sum(X**2))

        n = self.n = 15

        self.man = Sphere(n)

    def test_prepare(self):
        problem = Problem(self.man, self.cost)
        with self.assertRaises(ValueError):
            # Asking for the gradient of a Theano cost function without
            # specifying an argument for differentiation should raise an
            # exception.
            problem.grad

## Instruction:
Replace failing unit test due to backend changes
## Code After:
import unittest

import numpy as np
from numpy import random as rnd
import numpy.testing as np_testing
import theano.tensor as T

from pymanopt import Problem, TheanoFunction
from pymanopt.manifolds import Sphere


class TestProblem(unittest.TestCase):
    def setUp(self):
        self.X = X = T.vector()
        self.cost = TheanoFunction(T.exp(T.sum(X**2)), X)

        n = self.n = 15

        self.man = Sphere(n)

    def test_prepare(self):
        problem = Problem(self.man, self.cost)
        x = rnd.randn(self.n)
        np_testing.assert_allclose(2 * x * np.exp(np.sum(x ** 2)),
                                   problem.egrad(x))
