Пример #1
0
def lbfgs_run(target_evaluator, use_bounds, lower_bound, upper_bound):
    minimizer = lbfgsb.minimizer(
        n=target_evaluator.n,
        #factr=1.e+1, XXX Affects speed significantly
        l=lower_bound,  # lower bound
        u=upper_bound,  # upper bound
        nbd=flex.int(target_evaluator.n,
                     use_bounds))  # flag to apply both bounds
    minimizer.error = None
    try:
        icall = 0
        while 1:
            icall += 1
            x, f, g = target_evaluator()
            #print "x,f:", ",".join(["%6.3f"%x_ for x_ in x]), f, icall
            have_request = minimizer.process(x, f, g)
            if (have_request):
                requests_f_and_g = minimizer.requests_f_and_g()
                continue
            assert not minimizer.requests_f_and_g()
            if (minimizer.is_terminated()): break
    except RuntimeError as e:
        minimizer.error = str(e)
    minimizer.n_calls = icall
    return minimizer
Пример #2
0
  def run_lbfgsb(O, iprint=-1):
    n = O.x.size()
    minimizer = lbfgsb.minimizer(
      n=n,
      m=5,
      l=O.l,
      u=O.u,
      nbd=O.nbd,
      enable_stp_init=True,
      factr=1.0e+7,
      pgtol=1.0e-5,
      iprint=iprint)

    f,g = O.compute_functional_and_gradients()
    while True:
      if (minimizer.process(O.x, f, g)):
        f, g = O.compute_functional_and_gradients()
      elif (minimizer.requests_stp_init()):
        new_stp = O.adjust_stp(
          stp=minimizer.relative_step_length_line_search(),
          csd=minimizer.current_search_direction())
        minimizer.set_relative_step_length_line_search(value=new_stp)
      elif (minimizer.is_terminated()):
        O.callback_after_step_no_counting(suffix=" FINAL")
        break
      else:
        O.callback_after_step(minimizer=None)
    return minimizer
Пример #3
0
 def __init__(self, calculator, max_iterations=None):
     M = lbfgsb_core.minimizer(n=calculator.n,
                               l=calculator.lower_bound,
                               u=calculator.upper_bound,
                               nbd=calculator.bound_flags)
     M.error = None
     try:
         icall = 0
         while 1:
             icall += 1
             x, f, g = calculator()  # x will be changed in place
             if (icall == 1): f_start = f
             have_request = M.process(x, f, g)
             if (have_request):
                 requests_f_and_g = M.requests_f_and_g()
                 continue
             assert not M.requests_f_and_g()
             if (M.is_terminated()): break
             if (max_iterations is not None and icall > max_iterations):
                 break
     except RuntimeError as e:
         M.error = str(e)
     M.n_calls = icall
     # items to store
     self.M = M
     self.f_start = f_start
     self.f = f
     self.nfev = self.M.n_calls
     self.calculator = calculator
Пример #4
0
  def __init__(self, current_x=None, parameterization=None, refinery=None,
               ISIGI = None, indices = None, bins = None, out=None,
               min_iterations=0, max_calls=1000, max_drop_eps=1.e-10,
               show_finite_differences = False):
    adopt_init_args(self, locals())
    self.n = current_x.size()
    self.x = current_x
    from scitbx import lbfgsb
    l = flex.double(self.n, 1e-8)

    if len(l) > 3:
      l[7] = 0 # eta
      l[8] = 1e-15 # g*0
      l[9] = 1e-15 # g*1

    self.minimizer = lbfgsb.minimizer(
      n = self.n,
      l = l,
      u = flex.double(self.n, 0),
      nbd = flex.int(self.n, 1),
    )
    while True:
      self.compute_functional_and_gradients()
      if self.minimizer.process(self.x, self.f, self.g):
        pass
      elif self.minimizer.is_terminated():
        break
Пример #5
0
def lbfgs_run(target_evaluator,
              use_bounds,
              lower_bound,
              upper_bound,
              max_iterations=None):
    minimizer = lbfgsb.minimizer(
        n=target_evaluator.n,
        #factr=1.e+1, XXX Affects speed significantly
        l=lower_bound,  # lower bound
        u=upper_bound,  # upper bound
        nbd=flex.int(target_evaluator.n,
                     use_bounds))  # flag to apply both bounds
    minimizer.error = None
    try:
        icall = 0
        while 1:
            icall += 1
            x, f, g = target_evaluator()
            #print "x,f:", ",".join(["%6.3f"%x_ for x_ in x]), f, icall
            have_request = minimizer.process(x, f, g)
            if (have_request):
                requests_f_and_g = minimizer.requests_f_and_g()
                continue
            assert not minimizer.requests_f_and_g()
            if (minimizer.is_terminated()): break
            # XXX temp fix for python3 failure (run_lbfgs in tncs)
            # Failure is that max_iterations is None
            # temp fix is to break if max_iterations is None or icall>max_iterations
            #if(icall>max_iterations): break
            if ((max_iterations is None) or (icall > max_iterations)): break
    except RuntimeError as e:
        minimizer.error = str(e)
    minimizer.n_calls = icall
    return minimizer
Пример #6
0
  def run_lbfgsb(O, iprint=-1):
    n = O.x.size()
    minimizer = lbfgsb.minimizer(
      n=n,
      m=5,
      l=O.l,
      u=O.u,
      nbd=O.nbd,
      enable_stp_init=True,
      factr=1.0e+7,
      pgtol=1.0e-5,
      iprint=iprint)

    f,g = O.compute_functional_and_gradients()
    while True:
      if (minimizer.process(O.x, f, g)):
        f, g = O.compute_functional_and_gradients()
      elif (minimizer.requests_stp_init()):
        new_stp = O.adjust_stp(
          stp=minimizer.relative_step_length_line_search(),
          csd=minimizer.current_search_direction())
        minimizer.set_relative_step_length_line_search(value=new_stp)
      elif (minimizer.is_terminated()):
        O.callback_after_step_no_counting(suffix=" FINAL")
        break
      else:
        O.callback_after_step(minimizer=None)
    return minimizer
Пример #7
0
    def __init__(self,
                 current_x=None,
                 parameterization=None,
                 refinery=None,
                 ISIGI=None,
                 indices=None,
                 bins=None,
                 out=None,
                 min_iterations=0,
                 max_calls=1000,
                 max_drop_eps=1.e-10,
                 show_finite_differences=False):
        adopt_init_args(self, locals())
        self.n = current_x.size()
        self.x = current_x

        if False:
            self.diag_mode = "always"
            from scitbx import lbfgs
            self.minimizer = lbfgs.run(
                target_evaluator=self,
                termination_params=lbfgs.termination_parameters(
                    traditional_convergence_test=False,
                    drop_convergence_test_max_drop_eps=max_drop_eps,
                    min_iterations=min_iterations,
                    max_iterations=None,
                    max_calls=max_calls),
                exception_handling_params=lbfgs.exception_handling_parameters(
                    ignore_line_search_failed_rounding_errors=True,
                    ignore_line_search_failed_step_at_lower_bound=
                    True,  #the only change from default
                    ignore_line_search_failed_step_at_upper_bound=False,
                    ignore_line_search_failed_maxfev=False,
                    ignore_line_search_failed_xtol=False,
                    ignore_search_direction_not_descent=False))
        else:
            from scitbx import lbfgsb
            l = flex.double(self.n, 1e-8)

            if len(l) > 3:
                for p in xrange(7, len(l)):
                    l[p] = 1e-15  # g*

            self.minimizer = lbfgsb.minimizer(
                n=self.n,
                l=l,
                u=flex.double(self.n, 0),
                nbd=flex.int(self.n, 1),
            )
            while True:
                self.compute_functional_and_gradients()
                if self.minimizer.process(self.x, self.f, self.g):
                    pass
                elif self.minimizer.is_terminated():
                    break
Пример #8
0
    def run_minimizer(self):
        comm = self.mpi_helper.comm
        MPI = self.mpi_helper.MPI
        size = self.mpi_helper.size
        self.n = 3
        self.x = flex.double([self.sfac, self.sb, self.sadd])
        self.logger.main_log(
            'Initial Parameter Estimates = sdfac: %.2f  sdb: %.2f  sdadd: %.2f'
            % (self.sfac, self.sb, self.sadd))
        if True:
            from scitbx import lbfgsb
            l = flex.double(self.n, 1e-8)

            if len(l) > 3:
                for p in range(7, len(l)):
                    l[p] = 1e-15  # g*

            if self.mpi_helper.rank == 0:
                self.minimizer = lbfgsb.minimizer(
                    n=self.n,
                    l=l,
                    u=flex.double(self.n, 0),
                    nbd=flex.int(self.n, 1),
                )
            while True:
                self.compute_functional_and_gradients()
                status = -1
                if self.mpi_helper.rank == 0:
                    if self.minimizer.process(self.x, self.f, self.g):
                        self.logger.main_log(
                            'intermediate minimization results = functional: %.2f  sdfac: %.2f sdb: %.2f sdadd: %.2f'
                            % (self.f, self.x[0], self.x[1], self.x[2]))
                        status = 1
                        self.sfac = self.x[0]
                        self.sb = self.x[1]
                        self.sadd = self.x[2]
                    elif self.minimizer.is_terminated():
                        status = 0

                comm.barrier()
                status = comm.bcast(status, root=0)
                if status == 1:
                    self.sfac = comm.bcast(self.sfac, root=0)
                    self.sb = comm.bcast(self.sb, root=0)
                    self.sadd = comm.bcast(self.sadd, root=0)
                    pass
                if status == 0:
                    break
        if self.mpi_helper.rank == 0:
            self.logger.main_log(
                'FINAL SDFAC VALUES = functional: %.2f  sdfac: %.2f sdb: %.2f sdadd: %.2f'
                % (self.f, self.x[0], self.x[1], self.x[2]))
Пример #9
0
 def run(self):
     l = flex.double(self.n, 0)
     u = flex.double(self.n, 0)
     nbd = flex.int(self.n, 0)
     if (self.apply_lower_bounds_on_b):
         bound_flags = self.gaussian_fit.bound_flags(False, True)
         nbd.set_selected(bound_flags, 1)
     self.minimizer = lbfgsb.minimizer(n=self.n,
                                       m=self.lbfgsb_m,
                                       l=l,
                                       u=u,
                                       nbd=nbd,
                                       iprint=self.iprint)
     self.x = flex.double(self.n, 0)
     self.f = 0
     self.g = flex.double(self.n, 0)
     while True:
         if (self.minimizer.process(self.x, self.f, self.g,
                                    self.use_fortran_library)):
             self.compute_fg()
         elif (self.minimizer.is_terminated()):
             break
Пример #10
0
def lbfgs_run(target_evaluator, use_bounds, lower_bound, upper_bound):
  minimizer = lbfgsb.minimizer(
    n   = target_evaluator.n,
    #factr=1.e+1, XXX Affects speed significantly
    l   = lower_bound, # lower bound
    u   = upper_bound, # upper bound
    nbd = flex.int(target_evaluator.n, use_bounds)) # flag to apply both bounds
  minimizer.error = None
  try:
    icall = 0
    while 1:
      icall += 1
      x, f, g = target_evaluator()
      #print "x,f:", ",".join(["%6.3f"%x_ for x_ in x]), f, icall
      have_request = minimizer.process(x, f, g)
      if(have_request):
        requests_f_and_g = minimizer.requests_f_and_g()
        continue
      assert not minimizer.requests_f_and_g()
      if(minimizer.is_terminated()): break
  except RuntimeError, e:
    minimizer.error = str(e)
Пример #11
0
 def run(self):
   l = flex.double(self.n, 0)
   u = flex.double(self.n, 0)
   nbd = flex.int(self.n, 0)
   if (self.apply_lower_bounds_on_b):
     bound_flags = self.gaussian_fit.bound_flags(False, True)
     nbd.set_selected(bound_flags, 1)
   self.minimizer = lbfgsb.minimizer(
     n=self.n,
     m=self.lbfgsb_m,
     l=l,
     u=u,
     nbd=nbd,
     iprint=self.iprint)
   self.x = flex.double(self.n, 0)
   self.f = 0
   self.g = flex.double(self.n, 0)
   while True:
     if (self.minimizer.process(self.x, self.f, self.g,
                                self.use_fortran_library)):
       self.compute_fg()
     elif (self.minimizer.is_terminated()):
       break
Пример #12
0
  def __init__(self,f,s,c,x,fls):
    self.f = f
    self.s = s
    self.xx = x
    self.x = set_negative_to_zero(c.deep_copy())
    self.n = len(c)
    self.fls = fls
    self.max_d = None
    self.dx = 1.0e-6
    self.tdx = 2.0*self.dx

    assert (len(self.f) == len(self.s))

    l = flex.double(self.n, 0)
    u = flex.double(self.n, 0)
    nbd = flex.int(self.n, 1)
    self.minimizer = lbfgsb.minimizer(n=self.n, m=20, l=l, u=u, nbd=nbd)
    self.fc, self.g = self.compute_functional_and_gradients()
    while True:
      if (self.minimizer.process(self.x, self.fc, self.g)):
        self.fc, self.g = self.compute_functional_and_gradients()
      elif (self.minimizer.is_terminated()):
        break
Пример #13
0
def exercise_minimizer_interface():
    n = 25
    m = 5
    l = flex.double(n, -1)
    u = flex.double(n, 1)
    nbd = flex.int(n)
    factr = 1.0e7
    pgtol = 1.0e-5
    iprint = -1
    for enable_stp_init in [False, True]:
        minimizer = lbfgsb.ext.minimizer(n, m, l, u, nbd, enable_stp_init, factr, pgtol, iprint)
        assert minimizer.n() == n
        assert minimizer.m() == m
        assert minimizer.l().id() == l.id()
        assert minimizer.u().id() == u.id()
        assert minimizer.nbd().id() == nbd.id()
        assert minimizer.enable_stp_init() == enable_stp_init
        assert eps_eq(minimizer.factr(), factr)
        assert eps_eq(minimizer.pgtol(), pgtol)
        assert eps_eq(minimizer.iprint(), iprint)
        assert not minimizer.requests_f_and_g()
        assert not minimizer.is_terminated()
        assert minimizer.task() == "START"
        x = flex.double(n, 0)
        f = 1
        g = flex.double(n, -1)
        assert minimizer.process(x, f, g, False)
        assert minimizer.task() == "FG_START"
        assert minimizer.f() == 0
        if not enable_stp_init:
            try:
                minimizer.requests_stp_init()
            except RuntimeError, e:
                assert str(e).endswith(": SCITBX_ASSERT(enable_stp_init()) failure.")
            else:
                raise Exception_expected
        else:
            assert not minimizer.process(x, f, g)
            assert minimizer.requests_stp_init()
            assert approx_equal(minimizer.relative_step_length_line_search(), 0.2)
            assert approx_equal(minimizer.current_search_direction(), [1] * n)
            minimizer.set_relative_step_length_line_search(value=0.3)
            assert approx_equal(minimizer.relative_step_length_line_search(), 0.3)
        assert minimizer.process(x, f, g)
        assert minimizer.f() == 1
        assert minimizer.task() == "FG_LNSRCH"
        assert not minimizer.is_terminated()
        if not enable_stp_init:
            assert approx_equal(x, [0.2] * n)
        else:
            assert approx_equal(x, [0.3] * n)
        minimizer.request_stop()
        assert not minimizer.process(x, f, g)
        assert minimizer.task() == "STOP: NO RESTORE"
        minimizer.request_stop_with_restore()
        assert minimizer.task() == "STOP: CPU"
        minimizer.request_restart()
        assert not minimizer.requests_f_and_g()
        assert not minimizer.is_terminated()
        assert minimizer.task() == "START"
        minimizer = lbfgsb.minimizer(n=n)
        assert minimizer.l().size() == n
        assert minimizer.u().size() == n
        assert minimizer.nbd().size() == n
        assert minimizer.nbd().all_eq(0)
Пример #14
0
def driver1(use_fortran_library=False):
    n = 25
    nbd = flex.int(n)
    x = flex.double(n)
    l = flex.double(n)
    u = flex.double(n)
    g = flex.double(n)
    if "--Verbose" in sys.argv[1:]:
        iprint = 1000
    else:
        iprint = -1
    for i in xrange(0, n, 2):
        nbd[i] = 2
        l[i] = 1.0e0
        u[i] = 1.0e2
    for i in xrange(1, n, 2):
        nbd[i] = 2
        l[i] = -1.0e2
        u[i] = 1.0e2
    for i in xrange(n):
        x[i] = 3.0e0
    minimizer = lbfgsb.minimizer(n=n, m=5, l=l, u=u, nbd=nbd, factr=1.0e7, pgtol=1.0e-5, iprint=iprint)
    f = 0
    while True:
        if minimizer.process(x, f, g, use_fortran_library):
            f = 0.25e0 * (x[0] - 1.0e0) ** 2
            for i in xrange(1, n):
                f = f + (x[i] - x[i - 1] ** 2) ** 2
            f = 4.0e0 * f
            t1 = x[1] - x[0] ** 2
            g[0] = 2.0e0 * (x[0] - 1.0e0) - 1.6e1 * x[0] * t1
            for i in xrange(1, n - 1):
                t2 = t1
                t1 = x[i + 1] - x[i] ** 2
                g[i] = 8.0e0 * t2 - 1.6e1 * x[i] * t1
            g[n - 1] = 8.0e0 * t1
        elif minimizer.is_terminated():
            break
    assert minimizer.task() == "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
    assert minimizer.f_list().size() == minimizer.n_iteration() + 1
    assert minimizer.f_list()[-1] == minimizer.f()
    assert minimizer.f_list()[-2] == minimizer.f_previous_iteration()
    assert not minimizer.initial_x_replaced_by_projection()
    assert minimizer.is_constrained()
    assert minimizer.is_fully_constrained()
    if "--soft" not in sys.argv[1:]:
        assert minimizer.n_fg_evaluations_total() == 27
        assert minimizer.n_fg_evaluations_iter() == 1
        assert minimizer.n_intervals_explored_cauchy_search_total() == 48
        assert minimizer.n_intervals_explored_cauchy_search_iter() == 1
        assert minimizer.n_skipped_bfgs_updates_total() == 0
        assert minimizer.n_bfgs_updates_total() == 22
        assert minimizer.subspace_argmin_is_within_box() == 1
        assert minimizer.n_free_variables() == 25
        assert minimizer.n_active_constraints() == 0
        assert minimizer.n_variables_leaving_active_set() == 0
        assert minimizer.n_variables_entering_active_set() == 0
        assert eps_eq(minimizer.theta_bfgs_matrix_current(), 23.2674689856)
        assert minimizer.f_previous_iteration() >= 0
        assert minimizer.floating_point_epsilon() == scitbx.math.floating_point_epsilon_double_get()
        assert eps_eq(
            minimizer.factr_times_floating_point_epsilon(), minimizer.factr() * minimizer.floating_point_epsilon()
        )
        assert eps_eq(minimizer.two_norm_line_search_direction_vector(), 1.56259327735e-05)
        assert eps_eq(
            minimizer.two_norm_line_search_direction_vector_sq(), minimizer.two_norm_line_search_direction_vector() ** 2
        )
        assert minimizer.accumulated_time_cauchy_search() > -0.02
        assert minimizer.accumulated_time_subspace_minimization() > -0.02
        assert minimizer.accumulated_time_line_search() > -0.02
        assert eps_eq(minimizer.slope_line_search_function_current(), 9.31496613169e-10)
        assert eps_eq(minimizer.slope_line_search_function_start(), -3.6762390377e-09)
        assert eps_eq(minimizer.maximum_relative_step_length(), 1.37484166517)
        assert eps_eq(minimizer.relative_step_length_line_search(), 1.0)
        assert eps_eq(minimizer.infinity_norm_projected_gradient(), 0.000143369780806)
Пример #15
0
def exercise_minimizer_interface():
    n = 25
    m = 5
    l = flex.double(n, -1)
    u = flex.double(n, 1)
    nbd = flex.int(n)
    factr = 1.0e+7
    pgtol = 1.0e-5
    iprint = -1
    for enable_stp_init in [False, True]:
        minimizer = lbfgsb.ext.minimizer(n, m, l, u, nbd, enable_stp_init,
                                         factr, pgtol, iprint)
        assert minimizer.n() == n
        assert minimizer.m() == m
        assert minimizer.l().id() == l.id()
        assert minimizer.u().id() == u.id()
        assert minimizer.nbd().id() == nbd.id()
        assert minimizer.enable_stp_init() == enable_stp_init
        assert eps_eq(minimizer.factr(), factr)
        assert eps_eq(minimizer.pgtol(), pgtol)
        assert eps_eq(minimizer.iprint(), iprint)
        assert not minimizer.requests_f_and_g()
        assert not minimizer.is_terminated()
        assert minimizer.task() == "START"
        x = flex.double(n, 0)
        f = 1
        g = flex.double(n, -1)
        assert minimizer.process(x, f, g, False)
        assert minimizer.task() == "FG_START"
        assert minimizer.f() == 0
        if (not enable_stp_init):
            try:
                minimizer.requests_stp_init()
            except RuntimeError as e:
                assert str(e).endswith(
                    ": SCITBX_ASSERT(enable_stp_init()) failure.")
            else:
                raise Exception_expected
        else:
            assert not minimizer.process(x, f, g)
            assert minimizer.requests_stp_init()
            assert approx_equal(minimizer.relative_step_length_line_search(),
                                0.2)
            assert approx_equal(minimizer.current_search_direction(), [1] * n)
            minimizer.set_relative_step_length_line_search(value=0.3)
            assert approx_equal(minimizer.relative_step_length_line_search(),
                                0.3)
        assert minimizer.process(x, f, g)
        assert minimizer.f() == 1
        assert minimizer.task() == "FG_LNSRCH"
        assert not minimizer.is_terminated()
        if (not enable_stp_init):
            assert approx_equal(x, [0.2] * n)
        else:
            assert approx_equal(x, [0.3] * n)
        minimizer.request_stop()
        assert not minimizer.process(x, f, g)
        assert minimizer.task() == "STOP: NO RESTORE"
        minimizer.request_stop_with_restore()
        assert minimizer.task() == "STOP: CPU"
        minimizer.request_restart()
        assert not minimizer.requests_f_and_g()
        assert not minimizer.is_terminated()
        assert minimizer.task() == "START"
        minimizer = lbfgsb.minimizer(n=n)
        assert minimizer.l().size() == n
        assert minimizer.u().size() == n
        assert minimizer.nbd().size() == n
        assert minimizer.nbd().all_eq(0)
Пример #16
0
def driver1(use_fortran_library=False):
    n = 25
    nbd = flex.int(n)
    x = flex.double(n)
    l = flex.double(n)
    u = flex.double(n)
    g = flex.double(n)
    if ("--Verbose" in sys.argv[1:]):
        iprint = 1000
    else:
        iprint = -1
    for i in range(0, n, 2):
        nbd[i] = 2
        l[i] = 1.0e0
        u[i] = 1.0e2
    for i in range(1, n, 2):
        nbd[i] = 2
        l[i] = -1.0e2
        u[i] = 1.0e2
    for i in range(n):
        x[i] = 3.0e0
    minimizer = lbfgsb.minimizer(n=n,
                                 m=5,
                                 l=l,
                                 u=u,
                                 nbd=nbd,
                                 factr=1.0e+7,
                                 pgtol=1.0e-5,
                                 iprint=iprint)
    f = 0
    while True:
        if (minimizer.process(x, f, g, use_fortran_library)):
            f = .25e0 * (x[0] - 1.e0)**2
            for i in range(1, n):
                f = f + (x[i] - x[i - 1]**2)**2
            f = 4.e0 * f
            t1 = x[1] - x[0]**2
            g[0] = 2.e0 * (x[0] - 1.e0) - 1.6e1 * x[0] * t1
            for i in range(1, n - 1):
                t2 = t1
                t1 = x[i + 1] - x[i]**2
                g[i] = 8.e0 * t2 - 1.6e1 * x[i] * t1
            g[n - 1] = 8.e0 * t1
        elif (minimizer.is_terminated()):
            break
    assert minimizer.task(
    ) == "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
    assert minimizer.f_list().size() == minimizer.n_iteration() + 1
    assert minimizer.f_list()[-1] == minimizer.f()
    assert minimizer.f_list()[-2] == minimizer.f_previous_iteration()
    assert not minimizer.initial_x_replaced_by_projection()
    assert minimizer.is_constrained()
    assert minimizer.is_fully_constrained()
    if ("--soft" not in sys.argv[1:]):
        assert minimizer.n_fg_evaluations_total() == 27
        assert minimizer.n_fg_evaluations_iter() == 1
        assert minimizer.n_intervals_explored_cauchy_search_total() == 48
        assert minimizer.n_intervals_explored_cauchy_search_iter() == 1
        assert minimizer.n_skipped_bfgs_updates_total() == 0
        assert minimizer.n_bfgs_updates_total() == 22
        assert minimizer.subspace_argmin_is_within_box() == 1
        assert minimizer.n_free_variables() == 25
        assert minimizer.n_active_constraints() == 0
        assert minimizer.n_variables_leaving_active_set() == 0
        assert minimizer.n_variables_entering_active_set() == 0
        assert eps_eq(minimizer.theta_bfgs_matrix_current(), 23.2674689856)
        assert minimizer.f_previous_iteration() >= 0
        assert minimizer.floating_point_epsilon() \
            == scitbx.math.floating_point_epsilon_double_get()
        assert eps_eq(minimizer.factr_times_floating_point_epsilon(),
                      minimizer.factr() * minimizer.floating_point_epsilon())
        assert eps_eq(minimizer.two_norm_line_search_direction_vector(),
                      1.56259327735e-05)
        assert eps_eq(minimizer.two_norm_line_search_direction_vector_sq(),
                      minimizer.two_norm_line_search_direction_vector()**2)
        assert minimizer.accumulated_time_cauchy_search() > -0.02
        assert minimizer.accumulated_time_subspace_minimization() > -0.02
        assert minimizer.accumulated_time_line_search() > -0.02
        assert eps_eq(minimizer.slope_line_search_function_current(),
                      9.31496613169e-10)
        assert eps_eq(minimizer.slope_line_search_function_start(),
                      -3.6762390377e-09)
        assert eps_eq(minimizer.maximum_relative_step_length(), 1.37484166517)
        assert eps_eq(minimizer.relative_step_length_line_search(), 1.0)
        assert eps_eq(minimizer.infinity_norm_projected_gradient(),
                      0.000143369780806)