def test_history(self):
     x0 = -np.array([1.3, 2.7])
     opt = LBFGS(self.oracle,
                 x0,
                 memory_size=10,
                 line_search_options={
                     'method': 'Constant',
                     'c': 1.0
                 },
                 tolerance=1e-6)
     opt.run(10)
     x_min = opt.hist['x_star']
     func_steps = [
         25.635000000000005, 22.99, -9.3476294733722725,
         -9.4641732176886055, -9.5
     ]
     grad_norm_steps = [
         11.629703349613008, 11.4, 0.55751193505619512, 0.26830541958992876,
         0.0
     ]
     time_steps = [0.0] * 5  # Dummy values
     x_steps = [
         np.array([-1.3, -2.7]),
         np.array([1.0, 8.7]),
         np.array([0.45349973, 3.05512941]),
         np.array([0.73294321, 3.01292737]),
         np.array([0.99999642, 2.99998814])
     ]
     true_history = dict(grad_norm=grad_norm_steps,
                         time=time_steps,
                         x=x_steps,
                         func=func_steps)
     check_equal_histories(opt.hist, true_history)
    def test_quality(self):
        opt = LBFGS(self.oracle, self.x0, tolerance=1e-5)
        opt.run(5)
        x_min = opt.hist['x_star']
        # x_min, message, _ = LBFGS(self.oracle, self.x0, tolerance=1e-5)
        f_min = self.oracle.func(x_min)

        g_k_norm_sqr = norm(self.A.dot(x_min) - self.b, 2)**2
        g_0_norm_sqr = norm(self.A.dot(self.x0) - self.b, 2)**2
        self.assertLessEqual(g_k_norm_sqr, 1e-5 * g_0_norm_sqr)
        self.assertLessEqual(abs(f_min - self.f_star), 1e-5 * g_0_norm_sqr)
 def test_max_iter(self):
     """Check if argument `max_iter` is supported."""
     opt = LBFGS(self.oracle, self.x0)
     opt.run(max_iter=0)
 def test_default(self):
     """Check if everything works correctly with default parameters."""
     opt = LBFGS(self.oracle, self.x0)
     opt.run()